HEX
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.4.25
System: Windows NT DESKTOP-4TAV2RJ 10.0 build 19045 (Windows 10) AMD64
User: fred (0)
PHP: 8.4.25
Disabled: NONE
Upload Files
File: C:/Python311/Lib/site-packages/notebook/static/notebook_core.7213b2fe0eabee62279d.js.map
{"version":3,"file":"notebook_core.7213b2fe0eabee62279d.js?v=7213b2fe0eabee62279d","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACgG;AACjC;AACO;AAClB;AACpD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,8CAAgB,EAAE,oCAAsB;AACvD,eAAe,qCAAW;AAC1B;AACA,mFAAmF,wCAAc;AACjG,4BAA4B,mCAAO;AACnC;AACA;AACA;AACA,QAAQ,4BAAU,UAAU,sCAAoB,0HAA0H,wCAAc;AACxL,wCAAwC,WAAW;AACnD;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACwO;AAC7G;AAChE;AACmD;AAC9B;AACjC;AACI;AACmB;AACiB;AACxC;AACc;AACV;AACoB;AAC9B;AACV;AACG;AAClC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAW;AAC1B,eAAe,mBAAS,EAAE,6BAAe;AACzC;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA,4BAA4B,oCAA0B;AACtD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAI;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,kCAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,KAAK;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,KAAK;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,uBAAuB,sBAAI;AAC3B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,wBAAwB,KAAK;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,UAAU;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,KAAK;AAChF;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,4BAA4B;AAC5B;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,MAAM;AAC9E;AACA,gEAAgE,MAAM;AACtE,6BAA6B;AAC7B;AACA,qBAAqB;AACrB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,mBAAmB;AACtE;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,iBAAO;AACf,QAAQ,6BAAe;AACvB,QAAQ,qCAAW;AACnB,QAAQ,yBAAe;AACvB;AACA,eAAe,yBAAe;AAC9B,cAAc,0BAAgB;AAC9B;AACA;AACA,6BAA6B,oBAAU;AACvC,+BAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAU,UAAU,UAAU;AAC9D,iCAAiC,8BAAM;AACvC,4CAA4C,mBAAmB;AAC/D;AACA,oBAAoB,kCAAU;AAC9B;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,6DAA6D,UAAU;AACvE;AACA;AACA,0BAA0B,6BAAmB;AAC7C,iBAAiB,kCAAgB;AACjC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,wBAAwB,kCAAU,UAAU,YAAY;AACxD,yBAAyB,8BAAM;AAC/B,oCAAoC,mBAAmB;AACvD;AACA,YAAY,kCAAU;AACtB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kCAAU,UAAU,oBAAoB;AACpE,6BAA6B,8BAAM;AACnC,wCAAwC,mBAAmB;AAC3D;AACA,gBAAgB,kCAAU;AAC1B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,2CAA2C,wBAAc;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAAU;AACjC;AACA,2BAA2B,6BAAmB;AAC9C;AACA,wBAAwB,6BAAmB;AAC3C;AACA;AACA,wBAAwB,oBAAM;AAC9B;AACA;AACA,yBAAyB;AACzB,wBAAwB,oBAAM,YAAY,oCAAoC;AAC9E;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,yBAAyB,UAAU,mBAAmB;AACtD;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,6BAA6B,kCAAgB;AAC7C,qCAAqC,6BAAmB;AACxD,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,qBAAqB,kCAAgB;AACrC,6BAA6B,6BAAmB;AAChD,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,6BAAmB;AACjD;AACA,oBAAoB,6BAAmB;AACvC,oBAAoB,6BAAmB;AACvC,qBAAqB,4BAAU;AAC/B;AACA;AACA;AACA,wBAAwB,oBAAM;AAC9B,wBAAwB,oBAAM,YAAY,0BAA0B;AACpE;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAgB,EAAE,qCAAW;AAC5C,eAAe,6BAAe;AAC9B;AACA;AACA;AACA,6BAA6B,sCAAU,GAAG,oCAAoC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAW;AAC1B;AACA,6BAA6B,oBAAU;AACvC,+BAA+B,UAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8BAAQ,EAAE,mBAAS,EAAE,8CAAgB;AACpD,eAAe,qCAAW;AAC1B;AACA,mFAAmF,wCAAc;AACjG;AACA;AACA,qBAAqB,kCAAU;AAC/B,6BAA6B,wBAAc;AAC3C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yGAAyG;AACzG;AACA,aAAa;AACb;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iBAAiB,sBAAO;AACxB;AACA;AACA,aAAa;AACb,qCAAqC,4BAAU;AAC/C;AACA;AACA;AACA,wBAAwB,oBAAM;AAC9B,wBAAwB,oBAAM,YAAY,2BAA2B;AACrE;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,cAAc,yBAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAe;AAC9B;AACA,gBAAgB,WAAW;AAC3B;AACA,2BAA2B,gBAAM,GAAG,gBAAgB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,KAAK;AACL;AACA,cAAc,iBAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAO;AACtB,cAAc,yBAAe;AAC7B;AACA,gBAAgB,WAAW;AAC3B,wBAAwB,2CAAa;AACrC,6BAA6B,8BAAe;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8BAAM;AACpC;AACA;AACA;AACA;AACA;AACA,mCAAmC,eAAe,kCAAU,wBAAwB;AACpF;AACA,SAAS;AACT,kCAAkC,gDAAgD;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gDAAkB;AACtC;AACA,SAAS;AACT,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAe,SAAS,iBAAO,EAAE,qCAAW;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,kCAAgB,+BAA+B,SAAS;AACrE,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAU;AACzB;AACA;AACA,sEAAsE,2CAA2C;AACjH;AACA;AACA;AACA,6DAA6D,2CAA2C;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAgB;AAC/B;AACA,mCAAmC,kBAAQ;AAC3C,+BAA+B,UAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,KAAK;AACL;AACA,cAAc,mBAAS;AACvB;AACA;AACA;AACA;AACA,MAAM,UAAM;AACZ;AACA;AACA;AACA,6BAA6B,oBAAU;AACvC,+BAA+B,UAAM,KAAK;AAC1C;AACA;AACA,KAAK;AACL;AACA,cAAc,oBAAU;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,oBAAU;AACvC,+BAA+B,SAAS;AACxC;AACA;AACA,KAAK;AACL;AACA,cAAc,oBAAU;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,oBAAU;AACvC,+BAA+B,UAAU;AACzC;AACA;AACA,KAAK;AACL;AACA,cAAc,yBAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mBAAS,EAAE,qCAAW;AACrC,eAAe,yBAAe;AAC9B,cAAc,2DAA0B;AACxC;AACA;AACA,2BAA2B,iEAAgC;AAC3D;AACA;AACA,SAAS;AACT,4BAA4B,qCAAS;AACrC;AACA;AACA,wCAAwC,uCAAuC;AAC/E;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mBAAS;AACxB;AACA,yBAAyB,iCAAM;AAC/B,QAAQ,uCAAW;AACnB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,iCAAiC,SAAS;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mBAAS,EAAE,qCAAW;AACrC,eAAe,kCAAU,EAAE,8CAAgB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,kCAAM;AACrC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,4CAA4C,kCAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,UAAM;AACV;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM;AACV;AACA,0CAAe,OAAO,EAAC;AACvB;AACA;AACA;AACA,6BAA6B,4BAAU;AACvC;AACA;AACA;AACA,gBAAgB,oBAAM;AACtB,gBAAgB,oBAAM,YAAY,2BAA2B;AAC7D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,2CAA2C,6CAAe;AAC1D;AACA;AACA;AACA,oDAAoD,6CAAe;AACnE;AACA,kCAAkC,YAAY,+HAA+H;AAC7K;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6CAAe;AAChD;AACA,gCAAgC;AAChC;AACA,aAAa;AACb;AACA;AACA;AACA,gCAAgC,sBAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAe;AACvB,YAAY,yBAAW;AACvB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAO;AACxB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,sBAAO;AAChD;AACA,4CAA4C,6CAAe;AAC3D,wBAAwB,6CAAe;AACvC,4BAA4B,yBAAW;AACvC;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB;AACzB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjvCA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACJ;AACE;AACO;;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZpB;AACA;AAC0D;AACD;AACzD;AACA;AACA;AACO;AACP,+BAA+B,4BAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wBAAU;AAC7B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,kBAAkB,gBAAM,gBAAgB,0BAA0B;AAClE,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;ACvDA;AACA;AACqD;AACM;AACL;AACK;AACT;AACR;AACC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,8BAA8B,yBAAW;AAChD;AACA;AACA;AACA;AACA;AACA,kCAAkC,yBAAM;AACxC;AACA;AACA;AACA,+BAA+B,0CAAc;AAC7C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,yCAAyC,uBAAa,GAAG,yBAAyB;AAClF,sDAAsD,0CAAgB;AACtE;AACA;AACA;AACA,4DAA4D,qCAAc;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gBAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,eAAe;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,oBAAK;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,oBAAK;AAC7C,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA,IAAI,gBAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,gBAAO,KAAK,gBAAO,KAAK;AAC3B;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,gEAAgE;AACjE;;;;;;;;;;;;;;AC/LA;AACA;AACyD;AACA;AACmD;AACpD;AACY;AACpB;AACJ;AACD;AAC0F;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,sBAAsB,oBAAK;AAClC;AACA;AACA;AACO,uBAAuB,iCAAM;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,yBAAM;AACxC;AACA,mCAAmC,yBAAM;AACzC;AACA,uCAAuC,yBAAM;AAC7C,gCAAgC,yBAAM;AACtC;AACA,mCAAmC,yBAAM;AACzC,oCAAoC,oCAAS;AAC7C;AACA,SAAS;AACT,6BAA6B,8BAAe;AAC5C,4BAA4B,uCAAY;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA,2DAA2D,aAAO;AAClE;AACA;AACA,oCAAoC,gCAAK;AACzC;AACA;AACA,qDAAqD,mCAAQ;AAC7D,qDAAqD,aAAO;AAC5D;AACA,mDAAmD,aAAO;AAC1D;AACA,qDAAqD,mCAAQ;AAC7D;AACA,8BAA8B,mCAAQ;AACtC;AACA,gBAAgB,aAAO;AACvB,iDAAiD,wCAAY;AAC7D,wBAAwB,iCAAM;AAC9B,SAAS;AACT,QAAQ,wCAAW;AACnB;AACA,gBAAgB,aAAO;AACvB,iDAAiD,uCAAW;AAC5D;AACA,SAAS;AACT,qDAAqD,aAAO;AAC5D,uDAAuD,aAAO;AAC9D,+BAA+B,oCAAS;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qCAAU;AAClB,QAAQ,qCAAU;AAClB,QAAQ,qCAAU;AAClB,QAAQ,qCAAU;AAClB,QAAQ,mCAAQ;AAChB,QAAQ,mCAAQ;AAChB,QAAQ,mCAAQ;AAChB,QAAQ,qCAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,QAAQ,oCAAS;AACjB,QAAQ,oCAAS;AACjB,QAAQ,oCAAS;AACjB,QAAQ,oCAAS;AACjB,QAAQ,oCAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,aAAO;AAC9D,wCAAwC,WAAW;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4BAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wCAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wCAAc;AACtD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,WAAW;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,4BAAc;AACtF;AACA;AACA;AACA;AACA;AACA,YAAY,qCAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sBAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qCAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,MAAM;AAC7C;AACA;AACA,iDAAiD,KAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,uBAAuB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,KAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA,0GAA0G;AAC1G;AACA;AACA,uCAAuC,uBAAuB;AAC9D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,gBAAgB,kEAAkE;AAClF;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+BAA+B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qCAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wCAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,uBAAuB,iDAAiD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,iCAAM;AACvD;AACA;AACA,iDAAiD,iCAAM;AACvD;AACA;AACA,iDAAiD,iCAAM;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oCAAG;AAC1B;AACA,uBAAuB,oCAAG;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,KAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,wCAAc;AACxD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,qCAAI;AACtB;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA,0BAA0B;AAC1B,kCAAkC,mCAAO;AACzC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,8BAA8B,uCAAO;AACrC;AACA,iCAAiC,WAAW;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA,0BAA0B;AAC1B,kCAAkC,mCAAO;AACzC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,8BAA8B,uCAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAI;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,aAAa;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,cAAc;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA,4BAA4B,qCAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gCAAK;AACnC,YAAY,wCAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,0BAA0B,qCAAQ;AAClC,YAAY,qCAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yBAAM;AACtC,gCAAgC,iCAAM;AACtC;AACA;AACA;AACA;AACA,aAAa;AACb,qCAAqC,uCAAY;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,YAAY,qCAAQ;AACpB;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,sCAAsC,mCAAO;AAC7C;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,kCAAkC,uCAAO;AACzC;AACA;AACA;AACA,6BAA6B,mCAAO;AACpC;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,qCAAU;AAC3D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,qCAAU;AAC/D;AACA;AACA;AACA;AACA;AACA,qDAAqD,yCAAc;AACnE;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qCAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA,mBAAmB,qCAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA,yBAAyB,qCAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qCAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qCAAQ;AACpB;AACA;AACA;AACA;AACA;AACA,iCAAiC,iCAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iCAAM;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,qCAAU;AACjD;AACA;AACA;AACA,gCAAgC;AAChC;AACA,gCAAgC,yBAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,aAAO,KAAK,aAAO,KAAK;AAC3B;;;;AC1wDA;AACA;AACmD;AACU;AACW;AACb;AACd;AACa;AACvB;AACE;AACrC;AACA;AACA;AACO,yBAAyB,eAAe;AAC/C;AACA;AACA;AACA,4BAA4B,WAAW,QAAQ,IAAI;AACnD;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA,oBAAoB,qCAAc;AAClC;AACA;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA;AACA,oBAAoB,kCAAU;AAC9B;AACA;AACA;AACA,yBAAyB,kCAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2BAAS;AACnC;AACA;AACA;AACA,uBAAuB,kCAAU;AACjC,wCAAwC,8BAAe;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,IAAI;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,IAAI;AACjB;AACA;AACA;AACA;AACA;AACA,6CAA6C,4CAAkB;AAC/D;AACA,iCAAiC,iDAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,8BAAe;AACvD;AACA;AACA;AACA;AACA;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,YAAY;AACpF,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,YAAY;AAC9E,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB,EAAE,WAAO;AAC1B,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,oBAAK;AAChC;AACA;AACA;AACA;AACA,sBAAsB,+BAA+B,IAAI;AACzD;AACA,uHAAuH,uCAAgB;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,kCAAU;AAC3B,oBAAoB,2BAA2B;AAC/C,oBAAoB,2BAA2B;AAC/C;AACA;AACA,qBAAqB,kCAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kCAAU;AAC5B,sBAAsB,kCAAU;AAChC,iBAAiB,kCAAU;AAC3B,iBAAiB,kCAAU;AAC3B,oBAAoB,kCAAU;AAC9B,sBAAsB,kCAAU;AAChC,oBAAoB,kCAAU;AAC9B,0BAA0B,kCAAU;AACpC,qBAAqB,kCAAU;AAC/B,uBAAuB,kCAAU;AACjC,qBAAqB,kCAAU;AAC/B,2BAA2B,kCAAU;AACrC,SAAS;AACT;AACA,yBAAyB,kCAAU;AACnC,qBAAqB,kCAAU;AAC/B,oBAAoB,kCAAU;AAC9B,uBAAuB,kCAAU;AACjC,oBAAoB,kCAAU;AAC9B,0BAA0B,kCAAU;AACpC,wBAAwB,kCAAU;AAClC,wBAAwB,kCAAU;AAClC;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA,IAAI,WAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,WAAO,KAAK,WAAO,KAAK;AAC3B;;;;;;ACnYA;AACA;AACA;AACA;AAC+C;AACY;AACH;AACb;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAK;AAC7B,2BAA2B,yBAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,uBAAuB,8BAAM;AAC7B,gBAAgB,eAAe;AAC/B;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,gBAAgB,OAAO;AACvB,gBAAgB,UAAU;AAC1B,gBAAgB,OAAO;AACvB;AACA,8DAA8D,8BAAM;AACpE;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA,6BAA6B,eAAe;AAC5C,mBAAmB,gDAAkB;AACrC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB,8BAAe;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA,6CAA6C,SAAS,yBAAyB,QAAQ;AACvF;AACA;AACA;AACA,wCAAwC,SAAS,KAAK,SAAS;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/IA;AACA;AAC0C;AAC1C;AACA;AACA;AACA;AACO,4BAA4B,oBAAK;AACxC;AACA;AACA;AACA;AACA;AACO,uBAAuB,oBAAK;AACnC;AACA;AACA;AACA;AACA;AACO,oBAAoB,oBAAK;AAChC;;ACpBA;AACA;AACA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,6BAA6B,oBAAK;AACzC;;ACTA;AACA;AACA;AACA;AACuD;AACE;AACzD;AACA;AACA;AACA;AACA;AACA;AACO;AACP,YAAY,kFAAkF;AAC9F;AACA,mCAAmC,iBAAiB,2FAA2F,+CAA+C,4BAAc;AAC5M;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yBAAyB;AACpD;AACA;AACO;AACP,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,CAAC,yBAAe;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACkD;AACuB;AACtC;AACgC;AACqC;AACtE;AACY;AACrB;AACA;AAC4B;AAC7B;AACxB;;;;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACoE;AACd;AACtD;AACA;AACA;AACO,4BAA4B,oDAAK;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,8DAAe;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8CAA8C;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA,4CAA4C,UAAU;AACtD;AACA,gBAAgB,4BAA4B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,UAAU,GAAG,WAAW;AAC5D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gCAAgC,UAAU,GAAG,WAAW;AACxD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,qCAAqC,sDAAO;AAC5C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,iCAAiC,sDAAO;AACxC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,8DAA8D,aAAa;AAC3E,8BAA8B,aAAa;AAC3C;AACA;AACA;AACA;AACA,6CAA6C,KAAK,qBAAqB,KAAK;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,aAAa;AAC3E,8BAA8B,aAAa;AAC3C;AACA;AACA;AACA;AACA,6CAA6C,KAAK,qBAAqB,KAAK;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,gEAAgB;AAC/C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,KAAK;AACxE;AACA;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,+BAA+B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qCAAqC;AAChE;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtjBA;AACA;AACqD;AACS;AACD;AACP;AACF;AACV;AACY;AACH;AACnD;AACA;AACA;AACO,iCAAiC,oDAAK;AAC7C;AACA;AACA;AACO;AACP;AACA;AACA,wBAAwB,+DAAa,GAAG,WAAW;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,qEAAe;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,uCAAuC,oBAAoB,GAAG,wCAAwC;AACtG,iBAAiB;AACjB;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,mBAAmB,uEAAmB,EAAE,gEAAW;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,aAAa,8DAAO,WAAW,eAAe;AAC7E;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,oCAAoC,wEAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,gEAAgB;AACtD;AACA;AACA,KAAK;AACL,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;AC/IA;AACA;AACwD;AACb;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qDAAM;AACrC,gCAAgC,qDAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kEAAkB;AACrC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kEAAkB;AACrC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/EA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACuD;AACK;AACpB;AACU;AACL;AACG;;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbpB;AACA;AACA;AACA;AACoD;AACL;AACgC;AAChB;AACO;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,qBAAqB,uCAAgB;AACrC,uBAAuB,8BAAM;AAC7B;AACA;AACA,yBAAyB,uCAAgB;AACzC;AACA;AACA,kBAAkB,uCAAgB;AAClC;AACA;AACA;AACA,kBAAkB,uCAAgB;AAClC;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,4CAAqB,EAAE,8CAAgB,EAAE,qCAAW;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,uFAAuF,wCAAc;AACrG;AACA,YAAY,0BAAY;AACxB;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC,mFAAmF;AACnF;AACA;AACA,mCAAmC;AACnC;AACA,qFAAqF,OAAO;AAC5F,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA,uCAAuC,0BAAY;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,yBAAyB;AACzB;AACA;AACA;AACA,gCAAgC,0BAAY;AAC5C,gGAAgG;AAChG,8EAA8E,OAAO;AACrF,iCAAiC;AACjC;AACA,0FAA0F,OAAO;AACjG,iCAAiC;AACjC;AACA,yBAAyB;AACzB;AACA;AACA;AACA,gCAAgC,0BAAY;AAC5C;AACA,0FAA0F,OAAO;AACjG,iCAAiC;AACjC;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,+BAA+B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA,6GAA6G,OAAO;AACpH,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA,qGAAqG,OAAO;AAC5G,qCAAqC;AACrC;AACA,gCAAgC,0BAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,+BAA+B;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,0BAAY;AACxD,yCAAyC;AACzC;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA,iGAAiG,OAAO;AACxG,iCAAiC;AACjC;AACA,6CAA6C,0BAAY;AACzD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;AClOA;AACA;AACA;AACA;AAC0D;AACuD;AACtD;AACV;AACK;AACgD;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACO;AACP;AACA;AACA;AACA,cAAc,6BAAe;AAC7B;AACA,4BAA4B,8BAAM,MAAM,kCAAU,eAAe,kCAAU;AAC3E;AACA,mBAAmB,sBAAQ,kBAAkB,6BAA6B;AAC1E;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,eAAe,6BAAe,EAAE,qCAAW;AAC3C,eAAe,yBAAe,EAAE,gCAAS,EAAE,6BAAe;AAC1D;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,oCAAoC,2BAAa;AACjD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAQ;AAC9C;AACA;AACA;AACA,aAAa;AACb,gCAAgC,sBAAQ,GAAG,sBAAsB;AACjE,4BAA4B,kBAAkB,GAAG,UAAU;AAC3D;AACA,iCAAiC,yCAAa;AAC9C,6BAA6B,4BAAc;AAC3C;AACA;AACA,aAAa;AACb,yDAAyD,gDAAoB;AAC7E;AACA,wBAAwB,YAAY;AACpC;AACA,aAAa;AACb,2CAA2C,mCAAO;AAClD,6CAA6C,sBAAQ;AACrD,mCAAmC,gDAAoB;AACvD;AACA,4BAA4B,oBAAoB;AAChD;AACA,iBAAiB;AACjB,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAQ;AAC5B,gBAAgB,sBAAQ,gBAAgB,sBAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,kCAAU;AAC/B;AACA;AACA;AACA;AACA,iDAAiD,kBAAkB;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,uCAAW;AAC7B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY;AAC9D,0BAA0B,gBAAgB,EAAE,aAAa;AACzD,aAAa;AACb;AACA,kDAAkD,YAAY;AAC9D,0BAA0B,gBAAgB,EAAE,aAAa;AACzD,aAAa;AACb;AACA,kDAAkD,YAAY;AAC9D;AACA,aAAa;AACb;AACA;AACA,kDAAkD,YAAY;AAC9D;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA,8BAA8B,wCAAwC;AACtE;AACA;AACA;AACA,iCAAiC,8BAA8B;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wDAAwD;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;;;;;;;;;AC7KA;AACA;AACA;AACA;AACiE;AACF;AACoB;AACb;AAC4D;AAC9E;AACX;AACV;AACe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6BAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,6BAAU,KAAK,6BAAU,KAAK;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0BAA0B;AACtC;AACA,8CAA8C,wBAAc;AAC5D;AACA,8BAA8B,wBAAc;AAC5C,IAAI,yBAAe;AACnB;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI,yBAAe;AACnB;AACA;AACA;AACA,SAAS;AACT;AACA,kEAAkE,EAAE;AACpE,SAAS;AACT,KAAK;AACL,YAAY,6BAAmB,CAAC,qCAAS,IAAI,yBAAyB,SAAS,6BAAmB,CAAC,wBAAc;AACjH,QAAQ,6BAAmB,SAAS,gDAAgD;AACpF,YAAY,6BAAmB,WAAW,8BAA8B;AACxE;AACA;AACA,YAAY,6BAAmB,WAAW,gDAAgD;AAC1F,YAAY,6BAAmB,CAAC,kDAAsB,IAAI;AAC1D;AACA,iBAAiB,QAAQ,sCAAU,8EAA8E;AACjH,YAAY,6BAAmB,CAAC,kDAAsB,IAAI,+CAA+C,qCAAS,2CAA2C;AAC7J,QAAQ,6BAAmB,SAAS,mCAAmC;AACvE;AACA,oBAAoB,6BAA6B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6BAAmB,SAAS;AAChD;AACA;AACA,mBAAmB;AACnB,gBAAgB,6BAAmB,UAAU,4EAA4E,WAAW,wBAAwB,UAAU,GAAG;AACzK,oBAAoB,6BAAmB,UAAU,mCAAmC;AACpF,iCAAiC,6BAAmB,UAAU,mCAAmC,SAAS,iCAAiC;AAC3I,wBAAwB,6BAAmB;AAC3C,oBAAoB,6BAAmB,wBAAwB,qCAAqC,sCAAU,wEAAwE;AACtL,SAAS;AACT;AACA;AACA;AACA;AACA,sCAAsC,qCAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6BAAmB,CAAC,iCAAS,IAAI;AAC7C;AACA,SAAS;AACT;AACA,kDAAkD;AAClD,QAAQ,6BAAmB,CAAC,gCAAQ,IAAI,qDAAqD,YAAY,GAAG;AAC5G,QAAQ,6BAAmB,CAAC,oCAAQ,UAAU,qCAAqC;AACnF;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,kCAAU,EAAE,8CAAgB,EAAE,qCAAW;AACxD;AACA,yFAAyF,wCAAc;AACvG;AACA,kDAAkD,0BAAY;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,gCAAgC,6BAAU;AAC1C;AACA,6DAA6D,2CAA2C,sCAAsC,kGAAkG,8BAA8B;AAC9Q;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA,uBAAuB,0BAAY;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,iBAAiB,MAAM,EAAE;AACtG,qCAAqC;AACrC;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA,SAAS;AACT,gCAAgC,6BAAU;AAC1C;AACA,6DAA6D,uDAAuD,sCAAsC,kGAAkG,8BAA8B;AAC1R;AACA,wBAAwB,gCAAgC;AACxD,uBAAuB,0BAAY;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,iBAAiB,MAAM,EAAE;AACtG,qCAAqC;AACrC;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA,SAAS;AACT,gCAAgC,6BAAU;AAC1C;AACA;AACA,wBAAwB,KAAK;AAC7B,gBAAgB,0BAAY;AAC5B;AACA,SAAS;AACT;AACA;AACA,iCAAiC,yBAAW,QAAQ,6BAAmB,uBAAuB,SAAS,0BAAY;AACnH;AACA,aAAa,gBAAgB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6BAA6B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,QAAQ,0BAAY;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qCAAS;AACjC;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,oEAAoE,EAAE;AACtE,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA,gCAAgC,6BAAU;AAC1C;AACA;AACA,SAAS;AACT,mCAAmC,yBAAW,QAAQ,6BAAmB,CAAC,qCAAS,IAAI,4BAA4B;AACnH;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6BAAmB,uBAAuB,6FAA6F;AAC3J,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iCAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,wCAAc;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,aAAa,uCAAuC,yBAAyB,EAAE,4BAA4B,gCAAgC,OAAO,wFAAwF;AAC7Q,YAAY,6BAAmB,oBAAoB,yCAAyC;AAC5F;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,gBAAgB,oCAAoC,qCAAS,8CAA8C;AAC9I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8BAAe;AACjD;AACA;AACA;AACA;AACA;AACA,6BAA6B,yGAAwB;AACrD;AACA;AACA;AACA,yBAAyB,4BAAU;AACnC,wBAAwB,6BAAmB,4BAA4B,qPAAqP;AAC5T;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,oBAAoB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,CAAC,kCAAM,IAAI,oIAAoI;AAClL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,CAAC,wBAAc;AAClD,YAAY,6BAAmB,UAAU,+BAA+B,mDAAmD,6BAAmB,CAAC,wBAAc,IAAI,aAAa,MAAM,GAAG;AACvL,4BAA4B,6BAAmB;AAC/C;AACA,iIAAiI,6BAAmB,UAAU,iCAAiC;AAC/L,gBAAgB,6BAAmB,UAAU,8BAA8B;AAC3E;AACA,4BAA4B,6BAAmB,gBAAgB,gEAAgE;AAC/H,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE,gBAAgB,2BAA2B;AAC3C;AACA;AACA;AACA;AACA,gDAAgD,KAAK;AACrD;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA,YAAY,0BAAY;AACxB,SAAS;AACT;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;AC9gBA;AACA;AACA;AACA;AAC2D;AACF;AACkB;AAClC;AACU;AACK;AACP;AACjD;AACA;AACA;AACA,IAAI,kBAAU;AACd;AACA;AACA,CAAC,EAAE,kBAAU,KAAK,kBAAU,KAAK;AACjC;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,wCAAwC,wCAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gCAAkB;AACrC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA,wBAAwB,eAAO;AAC/B,iCAAiC,iCAAmB,GAAG,yBAAyB;AAChF;AACA;AACA;AACA,qCAAqC,oCAAoC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,oCAAoC;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,4BAA4B,qCAAI,8CAA8C,kBAAU;AACxF;AACA,4CAA4C,2CAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4BAA4B,kBAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;AACA;AACA;AACA,IAAI,eAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yCAAc;AACxC;AACA,0BAA0B,6CAAiB;AAC3C,aAAa;AACb;AACA,iCAAiC,uCAAW;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,eAAO,KAAK,eAAO,KAAK;AAC3B;;ACjLA;AACA;AACA;AACA;AACmD;AACC;AACR;AAC5C;AACA;AACA;AACA;AACA;AACA;AACO,+BAA+B,mCAAa;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAAS;AAC1C;AACA;AACA;AACA;AACA,gBAAgB,aAAa,EAAE,kCAAU;AACzC,gBAAgB,cAAc;AAC9B;AACA,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qCAAqC,IAAI;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACmD;AACgD;AAC7C;AACtD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,cAAc,+CAAiB;AAC/B,2BAA2B,gBAAgB;AAC3C;AACA;AACA;AACA;AACO;AACP;AACA;AACA,cAAc,8CAAgB;AAC9B,eAAe,+CAAiB;AAChC;AACA;AACA,gBAAgB,aAAa,EAAE,kCAAU;AACzC,+GAA+G,gBAAgB;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAe;AAC5C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,GAAG;AACpE;AACA;AACA,4CAA4C,kBAAkB,MAAM,GAAG;AACvE;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACoD;AACoF;AACzE;AACZ;AACmB;AACtE;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,kCAAU;AACzB,cAAc,gCAAkB;AAChC,eAAe,oCAAsB,EAAE,qCAAW,EAAE,mBAAS;AAC7D;AACA,0FAA0F,wCAAc;AACxG,8GAA8G,mCAAqB,GAAG,YAAY;AAClJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,0BAAY,GAAG,yDAAyD;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,kCAAU,EAAE,qCAAW;AACtC,eAAe,8CAAgB;AAC/B;AACA;AACA,6BAA6B,6BAAe;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;ACjLA;AACA;AACA;AACA;AAC+D;AAC/D;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,eAAe,8CAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;;;AClCA;AACA;AACA;AACA;AAC0D;AACyC;AACxC;AACV;AACc;AACT;AACM;AAC5D,IAAI,wBAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,wBAAU,KAAK,wBAAU,KAAK;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,eAAe,8CAAgB,EAAE,yBAAe,SAAS,qCAAW;AACpE,eAAe,2BAAa;AAC5B;AACA;AACA;AACA;AACA,oBAAoB,8BAAM,MAAM,kCAAU;AAC1C;AACA,4BAA4B,0BAAY;AACxC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,6BAAkB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,wBAAU;AACpD,SAAS;AACT,4BAA4B,wBAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4BAA4B,wBAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4BAA4B,wBAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4BAA4B,wBAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4BAA4B,wBAAU;AACtC;AACA;AACA;AACA,SAAS;AACT,4BAA4B,wBAAU;AACtC,gDAAgD,aAAa;AAC7D;AACA;AACA;AACA,SAAS;AACT,4BAA4B,wBAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT,4BAA4B,wBAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,cAAc,2BAAa;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,eAAe,2BAAa,EAAE,qCAAW;AACzC,eAAe,6BAAe,EAAE,gCAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qCAAqC,wBAAU;AAC/C,oCAAoC;AACpC,yBAAyB;AACzB,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gCAAgC,wBAAU;AAC1C;AACA;AACA;AACA,sCAAsC,iBAAiB,kBAAkB,YAAY;AACrF,iBAAiB;AACjB;AACA;AACA;AACA,iCAAiC,wBAAU;AAC3C,gCAAgC,kBAAkB;AAClD;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA,iCAAiC,wBAAU;AAC3C,gCAAgC,kBAAkB;AAClD;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA,6BAA6B,wBAAU;AACvC,4BAA4B,WAAW;AACvC;AACA,iBAAiB;AACjB;AACA,kCAAkC,SAAS,wBAAU,4BAA4B;AACjF;AACA;AACA,6BAA6B,wBAAU;AACvC;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA,6BAA6B,wBAAU;AACvC;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA;AACA,6BAA6B,wBAAU;AACvC;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA,6BAA6B,wBAAU;AACvC;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA;AACA,6BAA6B,wBAAU;AACvC;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA,6BAA6B,wBAAU;AACvC;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;;ACjUA;AACA;AACA;AACA;AAC2G;AAC3G;AACA;AACA;AACO;AACP;AACA;AACA;AACA,cAAc,oCAAsB;AACpC;AACA,6BAA6B,mCAAqB;AAClD,4BAA4B,sCAAoB;AAChD,SAAS;AACT;AACA;AACA;AACA;;;;;;ACpBA;AACA;AACmE;AACpB;AAC4B;AAC5B;AACa;AACU;AAC7B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,8BAAQ,EAAE,qCAAW,EAAE,yBAAe;AACrD,eAAe,iBAAO,EAAE,2CAAkB;AAC1C;AACA;AACA,4BAA4B,wBAAO;AACnC;AACA;AACA;AACA;AACA;AACA,yEAAyE,eAAe;AACxF;AACA;AACA,2CAA2C,8BAAM;AACjD,gCAAgC,8BAAM;AACtC;AACA;AACA;AACA;AACA,+CAA+C,YAAY;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,IAAI,wBAAO;AACX;AACA;AACA;AACA;AACA,mCAAmC,0CAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,wCAAc;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,wCAAc,GAAG,aAAa,iCAAM,aAAa;AAC5E;AACA;AACA;AACA,CAAC,EAAE,wBAAO,KAAK,wBAAO,KAAK;AAC3B;;;;ACrHA;AACA;AACA;AACA;AACmD;AACP;AACb;AAC2B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,YAAY,iCAAiC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6BAAmB,WAAW,0CAA0C,QAAQ,GAAG;AAClH,oBAAoB,6BAAmB,oBAAoB,6BAAmB,CAAC,wBAAc,IAAI,iBAAiB,QAAQ,GAAG;AAC7H,aAAa;AACb,8BAA8B,6BAAmB,WAAW,YAAY,MAAM,GAAG,2BAA2B,6BAAmB,CAAC,wBAAc,IAAI,iBAAiB,MAAM,GAAG;AAC5K,SAAS;AACT,eAAe,6BAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,8CAA8C;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iCAAiC;AACrD;AACA;AACA;AACA;AACA;AACA,wBAAwB,2CAAe;AACvC;AACA;AACA;AACA;AACA;AACA,oBAAoB,oCAAQ;AAC5B,wBAAwB,oCAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA,+DAA+D,6BAAmB,SAAS,6CAA6C,UAAU,GAAG,mCAAmC,GAAG;AAC3L,gBAAgB,6BAAmB,SAAS,sCAAsC;AAClF,gBAAgB,6BAAmB,SAAS,sCAAsC;AAClF,8BAA8B,6BAAmB,SAAS,wDAAwD,EAAE,QAAQ;AAC5H;AACA;AACA,kBAAkB,6BAAmB;AACrC,QAAQ,6BAAmB;AAC3B,WAAW,4BAAU;AACrB;AACA;AACA;AACA,YAAY,oBAAM;AAClB;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;;ACvIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoF;AAC2H;AAC3I;AACL;AACP;AACc;AACP;AACX;AACI;AACD;AACP;AACkB;AACR;AACtB;AACiC;AACG;AAChB;AACgB;AACd;AACJ;AACP;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,cAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,cAAU,KAAK,cAAU,KAAK;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAW;AAC1B,cAAc,6BAAe;AAC7B,eAAe,8CAAgB;AAC/B;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAe,EAAE,qCAAW;AAC3C;AACA,QAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,6BAAe;AAC7B,eAAe,yBAAe,SAAS,iBAAO;AAC9C;AACA,gBAAgB,eAAe;AAC/B,sBAAsB,8BAAM;AAC5B,2BAA2B,4BAAc;AACzC,0BAA0B,kCAAU;AACpC,yBAAyB,kCAAU;AACnC,qBAAqB,kCAAU;AAC/B;AACA;AACA,kDAAkD,kCAAU;AAC5D,gCAAgC,8BAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA,2BAA2B,8BAAM,wCAAwC,OAAO;AAChF,8BAA8B,8BAAM,YAAY,8BAAM;AACtD;AACA;AACA,mCAAmC,8BAAM;AACzC,uCAAuC,YAAY;AACnD,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAW;AAC1B,cAAc,2BAAa;AAC3B;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAkB;AAC1B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,6BAA6B,GAAG;AAChC;AACA,iCAAiC,GAAG;AACpC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,6BAA6B,4BAAS;AACtC;AACA;AACA;AACA,yBAAyB,oBAAM;AAC/B;AACA;AACA;AACA;AACA,oBAAoB,oBAAM,gBAAgB,iCAAiC;AAC3E,oBAAoB,oBAAM,cAAc,oCAAoC;AAC5E;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,gEAAgE,cAAU;AAC1E,4CAA4C,cAAU;AACtD;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS,IAAI,iDAAiD;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,gCAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAW;AAC1B;AACA;AACA;AACA,gCAAgC,cAAU;AAC1C;AACA;AACA;AACA,uBAAuB,sBAAQ;AAC/B,aAAa;AACb;AACA;AACA,sCAAsC,sBAAQ;AAC9C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8CAA8C,cAAU;AACxD,SAAS;AACT;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,qCAAW;AAC1B,eAAe,6BAAe;AAC9B;AACA;AACA;AACA;AACA,gCAAgC,cAAU;AAC1C;AACA,gEAAgE,4BAAc;AAC9E;AACA;AACA;AACA;AACA,yCAAyC,4BAAc;AACvD;AACA;AACA,aAAa;AACb;AACA;AACA,sCAAsC,4BAAc;AACpD;AACA;AACA;AACA,SAAS;AACT;AACA,8CAA8C,cAAU;AACxD,SAAS;AACT;AACA,8BAA8B,SAAS,cAAU,yBAAyB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kCAAU,sCAAsC,EAAE,oCAAoC,UAAU,GAAG;AAC/H;AACA;AACA;AACA,0BAA0B,+BAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,YAAY,EAAE,iBAAiB,MAAM,SAAS,IAAI,2CAA2C;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,8BAAQ;AACtB,eAAe,yBAAe,SAAS,iBAAO,EAAE,qCAAW;AAC3D,eAAe,6BAAe;AAC9B;AACA;AACA;AACA,uBAAuB,6BAAO;AAC9B;AACA;AACA,gBAAgB,iCAAiC;AACjD,gBAAgB,aAAa;AAC7B;AACA,8BAA8B,8BAAe;AAC7C,uBAAuB,6BAAO,GAAG,8BAA8B;AAC/D,yBAAyB,4BAAS;AAClC;AACA,+BAA+B;AAC/B;AACA,wCAAwC,gBAAgB;AACxD,SAAS;AACT;AACA;AACA;AACA,4BAA4B,cAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C,8BAA8B,8BAAM;AACpC;AACA;AACA,0BAA0B,kCAAU;AACpC;AACA;AACA;AACA;AACA,qCAAqC,cAAU,YAAY;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,yCAAyC;AACrF;AACA;AACA,yBAAyB,SAAS;AAClC,wDAAwD,UAAU;AAClE;AACA;AACA;AACA;AACA,4CAA4C,gCAAgC;AAC5E;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAAM;AAC7C;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4BAA4B,cAAU;AACtC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4BAA4B,cAAU;AACtC;AACA;AACA,wBAAwB,qBAAqB;AAC7C,8BAA8B,8BAAM;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,+BAA+B;AACnE;AACA;AACA,mCAAmC,8BAAM;AACzC;AACA;AACA;AACA;AACA,+CAA+C,YAAY;AAC3D,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA,qBAAqB,cAAU;AAC/B;AACA;AACA,SAAS;AACT;AACA,qBAAqB,cAAU;AAC/B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oCAAsB;AACpC,eAAe,qCAAW,EAAE,8CAAgB;AAC5C;AACA;AACA,mBAAmB,mCAAqB;AACxC,oFAAoF,wCAAc;AAClG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAW;AAC1B,eAAe,6BAAe;AAC9B;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B,4BAA4B,cAAU;AACtC;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAqB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,cAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAqB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,KAAK;AAClD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4BAA4B,cAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,4BAAc;AACxE;AACA;AACA;AACA,kCAAkC;AAClC,uBAAuB,gBAAgB;AACvC;AACA,SAAS;AACT;AACA;AACA,8BAA8B,SAAS,cAAU,6BAA6B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,wBAAU;AACxB,eAAe,8CAAgB;AAC/B;AACA,8BAA8B,uBAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,8CAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa;AACjB,IAAI,YAAY;AAChB,IAAI,cAAc;AAClB,IAAI,cAAc;AAClB,IAAI,kBAAkB;AACtB;AACA;AACA;AACA;AACA,IAAI,qBAAqB;AACzB,IAAI,iBAAiB;AACrB;AACA,IAAI,iBAAiB;AACrB,IAAI,cAAc;AAClB;AACA;AACA;AACA,IAAI,YAAY;AAChB,IAAI,uBAAuB;AAC3B;AACA,IAAI,eAAe;AACnB;AACA,IAAI,gBAAgB;AACpB;AACA,0CAAe,OAAO,EAAC;AACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrnBA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACJ;AACD;AACG;AACA;AACH;;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACdpB;AACA;AACqD;AACV;AACI;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,mCAAM;AACzC;AACA;AACA,gCAAgC,mCAAM;AACtC,kCAAkC,mCAAM;AACxC,gDAAgD,0BAAY;AAC5D,uCAAuC,oCAAc;AACrD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mCAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzPA;AACA;AACyD;AACoC;AAChD;AACO;AACJ;AACa;AAC9B;AACiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,gCAAgC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,wFAAwF,0BAA0B;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACO,qBAAqB,oBAAM;AAClC;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA,0BAA0B,8BAAe;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4DAA4D;AAChF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,0CAA0C,yBAAW;AACrD,4BAA4B,mBAAK;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2BAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,8BAAe;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,YAAY,oBAAM;AAClB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qBAAW;AACnD;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,2BAAQ;AAChB;AACA;AACA;AACA,4BAA4B,oBAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,MAAM;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAW,QAAQ,6BAAmB,CAAC,wBAAc;AAC9E;AACA,yCAAyC,6BAAmB,CAAC,gBAAM,IAAI,uIAAuI;AAC9M,wBAAwB,6BAAmB,CAAC,iBAAO,iBAAiB,MAAM,mBAAS,eAAe;AAClG;AACA;AACA,yBAAyB,qBAAW;AACpC;AACA;AACA,YAAY,iBAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAO;AAC/B,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,oBAAoB,iBAAO;AAC3B;AACA;AACA;AACA;AACA,2BAA2B,oBAAM,GAAG,sCAAsC;AAC1E;AACA;AACA,sCAAsC,oBAAM;AAC5C;AACA,oCAAoC,qBAAW;AAC/C;AACA;AACA;AACA,oBAAoB,iBAAO;AAC3B;AACA;AACA;AACA,uBAAuB,qBAAW;AAClC;AACA;AACA,gBAAgB,wCAAW,mBAAmB,oBAAM;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,oBAAM;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,aAAa;AACtC;AACA,KAAK;AACL,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;AC9xBA;AACA;AACgD;AACS;AAChB;AAC0B;AACxB;AACF;AACV;AACe;AAC9C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA,0BAA0B,8BAAe;AACzC;AACA,gCAAgC,8BAAe;AAC/C,gCAAgC,8BAAe;AAC/C;AACA;AACA;AACA,kCAAkC,mCAAM;AACxC,sCAAsC,mCAAM;AAC5C,mCAAmC,mCAAM;AACzC,kCAAkC,mCAAM;AACxC,4CAA4C,mCAAM;AAClD;AACA,iCAAiC,mCAAM;AACvC,qCAAqC,mCAAM;AAC3C,oCAAoC,mCAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,4BAAc;AAC9D;AACA,0EAA0E,mBAAI;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,sBAAO;AACpB;AACA;AACA;AACA;AACA;AACA,0BAA0B,sBAAO;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,OAAO;AACjE,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mCAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,yBAAyB,sBAAO;AAChC;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,2BAAI;AAC1B;AACA,SAAS;AACT;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+BAAO;AAC/B,yDAAyD,+BAAO,eAAe,mBAAI;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAAmB;AACzC,uBAAuB,6BAAmB;AAC1C,0BAA0B,6BAAmB,cAAc,0BAA0B;AACrF,gBAAgB,6BAAmB;AACnC,2CAA2C,MAAM;AACjD;AACA;AACA,sBAAsB,MAAM;AAC5B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qCAAqC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,SAAS;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA,eAAe,sBAAO;AACtB;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACO;AACP,4BAA4B;AAC5B;AACA,sFAAsF,4BAAc;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM,gBAAgB,OAAO;AACzC,YAAY,MAAM;AAClB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,2BAA2B,MAAM;AACjC;AACA,kBAAkB,sBAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,MAAM;AACjC;AACA;AACA,SAAS;AACT,6BAA6B,UAAU;AACvC;AACA;AACA;AACA,gBAAgB,MAAM,gBAAgB,8CAA8C;AACpF;AACA;AACA;AACA;AACA,kHAAkH;AAClH;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+BAAO;AACzC;AACA;AACA,yBAAyB,aAAa,GAAG,wBAAwB;AACjE,qCAAqC,mCAAmC;AACxE,uBAAuB,kCAAkC;AACzD,uBAAuB,wGAAwG;AAC/H,uBAAuB,qCAAqC;AAC5D,wCAAwC,eAAe;AACvD;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AACvD;AACA;AACA;AACA,IAAI,sBAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,iCAAiC,oBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAAc;AACjD;AACA;AACA;AACA,8BAA8B,gCAAgC,GAAG,oBAAoB;AACrF;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA,yBAAyB,+BAA+B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC,gBAAgB,6CAA6C;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,sBAAO,KAAK,sBAAO,KAAK;AAC3B;;;;ACxsCA;AACA;AACiD;AACQ;AACW;AACxB;AAClB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,+BAA+B,4BAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,4BAAc;AACzD;AACA;AACA;AACA,2BAA2B,aAAa;AACxC;AACA,YAAY,sCAAmB,CAAC,gCAAQ,IAAI,uEAAuE,iBAAiB,EAAE,WAAW,6EAA6E;AAC9N;AACA;AACA;AACA;AACO,2BAA2B,sBAAY;AAC9C;AACA;AACA;AACA;AACA;AACA,wCAAwC,4BAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sCAAmB,0BAA0B,sMAAsM;AACvQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,4BAAc;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAO;AACvB;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;AACrC;;ACzKA;AACA;AACyD;AAC+H;AAC/I;AACV;AAC2B;AACE;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,IAAI,cAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAAc;AACjD;AACA,mBAAmB,uBAAa;AAChC,kBAAkB,kBAAQ;AAC1B;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,4BAAc;AAC/F;AACA,mBAAmB,uBAAa;AAChC,kBAAkB,qBAAW;AAC7B;AACA,6EAA6E,qBAAqB,GAAG,YAAY;AACjH,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAW,QAAQ,6BAAmB,CAAC,cAAO,wBAAwB,gGAAgG,qBAAqB,GAAG,YAAY,2BAA2B;AACxP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,cAAO;AAC1B;AACA;AACA,CAAC,EAAE,cAAO,KAAK,cAAO,KAAK;AAC3B;AACA;AACA;AACA,IAAI,cAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,4BAAc;AAC7D;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,CAAC,mBAAS,IAAI,iFAAiF,qBAAqB,6BAAmB,CAAC,gCAAsB,IAAI,sMAAsM;AAC3Y;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,oBAAM;AACrC;AACA;AACA;AACA;AACA;AACA,4CAA4C,4BAAc;AAC1D;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAO;AACnB;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAU;AAC1B;AACA;AACA;AACA;AACA,gBAAgB,yBAAe;AAC/B;AACA;AACA,gBAAgB,yBAAe;AAC/B;AACA;AACA;AACA;AACA,CAAC,EAAE,cAAO,KAAK,cAAO,KAAK;AAC3B;;AClKA;AACA;AAC6C;AAC7C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,iBAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+FAA+F,SAAS;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,SAAS;AAC/D;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA,IAAI,iBAAO;AACX;AACA;AACA;AACA;AACA,2BAA2B,uBAAQ;AACnC,CAAC,EAAE,iBAAO,KAAK,iBAAO,KAAK;AAC3B;;ACjGA;AACA;AACA;AACA;AAC4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C;AACA,sCAAsC,UAAU;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,aAAa;AAClD,qCAAqC,UAAU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,aAAa;AACzD;AACA,4DAA4D,aAAa;AACzE;AACA;AACA;AACA,8DAA8D,UAAU;AACxE,2BAA2B,sBAAO;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5KA;AACA;AACA;AACA;AACuD;AACP;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,kCAAkC,mBAAK;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9IA;AACA;AAC6C;AACJ;AACK;AAC9C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,eAAe,2BAAQ;AACvB,mBAAmB,sCAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,UAAU;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mBAAI,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;;ACvDA;AACA;AACyC;AACK;AAC9C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA,gBAAgB,MAAM,gBAAgB,4BAA4B;AAClE,gBAAgB,MAAM,YAAY,wBAAwB;AAC1D;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA,gBAAgB,MAAM,gBAAgB,4BAA4B;AAClE,gBAAgB,MAAM,YAAY,wBAAwB;AAC1D;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA,gBAAgB,MAAM,gBAAgB,4BAA4B;AAClE,gBAAgB,MAAM,YAAY,wBAAwB;AAC1D;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA,gBAAgB,MAAM,gBAAgB,4BAA4B;AAClE,gBAAgB,MAAM,YAAY,wBAAwB;AAC1D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA,gBAAgB,MAAM,gBAAgB,4BAA4B;AAClE,gBAAgB,MAAM,YAAY,wBAAwB;AAC1D;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,UAAU;AACzB;AACA;AACA;AACA,gBAAgB,MAAM,gBAAgB,4BAA4B;AAClE,gBAAgB,MAAM,YAAY,wBAAwB;AAC1D;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA,8BAA8B,oBAAM;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AClZA;AACA;AACwD;AACqD;AACzD;AACT;AACJ;AAC6B;AACrC;AAC/B;AACA;AACA;AACA;AACO,uBAAuB,wBAAU;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mBAAK;AACnC;AACA;AACA,QAAQ,wBAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,wBAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAM;AAClC;AACA;AACA,SAAS;AACT;AACA,QAAQ,wBAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,wBAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,wBAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA,4BAA4B,oBAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAY;AAC9B,SAAS;AACT;AACA;AACA;AACA,kBAAkB,yBAAe;AACjC,SAAS;AACT;AACA;AACA;AACA,kBAAkB,kBAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA,+EAA+E,uCAAgB;AAC/F;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB,UAAU,eAAe;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,uCAAgB,kCAAkC;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAS;AACjC;AACA;AACA,+CAA+C,mCAAM;AACrD,2CAA2C,mCAAM;AACjD;AACA,sCAAsC,8BAAe;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kHAAkH;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+BAA+B,EAAE,2BAA2B;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,EAAE;AAC9C,wCAAwC,EAAE;AAC1C;AACA;AACA;AACA;AACA,yCAAyC,SAAS;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sBAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6BAAmB,YAAY,uGAAuG;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B,oBAAoB,6BAAmB;AACvC,gBAAgB,6BAAmB;AACnC,oBAAoB,6BAAmB,aAAa,uCAAuC;AAC3F,gBAAgB,6BAAmB;AACnC,oBAAoB,6BAAmB;AACvC,wBAAwB,6BAAmB;AAC3C;AACA,oBAAoB,6BAAmB;AACvC,wBAAwB,6BAAmB;AAC3C;AACA,oBAAoB,6BAAmB;AACvC,wBAAwB,6BAAmB;AAC3C;AACA,gBAAgB,6BAAmB;AACnC,oBAAoB,6BAAmB,aAAa,uCAAuC;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,+BAAC,MAAM,uCAAuC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,UAAU;AAC9B;AACA,mBAAmB,+BAAC,SAAS,KAAK,gBAAgB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAY;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6BAAmB,SAAS,+EAA+E;AACnI,oBAAoB,6BAAmB;AACvC,wBAAwB,6BAAmB,YAAY,iGAAiG;AACxJ,oBAAoB,6BAAmB;AACvC,oBAAoB,6BAAmB;AACvC,wBAAwB,6BAAmB;AAC3C,oBAAoB,6BAAmB;AACvC,wBAAwB,6BAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oCAAoC;AACxD;AACA;AACA;AACA;AACA,wBAAwB,6BAAmB;AAC3C,oBAAoB,6BAAmB;AACvC;AACA,oBAAoB,6BAAmB;AACvC,gBAAgB,6BAAmB;AACnC,oBAAoB,6BAAmB;AACvC,wBAAwB,6BAAmB;AAC3C,4BAA4B,6BAAmB;AAC/C,4BAA4B,6BAAmB;AAC/C,4BAA4B,6BAAmB;AAC/C,4BAA4B,6BAAmB;AAC/C,oBAAoB,6BAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sBAAY;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,8CAA8C;AACtE,0BAA0B,MAAM,GAAG,YAAY;AAC/C,2BAA2B,oBAAoB,IAAI,6CAA6C;AAChG;AACA;AACA;AACA,gBAAgB,6BAAmB,SAAS,WAAW;AACvD,gBAAgB,6BAAmB,iBAAiB,cAAc;AAClE,oBAAoB,6BAAmB;AACvC,gBAAgB,6BAAmB,WAAW,aAAa;AAC3D;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;;AChgBA;AACA;AACwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAgB;AACzC,kCAAkC,uCAAgB,oBAAoB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,SAAS,kBAAkB,cAAc,SAAS;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;;ACtJA;AACA;AACyD;AACY;AACrB;AACc;AACxB;AACA;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,6BAA6B,oBAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B,6CAA6C,4BAAc;AAC3D;AACA;AACA;AACA;AACA,mCAAmC,yBAAe,GAAG,sBAAsB;AAC3E;AACA;AACA;AACA;AACA,oBAAoB,sBAAQ;AAC5B;AACA;AACA,iBAAiB;AACjB,0CAA0C,uBAAS,GAAG,YAAY;AAClE;AACA,QAAQ,uBAAS;AACjB,QAAQ,uBAAS;AACjB,QAAQ,uBAAS;AACjB;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,kCAAkC,oBAAM;AACxC;AACA;AACA;AACA;AACA;AACA,gBAAgB,uBAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,QAAQ;AACb;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wCAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpQA;AACA;AACA;AACA;AAC6C;AACO;AACR;AAC5C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY,+HAA+H;AACzK;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,4BAAI;AACtF;AACA;AACA,8BAA8B,iBAAO,WAAW,iBAAiB;AACjE;AACA;AACA;AACA;AACA,kHAAkH,YAAY,+HAA+H;AAC7P;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC,sDAAsD;AACtD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC,sDAAsD;AACtD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,sBAAO,mFAAmF;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,kCAAkC;AACnC;;AC1JA;AACA;AACA;AACA;AACyC;AACE;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA,4BAA4B,mCAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mCAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B;AAC7C;AACA,gBAAgB,mBAAI;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wDAAwD;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C,yIAAyI;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,CAAC,oCAAoC;AACrC;;ACrTA;AACA;AACyD;AACqC;AACpE;AACkC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sCAAmB,CAAC,iCAAS,IAAI,yGAAyG,qBAAqB;AAC3K,yBAAyB,sCAAmB,CAAC,iCAAS,IAAI,uBAAuB;AACjF,YAAY,sCAAmB,CAAC,gCAAQ,IAAI,yBAAyB;AACrE,YAAY,sCAAmB,CAAC,sBAAY,UAAU,kDAAkD;AACxG,uBAAuB,sCAAmB,CAAC,iCAAS,IAAI,uBAAuB;AAC/E,YAAY,sCAAmB,CAAC,gCAAQ,IAAI,wBAAwB;AACpE,YAAY,sCAAmB,CAAC,oBAAU,UAAU,kDAAkD;AACtG;AACA;AACA;AACA;AACO,8BAA8B,sBAAY;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,4BAAc;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAmB,6BAA6B,wMAAwM;AACxQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;;;;;AChIA;AACA;AACA;AACqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC,kBAAkB,iBAAiB;AACnC,wDAAwD,IAAI,yEAAyE,IAAI;AACzI,uBAAuB,iBAAiB;AACxC,gBAAgB,iBAAiB;AACjC,oBAAoB,qBAAqB;AACzC,mBAAmB,iBAAiB;AACpC,uBAAuB,qBAAqB;AAC5C,gCAAgC,8BAA8B;AAC9D,oEAAoE,IAAI,uFAAuF,IAAI;AACnK,aAAa,iBAAiB;AAC9B;AACA,yBAAyB,IAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI,YAAY,IAAI,YAAY,IAAI;AACrE,mCAAmC,IAAI,YAAY,IAAI,YAAY,IAAI,WAAW,0BAA0B,GAAG,0BAA0B,GAAG,kCAAkC;AAC9K;AACA;AACA;AACA;AACA;AACA,cAAc,0BAA0B,GAAG,0BAA0B,GAAG,kCAAkC;AAC1G;AACA,sBAAsB,sBAAsB,oCAAoC,IAAI;AACpF,iBAAiB,qBAAqB,GAAG,qBAAqB,OAAO,IAAI;AACzE,uCAAuC,iBAAiB;AACxD,eAAe,iBAAiB;AAChC,cAAc,mBAAmB,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB;AACrG,2BAA2B,sBAAsB,MAAM,IAAI;AAC3D,0BAA0B,sBAAsB;AAChD,oBAAoB,iBAAiB,IAAI,gBAAgB;AACzD;AACA,aAAa,iBAAiB;AAC9B,8BAA8B,gBAAgB;AAC9C,qBAAqB,sBAAsB;AAC3C,sBAAsB,qBAAqB,GAAG,yBAAyB;AACvE;AACA,mBAAmB,sBAAsB,oCAAoC,IAAI;AACjF,cAAc,iBAAiB;AAC/B;AACA,uEAAuE,iBAAiB,IAAI,sBAAsB,QAAQ,sBAAsB;AAChJ,YAAY,iBAAiB;AAC7B;AACA;AACA,gCAAgC,cAAc,SAAS,cAAc,GAAG,iBAAiB;AACzF,2BAA2B,iBAAiB,QAAQ,6BAA6B;AACjF,iBAAiB,iBAAiB,SAAS,iBAAiB,OAAO,IAAI,8BAA8B,iBAAiB,OAAO,IAAI,OAAO,iBAAiB;AACzJ;AACA;AACA,0BAA0B,8BAA8B,SAAS,6BAA6B,iBAAiB,8BAA8B;AAC7I,0BAA0B,eAAe,aAAa,iBAAiB,aAAa,kBAAkB,aAAa,gBAAgB;AACnI;AACA;AACA,6CAA6C,gBAAgB,WAAW,yBAAyB,oBAAoB,4BAA4B;AACjJ,8CAA8C,uBAAuB,KAAK,gBAAgB,qBAAqB,oBAAoB,oBAAoB,4BAA4B;AACnL;AACA;AACA,cAAc,cAAc,GAAG,4BAA4B,GAAG,4BAA4B,GAAG,uBAAuB;AACpH,kBAAkB,cAAc,GAAG,4BAA4B,GAAG,4BAA4B,GAAG,uBAAuB;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qBAAqB,QAAQ,qBAAqB;AAChF;AACA,0BAA0B,cAAc,QAAQ,cAAc;AAC9D,0BAA0B,uBAAuB,QAAQ,uBAAuB;AAChF,iBAAiB,uBAAuB,GAAG,uBAAuB,GAAG,gBAAgB,OAAO,IAAI;AAChG,wBAAwB,sBAAsB,OAAO,IAAI,YAAY,sBAAsB,OAAO,IAAI;AACtG,uBAAuB,iBAAiB,OAAO,iBAAiB;AAChE;AACA;AACA,uBAAuB,uBAAuB,OAAO,IAAI;AACzD;AACA,gBAAgB,cAAc;AAC9B,0JAA0J,yBAAyB,GAAG,0BAA0B;AAChN;AACA,kBAAkB,gBAAgB;AAClC,qBAAqB,sBAAsB,GAAG,yBAAyB,UAAU,sBAAsB,GAAG,yBAAyB;AACnI,eAAe,iBAAiB,GAAG,qBAAqB;AACxD,8BAA8B,iBAAiB;AAC/C,yBAAyB,gBAAgB;AACzC;AACA,mBAAmB,qBAAqB,GAAG,yBAAyB;AACpE,mBAAmB,qBAAqB,GAAG,yBAAyB;AACpE;AACA,sBAAsB,gBAAgB;AACtC;AACA,kBAAkB,wBAAwB,OAAO,IAAI;AACrD;AACA;AACA,cAAc,iBAAiB,GAAG,qBAAqB;AACvD;AACA,oBAAoB,iBAAiB,GAAG,qBAAqB;AAC7D,yBAAyB,iBAAiB,SAAS,iBAAiB;AACpE,eAAe,qBAAqB,GAAG,yBAAyB;AAChE;AACA,oBAAoB,qBAAqB,GAAG,yBAAyB;AACrE;AACA,wBAAwB,cAAc,SAAS,cAAc;AAC7D,4BAA4B,sBAAsB,SAAS,sBAAsB;AACjF;AACA;AACA,uBAAuB,gBAAgB,OAAO,IAAI;AAClD;AACA;AACA,uBAAuB,uBAAuB,OAAO,IAAI;AACzD,gCAAgC,iBAAiB,GAAG,qBAAqB,SAAS,iBAAiB,GAAG,qBAAqB;AAC3H;AACA,wBAAwB,iBAAiB,SAAS,iBAAiB;AACnE,aAAa,gBAAgB;AAC7B;AACA,kBAAkB,wBAAwB,GAAG,wBAAwB,GAAG,qBAAqB,GAAG,yBAAyB;AACzH,2BAA2B,qBAAqB,GAAG,qBAAqB,GAAG,yBAAyB;AACpG;AACA,kBAAkB,qBAAqB,GAAG,yBAAyB;AACnE;AACA;AACA;AACA,yBAAyB,iBAAiB;AAC1C;AACA,sCAAsC,iBAAiB,OAAO,IAAI;AAClE,YAAY,iBAAiB,GAAG,qBAAqB;AACrD,cAAc,qBAAqB,GAAG,yBAAyB;AAC/D,qBAAqB,kBAAkB;AACvC;AACA,sBAAsB,sBAAsB,cAAc,kBAAkB,OAAO,uBAAuB,KAAK,qBAAqB,KAAK,oBAAoB,KAAK,mBAAmB,KAAK,gBAAgB;AAC1M,wBAAwB,kBAAkB,QAAQ,kBAAkB;AACpE,mCAAmC,iBAAiB,GAAG,qBAAqB,SAAS,iBAAiB,GAAG,qBAAqB;AAC9H;AACA;AACA;AACA,qBAAqB,uBAAuB,GAAG,uBAAuB,GAAG,gBAAgB,OAAO,IAAI;AACpG,eAAe,sBAAsB;AACrC,qBAAqB,2BAA2B,GAAG,+BAA+B,GAAG,gBAAgB,MAAM,OAAO,IAAI;AACtH;AACA,kBAAkB,gBAAgB,UAAU,uBAAuB,GAAG,uBAAuB,OAAO,IAAI;AACxG;AACA,cAAc,oBAAoB;AAClC,iFAAiF,sBAAsB;AACvG,4BAA4B,iBAAiB;AAC7C,yBAAyB,mBAAmB,QAAQ,mBAAmB;AACvE,oCAAoC,iBAAiB,GAAG,qBAAqB,SAAS,iBAAiB,GAAG,qBAAqB;AAC/H;AACA;AACA,aAAa,sBAAsB;AACnC;AACA,oBAAoB,eAAe,GAAG,qBAAqB;AAC3D,oBAAoB,iBAAiB;AACrC,4BAA4B,eAAe,QAAQ,eAAe;AAClE,wBAAwB,uBAAuB,GAAG,uBAAuB,GAAG,gBAAgB,OAAO,IAAI;AACvG,uBAAuB,uBAAuB,GAAG,uBAAuB,GAAG,gBAAgB,OAAO,IAAI;AACtG,iBAAiB,uBAAuB,OAAO,IAAI;AACnD;AACA,sBAAsB,uBAAuB,GAAG,uBAAuB,GAAG,gBAAgB,OAAO,IAAI;AACrG,gBAAgB,iBAAiB,MAAM,iBAAiB;AACxD,iCAAiC,iBAAiB,GAAG,qBAAqB,SAAS,iBAAiB,GAAG,qBAAqB;AAC5H,kBAAkB,qBAAqB,GAAG,yBAAyB;AACnE;AACA;AACA,kBAAkB,sBAAsB,GAAG,wBAAwB,GAAG,uBAAuB,OAAO,IAAI,SAAS,sBAAsB,gBAAgB,wBAAwB,UAAU,wBAAwB;AACjN;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,mBAAmB,uCAAwB,QAAQ,iBAAiB;AACpE;AACA,uBAAuB,uCAAwB,YAAY,sBAAsB;AACjF,aAAa;AACb,gCAAgC,kCAAiB;AACjD;AACA;AACA,qBAAqB,gCAAiB;AACtC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uBAAQ,UAAU,mCAAmC,GAAG;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACn8BA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,YAAY;AAC/C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtEA;AACA;AAC+C;AACU;AACD;AACb;AACG;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,mCAAM;AACvC,gBAAgB,yBAAyB;AACzC,gDAAgD,4BAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iJAAiJ,IAAI;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8BAAM,iBAAiB,8BAAM;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,qDAAqD,KAAK;AAC1D,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qCAAqC;AAC3D;AACA;AACA;AACA,mEAAmE,IAAI;AACvE;AACA;AACA;AACA;AACA,sEAAsE,IAAI;AAC1E;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,IAAI,WAAW,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,IAAI,WAAW,IAAI,YAAY,KAAK;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA,4DAA4D,KAAK;AACjE;AACA;AACA,mBAAmB,gDAAkB;AACrC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wBAAwB,EAAE,SAAS;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,MAAM,kBAAkB,SAAS;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gDAAkB;AACpC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,iEAAiE,QAAQ,iFAAiF;AAC1J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAO;AACvB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB;AACA;AACA,sBAAsB,MAAM,YAAY,6BAA6B;AACrE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,oBAAO,KAAK,oBAAO,KAAK;AAC3B;;ACneA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,4BAA4B,oBAAK;AACxC;AACA;AACA;AACA;AACO,+BAA+B,oBAAK;AAC3C;AACA;AACA;AACO,4BAA4B,oBAAK;AACxC;AACA;AACA;AACO,mCAAmC,oBAAK;AAC/C;AACA;AACA;AACO,0BAA0B,oBAAK;AACtC;AACA;AACA;AACO,uBAAuB,oBAAK;AACnC;AACA;AACA;AACO,0BAA0B,oBAAK;AACtC;AACA;AACA;AACA;AACO,4BAA4B,oBAAK;AACxC;AACA;AACA;AACA;AACA;AACO,mCAAmC,oBAAK;AAC/C;AACA;;AC5CA;AACA;AACA;AACA;AACmF;AAC1C;AACE;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA,iCAAiC,mCAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,wBAAwB,2EAA2E;AACnG;AACA,+BAA+B;AAC/B,qCAAqC,iBAAO,WAAW,aAAa;AACpE;AACA;AACA;AACA;AACA,2BAA2B,8BAAoB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,uBAAuB,iBAAO;AAC9B;AACA,2BAA2B,oBAAM;AACjC;AACA;AACA;AACA;;;;;;ACnHA;AACA;AACA;AACA;AACyD;AACK;AAChB;AACF;AACG;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM,YAAY,2BAA2B;AACzD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4HAA4H;AAC5H;AACA;AACA,aAAa;AACb,8FAA8F;AAC9F,2CAA2C,6CAAe;AAC1D;AACA;AACA;AACA;AACA,gBAAgB,6CAAe;AAC/B;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAO;AACvC;AACA;AACA,8GAA8G,kDAAkD;AAChK;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,6CAAe;AAC9D;AACA;AACA;AACA,iBAAiB;AACjB,gCAAgC;AAChC;AACA,aAAa;AACb;AACA;AACA;AACA,gCAAgC,sBAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uHAAuH;AACvH,aAAa,sBAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,sBAAsB,wCAAc;AACpC,2BAA2B,sBAAO;AAClC,KAAK;AACL;AACA;AACA,kEAAkE,aAAa,OAAO,SAAS;AAC/F,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,4BAA4B,wCAAc;AAC1C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,8BAA8B,WAAW;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oBAAoB;AAC7C;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,8CAA8C,gCAAS;AACvD;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;ACxUA;AACA;AACoD;AACpD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sBAAO;AACtB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,IAAI,sBAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8BAAe;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B,wCAAwC,QAAQ,GAAG,qBAAqB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,UAAU;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2BAA2B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,kCAAkC,cAAc,GAAG,qBAAqB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,EAAE,sBAAO,KAAK,sBAAO,KAAK;AAC3B;;ACrLA;AACA;AACA;AACA;AACA;AACA;AACiE;AACV;AACvD;AACA;AACA;AACA;AACwS;AAC5Q;AACI;AACC;AACR;AACE;AACG;AACG;AACN;AACM;AACH;AACC;AACJ;AACO;AACN;AACM;AACD;AACF;AACN;AACiF;AAC1E;AACC;AACjC;AACA;AACA;AACA;AACA;AACO,sBAAsB,iBAAS;AACtC;AACA;AACA,oCAAoC,cAAe;AACnD,mCAAmC,cAAe;AAClD,qCAAqC,cAAe;AACpD,kCAAkC,cAAe;AACjD;AACA;AACA;AACA;AACA,+BAA+B,iBAAS;AACxC,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnDA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACJ;;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;ACVpB;AACA;AACwD;AACuB;AACpC;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAa;AACrC;AACA,iCAAiC,oBAAM;AACvC,4BAA4B,oBAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6BAAe;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA,YAAY,kCAAoB;AAChC,sEAAsE,SAAS;AAC/E;AACA,gCAAgC,UAAU,SAAS,eAAe;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwB;AACxB;;;;;;;;;;;;;;;ACTA;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,sIAAsI,QAAQ,MAAM,YAAY,OAAO,KAAK,aAAa,WAAW,UAAU,YAAY,WAAW,YAAY,sTAAsT,8EAA8E,GAAG,iBAAiB,qEAAqE,qBAAqB,mBAAmB,qBAAqB,iBAAiB,wBAAwB,GAAG,qBAAqB;AACn1B;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BvC;AACqH;AACjB;AACW;AACI;AACC;AACJ;AACI;AACL;AACG;AACE;AACC;AACF;AACnH,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F,0BAA0B,sGAAiC;AAC3D,0BAA0B,0GAAiC;AAC3D,0BAA0B,2GAAiC;AAC3D,0BAA0B,uGAAiC;AAC3D,0BAA0B,2GAAiC;AAC3D,0BAA0B,sGAAiC;AAC3D,0BAA0B,yGAAiC;AAC3D,0BAA0B,2GAAiC;AAC3D,0BAA0B,6GAAiC;AAC3D,0BAA0B,2GAAiC;AAC3D;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,2HAA2H,QAAQ,wVAAwV,2BAA2B,4BAA4B,wBAAwB,4BAA4B,uBAAuB,0BAA0B,4BAA4B,6BAA6B,2BAA2B,qBAAqB;AACvuB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACjCvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,8HAA8H,MAAM,MAAM,QAAQ,MAAM,YAAY,aAAa,OAAO,OAAO,QAAQ,MAAM,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,sUAAsU,kCAAkC,uCAAuC,GAAG,2SAA2S,2CAA2C,GAAG,8CAA8C,6EAA6E,yBAAyB,GAAG,wCAAwC,2EAA2E,cAAc,iBAAiB,GAAG,8CAA8C,0EAA0E,GAAG,+CAA+C,2EAA2E,GAAG,sDAAsD,6EAA6E,GAAG,wCAAwC,2EAA2E,cAAc,iBAAiB,GAAG,8CAA8C,0EAA0E,GAAG,+CAA+C,2EAA2E,GAAG,sDAAsD,kFAAkF,GAAG,sCAAsC,oEAAoE,cAAc,iBAAiB,GAAG,4CAA4C,uEAAuE,GAAG,6CAA6C,wEAAwE,GAAG,oDAAoD,+EAA+E,GAAG,qBAAqB,0BAA0B,2CAA2C,qBAAqB,kCAAkC,6DAA6D,kEAAkE,2CAA2C,uBAAuB,GAAG,2BAA2B,iBAAiB,qBAAqB,GAAG,qBAAqB;AACjlH;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACxGvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,2HAA2H,QAAQ,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,UAAU,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,UAAU,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,YAAY,aAAa,WAAW,YAAY,cAAc,MAAM,OAAO,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,MAAM,KAAK,aAAa,aAAa,OAAO,KAAK,MAAM,KAAK,YAAY,WAAW,MAAM,KAAK,UAAU,UAAU,YAAY,4SAA4S,yCAAyC,GAAG,8BAA8B,6BAA6B,GAAG,yBAAyB,0CAA0C,wCAAwC,cAAc,eAAe,qBAAqB,GAAG,kBAAkB,uBAAuB,WAAW,YAAY,aAAa,cAAc,GAAG,iCAAiC,8BAA8B,GAAG,yBAAyB,iBAAiB,GAAG,sDAAsD,eAAe,GAAG,yEAAyE,iBAAiB,GAAG,mBAAmB,wEAAwE,wCAAwC,kBAAkB,iDAAiD,sBAAsB,uLAAuL,GAAG,oBAAoB,oDAAoD,wCAAwC,GAAG,oBAAoB,wEAAwE,GAAG,mEAAmE,wBAAwB,GAAG,oEAAoE,+FAA+F,wEAAwE,mKAAmK,GAAG,sBAAsB,wCAAwC,kBAAkB,GAAG,8BAA8B,kBAAkB,kBAAkB,wBAAwB,GAAG,qBAAqB;AACx5F;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACnGvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,+HAA+H,QAAQ,MAAM,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,UAAU,UAAU,YAAY,mTAAmT,oBAAoB,qBAAqB,8BAA8B,GAAG,+BAA+B,8BAA8B,GAAG,sCAAsC,gBAAgB,uBAAuB,WAAW,YAAY,eAAe,gBAAgB,8BAA8B,GAAG,qBAAqB;AAC55B;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC/BvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,gIAAgI,QAAQ,OAAO,QAAQ,OAAO,QAAQ,OAAO,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,SAAS,YAAY,yrBAAyrB,wCAAwC,sEAAsE,uEAAuE,wEAAwE,GAAG,2BAA2B,wCAAwC,iEAAiE,kDAAkD,+BAA+B,qCAAqC,GAAG,oNAAoN,sBAAsB,GAAG,qBAAqB;AACvwD;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC3CvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB;AACxB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,4HAA4H,QAAQ,OAAO,QAAQ,MAAM,YAAY,aAAa,OAAO,MAAM,QAAQ,MAAM,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,0BAA0B,QAAQ,aAAa,aAAa,SAAS,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,MAAM,KAAK,iBAAiB,OAAO,OAAO,KAAK,YAAY,aAAa,OAAO,OAAO,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,YAAY,QAAQ,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,MAAM,QAAQ,MAAM,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,UAAU,MAAM,KAAK,UAAU,UAAU,YAAY,WAAW,YAAY,aAAa,OAAO,YAAY,OAAO,UAAU,4dAA4d,sCAAsC,wCAAwC,GAAG,gMAAgM,wCAAwC,oCAAoC,uCAAuC,qBAAqB,GAAG,uBAAuB,qBAAqB,GAAG,yCAAyC,2CAA2C,0BAA0B,6BAA6B,mBAAmB,sqBAAsqB,8CAA8C,iCAAiC,oFAAoF,wDAAwD,GAAG,4DAA4D,kBAAkB,GAAG,sBAAsB,mBAAmB,0DAA0D,2DAA2D,yDAAyD,+FAA+F,GAAG,uCAAuC,0BAA0B,0HAA0H,+BAA+B,6EAA6E,yBAAyB,GAAG,mGAAmG,mBAAmB,0BAA0B,+BAA+B,GAAG,oCAAoC,wCAAwC,GAAG,8DAA8D,mBAAmB,wCAAwC,oCAAoC,sEAAsE,uEAAuE,uCAAuC,GAAG,0KAA0K,qEAAqE,GAAG,sCAAsC,oCAAoC,GAAG,wCAAwC,gBAAgB,eAAe,iBAAiB,sEAAsE,GAAG,8BAA8B,+BAA+B,GAAG,0LAA0L,mBAAmB,mBAAmB,wCAAwC,oCAAoC,iEAAiE,uCAAuC,uCAAuC,GAAG,mBAAmB,mDAAmD,mDAAmD,eAAe,oDAAoD,GAAG,iCAAiC,wCAAwC,GAAG,mCAAmC,oCAAoC,GAAG,uBAAuB,gBAAgB,yBAAyB,qBAAqB,GAAG,wBAAwB,0BAA0B,GAAG,2BAA2B,+BAA+B,GAAG,2BAA2B,eAAe,GAAG,8BAA8B,gBAAgB,uBAAuB,GAAG,gDAAgD,eAAe,gBAAgB,GAAG,uDAAuD,gBAAgB,mBAAmB,uBAAuB,aAAa,qEAAqE,6BAA6B,GAAG,0LAA0L,iBAAiB,GAAG,qBAAqB;AAC5vN;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACpNvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,gIAAgI,QAAQ,OAAO,MAAM,YAAY,MAAM,KAAK,OAAO,OAAO,KAAK,OAAO,OAAO,YAAY,OAAO,aAAa,MAAM,YAAY,aAAa,OAAO,aAAa,OAAO,YAAY,WAAW,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,MAAM,MAAM,KAAK,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,WAAW,UAAU,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,OAAO,MAAM,YAAY,aAAa,OAAO,MAAM,YAAY,aAAa,OAAO,MAAM,YAAY,aAAa,OAAO,MAAM,YAAY,aAAa,saAAsa,oGAAoG,GAAG,uQAAuQ,4EAA4E,GAAG,gDAAgD,4EAA4E,0BAA0B,GAAG,kHAAkH,kCAAkC,gBAAgB,eAAe,GAAG,iDAAiD,2DAA2D,GAAG,4DAA4D,qCAAqC,sCAAsC,GAAG,0DAA0D,oCAAoC,uCAAuC,GAAG,wEAAwE,qBAAqB,qBAAqB,oBAAoB,kCAAkC,GAAG,gDAAgD,oBAAoB,oBAAoB,qBAAqB,mCAAmC,GAAG,0BAA0B,8BAA8B,uCAAuC,qBAAqB,qBAAqB,oBAAoB,oBAAoB,GAAG,gCAAgC,8BAA8B,GAAG,wCAAwC,8BAA8B,GAAG,yBAAyB,wBAAwB,GAAG,yBAAyB,wBAAwB,GAAG,+BAA+B,wBAAwB,GAAG,uCAAuC,wBAAwB,GAAG,sEAAsE,iBAAiB,oBAAoB,mCAAmC,oCAAoC,GAAG,oEAAoE,gBAAgB,qBAAqB,kCAAkC,qCAAqC,GAAG,mGAAmG,gDAAgD,0BAA0B,GAAG,mGAAmG,iDAAiD,0BAA0B,GAAG,iGAAiG,8CAA8C,0BAA0B,GAAG,iGAAiG,gDAAgD,0BAA0B,GAAG,qBAAqB;AAC7+I;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACnJvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,gIAAgI,QAAQ,OAAO,QAAQ,MAAM,YAAY,OAAO,MAAM,QAAQ,MAAM,KAAK,OAAO,aAAa,OAAO,MAAM,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,WAAW,OAAO,KAAK,UAAU,UAAU,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,WAAW,UAAU,UAAU,UAAU,UAAU,YAAY,OAAO,MAAM,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,MAAM,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,UAAU,UAAU,UAAU,UAAU,YAAY,OAAO,WAAW,aAAa,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,WAAW,WAAW,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,WAAW,KAAK,YAAY,OAAO,WAAW,WAAW,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,WAAW,WAAW,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,OAAO,aAAa,cAAc,OAAO,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,4dAA4d,yCAAyC,GAAG,gMAAgM,mJAAmJ,GAAG,uDAAuD,oCAAoC,wCAAwC,uCAAuC,sBAAsB,GAAG,2BAA2B,kFAAkF,kFAAkF,mBAAmB,GAAG,oCAAoC,cAAc,eAAe,kBAAkB,yBAAyB,0BAA0B,gDAAgD,GAAG,gCAAgC,oBAAoB,iBAAiB,sBAAsB,2BAA2B,uBAAuB,GAAG,8CAA8C,2JAA2J,yBAAyB,GAAG,sDAAsD,wEAAwE,gBAAgB,cAAc,aAAa,WAAW,YAAY,iEAAiE,GAAG,0GAA0G,wCAAwC,GAAG,uDAAuD,oBAAoB,qBAAqB,0BAA0B,0BAA0B,2BAA2B,iCAAiC,gCAAgC,GAAG,qCAAqC,qDAAqD,GAAG,sHAAsH,wCAAwC,GAAG,kCAAkC,+DAA+D,gBAAgB,cAAc,aAAa,WAAW,YAAY,yBAAyB,GAAG,0HAA0H,qEAAqE,GAAG,0EAA0E,qEAAqE,GAAG,0EAA0E,qEAAqE,GAAG,oEAAoE,wEAAwE,GAAG,+CAA+C,8BAA8B,GAAG,yFAAyF,0EAA0E,GAAG,4EAA4E,+EAA+E,GAAG,8CAA8C,gGAAgG,GAAG,+EAA+E,8BAA8B,GAAG,2FAA2F,yEAAyE,GAAG,6EAA6E,8EAA8E,GAAG,+CAA+C,+FAA+F,GAAG,gEAAgE,qEAAqE,wEAAwE,GAAG,gDAAgD,sBAAsB,uBAAuB,GAAG,+DAA+D,iEAAiE,wBAAwB,kDAAkD,GAAG,2EAA2E,iBAAiB,uEAAuE,GAAG,mIAAmI,2CAA2C,8CAA8C,GAAG,qBAAqB,sEAAsE,GAAG,oBAAoB,uEAAuE,GAAG,gDAAgD,iBAAiB,GAAG,qBAAqB;AAC/2O;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACnOvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,gIAAgI,QAAQ,MAAM,aAAa,MAAM,OAAO,aAAa,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,YAAY,WAAW,UAAU,UAAU,UAAU,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,8TAA8T,sBAAsB,wJAAwJ,GAAG,kBAAkB,uBAAuB,gBAAgB,GAAG,+BAA+B,uBAAuB,mBAAmB,WAAW,cAAc,mBAAmB,iBAAiB,eAAe,uCAAuC,uBAAuB,wCAAwC,uBAAuB,GAAG,iCAAiC,+BAA+B,wCAAwC,GAAG,qBAAqB;AAC30C;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC5CvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,2HAA2H,QAAQ,OAAO,QAAQ,MAAM,YAAY,aAAa,aAAa,aAAa,OAAO,MAAM,QAAQ,OAAO,YAAY,aAAa,aAAa,OAAO,MAAM,MAAM,KAAK,MAAM,KAAK,UAAU,OAAO,MAAM,YAAY,WAAW,UAAU,MAAM,MAAM,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,WAAW,YAAY,aAAa,aAAa,aAAa,OAAO,OAAO,YAAY,cAAc,aAAa,aAAa,WAAW,MAAM,MAAM,YAAY,OAAO,MAAM,YAAY,aAAa,OAAO,MAAM,YAAY,WAAW,UAAU,YAAY,aAAa,aAAa,OAAO,MAAM,UAAU,OAAO,YAAY,MAAM,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,YAAY,MAAM,YAAY,aAAa,aAAa,WAAW,YAAY,aAAa,aAAa,OAAO,YAAY,MAAM,YAAY,aAAa,OAAO,MAAM,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,MAAM,UAAU,MAAM,aAAa,OAAO,UAAU,UAAU,OAAO,KAAK,YAAY,OAAO,OAAO,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,aAAa,MAAM,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,YAAY,6dAA6d,mIAAmI,6CAA6C,uDAAuD,GAAG,8OAA8O,sBAAsB,oCAAoC,uCAAuC,GAAG,8GAA8G,qGAAqG,GAAG,uDAAuD,oBAAoB,GAAG,0FAA0F,0BAA0B,iBAAiB,kBAAkB,GAAG,8EAA8E,qDAAqD,wBAAwB,qGAAqG,iBAAiB,mDAAmD,yDAAyD,mBAAmB,wCAAwC,iEAAiE,wBAAwB,uBAAuB,GAAG,oKAAoK,+CAA+C,wBAAwB,wHAAwH,kBAAkB,GAAG,kKAAkK,kDAAkD,GAAG,oIAAoI,wCAAwC,oCAAoC,GAAG,wHAAwH,uBAAuB,gBAAgB,cAAc,4CAA4C,mDAAmD,wEAAwE,GAAG,sGAAsG,mBAAmB,GAAG,yIAAyI,wCAAwC,oCAAoC,GAAG,uDAAuD,wCAAwC,oCAAoC,GAAG,sIAAsI,uBAAuB,iDAAiD,4CAA4C,gBAAgB,+DAA+D,mDAAmD,uCAAuC,GAAG,+FAA+F,wCAAwC,oCAAoC,GAAG,8HAA8H,mBAAmB,qBAAqB,sBAAsB,GAAG,gEAAgE,uBAAuB,GAAG,iEAAiE,sBAAsB,GAAG,sJAAsJ,kBAAkB,GAAG,0MAA0M,oBAAoB,oBAAoB,GAAG,gFAAgF,gCAAgC,GAAG,0KAA0K,gBAAgB,qCAAqC,iCAAiC,0BAA0B,sBAAsB,GAAG,mFAAmF,wCAAwC,oCAAoC,iEAAiE,oEAAoE,uCAAuC,uCAAuC,yDAAyD,wDAAwD,sDAAsD,oBAAoB,iDAAiD,GAAG,qBAAqB;AACr3O;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC/LvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,iIAAiI,QAAQ,MAAM,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,UAAU,YAAY,WAAW,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,YAAY,aAAa,aAAa,4SAA4S,0CAA0C,GAAG,qBAAqB,qDAAqD,gBAAgB,kBAAkB,wCAAwC,GAAG,2BAA2B,mBAAmB,qBAAqB,GAAG,iCAAiC,4BAA4B,cAAc,iBAAiB,gBAAgB,2BAA2B,iBAAiB,oBAAoB,wBAAwB,0CAA0C,sDAAsD,oCAAoC,kBAAkB,qBAAqB,6BAA6B,0BAA0B,GAAG,qBAAqB;AAC76C;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;;;AC7CvC;AACqH;AACjB;AACmB;AACN;AACQ;AACzH,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F,0BAA0B,8GAAiC;AAC3D,0BAA0B,wGAAiC;AAC3D,0BAA0B,gHAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA,OAAO,kIAAkI,mUAAmU,yBAAyB,iCAAiC,qBAAqB;AAC3hB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACjBvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,4IAA4I,MAAM,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,qJAAqJ,0DAA0D,wDAAwD,4DAA4D,GAAG,qCAAqC,uCAAuC,0CAA0C,GAAG,sCAAsC,sBAAsB,uBAAuB,2CAA2C,uCAAuC,qBAAqB,wEAAwE,GAAG,yCAAyC,gBAAgB,GAAG,gCAAgC,4CAA4C,yCAAyC,2CAA2C,wBAAwB,0CAA0C,oCAAoC,wCAAwC,qEAAqE,sEAAsE,kEAAkE,qEAAqE,GAAG,qBAAqB;AACz0D;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;ACjDvC;AACqH;AACjB;AACmD;AACvJ,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F,0BAA0B,uIAAiC;AAC3D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,0IAA0I,MAAM,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,WAAW,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,WAAW,YAAY,aAAa,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,WAAW,OAAO,KAAK,UAAU,UAAU,MAAM,KAAK,UAAU,YAAY,WAAW,UAAU,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,MAAM,KAAK,aAAa,UAAU,MAAM,aAAa,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,UAAU,UAAU,OAAO,KAAK,UAAU,YAAY,WAAW,YAAY,aAAa,aAAa,WAAW,MAAM,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,mMAAmM,WAAW,oDAAoD,mDAAmD,iDAAiD,uDAAuD,oDAAoD,mDAAmD,2DAA2D,2DAA2D,iEAAiE,iEAAiE,6DAA6D,iCAAiC,yDAAyD,sCAAsC,uCAAuC,qDAAqD,6BAA6B,0DAA0D,yDAAyD,yDAAyD,4DAA4D,4DAA4D,0DAA0D,sCAAsC,iDAAiD,6JAA6J,4CAA4C,+DAA+D,qEAAqE,qEAAqE,iEAAiE,GAAG,2BAA2B,qBAAqB,cAAc,iBAAiB,uCAAuC,qBAAqB,qBAAqB,2BAA2B,8CAA8C,GAAG,6BAA6B,kBAAkB,uCAAuC,sBAAsB,uBAAuB,cAAc,wBAAwB,sBAAsB,GAAG,gCAAgC,mBAAmB,GAAG,4CAA4C,cAAc,GAAG,6CAA6C,6CAA6C,GAAG,0EAA0E,4CAA4C,GAAG,sBAAsB,sBAAsB,iBAAiB,uCAAuC,yCAAyC,2CAA2C,0CAA0C,uCAAuC,oBAAoB,GAAG,2BAA2B,kBAAkB,iBAAiB,GAAG,kCAAkC,eAAe,uBAAuB,iBAAiB,oBAAoB,GAAG,yCAAyC,sBAAsB,GAAG,2DAA2D,uEAAuE,GAAG,kDAAkD,iDAAiD,GAAG,oDAAoD,gDAAgD,GAAG,iDAAiD,gDAAgD,GAAG,oDAAoD,mDAAmD,GAAG,wDAAwD,kDAAkD,GAAG,6BAA6B,wCAAwC,GAAG,mCAAmC,wCAAwC,+BAA+B,GAAG,uBAAuB,6BAA6B,GAAG,udAAud,kBAAkB,GAAG,wVAAwV,qBAAqB,GAAG,yBAAyB,kBAAkB,wBAAwB,sBAAsB,mBAAmB,6BAA6B,GAAG,sBAAsB,iBAAiB,mBAAmB,GAAG,sBAAsB,oBAAoB,uBAAuB,oBAAoB,qBAAqB,oCAAoC,8CAA8C,iBAAiB,GAAG,4BAA4B,8EAA8E,wBAAwB,2BAA2B,GAAG,oCAAoC,iBAAiB,GAAG,4BAA4B,8CAA8C,GAAG,oCAAoC,sEAAsE,4CAA4C,GAAG,0CAA0C,yEAAyE,GAAG,0CAA0C,qEAAqE,GAAG,kCAAkC,mEAAmE,4CAA4C,GAAG,wCAAwC,sEAAsE,GAAG,wCAAwC,kEAAkE,GAAG,kCAAkC,wCAAwC,+BAA+B,wDAAwD,GAAG,qBAAqB;AACp3Q;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC7PvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,oIAAoI,QAAQ,MAAM,UAAU,YAAY,aAAa,WAAW,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,MAAM,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,WAAW,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,UAAU,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,WAAW,MAAM,KAAK,UAAU,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,OAAO,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,UAAU,YAAY,OAAO,KAAK,KAAK,YAAY,OAAO,KAAK,YAAY,MAAM,MAAM,KAAK,KAAK,YAAY,OAAO,KAAK,YAAY,MAAM,MAAM,KAAK,KAAK,UAAU,MAAM,KAAK,UAAU,KAAK,MAAM,KAAK,KAAK,UAAU,MAAM,KAAK,UAAU,KAAK,wTAAwT,gBAAgB,uBAAuB,qBAAqB,gBAAgB,iBAAiB,oCAAoC,iCAAiC,2BAA2B,GAAG,8BAA8B,4BAA4B,GAAG,6BAA6B,kDAAkD,GAAG,kBAAkB,sCAAsC,GAAG,aAAa,uBAAuB,gBAAgB,iBAAiB,GAAG,aAAa,iCAAiC,2BAA2B,wCAAwC,0BAA0B,GAAG,kBAAkB,eAAe,6BAA6B,iBAAiB,kBAAkB,sBAAsB,uBAAuB,GAAG,kBAAkB,eAAe,6BAA6B,iBAAiB,kBAAkB,sBAAsB,uBAAuB,GAAG,kBAAkB,eAAe,kBAAkB,0BAA0B,6BAA6B,iBAAiB,kBAAkB,sBAAsB,uBAAuB,GAAG,oBAAoB,iBAAiB,gBAAgB,uBAAuB,GAAG,oBAAoB,iBAAiB,gBAAgB,uBAAuB,iBAAiB,GAAG,oBAAoB,iBAAiB,gBAAgB,uBAAuB,GAAG,6CAA6C,8BAA8B,GAAG,6CAA6C,8BAA8B,GAAG,6CAA6C,8BAA8B,GAAG,8HAA8H,4BAA4B,GAAG,YAAY,iCAAiC,uBAAuB,aAAa,cAAc,uBAAuB,GAAG,sBAAsB,QAAQ,+BAA+B,KAAK,YAAY,kCAAkC,KAAK,GAAG,uBAAuB,QAAQ,+BAA+B,KAAK,YAAY,iCAAiC,KAAK,GAAG,wBAAwB,QAAQ,iBAAiB,KAAK,YAAY,iBAAiB,KAAK,GAAG,yBAAyB,QAAQ,iBAAiB,KAAK,YAAY,iBAAiB,KAAK,GAAG,qBAAqB;AACrvH;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;;;;;;;ACjKvC;AACqH;AACjB;AACqB;AACR;AACK;AACH;AACM;AACA;AACP;AAClH,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F,0BAA0B,gHAAiC;AAC3D,0BAA0B,wGAAiC;AAC3D,0BAA0B,6GAAiC;AAC3D,0BAA0B,0GAAiC;AAC3D,0BAA0B,gHAAiC;AAC3D,0BAA0B,gHAAiC;AAC3D,0BAA0B,yGAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA,OAAO,wHAAwH,qUAAqU,yBAAyB,8BAA8B,2BAA2B,iCAAiC,iCAAiC,0BAA0B,qBAAqB;AACvoB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACzBvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,kIAAkI,QAAQ,OAAO,QAAQ,MAAM,YAAY,OAAO,MAAM,QAAQ,MAAM,YAAY,aAAa,cAAc,MAAM,OAAO,aAAa,OAAO,MAAM,QAAQ,MAAM,YAAY,WAAW,UAAU,UAAU,UAAU,UAAU,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,YAAY,aAAa,OAAO,OAAO,UAAU,MAAM,MAAM,QAAQ,MAAM,UAAU,YAAY,WAAW,MAAM,KAAK,YAAY,aAAa,WAAW,YAAY,WAAW,YAAY,OAAO,KAAK,MAAM,OAAO,OAAO,KAAK,UAAU,YAAY,aAAa,WAAW,UAAU,YAAY,OAAO,KAAK,UAAU,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,UAAU,UAAU,YAAY,aAAa,aAAa,OAAO,OAAO,YAAY,aAAa,OAAO,MAAM,QAAQ,MAAM,UAAU,MAAM,KAAK,YAAY,aAAa,WAAW,UAAU,YAAY,aAAa,aAAa,WAAW,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,WAAW,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,UAAU,UAAU,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,WAAW,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,YAAY,6dAA6d,oDAAoD,GAAG,8MAA8M,sBAAsB,oCAAoC,wCAAwC,qJAAqJ,GAAG,qOAAqO,uBAAuB,mBAAmB,cAAc,cAAc,cAAc,iBAAiB,eAAe,uCAAuC,uBAAuB,wCAAwC,GAAG,gDAAgD,qBAAqB,GAAG,sEAAsE,kBAAkB,GAAG,0EAA0E,kBAAkB,GAAG,wEAAwE,qBAAqB,sBAAsB,GAAG,8FAA8F,kBAAkB,GAAG,6MAA6M,iBAAiB,8CAA8C,eAAe,GAAG,gCAAgC,6EAA6E,mBAAmB,wDAAwD,iBAAiB,gFAAgF,GAAG,kEAAkE,2IAA2I,GAAG,yBAAyB,iBAAiB,6CAA6C,uBAAuB,aAAa,eAAe,yBAAyB,GAAG,6BAA6B,iBAAiB,gBAAgB,GAAG,yCAAyC,kCAAkC,GAAG,8BAA8B,4BAA4B,6BAA6B,gBAAgB,iBAAiB,kBAAkB,uCAAuC,oCAAoC,gEAAgE,GAAG,uJAAuJ,oCAAoC,uCAAuC,GAAG,0NAA0N,kBAAkB,GAAG,+BAA+B,wEAAwE,oCAAoC,oBAAoB,kBAAkB,uCAAuC,qBAAqB,wBAAwB,oBAAoB,4BAA4B,8BAA8B,GAAG,6CAA6C,wCAAwC,GAAG,sCAAsC,kCAAkC,sBAAsB,oCAAoC,GAAG,6BAA6B,8BAA8B,oCAAoC,uCAAuC,qBAAqB,kBAAkB,GAAG,6CAA6C,oCAAoC,GAAG,2CAA2C,4CAA4C,uCAAuC,GAAG,+EAA+E,4CAA4C,GAAG,qEAAqE,kCAAkC,GAAG,uEAAuE,4CAA4C,uCAAuC,GAAG,6EAA6E,wCAAwC,GAAG,oCAAoC,qBAAqB,GAAG,yCAAyC,oCAAoC,kCAAkC,sBAAsB,GAAG,kDAAkD,oCAAoC,GAAG,yDAAyD,sBAAsB,uBAAuB,gBAAgB,aAAa,mBAAmB,GAAG,yEAAyE,iBAAiB,GAAG,6DAA6D,mBAAmB,GAAG,oCAAoC,kBAAkB,GAAG,gCAAgC,8CAA8C,GAAG,6CAA6C,0BAA0B,iBAAiB,qBAAqB,iBAAiB,mBAAmB,uCAAuC,0CAA0C,yBAAyB,GAAG,qCAAqC,uBAAuB,qBAAqB,sBAAsB,mBAAmB,yCAAyC,GAAG,qBAAqB;AAC7nQ;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AChQvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,0HAA0H,QAAQ,MAAM,YAAY,WAAW,UAAU,YAAY,aAAa,aAAa,WAAW,UAAU,UAAU,UAAU,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,cAAc,MAAM,OAAO,aAAa,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,MAAM,OAAO,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,WAAW,YAAY,aAAa,aAAa,WAAW,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,WAAW,YAAY,aAAa,WAAW,MAAM,KAAK,YAAY,WAAW,YAAY,OAAO,KAAK,UAAU,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,YAAY,MAAM,YAAY,aAAa,WAAW,KAAK,mUAAmU,uBAAuB,mBAAmB,kBAAkB,2BAA2B,wBAAwB,4BAA4B,WAAW,YAAY,cAAc,eAAe,gBAAgB,iBAAiB,4CAA4C,2DAA2D,6BAA6B,wBAAwB,kBAAkB,2BAA2B,sBAAsB,uBAAuB,wCAAwC,4BAA4B,qBAAqB,sBAAsB,sBAAsB,sBAAsB,2BAA2B,wCAAwC,0BAA0B,2CAA2C,qJAAqJ,oCAAoC,iBAAiB,qBAAqB,GAAG,gDAAgD,qBAAqB,GAAG,uBAAuB,sBAAsB,GAAG,sCAAsC,iBAAiB,GAAG,mCAAmC,8CAA8C,wBAAwB,2BAA2B,GAAG,qDAAqD,cAAc,GAAG,qLAAqL,wBAAwB,2BAA2B,GAAG,+DAA+D,6EAA6E,GAAG,6DAA6D,2EAA2E,GAAG,+DAA+D,kFAAkF,GAAG,mCAAmC,eAAe,iBAAiB,qBAAqB,sBAAsB,GAAG,uBAAuB,kBAAkB,mCAAmC,mBAAmB,yBAAyB,uCAAuC,qBAAqB,oCAAoC,GAAG,qBAAqB,kBAAkB,2BAA2B,mBAAmB,uCAAuC,wCAAwC,oCAAoC,mBAAmB,GAAG,uBAAuB,kBAAkB,wBAAwB,8BAA8B,wBAAwB,mBAAmB,uBAAuB,wBAAwB,kBAAkB,GAAG,yBAAyB,uBAAuB,kBAAkB,wBAAwB,GAAG,uBAAuB,mBAAmB,GAAG,sBAAsB,qBAAqB,wBAAwB,4BAA4B,GAAG,0CAA0C,gBAAgB,GAAG,8BAA8B,oBAAoB,GAAG,6BAA6B,qBAAqB,oCAAoC,GAAG,sDAAsD,uBAAuB,GAAG,4DAA4D,iDAAiD,6BAA6B,0BAA0B,eAAe,KAAK,GAAG,qBAAqB;AACvtK;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AChLvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,+HAA+H,MAAM,KAAK,YAAY,aAAa,WAAW,MAAM,KAAK,UAAU,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,MAAM,YAAY,aAAa,aAAa,wKAAwK,gCAAgC,qBAAqB,gBAAgB,GAAG,sCAAsC,mBAAmB,GAAG,kCAAkC,kBAAkB,0BAA0B,GAAG,gEAAgE,yCAAyC,uCAAuC,GAAG,+FAA+F,qFAAqF,sBAAsB,GAAG,qBAAqB;AACtjC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACtCvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,4HAA4H,QAAQ,WAAW,KAAK,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,UAAU,KAAK,KAAK,OAAO,OAAO,KAAK,UAAU,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,MAAM,YAAY,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,WAAW,YAAY,OAAO,UAAU,KAAK,YAAY,aAAa,WAAW,MAAM,KAAK,UAAU,MAAM,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,YAAY,aAAa,OAAO,YAAY,MAAM,YAAY,WAAW,YAAY,WAAW,MAAM,KAAK,UAAU,UAAU,YAAY,aAAa,WAAW,UAAU,MAAM,KAAK,UAAU,UAAU,YAAY,WAAW,YAAY,WAAW,MAAM,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,WAAW,MAAM,KAAK,YAAY,WAAW,MAAM,KAAK,UAAU,MAAM,YAAY,MAAM,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,YAAY,aAAa,WAAW,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,kUAAkU,kBAAkB,wBAAwB,yBAAyB,8CAA8C,GAAG,2BAA2B,kBAAkB,2BAA2B,kDAAkD,8CAA8C,GAAG,8CAA8C,6CAA6C,GAAG,yCAAyC,sGAAsG,GAAG,gCAAgC,mBAAmB,GAAG,gCAAgC,qBAAqB,8BAA8B,wBAAwB,uCAAuC,oCAAoC,GAAG,mGAAmG,qBAAqB,oCAAoC,GAAG,gCAAgC,gBAAgB,GAAG,mDAAmD,2CAA2C,cAAc,4CAA4C,GAAG,yCAAyC,8CAA8C,qBAAqB,YAAY,GAAG,6CAA6C,gBAAgB,GAAG,yCAAyC,+CAA+C,8CAA8C,oCAAoC,GAAG,8CAA8C,4BAA4B,GAAG,+CAA+C,8CAA8C,2CAA2C,+CAA+C,iDAAiD,uBAAuB,mDAAmD,GAAG,wDAAwD,6CAA6C,gBAAgB,GAAG,8DAA8D,2BAA2B,kCAAkC,GAAG,iEAAiE,kDAAkD,kBAAkB,2BAA2B,eAAe,GAAG,kDAAkD,YAAY,kBAAkB,2BAA2B,uBAAuB,cAAc,eAAe,GAAG,mDAAmD,YAAY,oBAAoB,iEAAiE,kBAAkB,qBAAqB,cAAc,GAAG,6FAA6F,qBAAqB,GAAG,uCAAuC,iDAAiD,GAAG,6BAA6B,gBAAgB,GAAG,+DAA+D,kCAAkC,eAAe,GAAG,gEAAgE,6CAA6C,gBAAgB,GAAG,mEAAmE,gBAAgB,GAAG,2CAA2C,kDAAkD,2CAA2C,kBAAkB,2BAA2B,GAAG,0BAA0B,kBAAkB,qBAAqB,GAAG,gCAAgC,kBAAkB,GAAG,kCAAkC,kBAAkB,GAAG,kDAAkD,4BAA4B,qBAAqB,YAAY,2CAA2C,qBAAqB,4CAA4C,GAAG,kCAAkC,kBAAkB,GAAG,qBAAqB;AAC7kL;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC/LvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,kIAAkI,QAAQ,MAAM,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,kUAAkU,kBAAkB,GAAG,iDAAiD,iBAAiB,GAAG,uDAAuD,gBAAgB,kBAAkB,uCAAuC,gEAAgE,2CAA2C,oCAAoC,uCAAuC,0BAA0B,0BAA0B,GAAG,qBAAqB;AAC7kC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC/BvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,kIAAkI,MAAM,OAAO,KAAK,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,sPAAsP,yBAAyB,0BAA0B,0BAA0B,0BAA0B,0BAA0B,0BAA0B,0BAA0B,0BAA0B,0BAA0B,0BAA0B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,0BAA0B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,8BAA8B,8BAA8B,8BAA8B,2BAA2B,iCAAiC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,mCAAmC,mCAAmC,mCAAmC,mCAAmC,4BAA4B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,8BAA8B,8BAA8B,8BAA8B,8BAA8B,0BAA0B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,gCAAgC,iCAAiC,iCAAiC,iCAAiC,iCAAiC,iCAAiC,iCAAiC,iCAAiC,iCAAiC,iCAAiC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,0BAA0B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,0BAA0B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,2BAA2B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,iCAAiC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,mCAAmC,mCAAmC,mCAAmC,mCAAmC,0BAA0B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,8BAA8B,2BAA2B,8BAA8B,8BAA8B,2BAA2B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,4BAA4B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,8BAA8B,8BAA8B,8BAA8B,8BAA8B,iCAAiC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,mCAAmC,mCAAmC,mCAAmC,mCAAmC,2BAA2B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,4BAA4B,0BAA0B,2BAA2B,wBAAwB,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,2BAA2B,+BAA+B,gCAAgC,gCAAgC,gCAAgC,gCAAgC,gCAAgC,gCAAgC,gCAAgC,gCAAgC,gCAAgC,GAAG,qBAAqB;AACr7V;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AChRvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,2HAA2H,MAAM,YAAY,MAAM,YAAY,WAAW,YAAY,aAAa,aAAa,mPAAmP,0BAA0B,gBAAgB,iCAAiC,gCAAgC,0BAA0B,GAAG,qBAAqB;AACvmB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACpBvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,4HAA4H,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,YAAY,WAAW,YAAY,WAAW,YAAY,YAAY,YAAY,aAAa,aAAa,aAAa,OAAO,YAAY,MAAM,KAAK,UAAU,KAAK,MAAM,KAAK,UAAU,OAAO,KAAK,UAAU,MAAM,QAAQ,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,YAAY,MAAM,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,+KAA+K,0CAA0C,GAAG,2CAA2C,0CAA0C,GAAG,0CAA0C,kBAAkB,GAAG,sBAAsB,kBAAkB,wBAAwB,eAAe,qBAAqB,eAAe,uBAAuB,eAAe,kEAAkE,2BAA2B,qBAAqB,GAAG,kGAAkG,sBAAsB,oBAAoB,KAAK,GAAG,uDAAuD,oBAAoB,GAAG,+CAA+C,kBAAkB,GAAG,wMAAwM,mBAAmB,GAAG,yCAAyC,mBAAmB,GAAG,wBAAwB,oBAAoB,GAAG,0GAA0G,yCAAyC,8BAA8B,wBAAwB,GAAG,uCAAuC,qDAAqD,GAAG,qBAAqB;AAC5nE;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;;;;;AC/EvC;AACqH;AACjB;AACgB;AACG;AACH;AACE;AACL;AACjH,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F,0BAA0B,2GAAiC;AAC3D,0BAA0B,8GAAiC;AAC3D,0BAA0B,2GAAiC;AAC3D,0BAA0B,6GAAiC;AAC3D,0BAA0B,wGAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA,OAAO,qHAAqH,gUAAgU,+BAA+B,4BAA4B,8BAA8B,yBAAyB,qBAAqB;AACnkB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACrBvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,0HAA0H,QAAQ,MAAM,YAAY,WAAW,UAAU,UAAU,UAAU,YAAY,aAAa,WAAW,MAAM,KAAK,UAAU,UAAU,aAAa,aAAa,aAAa,WAAW,UAAU,MAAM,MAAM,QAAQ,SAAS,MAAM,KAAK,KAAK,UAAU,KAAK,mTAAmT,6CAA6C,eAAe,cAAc,iBAAiB,kBAAkB,4BAA4B,2CAA2C,eAAe,GAAG,yBAAyB,mBAAmB,gBAAgB,2BAA2B,sHAAsH,WAAW,cAAc,GAAG,iUAAiU,mBAAmB,oBAAoB,KAAK,GAAG,qBAAqB;AACt+C;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACjDvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,6HAA6H,QAAQ,OAAO,QAAQ,aAAa,OAAO,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,YAAY,miBAAmiB,cAAc,gBAAgB,eAAe,cAAc,iBAAiB,kBAAkB,4BAA4B,GAAG,qBAAqB;AAC56B;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC3BvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,0HAA0H,QAAQ,OAAO,QAAQ,aAAa,MAAM,UAAU,YAAY,WAAW,YAAY,OAAO,KAAK,UAAU,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,cAAc,aAAa,aAAa,aAAa,aAAa,cAAc,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,MAAM,OAAO,MAAM,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,MAAM,MAAM,MAAM,OAAO,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,MAAM,ufAAuf,kBAAkB,wBAAwB,gBAAgB,qBAAqB,GAAG,0BAA0B,mBAAmB,qBAAqB,+HAA+H,qBAAqB,iDAAiD,GAAG,qBAAqB,0CAA0C,uCAAuC,8CAA8C,mDAAmD,oCAAoC,yDAAyD,2CAA2C,4CAA4C,wCAAwC,qDAAqD,oGAAoG,wBAAwB,qBAAqB,4BAA4B,gEAAgE,2BAA2B,0BAA0B,sBAAsB,GAAG,6LAA6L,mBAAmB,qBAAqB,0BAA0B,KAAK,4BAA4B,0BAA0B,0BAA0B,KAAK,uBAAuB,0BAA0B,0BAA0B,KAAK,GAAG,yNAAyN,mBAAmB,6BAA6B,KAAK,4BAA4B,0CAA0C,KAAK,uBAAuB,qBAAqB,uBAAuB,KAAK,GAAG,qBAAqB;AAC1vG;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AChGvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,4HAA4H,QAAQ,OAAO,QAAQ,MAAM,UAAU,YAAY,WAAW,MAAM,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,WAAW,OAAO,KAAK,UAAU,MAAM,MAAM,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,MAAM,OAAO,MAAM,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,MAAM,weAAwe,kBAAkB,wBAAwB,gBAAgB,GAAG,4BAA4B,0CAA0C,2BAA2B,GAAG,6BAA6B,mBAAmB,qBAAqB,kCAAkC,qBAAqB,qBAAqB,2BAA2B,oBAAoB,GAAG,sCAAsC,kBAAkB,GAAG,0FAA0F,0CAA0C,GAAG,+CAA+C,gBAAgB,iBAAiB,kCAAkC,2CAA2C,GAAG,qDAAqD,8CAA8C,6CAA6C,8CAA8C,GAAG,yBAAyB,wBAAwB,uBAAuB,2CAA2C,4CAA4C,GAAG,oDAAoD,qDAAqD,iDAAiD,GAAG,6LAA6L,qBAAqB,qBAAqB,0BAA0B,KAAK,+BAA+B,0BAA0B,KAAK,8BAA8B,0BAA0B,KAAK,GAAG,qBAAqB;AACrvF;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACxFvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,uHAAuH,QAAQ,OAAO,QAAQ,MAAM,YAAY,OAAO,MAAM,QAAQ,MAAM,YAAY,WAAW,UAAU,UAAU,YAAY,OAAO,MAAM,QAAQ,OAAO,UAAU,YAAY,WAAW,WAAW,YAAY,aAAa,OAAO,YAAY,OAAO,UAAU,OAAO,MAAM,QAAQ,OAAO,KAAK,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,MAAM,QAAQ,aAAa,MAAM,UAAU,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,YAAY,WAAW,UAAU,YAAY,WAAW,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,MAAM,KAAK,QAAQ,KAAK,MAAM,KAAK,YAAY,OAAO,MAAM,QAAQ,OAAO,QAAQ,MAAM,UAAU,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,OAAO,YAAY,MAAM,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,UAAU,UAAU,MAAM,KAAK,YAAY,OAAO,OAAO,KAAK,KAAK,YAAY,OAAO,OAAO,KAAK,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,YAAY,MAAM,UAAU,MAAM,OAAO,UAAU,MAAM,KAAK,OAAO,MAAM,YAAY,aAAa,aAAa,aAAa,aAAa,WAAW,MAAM,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,MAAM,QAAQ,QAAQ,MAAM,KAAK,MAAM,UAAU,OAAO,KAAK,YAAY,MAAM,weAAwe,mDAAmD,GAAG,0LAA0L,oCAAoC,cAAc,iBAAiB,kBAAkB,4BAA4B,GAAG,+OAA+O,kBAAkB,wBAAwB,eAAe,cAAc,oGAAoG,GAAG,0FAA0F,mBAAmB,GAAG,gYAAgY,4BAA4B,uCAAuC,GAAG,8DAA8D,oDAAoD,GAAG,2SAA2S,oBAAoB,GAAG,6DAA6D,qBAAqB,qBAAqB,gEAAgE,qBAAqB,GAAG,8EAA8E,sBAAsB,GAAG,oEAAoE,iBAAiB,mDAAmD,gBAAgB,iBAAiB,qBAAqB,cAAc,WAAW,qBAAqB,gBAAgB,mBAAmB,yBAAyB,GAAG,8DAA8D,qBAAqB,GAAG,+DAA+D,wGAAwG,6HAA6H,GAAG,sEAAsE,oEAAoE,GAAG,4XAA4X,mBAAmB,gBAAgB,kBAAkB,qBAAqB,yCAAyC,GAAG,8CAA8C,mBAAmB,GAAG,8GAA8G,kBAAkB,oDAAoD,wCAAwC,uBAAuB,kCAAkC,0BAA0B,iCAAiC,kCAAkC,+BAA+B,gDAAgD,aAAa,WAAW,cAAc,GAAG,gDAAgD,iDAAiD,GAAG,+JAA+J,4CAA4C,GAAG,sNAAsN,4CAA4C,oEAAoE,GAAG,wEAAwE,4CAA4C,oEAAoE,GAAG,wEAAwE,4CAA4C,oEAAoE,GAAG,wEAAwE,4CAA4C,oEAAoE,GAAG,wEAAwE,4CAA4C,+BAA+B,GAAG,wEAAwE,4CAA4C,+BAA+B,GAAG,kKAAkK,kBAAkB,GAAG,2HAA2H,kBAAkB,GAAG,0OAA0O,gFAAgF,uCAAuC,8CAA8C,yDAAyD,oDAAoD,kBAAkB,GAAG,+EAA+E,yDAAyD,GAAG,+BAA+B,kBAAkB,GAAG,8SAA8S,sDAAsD,qBAAqB,KAAK,0BAA0B,0BAA0B,KAAK,GAAG,qBAAqB;AACt7R;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC9PvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,kIAAkI,MAAM,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,oJAAoJ,kCAAkC,GAAG,sBAAsB,iBAAiB,wBAAwB,sBAAsB,wBAAwB,mBAAmB,uCAAuC,yBAAyB,4BAA4B,wBAAwB,iCAAiC,8CAA8C,oCAAoC,gCAAgC,8BAA8B,6BAA6B,2BAA2B,0BAA0B,sBAAsB,GAAG,4BAA4B,8CAA8C,GAAG,0BAA0B,8CAA8C,GAAG,sBAAsB,wBAAwB,qBAAqB,iBAAiB,kBAAkB,uBAAuB,uCAAuC,oCAAoC,wCAAwC,GAAG,yBAAyB,kBAAkB,4BAA4B,wBAAwB,GAAG,wBAAwB,eAAe,GAAG,qBAAqB;AACt2D;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;ACjEvC;AACqH;AACjB;AACc;AAClH,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F,0BAA0B,yGAAiC;AAC3D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,0HAA0H,QAAQ,MAAM,UAAU,YAAY,WAAW,MAAM,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,MAAM,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,UAAU,YAAY,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,gUAAgU,oBAAoB,kBAAkB,2BAA2B,gBAAgB,GAAG,yBAAyB,mBAAmB,sEAAsE,qBAAqB,wCAAwC,qBAAqB,iBAAiB,GAAG,qDAAqD,sBAAsB,uBAAuB,GAAG,2BAA2B,kBAAkB,mBAAmB,wBAAwB,GAAG,iCAAiC,mBAAmB,GAAG,iCAAiC,iBAAiB,gBAAgB,0BAA0B,iCAAiC,gCAAgC,GAAG,wCAAwC,wDAAwD,0DAA0D,2CAA2C,GAAG,kCAAkC,6EAA6E,2CAA2C,GAAG,qBAAqB;AACn4D;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC9DvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,6HAA6H,MAAM,KAAK,YAAY,aAAa,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,MAAM,KAAK,UAAU,UAAU,UAAU,UAAU,UAAU,MAAM,KAAK,UAAU,UAAU,YAAY,WAAW,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,UAAU,YAAY,WAAW,UAAU,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,WAAW,MAAM,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,UAAU,UAAU,UAAU,YAAY,WAAW,iKAAiK,sBAAsB,8CAA8C,6CAA6C,eAAe,uCAAuC,GAAG,yBAAyB,uCAAuC,yCAAyC,oBAAoB,oCAAoC,GAAG,sBAAsB,iBAAiB,qDAAqD,wDAAwD,uBAAuB,0BAA0B,iCAAiC,gCAAgC,kBAAkB,GAAG,iCAAiC,aAAa,eAAe,iBAAiB,oBAAoB,gBAAgB,GAAG,4BAA4B,WAAW,aAAa,6CAA6C,iBAAiB,gBAAgB,2BAA2B,qBAAqB,GAAG,wBAAwB,WAAW,aAAa,kCAAkC,iBAAiB,gBAAgB,2BAA2B,GAAG,yBAAyB,qBAAqB,mBAAmB,8CAA8C,oDAAoD,uDAAuD,wDAAwD,iBAAiB,GAAG,oCAAoC,6EAA6E,2CAA2C,GAAG,uBAAuB,4BAA4B,iBAAiB,iBAAiB,iBAAiB,kBAAkB,oCAAoC,eAAe,GAAG,qBAAqB;AACnoF;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;;ACzFvC;AACqH;AACjB;AACO;AAC3G,4CAA4C,mEAAiW;AAC7Y,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F,yCAAyC,8FAA+B;AACxE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,mCAAmC;AAC7D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,0HAA0H,QAAQ,MAAM,YAAY,aAAa,aAAa,WAAW,YAAY,YAAY,YAAY,OAAO,YAAY,MAAM,UAAU,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,MAAM,YAAY,MAAM,KAAK,KAAK,OAAO,MAAM,MAAM,YAAY,MAAM,KAAK,KAAK,OAAO,MAAM,MAAM,aAAa,aAAa,MAAM,UAAU,MAAM,aAAa,MAAM,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,MAAM,YAAY,aAAa,aAAa,OAAO,MAAM,YAAY,aAAa,OAAO,QAAQ,YAAY,aAAa,OAAO,QAAQ,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,WAAW,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,WAAW,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,UAAU,YAAY,iTAAiT,4CAA4C,wCAAwC,4CAA4C,cAAc,qBAAqB,iBAAiB,0CAA0C,6EAA6E,mBAAmB,GAAG,oBAAoB,sCAAsC,GAAG,yDAAyD,8CAA8C,yCAAyC,GAAG,0BAA0B,iBAAiB,GAAG,yIAAyI,yDAAyD,2FAA2F,KAAK,GAAG,8EAA8E,yDAAyD,2FAA2F,KAAK,GAAG,+MAA+M,kBAAkB,GAAG,yEAAyE,uCAAuC,wCAAwC,qBAAqB,6BAA6B,iCAAiC,sBAAsB,uBAAuB,GAAG,iBAAiB,iDAAiD,GAAG,wCAAwC,gJAAgJ,mDAAmD,GAAG,8DAA8D,yEAAyE,mDAAmD,GAAG,6JAA6J,uEAAuE,iDAAiD,GAAG,yMAAyM,uEAAuE,iDAAiD,GAAG,uBAAuB,yCAAyC,iUAAiU,qCAAqC,gCAAgC,GAAG,kCAAkC,uBAAuB,eAAe,gCAAgC,iBAAiB,uBAAuB,sBAAsB,uBAAuB,qBAAqB,wBAAwB,uBAAuB,uCAAuC,wBAAwB,GAAG,0BAA0B,oDAAoD,GAAG,6HAA6H,uBAAuB,iCAAiC,sBAAsB,uBAAuB,2BAA2B,GAAG,mEAAmE,wBAAwB,uBAAuB,iBAAiB,2BAA2B,eAAe,sBAAsB,0CAA0C,sBAAsB,wBAAwB,sBAAsB,iBAAiB,sBAAsB,uBAAuB,iBAAiB,yCAAyC,GAAG,6CAA6C,2BAA2B,eAAe,GAAG,yEAAyE,eAAe,yBAAyB,GAAG,qBAAqB;AAC5hM;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC7KvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,yHAAyH,QAAQ,MAAM,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,WAAW,UAAU,aAAa,aAAa,cAAc,aAAa,aAAa,WAAW,OAAO,KAAK,YAAY,WAAW,UAAU,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,UAAU,UAAU,UAAU,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,WAAW,MAAM,KAAK,YAAY,WAAW,UAAU,YAAY,aAAa,WAAW,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,WAAW,UAAU,MAAM,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,QAAQ,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,YAAY,WAAW,MAAM,KAAK,YAAY,aAAa,WAAW,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,MAAM,KAAK,UAAU,UAAU,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,KAAK,YAAY,OAAO,KAAK,YAAY,MAAM,MAAM,KAAK,YAAY,aAAa,OAAO,MAAM,UAAU,YAAY,aAAa,aAAa,WAAW,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,aAAa,OAAO,KAAK,KAAK,YAAY,OAAO,KAAK,UAAU,KAAK,MAAM,KAAK,YAAY,aAAa,aAAa,aAAa,WAAW,UAAU,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,MAAM,KAAK,YAAY,aAAa,WAAW,YAAY,WAAW,MAAM,KAAK,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,KAAK,MAAM,KAAK,YAAY,aAAa,aAAa,WAAW,YAAY,aAAa,WAAW,UAAU,UAAU,YAAY,WAAW,MAAM,KAAK,KAAK,UAAU,MAAM,KAAK,UAAU,KAAK,MAAM,KAAK,YAAY,aAAa,aAAa,aAAa,WAAW,YAAY,aAAa,WAAW,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,YAAY,OAAO,KAAK,UAAU,MAAM,OAAO,aAAa,OAAO,MAAM,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,aAAa,aAAa,OAAO,MAAM,UAAU,MAAM,MAAM,UAAU,2SAA2S,6CAA6C,6HAA6H,GAAG,mBAAmB,uCAAuC,wCAAwC,yCAAyC,iEAAiE,eAAe,kBAAkB,wBAAwB,iGAAiG,uGAAuG,mBAAmB,GAAG,4BAA4B,sEAAsE,iBAAiB,mBAAmB,uBAAuB,qBAAqB,iBAAiB,4EAA4E,GAAG,gCAAgC,iBAAiB,cAAc,eAAe,0BAA0B,GAAG,wBAAwB,cAAc,eAAe,0BAA0B,uBAAuB,uBAAuB,qEAAqE,8DAA8D,gBAAgB,GAAG,wBAAwB,2BAA2B,cAAc,eAAe,oDAAoD,qBAAqB,kBAAkB,uDAAuD,uBAAuB,GAAG,4CAA4C,2BAA2B,cAAc,yBAAyB,oDAAoD,4CAA4C,wCAAwC,yDAAyD,wBAAwB,GAAG,kDAAkD,kCAAkC,yCAAyC,GAAG,2CAA2C,2BAA2B,oDAAoD,4BAA4B,mDAAmD,GAAG,2CAA2C,8EAA8E,gBAAgB,GAAG,+CAA+C,uBAAuB,iBAAiB,mDAAmD,0CAA0C,uCAAuC,0HAA0H,4DAA4D,GAAG,mDAAmD,2BAA2B,oDAAoD,sBAAsB,4BAA4B,oCAAoC,4CAA4C,wCAAwC,yDAAyD,uBAAuB,GAAG,8BAA8B,wCAAwC,iBAAiB,GAAG,sCAAsC,uCAAuC,iBAAiB,GAAG,iDAAiD,sBAAsB,wBAAwB,mBAAmB,GAAG,8CAA8C,kEAAkE,GAAG,8CAA8C,8DAA8D,GAAG,8CAA8C,8DAA8D,GAAG,8CAA8C,8DAA8D,GAAG,8CAA8C,8DAA8D,GAAG,8CAA8C,8DAA8D,GAAG,8CAA8C,8DAA8D,GAAG,8CAA8C,8DAA8D,GAAG,8CAA8C,8DAA8D,GAAG,8CAA8C,8DAA8D,GAAG,+CAA+C,+DAA+D,GAAG,yCAAyC,gBAAgB,gEAAgE,kDAAkD,uBAAuB,qBAAqB,WAAW,GAAG,+BAA+B,iBAAiB,eAAe,8CAA8C,uBAAuB,eAAe,6DAA6D,GAAG,qCAAqC,QAAQ,+BAA+B,KAAK,YAAY,kCAAkC,KAAK,GAAG,mBAAmB,oCAAoC,0BAA0B,GAAG,2DAA2D,eAAe,0BAA0B,wBAAwB,2EAA2E,GAAG,gCAAgC,iBAAiB,GAAG,8BAA8B,4HAA4H,GAAG,kCAAkC,QAAQ,uBAAuB,KAAK,YAAY,mBAAmB,KAAK,GAAG,gCAAgC,8CAA8C,2CAA2C,wCAAwC,yCAAyC,mBAAmB,kBAAkB,oBAAoB,GAAG,mEAAmE,oBAAoB,GAAG,+BAA+B,kBAAkB,GAAG,6CAA6C,uBAAuB,GAAG,iCAAiC,qBAAqB,GAAG,2EAA2E,+CAA+C,yBAAyB,qBAAqB,GAAG,oCAAoC,UAAU,mBAAmB,KAAK,UAAU,sBAAsB,KAAK,GAAG,6CAA6C,kDAAkD,2BAA2B,iBAAiB,wCAAwC,iBAAiB,GAAG,uCAAuC,QAAQ,mBAAmB,KAAK,WAAW,mBAAmB,KAAK,WAAW,mBAAmB,KAAK,GAAG,yCAAyC,0CAA0C,4BAA4B,kCAAkC,oBAAoB,sBAAsB,qBAAqB,mBAAmB,iBAAiB,iBAAiB,uBAAuB,aAAa,GAAG,mCAAmC,QAAQ,iBAAiB,KAAK,YAAY,iBAAiB,KAAK,GAAG,yBAAyB,uCAAuC,wCAAwC,yCAAyC,iEAAiE,kBAAkB,wBAAwB,wBAAwB,mBAAmB,GAAG,qCAAqC,gBAAgB,uBAAuB,WAAW,YAAY,8CAA8C,GAAG,iDAAiD,eAAe,yEAAyE,uBAAuB,GAAG,2GAA2G,eAAe,wBAAwB,yBAAyB,GAAG,+CAA+C,kBAAkB,GAAG,uCAAuC,qBAAqB,wBAAwB,qBAAqB,GAAG,0FAA0F,kBAAkB,GAAG,6IAA6I,eAAe,GAAG,qBAAqB;AACntX;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACvYvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,iIAAiI,QAAQ,aAAa,MAAM,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,uXAAuX,kBAAkB,2BAA2B,wBAAwB,4BAA4B,GAAG,uDAAuD,wBAAwB,GAAG,qBAAqB;AAC7yB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACvBvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,uHAAuH,QAAQ,MAAM,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,UAAU,UAAU,MAAM,KAAK,YAAY,OAAO,MAAM,QAAQ,MAAM,YAAY,WAAW,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,WAAW,MAAM,KAAK,YAAY,aAAa,OAAO,aAAa,MAAM,MAAM,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,MAAM,YAAY,MAAM,YAAY,aAAa,aAAa,OAAO,MAAM,QAAQ,MAAM,UAAU,aAAa,MAAM,OAAO,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,MAAM,QAAQ,MAAM,YAAY,aAAa,OAAO,MAAM,UAAU,OAAO,MAAM,OAAO,MAAM,UAAU,UAAU,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,MAAM,OAAO,MAAM,KAAK,YAAY,MAAM,sTAAsT,kBAAkB,qBAAqB,qBAAqB,sBAAsB,GAAG,qBAAqB,iBAAiB,eAAe,kBAAkB,GAAG,8BAA8B,oCAAoC,GAAG,gOAAgO,wCAAwC,mBAAmB,yCAAyC,kDAAkD,kDAAkD,GAAG,0EAA0E,sDAAsD,8CAA8C,iBAAiB,GAAG,2EAA2E,sDAAsD,+CAA+C,GAAG,mJAAmJ,IAAI,wEAAwE,4BAA4B,kCAAkC,GAAG,oEAAoE,kBAAkB,GAAG,sFAAsF,uCAAuC,uCAAuC,+DAA+D,GAAG,oNAAoN,mBAAmB,8DAA8D,0KAA0K,wCAAwC,kDAAkD,kDAAkD,GAAG,gEAAgE,iBAAiB,qBAAqB,GAAG,oEAAoE,mFAAmF,2CAA2C,8DAA8D,GAAG,kQAAkQ,uEAAuE,+DAA+D,GAAG,4IAA4I,oBAAoB,GAAG,sNAAsN,kBAAkB,iBAAiB,gBAAgB,qBAAqB,GAAG,sEAAsE,8CAA8C,iDAAiD,gDAAgD,GAAG,yNAAyN,2BAA2B,oDAAoD,KAAK,GAAG,qBAAqB;AACnsK;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC1IvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,yHAAyH,QAAQ,MAAM,UAAU,YAAY,YAAY,KAAK,OAAO,aAAa,OAAO,KAAK,UAAU,UAAU,YAAY,WAAW,YAAY,aAAa,WAAW,MAAM,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,WAAW,UAAU,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,YAAY,OAAO,KAAK,UAAU,oTAAoT,kBAAkB,2BAA2B,kBAAkB,qJAAqJ,GAAG,sBAAsB,kBAAkB,mBAAmB,wBAAwB,iBAAiB,qBAAqB,6CAA6C,eAAe,GAAG,6CAA6C,oCAAoC,uCAAuC,sBAAsB,uBAAuB,GAAG,gDAAgD,mBAAmB,2BAA2B,qBAAqB,kBAAkB,iBAAiB,oBAAoB,uBAAuB,GAAG,qEAAqE,oCAAoC,wCAAwC,uCAAuC,iBAAiB,wBAAwB,GAAG,wBAAwB,mBAAmB,GAAG,qBAAqB;AACj3D;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;;;;;;;AC5DvC;AACqH;AACjB;AACkB;AACF;AACH;AACO;AACN;AACA;AACE;AACpH,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F,0BAA0B,6GAAiC;AAC3D,0BAA0B,2GAAiC;AAC3D,0BAA0B,wGAAiC;AAC3D,0BAA0B,+GAAiC;AAC3D,0BAA0B,yGAAiC;AAC3D,0BAA0B,yGAAiC;AAC3D,0BAA0B,2GAAiC;AAC3D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,wHAAwH,QAAQ,MAAM,YAAY,aAAa,WAAW,OAAO,KAAK,UAAU,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,iUAAiU,4BAA4B,yBAAyB,gCAAgC,0BAA0B,0BAA0B,4BAA4B,wBAAwB,qBAAqB,4BAA4B,mBAAmB,GAAG,mCAAmC,oBAAoB,GAAG,gDAAgD,yDAAyD,GAAG,qDAAqD,gCAAgC,GAAG,qBAAqB;AAC5lC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC5CvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,+HAA+H,QAAQ,MAAM,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,UAAU,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,WAAW,OAAO,KAAK,UAAU,YAAY,WAAW,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,MAAM,KAAK,UAAU,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,WAAW,MAAM,eAAe,UAAU,6TAA6T,kBAAkB,2BAA2B,qBAAqB,qBAAqB,GAAG,kCAAkC,kBAAkB,mBAAmB,GAAG,4BAA4B,kBAAkB,wBAAwB,GAAG,kCAAkC,wCAAwC,oBAAoB,GAAG,mCAAmC,oBAAoB,uBAAuB,iBAAiB,kCAAkC,GAAG,mCAAmC,wBAAwB,sBAAsB,GAAG,iCAAiC,sBAAsB,GAAG,gCAAgC,kBAAkB,wBAAwB,GAAG,qCAAqC,wBAAwB,sBAAsB,GAAG,yCAAyC,sBAAsB,GAAG,oFAAoF,iBAAiB,kCAAkC,eAAe,GAAG,gBAAgB,oBAAoB,GAAG,6CAA6C,kCAAkC,sBAAsB,oBAAoB,uBAAuB,cAAc,GAAG,6UAA6U,iBAAiB,GAAG,qBAAqB;AAC//E;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC/FvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,6HAA6H,QAAQ,MAAM,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,OAAO,KAAK,YAAY,WAAW,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,2TAA2T,kBAAkB,2BAA2B,qBAAqB,qBAAqB,GAAG,gCAAgC,mBAAmB,GAAG,mCAAmC,qBAAqB,cAAc,eAAe,wCAAwC,oCAAoC,uCAAuC,GAAG,mCAAmC,iBAAiB,sBAAsB,GAAG,4CAA4C,iBAAiB,uCAAuC,GAAG,4DAA4D,kBAAkB,GAAG,qBAAqB;AACrzC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC7CvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,0HAA0H,QAAQ,MAAM,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,UAAU,YAAY,mUAAmU,iDAAiD,uBAAuB,GAAG,oEAAoE,mDAAmD,gDAAgD,GAAG,mEAAmE,mDAAmD,gDAAgD,GAAG,+BAA+B,uBAAuB,gBAAgB,cAAc,kCAAkC,GAAG,qBAAqB;AAC1pC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACjCvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,iIAAiI,QAAQ,MAAM,YAAY,WAAW,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,UAAU,UAAU,YAAY,WAAW,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,YAAY,WAAW,UAAU,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,+TAA+T,qBAAqB,oBAAoB,GAAG,0DAA0D,wCAAwC,iBAAiB,GAAG,wEAAwE,iBAAiB,GAAG,oCAAoC,iBAAiB,qBAAqB,GAAG,wCAAwC,eAAe,mBAAmB,cAAc,qBAAqB,WAAW,8CAA8C,GAAG,+CAA+C,kBAAkB,GAAG,qCAAqC,kBAAkB,wBAAwB,iBAAiB,oBAAoB,GAAG,2CAA2C,8CAA8C,GAAG,2CAA2C,iBAAiB,gBAAgB,GAAG,qBAAqB;AACroD;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC3DvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,2HAA2H,QAAQ,MAAM,YAAY,WAAW,YAAY,aAAa,aAAa,OAAO,OAAO,YAAY,gUAAgU,gHAAgH,qBAAqB,uBAAuB,sBAAsB,GAAG,kGAAkG,sBAAsB,GAAG,qBAAqB;AAC52B;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACzBvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,2HAA2H,QAAQ,MAAM,YAAY,WAAW,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,0TAA0T,qBAAqB,oBAAoB,GAAG,0DAA0D,wCAAwC,iBAAiB,GAAG,kEAAkE,iBAAiB,GAAG,8BAA8B,iBAAiB,GAAG,qCAAqC,qBAAqB,oBAAoB,4BAA4B,wBAAwB,uCAAuC,oCAAoC,sBAAsB,GAAG,qBAAqB;AACrrC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACvCvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,6HAA6H,QAAQ,MAAM,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,WAAW,YAAY,YAAY,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,WAAW,YAAY,WAAW,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,UAAU,MAAM,KAAK,UAAU,KAAK,MAAM,KAAK,YAAY,4TAA4T,kBAAkB,2BAA2B,qBAAqB,qBAAqB,GAAG,gCAAgC,kBAAkB,2BAA2B,mBAAmB,qBAAqB,mBAAmB,4FAA4F,GAAG,gCAAgC,mDAAmD,oBAAoB,GAAG,6CAA6C,mBAAmB,GAAG,uCAAuC,iBAAiB,sBAAsB,GAAG,kCAAkC,iIAAiI,mBAAmB,qBAAqB,wBAAwB,4BAA4B,GAAG,gCAAgC,mBAAmB,GAAG,6CAA6C,iBAAiB,GAAG,wCAAwC,uBAAuB,kBAAkB,uBAAuB,iBAAiB,gBAAgB,GAAG,qDAAqD,mCAAmC,GAAG,2DAA2D,qDAAqD,GAAG,kEAAkE,mCAAmC,GAAG,0DAA0D,mCAAmC,GAAG,iEAAiE,mCAAmC,GAAG,0DAA0D,+GAA+G,GAAG,qDAAqD,yCAAyC,GAAG,+BAA+B,mBAAmB,GAAG,wCAAwC,mBAAmB,iBAAiB,GAAG,2DAA2D,wMAAwM,GAAG,qEAAqE,wBAAwB,GAAG,qBAAqB;AACp+G;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACxHvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,2HAA2H,QAAQ,MAAM,UAAU,sTAAsT,kBAAkB,GAAG,qBAAqB;AAC1f;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACfvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,8HAA8H,OAAO,MAAM,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,WAAW,UAAU,UAAU,YAAY,WAAW,aAAa,aAAa,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,YAAY,WAAW,UAAU,MAAM,KAAK,UAAU,UAAU,MAAM,KAAK,YAAY,WAAW,YAAY,WAAW,MAAM,KAAK,YAAY,OAAO,MAAM,UAAU,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,UAAU,UAAU,UAAU,MAAM,KAAK,UAAU,YAAY,aAAa,OAAO,MAAM,KAAK,OAAO,aAAa,OAAO,OAAO,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,cAAc,aAAa,aAAa,WAAW,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,YAAY,WAAW,MAAM,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,WAAW,KAAK,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,MAAM,UAAU,UAAU,UAAU,UAAU,YAAY,WAAW,UAAU,YAAY,aAAa,WAAW,YAAY,6TAA6T,iBAAiB,kBAAkB,oCAAoC,uCAAuC,8CAA8C,0CAA0C,qBAAqB,iBAAiB,qBAAqB,GAAG,gCAAgC,uBAAuB,mDAAmD,+EAA+E,6EAA6E,WAAW,aAAa,eAAe,qBAAqB,iBAAiB,uCAAuC,uDAAuD,GAAG,uCAAuC,mDAAmD,eAAe,GAAG,oFAAoF,iBAAiB,wBAAwB,GAAG,4DAA4D,8CAA8C,GAAG,6DAA6D,8CAA8C,GAAG,oCAAoC,kBAAkB,wBAAwB,uBAAuB,GAAG,uCAAuC,0BAA0B,oBAAoB,2BAA2B,gBAAgB,iBAAiB,GAAG,2CAA2C,gBAAgB,iBAAiB,GAAG,sCAAsC,iEAAiE,kBAAkB,8CAA8C,gBAAgB,GAAG,mDAAmD,4DAA4D,GAAG,2EAA2E,iBAAiB,qBAAqB,0BAA0B,iBAAiB,2BAA2B,GAAG,uCAAuC,mBAAmB,gBAAgB,iBAAiB,GAAG,uCAAuC,mBAAmB,2DAA2D,4DAA4D,GAAG,uFAAuF,yFAAyF,yBAAyB,GAAG,qHAAqH,kBAAkB,GAAG,2CAA2C,eAAe,GAAG,6CAA6C,mBAAmB,sBAAsB,GAAG,yCAAyC,iDAAiD,GAAG,+CAA+C,mDAAmD,GAAG,wCAAwC,gDAAgD,GAAG,sCAAsC,uBAAuB,wBAAwB,sBAAsB,oBAAoB,0BAA0B,GAAG,wCAAwC,0BAA0B,uBAAuB,sBAAsB,wBAAwB,GAAG,+BAA+B,sBAAsB,GAAG,+CAA+C,eAAe,iBAAiB,2DAA2D,4DAA4D,2BAA2B,wBAAwB,GAAG,qEAAqE,8CAA8C,GAAG,sEAAsE,8CAA8C,GAAG,sCAAsC,2CAA2C,GAAG,4CAA4C,8CAA8C,GAAG,8CAA8C,8CAA8C,GAAG,oDAAoD,8CAA8C,GAAG,uCAAuC,mBAAmB,qBAAqB,gBAAgB,kBAAkB,2BAA2B,mCAAmC,wBAAwB,2BAA2B,GAAG,+CAA+C,oCAAoC,GAAG,sCAAsC,kBAAkB,wBAAwB,sBAAsB,GAAG,oCAAoC,kCAAkC,GAAG,+CAA+C,qBAAqB,0BAA0B,2BAA2B,iEAAiE,qBAAqB,qBAAqB,wEAAwE,mBAAmB,GAAG,qDAAqD,mFAAmF,GAAG,uCAAuC,0BAA0B,uBAAuB,oBAAoB,2BAA2B,oCAAoC,0HAA0H,gBAAgB,iBAAiB,GAAG,6CAA6C,kBAAkB,GAAG,8CAA8C,sBAAsB,kBAAkB,GAAG,uCAAuC,iBAAiB,mDAAmD,2CAA2C,GAAG,6CAA6C,8CAA8C,GAAG,0ZAA0Z,kCAAkC,uBAAuB,qBAAqB,GAAG,oCAAoC,yBAAyB,yBAAyB,GAAG,uGAAuG,gBAAgB,mBAAmB,mBAAmB,kBAAkB,qBAAqB,cAAc,iBAAiB,qBAAqB,qBAAqB,iBAAiB,qBAAqB,GAAG,qBAAqB;AAC7tS;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC1SvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,gIAAgI,MAAM,MAAM,MAAM,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,MAAM,MAAM,MAAM,KAAK,UAAU,UAAU,UAAU,YAAY,WAAW,MAAM,KAAK,YAAY,WAAW,UAAU,UAAU,UAAU,UAAU,OAAO,MAAM,MAAM,KAAK,YAAY,aAAa,aAAa,OAAO,MAAM,MAAM,KAAK,YAAY,OAAO,MAAM,MAAM,KAAK,UAAU,YAAY,WAAW,YAAY,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,UAAU,UAAU,MAAM,aAAa,MAAM,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,OAAO,MAAM,YAAY,OAAO,MAAM,MAAM,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,aAAa,MAAM,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,OAAO,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,MAAM,MAAM,KAAK,UAAU,UAAU,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,UAAU,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,KAAK,UAAU,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,KAAK,MAAM,MAAM,MAAM,KAAK,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,OAAO,MAAM,MAAM,KAAK,UAAU,YAAY,aAAa,aAAa,OAAO,MAAM,MAAM,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,UAAU,MAAM,MAAM,MAAM,KAAK,YAAY,aAAa,aAAa,0OAA0O,qBAAqB,GAAG,iCAAiC,gBAAgB,GAAG,gCAAgC,kBAAkB,uBAAuB,GAAG,oCAAoC,gBAAgB,GAAG,gDAAgD,uBAAuB,GAAG,+BAA+B,yBAAyB,sBAAsB,GAAG,+CAA+C,uBAAuB,6BAA6B,wBAAwB,GAAG,qCAAqC,mBAAmB,sBAAsB,GAAG,uCAAuC,wCAAwC,0BAA0B,GAAG,6CAA6C,4EAA4E,+BAA+B,GAAG,gDAAgD,kBAAkB,GAAG,qFAAqF,cAAc,eAAe,kBAAkB,2BAA2B,iBAAiB,GAAG,mCAAmC,0BAA0B,cAAc,eAAe,kBAAkB,mBAAmB,mBAAmB,GAAG,4GAA4G,yBAAyB,uCAAuC,qBAAqB,GAAG,0FAA0F,0BAA0B,GAAG,uFAAuF,kBAAkB,4BAA4B,oBAAoB,qBAAqB,GAAG,wCAAwC,0BAA0B,GAAG,uFAAuF,mBAAmB,oBAAoB,GAAG,6FAA6F,uCAAuC,mCAAmC,GAAG,kDAAkD,8CAA8C,GAAG,gDAAgD,oBAAoB,GAAG,6EAA6E,sBAAsB,GAAG,sEAAsE,iBAAiB,wEAAwE,GAAG,4CAA4C,iBAAiB,iBAAiB,uCAAuC,oCAAoC,qBAAqB,GAAG,sCAAsC,kBAAkB,wBAAwB,mCAAmC,wBAAwB,GAAG,gFAAgF,6CAA6C,GAAG,yHAAyH,kDAAkD,sBAAsB,GAAG,gEAAgE,kDAAkD,sBAAsB,GAAG,qCAAqC,uCAAuC,qBAAqB,uBAAuB,uBAAuB,4BAA4B,GAAG,4CAA4C,wCAAwC,0BAA0B,GAAG,+CAA+C,8EAA8E,0BAA0B,GAAG,6CAA6C,4EAA4E,+BAA+B,GAAG,sGAAsG,sBAAsB,GAAG,2CAA2C,uCAAuC,GAAG,wCAAwC,kBAAkB,2BAA2B,mCAAmC,GAAG,gFAAgF,gBAAgB,gBAAgB,uBAAuB,qBAAqB,mBAAmB,8CAA8C,GAAG,4DAA4D,mBAAmB,uBAAuB,gBAAgB,iBAAiB,iBAAiB,gBAAgB,uBAAuB,6CAA6C,0CAA0C,GAAG,wBAAwB,QAAQ,mBAAmB,iBAAiB,KAAK,WAAW,iBAAiB,KAAK,WAAW,iBAAiB,KAAK,WAAW,gBAAgB,KAAK,WAAW,iBAAiB,KAAK,YAAY,iBAAiB,KAAK,GAAG,6EAA6E,+DAA+D,4BAA4B,cAAc,sCAAsC,GAAG,4CAA4C,wDAAwD,4BAA4B,cAAc,sCAAsC,GAAG,sFAAsF,kBAAkB,wBAAwB,6BAA6B,8BAA8B,GAAG,yEAAyE,6CAA6C,4CAA4C,qBAAqB,uCAAuC,qBAAqB,GAAG,6CAA6C,iBAAiB,kCAAkC,4CAA4C,uCAAuC,qBAAqB,iBAAiB,gBAAgB,GAAG,mGAAmG,uCAAuC,qBAAqB,oCAAoC,GAAG,qBAAqB;AAC7qR;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACjVvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,qIAAqI,QAAQ,MAAM,UAAU,MAAM,KAAK,UAAU,UAAU,2VAA2V,kBAAkB,GAAG,+BAA+B,eAAe,mBAAmB,GAAG,qBAAqB;AAC5oB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACpBvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,2HAA2H,QAAQ,OAAO,QAAQ,MAAM,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,WAAW,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,UAAU,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,WAAW,MAAM,KAAK,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,WAAW,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,OAAO,KAAK,YAAY,WAAW,MAAM,MAAM,QAAQ,OAAO,UAAU,UAAU,YAAY,WAAW,MAAM,KAAK,UAAU,MAAM,MAAM,QAAQ,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,MAAM,QAAQ,MAAM,UAAU,UAAU,YAAY,WAAW,aAAa,aAAa,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,WAAW,MAAM,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,OAAO,KAAK,YAAY,WAAW,OAAO,KAAK,YAAY,WAAW,OAAO,MAAM,YAAY,aAAa,aAAa,aAAa,OAAO,OAAO,KAAK,YAAY,MAAM,YAAY,SAAS,UAAU,OAAO,QAAQ,UAAU,KAAK,MAAM,YAAY,MAAM,YAAY,OAAO,UAAU,MAAM,MAAM,UAAU,MAAM,MAAM,YAAY,MAAM,YAAY,OAAO,UAAU,OAAO,MAAM,UAAU,KAAK,MAAM,YAAY,MAAM,YAAY,OAAO,UAAU,MAAM,MAAM,UAAU,MAAM,MAAM,KAAK,YAAY,OAAO,YAAY,MAAM,UAAU,UAAU,UAAU,YAAY,WAAW,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,YAAY,aAAa,WAAW,MAAM,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,YAAY,WAAW,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,KAAK,KAAK,KAAK,YAAY,OAAO,MAAM,YAAY,MAAM,MAAM,KAAK,YAAY,aAAa,cAAc,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,OAAO,OAAO,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,OAAO,KAAK,KAAK,OAAO,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,WAAW,MAAM,MAAM,YAAY,OAAO,MAAM,YAAY,aAAa,aAAa,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,WAAW,4dAA4d,iDAAiD,gDAAgD,GAAG,2CAA2C,kBAAkB,2BAA2B,qBAAqB,GAAG,wCAAwC,wBAAwB,iBAAiB,uBAAuB,qBAAqB,eAAe,GAAG,kEAAkE,kBAAkB,GAAG,mCAAmC,kBAAkB,mBAAmB,2BAA2B,GAAG,8CAA8C,wBAAwB,iBAAiB,uBAAuB,qBAAqB,eAAe,GAAG,2BAA2B,mBAAmB,kBAAkB,2BAA2B,qBAAqB,GAAG,qBAAqB,mBAAmB,qBAAqB,GAAG,0BAA0B,kBAAkB,mBAAmB,2CAA2C,oBAAoB,GAAG,gCAAgC,8CAA8C,GAAG,sCAAsC,mBAAmB,GAAG,4CAA4C,6CAA6C,iBAAiB,GAAG,kRAAkR,mBAAmB,oBAAoB,wBAAwB,kBAAkB,GAAG,2EAA2E,gBAAgB,GAAG,8NAA8N,kCAAkC,GAAG,uCAAuC,qBAAqB,GAAG,yDAAyD,kBAAkB,GAAG,+DAA+D,gBAAgB,GAAG,+CAA+C,gBAAgB,GAAG,uCAAuC,sBAAsB,GAAG,2BAA2B,sBAAsB,GAAG,sMAAsM,mBAAmB,kBAAkB,2BAA2B,eAAe,qBAAqB,0CAA0C,GAAG,2BAA2B,mBAAmB,kBAAkB,wBAAwB,wBAAwB,qBAAqB,qEAAqE,wEAAwE,6CAA6C,eAAe,sBAAsB,GAAG,+BAA+B,0BAA0B,qBAAqB,qBAAqB,wBAAwB,2BAA2B,kBAAkB,GAAG,mCAAmC,iBAAiB,4BAA4B,qBAAqB,GAAG,qCAAqC,wCAAwC,GAAG,gEAAgE,2EAA2E,GAAG,oEAAoE,0EAA0E,GAAG,oEAAoE,0EAA0E,GAAG,yFAAyF,sBAAsB,2DAA2D,6BAA6B,4NAA4N,2MAA2M,sBAAsB,KAAK,mLAAmL,oBAAoB,KAAK,GAAG,4DAA4D,mHAAmH,oBAAoB,KAAK,2FAA2F,sBAAsB,KAAK,GAAG,4DAA4D,mHAAmH,sBAAsB,KAAK,2FAA2F,oBAAoB,KAAK,GAAG,4DAA4D,mHAAmH,oBAAoB,KAAK,2FAA2F,sBAAsB,KAAK,GAAG,+CAA+C,qBAAqB,GAAG,oFAAoF,mBAAmB,cAAc,eAAe,0BAA0B,mBAAmB,8CAA8C,uBAAuB,GAAG,iCAAiC,oCAAoC,kCAAkC,sBAAsB,GAAG,qEAAqE,4CAA4C,GAAG,4IAA4I,iDAAiD,0BAA0B,iBAAiB,GAAG,yBAAyB,wBAAwB,oDAAoD,8BAA8B,2BAA2B,0BAA0B,sBAAsB,yBAAyB,mCAAmC,gBAAgB,2BAA2B,2BAA2B,GAAG,oCAAoC,0DAA0D,GAAG,2DAA2D,uBAAuB,eAAe,6BAA6B,GAAG,mDAAmD,wBAAwB,GAAG,iHAAiH,oCAAoC,yBAAyB,KAAK,uIAAuI,0BAA0B,KAAK,GAAG,iCAAiC,sCAAsC,wCAAwC,6BAA6B,+GAA+G,GAAG,+CAA+C,uCAAuC,yCAAyC,GAAG,qDAAqD,yCAAyC,GAAG,uCAAuC,uBAAuB,0CAA0C,GAAG,6BAA6B,kBAAkB,GAAG,sCAAsC,iBAAiB,GAAG,yCAAyC,4CAA4C,uCAAuC,GAAG,2CAA2C,uCAAuC,GAAG,qDAAqD,wCAAwC,GAAG,6BAA6B,mBAAmB,sBAAsB,GAAG,yFAAyF,qBAAqB,4BAA4B,wBAAwB,GAAG,6EAA6E,oBAAoB,GAAG,oEAAoE,2LAA2L,mDAAmD,yBAAyB,yBAAyB,GAAG,sDAAsD,2CAA2C,GAAG,mFAAmF,eAAe,GAAG,iCAAiC,sBAAsB,GAAG,iCAAiC,sBAAsB,GAAG,2BAA2B,mBAAmB,kBAAkB,iBAAiB,oCAAoC,8CAA8C,GAAG,wEAAwE,oCAAoC,sBAAsB,mBAAmB,uBAAuB,eAAe,GAAG,2FAA2F,4CAA4C,GAAG,mGAAmG,uCAAuC,sBAAsB,qBAAqB,iBAAiB,uDAAuD,uCAAuC,qBAAqB,oCAAoC,iDAAiD,GAAG,kBAAkB,qBAAqB,sBAAsB,kBAAkB,GAAG,qBAAqB;AACv8b;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACjdvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,0HAA0H,QAAQ,OAAO,QAAQ,MAAM,YAAY,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,iiBAAiiB,+DAA+D,GAAG,+BAA+B,mBAAmB,GAAG,0CAA0C,iBAAiB,GAAG,qBAAqB;AACj8B;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC3BvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,8HAA8H,QAAQ,MAAM,YAAY,aAAa,aAAa,WAAW,MAAM,KAAK,WAAW,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,YAAY,aAAa,OAAO,KAAK,aAAa,aAAa,aAAa,WAAW,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,+SAA+S,qBAAqB,sBAAsB,wCAAwC,kBAAkB,GAAG,uBAAuB,iBAAiB,+FAA+F,GAAG,oBAAoB,kBAAkB,uCAAuC,oCAAoC,qBAAqB,2BAA2B,gBAAgB,qBAAqB,sBAAsB,GAAG,4BAA4B,oCAAoC,uGAAuG,iBAAiB,qBAAqB,0BAA0B,qBAAqB,sBAAsB,GAAG,uBAAuB,mBAAmB,qBAAqB,GAAG,6BAA6B,kBAAkB,2BAA2B,gCAAgC,4BAA4B,sBAAsB,GAAG,+CAA+C,0BAA0B,GAAG,qDAAqD,wCAAwC,+BAA+B,GAAG,yBAAyB,sBAAsB,GAAG,sBAAsB,kBAAkB,wBAAwB,wBAAwB,GAAG,wBAAwB,0BAA0B,GAAG,2BAA2B,kBAAkB,2BAA2B,sBAAsB,GAAG,qBAAqB;AAChgF;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC1FvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,0HAA0H,QAAQ,aAAa,MAAM,YAAY,aAAa,aAAa,WAAW,UAAU,MAAM,KAAK,UAAU,MAAM,SAAS,KAAK,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,UAAU,UAAU,YAAY,4UAA4U,qBAAqB,qBAAqB,sBAAsB,gBAAgB,iBAAiB,GAAG,6BAA6B,iBAAiB,GAAG,+TAA+T,uBAAuB,GAAG,wDAAwD,gBAAgB,uBAAuB,WAAW,YAAY,aAAa,cAAc,4BAA4B,GAAG,qBAAqB;AACv2C;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC5CvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,2HAA2H,QAAQ,MAAM,UAAU,OAAO,KAAK,YAAY,aAAa,sTAAsT,mBAAmB,GAAG,2BAA2B,2BAA2B,+BAA+B,GAAG,qBAAqB;AACxnB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACpBvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,yHAAyH,QAAQ,OAAO,QAAQ,MAAM,YAAY,aAAa,OAAO,MAAM,QAAQ,MAAM,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,UAAU,UAAU,UAAU,UAAU,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,6dAA6d,4CAA4C,2CAA2C,GAAG,oMAAoM,kBAAkB,qBAAqB,sBAAsB,GAAG,2BAA2B,wCAAwC,iBAAiB,iBAAiB,gBAAgB,iBAAiB,mBAAmB,GAAG,mDAAmD,wCAAwC,4CAA4C,cAAc,0BAA0B,GAAG,sCAAsC,uBAAuB,yCAAyC,GAAG,2CAA2C,2DAA2D,GAAG,qBAAqB;AACxyD;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACvDvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,kIAAkI,QAAQ,MAAM,YAAY,6JAA6J,oCAAoC,GAAG,qBAAqB;AAC5X;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACbvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,EAAE;AACF,OAAO,8HAA8H,MAAM,YAAY,MAAM,UAAU,UAAU,UAAU,YAAY,OAAO,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,UAAU,YAAY,WAAW,MAAM,YAAY,MAAM,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,aAAa,OAAO,gLAAgL,gBAAgB,iBAAiB,eAAe,qBAAqB,GAAG,gFAAgF,6CAA6C,GAAG,yBAAyB,yBAAyB,GAAG,iCAAiC,uBAAuB,gBAAgB,qBAAqB,GAAG,8BAA8B,uBAAuB,WAAW,aAAa,eAAe,qBAAqB,gBAAgB,GAAG,8DAA8D,8BAA8B,qBAAqB,GAAG,2CAA2C,yEAAyE,mDAAmD,GAAG,+DAA+D,MAAM,uBAAuB;AAC7/C;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC5DvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,wHAAwH,QAAQ,cAAc,MAAM,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,WAAW,KAAK,UAAU,UAAU,UAAU,YAAY,aAAa,aAAa,cAAc,MAAM,OAAO,aAAa,OAAO,KAAK,UAAU,UAAU,YAAY,WAAW,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,MAAM,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,aAAa,MAAM,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,cAAc,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,aAAa,MAAM,UAAU,UAAU,YAAY,WAAW,YAAY,WAAW,OAAO,KAAK,UAAU,YAAY,WAAW,YAAY,aAAa,WAAW,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,gBAAgB,OAAO,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,WAAW,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,MAAM,aAAa,MAAM,YAAY,aAAa,WAAW,WAAW,YAAY,aAAa,2UAA2U,+CAA+C,gDAAgD,6CAA6C,qDAAqD,oDAAoD,+CAA+C,mDAAmD,GAAG,oCAAoC,cAAc,eAAe,kBAAkB,wCAAwC,2BAA2B,qBAAqB,sBAAsB,qJAAqJ,GAAG,uBAAuB,gBAAgB,iBAAiB,2BAA2B,mBAAmB,kBAAkB,4BAA4B,GAAG,yBAAyB,uCAAuC,wBAAwB,oCAAoC,kBAAkB,GAAG,0BAA0B,eAAe,iBAAiB,wDAAwD,0DAA0D,2DAA2D,2BAA2B,GAAG,oDAAoD,gBAAgB,2BAA2B,yBAAyB,GAAG,gCAAgC,kBAAkB,wBAAwB,wBAAwB,2BAA2B,uGAAuG,qDAAqD,sBAAsB,uBAAuB,GAAG,+BAA+B,uCAAuC,wBAAwB,oCAAoC,2BAA2B,GAAG,wDAAwD,cAAc,eAAe,2BAA2B,kBAAkB,wBAAwB,oBAAoB,GAAG,sBAAsB,kBAAkB,2BAA2B,oBAAoB,gDAAgD,qDAAqD,gBAAgB,eAAe,8CAA8C,wCAAwC,uCAAuC,gCAAgC,2CAA2C,GAAG,yCAAyC,6CAA6C,uCAAuC,oBAAoB,kKAAkK,4BAA4B,uCAAuC,wCAAwC,GAAG,6BAA6B,uCAAuC,GAAG,2BAA2B,gBAAgB,wDAAwD,2BAA2B,cAAc,eAAe,kBAAkB,4BAA4B,wBAAwB,GAAG,mCAAmC,wBAAwB,0DAA0D,GAAG,8EAA8E,8FAA8F,GAAG,6EAA6E,wEAAwE,GAAG,4BAA4B,gBAAgB,6DAA6D,uBAAuB,2BAA2B,qBAAqB,GAAG,8BAA8B,wBAAwB,2BAA2B,uBAAuB,oCAAoC,yBAAyB,qDAAqD,qBAAqB,iBAAiB,GAAG,mDAAmD,sDAAsD,uDAAuD,cAAc,eAAe,+DAA+D,GAAG,qBAAqB;AACxuM;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC/LvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,oIAAoI,QAAQ,MAAM,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,MAAM,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,YAAY,OAAO,UAAU,MAAM,KAAK,YAAY,aAAa,WAAW,OAAO,KAAK,YAAY,WAAW,OAAO,YAAY,MAAM,UAAU,YAAY,OAAO,YAAY,MAAM,UAAU,YAAY,aAAa,aAAa,WAAW,OAAO,YAAY,MAAM,YAAY,uTAAuT,QAAQ,+CAA+C,KAAK,WAAW,mBAAmB,8BAA8B,KAAK,YAAY,+CAA+C,KAAK,GAAG,kDAAkD,gCAAgC,GAAG,8CAA8C,6CAA6C,GAAG,6LAA6L,iBAAiB,GAAG,kCAAkC,6BAA6B,qBAAqB,mBAAmB,GAAG,oDAAoD,wBAAwB,mBAAmB,GAAG,uGAAuG,iBAAiB,wBAAwB,GAAG,8GAA8G,iBAAiB,uCAAuC,sBAAsB,qBAAqB,mBAAmB,GAAG,4GAA4G,wBAAwB,GAAG,qBAAqB;AACppE;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACvEvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,0HAA0H,QAAQ,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,MAAM,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,UAAU,YAAY,OAAO,KAAK,YAAY,0TAA0T,qBAAqB,GAAG,8CAA8C,qDAAqD,GAAG,+CAA+C,gBAAgB,oCAAoC,oBAAoB,iBAAiB,GAAG,sEAAsE,4CAA4C,4CAA4C,GAAG,yEAAyE,4CAA4C,4CAA4C,GAAG,uEAAuE,6CAA6C,4CAA4C,GAAG,0EAA0E,6CAA6C,4CAA4C,GAAG,mCAAmC,iBAAiB,oBAAoB,oCAAoC,GAAG,mBAAmB,qBAAqB,GAAG,qBAAqB;AACj0D;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACxDvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,6HAA6H,QAAQ,MAAM,UAAU,kVAAkV,mBAAmB,GAAG,qBAAqB;AACzhB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACfvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,8HAA8H,QAAQ,MAAM,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,WAAW,OAAO,MAAM,QAAQ,MAAM,YAAY,aAAa,4SAA4S,8CAA8C,GAAG,0DAA0D,0DAA0D,4DAA4D,6DAA6D,2DAA2D,mBAAmB,GAAG,4RAA4R,uEAAuE,+DAA+D,GAAG,qBAAqB;AACl3C;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AChCvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;AACA,OAAO,sIAAsI,8JAA8J;AAC3S;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;ACXvC;AACqH;AACjB;AACY;AAChH,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F,0BAA0B,uGAAiC;AAC3D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,iIAAiI,QAAQ,aAAa,MAAM,UAAU,0TAA0T,8HAA8H,cAAc,GAAG,qBAAqB;AAC3oB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;;AClBvC;AACqH;AACjB;AACO;AAC3G,4CAA4C,oEAAgF;AAC5H,4CAA4C,oEAAwF;AACpI,4CAA4C,oEAAqF;AACjI,4CAA4C,oEAAuF;AACnI,4CAA4C,oEAAuF;AACnI,4CAA4C,oEAA2F;AACvI,4CAA4C,oEAAyF;AACrI,4CAA4C,mEAAyF;AACrI,4CAA4C,oEAAyF;AACrI,4CAA4C,oEAAyF;AACrI,6CAA6C,oEAAuF;AACpI,6CAA6C,oEAAgG;AAC7I,6CAA6C,oEAA6F;AAC1I,6CAA6C,oEAA2F;AACxI,6CAA6C,mEAAwF;AACrI,6CAA6C,oEAA6F;AAC1I,6CAA6C,oEAA0F;AACvI,6CAA6C,oEAA4F;AACzI,6CAA6C,oEAA0F;AACvI,6CAA6C,oEAA8F;AAC3I,6CAA6C,oEAA0F;AACvI,6CAA6C,oEAAuF;AACpI,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,mCAAmC;AAChD;AACA;;AAEA;AACA;AACA;AACA,aAAa,mCAAmC;AAChD;AACA;;AAEA;AACA;AACA;AACA,aAAa,mCAAmC;AAChD;AACA;;AAEA;AACA;AACA;AACA,aAAa,mCAAmC;AAChD;AACA;;AAEA;AACA;AACA;AACA,aAAa,mCAAmC;AAChD;AACA;;AAEA;AACA;AACA;AACA,aAAa,mCAAmC;AAChD;AACA;;AAEA;AACA;AACA;AACA,aAAa,mCAAmC;AAChD;AACA;;AAEA;AACA;AACA;AACA,aAAa,mCAAmC;AAChD;AACA;;AAEA;AACA;AACA;AACA,aAAa,mCAAmC;AAChD;AACA;;AAEA;AACA;AACA;AACA,aAAa,mCAAmC;AAChD;AACA;;AAEA;AACA;AACA;AACA,aAAa,oCAAoC;AACjD;AACA;;AAEA;AACA;AACA;AACA,aAAa,oCAAoC;AACjD;AACA;;AAEA;AACA;AACA;AACA,aAAa,oCAAoC;AACjD;AACA;;AAEA;AACA;AACA;AACA,aAAa,oCAAoC;AACjD;AACA;;AAEA;AACA;AACA;AACA,aAAa,oCAAoC;AACjD;AACA;;AAEA;AACA;AACA;AACA,aAAa,oCAAoC;AACjD;AACA;;AAEA;AACA;AACA;AACA,aAAa,oCAAoC;AACjD;AACA;;AAEA;AACA;AACA,aAAa,oCAAoC;AACjD;AACA;;AAEA;AACA;AACA;AACA,aAAa,oCAAoC;AACjD;AACA;;AAEA;AACA;AACA;AACA,aAAa,oCAAoC;AACjD;AACA;;AAEA;AACA;AACA;AACA,aAAa,oCAAoC;AACjD;AACA;;AAEA;AACA;AACA;AACA,aAAa,oCAAoC;AACjD;AACA;AACA,OAAO,kIAAkI,MAAM,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,OAAO,KAAK,YAAY,aAAa,MAAM,OAAO,kKAAkK,uBAAuB,yBAAyB,mGAAmG,GAAG,wBAAwB,uBAAuB,wBAAwB,2GAA2G,GAAG,wBAAwB,uBAAuB,0BAA0B,wGAAwG,GAAG,wBAAwB,uBAAuB,0BAA0B,0GAA0G,GAAG,wBAAwB,uBAAuB,2BAA2B,0GAA0G,GAAG,wBAAwB,uBAAuB,2BAA2B,8GAA8G,GAAG,wBAAwB,uBAAuB,6BAA6B,4GAA4G,GAAG,wBAAwB,uBAAuB,6BAA6B,4GAA4G,GAAG,wBAAwB,uBAAuB,6BAA6B,4GAA4G,GAAG,wBAAwB,uBAAuB,6BAA6B,4GAA4G,GAAG,yBAAyB,uBAAuB,0BAA0B,0GAA0G,GAAG,yBAAyB,uBAAuB,0BAA0B,mHAAmH,GAAG,yBAAyB,uBAAuB,2BAA2B,gHAAgH,GAAG,yBAAyB,uBAAuB,2BAA2B,8GAA8G,GAAG,yBAAyB,uBAAuB,4BAA4B,2GAA2G,GAAG,yBAAyB,uBAAuB,2BAA2B,gHAAgH,GAAG,yBAAyB,uBAAuB,4BAA4B,6GAA6G,GAAG,yBAAyB,4BAA4B,+GAA+G,GAAG,yBAAyB,uBAAuB,2BAA2B,6GAA6G,GAAG,yBAAyB,uBAAuB,0BAA0B,iHAAiH,GAAG,yBAAyB,uBAAuB,0BAA0B,6GAA6G,GAAG,yBAAyB,uBAAuB,2BAA2B,0GAA0G,GAAG,qBAAqB;AACx0K;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACjNvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;AACA,OAAO,iIAAiI,uTAAuT;AAC/b;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACXvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,uHAAuH,KAAK,KAAK,UAAU,UAAU,MAAM,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,UAAU,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,aAAa,iKAAiK,mBAAmB,kBAAkB,GAAG,wCAAwC,gBAAgB,mBAAmB,sBAAsB,+DAA+D,2CAA2C,oCAAoC,uCAAuC,0BAA0B,0BAA0B,GAAG,gCAAgC,cAAc,mBAAmB,oBAAoB,GAAG,6BAA6B,oBAAoB,GAAG,uCAAuC,oBAAoB,GAAG,iCAAiC,iCAAiC,GAAG,kDAAkD,kBAAkB,GAAG,uCAAuC,0BAA0B,wBAAwB,GAAG,qBAAqB;AAC15C;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACtDvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,4HAA4H,QAAQ,MAAM,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,sTAAsT,gBAAgB,oCAAoC,wCAAwC,GAAG,kCAAkC,kBAAkB,wBAAwB,4BAA4B,GAAG,yCAAyC,iBAAiB,GAAG,2CAA2C,kBAAkB,GAAG,qBAAqB;AACh6B;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;;;;AC/BvC;AACqH;AACjB;AACc;AACW;AACf;AACW;AACzH,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F,0BAA0B,yGAAiC;AAC3D,0BAA0B,oHAAiC;AAC3D,0BAA0B,qGAAiC;AAC3D,0BAA0B,gHAAiC;AAC3D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,wHAAwH,QAAQ,OAAO,QAAQ,OAAO,QAAQ,MAAM,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,MAAM,QAAQ,cAAc,MAAM,UAAU,UAAU,MAAM,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,OAAO,KAAK,UAAU,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,MAAM,kBAAkB,QAAQ,cAAc,MAAM,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,YAAY,MAAM,YAAY,OAAO,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,YAAY,OAAO,YAAY,MAAM,YAAY,aAAa,aAAa,OAAO,YAAY,MAAM,YAAY,WAAW,MAAM,aAAa,MAAM,YAAY,OAAO,MAAM,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,WAAW,MAAM,WAAW,KAAK,YAAY,aAAa,aAAa,OAAO,MAAM,QAAQ,MAAM,UAAU,MAAM,OAAO,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,UAAU,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,UAAU,UAAU,YAAY,aAAa,aAAa,SAAS,KAAK,YAAY,OAAO,MAAM,QAAQ,MAAM,UAAU,YAAY,aAAa,cAAc,MAAM,OAAO,aAAa,WAAW,OAAO,KAAK,UAAU,UAAU,MAAM,KAAK,UAAU,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,OAAO,KAAK,YAAY,WAAW,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,OAAO,YAAY,OAAO,KAAK,UAAU,UAAU,OAAO,KAAK,YAAY,OAAO,MAAM,QAAQ,MAAM,YAAY,aAAa,OAAO,MAAM,UAAU,OAAO,MAAM,OAAO,MAAM,UAAU,YAAY,WAAW,YAAY,OAAO,KAAK,UAAU,OAAO,KAAK,YAAY,QAAQ,OAAO,OAAO,KAAK,OAAO,KAAK,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,UAAU,YAAY,WAAW,UAAU,MAAM,OAAO,YAAY,OAAO,KAAK,UAAU,MAAM,MAAM,QAAQ,MAAM,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,KAAK,YAAY,aAAa,WAAW,YAAY,WAAW,UAAU,UAAU,MAAM,KAAK,UAAU,UAAU,UAAU,UAAU,MAAM,KAAK,UAAU,UAAU,UAAU,UAAU,MAAM,OAAO,UAAU,UAAU,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,MAAM,QAAQ,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,MAAM,KAAK,YAAY,aAAa,WAAW,YAAY,aAAa,aAAa,yBAAyB,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,MAAM,OAAO,MAAM,KAAK,UAAU,KAAK,2eAA2e,qCAAqC,sBAAsB,iCAAiC,gMAAgM,uCAAuC,uEAAuE,iDAAiD,iDAAiD,sEAAsE,qEAAqE,GAAG,qPAAqP,mBAAmB,iBAAiB,GAAG,mCAAmC,qBAAqB,sBAAsB,GAAG,kBAAkB,kBAAkB,wCAAwC,GAAG,6CAA6C,wCAAwC,GAAG,wEAAwE,mBAAmB,gBAAgB,kDAAkD,GAAG,qDAAqD,oBAAoB,GAAG,2BAA2B,sBAAsB,GAAG,2CAA2C,iBAAiB,gBAAgB,GAAG,ulBAAulB,sDAAsD,uDAAuD,GAAG,gEAAgE,sDAAsD,uDAAuD,GAAG,6EAA6E,uCAAuC,GAAG,6EAA6E,iCAAiC,GAAG,gEAAgE,iCAAiC,iBAAiB,GAAG,oEAAoE,sCAAsC,GAAG,2EAA2E,uCAAuC,uCAAuC,+DAA+D,GAAG,4GAA4G,uCAAuC,eAAe,GAAG,oFAAoF,uDAAuD,GAAG,0GAA0G,4BAA4B,GAAG,0EAA0E,kBAAkB,iBAAiB,uBAAuB,iDAAiD,eAAe,GAAG,iGAAiG,mFAAmF,iDAAiD,8DAA8D,GAAG,uOAAuO,iBAAiB,GAAG,gJAAgJ,gEAAgE,4BAA4B,0BAA0B,GAAG,mBAAmB,kBAAkB,wBAAwB,sDAAsD,wDAAwD,4EAA4E,iDAAiD,sBAAsB,GAAG,gCAAgC,kDAAkD,GAAG,yCAAyC,mBAAmB,eAAe,wCAAwC,4CAA4C,4CAA4C,oCAAoC,4EAA4E,uDAAuD,yCAAyC,qBAAqB,0BAA0B,GAAG,wCAAwC,mBAAmB,oBAAoB,8CAA8C,iBAAiB,oCAAoC,uBAAuB,mDAAmD,yDAAyD,qBAAqB,wCAAwC,qDAAqD,GAAG,gCAAgC,gBAAgB,uBAAuB,iBAAiB,iBAAiB,aAAa,cAAc,wCAAwC,yCAAyC,wBAAwB,wGAAwG,kDAAkD,GAAG,2MAA2M,mBAAmB,2CAA2C,oCAAoC,wCAAwC,sJAAsJ,mBAAmB,GAAG,wBAAwB,oBAAoB,kBAAkB,GAAG,gCAAgC,mBAAmB,GAAG,uDAAuD,iDAAiD,4EAA4E,qBAAqB,qBAAqB,GAAG,wCAAwC,wDAAwD,GAAG,0CAA0C,qBAAqB,cAAc,wBAAwB,GAAG,4BAA4B,2BAA2B,oBAAoB,GAAG,0CAA0C,qBAAqB,GAAG,0CAA0C,uCAAuC,oCAAoC,iEAAiE,GAAG,mFAAmF,qBAAqB,GAAG,4BAA4B,gBAAgB,oBAAoB,GAAG,oCAAoC,qBAAqB,GAAG,+PAA+P,uEAAuE,+DAA+D,GAAG,sIAAsI,oBAAoB,GAAG,kQAAkQ,oBAAoB,uBAAuB,oBAAoB,qBAAqB,GAAG,iDAAiD,kBAAkB,+HAA+H,iDAAiD,4GAA4G,GAAG,oEAAoE,gIAAgI,GAAG,gEAAgE,sBAAsB,GAAG,uEAAuE,qBAAqB,GAAG,wEAAwE,4GAA4G,sBAAsB,GAAG,gEAAgE,sBAAsB,GAAG,sEAAsE,sBAAsB,sBAAsB,mBAAmB,iBAAiB,sBAAsB,sCAAsC,GAAG,6EAA6E,gBAAgB,mBAAmB,wCAAwC,iBAAiB,eAAe,GAAG,sGAAsG,wCAAwC,GAAG,0BAA0B,kBAAkB,GAAG,6MAA6M,uBAAuB,GAAG,kCAAkC,qBAAqB,sBAAsB,0CAA0C,uBAAuB,+BAA+B,sBAAsB,GAAG,wCAAwC,kBAAkB,uBAAuB,GAAG,uCAAuC,8BAA8B,8BAA8B,GAAG,2CAA2C,wBAAwB,sIAAsI,iCAAiC,iCAAiC,kBAAkB,uBAAuB,gBAAgB,eAAe,cAAc,GAAG,gCAAgC,cAAc,iBAAiB,eAAe,iBAAiB,GAAG,gCAAgC,eAAe,cAAc,iBAAiB,iBAAiB,GAAG,+GAA+G,eAAe,gBAAgB,iBAAiB,GAAG,uCAAuC,eAAe,GAAG,uCAAuC,eAAe,GAAG,uCAAuC,eAAe,GAAG,iQAAiQ,uCAAuC,GAAG,8EAA8E,uCAAuC,GAAG,sEAAsE,sCAAsC,GAAG,4EAA4E,sCAAsC,GAAG,yEAAyE,uCAAuC,4CAA4C,GAAG,+EAA+E,uCAAuC,GAAG,uEAAuE,uCAAuC,4CAA4C,GAAG,6EAA6E,uCAAuC,GAAG,mDAAmD,oBAAoB,kBAAkB,GAAG,uDAAuD,0BAA0B,2BAA2B,mBAAmB,sBAAsB,sBAAsB,uBAAuB,uBAAuB,iDAAiD,2CAA2C,0BAA0B,mBAAmB,2BAA2B,qBAAqB,qBAAqB,GAAG,sGAAsG,qBAAqB,GAAG,0GAA0G,0BAA0B,GAAG,gMAAgM,2CAA2C,kBAAkB,KAAK,GAAG,qBAAqB;AACphkB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACrjBvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,sIAAsI,QAAQ,OAAO,QAAQ,SAAS,QAAQ,MAAM,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,UAAU,UAAU,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,WAAW,OAAO,KAAK,UAAU,YAAY,WAAW,uvBAAuvB,uBAAuB,0BAA0B,kBAAkB,qBAAqB,GAAG,6CAA6C,uBAAuB,iBAAiB,uBAAuB,4BAA4B,8CAA8C,oCAAoC,wBAAwB,uBAAuB,mBAAmB,oBAAoB,mBAAmB,GAAG,gDAAgD,oEAAoE,GAAG,kDAAkD,8DAA8D,GAAG,oDAAoD,kBAAkB,GAAG,mFAAmF,wBAAwB,GAAG,0CAA0C,uCAAuC,0CAA0C,oCAAoC,sBAAsB,mBAAmB,GAAG,kDAAkD,kBAAkB,4BAA4B,iBAAiB,GAAG,qBAAqB;AAC39E;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACxEvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,kIAAkI,MAAM,KAAK,UAAU,OAAO,KAAK,UAAU,KAAK,YAAY,aAAa,aAAa,WAAW,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,KAAK,UAAU,MAAM,MAAM,UAAU,KAAK,kKAAkK,iBAAiB,2JAA2J,mMAAmM,4EAA4E,oCAAoC,qBAAqB,oBAAoB,GAAG,+BAA+B,4DAA4D,GAAG,6FAA6F,yBAAyB,iBAAiB,KAAK,+DAA+D,iBAAiB,KAAK,GAAG,qBAAqB;AACz0C;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC9CvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,uHAAuH,MAAM,MAAM,KAAK,KAAK,WAAW,YAAY,WAAW,UAAU,YAAY,WAAW,YAAY,WAAW,MAAM,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,OAAO,YAAY,2MAA2M,gBAAgB,8DAA8D,iBAAiB,qBAAqB,iBAAiB,uBAAuB,aAAa,GAAG,kDAAkD,uBAAuB,yEAAyE,qBAAqB,GAAG,kDAAkD,uBAAuB,yEAAyE,sDAAsD,GAAG,qDAAqD,iGAAiG,kCAAkC,GAAG,8HAA8H,uBAAuB,GAAG,qBAAqB;AACj/C;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AClDvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,2HAA2H,QAAQ,OAAO,QAAQ,MAAM,YAAY,OAAO,QAAQ,QAAQ,MAAM,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,6dAA6d,+CAA+C,GAAG,gSAAgS,gDAAgD,uHAAuH,GAAG,iDAAiD,sBAAsB,GAAG,qBAAqB;AAC/zC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACpCvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,0HAA0H,QAAQ,QAAQ,QAAQ,MAAM,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,cAAc,aAAa,aAAa,aAAa,aAAa,cAAc,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,MAAM,MAAM,KAAK,YAAY,WAAW,YAAY,WAAW,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,UAAU,OAAO,MAAM,KAAK,KAAK,UAAU,UAAU,OAAO,SAAS,KAAK,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,UAAU,UAAU,YAAY,OAAO,WAAW,KAAK,UAAU,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,WAAW,KAAK,UAAU,UAAU,OAAO,aAAa,QAAQ,UAAU,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,MAAM,KAAK,YAAY,WAAW,UAAU,UAAU,UAAU,MAAM,KAAK,UAAU,UAAU,UAAU,UAAU,MAAM,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,OAAO,KAAK,KAAK,UAAU,MAAM,YAAY,MAAM,UAAU,UAAU,MAAM,OAAO,QAAQ,MAAM,UAAU,UAAU,UAAU,OAAO,MAAM,KAAK,KAAK,YAAY,aAAa,OAAO,MAAM,QAAQ,MAAM,YAAY,aAAa,aAAa,WAAW,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,WAAW,aAAa,aAAa,cAAc,aAAa,aAAa,aAAa,WAAW,MAAM,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,WAAW,UAAU,MAAM,MAAM,QAAQ,MAAM,UAAU,UAAU,OAAO,KAAK,UAAU,MAAM,MAAM,QAAQ,MAAM,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,MAAM,MAAM,MAAM,OAAO,MAAM,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,KAAK,MAAM,YAAY,MAAM,UAAU,YAAY,WAAW,OAAO,KAAK,YAAY,ghBAAghB,qBAAqB,GAAG,0BAA0B,kBAAkB,wBAAwB,gBAAgB,qBAAqB,GAAG,sBAAsB,uCAAuC,0CAA0C,+CAA+C,mDAAmD,oCAAoC,yDAAyD,4CAA4C,wCAAwC,qDAAqD,2CAA2C,oGAAoG,wBAAwB,qBAAqB,4BAA4B,gEAAgE,2BAA2B,0BAA0B,sBAAsB,GAAG,2BAA2B,gBAAgB,iBAAiB,mBAAmB,sBAAsB,2BAA2B,8BAA8B,0BAA0B,GAAG,qCAAqC,sBAAsB,GAAG,kEAAkE,uBAAuB,WAAW,uCAAuC,iBAAiB,iBAAiB,kBAAkB,wBAAwB,4BAA4B,GAAG,kDAAkD,kBAAkB,GAAG,wDAAwD,qBAAqB,GAAG,wCAAwC,wCAAwC,8DAA8D,GAAG,gDAAgD,iBAAiB,mBAAmB,GAAG,0EAA0E,gBAAgB,mBAAmB,GAAG,sVAAsV,uBAAuB,GAAG,+EAA+E,gBAAgB,uBAAuB,WAAW,YAAY,aAAa,cAAc,4BAA4B,GAAG,4CAA4C,iBAAiB,cAAc,eAAe,qBAAqB,qBAAqB,0BAA0B,0BAA0B,0BAA0B,GAAG,uEAAuE,mBAAmB,oBAAoB,GAAG,+GAA+G,mBAAmB,GAAG,8BAA8B,gBAAgB,qBAAqB,eAAe,cAAc,GAAG,8BAA8B,sBAAsB,gBAAgB,eAAe,eAAe,cAAc,GAAG,8BAA8B,gBAAgB,eAAe,eAAe,cAAc,GAAG,gDAAgD,wCAAwC,oDAAoD,uBAAuB,8BAA8B,GAAG,0LAA0L,kBAAkB,GAAG,iHAAiH,eAAe,cAAc,GAAG,8TAA8T,mBAAmB,gBAAgB,mBAAmB,GAAG,8LAA8L,wCAAwC,yDAAyD,GAAG,8MAA8M,yCAAyC,0CAA0C,6BAA6B,mBAAmB,GAAG,qBAAqB,4CAA4C,uBAAuB,mBAAmB,8BAA8B,eAAe,qBAAqB,oFAAoF,oFAAoF,qBAAqB,kBAAkB,GAAG,kCAAkC,eAAe,GAAG,2BAA2B,qBAAqB,GAAG,wCAAwC,eAAe,GAAG,iCAAiC,+DAA+D,cAAc,GAAG,iOAAiO,iBAAiB,mBAAmB,GAAG,2DAA2D,iBAAiB,GAAG,kMAAkM,0BAA0B,qBAAqB,0BAA0B,+BAA+B,KAAK,6BAA6B,0BAA0B,0BAA0B,KAAK,6BAA6B,0BAA0B,KAAK,GAAG,yNAAyN,0BAA0B,6BAA6B,KAAK,wBAAwB,qBAAqB,uBAAuB,KAAK,oCAAoC,oBAAoB,KAAK,GAAG,2DAA2D,iBAAiB,0BAA0B,oBAAoB,GAAG,kCAAkC,0BAA0B,GAAG,qBAAqB;AAChiT;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACtUvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,6HAA6H,QAAQ,MAAM,YAAY,WAAW,UAAU,UAAU,UAAU,UAAU,MAAM,KAAK,YAAY,OAAO,QAAQ,KAAK,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,UAAU,UAAU,UAAU,YAAY,8TAA8T,uBAAuB,eAAe,WAAW,aAAa,gBAAgB,iBAAiB,GAAG,qCAAqC,sBAAsB,GAAG,iPAAiP,uBAAuB,GAAG,0DAA0D,gBAAgB,uBAAuB,gBAAgB,WAAW,YAAY,aAAa,cAAc,4BAA4B,GAAG,qBAAqB;AAC9yC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC5CvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,6HAA6H,MAAM,KAAK,UAAU,YAAY,OAAO,MAAM,UAAU,MAAM,KAAK,YAAY,WAAW,MAAM,KAAK,UAAU,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,gKAAgK,kBAAkB,oDAAoD,GAAG,6DAA6D,iBAAiB,GAAG,2CAA2C,uBAAuB,aAAa,GAAG,qCAAqC,mBAAmB,GAAG,kEAAkE,qBAAqB,GAAG,0CAA0C,qBAAqB,GAAG,8CAA8C,gBAAgB,GAAG,qBAAqB;AACl/B;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC1CvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,kIAAkI,QAAQ,MAAM,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,YAAY,4TAA4T,kBAAkB,oCAAoC,wCAAwC,GAAG,mCAAmC,iBAAiB,GAAG,uCAAuC,uBAAuB,GAAG,8CAA8C,yCAAyC,iBAAiB,GAAG,mDAAmD,2DAA2D,GAAG,qBAAqB;AACviC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AClCvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,0HAA0H,QAAQ,OAAO,QAAQ,MAAM,YAAY,OAAO,KAAK,MAAM,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,OAAO,YAAY,aAAa,WAAW,UAAU,UAAU,MAAM,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,YAAY,MAAM,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,MAAM,QAAQ,MAAM,YAAY,aAAa,aAAa,OAAO,YAAY,MAAM,YAAY,aAAa,OAAO,MAAM,QAAQ,MAAM,YAAY,aAAa,aAAa,cAAc,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,WAAW,UAAU,YAAY,aAAa,aAAa,MAAM,OAAO,aAAa,OAAO,UAAU,YAAY,aAAa,OAAO,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,WAAW,aAAa,OAAO,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,MAAM,YAAY,OAAO,QAAQ,YAAY,OAAO,aAAa,MAAM,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,OAAO,MAAM,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,WAAW,KAAK,YAAY,aAAa,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,OAAO,YAAY,WAAW,YAAY,aAAa,WAAW,UAAU,MAAM,MAAM,UAAU,OAAO,OAAO,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,UAAU,UAAU,UAAU,YAAY,OAAO,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,QAAQ,UAAU,UAAU,MAAM,QAAQ,UAAU,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,MAAM,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,MAAM,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,MAAM,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,MAAM,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,QAAQ,KAAK,KAAK,YAAY,geAAge,8NAA8N,GAAG,sBAAsB,qBAAqB,yCAAyC,4CAA4C,4CAA4C,GAAG,gJAAgJ,yCAAyC,wCAAwC,iBAAiB,cAAc,eAAe,GAAG,uCAAuC,0BAA0B,wCAAwC,GAAG,wCAAwC,+BAA+B,4EAA4E,GAAG,0CAA0C,0BAA0B,8EAA8E,GAAG,oFAAoF,mBAAmB,GAAG,uCAAuC,mBAAmB,GAAG,yCAAyC,mBAAmB,GAAG,0CAA0C,mBAAmB,GAAG,wCAAwC,mBAAmB,GAAG,2CAA2C,mBAAmB,GAAG,wCAAwC,mBAAmB,GAAG,yCAAyC,mBAAmB,GAAG,yCAAyC,8BAA8B,mDAAmD,GAAG,uCAAuC,8BAA8B,mDAAmD,GAAG,yCAAyC,8BAA8B,mDAAmD,GAAG,0CAA0C,8BAA8B,mDAAmD,GAAG,wCAAwC,8BAA8B,mDAAmD,GAAG,2CAA2C,8BAA8B,mDAAmD,GAAG,wCAAwC,8BAA8B,mDAAmD,GAAG,yCAAyC,8BAA8B,mDAAmD,GAAG,iDAAiD,mBAAmB,GAAG,+CAA+C,mBAAmB,GAAG,iDAAiD,mBAAmB,GAAG,kDAAkD,mBAAmB,GAAG,gDAAgD,mBAAmB,GAAG,mDAAmD,mBAAmB,GAAG,gDAAgD,mBAAmB,GAAG,iDAAiD,mBAAmB,GAAG,iDAAiD,8BAA8B,mDAAmD,GAAG,+CAA+C,8BAA8B,mDAAmD,GAAG,iDAAiD,8BAA8B,mDAAmD,GAAG,kDAAkD,8BAA8B,mDAAmD,GAAG,gDAAgD,8BAA8B,mDAAmD,GAAG,mDAAmD,8BAA8B,mDAAmD,GAAG,gDAAgD,8BAA8B,mDAAmD,GAAG,iDAAiD,8BAA8B,mDAAmD,GAAG,mDAAmD,4CAA4C,GAAG,mDAAmD,sDAAsD,mDAAmD,GAAG,qCAAqC,sBAAsB,GAAG,0CAA0C,+BAA+B,GAAG,uEAAuE,sDAAsD,wCAAwC,GAAG,4MAA4M,yCAAyC,4CAA4C,+CAA+C,GAAG,wEAAwE,oCAAoC,qBAAqB,GAAG,gNAAgN,yCAAyC,+CAA+C,4CAA4C,+CAA+C,8GAA8G,GAAG,+BAA+B,uBAAuB,GAAG,mCAAmC,sBAAsB,GAAG,8BAA8B,+BAA+B,GAAG,mCAAmC,0BAA0B,wCAAwC,GAAG,oCAAoC,+BAA+B,4EAA4E,GAAG,sCAAsC,0BAA0B,8EAA8E,GAAG,6LAA6L,uDAAuD,uDAAuD,uBAAuB,kGAAkG,4DAA4D,GAAG,mPAAmP,iEAAiE,wEAAwE,GAAG,6OAA6O,uEAAuE,GAAG,+BAA+B,4CAA4C,GAAG,+BAA+B,4CAA4C,GAAG,+BAA+B,4CAA4C,GAAG,+BAA+B,4CAA4C,GAAG,+BAA+B,4CAA4C,GAAG,+BAA+B,4CAA4C,GAAG,4LAA4L,sBAAsB,GAAG,+BAA+B,qBAAqB,GAAG,kCAAkC,uBAAuB,GAAG,qCAAqC,uBAAuB,GAAG,+BAA+B,wBAAwB,GAAG,kCAAkC,4BAA4B,GAAG,qCAAqC,4BAA4B,GAAG,wCAAwC,4BAA4B,GAAG,2CAA2C,wBAAwB,GAAG,2DAA2D,uBAAuB,GAAG,+HAA+H,qBAAqB,GAAG,4GAA4G,mCAAmC,8CAA8C,oBAAoB,uBAAuB,GAAG,sDAAsD,sBAAsB,GAAG,sGAAsG,cAAc,8CAA8C,yCAAyC,4CAA4C,uBAAuB,4CAA4C,eAAe,0BAA0B,GAAG,iEAAiE,8CAA8C,qBAAqB,GAAG,kDAAkD,8BAA8B,sBAAsB,iBAAiB,oCAAoC,uCAAuC,wBAAwB,sBAAsB,uBAAuB,uBAAuB,GAAG,kCAAkC,wEAAwE,2BAA2B,GAAG,uFAAuF,2BAA2B,mBAAmB,wBAAwB,wBAAwB,oBAAoB,iBAAiB,GAAG,mGAAmG,oBAAoB,GAAG,qKAAqK,sBAAsB,GAAG,+BAA+B,sBAAsB,GAAG,oDAAoD,wCAAwC,GAAG,qDAAqD,0DAA0D,GAAG,2CAA2C,gEAAgE,GAAG,8BAA8B,qBAAqB,cAAc,uBAAuB,GAAG,gCAAgC,oCAAoC,GAAG,uHAAuH,mBAAmB,mBAAmB,oBAAoB,uBAAuB,GAAG,oJAAoJ,sDAAsD,GAAG,iFAAiF,sDAAsD,GAAG,2GAA2G,oBAAoB,iBAAiB,GAAG,mLAAmL,oBAAoB,GAAG,mCAAmC,wCAAwC,qDAAqD,2CAA2C,uBAAuB,GAAG,wCAAwC,iCAAiC,4CAA4C,wCAAwC,GAAG,2CAA2C,wCAAwC,GAAG,4GAA4G,qBAAqB,GAAG,2CAA2C,iCAAiC,4CAA4C,wCAAwC,GAAG,8CAA8C,wCAAwC,GAAG,kHAAkH,qBAAqB,GAAG,2CAA2C,oCAAoC,+CAA+C,2CAA2C,GAAG,8CAA8C,2CAA2C,GAAG,kHAAkH,qBAAqB,GAAG,0CAA0C,kCAAkC,6CAA6C,yCAAyC,GAAG,6CAA6C,yCAAyC,GAAG,gHAAgH,qBAAqB,GAAG,uCAAuC,oBAAoB,mBAAmB,mDAAmD,GAAG,6BAA6B,uBAAuB,qBAAqB,uCAAuC,GAAG,+MAA+M,wBAAwB,GAAG,oDAAoD,gEAAgE,8CAA8C,iDAAiD,uBAAuB,mDAAmD,0BAA0B,uCAAuC,qBAAqB,yBAAyB,GAAG,ySAAyS,yBAAyB,GAAG,qBAAqB;AACn2mB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACpnBvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,uHAAuH,MAAM,KAAK,UAAU,YAAY,aAAa,aAAa,cAAc,MAAM,OAAO,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,OAAO,KAAK,UAAU,UAAU,MAAM,KAAK,UAAU,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,UAAU,OAAO,YAAY,MAAM,UAAU,OAAO,YAAY,SAAS,UAAU,MAAM,YAAY,OAAO,YAAY,OAAO,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,MAAM,UAAU,UAAU,MAAM,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,UAAU,UAAU,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,WAAW,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,MAAM,QAAQ,MAAM,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,UAAU,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,aAAa,aAAa,WAAW,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,YAAY,aAAa,aAAa,WAAW,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,MAAM,KAAK,YAAY,WAAW,YAAY,aAAa,OAAO,MAAM,UAAU,kKAAkK,kBAAkB,2BAA2B,2CAA2C,oCAAoC,wCAAwC,qJAAqJ,GAAG,2EAA2E,8BAA8B,GAAG,iCAAiC,qBAAqB,mBAAmB,GAAG,0CAA0C,cAAc,eAAe,GAAG,qCAAqC,mBAAmB,cAAc,eAAe,0BAA0B,uBAAuB,GAAG,yDAAyD,qBAAqB,GAAG,0KAA0K,oBAAoB,GAAG,+JAA+J,mBAAmB,GAAG,kTAAkT,kBAAkB,GAAG,iNAAiN,gCAAgC,GAAG,yFAAyF,sBAAsB,GAAG,8CAA8C,oCAAoC,GAAG,6DAA6D,qBAAqB,GAAG,iCAAiC,2BAA2B,GAAG,sEAAsE,gBAAgB,iBAAiB,GAAG,iCAAiC,oBAAoB,wBAAwB,GAAG,kCAAkC,wBAAwB,kBAAkB,GAAG,wCAAwC,mBAAmB,mBAAmB,GAAG,mCAAmC,uCAAuC,kBAAkB,4BAA4B,qBAAqB,wBAAwB,GAAG,oCAAoC,uCAAuC,kBAAkB,mBAAmB,4BAA4B,qBAAqB,wBAAwB,GAAG,sCAAsC,uBAAuB,GAAG,mJAAmJ,wBAAwB,GAAG,+DAA+D,iCAAiC,GAAG,yEAAyE,oCAAoC,GAAG,sOAAsO,8CAA8C,8CAA8C,yBAAyB,GAAG,kFAAkF,kCAAkC,GAAG,+DAA+D,qBAAqB,GAAG,kCAAkC,oCAAoC,uCAAuC,cAAc,mBAAmB,GAAG,uCAAuC,8BAA8B,GAAG,yCAAyC,kBAAkB,GAAG,4EAA4E,kBAAkB,GAAG,mCAAmC,sBAAsB,mGAAmG,GAAG,mDAAmD,gBAAgB,GAAG,iCAAiC,mBAAmB,GAAG,2CAA2C,kBAAkB,GAAG,qDAAqD,kBAAkB,uCAAuC,uBAAuB,sBAAsB,oBAAoB,GAAG,oDAAoD,kBAAkB,GAAG,oDAAoD,uCAAuC,GAAG,4CAA4C,4BAA4B,2BAA2B,sBAAsB,cAAc,GAAG,2CAA2C,oCAAoC,kBAAkB,uBAAuB,wBAAwB,GAAG,+FAA+F,kBAAkB,GAAG,qBAAqB;AAC96N;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC5OvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,6HAA6H,QAAQ,MAAM,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,MAAM,YAAY,aAAa,aAAa,aAAa,aAAa,YAAY,KAAK,OAAO,aAAa,OAAO,MAAM,YAAY,WAAW,UAAU,UAAU,UAAU,MAAM,MAAM,YAAY,OAAO,aAAa,MAAM,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,YAAY,aAAa,aAAa,WAAW,UAAU,YAAY,aAAa,WAAW,UAAU,UAAU,UAAU,MAAM,KAAK,YAAY,aAAa,aAAa,OAAO,MAAM,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,WAAW,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,aAAa,MAAM,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,WAAW,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,WAAW,MAAM,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,MAAM,aAAa,MAAM,UAAU,MAAM,OAAO,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,WAAW,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,YAAY,OAAO,KAAK,UAAU,OAAO,aAAa,MAAM,YAAY,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,YAAY,OAAO,YAAY,MAAM,UAAU,MAAM,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,yBAAyB,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,WAAW,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,4SAA4S,kDAAkD,gDAAgD,mDAAmD,gDAAgD,oDAAoD,gDAAgD,oDAAoD,mDAAmD,GAAG,8CAA8C,qBAAqB,sBAAsB,8CAA8C,oCAAoC,qBAAqB,kBAAkB,qJAAqJ,GAAG,sEAAsE,uBAAuB,WAAW,cAAc,YAAY,aAAa,GAAG,wFAAwF,8CAA8C,GAAG,2CAA2C,qBAAqB,qBAAqB,GAAG,4BAA4B,qBAAqB,iBAAiB,GAAG,uBAAuB,oCAAoC,uCAAuC,0BAA0B,cAAc,eAAe,qBAAqB,uBAAuB,WAAW,cAAc,YAAY,aAAa,GAAG,0CAA0C,wEAAwE,qEAAqE,oCAAoC,GAAG,oFAAoF,mBAAmB,qBAAqB,8BAA8B,wBAAwB,uCAAuC,8BAA8B,iBAAiB,wEAAwE,qEAAqE,oCAAoC,GAAG,0CAA0C,eAAe,6CAA6C,gDAAgD,uBAAuB,GAAG,2DAA2D,wBAAwB,GAAG,0DAA0D,6CAA6C,GAAG,yBAAyB,kBAAkB,iBAAiB,gBAAgB,sBAAsB,uBAAuB,GAAG,4CAA4C,uBAAuB,GAAG,yBAAyB,kCAAkC,sBAAsB,oCAAoC,GAAG,0BAA0B,kBAAkB,2BAA2B,kCAAkC,4BAA4B,qBAAqB,2BAA2B,wBAAwB,oBAAoB,GAAG,gCAAgC,wCAAwC,GAAG,6BAA6B,sBAAsB,oBAAoB,oCAAoC,uBAAuB,4BAA4B,GAAG,gCAAgC,kBAAkB,GAAG,qCAAqC,4BAA4B,uBAAuB,wBAAwB,oCAAoC,qDAAqD,GAAG,6DAA6D,oCAAoC,uCAAuC,2DAA2D,+DAA+D,GAAG,wEAAwE,kBAAkB,GAAG,4CAA4C,oBAAoB,wBAAwB,GAAG,yCAAyC,kDAAkD,6DAA6D,6DAA6D,GAAG,iFAAiF,2BAA2B,gBAAgB,GAAG,mFAAmF,sBAAsB,GAAG,sCAAsC,iBAAiB,GAAG,oDAAoD,4CAA4C,GAAG,iCAAiC,kBAAkB,mCAAmC,GAAG,mCAAmC,kBAAkB,yEAAyE,oBAAoB,GAAG,0CAA0C,kBAAkB,GAAG,uBAAuB,qBAAqB,iBAAiB,GAAG,sBAAsB,uBAAuB,GAAG,4CAA4C,mBAAmB,kBAAkB,GAAG,mDAAmD,kBAAkB,uEAAuE,2CAA2C,8DAA8D,qDAAqD,GAAG,8BAA8B,4CAA4C,oCAAoC,qBAAqB,qBAAqB,eAAe,yEAAyE,4EAA4E,GAAG,oCAAoC,2BAA2B,mEAAmE,oCAAoC,GAAG,kCAAkC,gEAAgE,qBAAqB,GAAG,sDAAsD,kDAAkD,cAAc,4CAA4C,GAAG,sBAAsB,mBAAmB,GAAG,2DAA2D,uBAAuB,GAAG,2CAA2C,yCAAyC,iBAAiB,GAAG,gDAAgD,2DAA2D,GAAG,kEAAkE,kBAAkB,GAAG,+BAA+B,kBAAkB,mCAAmC,wBAAwB,GAAG,8BAA8B,oBAAoB,sBAAsB,uBAAuB,GAAG,6BAA6B,qBAAqB,uBAAuB,2DAA2D,GAAG,6BAA6B,kBAAkB,mCAAmC,wBAAwB,wBAAwB,qDAAqD,uBAAuB,oBAAoB,GAAG,gCAAgC,YAAY,GAAG,iCAAiC,mBAAmB,GAAG,qBAAqB;AACngU;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC/UvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,mIAAmI,QAAQ,cAAc,MAAM,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,KAAK,UAAU,UAAU,MAAM,KAAK,UAAU,UAAU,KAAK,MAAM,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,UAAU,YAAY,WAAW,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,UAAU,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,aAAa,WAAW,UAAU,UAAU,UAAU,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,MAAM,UAAU,MAAM,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,WAAW,MAAM,KAAK,UAAU,YAAY,aAAa,WAAW,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,WAAW,UAAU,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,WAAW,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,YAAY,aAAa,WAAW,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,UAAU,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,YAAY,MAAM,UAAU,UAAU,OAAO,MAAM,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,aAAa,MAAM,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,WAAW,MAAM,YAAY,MAAM,UAAU,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,UAAU,UAAU,UAAU,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,2VAA2V,yBAAyB,qBAAqB,GAAG,+BAA+B,sBAAsB,GAAG,oBAAoB,kBAAkB,GAAG,gCAAgC,UAAU,eAAe,cAAc,KAAK,UAAU,mBAAmB,cAAc,KAAK,GAAG,yBAAyB,6BAA6B,wCAAwC,oCAAoC,yCAAyC,0CAA0C,wBAAwB,8CAA8C,sBAAsB,uBAAuB,iBAAiB,iBAAiB,sBAAsB,mBAAmB,GAAG,+BAA+B,kBAAkB,yCAAyC,yCAAyC,GAAG,qCAAqC,yCAAyC,GAAG,6BAA6B,uBAAuB,uBAAuB,cAAc,oBAAoB,mBAAmB,iBAAiB,sBAAsB,uBAAuB,GAAG,gCAAgC,4DAA4D,qBAAqB,GAAG,+BAA+B,yCAAyC,GAAG,0BAA0B,6CAA6C,qBAAqB,iBAAiB,mCAAmC,0CAA0C,mBAAmB,iBAAiB,gBAAgB,oBAAoB,GAAG,gCAAgC,kBAAkB,GAAG,0CAA0C,kCAAkC,GAAG,+CAA+C,8CAA8C,GAAG,+DAA+D,0CAA0C,GAAG,iDAAiD,6CAA6C,GAAG,mDAAmD,sBAAsB,wBAAwB,eAAe,2BAA2B,GAAG,gCAAgC,kBAAkB,2BAA2B,oBAAoB,GAAG,6BAA6B,iBAAiB,GAAG,uBAAuB,kBAAkB,gBAAgB,uBAAuB,wEAAwE,2BAA2B,8CAA8C,GAAG,wDAAwD,0CAA0C,wCAAwC,GAAG,2FAA2F,eAAe,GAAG,gCAAgC,kCAAkC,uBAAuB,GAAG,mCAAmC,iBAAiB,uBAAuB,GAAG,+BAA+B,sBAAsB,wBAAwB,GAAG,wCAAwC,uBAAuB,GAAG,qCAAqC,kBAAkB,oBAAoB,GAAG,sEAAsE,0CAA0C,wCAAwC,GAAG,yCAAyC,wCAAwC,0CAA0C,kBAAkB,GAAG,qCAAqC,mBAAmB,sBAAsB,uBAAuB,iBAAiB,gBAAgB,2BAA2B,qBAAqB,GAAG,4BAA4B,kBAAkB,sBAAsB,GAAG,gCAAgC,yCAAyC,0CAA0C,2CAA2C,qBAAqB,kBAAkB,oBAAoB,GAAG,sBAAsB,uBAAuB,sBAAsB,oBAAoB,yCAAyC,eAAe,GAAG,4BAA4B,eAAe,GAAG,6BAA6B,eAAe,GAAG,yBAAyB,qBAAqB,sBAAsB,qBAAqB,GAAG,wBAAwB,eAAe,sDAAsD,0CAA0C,2CAA2C,yCAAyC,kBAAkB,qBAAqB,4CAA4C,oBAAoB,GAAG,8BAA8B,4DAA4D,GAAG,+BAA+B,6CAA6C,GAAG,yBAAyB,kCAAkC,uBAAuB,oBAAoB,GAAG,+BAA+B,kCAAkC,GAAG,8BAA8B,0BAA0B,GAAG,2DAA2D,gBAAgB,mBAAmB,8BAA8B,GAAG,yCAAyC,uBAAuB,iEAAiE,GAAG,2DAA2D,kBAAkB,oBAAoB,GAAG,+JAA+J,mCAAmC,GAAG,kEAAkE,kBAAkB,GAAG,iDAAiD,mCAAmC,GAAG,yDAAyD,kBAAkB,2BAA2B,uCAAuC,0CAA0C,yCAAyC,qBAAqB,gBAAgB,GAAG,2CAA2C,mBAAmB,GAAG,0BAA0B,kBAAkB,wBAAwB,mCAAmC,2BAA2B,uCAAuC,8CAA8C,GAAG,2BAA2B,oBAAoB,GAAG,2CAA2C,wBAAwB,GAAG,mCAAmC,uBAAuB,GAAG,uCAAuC,wCAAwC,uBAAuB,0BAA0B,oBAAoB,GAAG,6CAA6C,kCAAkC,+BAA+B,GAAG,8CAA8C,kCAAkC,+BAA+B,GAAG,sCAAsC,wBAAwB,GAAG,6BAA6B,sBAAsB,uCAAuC,8CAA8C,gBAAgB,eAAe,mBAAmB,oBAAoB,GAAG,+BAA+B,uBAAuB,GAAG,2BAA2B,uBAAuB,GAAG,+BAA+B,qBAAqB,uBAAuB,GAAG,qBAAqB;AACj2U;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC7XvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,yHAAyH,QAAQ,OAAO,QAAQ,MAAM,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,WAAW,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,UAAU,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,cAAc,KAAK,YAAY,WAAW,UAAU,UAAU,UAAU,YAAY,WAAW,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,WAAW,MAAM,KAAK,KAAK,YAAY,OAAO,KAAK,YAAY,MAAM,weAAwe,kBAAkB,wBAAwB,wCAAwC,2CAA2C,mCAAmC,oBAAoB,GAAG,wBAAwB,kBAAkB,wBAAwB,wBAAwB,GAAG,0BAA0B,kBAAkB,wBAAwB,GAAG,yBAAyB,kBAAkB,wBAAwB,gCAAgC,GAAG,wBAAwB,2CAA2C,kBAAkB,uCAAuC,wBAAwB,4BAA4B,oCAAoC,mBAAmB,GAAG,+BAA+B,8CAA8C,GAAG,qBAAqB,6CAA6C,GAAG,2BAA2B,6CAA6C,GAAG,4CAA4C,4CAA4C,GAAG,6BAA6B,iEAAiE,2CAA2C,8CAA8C,GAAG,4BAA4B,uCAAuC,0CAA0C,sBAAsB,oCAAoC,GAAG,6BAA6B,kBAAkB,wBAAwB,wBAAwB,GAAG,wCAAwC,mBAAmB,mBAAmB,gBAAgB,uBAAuB,GAAG,mEAAmE,0CAA0C,GAAG,4CAA4C,iBAAiB,iBAAiB,gDAAgD,uBAAuB,qBAAqB,uBAAuB,GAAG,kDAAkD,6CAA6C,qPAAqP,+BAA+B,gBAAgB,cAAc,iBAAiB,oBAAoB,sBAAsB,gBAAgB,uBAAuB,0EAA0E,GAAG,8CAA8C,oCAAoC,0CAA0C,uCAAuC,sBAAsB,iBAAiB,GAAG,wDAAwD,QAAQ,+BAA+B,KAAK,YAAY,qCAAqC,KAAK,GAAG,qBAAqB;AAC13I;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACnJvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,wHAAwH,QAAQ,MAAM,YAAY,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,mTAAmT,qBAAqB,sBAAsB,GAAG,uBAAuB,iBAAiB,GAAG,6DAA6D,8CAA8C,GAAG,2DAA2D,2BAA2B,GAAG,0DAA0D,2BAA2B,GAAG,qBAAqB;AACn8B;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AChCvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;AACA,OAAO,6HAA6H,uTAAuT;AAC3b;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACXvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,mHAAmH,QAAQ,OAAO,QAAQ,MAAM,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,UAAU,UAAU,MAAM,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,mfAAmf,kBAAkB,2BAA2B,wCAAwC,oCAAoC,uCAAuC,iBAAiB,GAAG,qCAAqC,uBAAuB,GAAG,4CAA4C,yCAAyC,iBAAiB,GAAG,iDAAiD,2DAA2D,GAAG,+CAA+C,qBAAqB,GAAG,8BAA8B,gBAAgB,GAAG,iCAAiC,eAAe,8CAA8C,GAAG,iBAAiB,8BAA8B,2BAA2B,0BAA0B,sBAAsB,GAAG,yBAAyB,kBAAkB,oBAAoB,gBAAgB,GAAG,yBAAyB,mBAAmB,mBAAmB,wBAAwB,4BAA4B,uBAAuB,GAAG,qBAAqB;AACrjE;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACvEvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,uHAAuH,QAAQ,MAAM,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,UAAU,UAAU,MAAM,KAAK,UAAU,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,WAAW,iTAAiT,wCAAwC,iEAAiE,uCAAuC,uCAAuC,qBAAqB,sBAAsB,mBAAmB,iBAAiB,kBAAkB,GAAG,yBAAyB,mBAAmB,GAAG,uBAAuB,eAAe,GAAG,qBAAqB,0BAA0B,cAAc,GAAG,qBAAqB;AAC9jC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpCvC;AACqH;AACjB;AACe;AACE;AACK;AACT;AACD;AACG;AACE;AACJ;AACE;AACK;AACH;AACF;AACA;AACD;AACD;AACE;AACA;AACK;AACxH,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F,0BAA0B,0GAAiC;AAC3D,0BAA0B,4GAAiC;AAC3D,0BAA0B,iHAAiC;AAC3D,0BAA0B,wGAAiC;AAC3D,0BAA0B,uGAAiC;AAC3D,0BAA0B,0GAAiC;AAC3D,0BAA0B,4GAAiC;AAC3D,0BAA0B,wGAAiC;AAC3D,0BAA0B,2GAAiC;AAC3D,0BAA0B,gHAAiC;AAC3D,0BAA0B,4GAAkC;AAC5D,0BAA0B,0GAAkC;AAC5D,0BAA0B,0GAAkC;AAC5D,0BAA0B,yGAAkC;AAC5D,0BAA0B,wGAAkC;AAC5D,0BAA0B,0GAAkC;AAC5D,0BAA0B,0GAAkC;AAC5D,0BAA0B,+GAAkC;AAC5D;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,6HAA6H,QAAQ,cAAc,OAAO,YAAY,aAAa,OAAO,YAAY,MAAM,YAAY,WAAW,MAAM,KAAK,YAAY,WAAW,MAAM,YAAY,MAAM,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,YAAY,WAAW,MAAM,KAAK,YAAY,aAAa,WAAW,aAAa,aAAa,aAAa,aAAa,WAAW,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,WAAW,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,UAAU,OAAO,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,WAAW,YAAY,aAAa,aAAa,WAAW,YAAY,aAAa,aAAa,WAAW,YAAY,WAAW,YAAY,WAAW,YAAY,OAAO,KAAK,MAAM,OAAO,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,MAAM,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,UAAU,MAAM,KAAK,YAAY,WAAW,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,WAAW,YAAY,aAAa,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,YAAY,aAAa,OAAO,YAAY,aAAa,OAAO,KAAK,YAAY,qVAAqV,6BAA6B,kCAAkC,yBAAyB,wBAAwB,2BAA2B,6BAA6B,yBAAyB,2BAA2B,gCAAgC,4BAA4B,0BAA0B,0BAA0B,yBAAyB,wBAAwB,0BAA0B,0BAA0B,+BAA+B,yBAAyB,oCAAoC,uCAAuC,GAAG,2GAA2G,2BAA2B,iBAAiB,GAAG,iCAAiC,2BAA2B,iBAAiB,GAAG,gFAAgF,4BAA4B,wCAAwC,GAAG,gCAAgC,4BAA4B,GAAG,mDAAmD,qBAAqB,iBAAiB,GAAG,gBAAgB,oCAAoC,2CAA2C,oBAAoB,uCAAuC,0DAA0D,wBAAwB,iBAAiB,oBAAoB,wBAAwB,4BAA4B,qBAAqB,2BAA2B,qBAAqB,oBAAoB,GAAG,yBAAyB,wBAAwB,GAAG,sBAAsB,0BAA0B,GAAG,6BAA6B,qBAAqB,oBAAoB,oBAAoB,mBAAmB,GAAG,+EAA+E,8CAA8C,GAAG,+BAA+B,qBAAqB,GAAG,oBAAoB,mBAAmB,uBAAuB,GAAG,0BAA0B,2BAA2B,iBAAiB,2CAA2C,kCAAkC,oCAAoC,gFAAgF,sBAAsB,mBAAmB,uBAAuB,wBAAwB,uBAAuB,gBAAgB,6BAA6B,0BAA0B,qBAAqB,oBAAoB,qBAAqB,iBAAiB,sBAAsB,kBAAkB,2BAA2B,GAAG,gCAAgC,8JAA8J,GAAG,mCAAmC,wBAAwB,kBAAkB,8CAA8C,oCAAoC,GAAG,0CAA0C,wBAAwB,oCAAoC,GAAG,gFAAgF,oCAAoC,GAAG,0BAA0B,uBAAuB,gBAAgB,aAAa,iBAAiB,GAAG,oCAAoC,8DAA8D,GAAG,2CAA2C,8BAA8B,iBAAiB,qBAAqB,qBAAqB,oCAAoC,mBAAmB,uCAAuC,0CAA0C,iBAAiB,sBAAsB,2BAA2B,qBAAqB,0BAA0B,6BAA6B,GAAG,oDAAoD,8CAA8C,oCAAoC,wBAAwB,kBAAkB,GAAG,2DAA2D,wBAAwB,GAAG,yDAAyD,wEAAwE,GAAG,4MAA4M,8CAA8C,oCAAoC,GAAG,gCAAgC,2BAA2B,GAAG,qBAAqB;AACl5M;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACxOvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,iIAAiI,QAAQ,MAAM,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,WAAW,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,WAAW,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,WAAW,mTAAmT,kBAAkB,2BAA2B,yBAAyB,GAAG,yBAAyB,sBAAsB,8CAA8C,wEAAwE,oCAAoC,oBAAoB,kBAAkB,wBAAwB,uCAAuC,qBAAqB,8BAA8B,sBAAsB,GAAG,wBAAwB,iBAAiB,GAAG,sDAAsD,8BAA8B,mBAAmB,GAAG,yBAAyB,sBAAsB,GAAG,2BAA2B,oBAAoB,8CAA8C,oCAAoC,mBAAmB,GAAG,qBAAqB;AACjkD;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;;ACnDvC;AACqH;AACjB;AACO;AAC3G,4CAA4C,oEAA8C;AAC1F,4CAA4C,oEAA8C;AAC1F,4CAA4C,oEAAwC;AACpF,4CAA4C,oEAA2C;AACvF,4CAA4C,oEAA4C;AACxF,4CAA4C,oEAAwC;AACpF,4CAA4C,oEAA0C;AACtF,4CAA4C,oEAAwD;AACpG,4CAA4C,oEAAmD;AAC/F,4CAA4C,oEAA6C;AACzF,6CAA6C,oEAA6C;AAC1F,6CAA6C,oEAA8C;AAC3F,6CAA6C,oEAAsD;AACnG,6CAA6C,oEAA2C;AACxF,6CAA6C,oEAAkD;AAC/F,6CAA6C,oEAA0C;AACvF,6CAA6C,oEAAiD;AAC9F,6CAA6C,oEAA2C;AACxF,6CAA6C,oEAA6C;AAC1F,6CAA6C,oEAA0C;AACvF,6CAA6C,oEAA+C;AAC5F,6CAA6C,oEAA0C;AACvF,6CAA6C,oEAA2C;AACxF,6CAA6C,oEAAyC;AACtF,6CAA6C,oEAAiD;AAC9F,6CAA6C,oEAA4C;AACzF,6CAA6C,oEAA6C;AAC1F,6CAA6C,oEAAyC;AACtF,6CAA6C,oEAA+C;AAC5F,6CAA6C,oEAAwC;AACrF,6CAA6C,oEAA2C;AACxF,6CAA6C,oEAAgD;AAC7F,6CAA6C,oEAA8C;AAC3F,6CAA6C,oEAA+C;AAC5F,6CAA6C,oEAA6C;AAC1F,6CAA6C,oEAAyC;AACtF,6CAA6C,oEAA6C;AAC1F,6CAA6C,oEAA8C;AAC3F,6CAA6C,oEAAyC;AACtF,6CAA6C,oEAA6C;AAC1F,6CAA6C,oEAAkC;AAC/E,6CAA6C,oEAAgD;AAC7F,6CAA6C,oEAA+C;AAC5F,6CAA6C,oEAA0C;AACvF,6CAA6C,oEAA8C;AAC3F,6CAA6C,oEAAiD;AAC9F,6CAA6C,mEAAgD;AAC7F,6CAA6C,oEAA0C;AACvF,6CAA6C,oEAA8C;AAC3F,6CAA6C,oEAAgD;AAC7F,6CAA6C,oEAA0C;AACvF,6CAA6C,oEAAqD;AAClG,6CAA6C,oEAA4C;AACzF,6CAA6C,oEAAoC;AACjF,6CAA6C,oEAA0C;AACvF,6CAA6C,oEAA2C;AACxF,6CAA6C,oEAA2C;AACxF,6CAA6C,oEAAiC;AAC9E,6CAA6C,oEAA+C;AAC5F,6CAA6C,oEAA0C;AACvF,6CAA6C,oEAA2C;AACxF,6CAA6C,oEAAoD;AACjG,6CAA6C,oEAA4C;AACzF,6CAA6C,oEAAwD;AACrG,6CAA6C,oEAA6C;AAC1F,6CAA6C,oEAA8C;AAC3F,6CAA6C,oEAA2C;AACxF,6CAA6C,oEAA8C;AAC3F,6CAA6C,oEAAgD;AAC7F,6CAA6C,mEAAyC;AACtF,6CAA6C,oEAA2C;AACxF,6CAA6C,oEAAiC;AAC9E,6CAA6C,oEAA8C;AAC3F,6CAA6C,oEAA6C;AAC1F,6CAA6C,oEAA8C;AAC3F,6CAA6C,oEAA4C;AACzF,6CAA6C,oEAA+C;AAC5F,6CAA6C,oEAAkD;AAC/F,6CAA6C,oEAA8C;AAC3F,6CAA6C,oEAA8C;AAC3F,6CAA6C,oEAAiD;AAC9F,6CAA6C,oEAAwD;AACrG,6CAA6C,mEAA4C;AACzF,6CAA6C,oEAA0C;AACvF,6CAA6C,oEAA2C;AACxF,6CAA6C,oEAAyC;AACtF,6CAA6C,oEAA4C;AACzF,6CAA6C,oEAA8C;AAC3F,6CAA6C,oEAA2C;AACxF,6CAA6C,oEAAyC;AACtF,6CAA6C,oEAA4C;AACzF,6CAA6C,oEAAyC;AACtF,6CAA6C,oEAAwC;AACrF,6CAA6C,mEAA4C;AACzF,6CAA6C,oEAAyC;AACtF,6CAA6C,oEAA2C;AACxF,6CAA6C,oEAA8C;AAC3F,6CAA6C,oEAA0C;AACvF,6CAA6C,oEAAiD;AAC9F,6CAA6C,oEAA+C;AAC5F,8CAA8C,oEAA8C;AAC5F,8CAA8C,oEAA+C;AAC7F,8CAA8C,oEAAyC;AACvF,8CAA8C,oEAAwC;AACtF,8CAA8C,oEAA+C;AAC7F,8CAA8C,kEAAwC;AACtF,8CAA8C,oEAA+C;AAC7F,8CAA8C,oEAAiD;AAC/F,8CAA8C,oEAAwC;AACtF,8CAA8C,oEAA8C;AAC5F,8CAA8C,oEAA8C;AAC5F,8CAA8C,oEAAyC;AACvF,8CAA8C,oEAAyC;AACvF,8CAA8C,oEAA0C;AACxF,8CAA8C,oEAA8C;AAC5F,8CAA8C,mEAA0C;AACxF,8CAA8C,oEAAqD;AACnG,8CAA8C,oEAAwC;AACtF,8CAA8C,oEAA0C;AACxF,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,yCAAyC,8FAA+B;AACxE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,0CAA0C,8FAA+B;AACzE,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E,2CAA2C,8FAA+B;AAC1E;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,6BAA6B,mCAAmC;AAChE,6BAA6B,mCAAmC;AAChE,uBAAuB,mCAAmC;AAC1D,wBAAwB,mCAAmC;AAC3D,2BAA2B,mCAAmC;AAC9D,uBAAuB,mCAAmC;AAC1D,yBAAyB,mCAAmC;AAC5D,yCAAyC,mCAAmC;AAC5E,oCAAoC,mCAAmC;AACvE,8BAA8B,mCAAmC;AACjE,8BAA8B,oCAAoC;AAClE,+BAA+B,oCAAoC;AACnE,uCAAuC,oCAAoC;AAC3E,4BAA4B,oCAAoC;AAChE,kCAAkC,oCAAoC;AACtE,yBAAyB,oCAAoC;AAC7D,gCAAgC,oCAAoC;AACpE,0BAA0B,oCAAoC;AAC9D,4BAA4B,oCAAoC;AAChE,yBAAyB,oCAAoC;AAC7D,6BAA6B,oCAAoC;AACjE,yBAAyB,oCAAoC;AAC7D,8BAA8B,oCAAoC;AAClE,wBAAwB,oCAAoC;AAC5D,gCAAgC,oCAAoC;AACpE,4BAA4B,oCAAoC;AAChE,2BAA2B,oCAAoC;AAC/D,wBAAwB,oCAAoC;AAC5D,6BAA6B,oCAAoC;AACjE,uBAAuB,oCAAoC;AAC3D,0BAA0B,oCAAoC;AAC9D,+BAA+B,oCAAoC;AACnE,6BAA6B,oCAAoC;AACjE,8BAA8B,oCAAoC;AAClE,4BAA4B,oCAAoC;AAChE,wBAAwB,oCAAoC;AAC5D,4BAA4B,oCAAoC;AAChE,6BAA6B,oCAAoC;AACjE,wBAAwB,oCAAoC;AAC5D,4BAA4B,oCAAoC;AAChE,yBAAyB,oCAAoC;AAC7D,8BAA8B,oCAAoC;AAClE,8BAA8B,oCAAoC;AAClE,0BAA0B,oCAAoC;AAC9D,6BAA6B,oCAAoC;AACjE,gCAAgC,oCAAoC;AACpE,+BAA+B,oCAAoC;AACnE,wBAAwB,oCAAoC;AAC5D,8BAA8B,oCAAoC;AAClE,+BAA+B,oCAAoC;AACnE,0BAA0B,oCAAoC;AAC9D,mCAAmC,oCAAoC;AACvE,0BAA0B,oCAAoC;AAC9D,2BAA2B,oCAAoC;AAC/D,wBAAwB,oCAAoC;AAC5D,yBAAyB,oCAAoC;AAC7D,yBAAyB,oCAAoC;AAC7D,wBAAwB,oCAAoC;AAC5D,6BAA6B,oCAAoC;AACjE,wBAAwB,oCAAoC;AAC5D,yBAAyB,oCAAoC;AAC7D,mCAAmC,oCAAoC;AACvE,2BAA2B,oCAAoC;AAC/D,uCAAuC,oCAAoC;AAC3E,0BAA0B,oCAAoC;AAC9D,4BAA4B,oCAAoC;AAChE,0BAA0B,oCAAoC;AAC9D,4BAA4B,oCAAoC;AAChE,6BAA6B,oCAAoC;AACjE,wBAAwB,oCAAoC;AAC5D,wBAAwB,oCAAoC;AAC5D,wBAAwB,oCAAoC;AAC5D,4BAA4B,oCAAoC;AAChE,2BAA2B,oCAAoC;AAC/D,6BAA6B,oCAAoC;AACjE,2BAA2B,oCAAoC;AAC/D,8BAA8B,oCAAoC;AAClE,+BAA+B,oCAAoC;AACnE,4BAA4B,oCAAoC;AAChE,6BAA6B,oCAAoC;AACjE,gCAAgC,oCAAoC;AACpE,sCAAsC,oCAAoC;AAC1E,2BAA2B,oCAAoC;AAC/D,yBAAyB,oCAAoC;AAC7D,yBAAyB,oCAAoC;AAC7D,uBAAuB,oCAAoC;AAC3D,0BAA0B,oCAAoC;AAC9D,4BAA4B,oCAAoC;AAChE,yBAAyB,oCAAoC;AAC7D,wBAAwB,oCAAoC;AAC5D,2BAA2B,oCAAoC;AAC/D,yBAAyB,oCAAoC;AAC7D,uBAAuB,oCAAoC;AAC3D,2BAA2B,oCAAoC;AAC/D,wBAAwB,oCAAoC;AAC5D,0BAA0B,oCAAoC;AAC9D,4BAA4B,oCAAoC;AAChE,yBAAyB,oCAAoC;AAC7D,+BAA+B,oCAAoC;AACnE,6BAA6B,oCAAoC;AACjE,4BAA4B,qCAAqC;AACjE,6BAA6B,qCAAqC;AAClE,wBAAwB,qCAAqC;AAC7D,uBAAuB,qCAAqC;AAC5D,8BAA8B,qCAAqC;AACnE,uBAAuB,qCAAqC;AAC5D,4BAA4B,qCAAqC;AACjE,+BAA+B,qCAAqC;AACpE,uBAAuB,qCAAqC;AAC5D,6BAA6B,qCAAqC;AAClE,2BAA2B,qCAAqC;AAChE,wBAAwB,qCAAqC;AAC7D,wBAAwB,qCAAqC;AAC7D,yBAAyB,qCAAqC;AAC9D,4BAA4B,qCAAqC;AACjE,wBAAwB,qCAAqC;AAC7D,mCAAmC,qCAAqC;AACxE,wBAAwB,qCAAqC;AAC7D,wBAAwB,qCAAqC;AAC7D;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,mIAAmI,QAAQ,cAAc,OAAO,MAAM,WAAW,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,aAAa,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,0eAA0e,4DAA4D,4DAA4D,gDAAgD,oDAAoD,wDAAwD,gDAAgD,oDAAoD,kFAAkF,wEAAwE,4DAA4D,4DAA4D,8DAA8D,8EAA8E,wDAAwD,qEAAqE,oDAAoD,kEAAkE,sDAAsD,0DAA0D,oDAAoD,6DAA6D,oDAAoD,0DAA0D,kDAAkD,kEAAkE,yDAAyD,yDAAyD,kDAAkD,6DAA6D,gDAAgD,sDAAsD,gEAAgE,4DAA4D,8DAA8D,0DAA0D,kDAAkD,0DAA0D,4DAA4D,kDAAkD,0DAA0D,4CAA4C,+DAA+D,8DAA8D,qDAAqD,4DAA4D,kEAAkE,gEAAgE,mDAAmD,6DAA6D,gEAAgE,qDAAqD,yEAAyE,uDAAuD,gDAAgD,mDAAmD,qDAAqD,qDAAqD,0CAA0C,6DAA6D,mDAAmD,qDAAqD,wEAAwE,wDAAwD,gFAAgF,wDAAwD,2DAA2D,sDAAsD,2DAA2D,8DAA8D,kDAAkD,oDAAoD,0CAA0C,2DAA2D,yDAAyD,4DAA4D,wDAAwD,8DAA8D,kEAAkE,2DAA2D,4DAA4D,kEAAkE,+EAA+E,wDAAwD,oDAAoD,qDAAqD,iDAAiD,uDAAuD,2DAA2D,qDAAqD,kDAAkD,wDAAwD,mDAAmD,gDAAgD,wDAAwD,kDAAkD,sDAAsD,2DAA2D,oDAAoD,iEAAiE,6DAA6D,2DAA2D,6DAA6D,kDAAkD,gDAAgD,8DAA8D,gDAAgD,4DAA4D,iEAAiE,gDAAgD,4DAA4D,0DAA0D,kDAAkD,kDAAkD,oDAAoD,2DAA2D,mDAAmD,yEAAyE,iDAAiD,mDAAmD,GAAG,2DAA2D,+CAA+C,GAAG,sBAAsB,+CAA+C,GAAG,iBAAiB,yCAAyC,GAAG,kBAAkB,0CAA0C,GAAG,oBAAoB,6CAA6C,GAAG,iBAAiB,yCAAyC,GAAG,mBAAmB,2CAA2C,GAAG,4BAA4B,sDAAsD,GAAG,gCAAgC,2DAA2D,GAAG,uBAAuB,gDAAgD,GAAG,uBAAuB,gDAAgD,GAAG,wBAAwB,iDAAiD,GAAG,8BAA8B,yDAAyD,GAAG,qBAAqB,8CAA8C,GAAG,2BAA2B,oDAAoD,GAAG,mBAAmB,2CAA2C,GAAG,yBAAyB,kDAAkD,GAAG,oBAAoB,4CAA4C,GAAG,sBAAsB,8CAA8C,GAAG,mBAAmB,2CAA2C,GAAG,sBAAsB,+CAA+C,GAAG,mBAAmB,2CAA2C,GAAG,uBAAuB,gDAAgD,GAAG,kBAAkB,0CAA0C,GAAG,yBAAyB,kDAAkD,GAAG,sBAAsB,8CAA8C,GAAG,qBAAqB,6CAA6C,GAAG,kBAAkB,0CAA0C,GAAG,uBAAuB,+CAA+C,GAAG,iBAAiB,yCAAyC,GAAG,oBAAoB,4CAA4C,GAAG,wBAAwB,iDAAiD,GAAG,sBAAsB,+CAA+C,GAAG,uBAAuB,gDAAgD,GAAG,qBAAqB,8CAA8C,GAAG,kBAAkB,0CAA0C,GAAG,sBAAsB,8CAA8C,GAAG,uBAAuB,+CAA+C,GAAG,kBAAkB,0CAA0C,GAAG,sBAAsB,8CAA8C,GAAG,mBAAmB,2CAA2C,GAAG,wBAAwB,gDAAgD,GAAG,uBAAuB,gDAAgD,GAAG,oBAAoB,4CAA4C,GAAG,uBAAuB,+CAA+C,GAAG,yBAAyB,kDAAkD,GAAG,kBAAkB,0CAA0C,GAAG,wBAAwB,iDAAiD,GAAG,uBAAuB,gDAAgD,GAAG,oBAAoB,4CAA4C,GAAG,wBAAwB,iDAAiD,GAAG,4BAA4B,qDAAqD,GAAG,oBAAoB,4CAA4C,GAAG,qBAAqB,6CAA6C,GAAG,kBAAkB,0CAA0C,GAAG,mBAAmB,2CAA2C,GAAG,mBAAmB,2CAA2C,GAAG,kBAAkB,0CAA0C,GAAG,uBAAuB,+CAA+C,GAAG,kBAAkB,0CAA0C,GAAG,mBAAmB,2CAA2C,GAAG,4BAA4B,qDAAqD,GAAG,qBAAqB,6CAA6C,GAAG,gCAAgC,yDAAyD,GAAG,oBAAoB,4CAA4C,GAAG,sBAAsB,8CAA8C,GAAG,oBAAoB,4CAA4C,GAAG,sBAAsB,8CAA8C,GAAG,sBAAsB,+CAA+C,GAAG,kBAAkB,0CAA0C,GAAG,kBAAkB,0CAA0C,GAAG,kBAAkB,0CAA0C,GAAG,sBAAsB,8CAA8C,GAAG,qBAAqB,6CAA6C,GAAG,sBAAsB,+CAA+C,GAAG,oBAAoB,6CAA6C,GAAG,uBAAuB,gDAAgD,GAAG,wBAAwB,iDAAiD,GAAG,sBAAsB,8CAA8C,GAAG,uBAAuB,+CAA+C,GAAG,yBAAyB,kDAAkD,GAAG,8BAA8B,wDAAwD,GAAG,qBAAqB,6CAA6C,GAAG,mBAAmB,2CAA2C,GAAG,mBAAmB,2CAA2C,GAAG,iBAAiB,yCAAyC,GAAG,oBAAoB,4CAA4C,GAAG,qBAAqB,8CAA8C,GAAG,mBAAmB,2CAA2C,GAAG,kBAAkB,0CAA0C,GAAG,qBAAqB,6CAA6C,GAAG,mBAAmB,2CAA2C,GAAG,iBAAiB,yCAAyC,GAAG,qBAAqB,6CAA6C,GAAG,kBAAkB,0CAA0C,GAAG,oBAAoB,4CAA4C,GAAG,sBAAsB,8CAA8C,GAAG,mBAAmB,2CAA2C,GAAG,yBAAyB,iDAAiD,GAAG,sBAAsB,+CAA+C,GAAG,qBAAqB,8CAA8C,GAAG,sBAAsB,+CAA+C,GAAG,kBAAkB,0CAA0C,GAAG,iBAAiB,yCAAyC,GAAG,uBAAuB,gDAAgD,GAAG,iBAAiB,yCAAyC,GAAG,sBAAsB,8CAA8C,GAAG,wBAAwB,iDAAiD,GAAG,iBAAiB,yCAAyC,GAAG,sBAAsB,+CAA+C,GAAG,qBAAqB,6CAA6C,GAAG,kBAAkB,0CAA0C,GAAG,kBAAkB,0CAA0C,GAAG,mBAAmB,2CAA2C,GAAG,sBAAsB,8CAA8C,GAAG,kBAAkB,0CAA0C,GAAG,4BAA4B,qDAAqD,GAAG,kBAAkB,0CAA0C,GAAG,kBAAkB,0CAA0C,GAAG,qBAAqB;AAC9znB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC11BvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,wIAAwI,QAAQ,OAAO,MAAM,MAAM,YAAY,aAAa,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,MAAM,MAAM,KAAK,YAAY,WAAW,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,oZAAoZ,gCAAgC,iCAAiC,0BAA0B,oBAAoB,qBAAqB,GAAG,oBAAoB,gCAAgC,iCAAiC,2BAA2B,GAAG,kFAAkF,0BAA0B,oBAAoB,qBAAqB,GAAG,iBAAiB,0BAA0B,oBAAoB,qBAAqB,GAAG,iBAAiB,0BAA0B,oBAAoB,qBAAqB,GAAG,qBAAqB;AAC35C;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACpDvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,iIAAiI,QAAQ,MAAM,UAAU,mTAAmT,oBAAoB,GAAG,qBAAqB;AAC/f;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACfvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,8HAA8H,QAAQ,OAAO,MAAM,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,UAAU,MAAM,KAAK,UAAU,MAAM,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,OAAO,KAAK,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,UAAU,MAAM,KAAK,YAAY,OAAO,aAAa,SAAS,KAAK,SAAS,UAAU,MAAM,SAAS,YAAY,OAAO,aAAa,aAAa,MAAM,UAAU,MAAM,KAAK,YAAY,OAAO,MAAM,OAAO,MAAM,YAAY,OAAO,YAAY,MAAM,YAAY,kaAAka,0CAA0C,GAAG,qBAAqB,0CAA0C,GAAG,qBAAqB,0CAA0C,GAAG,qBAAqB,0CAA0C,GAAG,qBAAqB,0CAA0C,GAAG,uBAAuB,4CAA4C,GAAG,uBAAuB,4CAA4C,GAAG,uBAAuB,4CAA4C,GAAG,uBAAuB,4CAA4C,GAAG,uBAAuB,4CAA4C,GAAG,0EAA0E,kCAAkC,GAAG,4BAA4B,kCAAkC,GAAG,4BAA4B,kCAAkC,GAAG,4BAA4B,kCAAkC,GAAG,4BAA4B,kCAAkC,GAAG,8BAA8B,oCAAoC,GAAG,8BAA8B,oCAAoC,GAAG,8BAA8B,oCAAoC,GAAG,8BAA8B,oCAAoC,GAAG,8BAA8B,oCAAoC,GAAG,wEAAwE,eAAe,GAAG,2BAA2B,iBAAiB,GAAG,6EAA6E,iCAAiC,GAAG,2BAA2B,iCAAiC,GAAG,2BAA2B,iCAAiC,GAAG,2BAA2B,iCAAiC,GAAG,2BAA2B,iCAAiC,GAAG,6BAA6B,mCAAmC,GAAG,6BAA6B,mCAAmC,GAAG,6BAA6B,mCAAmC,GAAG,6BAA6B,mCAAmC,GAAG,6BAA6B,mCAAmC,GAAG,2EAA2E,gCAAgC,GAAG,0BAA0B,gCAAgC,GAAG,0BAA0B,gCAAgC,GAAG,0BAA0B,gCAAgC,GAAG,4BAA4B,kCAAkC,GAAG,4BAA4B,kCAAkC,GAAG,4BAA4B,kCAAkC,GAAG,4BAA4B,kCAAkC,GAAG,yGAAyG,yCAAyC,GAAG,8BAA8B,yCAAyC,GAAG,8BAA8B,yCAAyC,GAAG,8BAA8B,yCAAyC,GAAG,gCAAgC,2CAA2C,GAAG,gCAAgC,2CAA2C,GAAG,gCAAgC,2CAA2C,GAAG,gCAAgC,2CAA2C,GAAG,wBAAwB,gCAAgC,GAAG,kCAAkC,8DAA8D,GAAG,mCAAmC,+DAA+D,GAAG,+BAA+B,2DAA2D,GAAG,kCAAkC,8CAA8C,GAAG,6CAA6C,0EAA0E,GAAG,mCAAmC,iEAAiE,GAAG,8CAA8C,mGAAmG,GAAG,sCAAsC,4EAA4E,GAAG,oCAAoC,0EAA0E,GAAG,8HAA8H,eAAe,GAAG,2EAA2E,iCAAiC,GAAG,kZAAkZ,eAAe,GAAG,iJAAiJ,0CAA0C,GAAG,oLAAoL,eAAe,GAAG,2EAA2E,iCAAiC,GAAG,uMAAuM,oDAAoD,GAAG,wFAAwF,sBAAsB,GAAG,qBAAqB;AACzqQ;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACvTvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,iIAAiI,QAAQ,OAAO,MAAM,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,kcAAkc,kCAAkC,GAAG,kCAAkC,kCAAkC,GAAG,kCAAkC,kCAAkC,GAAG,kCAAkC,kCAAkC,GAAG,kCAAkC,kCAAkC,GAAG,oCAAoC,oCAAoC,GAAG,oCAAoC,oCAAoC,GAAG,oCAAoC,oCAAoC,GAAG,oCAAoC,oCAAoC,GAAG,oCAAoC,oCAAoC,GAAG,2FAA2F,0CAA0C,GAAG,yCAAyC,0CAA0C,GAAG,yCAAyC,0CAA0C,GAAG,yCAAyC,0CAA0C,GAAG,yCAAyC,0CAA0C,GAAG,2CAA2C,4CAA4C,GAAG,2CAA2C,4CAA4C,GAAG,2CAA2C,4CAA4C,GAAG,2CAA2C,4CAA4C,GAAG,2CAA2C,4CAA4C,GAAG,qBAAqB;AACjsF;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACjGvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,mIAAmI,QAAQ,MAAM,YAAY,OAAO,MAAM,MAAM,MAAM,MAAM,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,UAAU,MAAM,KAAK,UAAU,MAAM,MAAM,MAAM,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,gWAAgW,6BAA6B,GAAG,6MAA6M,0CAA0C,GAAG,iDAAiD,0CAA0C,GAAG,iDAAiD,0CAA0C,GAAG,iDAAiD,0CAA0C,GAAG,iDAAiD,0CAA0C,GAAG,mDAAmD,4CAA4C,GAAG,mDAAmD,4CAA4C,GAAG,mDAAmD,4CAA4C,GAAG,mDAAmD,4CAA4C,GAAG,mDAAmD,4CAA4C,GAAG,sGAAsG,kCAAkC,GAAG,wDAAwD,kCAAkC,GAAG,wDAAwD,kCAAkC,GAAG,wDAAwD,kCAAkC,GAAG,wDAAwD,kCAAkC,GAAG,0DAA0D,oCAAoC,GAAG,0DAA0D,oCAAoC,GAAG,0DAA0D,oCAAoC,GAAG,0DAA0D,oCAAoC,GAAG,0DAA0D,oCAAoC,GAAG,oGAAoG,eAAe,GAAG,uDAAuD,iBAAiB,GAAG,mJAAmJ,kCAAkC,GAAG,6DAA6D,kCAAkC,GAAG,6DAA6D,kCAAkC,GAAG,6DAA6D,kCAAkC,GAAG,6DAA6D,kCAAkC,GAAG,+DAA+D,oCAAoC,GAAG,+DAA+D,oCAAoC,GAAG,+DAA+D,oCAAoC,GAAG,+DAA+D,oCAAoC,GAAG,+DAA+D,oCAAoC,GAAG,0HAA0H,0CAA0C,GAAG,oEAAoE,0CAA0C,GAAG,oEAAoE,0CAA0C,GAAG,oEAAoE,0CAA0C,GAAG,oEAAoE,0CAA0C,GAAG,sEAAsE,4CAA4C,GAAG,sEAAsE,4CAA4C,GAAG,sEAAsE,4CAA4C,GAAG,sEAAsE,4CAA4C,GAAG,sEAAsE,4CAA4C,GAAG,qBAAqB;AAC3nM;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACxMvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,+HAA+H,QAAQ,MAAM,UAAU,UAAU,MAAM,KAAK,UAAU,MAAM,SAAS,KAAK,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,UAAU,UAAU,YAAY,iTAAiT,gBAAgB,iBAAiB,GAAG,yBAAyB,iBAAiB,GAAG,2TAA2T,uBAAuB,GAAG,oDAAoD,gBAAgB,uBAAuB,WAAW,YAAY,aAAa,cAAc,4BAA4B,GAAG,qBAAqB;AACjtC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACxCvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,sIAAsI,QAAQ,MAAM,UAAU,UAAU,UAAU,UAAU,MAAM,aAAa,QAAQ,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,YAAY,OAAO,YAAY,aAAa,aAAa,aAAa,OAAO,MAAM,YAAY,OAAO,aAAa,MAAM,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,YAAY,WAAW,YAAY,WAAW,OAAO,KAAK,YAAY,aAAa,OAAO,aAAa,MAAM,YAAY,aAAa,aAAa,WAAW,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,WAAW,MAAM,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,MAAM,aAAa,MAAM,YAAY,OAAO,YAAY,MAAM,UAAU,MAAM,aAAa,MAAM,UAAU,YAAY,WAAW,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,MAAM,KAAK,UAAU,YAAY,WAAW,OAAO,KAAK,YAAY,WAAW,OAAO,aAAa,MAAM,UAAU,MAAM,KAAK,UAAU,YAAY,OAAO,OAAO,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,QAAQ,YAAY,WAAW,OAAO,KAAK,YAAY,aAAa,aAAa,qUAAqU,iBAAiB,eAAe,iBAAiB,gBAAgB,GAAG,iPAAiP,4CAA4C,+CAA+C,wBAAwB,2CAA2C,sBAAsB,qBAAqB,qBAAqB,oCAAoC,oBAAoB,GAAG,mEAAmE,8CAA8C,GAAG,2DAA2D,uBAAuB,aAAa,mBAAmB,GAAG,gDAAgD,oBAAoB,GAAG,2CAA2C,oBAAoB,4CAA4C,GAAG,wDAAwD,kBAAkB,GAAG,mDAAmD,kBAAkB,GAAG,gJAAgJ,+BAA+B,8EAA8E,yBAAyB,2CAA2C,GAAG,sHAAsH,8CAA8C,GAAG,oGAAoG,mMAAmM,GAAG,8CAA8C,kBAAkB,GAAG,iDAAiD,eAAe,6CAA6C,kBAAkB,4EAA4E,mBAAmB,GAAG,mEAAmE,6CAA6C,wBAAwB,GAAG,4DAA4D,4CAA4C,oCAAoC,qBAAqB,mBAAmB,uDAAuD,qDAAqD,GAAG,8CAA8C,mBAAmB,0BAA0B,GAAG,uCAAuC,gBAAgB,8CAA8C,uBAAuB,gBAAgB,GAAG,yBAAyB,kBAAkB,qBAAqB,GAAG,+BAA+B,gBAAgB,GAAG,+CAA+C,mCAAmC,GAAG,4DAA4D,wBAAwB,iBAAiB,GAAG,iFAAiF,kCAAkC,GAAG,2GAA2G,kBAAkB,GAAG,gFAAgF,kBAAkB,wBAAwB,oBAAoB,GAAG,2DAA2D,qBAAqB,oCAAoC,GAAG,2DAA2D,qBAAqB,qBAAqB,GAAG,uDAAuD,qBAAqB,qBAAqB,GAAG,0DAA0D,4CAA4C,wBAAwB,qBAAqB,GAAG,4DAA4D,qBAAqB,GAAG,oEAAoE,gLAAgL,wBAAwB,oBAAoB,GAAG,oEAAoE,yEAAyE,oBAAoB,GAAG,qGAAqG,gBAAgB,GAAG,8CAA8C,kBAAkB,iCAAiC,GAAG,6FAA6F,uCAAuC,oCAAoC,GAAG,2DAA2D,0BAA0B,GAAG,sEAAsE,gBAAgB,2BAA2B,GAAG,mFAAmF,wBAAwB,GAAG,qGAAqG,yEAAyE,oBAAoB,GAAG,kDAAkD,8BAA8B,4BAA4B,8BAA8B,GAAG,qBAAqB;AACtlP;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACtPvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,kIAAkI,MAAM,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,UAAU,YAAY,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,MAAM,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,aAAa,YAAY,YAAY,WAAW,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,WAAW,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,6JAA6J,kBAAkB,2BAA2B,2CAA2C,oCAAoC,wCAAwC,uCAAuC,GAAG,0BAA0B,mBAAmB,kBAAkB,wEAAwE,uCAAuC,qBAAqB,wBAAwB,cAAc,iBAAiB,8BAA8B,GAAG,2BAA2B,mBAAmB,GAAG,2BAA2B,mBAAmB,GAAG,wDAAwD,6CAA6C,GAAG,4CAA4C,kBAAkB,GAAG,iDAAiD,2BAA2B,sBAAsB,cAAc,+DAA+D,kBAAkB,wBAAwB,wCAAwC,oCAAoC,+EAA+E,6CAA6C,uCAAuC,GAAG,+DAA+D,2JAA2J,yBAAyB,GAAG,8BAA8B,oBAAoB,sBAAsB,2BAA2B,8BAA8B,8BAA8B,GAAG,kFAAkF,sFAAsF,+BAA+B,+CAA+C,GAAG,4DAA4D,sBAAsB,4BAA4B,wBAAwB,qBAAqB,GAAG,gEAAgE,8BAA8B,mBAAmB,iBAAiB,GAAG,gFAAgF,4BAA4B,GAAG,mDAAmD,qBAAqB,qBAAqB,iBAAiB,sBAAsB,GAAG,oDAAoD,wCAAwC,GAAG,wBAAwB,qBAAqB,4BAA4B,wBAAwB,GAAG,qBAAqB;AACzuH;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACxHvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,gIAAgI,QAAQ,MAAM,YAAY,WAAW,YAAY,aAAa,WAAW,UAAU,UAAU,UAAU,UAAU,YAAY,WAAW,MAAM,KAAK,UAAU,YAAY,aAAa,WAAW,UAAU,YAAY,aAAa,SAAS,KAAK,YAAY,OAAO,KAAK,MAAM,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,WAAW,UAAU,UAAU,MAAM,KAAK,YAAY,WAAW,UAAU,YAAY,WAAW,UAAU,YAAY,WAAW,UAAU,UAAU,UAAU,MAAM,KAAK,KAAK,UAAU,MAAM,KAAK,UAAU,KAAK,MAAM,KAAK,KAAK,YAAY,OAAO,KAAK,YAAY,MAAM,iTAAiT,uBAAuB,kBAAkB,4BAA4B,wBAAwB,gBAAgB,YAAY,WAAW,gBAAgB,iBAAiB,wCAAwC,kBAAkB,GAAG,wBAAwB,oBAAoB,sBAAsB,yBAAyB,eAAe,gBAAgB,uBAAuB,uCAAuC,uGAAuG,uBAAuB,6DAA6D,GAAG,gCAAgC,eAAe,gBAAgB,wBAAwB,4BAA4B,uBAAuB,WAAW,YAAY,gBAAgB,GAAG,+BAA+B,wCAAwC,eAAe,gBAAgB,uBAAuB,gBAAgB,iBAAiB,uBAAuB,WAAW,YAAY,cAAc,aAAa,GAAG,uBAAuB,QAAQ,iBAAiB,KAAK,YAAY,iBAAiB,KAAK,GAAG,sBAAsB,QAAQ,8BAA8B,KAAK,YAAY,gCAAgC,KAAK,GAAG,qBAAqB;AAChvE;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACzFvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,gIAAgI,QAAQ,MAAM,YAAY,aAAa,WAAW,YAAY,aAAa,aAAa,WAAW,UAAU,YAAY,WAAW,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,MAAM,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,WAAW,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,aAAa,2TAA2T,uCAAuC,oCAAoC,iBAAiB,2BAA2B,uBAAuB,sBAAsB,iBAAiB,oBAAoB,0BAA0B,kBAAkB,qBAAqB,6BAA6B,0BAA0B,GAAG,yBAAyB,2CAA2C,iBAAiB,2BAA2B,iEAAiE,2CAA2C,sBAAsB,uBAAuB,uCAAuC,oCAAoC,kBAAkB,qBAAqB,6BAA6B,0BAA0B,GAAG,0CAA0C,yBAAyB,iCAAiC,8BAA8B,iBAAiB,GAAG,+BAA+B,6EAA6E,2CAA2C,GAAG,wDAAwD,8EAA8E,wBAAwB,GAAG,wBAAwB,kBAAkB,uBAAuB,2BAA2B,iBAAiB,8CAA8C,2BAA2B,wBAAwB,GAAG,uCAAuC,iBAAiB,GAAG,4DAA4D,6EAA6E,2CAA2C,wDAAwD,GAAG,gCAAgC,oBAAoB,oCAAoC,uDAAuD,iDAAiD,GAAG,0BAA0B,mBAAmB,gBAAgB,uCAAuC,2CAA2C,oCAAoC,0BAA0B,sEAAsE,2CAA2C,kBAAkB,qBAAqB,6BAA6B,0BAA0B,GAAG,0CAA0C,iBAAiB,GAAG,oCAAoC,sBAAsB,qBAAqB,GAAG,qBAAqB;AACvyH;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC/GvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,+HAA+H,QAAQ,MAAM,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,UAAU,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,gTAAgT,kBAAkB,wBAAwB,sBAAsB,uBAAuB,uCAAuC,kCAAkC,oCAAoC,iBAAiB,iBAAiB,GAAG,sBAAsB,8CAA8C,GAAG,sBAAsB,sBAAsB,0CAA0C,GAAG,sBAAsB,oBAAoB,sEAAsE,6BAA6B,qBAAqB,wBAAwB,iBAAiB,gBAAgB,uBAAuB,GAAG,8BAA8B,gBAAgB,uBAAuB,iBAAiB,gBAAgB,gBAAgB,YAAY,uDAAuD,6BAA6B,qBAAqB,uBAAuB,GAAG,sDAAsD,kFAAkF,GAAG,8DAA8D,8EAA8E,GAAG,qBAAqB;AACjkE;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACjEvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,+HAA+H,QAAQ,MAAM,YAAY,WAAW,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,sUAAsU,wBAAwB,kBAAkB,iBAAiB,wBAAwB,sBAAsB,8CAA8C,GAAG,2CAA2C,8CAA8C,GAAG,yCAAyC,kDAAkD,GAAG,6CAA6C,gBAAgB,GAAG,yDAAyD,mBAAmB,GAAG,qBAAqB;AACpnC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACpCvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,8HAA8H,QAAQ,MAAM,YAAY,aAAa,aAAa,cAAc,aAAa,aAAa,WAAW,YAAY,OAAO,KAAK,aAAa,aAAa,WAAW,MAAM,KAAK,YAAY,aAAa,OAAO,MAAM,YAAY,aAAa,WAAW,MAAM,MAAM,aAAa,aAAa,WAAW,UAAU,YAAY,WAAW,UAAU,WAAW,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,MAAM,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,wTAAwT,oCAAoC,wCAAwC,uCAAuC,sBAAsB,2GAA2G,gBAAgB,8BAA8B,GAAG,gCAAgC,6CAA6C,0FAA0F,GAAG,gCAAgC,qBAAqB,uBAAuB,GAAG,6DAA6D,uBAAuB,0BAA0B,iBAAiB,GAAG,6EAA6E,sEAAsE,iGAAiG,mBAAmB,uBAAuB,WAAW,cAAc,YAAY,2GAA2G,GAAG,gCAAgC,qBAAqB,qBAAqB,2CAA2C,kDAAkD,wBAAwB,0CAA0C,wCAAwC,qBAAqB,WAAW,eAAe,wBAAwB,sBAAsB,GAAG,kDAAkD,+CAA+C,GAAG,sCAAsC,wCAAwC,GAAG,iCAAiC,wCAAwC,GAAG,mCAAmC,wBAAwB,kBAAkB,GAAG,2CAA2C,YAAY,4BAA4B,GAAG,mBAAmB,YAAY,oCAAoC,mCAAmC,GAAG,yBAAyB,oBAAoB,iBAAiB,GAAG,qEAAqE,eAAe,GAAG,2EAA2E,iBAAiB,GAAG,qBAAqB;AAC17G;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AClHvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,gIAAgI,QAAQ,MAAM,MAAM,iBAAiB,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,cAAc,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,UAAU,MAAM,aAAa,MAAM,YAAY,WAAW,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,YAAY,WAAW,YAAY,aAAa,aAAa,WAAW,UAAU,UAAU,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,UAAU,OAAO,KAAK,YAAY,aAAa,aAAa,aAAa,aAAa,WAAW,UAAU,UAAU,MAAM,OAAO,UAAU,UAAU,MAAM,OAAO,UAAU,YAAY,OAAO,OAAO,KAAK,KAAK,YAAY,WAAW,YAAY,WAAW,YAAY,aAAa,aAAa,WAAW,UAAU,UAAU,YAAY,WAAW,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,UAAU,4SAA4S,gFAAgF,+BAA+B,sCAAsC,qBAAqB,GAAG,iBAAiB,6DAA6D,0BAA0B,sCAAsC,+EAA+E,6CAA6C,6CAA6C,+CAA+C,mBAAmB,eAAe,GAAG,2DAA2D,sDAAsD,kBAAkB,wBAAwB,GAAG,2CAA2C,wBAAwB,GAAG,+BAA+B,wCAAwC,6CAA6C,4CAA4C,iBAAiB,2BAA2B,kBAAkB,qBAAqB,6BAA6B,0BAA0B,mBAAmB,cAAc,iBAAiB,2CAA2C,kBAAkB,wBAAwB,uBAAuB,uCAAuC,qBAAqB,sBAAsB,sBAAsB,GAAG,uEAAuE,uCAAuC,sBAAsB,sBAAsB,oCAAoC,0CAA0C,GAAG,4CAA4C,oCAAoC,GAAG,+CAA+C,kBAAkB,wBAAwB,GAAG,sDAAsD,iBAAiB,mBAAmB,GAAG,qDAAqD,uBAAuB,wBAAwB,+EAA+E,6CAA6C,6CAA6C,eAAe,aAAa,WAAW,GAAG,8GAA8G,eAAe,kBAAkB,GAAG,6FAA6F,iBAAiB,qBAAqB,GAAG,8MAA8M,wCAAwC,iBAAiB,2BAA2B,kBAAkB,qBAAqB,6BAA6B,0BAA0B,mBAAmB,cAAc,iBAAiB,2CAA2C,kBAAkB,wBAAwB,uBAAuB,uCAAuC,qBAAqB,sBAAsB,GAAG,+CAA+C,iBAAiB,GAAG,6CAA6C,eAAe,mBAAmB,GAAG,qBAAqB;AAClvJ;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACvJvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,gIAAgI,QAAQ,MAAM,YAAY,WAAW,MAAM,YAAY,MAAM,UAAU,OAAO,KAAK,YAAY,OAAO,YAAY,MAAM,YAAY,OAAO,YAAY,MAAM,YAAY,OAAO,KAAK,YAAY,0TAA0T,mFAAmF,GAAG,8CAA8C,oBAAoB,GAAG,mEAAmE,wDAAwD,GAAG,4EAA4E,2CAA2C,GAAG,6HAA6H,uDAAuD,GAAG,kEAAkE,gEAAgE,GAAG,qBAAqB;AACt2C;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACvCvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,qIAAqI,MAAM,KAAK,UAAU,YAAY,WAAW,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,WAAW,UAAU,YAAY,aAAa,WAAW,UAAU,UAAU,UAAU,UAAU,MAAM,KAAK,YAAY,aAAa,WAAW,UAAU,YAAY,WAAW,MAAM,KAAK,YAAY,aAAa,WAAW,YAAY,WAAW,MAAM,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,UAAU,YAAY,aAAa,uKAAuK,iBAAiB,uBAAuB,mBAAmB,0BAA0B,GAAG,6BAA6B,uBAAuB,GAAG,gCAAgC,uBAAuB,YAAY,aAAa,sBAAsB,GAAG,iCAAiC,kBAAkB,uBAAuB,sBAAsB,GAAG,8EAA8E,8BAA8B,mDAAmD,mBAAmB,oBAAoB,qBAAqB,uBAAuB,WAAW,cAAc,aAAa,oBAAoB,eAAe,GAAG,yCAAyC,kCAAkC,0BAA0B,cAAc,eAAe,uBAAuB,eAAe,GAAG,4EAA4E,qDAAqD,oEAAoE,iBAAiB,qBAAqB,kBAAkB,GAAG,kFAAkF,oBAAoB,8CAA8C,GAAG,mDAAmD,uBAAuB,wCAAwC,8CAA8C,gBAAgB,eAAe,uBAAuB,2BAA2B,GAAG,qBAAqB;AAC52E;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACjFvC;AACqH;AACjB;AACpG,8BAA8B,2FAA2B,CAAC,oGAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,+HAA+H,QAAQ,MAAM,YAAY,WAAW,OAAO,KAAK,UAAU,MAAM,KAAK,YAAY,8TAA8T,qBAAqB,oBAAoB,GAAG,8CAA8C,kBAAkB,GAAG,kBAAkB,0CAA0C,GAAG,qBAAqB;AACztB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACxBvC;AACoI;AACjB;AACnH,8BAA8B,sGAA2B,CAAC,+GAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,qHAAqH,MAAM,WAAW,QAAQ,MAAM,UAAU,UAAU,UAAU,UAAU,UAAU,YAAY,aAAa,aAAa,WAAW,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,UAAU,UAAU,UAAU,OAAO,KAAK,UAAU,MAAM,KAAK,UAAU,UAAU,YAAY,ojBAAojB,aAAa,cAAc,oBAAoB,iBAAiB,kBAAkB,uBAAuB,wBAAwB,2BAA2B,iBAAiB,0BAA0B,6BAA6B,qBAAqB,GAAG,gCAAgC,gBAAgB,mBAAmB,kBAAkB,mBAAmB,GAAG,4CAA4C,kBAAkB,GAAG,wBAAwB,aAAa,cAAc,2BAA2B,GAAG,qBAAqB;AAC39C;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACpDvC;AACoI;AACjB;AACnH,8BAA8B,sGAA2B,CAAC,+GAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,6HAA6H,MAAM,KAAK,YAAY,WAAW,YAAY,aAAa,4NAA4N,sFAAsF,+BAA+B,+CAA+C,GAAG,qBAAqB;AACvlB;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AClBvC;AACoI;AACjB;AACnH,8BAA8B,sGAA2B,CAAC,+GAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,6HAA6H,MAAM,WAAW,QAAQ,MAAM,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,UAAU,UAAU,UAAU,UAAU,YAAY,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,OAAO,KAAK,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,YAAY,WAAW,UAAU,MAAM,KAAK,UAAU,UAAU,UAAU,UAAU,YAAY,WAAW,YAAY,WAAW,UAAU,mjBAAmjB,kBAAkB,2BAA2B,8BAA8B,2BAA2B,0BAA0B,sBAAsB,GAAG,+BAA+B,mBAAmB,GAAG,gCAAgC,mBAAmB,cAAc,eAAe,kBAAkB,mBAAmB,0BAA0B,GAAG,+BAA+B,qBAAqB,wBAAwB,4BAA4B,GAAG,6BAA6B,kBAAkB,wBAAwB,GAAG,iCAAiC,mBAAmB,GAAG,oCAAoC,mBAAmB,qBAAqB,GAAG,qCAAqC,mBAAmB,GAAG,kCAAkC,qBAAqB,wBAAwB,4BAA4B,GAAG,oBAAoB,kCAAkC,kCAAkC,uBAAuB,eAAe,cAAc,WAAW,cAAc,iBAAiB,mBAAmB,kBAAkB,2BAA2B,eAAe,oBAAoB,GAAG,wBAAwB,iBAAiB,mBAAmB,gBAAgB,iBAAiB,uBAAuB,gBAAgB,wBAAwB,oBAAoB,oBAAoB,GAAG,qBAAqB;AACrpF;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACnGvC;AACoI;AACjB;AACnH,8BAA8B,sGAA2B,CAAC,+GAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,wHAAwH,MAAM,WAAW,QAAQ,MAAM,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,UAAU,UAAU,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,8iBAA8iB,eAAe,GAAG,0BAA0B,eAAe,GAAG,0BAA0B,eAAe,GAAG,0BAA0B,eAAe,GAAG,wCAAwC,6BAA6B,GAAG,gCAAgC,uBAAuB,WAAW,YAAY,gBAAgB,iBAAiB,gBAAgB,GAAG,yDAAyD,sBAAsB,GAAG,uDAAuD,sBAAsB,GAAG,+DAA+D,cAAc,mBAAmB,gCAAgC,GAAG,6DAA6D,aAAa,oBAAoB,gCAAgC,GAAG,2BAA2B,eAAe,2BAA2B,yBAAyB,GAAG,yCAAyC,6BAA6B,GAAG,qBAAqB;AAC1gE;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;AC/EvC;AACoI;AACjB;AACa;AACQ;AACA;AACL;AACL;AACG;AACE;AACC;AACJ;AACE;AAClI,8BAA8B,sGAA2B,CAAC,+GAAqC;AAC/F,0BAA0B,mHAAiC;AAC3D,0BAA0B,2HAAiC;AAC3D,0BAA0B,2HAAiC;AAC3D,0BAA0B,sHAAiC;AAC3D,0BAA0B,iHAAiC;AAC3D,0BAA0B,oHAAiC;AAC3D,0BAA0B,sHAAiC;AAC3D,0BAA0B,uHAAiC;AAC3D,0BAA0B,oHAAiC;AAC3D,0BAA0B,sHAAiC;AAC3D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,oHAAoH,MAAM,WAAW,qjBAAqjB,iCAAiC,iCAAiC,4BAA4B,uBAAuB,0BAA0B,4BAA4B,6BAA6B,yBAAyB,2BAA2B,qBAAqB;AACl9B;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACxCvC;AACoI;AACjB;AACnH,8BAA8B,sGAA2B,CAAC,+GAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,mHAAmH,MAAM,WAAW,QAAQ,MAAM,UAAU,YAAY,aAAa,aAAa,aAAa,WAAW,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,UAAU,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,MAAM,YAAY,OAAO,MAAM,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,yiBAAyiB,mBAAmB,uBAAuB,wBAAwB,uBAAuB,qBAAqB,kBAAkB,8BAA8B,2BAA2B,0BAA0B,sBAAsB,GAAG,sBAAsB,cAAc,eAAe,mBAAmB,0BAA0B,GAAG,mBAAmB,uBAAuB,GAAG,kEAAkE,6BAA6B,GAAG,kDAAkD,wBAAwB,uBAAuB,GAAG,wBAAwB,wBAAwB,qBAAqB,GAAG,2BAA2B,wBAAwB,sBAAsB,GAAG,qBAAqB;AAC/vD;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACjEvC;AACoI;AACjB;AACnH,8BAA8B,sGAA2B,CAAC,+GAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,sHAAsH,MAAM,WAAW,QAAQ,MAAM,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,UAAU,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,MAAM,YAAY,4iBAA4iB,kBAAkB,8BAA8B,2BAA2B,0BAA0B,sBAAsB,GAAG,yBAAyB,cAAc,eAAe,kBAAkB,wBAAwB,0BAA0B,GAAG,sBAAsB,2BAA2B,GAAG,kDAAkD,0BAA0B,GAAG,qBAAqB;AAC5wC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC7CvC;AACoI;AACjB;AACnH,8BAA8B,sGAA2B,CAAC,+GAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,wHAAwH,MAAM,WAAW,QAAQ,MAAM,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,OAAO,KAAK,YAAY,aAAa,aAAa,WAAW,OAAO,KAAK,YAAY,aAAa,8iBAA8iB,kBAAkB,8BAA8B,2BAA2B,0BAA0B,sBAAsB,GAAG,kDAAkD,wBAAwB,GAAG,gDAAgD,2BAA2B,GAAG,0BAA0B,2BAA2B,mBAAmB,GAAG,yBAAyB,2BAA2B,uBAAuB,qBAAqB,mBAAmB,GAAG,yBAAyB,2BAA2B,uBAAuB,GAAG,qBAAqB;AAC3/C;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;ACrDvC;AACoI;AACjB;AACnH,8BAA8B,sGAA2B,CAAC,+GAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,yHAAyH,MAAM,WAAW,QAAQ,MAAM,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,UAAU,UAAU,UAAU,MAAM,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,OAAO,KAAK,UAAU,UAAU,YAAY,qjBAAqjB,eAAe,GAAG,2BAA2B,eAAe,GAAG,yCAAyC,6BAA6B,GAAG,iCAAiC,uBAAuB,WAAW,YAAY,gBAAgB,iBAAiB,gBAAgB,GAAG,2EAA2E,sBAAsB,GAAG,yEAAyE,sBAAsB,GAAG,iFAAiF,cAAc,mBAAmB,gCAAgC,GAAG,+EAA+E,aAAa,oBAAoB,gCAAgC,GAAG,qBAAqB;AAC1uD;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC7DvC;AACoI;AACjB;AACnH,8BAA8B,sGAA2B,CAAC,+GAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,qHAAqH,MAAM,WAAW,QAAQ,MAAM,UAAU,YAAY,aAAa,aAAa,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,UAAU,UAAU,UAAU,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,yBAAyB,OAAO,MAAM,UAAU,OAAO,KAAK,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,aAAa,2iBAA2iB,kBAAkB,8BAA8B,2BAA2B,0BAA0B,sBAAsB,GAAG,+CAA+C,wBAAwB,0BAA0B,GAAG,6CAA6C,2BAA2B,0BAA0B,GAAG,wBAAwB,cAAc,eAAe,kBAAkB,mBAAmB,0BAA0B,GAAG,oEAAoE,wBAAwB,GAAG,kEAAkE,2BAA2B,GAAG,oBAAoB,kBAAkB,wBAAwB,2BAA2B,qBAAqB,wBAAwB,iCAAiC,kDAAkD,mBAAmB,GAAG,yBAAyB,mBAAmB,qBAAqB,wBAAwB,GAAG,yBAAyB,qBAAqB,gBAAgB,2BAA2B,GAAG,kCAAkC,6BAA6B,GAAG,wCAAwC,6BAA6B,GAAG,+CAA+C,uBAAuB,GAAG,8EAA8E,YAAY,gCAAgC,GAAG,4EAA4E,WAAW,+BAA+B,GAAG,+DAA+D,qBAAqB,GAAG,6CAA6C,qBAAqB,gBAAgB,2BAA2B,wBAAwB,GAAG,qBAAqB;AACxkG;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AChHvC;AACoI;AACjB;AACnH,8BAA8B,sGAA2B,CAAC,+GAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,uHAAuH,MAAM,WAAW,QAAQ,MAAM,UAAU,MAAM,KAAK,UAAU,mjBAAmjB,eAAe,GAAG,+BAA+B,eAAe,GAAG,qBAAqB;AACv0B;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;AC5BvC;AACoI;AACjB;AACnH,8BAA8B,sGAA2B,CAAC,+GAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,qHAAqH,MAAM,WAAW,QAAQ,MAAM,YAAY,aAAa,OAAO,KAAK,YAAY,2iBAA2iB,2BAA2B,uBAAuB,GAAG,8BAA8B,6BAA6B,GAAG,qBAAqB;AAC/3B;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;AC7B1B;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA,gDAAgD;AAChD;AACA;AACA,qFAAqF;AACrF;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qBAAqB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,sFAAsF,qBAAqB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,iDAAiD,qBAAqB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,sDAAsD,qBAAqB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpFa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzBa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,cAAc;AACrE;AACA;AACA;AACA;AACA;;;;;;;;ACfa;;AAEb;AACA;AACA;AACA,kBAAkB,wBAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnFa;;AAEb;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjCa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACTa;;AAEb;AACA;AACA,cAAc,KAAwC,GAAG,sBAAiB,GAAG,CAAI;AACjF;AACA;AACA;AACA;AACA;;;;;;;;ACTa;;AAEb;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yDAAyD;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5Da;;AAEb;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC+D;AACH;AACwB;AACd;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,0EAAoB,mCAAmC,sEAAgB,2FAA2F,mEAAc;AAC9L;AACA,8BAA8B,sEAAgB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,KAAK;AACL,eAAe,yEAAgB,EAAE,wEAAsB,EAAE,gEAAW;AACpE;AACA,iEAAe,WAAW,EAAC;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChDA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACG;AACN;AACG;;AAEzB;;;ACbpB;AACA;AACA;AACA;;AAEA;AAC6C;AACG;AACC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRjD;AACA;AACA;AACA;AACwE;AACf;AACQ;AACxB;AACE;AACc;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB,sBAAsB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,mFAAmF,wCAAc;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,mCAAO;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wBAAU;AAC1B;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,6BAA6B,eAAe;AAC5C;AACA,0CAA0C,uCAAW;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2CAA2C;AACnE,uBAAuB,sBAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,4BAA4B,kCAAoB;AAChD,+BAA+B,4BAAc;AAC7C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqC;AACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wBAAU,SAAS,eAAC,KAAK,eAAC,OAAO,6BAA6B,EAAE,eAAC,QAAQ,mCAAmC,8BAA8B,eAAC,QAAQ,oCAAoC,iBAAiB,eAAC,OAAO,oCAAoC;AAC3Q;AACA;AACA,uBAAuB,wBAAU,SAAS,eAAC,KAAK,eAAC,OAAO,6BAA6B,EAAE,eAAC,QAAQ,mCAAmC,GAAG,eAAC,QAAQ,oCAAoC,iBAAiB,eAAC,OAAO,oCAAoC;AAChP;AACA;AACA;AACA;AACA,uBAAuB,wBAAU,SAAS,eAAC,KAAK,eAAC,OAAO,cAAc,kBAAkB,EAAE,wBAAwB,GAAG,EAAE,eAAC,QAAQ,mCAAmC,8BAA8B,eAAC,QAAQ,oCAAoC;AAC9O;AACA;AACA,uBAAuB,wBAAU,SAAS,eAAC,KAAK,eAAC,OAAO,cAAc,kBAAkB,EAAE,wBAAwB,GAAG,EAAE,eAAC,QAAQ,mCAAmC,GAAG,eAAC,QAAQ,oCAAoC;AACnN;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;;;;;;;;ACrJA;AACA;AACA;AACA;AACwD;AACV;AACf;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,wBAAwB,qBAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,6BAAmB,UAAU,0DAA0D;AACtG;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6BAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtIA;AACA;AACA;AACA;AACyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,iCAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,iCAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrCA;AACA;AACA;AACA;AAC8C;AACL;AACkB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,wBAAwB,iCAAM;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,+BAAiB;AAC5D;AACA;AACA;AACA,SAAS;AACT;AACA,0CAA0C,sCAAW;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACO,0BAA0B,iCAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;;;;;;;;;;ACjLA;AACA;AACA;AACA;AAC2C;AACgB;AACP;AACK;AACS;AAClE,2BAA2B,kCAAW;AAC/B;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO,wBAAwB,wBAAU;AACzC,4BAA4B;AAC5B,gBAAgB,oCAAoC;AACpD;AACA,wFAAwF,2CAAoB;AAC5G;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA,kCAAkC,mCAAM;AACxC;AACA;AACA;AACA,gCAAgC,mCAAM;AACtC,oCAAoC,mCAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,oBAAoB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,QAAQ;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,kGAAkG,IAAI;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0CAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oDAAoD;AACrD;AACA;AACA;AACO;AACP;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mDAAmD,0BAA0B;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,WAAW;AACtE;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0BAA0B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wCAAe;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;;;;AC7hBA;AACA;AACA;AACA;AACyD;AAChB;AACgB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,8BAAkB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,0BAA0B,iCAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB,kFAAkF,wCAAc;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAY;AACpB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,gBAAgB,yBAAyB,8BAAkB,EAAE;AAC7D;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,gBAAgB,8CAA8C;AAC9D;AACA;AACA;AACA;;;;;;;;AC/GA;AACA;AAC8D;AACN;AACW;AACnE;AACA;AACA;AACO;AACP;AACA;AACA;AACO,iCAAiC,6CAAoB;AAC5D;AACA;AACA;AACA;AACA,iBAAiB,2CAAe;AAChC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,QAAQ,iFAAiF;AACtJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,QAAQ,kFAAkF;AACvJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,QAAQ,kFAAkF;AACvJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,8EAA8E,kDAAqB;AACnG;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,kDAAqB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,2CAAe;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,2CAAe;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+FAA+F,oBAAoB;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACtZA;AACA;AACA;AACA;AAC4C;AACH;AACE;AAC3C;AACA;AACA;AACA;AACA;AACO,2BAA2B,iCAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,mCAAM;AACrC;AACA,4BAA4B,oCAAS;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,UAAU;AACzD,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA,2FAA2F,WAAW;AACtG;AACA;AACA;AACA;AACA;;ACtGA;AACA;AACA;AACA;AAC8C;AACA;AACgB;AACd;AACgB;AAC+B;AACtB;AAClB;AACE;AACqB;AACpB;AACjB;AACO;AACJ;AACD;AACkB;AACC;AACN;AACH;AACe;AACtB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,wBAAiB;AACvB;AACA;AACA;AACA,MAAM,wBAAiB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,mBAAmB,iCAAM;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,mCAAM;AACzC,oCAAoC,mCAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,yBAAU;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yBAAU;AAC3C,qBAAqB;AACrB;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA,sCAAsC,mCAAM;AAC5C;AACA,0BAA0B,wCAAe;AACzC,oCAAoC,oCAAS;AAC7C;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,iFAAiF,sCAAW;AAC5F;AACA,qFAAqF,wCAAc;AACnG;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAiB;AACzC;AACA;AACA,uDAAuD,gCAAK;AAC5D;AACA,mCAAmC,cAAc;AACjD;AACA,yCAAyC,SAAS;AAClD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,qCAAqC,gBAAgB;AACrD;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,0DAA0D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,UAAU;AACjC;AACA;AACA;AACA;AACA;AACA,uBAAuB,UAAU;AACjC;AACA;AACA;AACA;AACA;AACA,uBAAuB,WAAW;AAClC;AACA;AACA;AACA;AACA;AACA,uBAAuB,qCAAY;AACnC;AACA;AACA;AACA;AACA;AACA,uBAAuB,8BAAK;AAC5B;AACA;AACA;AACA,CAAC,oBAAoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,6BAA6B,sCAAW;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wCAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iCAAM;AAC7C;AACA;AACA;AACA,oBAAoB,wCAAW,qBAAqB,iCAAM;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wCAAW,qBAAqB,iCAAM;AACtD;AACA,gBAAgB,wCAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,gBAAgB,6DAA6D;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,UAAU;AACnD,wBAAwB,6BAAU;AAClC,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,YAAY;AACnF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,mCAAU;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,gCAAK;AAC9D;AACA,oCAAoC,eAAe;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,iBAAiB;AACvD;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA,mCAAmC,sCAAoB;AACvD;AACA;AACA,0CAA0C,sCAAoB;AAC9D;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,sCAAoB;AACzD;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,qCAAqC,sCAAoB;AACzD;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+BAAQ;AAChC;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,oBAAU;AACtB;AACA,aAAa;AACb;AACA;AACA;AACA,YAAY,sBAAY;AACxB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAoB;AACvC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gCAAgC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,+BAA+B,mCAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,4BAA4B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD,wCAAwC,MAAM;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yBAAU;AACtB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qCAAI,CAAC,6CAAoB;AAC3D;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAoB;AAC5C;AACA,mBAAmB,6CAAoB;AACvC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB,EAAE,8BAAM;AAC7C;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,UAAU;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,6BAAI;AAClB,cAAc,6BAAI;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,gBAAgB,+BAA+B;AAC/C;AACA,4CAA4C,mCAAM;AAClD;AACA;AACA,oCAAoC,mCAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAmB;AAC7C;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uCAAe;AAC3C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,6BAA6B,sCAAoB;AACjD;AACA,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA,oDAAoD,wBAAwB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,wBAAwB;AACrG,YAAY,iBAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,IAAI,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,eAAe,eAAe,sDAAsD;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,kCAAS,GAAG,QAAQ,yBAAyB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;AACrC;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AC7gEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACgC;AACJ;AACG;AACH;AACJ;AACM;AACG;AACR;AACzB;;;;;;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;;AAEA;AAC+C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACL/C,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACE;AACC;AACP;AACM;AACI;AACJ;AACC;AACD;AACP;;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBpB;AACA;AACA;AACA;AAC0B;AAC8C;AAC7B;AACc;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,yCAAyC,wCAAc;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,oBAAoB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAM;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,kCAAkC;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,oBAAoB;AAC/D;AACA;AACA;AACA,gBAAgB,sCAAmB,UAAU,mCAAmC;AAChF,YAAY,sCAAmB,UAAU,+DAA+D;AACxG;AACA,yCAAyC,sCAAmB,UAAU,sBAAsB,yBAAyB,EAAE;AACvH;AACA,4DAA4D,gDAAgD;AAC5G,oBAAoB,sCAAmB,UAAU,mCAAmC;AACpF,wBAAwB,sCAAmB;AAC3C,yDAAyD,sCAAmB,CAAC,qBAAO,iBAAiB,MAAM,uBAAS,iHAAiH;AACrO,YAAY,sCAAmB,UAAU,cAAc,yBAAyB,EAAE,kCAAkC,GAAG;AACvH,gBAAgB,sCAAmB,UAAU,sFAAsF;AACnI,oBAAoB,sCAAmB,YAAY,cAAc,qBAAqB,EAAE,sBAAsB;AAC9G;AACA,2BAA2B;AAC3B,oBAAoB,sCAAmB,CAAC,qBAAO,iBAAiB,MAAM,qBAAO,iFAAiF;AAC9J;AACA;AACA;;ACxJA;AACA;AACA;AACA;AACA;AACA;AACwD;AACf;AACyB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0BAAgB;AAC/B,eAAe,mCAAqB;AACpC;AACA;AACA;AACA;AACA;AACA,+BAA+B,YAAY;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,0CAAe,eAAe,EAAC;AAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9BA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACkD;AACF;AACH;;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVpB;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,wDAAwD;AACzD;;ACZA;AACA;AACsC;AACkB;AACb;AACS;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,2BAAa;AAChD,6BAA6B,sBAAsB;AACnD,wCAAwC,oBAAM;AAC9C;AACA;AACA,+FAA+F,eAAK;AACpG;AACA,yEAAyE,sBAAsB;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,oBAAM;AAClB;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;;;;;;;;;;AC5FA;AACA;AACyD;AACO;AACpB;AACH;AACH;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,yBAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sBAAO;AACrC;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA;AACA,gCAAgC,oCAAQ;AACxC;AACA;AACA,SAAS;AACT,gCAAgC,qCAAS;AACzC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,UAAU,SAAS,8BAA8B;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,sBAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD,gDAAgD,oBAAoB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC1QA;AACA;AAC4D;AACH;AAC+C;AAC9E;AACsB;AAChD;AACA;AACA;AACA,gCAAgC,oCAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kCAAkC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA,8CAA8C,wCAAc;AAC5D;AACA;AACA;AACA;AACA,yBAAyB,+BAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAmB,UAAU,gCAAgC;AAC7E,YAAY,sCAAmB,WAAW,wEAAwE;AAClH,gBAAgB,sCAAmB,UAAU,WAAW,uCAAO,kHAAkH;AACjL,oBAAoB,sCAAmB,YAAY;AACnD;AACA,2BAA2B;AAC3B,oBAAoB,sCAAmB,UAAU,yDAAyD;AAC1G,wBAAwB,sCAAmB,CAAC,wCAAY,UAAU,+EAA+E;AACjJ,wBAAwB,sCAAmB,YAAY,2EAA2E;AAClI,gBAAgB,sCAAmB,YAAY,kEAAkE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wCAAc;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sCAAmB,CAAC,gCAAQ,IAAI,wKAAwK;AACpN;AACA;AACA;AACA;AACO,sBAAsB,wCAAY;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wCAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sCAAmB,qBAAqB,uHAAuH;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uCAAW,QAAQ,sCAAmB,sBAAsB,+IAA+I;AAChO,sBAAsB,qCAAS;AAC/B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8CAA8C,4BAA4B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qCAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;AC5NA;AACA;AAC0C;AAC1C;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACO,4BAA4B,oBAAK;AACxC;AACA;AACA;AACA;AACA;AACO,2BAA2B,oBAAK;AACvC;;ACzBA;AACA;AACyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,gCAAgC,yBAAM;AAC7C;AACA;AACA;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;ACrOA;AACA;AACwD;AAClB;AACO;AACtC,+BAA+B,yBAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,SAAS;AACT;AACA,0CAA0C,gCAAa;AACvD;AACA;AACA;AACA,gBAAgB,+BAA+B;AAC/C,0BAA0B,UAAU;AACpC;AACA,SAAS;AACT;AACA,8CAA8C,kBAAkB;AAChE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACyB;AACC;AACG;AACH;AACC;AACF;AACA;AACA;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACJ;AACD;AACJ;;AAErB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZpB;AACA;AACA;AACA;AACyG;AAC/C;AACY;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,qCAAW;AAC1B;AACA,iFAAiF,wCAAc;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAU;AAC1B,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qCAAkB;AAClC,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gCAAa;AAC7B,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qCAAkB;AAClC,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8CAAoB;AACpC,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;;;;;;;AC3GA;AACA;AACA;AACA;AACuE;AACd;AAC6N;AACvN;AACO;AACW;AACrC;AACK;AACvB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,cAAc,gDAAuB;AACrC,eAAe,qCAAW;AAC1B;AACA,8BAA8B,+CAAsB;AACpD;AACA,+BAA+B,+CAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2GAAmC;AACvD,oBAAoB,oQAAiC;AACrD,oBAAoB,oGAA4C;AAChE;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAgB,CAAC,sCAAc;AACvD;AACA,iBAAiB;AACjB,2BAA2B,uCAAe;AAC1C;AACA,oBAAoB,0CAAa;AACjC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,cAAc,6CAAoB;AAClC,eAAe,qCAAW;AAC1B;AACA,2BAA2B,4CAAmB;AAC9C;AACA,4BAA4B,4CAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,cAAc,iDAAwB;AACtC,eAAe,6CAAoB;AACnC,eAAe,qCAAW,EAAE,8CAAgB,EAAE,iDAAqB;AACnE;AACA,6BAA6B,gDAAuB;AACpD;AACA,uCAAuC,gDAAuB;AAC9D;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,oGAAoG,YAAY;AAChH;AACA,uCAAuC,gCAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sCAAmB,UAAU,yCAAyC;AAClG,wBAAwB,sCAAmB,SAAS,+DAA+D;AACnH,qDAAqD,sCAAmB,UAAU,uCAAuC;AACzH,wBAAwB,sCAAmB,CAAC,yCAAa,IAAI;AAC7D;AACA;AACA;AACA;AACA;AACA,6BAA6B,aAAa,uCAAa,cAAc,uCAAuC,iBAAiB,iBAAiB;AAC9I;AACA;AACA;AACA,oIAAoI;AACpI;AACA;AACA,yCAAyC,gCAAO;AAChD;AACA;AACA;AACA;AACA,6BAA6B,0FAA0F,wCAAc,EAAE;AACvI;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,iDAAwB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gDAAuB,0BAA0B,qCAAQ;AAChF;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,cAAc,6BAAe;AAC7B,eAAe,gDAAuB,EAAE,iDAAwB;AAChE,eAAe,qCAAW;AAC1B;AACA,4BAA4B,gDAAuB;AACnD;AACA;AACA,oFAAoF,wCAAc;AAClG,SAAS;AACT;AACA;AACA,iCAAiC,kDAAyB;AAC1D;AACA;AACA;AACA;;AC3LA;AACA;AACA;AACA;AACA;AACA;AACoD;AACa;AACd;AACG;AACV;AAC6D;AACzG;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,qCAAW;AAC1B,eAAe,mBAAS,EAAE,kCAAU;AACpC,cAAc,4BAAc;AAC5B;AACA,yBAAyB,qBAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc;AAClB,IAAI,cAAc;AAClB,IAAI,WAAW;AACf,IAAI,aAAa;AACjB,IAAI,eAAe;AACnB,IAAI,cAAc;AAClB;AACA;AACA,0CAAe,OAAO,EAAC;AACvB;;;;;;;;;;;;;;AChFA;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACJ;AACC;AACC;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACX/C;AACA;AACA;AACA;AACqI;AACZ;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wGAAwG,qCAAuB;AAC/H,qGAAqG,4CAA8B;AACnI;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,mBAAmB,wBAAU;AAC7B;AACA;AACA;AACA;AACA,mBAAmB,wBAAU;AAC7B;AACA;AACA,mBAAmB,uBAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,oCAAsB;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,eAAe,oCAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,mBAAmB,6BAAe;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,+BAA+B,+BAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wBAAU;AACzB;AACA;AACA,CAAC,sCAAsC;AACvC;;;;;;;;;;;;;;;;AC9HA;AACA;AACA;AACA;AACyD;AACX;AAC9C;AACA;AACA;AACA;AACA;AACA,0BAA0B,0BAAK;AAC/B;AACA,eAAe,sCAAa;AAC5B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA,CAAC;AACD;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA,+BAA+B,SAAS,cAAc;AACtD;AACA;AACA,iCAAiC,YAAY,WAAW;AACxD;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,QAAQ,8BAAU;AAClB;AACA;AACA;;;;;;AClDA;AACA;AAC2C;AACH;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS,KAAK;AAChC;AACA,CAAC,IAAI;AACL;AACA;AACA;AACA,kCAAkC,cAAc;AAChD;AACA;AACO;AACP;AACA;AACA;AACA;AACA,mBAAmB,6BAAI;AACvB,SAAS,IAAI,SAAS,KAAK,cAAc,6BAAI,wBAAwB;AACrE,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oCAAU;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AC7GA;AACA;AACA;AACA;AACA;AAC0C;AACgB;AACd;AAC5C;AACA;AACA;AACA;AACA,kBAAkB,8BAAU;AAC5B,SAAS,iBAAiB,MAAM;AAChC,CAAC;AACD;AACA;AACA;AACA,oBAAoB,0BAAK;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,MAAM,aAAM,GAAG,8BAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8CAA8C;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gCAAO;AACpB;AACA;AACA;AACA,sCAAsC,wDAAwD;AAC9F,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO;AACP,8CAA8C,aAAM;AACpD;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC0D;AAChB;AACe;AAClD;AACP;AACA;AACA;AACA;AACO,0BAA0B,0BAAK;AACtC;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,oCAAoC,+BAA+B;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,WAAW;AAChD;AACA;AACA;AACA;AACA;AACA,8BAA8B,8BAAU;AACxC,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,UAAU;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,eAAe;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,qBAAqB,8BAAU;AACtC;;;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACuE;AACzB;AACuC;AACyE;AAC9J;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mCAAsB;AAC3C,mBAAmB,mCAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2CAA8B,gBAAgB,2CAA8B;AACtG;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gDAAmC;AAClD;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAA0C,CAAC,2CAA8B;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oCAAe;AAClC;AACA,eAAe,oCAAe;AAC9B;AACA;AACA;AACA;AACA;AACO,mBAAmB,0BAAK;AAC/B;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,wBAAwB,+BAAU;AACzC;AACA;AACA;AACA;AACO,cAAc,8BAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kBAAkB;AAClD;AACA;AACA,uCAAuC,sCAAsC;AAC7E;AACA;AACA,uCAAuC,2CAA2C;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,oBAAoB,oBAAoB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,QAAQ,iBAAiB,QAAQ,kBAAkB,gBAAgB,YAAY;AAC/E;AACA;AACA;AACA;;AC3NA;AACA;AACA;AACA;AAC8B;AACD;AACJ;AACE;AAC3B;;;;ACRA;AACA;AAC8E;AACzB;AACyC;AACd;AAC4K;AACnM;AACb;AACD;AACA;AACQ;AACoE;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,kBAAkB,+CAA+C,IAAI;AACrE,kCAAkC,oBAAM;AACxC,6BAA6B,oBAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,IAAI;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,aAAa,IAAI;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gCAAW;AAChC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,0BAA0B,QAAQ,0FAA0F;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa,gCAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wBAAwB;AACvD;AACA;AACA;AACA;AACA;AACA,6BAA6B,gCAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gCAAW;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,gBAAgB,qBAAqB;AACrC,mFAAmF,wCAAc;AACjG;AACA;AACA;AACA;AACA,0DAA0D,8BAAa;AACvE;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,0DAA0D,6BAAU;AACpE;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,sEAAsE,qCAAa,GAAG,wBAAwB;AAC9G;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,0DAA0D,2CAAmB;AAC7E;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,0DAA0D,6CAAqB;AAC/E;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,0DAA0D,mDAA2B;AACrF;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,0DAA0D,2CAAmB;AAC7E;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,sBAAsB,yBAAU;AAChC,sBAAsB,yBAAU;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,aAAa;AAC1C,qBAAqB;AACrB;AACA;AACA,6BAA6B,aAAa;AAC1C,qBAAqB;AACrB;AACA;AACA,6BAA6B,aAAa;AAC1C,qBAAqB;AACrB,uBAAuB,uBAAa;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,6BAA6B,aAAa;AAC1C,+BAA+B,aAAa;AAC5C;AACA;AACA,oEAAoE,0BAAM;AAC1E,aAAa;AACb;AACA;AACA;AACA,0DAA0D,mCAAW;AACrE;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,0DAA0D,8BAAU;AACpE;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,0DAA0D,kCAAU;AACpE;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,oBAAoB,kCAAe;AACnC;AACA,oBAAoB,yBAAI,MAAM,0BAAM,IAAI,gCAAmB;AAC3D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,oBAAoB,4CAAoB;AACxC,oBAAoB,uCAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,oBAAoB,gCAAW;AAC/B;AACA,0BAA0B,8BAAU,uBAAuB,wBAAwB;AACnF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yFAAyF,MAAM;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,0DAA0D,0BAAM;AAChE;AACA;AACA,6BAA6B,4CAAsB;AACnD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,0DAA0D,0BAAM;AAChE;AACA;AACA,6BAA6B,qCAAe;AAC5C;AACA,qBAAqB;AACrB;AACA;AACA,6BAA6B,8BAAQ;AACrC,+BAA+B,kCAAY;AAC3C;AACA;AACA,qBAAqB;AACrB;AACA;AACA,6BAA6B,8BAAQ;AACrC,+BAA+B,kCAAY;AAC3C;AACA;AACA,qBAAqB;AACrB;AACA;AACA,6BAA6B,sCAAgB;AAC7C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yFAAyF,qCAAa;AACtG,aAAa;AACb;AACA;AACA;AACA,0DAA0D,gCAAa;AACvE;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,8BAAU;AACpE;AACA,iBAAiB,GAAG,8BAAU;AAC9B;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,sEAAsE,gCAAW;AACjF;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gCAAQ;AACjD;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,sEAAsE,gCAAW;AACjF;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,qEAAqE,WAAW;AAChF;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,oEAAoE,gCAAW;AAC/E,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC,0DAA0D;AAC3D;;;;;;AC/1BA;AACA;AACiG;AACnD;AACW;AACZ;AACtC,2BAA2B,8BAAU;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,CAAC;AACD;AACA;AACO,8BAA8B,6BAAc;AACnD,+DAA+D;AAC/D,MAAM,KAAK,6BAAC,oDAAoD;AAChE,MAAM,KAAK,6BAAC,yDAAyD;AACrE;AACA,cAAc,6BAAC,WAAW,6BAAC,WAAW,6BAAC,WAAW,6BAAC;AACnD;AACA;AACA,KAAK;AACL;AACA,aAAa,6BAAC;AACd;AACA;AACA,KAAK;AACL,MAAM,KAAK,6BAAC,oDAAoD;AAChE,MAAM,KAAK,6BAAC,wDAAwD;AACpE;AACA,cAAc,6BAAC,YAAY,6BAAC,QAAQ,6BAAC,UAAU,6BAAC,YAAY,6BAAC;AAC7D;AACA,KAAK;AACL;AACA,aAAa,6BAAC,UAAU,6BAAC;AACzB;AACA,KAAK;AACL;AACA,cAAc,6BAAC,SAAS,6BAAC,gBAAgB,6BAAC;AAC1C;AACA,KAAK;AACL,MAAM,KAAK,6BAAC,kEAAkE;AAC9E,MAAM,KAAK,6BAAC,gEAAgE;AAC5E;AACA,aAAa,6BAAC;AACd;AACA;AACA,KAAK;AACL;AACA,aAAa,6BAAC;AACd;AACA;AACA,KAAK;AACL,MAAM,KAAK,6BAAC,wDAAwD;AACpE;AACA,cAAc,6BAAC,YAAY,6BAAC,YAAY,6BAAC,SAAS,6BAAC;AACnD;AACA,KAAK;AACL,MAAM,KAAK,6BAAC,0DAA0D;AACtE,MAAM,KAAK,6BAAC,sDAAsD;AAClE,MAAM,KAAK,6BAAC,kEAAkE;AAC9E,MAAM,KAAK,6BAAC,sDAAsD;AAClE;AACA,aAAa,6BAAC;AACd;AACA;AACA,KAAK;AACL,MAAM,MAAM,6BAAC,YAAY,6BAAC,gBAAgB,6BAAC,oBAAoB;AAC/D,MAAM,KAAK,6BAAC,6BAA6B;AACzC,MAAM,KAAK,6BAAC,gCAAgC;AAC5C,MAAM,KAAK,6BAAC,gDAAgD;AAC5D;AACA,aAAa,6BAAC;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,wCAAwC,sCAAsC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,WAAW;AACzD;AACA,yCAAyC,mCAAmC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,wCAAc;AACjG;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAAU,aAAa;AAC3C,oBAAoB,qCAAkB,CAAC,oCAAqB;AAC5D;AACA,aAAa;AACb;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;;ACnNA;AACA;AACA;AACA;AACkD;AACE;AACM;AACjB;AAClC;AACP;AACA;AACA,oBAAoB,6BAAU;AAC9B,oBAAoB,8BAAU,QAAQ,qBAAqB;AAC3D;AACA;AACA;AACA;AACA,mBAAmB,6BAAU;AAC7B,cAAc,WAAW;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,8BAAU;AAC7B,0BAA0B,oCAAe;AACzC;AACA;AACA;AACA;AACA,4DAA4D,8BAAQ;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,WAAW;AAC9B,gCAAgC,iBAAiB;AACjD;AACA;AACA;AACA;AACO;AACP,WAAW,8BAAU;AACrB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACwG;AACxC;AAChB;AACS;AACV;AACE;AACD;AACA;AAChD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8BAAe;AACxC;AACA,YAAY,yBAAU,UAAU,QAAQ,sCAAW,kBAAkB,IAAI;AACzE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA,4BAA4B,4BAA4B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+BAAO;AAChC,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,oCAAsB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAa,OAAO,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kCAAmB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,8BAAe,CAAC,6BAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qGAA8B;AACtD,uBAAuB,yBAAyB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,wCAAc;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8B;AAClE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8B;AAClE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8B;AAClE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,6KAA+B;AACnE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA+B;AACnE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAqC;AACzE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA+B;AACnE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAqC;AACzE,0CAA0C,WAAW;AACrD;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,2GAAmC;AACvE,wCAAwC,+BAA+B;AACvE;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,0MAA8B;AAClE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAiC;AACrE,+BAA+B,8BAAe,mBAAmB,aAAa;AAC9E;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,uBAAuB;AACvF,oCAAoC,qGAAiC;AACrE,+BAA+B,8BAAe,mBAAmB,aAAa;AAC9E;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA+B;AACnE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAqC;AACzE,0CAA0C,6BAA6B;AACvE;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAqC;AACzE,0CAA0C,kBAAkB;AAC5D;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA+B;AACnE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8B;AAClE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAkD;AACtF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA4C;AAChF,2CAA2C;AAC3C;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAAgD;AACpF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAiD;AACrF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA+C;AACnF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA+C;AACnF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAoD;AACxF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAkD;AACtF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA+C;AACnF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAyC;AAC7E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAkD;AACtF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA+C;AACnF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA+C;AACnF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAA+C;AACnF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA0C;AAC9E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA+C;AACnF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAAkD;AACtF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAAkD;AACtF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAAmD;AACvF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAgD;AACpF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAgD;AACpF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,kGAA0C;AAC9E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAkD;AACtF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAkD;AACtF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAAgD;AACpF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAyC;AAC7E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAyC;AAC7E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAAiD;AACrF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,oCAAoC,mGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mGAAmD;AACvF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA+C;AACnF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA+C;AACnF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAkD;AACtF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAAgD;AACpF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA0C;AAC9E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAAgD;AACpF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,kGAAgD;AACpF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA+C;AACnF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA6C;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oGAA4C;AAChF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA2C;AAC/E;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qGAA8C;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wDAAwD;AACzD;;ACjqDA;AACA;AACA;AAC8D;AACN;AAC4B;AACtC;AACL;AACE;AACK;AACI;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,oBAAM;AACvC;AACA,6BAA6B,gCAAW;AACxC;AACA,wFAAwF,sBAAsB;AAC9G;AACA;AACA;AACA;AACA,aAAa,wCAAwC,iBAAiB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,6BAAI;AAC9E;AACA;AACA,0BAA0B,8BAAU;AACpC;AACA;AACA;AACA,SAAS;AACT,+BAA+B,8BAAU;AACzC;AACA,SAAS;AACT;AACA;AACA;AACA,YAAY,yBAAI;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8BAAU;AAC/B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8BAAU,gBAAgB,oCAAe;AAC9D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,yBAAyB,gBAAgB;AACzC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,MAAM,6BAA6B;AAC3F;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,8CAA8C,8BAA8B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oCAAe;AACjD,eAAe,oCAAe;AAC9B,+BAA+B,WAAW,oCAAe,cAAc;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sCAAsC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mCAAgB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mCAAgB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oCAAsB;AAC9B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,wDAAwD,qBAAqB;AAC7E;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8BAAU;AACnC,mBAAmB,gCAAW;AAC9B;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;AC9nBA;AACA;AACyD;AACf;AACY;AACV;AACQ;AACpD;AACA;AACA;AACO;AACP;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wDAAwD,GAAG;AACrF;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+FAA+F,GAAG;AAC5H;AACA;AACA,oBAAoB,0BAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,uFAAuF,sBAAsB;AAC7G,yFAAyF,uBAAuB;AAChH,qFAAqF,wCAAc;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,gBAAgB;AAC3C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AC5EA;AACA;AACgE;AAChB;AAChD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,uEAAuE,oCAAsB;AAC7F;AACA,cAAc,oCAAsB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+BAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,oCAAsB;AAC7F;AACA,cAAc,oCAAsB;AACpC;AACA;AACA;;;;AC1DA;AACA;AAC6E;AACnB;AAC2B;AAC1C;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,oBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,kDAAqB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,8BAA8B;AAClG;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,wBAAwB;AACrF;AACA;AACA,sDAAsD;AACtD;AACA;AACA,qBAAqB;AACrB;AACA,iFAAiF,IAAI;AACrF;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kDAAqB;AACvC;AACA,+BAA+B,IAAI,EAAE,0BAA0B,EAAE,WAAW;AAC5E;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,gDAAgD,SAAS,EAAE,mBAAmB;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,6CAAgB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gCAAW;AAC3C;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,8BAA8B,8BAAU,QAAQ,uBAAuB;AACvE,4BAA4B,8BAAU,QAAQ,2BAA2B;AACzE,+BAA+B,+BAAU;AACzC;AACA,uBAAuB,8BAAU;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,yCAAyC,8BAAU;AACnD;AACA;AACA;AACA;AACA,aAAa;AACb,0BAA0B,8BAAU;AACpC,SAAS;AACT,iCAAiC,8BAAU;AAC3C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,eAAe;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,iCAAiC;AACrF,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gCAAW;AACpC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,8BAAU,gBAAgB,oCAAe;AACtE,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,8BAAU;AAC3C,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,yBAAyB,gCAAW;AACpC;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sBAAsB;AACvB;;AC1tBA;AACA;AACA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,qCAAqC,8BAAK;AACjD;AACA;AACA;AACO,oCAAoC,8BAAK;AAChD;AACA;AACA;AACO,iCAAiC,8BAAK;AAC7C;;ACjBA;AACA;AACA;AACA;AACA;AACA;AAC2B;AACF;AACG;AACC;AACH;AACC;AACA;AACM;AACT;AACA;AACQ;AAChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChBA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AAC+C;AACI;;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTpB;AACA;AACA;AACA;AACwC;AACxC;AACA;AACA;AACA;AACO;AACP,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,4BAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,sCAAmB;AACvB,QAAQ,sCAAmB;AAC3B,YAAY,sCAAmB;AAC/B,YAAY,sCAAmB,QAAQ,gCAAgC;AACvE;AACA,wBAAwB,sCAAmB,UAAU,+CAA+C;AACpG,oBAAoB,sCAAmB;AACvC,wBAAwB,sCAAmB;AAC3C;AACA;AACA,wBAAwB,sCAAmB,UAAU,gCAAgC;AACrF,4BAA4B,sCAAmB,YAAY;AAC3D;AACA,mCAAmC;AACnC,aAAa;AACb;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACgE;AACC;AAC2J;AAC7J;AAC6C;AACtC;AACnB;AACG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA,eAAe,kDAA0B;AACzC;AACA;AACA,+CAA+C,gDAAwB;AACvE,+CAA+C,+CAAuB;AACtE;AACA;AACA;AACA;AACA;AACA,eAAe,kDAA0B;AACzC,eAAe,qCAAW;AAC1B;AACA;AACA,qDAAqD,uDAA+B;AACpF,oFAAoF,wCAAc;AAClG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAc,+CAAuB;AACrC,eAAe,qCAAW;AAC1B;AACA;AACA,qCAAqC,wCAAc;AACnD;AACA;AACA,4CAA4C,uCAAe;AAC3D;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,0BAA0B,6BAAe;AACzC;AACA,qCAAqC,KAAK;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kFAAkF,kCAAoB;AACtG;AACA,0BAA0B,2BAAa;AACvC;AACA;AACA;AACA,iBAAiB;AACjB,8EAA8E,kCAAoB;AAClG;AACA,0BAA0B,4BAAc;AACxC;AACA;AACA;AACA,iBAAiB;AACjB,gFAAgF,kCAAoB;AACpG;AACA,0BAA0B,uBAAS;AACnC;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA,QAAQ,kDAA0B;AAClC,QAAQ,+CAAuB;AAC/B,QAAQ,8CAAgB;AACxB;AACA,eAAe,qCAAW;AAC1B;AACA;AACA;AACA,qCAAqC,wCAAc;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yIAAyI;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yGAAyG;AACzG;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wJAAwJ;AACxJ;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,gCAAsB;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAgB;AAC/B,eAAe,mCAAqB;AACpC,cAAc,kDAA0B;AACxC;AACA;AACA;AACA,4BAA4B,iDAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sIAAsI;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,2BAA2B,wBAAwB;AACnD;AACA;AACA,0CAA0C,0BAA0B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAAe,OAAO,EAAC;AACvB;;;;;;;;;;;;ACxYA;AACA;AACA;AACA;;AAEA;AACkD;AACH;AACC;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACT9C;AACA;AAC0C;AAC1C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AACvD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kEAAkE;AACnE;AACA;AACA;AACO,oCAAoC,oBAAK;AAChD;AACA;AACA;AACO,uCAAuC,oBAAK;AACnD;;ACrCA;AACA;AACyH;AAC5E;AACY;AACd;AACmC;AAC9E;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,iCAAuB;AAChE,yCAAyC,gCAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,2BAA2B;AAC3F;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,qBAAqB;AAC/E;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iCAAuB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA,kCAAkC,iCAAuB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wCAA8B;AAC7D;AACA;AACA,+BAA+B,wCAA8B;AAC7D;AACA;AACA,kCAAkC,wCAA8B;AAChE;AACA;AACA;AACA;AACA,+BAA+B,iCAAuB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,qBAAqB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,2BAA2B;AACpG;AACA;AACA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,gCAAsB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,gCAAsB;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,uBAAuB,kBAAI;AAC3B,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAI;AACvB,iBAAiB,kBAAI;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,oFAAoF;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAO;AACvC,KAAK,4DAA4D;AACjE,CAAC,8CAA8C;AAC/C;;;;AC3dA;AACA;AAC8C;AACF;AACD;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yBAAM;AACvC,iCAAiC,yBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+CAA+C;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,yCAAyC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sBAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,aAAa;AAC3B;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAS;AACnC;AACA;AACA;AACA,6BAA6B,sCAAS;AACtC;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,wCAAwC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,IAAI;AACT;AACA;AACA;AACA;AACA,wBAAwB,MAAM;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;AC/jBA;AACA;AACiD;AACG;AACC;AACP;AACH;AACF;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,wBAAwB,iCAAM;AACrC;AACA;AACA;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA,6BAA6B,yBAAM;AACnC,sCAAsC,yBAAM;AAC5C,iCAAiC,yBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,gCAAS;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,cAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,aAAa;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,WAAW;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,cAAO;AACrC;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,uBAAuB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,WAAW;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA,iDAAiD,aAAa;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,WAAW;AACpE,QAAQ,sCAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,cAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,cAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA,uBAAuB,cAAO;AAC9B,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oCAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0G,gCAAS;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uCAAU,GAAG,yBAAyB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,sBAAsB;AACpE;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA,IAAI,cAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA,4BAA4B,SAAS;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,cAAO,KAAK,cAAO,KAAK;AAC3B;;ACt8BA;AACA;AAC8C;AACS;AACZ;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA,sCAAsC,wCAAwC;AAC9E;AACA;AACA;AACA;AACA;AACA,iDAAiD,yBAAM;AACvD;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iBAAiB;AAC3C;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,4BAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,yBAAyB;AACzB,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,8BAA8B;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnQA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uBAAO;AAC3B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,IAAI,uBAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,uBAAO,KAAK,uBAAO,KAAK;AAC3B;;ACzEA;AACA;AAC6C;AACtC;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,6BAA6B,OAAO;AACpC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA,yBAAyB,kBAAI;AAC7B;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnHA;AACA;AACsE;AACV;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,aAAO;AAChC,8BAA8B,aAAO;AACrC,yBAAyB,gCAAW,kBAAkB,aAAO;AAC7D,yBAAyB,gCAAW;AACpC,gBAAgB,8BAAU;AAC1B;AACA;AACA;AACA;AACA;AACA,4BAA4B,aAAO;AACnC;AACA;AACA;AACA,4CAA4C,SAAS;AACrD,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA,yBAAyB,aAAO;AAChC,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8BAAU;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,sBAAsB;AAChF;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,0BAA0B,KAAK,sBAAsB;AAC/G;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,kCAAkC;AACvC,sBAAsB,gCAAW;AACjC;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL,yBAAyB,gCAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8BAAU;AAChC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,gCAAgC,8BAAU;AAC1C;AACA;AACA;AACA,SAAS;AACT,2BAA2B,8BAAU;AACrC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+BAAU;AAClC;AACA,mBAAmB,8BAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,6BAA6B;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,qFAAqF;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,8BAAU;AAC7C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,sBAAsB,8BAAU;AAChC,KAAK;AACL,CAAC,EAAE,aAAO,KAAK,aAAO,KAAK;AAC3B;;AC/ZA;AACA;AAC0E;AAC/B;AACW;AACX;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,8BAA8B,iCAAM;AAC3C;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA,mCAAmC,iCAAM;AACzC;AACA;AACA,uCAAuC,iCAAM;AAC7C,4BAA4B,mCAAO;AACnC;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA,SAAS;AACT;AACA,0CAA0C,sCAAW;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gBAAgB;AACxB,QAAQ,gBAAgB;AACxB,QAAQ,gBAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,sCAAU;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oCAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,yBAAM;AAChD,yCAAyC,yBAAM;AAC/C,yCAAyC,yBAAM;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,iBAAiB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,gBAAgB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yBAAM;AAClB;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;;ACnlBA;AACA;AAC2C;AACF;AACe;AACQ;AACF;AAChB;AACL;AACE;AACN;AACrC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,kBAAkB,EAAE,mBAAmB;AAChF,wCAAwC,eAAe;AACvD;AACA;AACA;AACA;AACA,2CAA2C,yBAAM;AACjD,6BAA6B,yBAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA,gEAAgE,YAAY;AAC5E;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gEAAgE,YAAY;AAC5E;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,sCAAsC,kBAAkB;AACxD,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4BAA4B;AAC5C;AACA;AACA;AACA;AACA,qIAAqI,SAAS;AAC9I;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG,YAAY;AAC5G;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,SAAS;AACvC;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C,aAAa;AACb;AACA;AACA,QAAQ,iCAAM;AACd;AACA,YAAY,iCAAM;AAClB;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;;;ACpVA;AACA;AACoD;AACC;AACA;AAC9C,gCAAgC,mCAAO;AAC9C;AACA,YAAY,4BAAY;AACxB,CAAC;AACM,gCAAgC,mCAAO;AAC9C;AACA,YAAY,4BAAY;AACxB,CAAC;AACD;;;;ACbyD;AACD;AACxD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,iDAAiD,wCAAc;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,wBAAwB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;ACvHA;AACA;AACA;AACA;AACA;AACA;AAC0B;AACF;AACC;AACA;AACC;AACM;AACR;AACC;AACiB;AACD;AACO;AAChD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChBA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACE;AACA;;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZpB;AACA;AACuD;AACe;AACP;AACT;AACA;AACtD;AACA;AACA;AACO;AACP;AACA;AACA,eAAe,qCAAe,EAAE,8CAAgB,EAAE,qCAAW;AAC7D,eAAe,6BAAe;AAC9B;AACA;AACA;AACA,kDAAe,OAAO,EAAC;AACvB;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA,4BAA4B,oCAAc;AAC1C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,qBAAqB,WAAW;AAChC;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,8CAAgB;AACzD;AACA;AACA,KAAK;AACL,CAAC,0BAA0B;AAC3B;;ACnGA;AACA;AACoE;AACpE;AACA;AACA;AACO;AACP;AACA;AACA;AACA,cAAc,0CAAoB;AAClC;AACA,+BAA+B,OAAO,iCAAE;AACxC;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACsE;AACkM;AAC/L;AACN;AACuB;AAC5B;AACb;AACA;AACY;AACE;AACO;AACiJ;AAC9K;AACS;AACC;AACZ;AACP;AACc;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,qCAAe;AAC7B;AACA,QAAQ,kCAAY;AACpB,QAAQ,wCAAe;AACvB,QAAQ,0CAAoB;AAC5B,QAAQ,4CAAmB;AAC3B,QAAQ,8CAAgB;AACxB;AACA;AACA,QAAQ,yBAAe;AACvB,QAAQ,6CAAmB;AAC3B,QAAQ,gCAAS;AACjB,QAAQ,6BAAe;AACvB,QAAQ,gCAAS;AACjB,QAAQ,oBAAU;AAClB,QAAQ,oCAAsB;AAC9B,QAAQ,iDAAqB;AAC7B,QAAQ,qCAAW;AACnB,QAAQ,oCAAsB;AAC9B,QAAQ,oCAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kCAAY;AAC1B,eAAe,wCAAe;AAC9B;AACA;AACA;AACA,mBAAmB,kCAAY,kBAAkB,eAAe;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAe,EAAE,gCAAkB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAe,EAAE,uCAAc;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAe;AAC9B,eAAe,kDAA0B,EAAE,qCAAW,EAAE,wBAAU;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,WAAO;AACX;AACA;AACA;AACA,IAAI,YAAY;AAChB;AACA,0CAAe,OAAO,EAAC;AACvB;AACA;AACA;AACA;AACA;AACA,sFAAsF,wCAAc;AACpG;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA,0GAA0G,mCAAqB,GAAG,YAAY;AAC9I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sCAAoB;AAC7C;AACA,uEAAuE,qBAAO;AAC9E;AACA;AACA;AACA;AACA,8BAA8B,qBAAO;AACrC;AACA,SAAS;AACT,+BAA+B,+BAAI,GAAG,UAAU;AAChD;AACA;AACA,iCAAiC,8BAA8B,SAAS,GAAG;AAC3E,SAAS;AACT;AACA,+BAA+B,yCAAa;AAC5C;AACA,sBAAsB,oCAAQ;AAC9B;AACA;AACA;AACA,qDAAqD,8BAA8B;AACnF;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA,wBAAwB,2BAAa;AACrC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wBAAwB,+BAA+B;AACvD;AACA;AACA;AACA,wCAAwC;AACxC;AACA,aAAa;AACb,8BAA8B,QAAQ,kFAAkF,mBAAI,WAAW;AACvI;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gCAAa;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sCAAsC,QAAQ;AAC9E;AACA;AACA;AACA;AACA,oCAAoC,sBAAO,6BAA6B;AACxE;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,kCAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,4BAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA,kFAAkF;AAClF;AACA;AACA,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,sBAAI;AACtC;AACA,qBAAqB;AACrB;AACA;AACA;AACA,iFAAiF,KAAK;AACtF,iBAAiB;AACjB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,uDAAuD,uCAAW;AAClE;AACA;AACA;AACA;AACA;AACA,mCAAmC,mBAAmB;AACtD;AACA,KAAK;AACL;AACA;AACA;AACA,4BAA4B,6BAAe;AAC3C,4DAA4D,6BAAe;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uCAAW;AACxB,gBAAgB,0CAAc;AAC9B,eAAe,yCAAa;AAC5B,cAAc,wCAAY;AAC1B;AACA;AACA,6CAA6C,SAAS;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,8BAA8B;AAC1E,aAAa;AACb;AACA,yCAAyC,SAAS;AAClD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,wBAAwB;AACxB,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,cAAc,oCAAQ,aAAa,wBAAwB;AAC3D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,cAAc,oCAAQ,aAAa,wBAAwB;AAC3D;AACA,KAAK;AACL;AACA;AACA,sCAAsC,qCAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,sCAAsC,mCAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,sCAAsC,mCAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,sCAAsC,uCAAW;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,4BAAU;AAC7B;AACA;AACA;AACA,oBAAoB,oBAAM;AAC1B;AACA,qBAAqB;AACrB,oBAAoB,oBAAM;AAC1B;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA,wDAAwD,iBAAiB;AACzE;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,yCAAyC,0BAA0B;AACnE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,2BAA2B,mBAAmB;AAC5E,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,SAAS,GAAG,KAAK,IAAI,eAAe;AACnF;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,wCAAc;AAC7F,4FAA4F,uBAAS;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACh5BA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACE;AACA;AACC;AACF;AACE;AACJ;AACC;AACA;;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;AClBpB;AACA;AACA;AACA;AAC6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,sCAAsC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,WAAW,EAAE,WAAW;AAC9E,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW,kBAAQ;AACnB;AACA;;;;AC9DA;AACA;AAC2C;AAC3C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7HA;AACA;AAC2C;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kCAAkC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,4BAA4B;AACvE,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;AClQA;AACA;AACqD;AACL;AACyE;AAChE;AACA;AACZ;AACL;AACG;AAC8B;AAChC;AACE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,0BAA0B,yBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,oBAAM;AACnC;AACA;AACA;AACA;AACA,sCAAsC,oBAAM;AAC5C;AACA;AACA;AACA,sFAAsF,wCAAc;AACpG,kGAAkG,OAAO,WAAE;AAC3G;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,0CAA0C,8BAAW;AACrD,0BAA0B,wCAAc;AACxC,4BAA4B,wBAAK;AACjC,0BAA0B,wBAAK;AAC/B,+BAA+B,6BAAU,GAAG,YAAY;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4BAA4B,cAAc;AAC1C;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,2CAAoB;AAC7C;AACA;AACA,aAAa;AACb,SAAS;AACT,2CAA2C,iBAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gGAAgG;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAa;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAa;AACrC;AACA;AACA;AACA;AACA;AACA,2BAA2B,uBAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uBAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uBAAa;AACvC,yBAAyB,gCAAI;AAC7B,0BAA0B,uBAAQ;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAM;AACtB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,cAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,MAAM;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD;AACA;AACA;AACA;AACA,QAAQ,6BAAU;AAClB,QAAQ,6BAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kBAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,kDAAkD,uBAAa;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA,uBAAuB,uBAAa;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAY;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD,CAAC,kCAAkC;AACnC;AACA;AACA;AACA,IAAI,cAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,cAAO,KAAK,cAAO,KAAK;AAC3B;;ACx5BA;AACA;AAC6F;AACvC;AACM;AACH;AACD;AACR;AACR;AACD;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,2BAA2B,4BAAc;AAChD;AACA;AACA;AACA;AACA,gBAAgB,aAAa,wBAAK,IAAI;AACtC;AACA;AACA;AACA,cAAc,iHAAiH;AAC/H,sFAAsF,wCAAc;AACpG;AACA;AACA,sBAAsB,aAAO;AAC7B;AACA,mBAAmB,+BAAO,iCAAiC,MAAM,GAAG,mBAAI,SAAS;AACjF;AACA;AACA,wFAAwF,4BAAc;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,6BAA6B,2CAAkB;AAC/C;AACA;AACA,SAAS;AACT,wCAAwC,UAAU;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,0FAA0F,mCAAqB,GAAG,YAAY;AAC9H;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,0BAA0B,uCAAW;AACrC;AACA,6BAA6B,MAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,aAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,WAAW;AAC5C;AACA;AACA;AACA;AACA,uBAAuB,WAAW;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oBAAK;AAC5C,CAAC,oCAAoC;AACrC;AACA;AACA;AACA,IAAI,aAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAc;AACjD;AACA;AACA;AACA;AACA;AACA,4CAA4C,+BAAO;AACnD;AACA;AACA,uDAAuD,4BAAI;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,aAAO,KAAK,aAAO,KAAK;AAC3B;;AClLA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,4BAA4B,oBAAK;AACxC;AACA;AACA;AACA;AACA;AACO,iCAAiC,oBAAK;AAC7C;;ACbA;AACA;AACA;AACA;AACA;AACA;AAC+B;AACL;AACA;AACF;AACC;AACA;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACE;AACN;AACM;AACL;;AAEtB;;;;;;;;;ACdP;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,uBAAuB;AACvB,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,uBAAuB;AACvB;;;;;;;;ACvEa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,aAAa,mBAAO,CAAC,KAAmB;AACxC,aAAa,mBAAO,CAAC,KAAc;AACnC,aAAa,mBAAO,CAAC,KAAO;AAC5B,aAAa,mBAAO,CAAC,KAAsB;AAC3C,aAAa,mBAAO,CAAC,KAAc;AACnC,aAAa,mBAAO,CAAC,KAAQ;AAC7B,aAAa,mBAAO,CAAC,KAAU;AAC/B,aAAa,mBAAO,CAAC,KAAQ;AAC7B,aAAa,mBAAO,CAAC,KAAQ;AAC7B,aAAa,mBAAO,CAAC,KAAO;AAC5B;;;;;;;;AChCa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D;;;;;;;;ACJa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,gBAAgB;AAChB;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;;;;;;;;AC9Ca;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0BAA0B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,yBAAyB,0BAA0B,0BAA0B;AAC9E;;;;;;;;;ACjGa;AACb;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB;AAClB,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,mCAAmC,mBAAO,CAAC,KAAU;AACrD,cAAc,mBAAO,CAAC,KAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,OAAO,oBAAoB,OAAO;AAC/D;AACA,oDAAoD,OAAO;AAC3D,6BAA6B,mBAAO,CAAC,KAAM;AAC3C;AACA;AACA;AACA;AACA,kDAAkD,OAAO;AACzD,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wBAAwB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,IAAI;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,gEAAgE;AACrE,CAAC,iBAAiB,kBAAkB,kBAAkB;AACtD;;;;;;;;AC/Ra;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,eAAe;AACf,eAAe,mBAAO,CAAC,KAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,IAAI,iDAAiD,MAAM;AAC3G;AACA,gCAAgC,OAAO,sBAAsB,KAAK;AAClE;AACA,YAAY,KAAK,0BAA0B,OAAO,sGAAsG,OAAO;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO,KAAK,IAAI;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,cAAc,eAAe,eAAe;AAC7C;;;;;;;;ACvJa;AACb;AACA;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,uBAAuB;AACvB,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,SAAS;AACvE,SAAS;AACT;AACA;AACA;AACA;;;;;;;;AClCa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAkC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAkC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,WAAW,YAAY,YAAY;AACpC;;;;;;;;AChHa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,YAAY;AACZ;AACA;AACA;AACA;AACA,MAAM,wDAAwD;AAC9D,MAAM,wDAAwD;AAC9D,MAAM,iDAAiD;AACvD,MAAM,6CAA6C;AACnD,MAAM,0CAA0C;AAChD,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC,WAAW,YAAY,YAAY;AACpC;;;;;;;;AC9Da;AACb;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,cAAc;AACd,eAAe,mBAAO,CAAC,KAAM;AAC7B,oCAAoC,mBAAO,CAAC,KAAW;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+BAA+B,EAAE,sBAAsB,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO;AACvH;AACA,0CAA0C,6CAA6C,EAAE,WAAW;AACpG,kBAAkB,OAAO,EAAE,yBAAyB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA,CAAC,aAAa,cAAc,cAAc;AAC1C;;;;;;;;;;;;;;;;;;;;;;;;;;AC1IA;AACA;AACA;AACA;AACA;AACA;AAC0D;AACqE;AACzC;AACrB;AACI;AACpB;AACc;AACT;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gEAAW;AAC1B;AACA,QAAQ,oEAAe;AACvB,QAAQ,+DAAa;AACrB,QAAQ,2DAAS;AACjB,QAAQ,+EAAuB;AAC/B,QAAQ,yEAAgB;AACxB,QAAQ,wEAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gEAAW;AAC1B;AACA,QAAQ,oEAAe;AACvB,QAAQ,+DAAa;AACrB,QAAQ,2DAAS;AACjB,QAAQ,+EAAuB;AAC/B,QAAQ,yEAAgB;AACxB,QAAQ,wEAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA,2EAA2E,oFAAY;AACvF;AACA;AACA,SAAS;AACT;AACA,6BAA6B,0EAAoB;AACjD;AACA;AACA;AACA,wBAAwB,wFAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB,+DAAa;AACrC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iDAAiD;AAChF;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB,QAAQ,gJAA0B;AAC1E;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6DAAW;AAC5C;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA,2EAA2E,oFAAY;AACvF;AACA;AACA,SAAS;AACT;AACA,6BAA6B,0EAAoB;AACjD;AACA;AACA;AACA,wBAAwB,wFAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB,+DAAa;AACrC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iDAAiD;AAChF;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB,QAAQ,gJAA0B;AAC1E;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6DAAW;AAC5C;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iEAAe,OAAO,EAAC;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;AC3VA;AACA;AACkD;AACO;AACG;AAC5D;AACA;AACA;AACO,gCAAgC,sEAAc;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,mEAAc,8BAA8B,4DAAS;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChHA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACF;;AAE5B;;;;;;;ACVpB;AACA;AACA;AACA;;AAEA;AACwC;AACK;AACG;AACA;AACF;AACK;AACN;;;;;;;;;;;;;;;;;;;;;;;;;;ACZ7C;AACA;AACA;AACA;AACA;AACA;AACwB;AACA;AACE;AACD;AACzB;;;;;;;;;;;;;;;;;ACVA;AACA;AACoD;AACP;AACQ;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAQ;AACpB,cAAc,6DAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACO,uBAAuB,uDAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAAe;AACzC,cAAc,0HAA0H;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,0BAA0B,8DAAe;AACzC;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA;AACA;;;;;;;;;;;;AClkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sBAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,YAAY,iHAAiH;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,sBAAsB;AACtB;AACA,YAAY,uEAAuE;AACnF,YAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,GAAG,UAAU,MAAM,WAAW,IAAI,iEAAiE,uBAAuB;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,GAAG,UAAU,MAAM,WAAW,IAAI;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,GAAG,UAAU,MAAM,WAAW,IAAI;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,GAAG,UAAU,MAAM,WAAW,IAAI,iEAAiE,uBAAuB;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,GAAG,UAAU,MAAM,WAAW,IAAI;AACpF;AACA;AACA;AACA,8CAA8C,GAAG,UAAU,MAAM,WAAW,IAAI;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,GAAG,UAAU,MAAM,WAAW,IAAI,iEAAiE,uBAAuB;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,GAAG,UAAU,MAAM,WAAW,IAAI;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,GAAG,UAAU,MAAM,WAAW,IAAI;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,aAAa;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,aAAa;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,YAAY,oGAAoG;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;;;;;;;;;;;;;;;;AC3XA;AACA;AACyD;AACL;AACX;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,2BAA2B,mDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,mEAAc;AACjD;AACA;AACA;AACA;AACA,eAAe,KAAK;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAO;AAC5B;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3GA;AACA;AACwD;AACmB;AACvB;AACT;AACW;AACb;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,4BAA4B,qDAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE,yCAAyC,wCAAwC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,wBAAwB,mDAAM;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,8DAAe;AAC5C;AACA;AACA,0BAA0B,wDAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,+CAA+C;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kEAAe;AAC3C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,8DAA8D,WAAW;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO,gCAAgC,mEAAc;AACrD;AACA,cAAc,gDAAgD;AAC9D;AACA;AACA,gBAAgB,oCAAoC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO,+BAA+B,qEAAgB;AACtD;AACA;AACA;AACA;AACA;AACA,uCAAuC,qBAAqB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2DAAY;AACxC;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,8DAAe;AAC5C,qCAAqC,2GAA0B;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAe;AAC7C,sCAAsC,gJAAiB;AACvD;AACA;AACA;AACA;AACA;AACA,+BAA+B,SAAS;AACxC;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChbA;AACA;AACA;AACA;AACA;AACA;AACqE;AAC2H;AACnJ;AACY;AACW;AACR;AAC6F;AAChG;AACW;AACX;AAC+B;AACwC;AACjE;AACO;AACtE;AACA,kBAAkB,0DAAQ;AAC1B;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2DAAS,EAAE,gEAAe;AACzC,eAAe,8DAAS;AACxB;AACA,4BAA4B,0DAAQ;AACpC;AACA;AACA;AACA,SAAS;AACT;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,6DAAY;AAClD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2DAAS,EAAE,kEAAc;AACxC,eAAe,8DAAS;AACxB;AACA,4BAA4B,0DAAQ;AACpC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mEAAc;AACpD,4BAA4B,UAAU;AACtC,2CAA2C,8DAAU;AACrD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2DAAS,EAAE,mEAAgB;AAC1C,eAAe,8DAAS,EAAE,iEAAe,EAAE,wEAAsB,EAAE,iEAAW;AAC9E,cAAc,kEAAgB;AAC9B;AACA,0FAA0F,oEAAc;AACxG,8GAA8G,uEAAqB,GAAG,YAAY;AAClJ,4BAA4B,0DAAQ;AACpC;AACA;AACA;AACA,SAAS;AACT;AACA,gCAAgC,0DAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,kEAAe;AACrC;AACA,SAAS;AACT;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,gEAAa;AACnD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,yBAAyB,0DAAQ;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2DAAS;AACvB,eAAe,iEAAe;AAC9B,eAAe,kEAAgB,EAAE,iEAAW;AAC5C,gEAAgE,0DAAQ;AACxE;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,iEAAe;AAC7B;AACA,wBAAwB,0DAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kEAAgB;AAC9B,eAAe,iEAAe,EAAE,mEAAe;AAC/C,eAAe,mEAAgB,EAAE,gEAAe,EAAE,kEAAc;AAChE;AACA,mBAAmB,0DAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2DAAS,EAAE,kEAAgB,EAAE,iEAAW;AACvD,eAAe,+DAAa,EAAE,wEAAmB;AACjD;AACA;AACA,gBAAgB,kBAAkB;AAClC,4BAA4B,+DAAa;AACzC;AACA,SAAS;AACT,gCAAgC,+DAAa;AAC7C;AACA,SAAS;AACT,2BAA2B,0DAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,sBAAsB,0BAA0B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,KAAK;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gEAAc;AACjD,iCAAiC,0DAAQ;AACzC;AACA;AACA,mCAAmC,iBAAiB;AACpD;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA,oCAAoC,0DAAQ;AAC5C,wCAAwC,+HAA+H,IAAI,KAAK;AAChL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA,+BAA+B,QAAQ,sFAAsF;AAC7H;AACA,wEAAwE,gEAAa;AACrF;AACA;AACA,sBAAsB,gBAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,gEAAa;AAC5E;AACA;AACA;AACA;AACA;AACA,wDAAwD,KAAK,GAAG,gJAAgJ;AAChN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,0DAAQ;AAC3C;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,oCAAoC,0DAAQ;AAC5C,wCAAwC,MAAM,IAAI,8HAA8H;AAChL,0CAA0C,MAAM,IAAI,8HAA8H;AAClL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,6DAA6D,gEAAa;AAC1E;AACA;AACA;AACA,oBAAoB,2DAAS;AAC7B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,+BAA+B,QAAQ,sFAAsF;AAC7H,6DAA6D,gEAAa;AAC1E;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kEAAgB;AAC9B,eAAe,2DAAS,EAAE,mEAAe,EAAE,iEAAW;AACtD,eAAe,+DAAa,EAAE,0EAAgB;AAC9C;AACA;AACA,gBAAgB,WAAW;AAC3B,2BAA2B,0DAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0DAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2DAAS,EAAE,mEAAe,EAAE,kEAAgB,EAAE,iEAAW;AACxE,cAAc,uEAAqB;AACnC;AACA;AACA,0CAA0C,0DAAQ;AAClD;AACA,SAAS;AACT,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,4BAA4B,0DAAQ;AACpC;AACA,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,0BAA0B;AAC9C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,sCAAsC,0DAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,uBAAuB,0DAAO;AAC9B;AACA;AACA,aAAa;AACb;AACA;AACA,gBAAgB,0DAAQ;AACxB;AACA;AACA;AACA,gCAAgC,0DAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gEAAU;AACnD;AACA;AACA;AACA,4BAA4B,wDAAM,gBAAgB,2BAA2B;AAC7E,4BAA4B,wDAAM,YAAY,mCAAmC;AACjF;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2DAAS,EAAE,kEAAgB,EAAE,mEAAe,EAAE,iEAAW;AACxE;AACA,QAAQ,iEAAe;AACvB,QAAQ,uEAAqB;AAC7B,QAAQ,8DAAS;AACjB,QAAQ,oEAAe;AACvB,QAAQ,mEAAe;AACvB,QAAQ,0EAAgB;AACxB;AACA;AACA;AACA;AACA;AACA,gBAAgB,kCAAkC;AAClD,gBAAgB,cAAc;AAC9B,2BAA2B,0DAAQ;AACnC;AACA,4CAA4C,6DAAU;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,gBAAgB,0LAA0L;AACxQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F,MAAM;AAChG;AACA;AACA,+BAA+B,uEAAkB,GAAG,gBAAgB,kFAAE;AACtE;AACA;AACA;AACA,kBAAkB,0DAAQ;AAC1B;AACA;AACA;AACA;AACA,qCAAqC,0DAAQ;AAC7C;AACA;AACA;AACA;AACA,wCAAwC,uDAAQ;AAChD;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,yCAAyC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,sBAAsB,0DAAQ;AAC9B,sBAAsB,0DAAQ;AAC9B,aAAa;AACb,+BAA+B,YAAY,gIAAgI;AAC3K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,0DAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,0DAAQ;AAC1B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,0DAAQ;AAC1B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,0DAAQ;AAC1B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,iCAAiC,QAAQ,qHAAqH;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,yCAAyC,6DAAW;AACpD;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,kBAAkB;AACxD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,mBAAmB;AACrD,aAAa;AACb;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,OAAO,EAAC;AACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACr2BA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACE;AACA;AACC;AACA;AACD;AACL;AACE;AACG;AACF;;AAEzB;;;;;ACnBpB;AACA;AACA;AACA;;AAEA;AAC6C;AACE;AACA;AACC;AACA;AACN;AACE;AACG;AACF;AACA;AACE;;;;;;;;;;;;;;;;;;AChB/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACiC;AACjC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA,gBAAgB,iBAAiB;AACjC,kBAAkB,OAAO,EAAE,WAAW,EAAE,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uBAAuB;AACvC;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA;AACA;AACA,uCAAuC,wBAAwB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpEA;AACA;AACA;AACA;AAC8C;AACc;AACnB;AACzC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAM,gBAAgB,4BAA4B;AAClE,gBAAgB,oBAAM,YAAY,wBAAwB;AAC1D;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC,wDAAwD;AACzD;AACA;AACA;AACA,6BAA6B,oBAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,oBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD,0BAA0B,iCAAa;AACvC;AACA,2BAA2B,4BAAQ;AACnC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7FA;AACA;AACuE;AACvE;AACA;AACA;AACO,MAAM,6BAAqB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C;AACA;AACA,0BAA0B,mCAAU;AACpC;AACA,SAAS;AACT;AACA,2BAA2B,0CAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;;;;;;;;;;;;AC7CA;AACA;AACwD;AACb;AAC8C;AACT;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,oBAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uCAAe;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,gBAAgB,oBAAa;AAC7B;AACA,SAAS;AACT,iCAAiC,0BAAW;AAC5C,wCAAwC,4CAA4C;AACpF,SAAS;AACT,gCAAgC,yBAAU;AAC1C;AACA,uBAAuB,uBAAQ;AAC/B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,0CAA0C,uBAAQ;AAClD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2BAA2B,0BAAW;AACtC,8BAA8B,8BAAU,QAAQ,6BAA6B;AAC7E,+BAA+B,yBAAU;AACzC;AACA,uBAAuB,8BAAU;AACjC,aAAa;AACb;AACA;AACA;AACA,8BAA8B,oBAAa;AAC3C;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,yCAAyC,8BAAU;AACnD;AACA;AACA;AACA;AACA,aAAa;AACb,0BAA0B,8BAAU;AACpC,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mBAAI,SAAS,8BAAM;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAa;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,iDAAiD,oBAAoB;AACrE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,SAAS;AAC1D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,0BAAW;AAChD,oCAAoC,4CAA4C;AAChF,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,gBAAgB;AACzE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,SAAS;AAClE,SAAS;AACT;AACA;AACA,CAAC,EAAE,oBAAa,KAAK,oBAAa,KAAK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,gCAAY;AAC9D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;ACnVA;AACA;AACwD;AACb;AACQ;AACnD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uCAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oBAAa;AAC/C;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;ACxEA;AACA;AAC2C;AACQ;AACnD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oBAAa;AAC/C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ,yBAAM;AACd;AACA;AACA;;AC3CA;AACA;AACwD;AACb;AACF;AACzC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uCAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oBAAa;AAC/C;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AChFA;AACA;AACyD;AACsB;AACzC;AACc;AACN;AACQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,wCAAc;AACxF;AACA,qBAAqB,uBAAa;AAClC;AACA,cAAc,iBAAO;AACrB;AACA,qBAAqB,oBAAU;AAC/B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,eAAe;AACnE;AACA;AACA,qBAAqB;AACrB;AACA;AACA,oDAAoD,cAAc;AAClE;AACA;AACA,qBAAqB;AACrB;AACA;AACA,oDAAoD,WAAW;AAC/D;AACA;AACA,qBAAqB;AACrB;AACA;AACA,2DAA2D,WAAW;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzTA;AACA;AAC2C;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA,4BAA4B,yBAAM;AAClC,6BAA6B,yBAAM;AACnC,4BAA4B,yBAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AAC2C;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA,kCAAkC,yBAAM;AACxC,wCAAwC,yBAAM;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,aAAO;AAC5D,8CAA8C,aAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+GAA+G,GAAG,uDAAuD;AAC3L;AACA;AACA,CAAC,EAAE,aAAO,KAAK,aAAO,KAAK;AAC3B;;AC3EA;AACA;AAC2C;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,yBAAM;AAC9C,yCAAyC,yBAAM;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnDA;AACA;AAC2C;AACC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,4BAA4B,yBAAM;AAClC,kCAAkC,yBAAM;AACxC,uCAAuC,yBAAM;AAC7C;AACA,qCAAqC,oCAAS;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvHA;AACA;AAC2C;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA,qCAAqC,yBAAM;AAC3C,4BAA4B,yBAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AAC2C;AACmB;AACJ;AACJ;AACY;AACR;AAC1D;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,6BAA6B,yBAAM;AACnC;AACA;AACA;AACA;AACA;AACA,iCAAiC,yBAAM;AACvC,+BAA+B,gBAAgB;AAC/C,6BAA6B,cAAc;AAC3C,6BAA6B,cAAc;AAC3C,2BAA2B,YAAY;AACvC;AACA,SAAS;AACT,iCAAiC,kBAAkB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxHA;AACA;AACwC;AACxC;AACA;AACA;AACO,gCAAgC,mBAAK;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO,yBAAyB,gJAAqB;AACrE,gBAAgB,4CAA4C;AAC5D,gCAAgC,2CAA2C;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACzFA;AACA;AACA;AACA;AACsD;AACH;AACM;AACL;AACZ;AACH;AACrC;AACA;AACA;AACA;AACA;AACO,mCAAmC,4BAAc;AACxD;AACA;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD,4BAA4B,mBAAK;AACjC,2BAA2B,wCAAe;AAC1C;AACA;AACA;AACA,SAAS;AACT;AACA,kFAAkF,wCAAc;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,kCAAS,GAAG,wBAAwB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACyD;AACd;AACL;AACtC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yBAAM;AACvC;AACA,mCAAmC,yBAAM;AACzC,4CAA4C,yBAAM;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,QAAQ;AAClC;AACA,6CAA6C,wCAAc;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE;AACpE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,MAAM;AAC7B,oBAAoB,MAAM,QAAQ,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,8DAA8D;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,MAAM;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA,0BAA0B,cAAc;AACxC;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4BAA4B;AAC5B;AACA,4BAA4B;AAC5B,SAAS;AACT;AACA;AACA;AACA,qBAAqB;AACrB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,MAAM;AAC5B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,MAAM;AACjC,wBAAwB,MAAM,QAAQ,YAAY;AAClD;AACA;AACA;AACA;AACA;;AC91BA;AACA;AACyD;AACL;AACT;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wCAAe;AACzC;AACA;AACA;AACA;AACA;AACA,6BAA6B,yBAAM;AACnC,iCAAiC,yBAAM;AACvC;AACA;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wCAAe;AACzC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,6DAA6D,2BAA2B;AACxF;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wCAAe;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC7QA;AACA;AACwD;AACL;AACnD;AACA;AACA;AACO,8BAA8B,qBAAW;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAmB,yBAAyB,oBAAoB;AAC/E;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA,gCAAgC,OAAO;AACvC,0CAA0C,4BAAQ;AAClD,IAAI,6BAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,YAAY,sCAAmB,CAAC,mCAAc,kCAAkC,sCAAmB,4BAA4B,oDAAoD;AACnL;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA,mCAAmC,oBAAoB;AACvD,YAAY,sCAAmB,CAAC,mCAAc;AAC9C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,gBAAgB,sCAAmB,wBAAwB,uKAAuK;AAClO,KAAK;AACL;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA,+BAA+B,mBAAmB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sCAAmB,UAAU,iKAAiK;AAC1M,QAAQ,sCAAmB,WAAW,2CAA2C;AACjF,QAAQ,sCAAmB,WAAW,6DAA6D;AACnG,QAAQ,sCAAmB,WAAW,yCAAyC;AAC/E;AACA;;ACtFA;AACA;AAC+B;AAC4D;AAC3F;AACA;AACA;AACA;AACA;AACA;AACO,sCAAsC,uBAAa;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,6BAAmB,CAAC,gCAAsB,IAAI,uCAAuC;AACpG;AACA;AACA;AACA;AACA;AACO,oCAAoC,iBAAO;AAClD;AACA;AACA;AACA;AACA,gBAAgB,mCAAmC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;;AC/FA;AACA;AAC0D;AACD;AACiD;AAC/D;AACF;AACqB;AAC9D;AACA;AACA;AACO,0BAA0B,0BAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yBAAM;AACjC,gBAAgB,2BAA2B;AAC3C,kFAAkF,wCAAc;AAChG;AACA,yBAAyB,eAAe;AACxC;AACA,qDAAqD,uBAAuB;AAC5E;AACA;AACA,kBAAkB,wBAAc;AAChC;AACA,SAAS;AACT,6CAA6C,uBAAa;AAC1D,kBAAkB,sBAAY;AAC9B;AACA;AACA;AACA;AACA,qCAAqC,4BAAU;AAC/C;AACA;AACA;AACA,wBAAwB,oBAAM,YAAY,uCAAuC;AACjF,wBAAwB,oBAAM;AAC9B;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACgD;AACQ;AACL;AACnD;AACA;AACA;AACO,4BAA4B,qBAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAmB,oBAAoB,oBAAoB;AAC1E;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA,2BAA2B,OAAO;AAClC,gCAAgC,4BAAQ;AACxC,oCAAoC,4BAAQ;AAC5C;AACA;AACA;AACA;AACA,IAAI,6BAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,qBAAqB,+BAAO,UAAU,+BAAO;AAC7C,yBAAyB,+BAAO;AAChC,0BAA0B,+BAAO;AACjC,kBAAkB,UAAU,GAAG,QAAQ;AACvC;AACA,YAAY,sCAAmB;AAC/B;AACA,gBAAgB,sCAAmB,SAAS;AAC5C;AACA,+CAA+C;AAC/C,YAAY,sCAAmB,WAAW,6CAA6C;AACvF,YAAY,sCAAmB,WAAW,wHAAwH;AAClK,KAAK;AACL;AACA;;AClEA;AACA;AACyD;AAC0B;AAC5C;AACvC;AACA;AACA;AACO,wBAAwB,0BAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC,kFAAkF,wCAAc;AAChG;AACA,yBAAyB,aAAa;AACtC;AACA,6CAA6C,8BAAoB;AACjE;AACA;AACA;AACA,SAAS;AACT,8CAA8C,8BAAoB;AAClE;AACA;AACA;AACA,SAAS;AACT,8CAA8C,8BAAoB;AAClE;AACA;AACA;AACA,SAAS;AACT,4CAA4C,8BAAoB;AAChE;AACA;AACA;AACA,SAAS;AACT,6CAA6C,8BAAoB;AACjE;AACA;AACA;AACA,SAAS;AACT,6CAA6C,8BAAoB;AACjE;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;ACxDA;AACA;AAC2C;AACW;AACrB;AACqB;AACtD;AACA;AACA;AACO,0BAA0B,oBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2BAA2B,yBAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA,kCAAkC,oBAAa;AAC/C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,oBAAa;AACzB,SAAS;AACT;AACA;AACA;AACA;;ACrGA;AACA;AACsD;AAC5B;AAC1B;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACO,+BAA+B,cAAc;AACpD,YAAY,sCAAmB,CAAC,mBAAS,IAAI,0DAA0D;AACvG;AACA,gBAAgB,sCAAmB,WAAW;AAC9C;AACA;AACA;AACA,aAAa,yGAAyG;AACtH,KAAK;AACL;AACA;;ACpBA;AACA;AACA;AACA;AACyD;AACoD;AACnF;AACW;AACc;AACnD;AACA;AACA;AACO,sBAAsB,0BAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD,kFAAkF,wCAAc;AAChG;AACA;AACA;AACA,yBAAyB,WAAW;AACpC;AACA;AACA;AACA,SAAS;AACT,yCAAyC,uBAAa;AACtD,kBAAkB,4BAAkB;AACpC;AACA;AACA,SAAS;AACT,2BAA2B,qBAAW,QAAQ,sCAAmB,CAAC,mBAAmB,IAAI,4BAA4B;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3CA;AACA;AACsD;AAC5B;AACyB;AACnD;AACA;AACA;AACA;AACA;AACA,YAAY,sCAAmB,CAAC,qCAAM,IAAI,+GAA+G;AACzJ;AACA;AACA;AACA;AACO;AACP,YAAY,sCAAmB,CAAC,mBAAS,IAAI,oEAAoE,WAAW,sCAAmB,cAAc,wCAAwC;AACrM;AACA;;AClBA;AACA;AAC0B;AACsE;AACxC;AACC;AACV;AACO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,gCAAgC,qBAAW;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,wCAAc;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAmB,CAAC,mCAAc;AAClD,YAAY,sCAAmB,UAAU,uCAAuC;AAChF,gBAAgB,sCAAmB,CAAC,mBAAmB,IAAI,wCAAwC;AACnG,YAAY,sCAAmB,CAAC,mBAAS,IAAI,6BAA6B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sCAAmB,UAAU;AACzD;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,6BAA6B;AAC7B;AACA,qCAAqC,kCAAgB;AACrD,6BAA6B;AAC7B,2BAA2B;AAC3B,wBAAwB,sCAAmB,CAAC,iBAAO,iBAAiB,MAAM,8BAAoB,aAAa,qBAAO,wBAAwB;AAC1I;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACyD;AACD;AAC6C;AAC1D;AAC3C;AACA;AACA;AACO,4BAA4B,0BAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA,kFAAkF,wCAAc;AAChG;AACA;AACA;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA,SAAS;AACT,gDAAgD,uBAAa;AAC7D,kBAAkB,oBAAU;AAC5B;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT,4CAA4C,uBAAa;AACzD,kBAAkB,qBAAW;AAC7B;AACA;AACA;AACA,yBAAyB,kCAAgB;AACzC,iBAAiB;AACjB,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACyD;AACsB;AACvC;AACxC;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D,8BAA8B,4BAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sCAAmB,CAAC,oBAAU,IAAI,mEAAmE,uBAAuB,sCAAmB,aAAa,oCAAoC;AAC5M;AACA;AACA;AACA;AACO,4BAA4B,qBAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD;AACA;AACA;AACA,qCAAqC,wCAAc;AACnD;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAmB,CAAC,mBAAS,IAAI,yDAAyD,SAAS,sCAAmB,2BAA2B,4EAA4E;AAC7O;AACA;AACA;;;;ACnDA;AACA;AACyD;AAC+B;AACjB;AAC1B;AAC4B;AACzC;AACU;AAC1C;AACA;AACA;AACO,gCAAgC,qBAAW;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sCAAmB,CAAC,mCAAc;AAC1D,YAAY,sCAAmB,CAAC,uCAAQ,IAAI,0BAA0B;AACtE,gBAAgB,sCAAmB,oBAAoB,0LAA0L,QAAQ,sCAAmB;AAC5Q;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qCAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA,YAAY,oEAAoE;AAChF,sCAAsC,4BAAQ;AAC9C,IAAI,6BAAS;AACb;AACA,KAAK;AACL,YAAY,sCAAmB,CAAC,mCAAc;AAC9C;AACA;AACA,uBAAuB,cAAc,GAAG,sBAAsB,GAAG,cAAc,GAAG,eAAe,GAAG,4BAA4B;AAChI,gBAAgB,sCAAmB,sBAAsB,wIAAwI;AACjM,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAwD;AACpE,uBAAuB,4BAAQ;AAC/B,sDAAsD,4BAAQ;AAC9D,oCAAoC,4BAAQ;AAC5C,sCAAsC,4BAAQ;AAC9C,kBAAkB,2BAAO,oEAAoE,wCAAc;AAC3G;AACA,uBAAuB,2BAAO;AAC9B,oBAAoB,2BAAO;AAC3B,4BAA4B,2BAAO;AACnC;AACA;AACA;AACA;AACA;AACA,gCAAgC,2BAAO;AACvC;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA,aAAa;AACb,KAAK;AACL;AACA;AACA;AACA;AACA,0BAA0B,+BAAW;AACrC;AACA;AACA;AACA,KAAK;AACL,8BAA8B,+BAAW;AACzC,qBAAqB,gCAAkB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,2BAA2B,+BAAW;AACtC;AACA;AACA;AACA,KAAK;AACL,2BAA2B,+BAAW;AACtC;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA,SAAS;AACT;AACA,uDAAuD,kEAAkE;AACzH,SAAS;AACT,KAAK;AACL,0BAA0B,+BAAW;AACrC,qBAAqB,gCAAkB;AACvC;AACA;AACA;AACA;AACA,KAAK;AACL,YAAY,sCAAmB,CAAC,uCAAQ,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,WAAW;AACX,QAAQ,sCAAmB,WAAW,wCAAwC;AAC9E,oBAAoB,sCAAmB,WAAW,0CAA0C;AAC5F,iDAAiD,sCAAmB,CAAC,qCAAM,IAAI;AAC/E;AACA;AACA,aAAa,6GAA6G;AAC1H,YAAY,sCAAmB,CAAC,oBAAU,UAAU,WAAW;AAC/D,qBAAqB,sCAAmB,oBAAoB,mJAAmJ;AAC/M;AACA;AACA,sBAAsB,sCAAmB,CAAC,uCAAQ;AAClD;AACA;;ACvNA;AACA;AACyD;AACgD;AAC9D;AACH;AACG;AAC3C;AACA;AACA;AACO,wBAAwB,0BAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC;AACzD,iDAAiD,wCAAc;AAC/D;AACA;AACA;AACA;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA,SAAS;AACT,0BAA0B,iBAAiB;AAC3C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,mDAAmD,aAAa;AAChE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,uBAAa;AAChD,kBAAkB,sBAAY;AAC9B;AACA;AACA;AACA,SAAS;AACT,oCAAoC,uBAAa;AACjD,kBAAkB,uBAAa;AAC/B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,YAAY,cAAc;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrIA;AACA;AACyD;AACM;AACtB;AAC8B;AACN;AACN;AACkB;AACZ;AACjE;AACA;AACA;AACO,8BAA8B,mBAAS;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,wCAAc;AAC/D,gBAAgB,YAAY;AAC5B;AACA,0BAA0B,iBAAO;AACjC;AACA,gBAAgB,gFAAgF;AAChG;AACA,6BAA6B,SAAc;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,6BAA6B,SAAc;AAC3C;AACA;AACA;AACA,SAAS;AACT,+BAA+B,WAAgB;AAC/C;AACA;AACA;AACA;AACA,SAAS;AACT,2BAA2B,OAAY;AACvC;AACA;AACA;AACA;AACA,SAAS;AACT,iCAAiC,aAAkB;AACnD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oBAAM;AAC/B;AACA;AACA;AACA;AACA,oBAAoB,MAAM,eAAO,iBAAiB;AAClD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA,IAAI,eAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,eAAO,KAAK,eAAO,KAAK;AAC3B;;ACzGA;AACA;AAC+E;AACpB;AAC3D;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,2BAAa,GAAG,mCAAmC;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD,2BAA2B,4BAAc;AACzC;AACA,SAAS;AACT,oBAAoB,sBAAQ;AAC5B;AACA;AACA;AACA,4BAA4B,wBAAc;AAC1C,0CAA0C,0BAA0B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxOA;AACA;AACkQ;AACxN;AACkB;AACO;AACvB;AAC+B;AACnC;AACoB;AACW;AAC3B;AACA;AACA;AACA;AAC5C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,yBAAyB,cAAc;AACvC;AACA;AACA;AACA;AACA;AACA,gCAAgC,oBAAqB;AACrD;AACA;AACA;AACA;AACA;AACA,0BAA0B,eAAe;AACzC;AACA;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA;AACA;AACA,wCAAwC,6BAAa;AACrD;AACA;AACA;AACA;AACA;AACA,0BAA0B,eAAe;AACzC;AACA;AACA;AACA;AACA;AACA,0BAA0B,eAAe;AACzC;AACA;AACA;AACA;AACA;AACA,0BAA0B,eAAe;AACzC;AACA;AACA;AACA;AACA;AACA,0BAA0B,eAAe;AACzC;AACA;AACA;AACA;AACA;AACA,gCAAgC,iBAAiB;AACjD;AACA;AACA;AACA;AACA;AACA,mCAAmC,oBAAoB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,+DAA+D;AACpE;AACA;AACA;AACA;AACA;AACA,6BAA6B,sBAAQ;AACrC,6BAA6B,kBAAQ;AACrC,6BAA6B,iBAAO;AACpC,0BAA0B,mBAAK;AAC/B,6BAA6B,sBAAQ;AACrC,4BAA4B,qBAAO;AACnC,6BAA6B,sBAAQ;AACrC,8BAA8B,kBAAQ;AACtC,6BAA6B,sBAAQ;AACrC,mCAAmC,4BAAc;AACjD,sCAAsC,mBAAK;AAC3C,KAAK,gDAAgD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sBAAsB;AAChD,KAAK,sDAAsD;AAC3D,CAAC,4BAA4B;AAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtIA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,sBAAsB,eAAK;AAClC;AACA;AACA;AACO,4BAA4B,eAAK;AACxC;AACA;AACA;AACO,6BAA6B,eAAK;AACzC;AACA;AACA;AACO,6BAA6B,eAAK;AACzC;AACA;AACA;AACO,6BAA6B,eAAK;AACzC;AACA;AACA;AACO,kCAAkC,eAAK;AAC9C;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACsC;AAC6F;AACnI;;;;;;;;;;;;;;;;;;;;;;ACRA;AACA;AAC8H;AACnF;AACH;AACiB;AACvB;AAClC;AACA;AACA;AACO,mBAAmB,kDAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD;AACA;AACA,yBAAyB,sDAAQ;AACjC;AACA,wEAAwE,gDAAQ;AAChF;AACA;AACA,SAAS;AACT;AACA,oBAAoB,MAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8BAA8B,6DAAe;AAC7C;AACA,kCAAkC,iEAAmB;AACrD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACO,wBAAwB,uDAAS;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mEAAc;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,8BAA8B,0DAAY;AAC1C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,+DAAiB;AAChD;AACA;AACA,sCAAsC,qDAAM;AAC5C,iCAAiC,qDAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxWA;AACA;AACA;AACA;AACyE;AACV;AAChB;AACuB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AACxB;AACP;AACA;AACA;AACA,eAAe,8BAAQ;AACvB,eAAe,8CAAgB,EAAE,qCAAW;AAC5C,cAAc,wCAAe;AAC7B;AACA,gBAAgB,iBAAiB;AACjC,mFAAmF,wCAAc;AACjG;AACA,mCAAmC,uCAAc;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AAC4E;AACgL;AACtM;AACqG;AAC5F;AACZ;AACmB;AACjB;AACZ;AACG;AACD;AACF;AACV;AACkB;AACjD;AACA;AACA;AACA,IAAI,cAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,cAAU,KAAK,cAAU,KAAK;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,8CAAqB;AACnC;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA,mCAAmC,yBAAM;AACzC;AACA;AACA;AACA,oDAAoD,aAAa;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yCAAgB,EAAE,8CAAqB;AACtD,eAAe,oBAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,yCAAgB;AAC9B,eAAe,8CAAqB;AACpC;AACA,QAAQ,qCAAW;AACnB,QAAQ,oBAAU;AAClB,QAAQ,oCAAsB;AAC9B,QAAQ,oBAAU;AAClB,QAAQ,wCAAe;AACvB;AACA;AACA;AACA,gBAAgB,iDAAiD;AACjE,0FAA0F,wCAAc;AACxG,8GAA8G,mCAAqB,GAAG,YAAY;AAClJ;AACA,+BAA+B,wCAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF,wCAAc;AAClG;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yCAAgB,EAAE,8CAAqB,EAAE,8CAAgB;AACxE,eAAe,qCAAW,EAAE,6BAAe,EAAE,mBAAS;AACtD;AACA,iFAAiF,wCAAc;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,cAAU;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,IAAI;AAClD;AACA;AACA;AACA,oDAAoD,oBAAoB;AACxE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,oBAAoB,gBAAgB,QAAQ;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,YAAY,MAAM,OAAO;AAC7F,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+BAA+B,sBAAO;AACtC;AACA,yBAAyB;AACzB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,yCAAgB,EAAE,mBAAS;AAC1C,eAAe,qCAAW,EAAE,kCAAU;AACtC;AACA;AACA;AACA;AACA;AACA,2BAA2B,qCAAY;AACvC;AACA,oFAAoF,wCAAc;AAClG,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,yCAAgB,EAAE,mBAAS;AAC1C,eAAe,kCAAU;AACzB;AACA;AACA;AACA;AACA;AACA,yBAAyB,mCAAU,GAAG,YAAY;AAClD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,yCAAgB;AAC/B,eAAe,qCAAW,EAAE,6BAAe;AAC3C;AACA;AACA,mFAAmF,wCAAc;AACjG,gBAAgB,kBAAkB;AAClC;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA,4BAA4B,cAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,4BAAU;AACzC;AACA;AACA,sCAAsC,oBAAM;AAC5C,yBAAyB;AACzB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8CAA8C,cAAU;AACxD,SAAS;AACT;AACA;AACA,8BAA8B,SAAS,cAAU,qBAAqB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,yCAAgB;AAC/B,eAAe,qCAAW;AAC1B;AACA,mFAAmF,wCAAc;AACjG,gBAAgB,WAAW;AAC3B,4BAA4B,cAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB;AACxB;AACA,0CAAe,OAAO,EAAC;AACvB;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAA4B,CAAC,yBAAW,QAAQ,6BAAmB,CAAC,uBAAS,IAAI,qBAAqB,SAAS,6BAAmB,CAAC,2CAA6B,IAAI,wBAAwB,cAAU,0BAA0B,iBAAiB;AAChQ;AACA;AACA,CAAC,oCAAoC;AACrC;AACA,kCAAkC,iCAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0BAAY,8EAA8E,iBAAiB;AAC1H;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAU;AAClC,+BAA+B,0CAA0C;AACzE;AACA;AACA;AACA,gCAAgC,cAAU;AAC1C,oEAAoE,QAAQ;AAC5E;AACA;AACA;AACA,KAAK;AACL,wBAAwB,cAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAgB;AAChD,SAAS;AACT,+CAA+C,aAAa;AAC5D,KAAK;AACL,wBAAwB,cAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gBAAgB;AAC7C;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,wBAAwB,cAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAAU;AACjC;AACA;AACA,8BAA8B,oBAAM;AACpC,iBAAiB;AACjB;AACA;AACA,uBAAuB,4BAAU;AACjC;AACA;AACA;AACA,wBAAwB,oBAAM;AAC9B,wBAAwB,oBAAM,cAAc,2BAA2B;AACvE;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB,cAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAAU;AACjC;AACA;AACA,8BAA8B,oBAAM;AACpC,iBAAiB;AACjB;AACA;AACA;AACA;AACA,0BAA0B,kCAAgB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAAU;AACjC;AACA;AACA;AACA,wBAAwB,oBAAM;AAC9B,wBAAwB,oBAAM;AAC9B;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAU;AAClC;AACA;AACA,sCAAsC,oCAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,4BAAU;AACrC;AACA;AACA,kCAAkC,oBAAM;AACxC,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAAU;AAC7C;AACA;AACA,0CAA0C,oBAAM;AAChD,6BAA6B;AAC7B;AACA;AACA;AACA,oCAAoC,+BAAO;AAC3C;AACA;AACA;AACA,6CAA6C,yBAAW;AACxD;AACA;AACA;AACA;AACA,6DAA6D,+BAAO;AACpE;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG,OAAO;AACxG,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB,cAAU;AAClC;AACA;AACA;AACA,mBAAmB,sBAAI,+BAA+B,gBAAgB,2MAA2M;AACjR,SAAS;AACT;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB,cAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,4BAAU;AACrC;AACA;AACA,kCAAkC,oBAAM;AACxC,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,cAAU;AACxD;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,YAAY,cAAU;AACtB,YAAY,cAAU;AACtB,YAAY,cAAU;AACtB,YAAY,cAAU;AACtB,YAAY,cAAU;AACtB;AACA;AACA,SAAS;AACT,KAAK;AACL,wBAAwB,cAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,mBAAmB,GAAG,KAAK,IAAI,eAAe;AAC7F,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA,YAAY,cAAU;AACtB,YAAY,cAAU;AACtB,YAAY,cAAU;AACtB,YAAY,cAAU;AACtB,YAAY,cAAU;AACtB,YAAY,cAAU;AACtB;AACA,8BAA8B,mBAAmB;AACjD,SAAS;AACT;AACA;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA,wBAAwB,cAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB,cAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uBAAuB,yCAAY;AACnC;AACA;AACA,KAAK;AACL,wBAAwB,cAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB,cAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,4BAAU;AAC/C;AACA;AACA;AACA,wBAAwB,oBAAM;AAC9B,wBAAwB,oBAAM,cAAc,2BAA2B;AACvE;AACA,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,KAAK;AACL,wBAAwB,cAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,oBAAoB;AACjF,+DAA+D,oBAAoB;AACnF;AACA,KAAK;AACL;AACA;AACA,YAAY,cAAU;AACtB,YAAY,cAAU;AACtB,YAAY,cAAU;AACtB,YAAY,cAAU;AACtB,YAAY,cAAU;AACtB;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4BAAI,uBAAuB,4BAAI;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4BAAI;AAChC,8BAA8B,4BAAI;AAClC,sBAAsB,MAAM,EAAE,gBAAgB,EAAE,SAAS,GAAG,UAAU;AACtE,SAAS;AACT,oCAAoC,yBAAW;AAC/C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;AChhCA;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACJ;AACD;AACG;AACA;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZ/C;AACA;AAC4E;AAC5B;AACS;AAChB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,+BAA+B,wCAAc;AAC7C;AACA;AACA;AACA,WAAW,wBAAU;AACrB;AACA;AACA;AACA;AACA,YAAY,gBAAM;AAClB,YAAY,gBAAM;AAClB;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,iBAAiB,8BAAgB;AACjC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACO;AACP,+BAA+B,wCAAc;AAC7C;AACA;AACA;AACA;AACA;AACA,YAAY,gBAAM;AAClB,YAAY,gBAAM;AAClB;AACA;AACA,aAAa;AACb;AACA;AACA,WAAW,wBAAU;AACrB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAM;AAClC;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC;AACzD;AACA,oBAAoB,qBAAO;AAC3B,8CAA8C,qBAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;ACnJA;AACA;AAC2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mCAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;ACxIA;AACA;AAC0D;AACb;AACY;AACN;AACA;AACH;AACM;AACX;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,sCAAsC,mCAAM;AAC5C;AACA;AACA,iCAAiC,mCAAM;AACvC;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mCAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qBAAO;AACf;AACA,gCAAgC,2CAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qBAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAO;AAC/B;AACA,QAAQ,wCAAW;AACnB;AACA;AACA;AACA,QAAQ,qBAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAO;AAC/B;AACA;AACA;AACA,eAAe,2BAAI;AACnB,4BAA4B,qBAAO;AACnC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAO;AAC/B;AACA;AACA;AACA,wBAAwB,qBAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,kBAAI;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,kBAAI;AACrD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qBAAO;AACrC,4BAA4B,4BAA4B;AACxD;AACA;AACA;AACA,gCAAgC,wCAAwC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qBAAO;AACrC,4BAA4B,4BAA4B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAc;AACjD;AACA;AACA,wBAAwB,qBAAO;AAC/B;AACA;AACA;AACA,sBAAsB,qBAAO;AAC7B;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAO;AACnC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,qBAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gBAAM;AACtB,gBAAgB,gBAAM;AACtB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,qCAAqC,gBAAM;AAC3C;AACA;AACA,iBAAiB;AACjB;AACA,kCAAkC,wBAAU;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,wBAAU;AAC3C;AACA;AACA;AACA,oBAAoB,gBAAM;AAC1B,oBAAoB,gBAAM;AAC1B;AACA;AACA,qBAAqB;AACrB,oBAAoB,gBAAM,YAAY,kBAAkB;AACxD;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAO;AAC/B;AACA;AACA;AACA,wBAAwB,qBAAO;AAC/B;AACA;AACA;AACA;AACA,QAAQ,2BAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAO;AACX;AACA;AACA;AACA;AACA,kCAAkC,8CAAgB;AAClD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8CAAgB;AAClD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8CAAgB;AAClD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,sCAAsC,8CAAgB;AACtD;AACA,0BAA0B,2CAAa;AACvC,KAAK;AACL,CAAC,EAAE,qBAAO,KAAK,qBAAO,KAAK;AAC3B;;AC/hBA;AACA;AAC6D;AACb;AACE;AACO;AACN;AACV;AACa;AACX;AACC;AACY;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,sCAAsC,mCAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,mCAAM;AACvC,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA,+EAA+E,+BAAqB,GAAG,gCAAgC;AACvI;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAO;AACvC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mCAAM;AACd;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,wGAAwG;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ,GAAG,mBAAI,SAAS;AACpD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2BAAI;AACnB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iCAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4BAA4B,WAAW;AACvC;AACA;AACA;AACA,SAAS;AACT,QAAQ,eAAO;AACf;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,2BAAQ;AAChB;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,MAAM;AAC/D;AACA;AACA,oCAAoC,sCAAsC;AAC1E;AACA;AACA,oEAAoE,aAAa,QAAQ,KAAK;AAC9F;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,eAAO;AACX;AACA;AACA;AACA;AACA,sCAAsC,8CAAgB;AACtD;AACA;AACA,KAAK;AACL,CAAC,EAAE,eAAO,KAAK,eAAO,KAAK;AAC3B;;;;;;;;;ACplBA;AACA;AACgD;AACC;AACmB;AAC1C;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sCAAmB,CAAC,gCAAQ,IAAI,2CAA2C;AACtF;AACA;AACA;AACA;AACO,yBAAyB,wCAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAmB,wBAAwB,kDAAkD;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qCAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,qBAAO;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;;AC3IA;AACA;AACiD;AACQ;AACW;AAC1C;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sCAAmB,CAAC,gCAAQ,IAAI,0BAA0B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,2BAA2B,wCAAY;AAC9C;AACA;AACA;AACA;AACA;AACA,8CAA8C,wCAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sCAAmB,0BAA0B,gDAAgD;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qCAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;AACrC;;AChIA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,6BAA6B,oBAAK;AACzC;AACA;AACA;AACA;AACA;AACO,kCAAkC,oBAAK;AAC9C;AACA;AACA;AACO,4BAA4B,oBAAK;AACxC;;;;ACjBA;AACA;AACA;AACA;AACmD;AACP;AACD;AAC3C;AACA;AACA;AACO;AACP;AACA,mCAAmC,mCAAM;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oCAAS;AAC3C;AACA;AACA;AACA;AACA,qEAAqE,EAAE;AACvE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mCAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,wBAAU;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,gBAAgB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,eAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,eAAO;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,eAAO;AACX;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,eAAO,KAAK,eAAO,KAAK;AAC3B;;ACvOA;AACA;AACA;AACA;AACA;AACA;AAC0B;AACA;AACG;AACC;AACC;AACN;AACO;AACN;AAC1B;;;;;;;;;;;;ACdA;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACThD;AACA;AACmH;AACnE;AACY;AACH;AACL;AACI;AACb;AACF;AACzC;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,8BAAe;AACpD,gCAAgC,yBAAM;AACtC,gCAAgC,yBAAM;AACtC,8BAA8B,yBAAM;AACpC,6BAA6B,yBAAM;AACnC;AACA;AACA;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA;AACA,+EAA+E,+BAAqB,GAAG,gCAAgC;AACvI;AACA;AACA;AACA;AACA,qDAAqD,qBAAO;AAC5D,yFAAyF,8CAA8C;AACvI;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,oBAAoB,qBAAO;AAC3B,kCAAkC,wBAAc;AAChD;AACA;AACA;AACA;AACA;AACA,kBAAkB,qBAAO;AACzB,4DAA4D,oBAAoB;AAChF;AACA,SAAS;AACT;AACA;AACA,+BAA+B,2CAAkB;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,yBAAyB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,MAAM,GAAG,aAAa;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA,mBAAmB,gCAAkB;AACrC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,QAAQ,QAAQ,QAAQ;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,UAAU,GAAG,QAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qBAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qBAAO;AAC7B;AACA;AACA,yBAAyB,UAAU,GAAG,QAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB,qBAAO;AAChC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,UAAU;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,SAAS;AAC/D;AACA,uBAAuB,MAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAc,8BAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gBAAM;AAChC;AACA;AACA,SAAS;AACT,6BAA6B,gBAAM;AACnC;AACA;AACA,SAAS;AACT;AACA,eAAe,wBAAU;AACzB;AACA;AACA,sBAAsB,gBAAM;AAC5B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,0CAA0C;AAC1C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gBAAM;AACnC;AACA;AACA,SAAS;AACT,eAAe,wBAAU;AACzB;AACA;AACA,sBAAsB,gBAAM;AAC5B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAc;AACjD;AACA,wBAAwB,gBAAM,YAAY,uCAAuC;AACjF,eAAe,wBAAU;AACzB;AACA;AACA,sBAAsB,gBAAM;AAC5B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,iCAAM;AACnC;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;ACx4BA;AACA;AACA;AACA;AACmD;AACM;AAC1B;AAC/B;AACA;AACA;AACO;AACP;AACA,6EAA6E,wCAAc;AAC3F,WAAW,qBAAW,QAAQ,6BAAmB;AACjD,QAAQ,6BAAmB,WAAW,mGAAmG,0BAA0B;AACnK;AACA;;AChBA;AACA;AACkE;AACd;AACJ;AACS;AACd;AACQ;AACnD;AACA;AACA;AACO,4BAA4B,mCAAU;AAC7C;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,gBAAgB,kCAAkC;AAClD;AACA;AACA;AACA,mCAAmC,yBAAM;AACzC,iCAAiC,yBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,sCAAsC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,kCAAkC,yBAAM;AACxC,iDAAiD,wCAAc;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,wBAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG,wBAAwB;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,6BAA6B,wBAAc;AAClD;AACA;AACA;AACA;AACA;AACA,kFAAkF,wCAAc;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAO;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,mBAAmB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,YAAY;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrhBA;AACA;AACkE;AACF;AACR;AACL;AACM;AACI;AACb;AACQ;AACK;AAC7D;AACA;AACA;AACO,0BAA0B,iCAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAO;AACxB;AACA;AACA;AACA;AACA,0BAA0B,8BAAe;AACzC;AACA;AACA;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA;AACA;AACA,0CAA0C,wCAAa;AACvD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wCAAW,4BAA4B,iCAAM;AAC7D;AACA;AACA,gCAAgC,6BAAe;AAC/C;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,iBAAiB,8BAAgB;AACjC,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK,kBAAQ;AACb,eAAe,kBAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kCAAS;AACvC;AACA;AACA,wBAAwB;AACxB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,iBAAiB,8BAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACO,2BAA2B,cAAc;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,kCAAkC,gBAAgB;AACzD;AACA;AACA;AACA;AACA,cAAc,oBAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,+CAAsB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,0CAA0C,kBAAkB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,oBAAO,KAAK,oBAAO,KAAK;AAC3B;;;;;;ACxPA;AACA;AACgD;AACS;AACiI;AACvI;AACK;AACb;AACE;AAC7C;AACA;AACA;AACO;AACP;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yBAAM;AAClC;AACA;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA,sDAAsD,gBAAgB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,KAAK;AAC9D,uBAAuB,gCAAkB,CAAC,gBAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,mBAAmB,gCAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qCAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,KAAK;AAC9D,uBAAuB,gCAAkB,CAAC,gBAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,mBAAmB,gCAAkB;AACrC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qCAAQ;AAC9B;AACA,+DAA+D,WAAW;AAC1E,uBAAuB,gCAAkB,CAAC,gBAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,mBAAmB,gCAAkB;AACrC,YAAY,qCAAQ;AACpB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,MAAM,oCAAQ,EAAE;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,mBAAmB,gCAAkB;AACrC,YAAY,qCAAQ;AACpB;AACA;AACA;AACA,oBAAoB,qCAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,qBAAO;AACpD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,qBAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,SAAS;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,QAAQ;AAC9D;AACA;AACA;AACA;AACA;AACA,mCAAmC,SAAS,wBAAwB,SAAS;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAI;AACnB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,qBAAO;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,qBAAO;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qCAAI;AAC5B;AACA;AACA;AACA;AACA;AACA,wBAAwB,qCAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qBAAO;AAC5B;AACA,iBAAiB,qCAAI;AACrB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,kBAAkB,gBAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oCAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wCAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sCAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wCAAY;AAClC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,mCAAO;AAC7B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,sCAAU;AAChC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,oCAAQ;AAC9B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oCAAQ;AAC9B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,qCAAS;AAC/B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,2CAAe;AACrC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,2CAAe;AACrC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,uCAAW;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,oCAAQ;AAC9B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,qCAAS;AAC/B;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,qCAAS;AAC/B;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,qCAAS;AAC/B;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,qCAAS;AAC/B;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,qCAAS;AAC/B;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,qCAAS;AAC/B;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,qCAAS;AAC/B;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA;AACA;AACA,IAAI,gBAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qBAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,gBAAO,KAAK,gBAAO,KAAK;AAC3B;;ACx4BA;AACA;AACA;AACA;AACA;AACA;AAC0B;AACA;AACK;AACJ;AACE;AAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;ACVpB;AACA;AACA;AACA;AACA;AACA;AACoD;AACmB;AAC+D;AACvE;AACT;AACb;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA,eAAe,8DAAS,EAAE,+EAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,+EAAuB;AACrC,eAAe,gEAAW;AAC1B,eAAe,iEAAe,EAAE,yEAAgB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,8EAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2EAAmB;AAC3D;AACA,oCAAoC,0EAAkB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,gBAAgB,mDAAM;AACtB;AACA,sCAAsC,gEAAc;AACpD;AACA;AACA,mDAAmD;AACnD,iFAAiF;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iEAAe,mCAAmC,EAAC;AACnD;;;;;;;;;;;;AC3XA;AACA;AACA;AACA;;AAEA;AACwC;AACK;AACG;AACG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTnD;AACA;AAC2C;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yBAAM;AACvC,mCAAmC,yBAAM;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACyC;AACU;AAC5C;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,oCAAoC,cAAc;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,oBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,iDAAiD,QAAQ;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnYA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;;;;;ACtCA;AACA;AACsD;AACV;AACD;AAC3C;AACA;AACA;AACO,kCAAkC,mBAAS;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,yBAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oCAAS;AAC7C;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,uBAAuB;AAC7E,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,sBAAsB;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;ACtWA;AACA;AACyD;AACoK;AAClL;AACQ;AACF;AAClB;AAC0B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4BAAQ;AACpC,6BAA6B,+BAAW;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI,6BAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,YAAY,6BAAmB,YAAY,8BAA8B;AACzE,QAAQ,6BAAmB,eAAe;AAC1C;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,2MAA2M;AAC3M;AACA;AACA;AACA,4EAA4E,4BAAc;AAC1F,kCAAkC,qBAAO;AACzC,mCAAmC,qBAAO;AAC1C,kCAAkC,qBAAO;AACzC;AACA,YAAY,6BAAmB,UAAU,yBAAyB;AAClE,QAAQ,6BAAmB,gBAAgB,wQAAwQ;AACnT,QAAQ,6BAAmB,aAAa;AACxC;AACA,aAAa,8CAA8C;AAC3D,YAAY,6BAAmB,CAAC,2BAAiB,UAAU,+CAA+C;AAC1G,QAAQ,6BAAmB,aAAa,yHAAyH;AACjK,YAAY,6BAAmB,CAAC,kBAAQ,UAAU,+CAA+C;AACjG,QAAQ,6BAAmB,aAAa,gIAAgI;AACxK,YAAY,6BAAmB,CAAC,mBAAS,UAAU,gDAAgD;AACnG;AACA;AACA;AACA,4EAA4E,4BAAc;AAC1F,0CAA0C,qBAAO;AACjD,YAAY,6BAAmB,UAAU,kCAAkC;AAC3E,QAAQ,6BAAmB,UAAU,gCAAgC;AACrE,YAAY,6BAAmB,gBAAgB,4PAA4P;AAC3S,yGAAyG,6BAAmB,aAAa,8HAA8H;AACvQ,gBAAgB,6BAAmB,CAAC,2BAAiB,UAAU,uDAAuD;AACtH,QAAQ,6BAAmB,aAAa,+FAA+F;AACvI,YAAY,6BAAmB,WAAW,cAAc,sBAAsB,EAAE,qBAAqB,gBAAgB;AACrH,QAAQ,6BAAmB,aAAa,2FAA2F;AACnI,YAAY,6BAAmB,WAAW,cAAc,sBAAsB,EAAE,qBAAqB,iBAAiB;AACtH;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,2CAAe;AACzB;AACA;AACA,UAAU,2CAAe;AACzB;AACA,yCAAyC,SAAS;AAClD,yCAAyC,SAAS;AAClD,sBAAsB,6BAAmB,aAAa,gIAAgI,iCAAiC,EAAE,aAAa,+BAA+B;AACrQ,QAAQ,6BAAmB,CAAC,8BAAoB,UAAU,WAAW,qBAAO,2DAA2D;AACvI,wBAAwB,6BAAmB,aAAa,4HAA4H,6BAA6B,EAAE,aAAa,+BAA+B;AAC/P,QAAQ,6BAAmB,CAAC,gCAAsB,UAAU,WAAW,qBAAO,2DAA2D;AACzI,YAAY,6BAAmB,UAAU,yCAAyC;AAClF;AACA;AACA;AACA;AACA,YAAY,6BAAmB,UAAU,gCAAgC;AACzE;AACA,aAAa,2DAA2D,GAAG,mBAAmB;AAC9F;AACA;AACA,uBAAuB,qBAAqB,EAAE,qBAAqB;AACnE;AACA,uBAAuB,WAAW,EAAE,4BAA4B;AAChE;AACA,oCAAoC,uBAAa,GAAG,oBAAU;AAC9D,YAAY,6BAAmB,aAAa;AAC5C;AACA,qDAAqD;AACrD,QAAQ,6BAAmB,eAAe,kEAAkE;AAC5G;AACA;AACA,YAAY,6BAAmB,YAAY;AAC3C;AACA,iBAAiB,qBAAqB,EAAE,6BAA6B,6BAA6B;AAClG,QAAQ,6BAAmB,YAAY,0HAA0H;AACjK;AACA;AACA,4BAA4B,yBAAe;AAC3C;AACA;AACA,8CAA8C,4BAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,aAAa,KAAK,OAAO;AAClG,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,6BAAmB,iBAAiB;AAC/E;AACA;AACA;AACA,aAAa,uEAAuE;AACpF;AACA;AACA,cAAc,2CAAe;AAC7B;AACA,sDAAsD,cAAc;AACpE,qCAAqC,6BAAmB,UAAU,iCAAiC;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6BAAmB,oBAAoB;AAC3D;AACA,iBAAiB,0FAA0F;AAC3G,SAAS;AACT;AACA,cAAc,uBAAa;AAC3B,cAAc,wBAAc;AAC5B;AACA,gBAAgB,6BAAmB,CAAC,wBAAc;AAClD,YAAY,6BAAmB,UAAU,8BAA8B;AACvE,yCAAyC,6BAAmB,UAAU,+BAA+B,MAAM,6BAAmB,aAAa;AAC3I;AACA,oDAAoD;AACpD,oBAAoB,6BAAmB,eAAe,cAAc,sBAAsB,EAAE,qBAAqB,0EAA0E;AAC3L,gBAAgB,6BAAmB,gBAAgB,8eAA8e;AACjiB;AACA,gBAAgB,6BAAmB,kBAAkB,wHAAwH;AAC7K,gBAAgB,6BAAmB,kBAAkB;AACrD;AACA,qBAAqB;AACrB;AACA,qBAAqB,4JAA4J;AACjL,gBAAgB,6BAAmB,aAAa,mHAAmH;AACnK,oBAAoB,6BAAmB,CAAC,mBAAS,UAAU,sFAAsF;AACjJ,YAAY,6BAAmB,UAAU,8BAA8B,iBAAiB,6BAAmB,CAAC,wBAAc;AAC1H,gBAAgB,6BAAmB,iBAAiB,mbAAmb;AACve,gBAAgB,6BAAmB,UAAU,yBAAyB;AACtE;AACA,0CAA0C,6BAAmB,UAAU,8BAA8B;AACrG;AACA;AACA;AACA;AACA;AACO,iCAAiC,sBAAY;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yBAAM;AACjC;AACA,4BAA4B,yBAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,6BAAmB,CAAC,gCAAS,IAAI,6CAA6C;AACpI;AACA;AACA,gBAAgB,6BAAmB,kBAAkB;AACrD;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa,kCAAkC;AAC/C;AACA;AACA;;;;ACrYA;AACA;AACyD;AACD;AACb;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,6BAA6B,4BAAc;AAC3C;AACA,4BAA4B,yBAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gDAAkB;AACrC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvEA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,oCAAoC,oBAAK;AAChD;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACkD;AACT;AACX;AACD;AACI;AACQ;AAChB;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;ACVpB;AACA;AACA;AACA;AACA;AACA;AAC0D;AACiB;AACD;AACX;AACO;AACZ;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yEAAgB;AAC/B,eAAe,gEAAW,EAAE,oEAAe,EAAE,iEAAe;AAC5D;AACA,gBAAgB,kCAAkC;AAClD,iFAAiF,mEAAc;AAC/F;AACA,0BAA0B,mEAAS;AACnC;AACA,0BAA0B,yEAAe,GAAG,+BAA+B;AAC3E;AACA,2BAA2B,oEAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,YAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,OAAO;AACrF,qBAAqB;AACrB;AACA;AACA;AACA,2EAA2E,OAAO;AAClF,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,8EAA8E,OAAO;AACrF,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,MAAM,EAAC;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gEAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wDAAM,gBAAgB,4BAA4B;AAClE,gBAAgB,wDAAM,cAAc,2BAA2B;AAC/D;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5JA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;;AAEzB;;;ACVpB;AACA;AACA;AACA;;AAEA;AACkD;AACL;AACG;AACK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTrD;AACA;AAC0D;AACD;AAC1B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACO;AACP,+BAA+B,wCAAc;AAC7C;AACA;AACA,iBAAiB,6BAAmB,sDAAsD,KAAK;AAC/F;AACA,qBAAqB,6BAAmB;AACxC,YAAY,6BAAmB,WAAW,mDAAmD,gCAAgC,6BAAmB;AAChJ;AACA,iBAAiB,6BAAmB,UAAU,yCAAyC;AACvF,SAAS,wBAAU;AACnB;AACA;AACA,kBAAkB,gBAAM,cAAc,uBAAuB;AAC7D,KAAK;AACL;AACA;;AC3BA;AACA;AACA;AAC0D;AACC;AACH;AACC;AACH;AACV;AACX;AACa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACO,wBAAwB,qCAAS;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD,QAAQ,wBAAU,qCAAqC;AACvD;AACA;AACA;AACA,wCAAwC,wCAAc;AACtD;AACA;AACA;AACA,oCAAoC,uBAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,WAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,WAAW;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,WAAW;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,iCAAiC,oBAAM,2BAA2B,oBAAM;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,qBAAqB,wBAAU;AAC/B;AACA;AACA,8BAA8B,gBAAM,YAAY,uBAAuB;AACvE,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wBAAU;AAC/B;AACA;AACA,8BAA8B,gBAAM,YAAY,uBAAuB;AACvE,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,WAAW;AACvD;AACA;AACA,yBAAyB,uCAAgB;AACzC,2BAA2B,oBAAM;AACjC;AACA;AACA;AACA,6BAA6B,uCAAgB,0BAA0B,oBAAM;AAC7E;AACA;AACA,sBAAsB,uCAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uCAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;ACxbA;AACA;AACmL;AACpJ;AACY;AACP;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8CAA8C;AAC1D;AACA;AACA,sDAAsD,aAAa;AACnE;AACA;AACA;AACA;AACA;AACA,YAAY,6BAAmB,SAAS,wCAAwC,sBAAsB,YAAY,mBAAmB;AACrI,QAAQ,6BAAmB,UAAU,SAAS,sBAAsB,gBAAgB,6BAAmB,UAAU,2BAA2B,WAAW,YAAY,iBAAiB,YAAY,iCAAiC,MAAM,6BAAmB,UAAU,SAAS,UAAU,WAAW,gBAAgB,WAAW,OAAO;AACpU,QAAQ,6BAAmB,UAAU,oDAAoD;AACzF,YAAY,6BAAmB,UAAU,8CAA8C;AACvF,gBAAgB,6BAAmB,UAAU,6CAA6C,wBAAwB,6BAAmB,QAAQ,+HAA+H,kBAAkB,6BAAmB;AACjT,gBAAgB,6BAAmB,UAAU,gDAAgD;AAC7F,oBAAoB,6BAAmB,UAAU,yDAAyD;AAC1G,sDAAsD,6BAAmB,CAAC,kDAAsB,IAAI,MAAM,oCAAQ,0OAA0O;AAC5V,mCAAmC,6BAAmB,CAAC,uCAAW,UAAU,8JAA8J;AAC1O,YAAY,6BAAmB,UAAU,gDAAgD;AACzF,gBAAgB,6BAAmB,UAAU,oDAAoD;AACjG,wCAAwC,6BAAmB,UAAU,gDAAgD,qBAAqB,6BAAmB,CAAC,wBAAc;AAC5K,4CAA4C,6BAAmB,CAAC,wBAAc;AAC9E,wBAAwB,SAAS,2BAA2B,6BAAmB,CAAC,kCAAM,IAAI;AAC1F;AACA,6BAA6B,yGAAyG;AACtI,wBAAwB,6BAAmB,CAAC,kCAAM,IAAI,mIAAmI;AACzL,qCAAqC,6BAAmB,CAAC,kCAAM,IAAI,+HAA+H,2BAA2B,6BAAmB,CAAC,kCAAM,IAAI,6HAA6H,oDAAoD,6BAAmB,CAAC,kCAAM,IAAI,+HAA+H;AACzkB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAsD;AAClE,YAAY,6BAAmB,UAAU,mDAAmD;AAC5F,oCAAoC,6BAAmB,SAAS,2CAA2C,8BAA8B,6BAAmB,cAAc,yIAAyI,SAAS,6BAAmB,UAAU,mEAAmE;AAC5Z,+BAA+B,6BAAmB,UAAU,6CAA6C;AACzG,YAAY,6BAAmB,CAAC,0BAAa,IAAI,+TAA+T;AAChX;AACA;AACA,WAAW,6BAAmB,UAAU,wCAAwC;AAChF;AACA,qBAAqB,uCAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,CAAC,wBAAc;AAClD,YAAY,6BAAmB,UAAU,wCAAwC;AACjF,gBAAgB,6BAAmB;AACnC,2CAA2C,6BAAmB,CAAC,oCAAQ,UAAU,qIAAqI;AACtN,YAAY,6BAAmB,CAAC,qCAAS,IAAI;AAC7C;AACA,iBAAiB,wDAAwD;AACzE,YAAY,6BAAmB,UAAU,0CAA0C,0DAA0D,GAAG;AAChJ,uCAAuC,6BAAmB;AAC1D,gBAAgB,6BAAmB;AACnC,gBAAgB,6BAAmB;AACnC,gBAAgB,6BAAmB;AACnC;AACA;AACA,sBAAsB,uCAAW;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,CAAC,wBAAc;AAClD,YAAY,6BAAmB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB;AACnC,gBAAgB,6BAAmB,QAAQ,gHAAgH;AAC3J,uCAAuC,6BAAmB,CAAC,kCAAM,IAAI;AACrE;AACA,iBAAiB,4DAA4D,2BAA2B,6BAAmB;AAC3H,gBAAgB,6BAAmB,CAAC,kCAAM,IAAI;AAC9C;AACA,uBAAuB;AACvB,gBAAgB,6BAAmB,CAAC,kCAAM,IAAI;AAC9C;AACA,qBAAqB,uEAAuE,iDAAiD;AAC7I;AACA;AACA,4BAA4B,uCAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,CAAC,wBAAc,8CAA8C,6BAAmB,2DAA2D,iCAAiC,0BAA0B,QAAQ,iDAAiD,6BAAmB,UAAU,yCAAyC,kDAAkD,6BAAmB,aAAa;AAC1b;AACA,aAAa,mJAAmJ;AAChK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA,2BAA2B,uCAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA,gBAAgB,6BAAmB,CAAC,wBAAc,2CAA2C,6BAAmB,sDAAsD,8BAA8B,uBAAuB,QAAQ,gCAAgC,6BAAmB,UAAU,yCAAyC,kDAAkD,6BAAmB,aAAa;AAC3Z;AACA,aAAa,sKAAsK;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,8BAA8B,qCAAS;AAC9C;AACA,gBAAgB,oBAAoB;AACpC,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA,+BAA+B,yBAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4CAAgB;AAC9C;AACA;AACA;AACA,iDAAiD,yCAAa;AAC9D,kBAAkB,uCAAW;AAC7B;AACA;AACA,uFAAuF,OAAO;AAC9F,iBAAiB;AACjB,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,OAAO;AACnF,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjVA;AACA;AACA;AACA;AACA;AACA;AACwB;AACC;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AAC6H;AAC6C;AAC9G;AACF;AACgH;AAC3G;AAChB;AACI;AACmB;AAC+J;AAC7L;AACW;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wEAAmB,EAAE,wEAAmB,EAAE,gEAAW;AACpE;AACA,QAAQ,oEAAe;AACvB,QAAQ,yEAAgB;AACxB,QAAQ,qEAAgB;AACxB,QAAQ,iEAAe;AACvB;AACA,cAAc,yEAAoB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,6DAAU;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wEAAmB;AAClC,eAAe,yEAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,wEAAmB;AACjC,eAAe,oEAAgB,EAAE,gEAAW;AAC5C,eAAe,yDAAQ,EAAE,+DAAU;AACnC;AACA,4BAA4B,+DAAa,GAAG,WAAW;AACvD,mDAAmD;AACnD;AACA;AACA;AACA;AACA,8BAA8B,2EAAsB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA,+BAA+B,gEAAW,GAAG,uCAAuC;AACpF;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,wEAAmB;AACjC,eAAe,wEAAmB;AAClC,eAAe,4DAAO,EAAE,oEAAe,gBAAgB,8DAAS,EAAE,gEAAW;AAC7E;AACA,gBAAgB,WAAW;AAC3B,mFAAmF,mEAAc;AACjG;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,oCAAoC,iEAAU;AAC9C;AACA;AACA;AACA;AACA,4CAA4C,8DAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wEAAmB,EAAE,gEAAW;AAC/C;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,kBAAkB,mEAAY,aAAa,wBAAwB;AACnE;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2DAAS;AAC7B,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,kBAAkB,+DAAQ,aAAa,wBAAwB;AAC/D;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oEAAgB;AACxB,QAAQ,wEAAmB;AAC3B,QAAQ,wEAAmB;AAC3B,QAAQ,yEAAgB;AACxB,QAAQ,wEAAsB;AAC9B,QAAQ,gEAAW;AACnB,QAAQ,8DAAS;AACjB,QAAQ,yEAAoB;AAC5B;AACA,eAAe,iEAAe;AAC9B;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B,gBAAgB,UAAU;AAC1B;AACA;AACA,sFAAsF,6DAAQ,GAAG,kCAAkC;AACnI,QAAQ,gEAAU,UAAU,0EAAoB;AAChD,wCAAwC,iCAAiC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA,4CAA4C,qBAAqB,kBAAkB,KAAK;AACxF;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D,eAAe,wEAAmB,EAAE,gEAAW;AAC/C;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2DAAS,cAAc,6DAAU;AACjD,+BAA+B,6DAAU;AACzC;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,kBAAkB,+DAAQ,aAAa,wBAAwB;AAC/D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wEAAmB;AAClC;AACA;AACA,gBAAgB,cAAc;AAC9B,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,uDAAG;AACnD;AACA,iBAAiB;AACjB;AACA;AACA;AACA,wBAAwB,6DAA6D;AACrF;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wEAAmB,EAAE,gEAAW;AAC/C;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uDAAG;AACjD;AACA,oCAAoC,6DAAU;AAC9C;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB,aAAa;AACb,kBAAkB,8DAAO,aAAa,wBAAwB;AAC9D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,wEAAmB,EAAE,gEAAW;AAC/C,eAAe,6DAAU;AACzB;AACA;AACA;AACA;AACA;AACA,yBAAyB,qEAAgB;AACzC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wEAAmB,EAAE,gEAAW;AAC/C,eAAe,iEAAe;AAC9B;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,6DAAW;AAChD;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sEAAgB;AAC3C;AACA;AACA;AACA,iCAAiC,0DAAO;AACxC,0DAA0D,MAAM;AAChE;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,2BAA2B,sEAAgB;AAC3C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kCAAkC;AAC9C,YAAY,UAAU;AACtB,0BAA0B,6DAAU;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,cAAc,gEAAS,aAAa,wBAAwB;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,cAAc,+DAAQ,aAAa,wBAAwB;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,cAAc,8DAAO,aAAa,wBAAwB;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,cAAc,+DAAQ,aAAa,wBAAwB;AAC3D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAqB,mBAAmB,KAAK;AAC7E;AACA;AACA,kEAAkE,MAAM;AACxE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6DAAW;AAC5C;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA,iBAAiB;AACjB;AACA,4CAA4C,KAAK;AACjD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,6DAA6D,MAAM;AACnE;AACA;AACA;AACA;AACA;AACA,uBAAuB,sEAAgB;AACvC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,WAAW;AAC/B,0CAA0C,uDAAG;AAC7C;AACA;AACA,+CAA+C,UAAU;AACzD;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kIAAkI,wBAAwB;AAC1J;AACA;AACA,uBAAuB,iEAAU,aAAa,wBAAwB;AACtE;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,cAAc,gEAAS,aAAa,wBAAwB;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,cAAc,oEAAa,aAAa,wBAAwB;AAChE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,8CAA8C,YAAY;AAC1D;AACA,SAAS;AACT,cAAc,qEAAc,aAAa,wBAAwB;AACjE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,8CAA8C,WAAW;AACzD;AACA,SAAS;AACT,cAAc,mEAAY,aAAa,wBAAwB;AAC/D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,cAAc,kEAAW,aAAa,wBAAwB;AAC9D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAc,+DAAQ,aAAa,wBAAwB;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6DAAU;AAC1B,qCAAqC,0DAAO,4BAA4B,6DAAU;AAClF,gBAAgB,2DAAS;AACzB;AACA;AACA,gBAAgB,2DAAS;AACzB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAc,+DAAQ,aAAa,wBAAwB;AAC3D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,cAAc,+DAAQ,aAAa,wBAAwB;AAC3D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT,cAAc,iEAAU,aAAa,wBAAwB;AAC7D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,KAAK;AACxD,iBAAiB;AACjB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,KAAK;AACxD,iBAAiB;AACjB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,KAAK;AACxD,iBAAiB;AACjB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,KAAK;AACxD,iBAAiB;AACjB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,yBAAyB,6DAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,OAAO,EAAC;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAqB,uCAAuC,KAAK;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,yDAAyD,gBAAgB;AACzE,gBAAgB,QAAQ;AACxB;AACA;AACA,+BAA+B,UAAU;AACzC;AACA;AACA,+BAA+B,0DAAO,oBAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,uDAAuD;AAC5D,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/rCA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACJ;AACD;AACG;AACA;AACD;AACC;;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfpB;AACA;AACkE;AACN;AACR;AACK;AACmD;AAC/D;AACD;AACE;AACL;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,0BAA0B,oBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,wBAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAO;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAU;AAClC,oCAAoC,8BAAgB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2BAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,8BAAgB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2BAAQ,sCAAsC,sCAAU;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAQ;AACnC;AACA;AACA;AACA,sBAAsB,2BAAQ,sCAAsC,sCAAU;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,2BAAQ;AAC9B;AACA;AACA;AACA;AACA,qBAAqB,qBAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAO;AAChC,4BAA4B,qBAAO;AACnC,0BAA0B,uCAAU;AACpC;AACA;AACA,mBAAmB,8BAAgB;AACnC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,8CAA8C;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kBAAkB;AAClD;AACA;AACA;AACA,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sCAAQ;AAC7B;AACA;AACA,mBAAmB,wBAAU;AAC7B;AACA,SAAS;AACT,yBAAyB,wCAAY;AACrC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,0BAA0B,oCAAa;AACvC;AACA;AACA,mBAAmB,wBAAU;AAC7B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;ACvYA;AACA;AACsF;AACpB;AACG;AACV;AACF;AACgC;AACzB;AACF;AAChB;AACU;AAChB;AACQ;AACL;AACQ;AACV;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAa;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,yBAAiB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,oBAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,mCAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mCAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kBAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kBAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,6BAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,eAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,iBAAiB,8BAAgB;AACjC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,wBAAU;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,wBAAU;AACvC;AACA;AACA;AACA,gBAAgB,gBAAM,gBAAgB,iCAAiC;AACvE,gBAAgB,gBAAM,cAAc,mBAAmB;AACvD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,iBAAiB,8BAAgB;AACjC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,GAAG;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2BAAQ;AAClC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,iBAAiB,8BAAgB;AACjC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2BAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2BAAQ;AAC5B;AACA;AACA;AACA,YAAY,sCAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2BAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2BAAQ;AAC5B;AACA;AACA;AACA,YAAY,sCAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,2BAAQ;AAC9B;AACA,SAAS;AACT;AACA;AACA,YAAY,sCAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6BAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,eAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,2BAAQ;AAC9B;AACA;AACA;AACA;AACA,QAAQ,wCAAW,mBAAmB,oBAAM;AAC5C,QAAQ,sCAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,oBAAoB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kBAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,kBAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2BAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,kBAAQ;AAC7B,SAAS;AACT;AACA;AACA,+EAA+E;AAC/E;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,eAAO;AACrE;AACA;AACA;AACA;AACA,gBAAgB,eAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,qDAAqD,QAAQ,sHAAsH;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,kBAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,UAAU;AACxE;AACA,oCAAoC,kBAAQ;AAC5C;AACA,2CAA2C,gCAAI;AAC/C;AACA;AACA;AACA;AACA,uCAAuC,gDAAkB;AACzD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC,gCAAgC,8BAAgB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,WAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,gBAAgB,eAAO;AACvB,sCAAsC,eAAO;AAC7C;AACA,yCAAyC,eAAO;AAChD;AACA;AACA;AACA;AACA,qBAAqB,eAAO;AAC5B,mCAAmC,eAAO;AAC1C;AACA;AACA;AACA;AACA;AACA,0BAA0B,eAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qBAAa;AAChD,0BAA0B,eAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yBAAiB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAQ,wBAAwB,yBAAiB;AAC5E;AACA,wCAAwC,yBAAiB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAQ,wBAAwB,yBAAiB;AAC5E;AACA,wCAAwC,yBAAiB;AACzD;AACA,sBAAsB,eAAO;AAC7B,yCAAyC,yBAAiB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qBAAa;AACjD;AACA;AACA;AACA;AACA,0CAA0C,yBAAiB;AAC3D,wCAAwC,yBAAiB;AACzD;AACA;AACA;AACA;AACA;AACA,sBAAsB,2BAAQ;AAC9B;AACA;AACA;AACA,uBAAuB,qBAAO;AAC9B;AACA;AACA;AACA;AACA,6CAA6C,qBAAa;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAO;AAChC,4BAA4B,qBAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uCAAU;AACxC;AACA;AACA;AACA,iBAAiB,8BAAgB;AACjC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gCAAI;AAC7B;AACA,0BAA0B,uBAAQ;AAClC;AACA;AACA,SAAS;AACT,oCAAoC,qBAAa;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,8BAAe;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,eAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oBAAoB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,8BAAgB;AACjC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,2BAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,eAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4CAAe;AACjC,iBAAiB,8BAAgB;AACjC;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAO;AACnC,4BAA4B,qBAAO;AACnC;AACA,sBAAsB,uCAAU;AAChC;AACA;AACA;AACA,yBAAyB,8BAAgB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAO;AAC/B;AACA;AACA;AACA,yBAAyB,qBAAO;AAChC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wCAAc;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kBAAQ;AACjC;AACA;AACA,YAAY,eAAO,aAAa,kBAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,8DAA8D,eAAO;AACrE;AACA,sDAAsD,iBAAiB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAQ;AAC/C;AACA;AACA;AACA;AACA,4BAA4B,eAAO;AACnC;AACA;AACA;AACA,4BAA4B,eAAO;AACnC;AACA;AACA;AACA;AACA,wBAAwB,eAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,sBAAsB;AACzF;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,kBAAQ;AACxD,wBAAwB,eAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAI;AAChC,6BAA6B,kBAAI;AACjC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0CAAgB;AAC5C,oBAAoB,wBAAwB;AAC5C,uCAAuC,wCAAc;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,oCAAoC,kBAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,kBAAQ;AAC1C,yBAAyB,kBAAQ;AACjC,+BAA+B,kBAAQ;AACvC,2BAA2B,kBAAQ;AACnC,2BAA2B,kBAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mCAAO;AACvB;AACA,+BAA+B,uCAAO;AACtC;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,qCAAqC,eAAO;AAC5C;AACA;AACA;AACA,oDAAoD,eAAO;AAC3D;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,kBAAI;AAC3D;AACA;AACA,wDAAwD,kBAAI;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4BAAS,gCAAgC,+BAAC;AAC5E;AACA,gBAAgB,wCAAU,QAAQ,+BAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,kBAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,wBAAwB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kBAAQ;AACjC;AACA;AACA;AACA,sCAAsC,kBAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,kBAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA,IAAI,eAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,gEAAgE,QAAQ,MAAM,QAAQ,sBAAsB,aAAa;AACzH;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2BAAQ,+BAA+B,sCAAU;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yCAAa,GAAG,uCAAW;AAC3D;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mCAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2BAA2B,qBAAO;AAClC,wBAAwB,qBAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,eAAO,KAAK,eAAO,KAAK;AAC3B;;AC33FA;AACA;AACwD;AACR;AACQ;AACC;AACwB;AACzC;AACN;AACK;AACA;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,0BAA0B,qCAAS;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa,mBAAK,oCAAoC;AACtE;AACA;AACA,8BAA8B,6BAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yGAAyG,wCAAc;AACvH;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mBAAK;AAClC;AACA;AACA,0BAA0B,WAAW,GAAG,mBAAmB;AAC3D;AACA;AACA,yBAAyB,gDAAgB;AACzC;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,iCAAiC,mCAAO;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,8BAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA;AACA;AACA;AACA,4BAA4B,uCAAgB;AAC5C;AACA;AACA;AACA,iBAAiB,8BAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,UAAU,GAAG,qBAAO,wBAAwB;AAClE;AACA;AACA;AACA;;;;AChcA;AACA;AAC0D;AACE;AACH;AACA;AACJ;AACD;AACb;AACI;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,sCAAsC,mCAAM;AAC5C,gCAAgC,mCAAM;AACtC;AACA;AACA,gCAAgC,mCAAM;AACtC;AACA;AACA;AACA,8BAA8B,mCAAM;AACpC;AACA;AACA;AACA,6BAA6B,8BAAe;AAC5C;AACA,kCAAkC,mCAAM;AACxC;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA;AACA,kBAAkB,qBAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+BAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mCAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,MAAM;AAC7D;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B,oCAAoC,GAAG;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,wBAAU;AACxC;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4CAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS,QAAQ,wBAAU;AAC3C;AACA;AACA;AACA,gBAAgB,gBAAM,gBAAgB,iCAAiC;AACvE,gBAAgB,gBAAM,cAAc,iCAAiC;AACrE;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,UAAU;AAChF,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2BAAQ;AACxB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA,SAAS;AACT,4BAA4B,aAAa;AACzC;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2BAAQ;AACxB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA,qBAAqB,qBAAO;AAC5B;AACA;AACA;AACA,yBAAyB,qBAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,6BAAM;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,0CAA0C,mCAAM;AAChD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,uBAAuB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,6BAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;ACjoBA;AACA;AACyE;AACzB;AACS;AACc;AACjB;AACd;AACS;AACG;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,wCAAc;AAC/D;AACA;AACA;AACA;AACA;AACA,gBAAgB,gBAAM;AACtB,gBAAgB,gBAAM;AACtB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,gBAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA,SAAS;AACT;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA,yBAAyB,oBAAM;AAC/B;AACA;AACA,0BAA0B,8BAAe;AACzC,iFAAiF,wCAAc;AAC/F;AACA;AACA,QAAQ,kBAAO,8EAA8E;AAC7F;AACA;AACA;AACA,YAAY,wBAAU;AACtB;AACA;AACA,gCAAgC,uBAAa;AAC7C,8BAA8B,yCAAa;AAC3C;AACA;AACA,yBAAyB;AACzB;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA,gCAAgC,uBAAa;AAC7C,8BAA8B,uCAAW;AACzC;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB;AACzB;AACA,qBAAqB;AACrB;AACA;AACA;AACA,+BAA+B,yBAAW;AAC1C;AACA,wCAAwC,oBAAM;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,qBAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF;AAChF,mCAAmC,wCAAc;AACjD,0BAA0B,sBAAsB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2BAA2B,WAAW;AACtC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,kBAAO,KAAK,kBAAO,KAAK;AAC3B;;AC3NA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,gCAAgC,oBAAK;AAC5C;AACA;AACA;AACA;AACA;AACO,gCAAgC,oBAAK;AAC5C;AACA;AACA;AACO,iCAAiC,oBAAK;AAC7C;;ACjBA;AACA;AACwD;AACC;AACiB;AAC1E;AACA;AACA;AACO,uBAAuB,yCAAa;AAC3C;AACA;AACA;AACA;AACA;AACA,kBAAkB,0CAAc;AAChC;AACA;AACA;AACA,aAAa;AACb,qBAAqB,cAAO;AAC5B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8BAAgB;AACrC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,cAAO;AAC7B;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,cAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAc;AACjD;AACA;AACA;AACA;AACA,CAAC,EAAE,cAAO,KAAK,cAAO,KAAK;AAC3B;;;;ACzEA;AACA;AACA;AACyE;AAChB;AACW;AACvB;AACnB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wCAAc;AACzD;AACA,YAAY,sCAAmB,CAAC,iCAAS,IAAI,uBAAuB;AACpE,QAAQ,sCAAmB,CAAC,gCAAQ,IAAI,gCAAgC;AACxE,QAAQ,sCAAmB,CAAC,mCAAW,IAAI,0BAA0B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,+BAA+B,wCAAY;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,wCAAc;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAmB,CAAC,gCAAQ,IAAI,qCAAqC;AAC5F;AACA;AACA,wBAAwB,sCAAmB,wBAAwB,mEAAmE;AACtI;AACA;AACA;AACA,mBAAmB,sCAAmB,wBAAwB,0CAA0C;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qCAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,gCAAgC,2BAAQ;AACxC;AACA;AACA;AACA;AACA;AACA,yCAAyC,2BAAQ;AACjD;AACA;AACA;AACA,4BAA4B,2BAAQ;AACpC;AACA,yBAAyB;AACzB;AACA;AACA;AACA,oBAAoB,2BAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;;ACvJA;AACA;AACA;AACA;AACA;AACA;AAC0B;AACD;AACC;AACF;AACK;AACJ;AACA;AACM;AAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACJ;AACO;AACD;;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbpB;AACA;AACiD;AACO;AACS;AACiB;AACd;AACX;AACwF;AACxG;AACzC;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,0BAA0B;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,GAAG,IAAI,eAAe;AACzE,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,qCAAqC,0BAA0B;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,GAAG,IAAI,eAAe;AACzE;AACA,aAAa;AACb;AACA,+BAA+B,QAAQ,6GAA6G;AACpJ;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,GAAG,IAAI,eAAe;AACzE;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,GAAG,IAAI,eAAe;AACzE;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,GAAG,IAAI,eAAe;AACzE;AACA,aAAa;AACb;AACA;AACA,+BAA+B,QAAQ;AACvC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,GAAG,IAAI,eAAe;AACzE;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,yEAAyE,cAAc;AACvF,wEAAwE,cAAc;AACtF;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,yEAAyE,aAAa;AACtF,wEAAwE,aAAa;AACrF;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,eAAe;AAC1E;AACA,aAAa;AACb,iCAAiC,QAAQ;AACzC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,8BAAQ;AAC3C,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,uCAAuC,8BAAQ;AAC/C;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,+CAAsB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,kBAAkB,uCAAW;AAC7B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,QAAQ,sHAAsH;AAC7L;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+BAAO;AACzC;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,0CAAkB;AAC3C;AACA,mCAAmC,0CAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,gEAAgE,sBAAsB;AACtF;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+BAAO;AACzC,oBAAoB,0CAAkB;AACtC;AACA,mCAAmC,0CAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,sBAAsB;AACtF;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,mCAAmC,+BAAO;AAC1C,aAAa;AACb,kBAAkB,wCAAY;AAC9B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+BAA+B,QAAQ,iGAAiG;AACxI;AACA;AACA;AACA;AACA,sBAAsB,mCAAO;AAC7B,oFAAoF,0CAAc;AAClG,qBAAqB;AACrB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,wCAAY;AACvE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,kBAAkB,oCAAQ,aAAa,wBAAwB;AAC/D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,kBAAkB,oCAAQ,aAAa,wBAAwB;AAC/D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uBAAS;AACzB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,kBAAkB,mCAAO,aAAa,wBAAwB;AAC9D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uBAAS;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,kBAAkB,oCAAQ,aAAa,wBAAwB;AAC/D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+BAA+B,QAAQ,gHAAgH;AACvJ,kBAAkB,qCAAS,aAAa,wBAAwB;AAChE;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wBAAS;AAC5C,aAAa;AACb,+BAA+B,QAAQ,gHAAgH;AACvJ;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,wCAAc;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,0CAA0C;AACpE;AACA;AACA;AACA;AACA,8BAA8B,0CAA0C;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,0BAA0B,0CAA0C;AACpE,iBAAiB;AACjB,0BAA0B,0CAA0C;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,QAAQ,sHAAsH;AAC5K;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF,mCAAmC;AAC3H;AACA,2BAA2B,yCAAgB;AAC3C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,6BAA6B,sBAAI;AACjC,0IAA0I,0CAAc;AACxJ;AACA;AACA;AACA,6BAA6B,4BAAc,GAAG,iBAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,4BAA4B;AAC7B;;ACpnCA;AACA;AACA;AACA;AACoD;AACa;AACW;AACzB;AACG;AACtD;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,uCAAc,EAAE,gDAAuB,EAAE,mBAAS,EAAE,qCAAW;AAC9E,eAAe,kCAAU;AACzB;AACA;AACA;AACA;AACA;AACA,yBAAyB,2CAAkB;AAC3C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AAC0D;AACgI;AACjH;AACwC;AAC9C;AACb;AACe;AACP;AAC2L;AACxM;AACwF;AACxF;AACc;AACZ;AACQ;AACW;AACK;AAClC;AACkB;AACP;AACd;AACtC;AACA;AACA;AACA,MAAM,UAAM;AACZ;AACA;AACA;AACA;AACA,QAAQ,6CAAoB;AAC5B,QAAQ,wCAAe;AACvB,QAAQ,iDAAwB;AAChC,QAAQ,gDAAuB;AAC/B,QAAQ,6CAAoB;AAC5B,QAAQ,6CAAmB;AAC3B,QAAQ,8CAAgB;AACxB;AACA;AACA,QAAQ,qCAAe;AACvB,QAAQ,6BAAe;AACvB,QAAQ,gCAAS;AACjB,QAAQ,gCAAS;AACjB,QAAQ,yBAAe;AACvB,QAAQ,oCAAsB;AAC9B,QAAQ,0CAAwB;AAChC,QAAQ,qCAAW;AACnB,QAAQ,iDAAqB;AAC7B;AACA,cAAc,uCAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wCAAe,EAAE,8CAAgB;AAChD,eAAe,oCAAsB,EAAE,qCAAW;AAClD,cAAc,6CAAoB;AAClC;AACA,mBAAmB,UAAM;AACzB,0FAA0F,wCAAc;AACxG;AACA;AACA;AACA,6BAA6B,sCAAoB,mCAAmC,OAAO;AAC3F;AACA,4BAA4B,0CAAiB;AAC7C;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,QAAQ,uCAAc;AACtB,QAAQ,iDAAwB;AAChC,QAAQ,8CAAgB;AACxB,QAAQ,qCAAW;AACnB;AACA,eAAe,kCAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mCAAO,GAAG,wBAAwB;AAC3D;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA,uBAAuB,eAAe;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA,yBAAyB,uCAAc,GAAG,kBAAkB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,eAAe,uCAAc,EAAE,uCAAc;AAC7C;AACA;AACA;AACA;AACA;AACA,eAAe,uCAAc;AAC7B,eAAe,kDAA0B,EAAE,qCAAW,EAAE,wBAAU;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oDAAuB;AACtC;AACA;AACA,oDAAoD,iDAAwB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uCAAc;AACtB,QAAQ,+CAA6B;AACrC,QAAQ,oCAAkB;AAC1B,QAAQ,2CAAyB;AACjC,QAAQ,0CAAwB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,UAAM;AACV;AACA;AACA;AACA;AACA,IAAI,kBAAkB;AACtB;AACA;AACA,0CAAe,OAAO,EAAC;AACvB;AACA;AACA;AACA;AACA,eAAe,UAAM;AACrB,sFAAsF,wCAAc;AACpG,0GAA0G,mCAAqB,GAAG,YAAY;AAC9I;AACA;AACA,YAAY,4BAA4B;AACxC,wBAAwB,2BAAa;AACrC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,oCAAoC,OAAO,EAAE;AAC5E;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,UAAU;AAC3C,gCAAgC,UAAU;AAC1C,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,iCAAiC,UAAU;AAC3C;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,oBAAoB,UAAU;AAC9B;AACA,aAAa;AACb;AACA,QAAQ,QAAQ;AAChB,QAAQ,QAAQ;AAChB;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,SAAS;AACT,KAAK;AACL;AACA;AACA,QAAQ,QAAQ;AAChB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,QAAQ,QAAQ;AAChB,KAAK;AACL;AACA;AACA,QAAQ,QAAQ;AAChB,KAAK;AACL,IAAI,QAAQ;AACZ,kCAAkC,2BAAa;AAC/C;AACA,KAAK;AACL;AACA;AACA;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA,IAAI,QAAQ;AACZ;AACA;AACA,QAAQ,QAAQ;AAChB;AACA;AACA,QAAQ,QAAQ;AAChB;AACA;AACA,QAAQ,QAAQ;AAChB;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA,YAAY,QAAQ;AACpB;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,4BAA4B,oDAA2B;AACvD,4BAA4B,uDAA8B;AAC1D,4BAA4B,qDAA4B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ;AACZ;AACA,4FAA4F,uBAAS;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sBAAI;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,OAAO;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,4BAA4B,0CAAiB;AAC7C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1fA;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACJ;AACD;AACE;AACC;AACA;AACG;AACJ;AACD;AACE;AACR;AACI;AACJ;AACO;AACF;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtB7C;AACA;AACgE;AACI;AAChB;AAC7C,gCAAgC,8BAAgB;AACvD;AACA,gBAAgB,yBAAyB;AACzC;AACA,kCAAkC,8BAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,gCAAsB;AACjG;AACA;AACA;AACA;AACA,kCAAkC,gCAAsB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAAe;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtLA;AACA;AAC2D;AACgB;AAChB;AACP;AACI;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,oBAAM;AACtC;AACA;AACA;AACA;AACA;AACA,0BAA0B,8BAAe;AACzC;AACA;AACA;AACA,uDAAuD,2BAAiB;AACxE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,0CAA0C,2BAAa;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACO,+BAA+B,wCAAc;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO,gCAAgC,0CAAgB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,6BAA6B,0CAAc;AAC3C,8CAA8C,kBAAkB;AAChE;AACA;AACA;AACA;;AClNA;AACA;AACsD;AAC0B;AAC1C;AACtC;AACA;AACA;AACO,uCAAuC,6CAAoB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qCAAc;AAChD,sCAAsC,UAAU;AAChD,6CAA6C,yCAAgB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACvGA;AACA;AACA;AACA;AACgE;AACJ;AACH;AACW;AAC7B;AACb;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sCAAmB,CAAC,gCAAQ,IAAI,oDAAoD;AAC/F;AACA;AACA;AACA;AACO,iCAAiC,wCAAY;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAI,GAAG,0BAA0B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,0BAA0B,qCAAS;AACnC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,qFAAqF,wCAAc;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAmB,0BAA0B,+DAA+D;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qCAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+HAA+H,gCAAsB;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+HAA+H,gCAAsB;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gDAAgD;AACjD;;ACtJA;AACA;AAC4D;AACH;AACW;AAC1C;AAC1B;AACA;AACA;AACA;AACA,2CAA2C,wCAAc;AACzD;AACA;AACA;AACA;AACA,YAAY,sCAAmB,CAAC,gCAAQ,IAAI;AAC5C,iBAAiB,YAAY,IAAI,eAAe;AAChD,uEAAuE;AACvE;AACA;AACA;AACA;AACO,6BAA6B,wCAAY;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sCAAmB,sBAAsB,yFAAyF;AACtJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qCAAS;AAC/B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qCAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;;;;AC5FA;AACA;AACyD;AACzD;AACA;AACA;AACO,2CAA2C,wCAAsB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AC/BA;AACA;AAC6E;AACpB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,KAAK;AAChE;AACA;AACA;AACO,wCAAwC,sCAAoB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,mCAAmC,sCAAoB;AACvD;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,0CAA0C,4BAA4B;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpHA;AACA;AAC6E;AACpB;AACzD;AACA;AACA;AACO,2CAA2C,sCAAoB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sCAAoB,gBAAgB,sCAAoB;AACjF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACO,6CAA6C,4BAA4B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sCAAoB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACuD;AACE;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yCAAyC,sCAAoB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B,QAAQ,2GAA8B;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,2CAA2C,4BAA4B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnHA;AACA;AAC0B;AACF;AACG;AACF;AACzB;;ACNA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,2BAA2B,oBAAK;AACvC;AACA;AACA;AACA;AACA;AACO,iCAAiC,oBAAK;AAC7C;;ACbA;AACA;AACA;AACA;AACA;AACA;AACuC;AACN;AACF;AACE;AACX;AACG;AACA;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACE;AACI;AACJ;AACC;AACR;AACA;;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;AChBpB;AACA;AACA;AACA;AACA;AACA;AACqE;AACqC;AAC3D;AACE;AACqB;AACkB;AACzD;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gEAAW;AAC1B;AACA;AACA,gBAAgB,WAAW;AAC3B,mFAAmF,mEAAc;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,qBAAqB,qBAAqB,yBAAyB;AAC/G;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,4CAA4C,0BAA0B,qBAAqB,8BAA8B;AACzH;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,4CAA4C,4BAA4B,qBAAqB,gCAAgC;AAC7H;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gEAAW;AAC1B,eAAe,iEAAe;AAC9B;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,gDAAmB,WAAW,oCAAoC;AACvG,oBAAoB,gDAAmB,WAAW,+BAA+B;AACjF,+BAA+B,gDAAmB,WAAW,8BAA8B;AAC3F,oBAAoB,gDAAmB,CAAC,kEAAW,UAAU,oDAAoD;AACjH,oBAAoB,gDAAmB,UAAU,mCAAmC;AACpF,wBAAwB,gDAAmB,CAAC,6EAAsB,UAAU,gCAAgC;AAC5G;AACA;AACA;AACA;AACA,uCAAuC,gDAAmB,WAAW,qCAAqC;AAC1G,oBAAoB,gDAAmB,QAAQ,kGAAkG;AACjJ,oBAAoB,gDAAmB,QAAQ,6FAA6F;AAC5I,mCAAmC,gDAAmB,WAAW,iCAAiC;AAClG,8BAA8B,gDAAmB,UAAU,4BAA4B;AACvF;AACA;AACA,uBAAuB,gEAAU;AACjC;AACA;AACA;AACA,wBAAwB,wDAAM;AAC9B;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA,8BAA8B,qCAAqC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gEAAW;AAC1B,eAAe,iEAAe;AAC9B;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8BAA8B,4CAA4C;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gEAAW;AAC1B,eAAe,oEAAe;AAC9B;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA,4BAA4B,+DAAa,GAAG,WAAW;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6DAAM;AACtC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,4BAA4B,UAAU,GAAG,UAAU;AACnD,+BAA+B,gEAAc,GAAG,SAAS;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yDAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2DAAS,EAAE,gEAAW;AACrC,eAAe,8DAAS,EAAE,iEAAe;AACzC;AACA;AACA;AACA,gBAAgB,2BAA2B;AAC3C;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,KAAK;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gDAAmB,UAAU,kDAAkD;AAC3H,uCAAuC,gDAAmB,WAAW,8BAA8B;AACnG;AACA,4BAA4B,gDAAmB,UAAU,mCAAmC;AAC5F,uCAAuC,gDAAmB;AAC1D,qCAAqC,gDAAmB,UAAU,4BAA4B;AAC9F,+BAA+B,gEAAU;AACzC;AACA;AACA;AACA,gCAAgC,wDAAM;AACtC;AACA,iCAAiC;AACjC;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB,qCAAqC,wBAAwB;AAC7D;AACA;AACA;AACA,mDAAmD,KAAK,GAAG,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,uCAAuC,oBAAoB;AAC3D,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E,aAAa;AACb;AACA,wBAAwB,cAAc;AACtC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,OAAO,EAAC;AACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClYA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACA;;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;ACXpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC0D;AAC0D;AACvB;AAC9B;AACT;AACA;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,sEAAkB;AAChC,eAAe,gEAAW;AAC1B;AACA,QAAQ,iEAAe;AACvB,QAAQ,oEAAe;AACvB,QAAQ,yEAAgB;AACxB,QAAQ,wEAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,gEAAY;AAC7E,+DAA+D,gEAAY;AAC3E;AACA,6BAA6B,0EAAoB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gEAAS;AACvB;AACA;AACA;AACA,wBAAwB,qEAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,wBAAwB,+DAAa;AACrC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,+BAA+B,mDAAmD;AAClF;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,UAAU,EAAC;AAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpKA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACG;;AAE5B;;;ACXpB;AACA;AACA;AACA;;AAEA;AACkD;AACL;AACG;AACA;AACD;;;;;;;;;;;;;;;;;;;;;;;ACV/C;AACA;AACA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,+BAA+B,eAAK;AAC3C;AACA;AACA;;;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACwD;AACmB;AAClB;AACsE;AACpF;AACZ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,wCAAc;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kCAAM;AAC/B;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,mCAAmC,oBAAM;AACzC,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA;AACA,gCAAgC,6BAAe;AAC/C;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mBAAmB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,SAAS;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACO,gCAAgC,0CAAgB;AACvD;AACA;AACA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,wCAAc;AACjG,mBAAmB,yCAAa;AAChC,kBAAkB,uCAAW;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uCAAW,QAAQ,6BAAmB,iCAAiC,gDAAgD;AACtI;AACA;AACA,CAAC,oCAAoC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA,gBAAgB,6BAAmB,CAAC,qCAAS,IAAI,8EAA8E,SAAS,6BAAmB,CAAC,kDAAsB,IAAI;AACtL;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA,CAAC,0BAA0B;AAC3B;;AChSA;AACA;AACA;AACA;AACA;AACA;AACyB;AACA;AACzB;;;;;;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACuG;AAC5B;AAC5B;AACO;AACtD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,sBAAsB,yDAAM;AAC5B;AACA;AACA,uBAAuB,yDAAM;AAC7B;AACA;AACA;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kCAAkC,yDAAM;AACxC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,6CAA6C,yDAAM;AACnD;AACA,KAAK;AACL;AACA;AACA;AACA,0BAA0B,4CAA4C;AACtE,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oEAAe,SAAS,gEAAW;AAClD,eAAe,iEAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oEAAe,SAAS,gEAAW;AAClD,eAAe,+DAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mEAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gEAAU;AAC3C;AACA;AACA;AACA,oBAAoB,wDAAM,YAAY,4BAA4B;AAClE,oBAAoB,wDAAM,gBAAgB,4BAA4B;AACtE;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,cAAc,oEAAe;AAC7B;AACA,iEAAe;AACf;AACA;AACA;AACA,CAAC,EAAC;AACF;;;;;;;;;;AC5JA;AACA;AACA;AACA;;AAEA;AAC6C;AACG;;;;;;;;;;;;;;;;;;;;;ACPhD;AACA;AACA;AACA;AACA;AACA;AAC0D;AACY;AACM;AACtB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,0BAA0B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kEAAa;AAC3B,eAAe,gEAAW;AAC1B,eAAe,iEAAe,EAAE,oEAAe;AAC/C;AACA;AACA;AACA;AACA;AACA,iEAAe,MAAM,EAAC;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uEAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,4BAA4B,uEAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,wBAAwB,+DAAa;AACrC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7PA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACK;AACG;;AAE5B;;;ACVpB;AACA;AACA;AACA;;AAEA;AAC6C;AACG;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACThD;AACA;AAC0C;AAC1C;AACA;AACA;AACO,0BAA0B,eAAK;AACtC;AACA;AACA;;;;;;;;;;ACTA;AACA;AACgD;AACA;AAC2B;AACvB;AACX;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,0BAA0B,oBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yBAAe;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK,+BAAQ;AACb,qBAAqB,+BAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAO;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB,SAAS,QAAQ;AACrE;AACA;AACA,4CAA4C,sBAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,oBAAoB,kBAAkB,KAAK,kBAAkB;AACrH,6CAA6C,YAAY,IAAI,UAAU;AACvE,2CAA2C,qBAAqB;AAChE;AACA;AACA;AACA;AACA;AACO,iCAAiC,0CAAgB;AACxD;AACA;AACA;AACA;AACA;AACA,2BAA2B,wCAAc,GAAG,kBAAkB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;ACvOA;AACA;AACA;AACA;AACA;AACA;AACyB;AACA;AACzB;;;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AAC4D;AACrD;AACA;AACP;AACA;AACA;AACA;AACO,6CAA6C,sEAAkB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,SAAS,EAAC;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5DA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AAC+C;;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRpB;AACA;AAC+D;AACN;AACF;AACf;AACI;AACb;AACiB;AACL;AACH;AACxC;AACA;AACA;AACA;AACA;AACA,iBAAiB,yEAAqB;AACtC;AACA;AACA;AACA;AACO,wBAAwB,4CAAe;AAC9C;AACA;AACA,uBAAuB;AACvB;AACA;AACA,oBAAoB,QAAQ;AAC5B,4BAA4B,OAAO;AACnC;AACA;AACA,gCAAgC,eAAe;AAC/C,aAAa;AACb;AACA;AACA;AACA,QAAQ,2DAAW,iBAAiB,yEAAqB;AACzD;AACA;AACA,oDAAoD,mEAAc;AAClE;AACA,gBAAgB,+BAA+B;AAC/C;AACA;AACA;AACA;AACA,gBAAgB,gDAAmB,UAAU,2CAA2C;AACxF,YAAY,gDAAmB,CAAC,iEAAU,IAAI,4JAA4J;AAC1M,YAAY,gDAAmB,CAAC,8DAAQ,IAAI;AAC5C;AACA,yCAAyC,kDAAI;AAC7C,wCAAwC,kDAAI;AAC5C,mDAAmD,kDAAI;AACvD,iBAAiB;AACjB;AACA,gBAAgB,gDAAmB;AACnC;AACA;AACA;AACA,oEAAoE;AACpE,gBAAgB,gDAAmB;AACnC;AACA,4BAA4B,gDAAmB,WAAW,oBAAoB,kDAAI,WAAW;AAC7F,wBAAwB,gDAAmB,CAAC,8DAAW,IAAI,sDAAsD,MAAM,0CAA0C;AACjK,iBAAiB;AACjB,6CAA6C,kDAAI;AACjD;AACA,6CAA6C,kDAAI;AACjD;AACA;AACA,6CAA6C,kDAAI;AACjD;AACA,4BAA4B,gDAAmB,WAAW,sBAAsB;AAChF,wBAAwB,gDAAmB,CAAC,8DAAW,IAAI,sDAAsD,IAAI,0CAA0C;AAC/J,iBAAiB;AACjB;AACA,sEAAsE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sDAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,QAAQ,sDAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACgD;AACS;AAChB;AACV;AACe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO,2BAA2B,mDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,mEAAc;AAC9D;AACA,KAAK,0DAAQ;AACb,qBAAqB,0DAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA,gBAAgB,YAAY,QAAQ,mQAAqB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB;AAClD;AACA;AACA,oDAAoD;AACpD;AACA,8DAA8D;AAC9D;AACA,4BAA4B,qEAAU;AACtC;AACA;AACA,iCAAiC,gDAAmB,cAAc,4FAA4F;AAC9J,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,UAAU,EAAC;AAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpHA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACE;;AAE3B;;;;;;;;;;;;;;;;;;;;;;ACXpB;AACA;AACA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,sBAAsB,eAAK;AAClC;AACA;;;;;;;;;;;;;;;;;;ACVA;AACA;AACwD;AACC;AAC6B;AACpC;AACM;AACF;AACb;AACV;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,4BAA4B,qCAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qCAAkB;AACrC,YAAY,sBAAQ;AACpB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,uBAAuB,wCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,2BAA2B,6BAAmB,UAAU,4CAA4C;AACpG,oBAAoB,6BAAmB,UAAU,wCAAwC;AACzF,wBAAwB,6BAAmB,CAAC,mCAAO,iBAAiB,uBAAuB,uCAAO,oFAAoF;AACtL,wBAAwB,6BAAmB,SAAS,uCAAuC;AAC3F,oBAAoB,6BAAmB,UAAU,wCAAwC,aAAa,qBAAG;AACzG;AACA,qBAAqB;AACrB;AACA;AACA,SAAS;AACT;AACA,gBAAgB,6BAAmB,UAAU,+BAA+B;AAC5E,YAAY,6BAAmB,UAAU,kCAAkC;AAC3E,gBAAgB,6BAAmB,UAAU,8BAA8B;AAC3E,oBAAoB,6BAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iCAAiC,iCAAM;AACvC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,iBAAiB,kCAAgB;AACjC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6BAAmB,UAAU,4LAA4L;AACrO,QAAQ,6BAAmB,UAAU,mCAAmC,kCAAkC,6BAAmB,UAAU,0EAA0E,MAAM,6BAAmB,UAAU,2CAA2C,+BAA+B,6BAAmB,CAAC,mCAAO,iBAAiB,uBAAuB,uCAAO,0DAA0D;AAClc,QAAQ,6BAAmB,UAAU,kDAAkD;AACvF,YAAY,6BAAmB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAgB;AAC9C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,mDAAmD,gBAAgB;AACnE,mDAAmD,gBAAgB;AACnE;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;AC5QA;AACA;AACA;AACA;AACA;AACA;AACyB;AACA;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVpB;AACA;AAC4D;AACH;AACqB;AACnC;AACjB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wCAAc;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sCAAmB,CAAC,iCAAS,IAAI,sDAAsD;AACnG,QAAQ,sCAAmB,CAAC,oCAAQ,UAAU,qCAAqC;AACnF,gCAAgC,sCAAmB,CAAC,gCAAQ,IAAI,2BAA2B,IAAI,sCAAmB,CAAC,mCAAc;AACjI;AACA;AACA;AACA;AACO,+BAA+B,wCAAY;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6EAA6E;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAmB,8BAA8B,uJAAuJ;AACxN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qCAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,oBAAM;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;;AC3PA;AACA;AACA;AACA;AACA;AACA;AACqE;AACiB;AAC7B;AACiC;AAC7B;AACE;AACZ;AACmB;AACkD;AAC/E;AACV;AACa;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,wCAAe;AAC7B,eAAe,4CAAmB,EAAE,qCAAW;AAC/C;AACA,QAAQ,mBAAS;AACjB,QAAQ,6BAAe;AACvB,QAAQ,yBAAe;AACvB,QAAQ,8CAAgB;AACxB,QAAQ,kCAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,uCAAc;AAC7C;AACA;AACA;AACA,KAAK;AACL,wBAAwB,2BAAa;AACrC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,wCAAc;AACpE;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA,8BAA8B,wCAAe;AAC7C;AACA,+BAA+B,4BAAc,GAAG,0BAA0B;AAC1E;AACA;AACA,sCAAsC,oCAAQ;AAC9C;AACA,wCAAwC,gDAAoB;AAC5D;AACA;AACA,SAAS;AACT,gCAAgC,gDAAoB;AACpD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,0DAA0D,iBAAiB;AAC3E;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,cAAc,mCAAO;AACrB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,cAAc,qCAAS;AACvB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,mFAAmF;AACzH;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,UAAU;AAChE;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACO,+BAA+B,uCAAW;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAI,SAAS;AACzC,sFAAsF,wCAAc;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,CAAC,wBAAc;AAClD,YAAY,6BAAmB,YAAY;AAC3C;AACA,iCAAiC;AACjC,YAAY,6BAAmB,CAAC,sCAAU,IAAI;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;AACA;AACA,0CAAe,gBAAgB,EAAC;AAChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrTA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACJ;AACD;AACE;AACC;AACA;AACD;;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfpB;AACA;AACyD;AACJ;AACV;AAC3C;AACA;AACA;AACA;AACO,6BAA6B,yBAAW;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,yBAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,oCAAoC,yBAAe;AAC1D,kBAAkB,uBAAuB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,oBAAM;AACzC,iCAAiC,oBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,SAAS;AAC/D;AACA,aAAa;AACb;AACA,SAAS;AACT,kCAAkC,mCAAmC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,wCAAwC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,uDAAuD;AAC5D,CAAC,0BAA0B;AAC3B;;ACzSA;AACA;AAC2C;AACT;AAClC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,MAAM,GAAG,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;;;;ACpFA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,4BAA4B,oBAAK;AACxC;;;;;;ACPA;AACA;AACoD;AACK;AACd;AACyB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,yBAAM;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,mCAAmC,EAAE,0BAA0B;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,oBAAU;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oBAAU;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,8BAA8B,yBAAM;AAC3C,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA,0CAA0C,8BAAW;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa,IAAI,+BAA+B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,8BAA8B,+BAAY;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oBAAM;AACxC,oCAAoC,oBAAM;AAC1C;AACA,wCAAwC,wCAAc;AACtD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,gCAAgC,yBAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,oCAAoC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,yCAAyC,cAAc;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,mEAAmE,OAAO;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,OAAO;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnXA;AACA;AACA;AACA;AACA;AACA;AACyB;AACE;AACF;AACA;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACO;AACA;;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVpB;AACA;AACsD;AACb;AACG;AACI;AACA;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kEAAkE;AAC9E,YAAY,kEAAkE;AAC9E,sDAAsD,4BAAQ;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mBAAI;AAClC,KAAK;AACL,0CAA0C,4BAAQ;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,gEAAgE,4BAAQ;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mBAAI;AACzB;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,qCAAqC,4BAAS;AAC9C,wBAAwB,0BAAM,CAAC,+BAAQ;AACvC,YAAY,sCAAmB,UAAU,yBAAyB;AAClE,QAAQ,sCAAmB,UAAU,0BAA0B;AAC/D,YAAY,sCAAmB,UAAU,mCAAmC;AAC5E,gBAAgB,sCAAmB,UAAU,oCAAoC;AACjF,oBAAoB,sCAAmB;AACvC,wBAAwB,sCAAmB,UAAU,qCAAqC;AAC1F,4BAA4B,sCAAmB,UAAU,qDAAqD;AAC9G,4BAA4B,sCAAmB,UAAU,mCAAmC;AAC5F,gCAAgC,sCAAmB,YAAY,6FAA6F;AAC5J,gCAAgC,sCAAmB,UAAU,4DAA4D;AACzH,oCAAoC,sCAAmB,YAAY;AACnE;AACA,2CAA2C;AAC3C,gCAAgC,sCAAmB,UAAU,+BAA+B;AAC5F,oCAAoC,sCAAmB;AACvD,wCAAwC,sCAAmB,SAAS,sDAAsD;AAC1H,4CAA4C,sCAAmB,SAAS,0BAA0B;AAClG;AACA,oCAAoC,sCAAmB,UAAU,QAAQ,IAAI,GAAG,SAAS,wCAAwC;AACjI,gCAAgC,sCAAmB,UAAU,mCAAmC;AAChG,oCAAoC,sCAAmB,SAAS,+DAA+D;AAC/H,oCAAoC,sCAAmB,UAAU,4DAA4D;AAC7H,wCAAwC,sCAAmB,YAAY,mLAAmL;AAC1P,oCAAoC,sCAAmB,UAAU,uCAAuC;AACxG,oCAAoC,sCAAmB,UAAU,+BAA+B;AAChG,yBAAyB;AACzB,wBAAwB,sCAAmB;AAC3C,4BAA4B,sCAAmB;AAC/C;AACA,wCAAwC,sCAAmB,iBAAiB,8GAA8G;AAC1L,6BAA6B;AAC7B,4BAA4B,sCAAmB;AAC/C,QAAQ,sCAAmB,UAAU,iCAAiC;AACtE,YAAY,sCAAmB,aAAa,gEAAgE;AAC5G,YAAY,sCAAmB,aAAa,wHAAwH;AACpK;AACA;AACA,8BAA8B,4BAAQ,GAAG,mBAAmB;AAC5D,uBAAuB;AACvB;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,YAAY,sCAAmB,UAAU,sDAAsD;AAC/F,QAAQ,sCAAmB,UAAU,qEAAqE;AAC1G,YAAY,sCAAmB,YAAY;AAC3C;AACA,mBAAmB;AACnB,YAAY,sCAAmB,aAAa,yFAAyF;AACrI,gBAAgB,sCAAmB,aAAa,iBAAiB;AACjE,gBAAgB,sCAAmB,aAAa,iBAAiB;AACjE,gBAAgB,sCAAmB,aAAa,kBAAkB;AAClE,YAAY,sCAAmB,YAAY;AAC3C;AACA,sEAAsE;AACtE,YAAY,sCAAmB,aAAa,4DAA4D;AACxG,gBAAgB,sCAAmB,CAAC,qCAAS;AAC7C;AACA;AACA;AACA;AACA,8BAA8B,oCAAe;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,iBAAiB;AACjB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,iBAAiB;AACjB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,MAAM;AACtC;AACA;AACA;AACA;AACA;AACA,qBAAqB,mBAAI,aAAa;AACtC;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,mBAAI;AACrC,oCAAoC;AACpC;AACA,aAAa;AACb;AACA,uBAAuB;AACvB,2CAA2C,4BAAS;AACpD;AACA;AACA,gBAAgB,sCAAmB;AACnC,YAAY,sCAAmB;AAC/B,gBAAgB,sCAAmB;AACnC,gBAAgB,sCAAmB,QAAQ,gCAAgC;AAC3E,gBAAgB,sCAAmB,UAAU,sDAAsD;AACnG,4BAA4B,sCAAmB,qBAAqB,QAAQ,IAAI,GAAG,KAAK,gKAAgK;AACxP,iBAAiB;AACjB,gBAAgB,sCAAmB;AACnC,oBAAoB,sCAAmB,aAAa,SAAS,WAAW,4EAA4E;AACpJ;AACA;AACA;AACA;AACA;AACO;AACP,WAAW,sCAAmB,oBAAoB,kCAAkC;AACpF;AACA;;AC3UA;AACA;AACA;AACA;AACA;AACA;AACqR;AACvN;AACC;AACT;AACwB;AACnC;AACM;AACjD,MAAM,UAAM;AACZ;AACA;AACA;AACA,eAAe,qCAAW,EAAE,kCAAwB;AACpD,eAAe,qCAAuB;AACtC,cAAc,uCAA6B;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAc;AACtC,cAAc,4BAAkB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uCAA6B,EAAE,8CAAgB,EAAE,qCAAW;AAC3E,eAAe,iDAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mCAAyB;AACvC;AACA,qCAAqC,+BAAqB;AAC1D,0CAA0C,kCAAwB;AAClE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,qCAAqC,kCAAwB;AAC7D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,+BAAqB;AAC3D;AACA,KAAK;AACL,kCAAkC,mCAAyB;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAM;AACpC;AACA;AACA;AACA;AACA,sCAAsC;AACtC,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,KAAK;AACL;AACA,mCAAmC,UAAM;AACzC,KAAK;AACL;AACA,cAAc,UAAM;AACpB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA,+CAA+C,UAAM,IAAI,GAAG,iBAAiB;AAC7E;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAU;AACzB;AACA;AACA;AACA,kBAAkB,mEAAmE,GAAG,gEAAgE;AACxJ;AACA;AACA;AACA;AACA,wBAAwB,MAAM;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oBAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,cAAc,kCAAwB;AACtC;AACA,mBAAmB,iCAAuB,GAAG,kBAAkB;AAC/D;AACA;AACA;AACA;AACA;AACA,0CAAe;AACf,IAAI,UAAM;AACV;AACA;AACA;AACA;AACA,CAAC,EAAC;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClPA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACkD;AACL;AACG;AACR;AACI;;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZpB;AACA;AAC2C;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;ACpDA;AACA;AACyC;AACiB;AACD;AACd;AACK;AAChD,qBAAqB,gBAAM;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAM;AAC3C;AACA;AACA;AACA,wCAAwC,oBAAM;AAC9C;AACA;AACA;AACA,gCAAgC,oBAAM;AACtC;AACA;AACA;AACA,kCAAkC,oBAAM;AACxC;AACA;AACA;AACA,6BAA6B,oBAAM;AACnC;AACA;AACA;AACA;AACA,6CAA6C,4BAAc;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kBAAkB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,iBAAiB,wBAAU;AAC3B;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB,kCAAkC,iCAAiC;AACnE,iCAAiC,wBAAU;AAC3C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB,kCAAkC,aAAa;AAC/C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0BAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,6BAA6B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9eA;AACA;AACyD;AACd;AAC3C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,oBAAM;AACvC,mCAAmC,oBAAM;AACzC,mCAAmC,oBAAM;AACzC;AACA;AACA;AACA,mDAAmD,wCAAc;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,2CAA2C,wCAAc;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7KA;AACA;AAC0B;AACM;AACN;AAC1B;;;;;;ACLA;AACA;AAC0C;AACnC;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,wDAAwD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,0CAA0C,oBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,+BAA+B,oBAAK;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,sCAAsC,oBAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,qCAAqC,oBAAK;AACjD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,mFAAmF;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,mFAAmF;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,oEAAoE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,oEAAoE;AACzE,CAAC,wBAAwB;AACzB;;ACtGA;AACA;AACyC;AACzC;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,WAAW,0BAAS,GAAG;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0BAA0B;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACgE;AAChE;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC0D;AACf;AAC6D;AACjG;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,oBAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,cAAM;AACd;AACA,wBAAwB,iBAAa;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,wBAAwB;AAC9E;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA,kDAAkD,0BAA0B;AAC5E,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+BAA+B,yBAAyB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AC/OA;AACA;AAC2C;AACT;AACG;AACiF;AACtD;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B,4BAA4B,eAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oBAAM;AACtC,gCAAgC,oBAAM;AACtC,sCAAsC,oBAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,MAAM;AACrD;AACA,+CAA+C,MAAM;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,UAAU;AAClB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oBAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,MAAM;AACjD;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA,2CAA2C,MAAM;AACjD;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA,iEAAiE,MAAM;AACvE,iEAAiE,MAAM;AACvE;AACA;AACA;AACA,gDAAgD,wBAAwB;AACxE;AACA,+EAA+E,uBAAuB;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,0CAA0C,0BAA0B;AACpE,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvXA;AACA;AAC2D;AAChB;AACE;AACkB;AAC/D;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,WAAW;AACtE;AACA;AACA,4CAA4C,6BAA6B;AACzE;AACA,gFAAgF,qBAAqB;AACrG,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,6BAA6B;AAC1E,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,6BAA6B;AACzE,qBAAqB;AACrB;AACA;AACA;AACA;AACA,gCAAgC,oBAAM;AACtC,8BAA8B,oBAAM;AACpC,iCAAiC,oBAAM;AACvC,2BAA2B,oBAAM;AACjC,qCAAqC,oBAAM;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,iBAAiB,gCAAgC;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kBAAkB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA,kBAAkB,KAAK;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kBAAkB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF;AACzF;AACA,sBAAsB,UAAU;AAChC;AACA;AACA,6CAA6C,qBAAqB,kBAAkB,qBAAqB,8CAA8C,sBAAsB;AAC7K;AACA,0BAA0B,UAAU;AACpC;AACA;AACA,iDAAiD,qBAAqB,wBAAwB,sBAAsB;AACpH;AACA;AACA;AACA;AACA,+BAA+B,6BAA6B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,iBAAiB;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,0CAA0C;AACxD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAU;AAClC,oCAAoC,kCAAU;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,iBAAiB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8BAAM;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAAM;AAC1B,oBAAoB,8BAAM;AAC1B;AACA;AACA;AACA,CAAC,8DAA8D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA,mCAAmC,aAAa;AAChD;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;ACjcA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;;AC1EA;AACA;AACkD;AAClD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA,qBAAqB,YAAY;AACjC;AACA,SAAS;AACT;AACA;AACA;AACA;;ACrCA;AACA;AAC0B;AACO;AACT;AACxB;;ACLA;AACA;AAC2C;AACF;AACzC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,sCAAsC,oBAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5DA;AACA;AAC2D;AACH;AACb;AACO;AACE;AAC7C;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8BAAe;AACzC;AACA;AACA;AACA,oCAAoC,oBAAM;AAC1C;AACA;AACA;AACA;AACA;AACA,6CAA6C,uCAAgB;AAC7D,2CAA2C,kCAAU;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8BAAM,qBAAqB,sBAAsB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uCAAgB,+BAA+B,eAAe;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,GAAG,MAAM,GAAG,oBAAoB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;;ACvPA;AACA;AAC2C;AACuB;AAChB;AAClD;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,yBAAyB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,oBAAM;AAChD,0CAA0C,oBAAM;AAChD,4BAA4B,oBAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,UAAU;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2BAA2B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yCAAyC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,oBAAoB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,6BAA6B;AAC3C,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oBAAoB;AAChE,cAAc,oCAAoC;AAClD;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,oBAAM;AACrC,oCAAoC,oBAAM;AAC1C,gCAAgC,oBAAM;AACtC,mCAAmC,oBAAM;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,UAAU;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACn3BA;AACA;AACA;AACA;AACA;AACA;AAC2B;AACU;AACR;AACH;AACA;AACD;AACK;AACL;AACD;AACW;AACnC;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;;AAEA;AACwC;AACK;AACE;AACA;AACC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVhD;AACA;AACA;AACA;AACgD;AACQ;AACC;AACa;AACP;AACd;AACV;AACa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA,0BAA0B,uBAAI;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8BAAe;AAC3C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,mBAAmB;AAClD;AACA;AACA;AACA,wBAAwB;AACxB,aAAa;AACb,SAAS;AACT,uBAAuB,mBAAmB;AAC1C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,wCAAe,EAAE,gCAAS;AACzC,eAAe,8CAAoB,EAAE,qCAAW;AAChD;AACA,gBAAgB,WAAW;AAC3B,mFAAmF,wCAAc;AACjG;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,kCAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,MAAM;AACjF;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA,2BAA2B,+BAAO;AAClC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;ACxMA;AACA;AACA;AACA;AACA;AACA;AACiF;AACO;AAC7B;AACA;AACH;AACwB;AAC1B;AACsC;AACnD;AACG;AACH;AACK;AAC9C,MAAM,aAAS;AACf;AACA;AACA;AACO,IAAI,cAAU;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,cAAU,KAAK,cAAU,KAAK;AACjC;AACA;AACA;AACA,MAAM,UAAM;AACZ,QAAQ,aAAS;AACjB;AACA,eAAe,iBAAO,EAAE,qCAAW;AACnC,eAAe,6BAAe,EAAE,mBAAS,EAAE,8CAAgB;AAC3D,cAAc,gCAAS;AACvB;AACA,gBAAgB,WAAW;AAC3B;AACA,yBAAyB,+BAAQ;AACjC;AACA;AACA;AACA;AACA;AACA,6CAA6C,kBAAkB;AAC/D,aAAa,aAAa,+BAAQ;AAClC;AACA;AACA;AACA;AACA,2BAA2B,kCAAU;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,cAAU;AACtC;AACA;AACA,SAAS;AACT,4BAA4B,cAAU;AACtC;AACA;AACA,SAAS;AACT,4BAA4B,cAAU;AACtC;AACA;AACA,SAAS;AACT,4BAA4B,cAAU;AACtC;AACA;AACA,SAAS;AACT,4BAA4B,cAAU;AACtC;AACA;AACA,SAAS;AACT,4BAA4B,cAAU;AACtC;AACA;AACA,SAAS;AACT,4BAA4B,cAAU;AACtC;AACA;AACA,SAAS;AACT,4BAA4B,cAAU;AACtC;AACA;AACA,SAAS;AACT,4BAA4B,cAAU;AACtC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,cAAU;AACnC;AACA,aAAa;AACb;AACA,yBAAyB,cAAU;AACnC;AACA,aAAa;AACb;AACA,yBAAyB,cAAU;AACnC;AACA,aAAa;AACb;AACA,yBAAyB,cAAU;AACnC;AACA,aAAa;AACb;AACA,sCAAsC,WAAW;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,wBAAwB,cAAU;AAClC;AACA;AACA;AACA;AACA;AACA,mBAAmB,4BAAU;AAC7B;AACA;AACA;AACA,oBAAoB,oBAAM;AAC1B,oBAAoB,oBAAM,cAAc,8BAA8B;AACtE;AACA,aAAa;AACb;AACA,oCAAoC,uCAAgB;AACpD,mCAAmC,8BAAM;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,EAAE;AACpF;AACA,2BAA2B,uCAAgB,uBAAuB,gBAAgB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAAU;AAC3C;AACA,0CAA0C,yBAAM,GAAG,YAAY;AAC/D;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,sCAAsC,uCAAgB;AACtD;AACA,qBAAqB;AACrB;AACA,kCAAkC,uCAAgB;AAClD,qBAAqB;AACrB;AACA,aAAa;AACb;AACA,KAAK;AACL,wBAAwB,cAAU;AAClC;AACA;AACA;AACA;AACA;AACA,yCAAyC,YAAY;AACrD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,qBAAqB,8BAA8B,oCAAQ,eAAe;AAC1E;AACA,KAAK;AACL,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,qBAAqB,8BAA8B,uCAAW,eAAe;AAC7E;AACA,KAAK;AACL,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,wBAAwB,cAAU;AAClC;AACA;AACA;AACA,SAAS;AACT;AACA,mBAAmB,4BAAU;AAC7B;AACA;AACA;AACA,oBAAoB,oBAAM;AAC1B,oBAAoB,oBAAM,cAAc,kCAAkC;AAC1E;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,0CAA0C,mCAAO;AACjD,SAAS;AACT;AACA,KAAK;AACL,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,0CAA0C,2CAAe;AACzD,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAU;AAClC;AACA;AACA;AACA;AACA;AACA,2BAA2B,sBAAI;AAC/B;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,wBAAwB,cAAU;AAClC;AACA;AACA,wCAAwC,cAAU,iBAAiB,gBAAgB;AACnF,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAU;AAC3C,gCAAgC;AAChC,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B,IAAI,gCAAkB;AACtB,YAAY,cAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,0CAAe,CAAC,UAAM,EAAE,iBAAiB,CAAC,EAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,4BAAU;AACvC;AACA;AACA;AACA,gBAAgB,oBAAM;AACtB,gBAAgB,oBAAM,YAAY,2BAA2B;AAC7D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,2CAA2C,6CAAe;AAC1D;AACA;AACA;AACA,8CAA8C,6CAAe;AAC7D;AACA,kCAAkC,YAAY,+HAA+H;AAC7K;AACA;AACA,2BAA2B,aAAS;AACpC;AACA;AACA;AACA;AACA,gCAAgC,sBAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6CAAe;AAC1C;AACA,gCAAgC;AAChC;AACA,aAAa;AACb;AACA;AACA;AACA,gCAAgC,sBAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,6CAA6C,aAAS;AACtD,mCAAmC,sBAAO;AAC1C;AACA;AACA,QAAQ,yBAAW;AACnB;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAe;AACtC;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAO;AACxB;AACA;AACA,SAAS;AACT;AACA;AACA,2BAA2B,aAAS;AACpC;AACA;AACA;AACA,qBAAqB,sBAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,sBAAO;AAChD;AACA,sCAAsC,6CAAe;AACrD;AACA;AACA;AACA;AACA;AACA,uCAAuC,6CAAe;AACtD;AACA,yBAAyB;AACzB,wBAAwB,yBAAW;AACnC;AACA,yBAAyB;AACzB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;AC9tBA;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACG;AACD;AACC;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZ7C;AACA;AACuD;AACA;AACvD;AACA;AACA;AACO,uBAAuB,oBAAU;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAAe;AACrC,sBAAsB,6BAAe;AACrC;AACA;AACA,0BAA0B,6BAAe;AACzC,8BAA8B,6BAAe;AAC7C;AACA,8BAA8B,6BAAe;AAC7C;AACA;AACA;;ACxBA;AACA;AACuD;AACd;AACc;AACvD;AACA;AACA;AACO,uBAAuB,oBAAU;AACxC;AACA;AACA;AACA,oCAAoC,6BAAe;AACnD,mCAAmC,6BAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAI,uBAAuB,QAAQ,qGAAqG,yFAAyF,oBAAU;AACvQ;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACuD;AACA;AACvD;AACA;AACA;AACO,uBAAuB,oBAAU;AACxC;AACA;AACA;AACA;AACA;AACA,6BAA6B,6BAAe;AAC5C;AACA;AACA;;AChBA;AACA;AACuD;AACA;AACvD;AACA;AACA;AACO,yBAAyB,oBAAU;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,6BAAe;AAC7C,6BAA6B,6BAAe;AAC5C,iCAAiC,6BAAe;AAChD,mCAAmC,6BAAe;AAClD,+BAA+B,6BAAe;AAC9C,gCAAgC,6BAAe;AAC/C;AACA;AACA;AACA;;ACvBA;AACA;AACuD;AACA;AACvD;AACA;AACA;AACO,sBAAsB,oBAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6BAAe;AACxC,qBAAqB,6BAAe;AACpC,wBAAwB,6BAAe;AACvC;AACA;AACA;AACA;;ACpBA;AACA;AACuD;AACvD;AACA;AACA;AACO,2BAA2B,oBAAU;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACuD;AACvD;AACA;AACA;AACO,uBAAuB,oBAAU;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACuD;AACA;AACvD;AACA;AACA;AACO,uBAAuB,oBAAU;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,6BAAe;AAClD,qCAAqC,6BAAe;AACpD,gCAAgC,6BAAe;AAC/C;AACA;AACA;AACA;;ACpBA;AACA;AAC6E;AAChC;AACH;AACR;AACA;AACA;AACI;AACN;AACU;AACR;AACA;AAClC;AACA;AACA;AACO,uBAAuB,0BAAO;AACrC;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA,0BAA0B,iBAAO;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA,0BAA0B,iBAAO;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA,0BAA0B,iBAAO;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA,0BAA0B,iBAAO;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA,0BAA0B,iBAAO;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA,0BAA0B,iBAAO;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA,0BAA0B,iBAAO;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA,0BAA0B,iBAAO;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,YAAY,sBAAQ;AACpB;AACA;AACA;AACA,QAAQ,iBAAO;AACf;AACA;AACA;AACA;AACA,kBAAkB,qBAAW;AAC7B,2BAA2B;AAC3B,sBAAsB,sBAAQ;AAC9B;AACA;AACA,QAAQ,sBAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,QAAQ;AAC/D;AACA;AACA;AACA;AACA,uDAAuD,QAAQ;AAC/D;AACA;AACA;AACA;AACA,uDAAuD,QAAQ;AAC/D;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA,yDAAyD,UAAU;AACnE;AACA;AACA;AACA;AACA,uDAAuD,QAAQ;AAC/D;AACA;AACA;AACA;AACA,2DAA2D,YAAY;AACvE;AACA;AACA;AACA;AACA,uDAAuD,QAAQ;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA,2BAA2B,QAAQ;AACnC;AACA;AACA,8BAA8B,iBAAO;AACrC,iBAAiB;AACjB;AACA;AACA,2BAA2B,QAAQ;AACnC;AACA;AACA,8BAA8B,iBAAO;AACrC,iBAAiB;AACjB;AACA;AACA,2BAA2B,QAAQ;AACnC;AACA;AACA,8BAA8B,iBAAO;AACrC,iBAAiB;AACjB;AACA;AACA,2BAA2B,OAAO;AAClC;AACA;AACA,8BAA8B,iBAAO;AACrC,iBAAiB;AACjB;AACA;AACA,2BAA2B,UAAU;AACrC;AACA;AACA,8BAA8B,iBAAO;AACrC,iBAAiB;AACjB;AACA;AACA,2BAA2B,QAAQ;AACnC;AACA;AACA,8BAA8B,iBAAO;AACrC,iBAAiB;AACjB;AACA;AACA,2BAA2B,YAAY;AACvC;AACA;AACA,8BAA8B,iBAAO;AACrC,iBAAiB;AACjB;AACA;AACA,2BAA2B,QAAQ;AACnC;AACA;AACA,8BAA8B,iBAAO;AACrC,iBAAiB;AACjB;AACA;AACA,2BAA2B,oBAAU;AACrC;AACA;AACA,8BAA8B,iBAAO;AACrC,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sBAAQ;AAC9B;AACA,YAAY,sBAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;AC3TA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,sBAAsB,oBAAK;AAClC;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AAC2B;AACJ;AACA;AACA;AACE;AACH;AACK;AACJ;AACA;AACE;AACzB;;;;;;;;;;;AChBA;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACR7C;AACA;AACA;AACA;AACA;AACA;AAC0D;AACO;AACjB;AACiG;AAC3D;AACvB;AACJ;AACL;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,8EAAsB;AACpC,eAAe,uEAAmB,EAAE,gEAAW;AAC/C;AACA,QAAQ,oEAAe;AACvB,QAAQ,yEAAgB;AACxB,QAAQ,qEAAwB;AAChC,QAAQ,4DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wBAAwB;AACpC;AACA,0BAA0B,2EAAuB;AACjD;AACA,wBAAwB,+DAAa;AACrC;AACA,KAAK;AACL;AACA,WAAW,sEAAc;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,wBAAwB,6EAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAA6C;AAC5E;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,+BAA+B,0DAAO;AACtC,SAAS;AACT;AACA,KAAK;AACL;AACA,4BAA4B,4FAAoC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,MAAM,EAAC;AACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7JA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACK;AACE;AACC;AACR;;AAEpB;;;ACZpB;AACA;AACA;AACA;;AAEA;AAC6C;AACE;AACC;AACR;AACW;;;;;;;;;;;;;;;;;;;;;;;;;ACVnD;AACA;AACqG;AACrG;AACA;AACA;AACO,iDAAiD,8BAAoB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8BAAoB,gBAAgB,8BAAoB;AACjF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACO,mDAAmD,gCAAsB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,iBAAiB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8BAAoB;AAChC;AACA;AACA;AACA;AACA,wCAAwC,8BAAoB;AAC5D;AACA;AACA;AACA,qCAAqC,cAAc,OAAO,sBAAsB;AAChF,8CAA8C,8BAAoB;AAClE,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;;;;ACjIA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,mCAAmC,oBAAK;AAC/C;AACA;;;;;;;;;;;;;;;;ACRA;AACA;AACwD;AACA;AACmB;AACxB;AACM;AACL;AACT;AACa;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,6BAA6B,yBAAM;AAC1C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,0BAA0B,8BAAe;AACzC;AACA;AACA,6BAA6B,oBAAM;AACnC;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA;AACA,0CAA0C,gCAAa;AACvD;AACA;AACA;AACA;AACA,gCAAgC,uCAAe;AAC/C;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,UAAU;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kCAAS;AACvC;AACA,wBAAwB;AACxB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,iBAAiB,kCAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACO,+BAA+B,wCAAc;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,oCAAoC,0CAAgB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,6CAA6C,mBAAmB;AAChE;AACA;AACA;AACA;AACA,8CAA8C,kBAAkB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;AC5QA;AACA;AACA;AACA;AACA;AACA;AACsB;AACG;AACA;AACzB;;;;;;;;;;;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoD;AACH;AACgB;AACR;AACF;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mEAAe;AAC7B,eAAe,2EAAuB;AACtC,eAAe,iEAAgB;AAC/B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,iEAAe,MAAM,EAAC;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2DAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,YAAY,+HAA+H;AACtL,4BAA4B,8DAAe;AAC3C;AACA,iBAAiB,kBAAkB;AACnC,YAAY,0GAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0GAA+B;AAC/D,gCAAgC,0GAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;AACvD;AACA;AACA;AACA;AACA;AACA,iDAAiD,qBAAqB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA,uBAAuB,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,KAAK,IAAI,aAAa;AAC7E;AACA;AACA;AACA,iDAAiD,MAAM;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/LA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AAC+C;AACC;AACD;AACH;;AAExB;;;;;;;;;;;;;;;;;;ACXpB;AACA;AACA;AACA;AACA;AACA;AACoD;AACM;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oEAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,mEAAmE,cAAc;AACjF,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,iEAAe,aAAa,EAAC;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,8DAAe;AAC1C,iBAAiB,kLAAgE;AACjF,qBAAqB,SAAS,IAAI,OAAO,IAAI,KAAK,IAAI,SAAS,IAAI,aAAa,IAAI,aAAa,IAAI,aAAa,IAAI,gBAAgB,IAAI,qBAAqB;AAC/J,gBAAgB,qGAAiC;AACjD,gBAAgB,8MAAsC;AACtD,gBAAgB,gNAAmC;AACnD,gBAAgB,sJAAgD;AAChE,gBAAgB,0MAA+C;AAC/D,gBAAgB,2GAA6C;AAC7D,gBAAgB,8MAAmD;AACnE,gBAAgB,oGAAiD;AACjE,gBAAgB,8MAA4C;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzIA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AAC+C;AACC;;AAE5B;;;;;;;;;;;;;;;;;;;;ACTpB;AACA;AACqD;AACwG;AACvF;AACtE;AACA;AACA;AACO;AACP;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAa;AAC5B,cAAc,gEAAe;AAC7B;AACA,4BAA4B,+DAAc,GAAG,QAAQ;AACrD,QAAQ,gEAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gEAAe;AAC9B,cAAc,iEAAgB;AAC9B;AACA,mBAAmB,gEAAe,GAAG,SAAS;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gEAAe;AAC9B,eAAe,gEAAW;AAC1B;AACA,4DAA4D,8DAAa;AACzE,mFAAmF,mEAAc;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,mEAAkB,CAAC;AACvE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,0BAA0B,cAAc,8DAAa,CAAC;AACtD,kCAAkC,4CAA4C;AAC9E,kCAAkC,+BAA+B;AACjE;AACA;AACA,iEAAe,iCAAiC,EAAC;AACjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvEA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AAC6C;AACG;AACJ;;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVpB;AACA;AAC0C;AAC1C;AACO;AACA;AACP;AACO;AACP;AACO;AACA;AACP;AACO;AACA;AACA;AACA;AACA;AACP;AACA;AACA;AACO,4BAA4B,eAAK;AACxC;AACA;AACA;AACO,6BAA6B,eAAK;AACzC;;ACzBA;AACA;AACoD;AACH;AACyH;AAC1K;AACA;AACA;AACO;AACP,4BAA4B;AAC5B,6BAA6B,sBAAQ,GAAG,uCAAuC;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uBAAuB,EAAE,IAAI;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,wBAAwB;AACzD;AACA;AACA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,aAAa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kBAAkB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,IAAI;AAClC;AACA;AACA,2BAA2B,aAAa;AACxC;AACA,4BAA4B,aAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,6BAA6B;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA,sBAAsB,qBAAqB;AAC3C,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,yBAAe;AACtC,0BAA0B,2GAA8B;AACxD,8CAA8C,yMAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,mBAAmB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yBAAe;AACzC;AACA,8BAA8B,oGAAgC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,MAAM;AAC5B;AACA,mBAAmB,KAAK,EAAE,KAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,sBAAsB;AACtB,sBAAsB;AACtB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,yBAAyB;AACzB,sBAAsB;AACtB,sBAAsB;AACtB,mBAAmB;AACnB,qBAAqB;AACrB,qBAAqB;AACrB,sBAAsB;AACtB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,qBAAqB;AACrB,qBAAqB;AACrB,uBAAuB;AACvB,qBAAqB;AACrB,qBAAqB;AACrB,uBAAuB;AACvB,sBAAsB;AACtB,qBAAqB;AACrB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,qBAAqB;AACrB,oBAAoB;AACpB,oBAAoB;AACpB,qBAAqB;AACrB,uBAAuB;AACvB,sBAAsB;AACtB,qBAAqB;AACrB,uBAAuB;AACvB,qBAAqB;AACrB,uBAAuB;AACvB,wBAAwB;AACxB,wBAAwB;AACxB,sBAAsB;AACtB,sBAAsB;AACtB,oBAAoB;AACpB,sBAAsB;AACtB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,wBAAwB;AACxB,wBAAwB;AACxB,uBAAuB;AACvB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,qBAAqB;AACrB,qBAAqB;AACrB,uBAAuB;AACvB,qBAAqB;AACrB,wBAAwB;AACxB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,oBAAoB;AACpB,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,wBAAwB;AACxB,wBAAwB;AACxB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;AACrB,uBAAuB;AACvB,sBAAsB;AACtB,qBAAqB;AACrB,qBAAqB;AACrB,sBAAsB;AACtB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,sBAAsB;AACtB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,oBAAoB;AACpB,wBAAwB;AACxB,wBAAwB;AACxB,qBAAqB;AACrB,qBAAqB;AACrB,wBAAwB;AACxB,uBAAuB;AACvB,kBAAkB;AAClB,qBAAqB;AACrB,uBAAuB;AACvB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,mBAAmB;AACnB,mBAAmB;AACnB,uBAAuB;AACvB,qBAAqB;AACrB,uBAAuB;AACvB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,uBAAuB;AACvB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,mBAAmB;AACnB,mBAAmB;AACnB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,sBAAsB;AACtB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,wBAAwB;AACxB,wBAAwB;AACxB,uBAAuB;AACvB,oBAAoB;AACpB,qBAAqB;AACrB,qBAAqB;AACrB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,wBAAwB;AACxB,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;AACrB,sBAAsB;AACtB,wBAAwB;AACxB,sBAAsB;AACtB,oBAAoB;AACpB,oBAAoB;AACpB,mBAAmB;AACnB,mBAAmB;AACnB,oBAAoB;AACpB,uBAAuB;AACvB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,sBAAsB;AACtB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,oBAAoB;AACpB,wBAAwB;AACxB,oBAAoB;AACpB,oBAAoB;AACpB,qBAAqB;AACrB,wBAAwB;AACxB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,qBAAqB;AACrB,oBAAoB;AACpB,sBAAsB;AACtB,sBAAsB;AACtB,uBAAuB;AACvB,qBAAqB;AACrB,wBAAwB;AACxB,qBAAqB;AACrB,sBAAsB;AACtB,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;AACrB,sBAAsB;AACtB,sBAAsB;AACtB,oBAAoB;AACpB,oBAAoB;AACpB,wBAAwB;AACxB,sBAAsB;AACtB,sBAAsB;AACtB,yBAAyB;AACzB,wBAAwB;AACxB,sBAAsB;AACtB,sBAAsB;AACtB,sBAAsB;AACtB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,sBAAsB;AACtB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,oBAAoB;AACpB,sBAAsB;AACtB,wBAAwB;AACxB,wBAAwB;AACxB,qBAAqB;AACrB,qBAAqB;AACrB,wBAAwB;AACxB,mBAAmB;AACnB,mBAAmB;AACnB,uBAAuB;AACvB,uBAAuB;AACvB,oBAAoB;AACpB,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;AACrB,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,MAAM,cAAc,EAAE,sBAAsB,EAAE,YAAY;AAC1D,CAAC,0BAA0B;AAC3B;;AC1lBA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2E;AACvB;AACX;AACzC;AACA;AACA;AACA;AACO,8BAA8B,oBAAM;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,aAAa;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,aAAa;AACnD,oCAAoC,aAAa;AACjD;AACA;AACA,uCAAuC,aAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB,OAAO;AACvD;AACA;AACA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA,iBAAiB;AACjB;AACA;AACA;AACA,qCAAqC;AACrC;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA,oCAAoC,yBAAe;AACnD;AACA;AACA;AACO;AACP;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AAC0B;AACC;AACJ;AACE;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACK;;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;ACTpB;AACA;AACA;AACA;AACA;AACA;AACsD;AACS;AACT;AACY;AACtB;AAC+D;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,aAAa;AACb;AACA;AACA;AACA,gCAAgC,sDAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,kCAAkC,0EAAoB;AACtD;AACA;AACA;AACA;AACA,iCAAiC,sDAAO;AACxC;AACA;AACA,2BAA2B,sDAAO;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,6BAA6B,wEAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,oCAAoC,gCAAgC;AACpE;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gEAAc;AACtB,QAAQ,gEAAW;AACnB,QAAQ,4EAAqB;AAC7B,QAAQ,yEAAgB;AACxB;AACA,cAAc,2EAAqB;AACnC;AACA;AACA;AACA;AACA,iEAAe,YAAY,EAAC;AAC5B;;;;;;;;;;;;AC3OA;AACA;AACA;AACA;;AAEA;AACkD;AACF;AACH;AACI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTjD;AACA;AACA;AACA;AACA;AACA;AACmD;AACO;AACT;AACvB;AAC1B;AACA;AACA;AACO,yBAAyB,qBAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAmB,CAAC,2BAAa,IAAI,WAAW,uCAAa,6KAA6K,qBAAqB;AAC/Q,8EAA8E;AAC9E,aAAa,wGAAwG;AACrH;AACA;AACA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACqD;AACM;AACF;AACb;AACc;AACtB;AACpC;AACA;AACA;AACO,iCAAiC,oCAAa;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA,0CAA0C,6BAAe;AACzD;AACA;AACA;AACA;AACA;AACA,gCAAgC,oBAAM,GAAG,MAAM;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sBAAO;AACtC;AACA,+EAA+E,sBAAO;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,0CAAY;AACtC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;AC/XA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,GAAG;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,GAAG;AACjF;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,kCAAkC,oBAAK;AAC9C;;ACXA;AACA;AACA;AACA;AACA;AACA;AACuB;AACQ;AACQ;AACf;AACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACA;;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;ACXpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC4C;AAC5C;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sDAAO;AAClB;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3GA;AACA;AACsE;AACtE;AACA;AACA;AACO;AACP;AACA;AACA;AACA,cAAc,4CAAqB;AACnC;AACA,+BAA+B,OAAO,kCAAE;AACxC;AACA;AACA;;;;;;ACfA;AACA;AACyD;AACD;AACH;AACrD;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,uCAAgB;AAC/B,eAAe,wCAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oCAAa;AAC7B,gBAAgB,oCAAa;AAC7B,gBAAgB,oCAAa;AAC7B,gBAAgB,oCAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oCAAa;AACjC,qBAAqB,oCAAa;AAClC;AACA;AACA,6BAA6B,6BAA6B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClDA;AACA;AACA;AACA;AAC0B;AAC2B;AACC;AACN;AACJ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,6BAA6B,oCAAa;AACjD;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA,0BAA0B,sCAAW;AACrC,gCAAgC,+BAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iCAAM,GAAG,MAAM;AACjD;AACA;AACA;AACA;AACA,sDAAsD,0EAA0E;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oCAAS;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAmB,UAAU,kFAAkF;AAC9H;AACA;AACA;AACA;AACA;AACA;;;;AC7EA;AACA;AACA;AACA;AAC0B;AAC2B;AACI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,gCAAgC,oCAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wCAAc,GAAG,6BAA6B;AAChE;AACA;AACA,gBAAgB,sCAAmB,UAAU,uCAAuC;AACpF,YAAY,sCAAmB,UAAU,kFAAkF;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,oCAAoC,oCAAa;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wCAAc,GAAG,gFAAgF;AACnH;AACA;AACA,gBAAgB,sCAAmB,UAAU,2CAA2C;AACxF,YAAY,sCAAmB,UAAU,kFAAkF;AAC3H;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AAC8E;AAC2M;AACxO;AACwB;AACtB;AACwC;AACxB;AACT;AACyB;AACd;AACc;AAClC;AACwF;AACxF;AACgB;AAC2U;AAChU;AACE;AACf;AAChB;AACI;AACQ;AACW;AACwL;AACjN;AACK;AACC;AACH;AACR;AACM;AACC;AACsB;AAC0B;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,uCAAgB;AAC9B;AACA,QAAQ,6CAAsB;AAC9B,QAAQ,iDAAwB;AAChC,QAAQ,4CAAqB;AAC7B;AACA;AACA,QAAQ,6BAAe;AACvB,QAAQ,6CAAmB;AAC3B,QAAQ,gCAAS;AACjB,QAAQ,yBAAe;AACvB,QAAQ,gCAAS;AACjB,QAAQ,iBAAO;AACf,QAAQ,8CAAgB;AACxB,QAAQ,oCAAsB;AAC9B,QAAQ,qCAAW;AACnB,QAAQ,iDAAqB;AAC7B,QAAQ,6CAAmB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oCAAa;AAC3B,eAAe,wCAAe;AAC9B;AACA;AACA;AACA,mBAAmB,oCAAa,kBAAkB,eAAe;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,qCAAc;AAC5B;AACA;AACA;AACA;AACA,QAAQ,uCAAgB;AACxB,QAAQ,wCAAe;AACvB,QAAQ,gDAAuB;AAC/B,QAAQ,8BAAQ;AAChB,QAAQ,qCAAW;AACnB;AACA,eAAe,2DAA0B;AACzC;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,uCAAgB,EAAE,qCAAW;AAC5C,eAAe,kCAAU;AACzB;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,yBAAyB,wCAAiB;AAC1C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,uCAAgB,EAAE,mBAAS,EAAE,qCAAW;AACvD,eAAe,kCAAU,EAAE,8CAAgB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,8BAA8B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,yCAAkB;AAC1D;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,yCAAkB;AACjD,kEAAkE,yCAAkB;AACpF,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,qCAAW,EAAE,uCAAgB;AAC5C,eAAe,gCAAS,EAAE,6BAAe;AACzC;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,4BAA4B,kCAAU;AACtC;AACA;AACA;AACA,iBAAiB;AACjB,wBAAwB,UAAU;AAClC;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,eAAe,uCAAgB,EAAE,qCAAW;AAC5C,eAAe,kCAAU;AACzB;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,yBAAyB,0CAAmB;AAC5C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,6CAAsB;AACpC;AACA,QAAQ,oCAAa;AACrB,QAAQ,wCAAe;AACvB,QAAQ,4CAAmB;AAC3B,QAAQ,oCAAsB;AAC9B;AACA,eAAe,8CAAgB,EAAE,oCAAsB,EAAE,qCAAW;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yCAAgB,EAAE,uCAAgB,EAAE,qCAAW;AAC9D,eAAe,yBAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uCAAgB,EAAE,qCAAW;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAW,EAAE,uCAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,eAAe,uCAAgB,EAAE,gCAAkB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,eAAe,uCAAgB,EAAE,uCAAc;AAC/C;AACA;AACA;AACA;AACA;AACA,eAAe,uCAAgB;AAC/B,eAAe,kDAA0B,EAAE,qCAAW,EAAE,wBAAU;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oDAAuB;AACtC;AACA;AACA,kDAAkD,6CAAsB;AACxE;AACA;AACA;AACA;AACA;AACA,eAAe,uCAAgB,EAAE,0CAAwB,EAAE,wBAAU;AACrE,eAAe,wCAAe,EAAE,8CAAgB;AAChD;AACA;AACA,iCAAiC,yCAAkB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uCAAgB;AACxB,QAAQ,+CAA6B;AACrC,QAAQ,oCAAkB;AAC1B,QAAQ,2CAAyB;AACjC,QAAQ,0CAAwB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uCAAgB,EAAE,gDAAqB,EAAE,qCAAW;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uCAAgB,EAAE,wCAAe,EAAE,iDAAqB;AACvE,eAAe,qCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uCAAgB,EAAE,iDAAqB,EAAE,gDAAuB;AAC/E;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAAe,OAAO,EAAC;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,oCAAa,GAAG,qBAAqB;AACnE;AACA;AACA;AACA;AACA,sCAAsC,YAAY;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qCAAS;AACxC;AACA;AACA,IAAI,wCAAW;AACf;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,wCAAc;AACpG,sIAAsI,mCAAqB,GAAG,YAAY;AAC1K,+BAA+B,kCAAU;AACzC;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA,yDAAyD,+CAAe;AACxE,6DAA6D,mCAAY;AACzE,+DAA+D,qBAAO;AACtE;AACA;AACA,0BAA0B,yCAAkB;AAC5C;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,yBAAyB,sCAAoB;AAC7C;AACA;AACA,wBAAwB,4CAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qCAAc;AACpC,wBAAwB,qCAAc;AACtC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,2BAAa;AAC3C;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+BAA+B,oBAAoB,GAAG,qBAAqB;AAC3E;AACA,SAAS;AACT;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+BAA+B,4BAAc,GAAG,SAAS;AACzD;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,0CAAe;AACnB,sFAAsF,wCAAc;AACpG,0GAA0G,mCAAqB,GAAG,YAAY;AAC9I;AACA;AACA,YAAY,kBAAkB;AAC9B,wBAAwB,sCAAe,GAAG,uBAAuB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+IAA+I,sBAAsB;AACrK;AACA;AACA;AACA,8DAA8D,iBAAiB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,YAAY;AACnE,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,gBAAgB,yBAAW;AAC3B;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4CAA4C;AAC1E;AACA;AACA,SAAS;AACT;AACA;AACA,6BAA6B,2CAAoB;AACjD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,6CAA6C,KAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAc;AAC7B;AACA;AACA;AACA,eAAe,qCAAc;AAC7B;AACA;AACA;AACA,eAAe,qCAAc;AAC7B;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qDAAqD;AAC1E,sBAAsB,sDAAsD,WAAW;AACvF;AACA;AACA;AACA;AACA;AACA,wEAAwE,sBAAsB,IAAI,uBAAuB;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,uDAAuD,wCAAY;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gCAAa;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oCAAoC;AACpE;AACA;AACA;AACA;AACA,oCAAoC,sBAAO,6BAA6B;AACxE;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,wCAAc;AAC7F,4FAA4F,uBAAS;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sCAAe;AAC3C;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,wBAAwB,6BAAe;AACvC,wDAAwD,6BAAe;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gCAAY;AAC5C,gBAAgB,sCAAe;AAC/B;AACA;AACA,gBAAgB,sCAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,sCAAe;AAC3B,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,sCAAsC,mCAAO;AAC7C,KAAK;AACL;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,sCAAsC,uCAAW;AACjD,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,4BAAU;AAC7B;AACA;AACA,0BAA0B,oBAAM,iBAAiB,oBAAM;AACvD,aAAa;AACb;AACA;AACA,wDAAwD,iBAAiB;AACzE;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,sCAAsC,2CAAe;AACrD,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,sCAAsC,oCAAQ;AAC9C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT,sCAAsC,mCAAO;AAC7C;AACA,KAAK;AACL;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT,sCAAsC,oCAAQ;AAC9C;AACA,KAAK;AACL;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT,sCAAsC,qCAAS;AAC/C;AACA,KAAK;AACL;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA;AACA,gBAAgB,sCAAe;AAC/B;AACA,SAAS;AACT,sCAAsC,yCAAa;AACnD;AACA,KAAK;AACL;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT,sCAAsC,wCAAY;AAClD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT,sCAAsC,wCAAY;AAClD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA;AACA,gBAAgB,sCAAe;AAC/B;AACA;AACA,SAAS;AACT;AACA,yDAAyD,0BAA0B;AACnF;AACA;AACA;AACA;AACA,SAAS;AACT,sCAAsC,sCAAU;AAChD,KAAK;AACL;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA,SAAS;AACT;AACA;AACA;AACA,gBAAgB,sCAAe;AAC/B;AACA;AACA,SAAS;AACT;AACA,yDAAyD,0BAA0B;AACnF;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,sCAAsC,wCAAY;AAClD,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sCAAe;AAC1C;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAe;AACtC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA;AACA;AACA;AACA;AACA,sCAAsC,gCAAY;AAClD;AACA;AACA,kEAAkE,kBAAkB;AACpF;AACA,wCAAwC,gCAAY;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sCAAe;AAChC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,6BAA6B,sCAAe;AAC5C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,6BAA6B,sCAAe;AAC5C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,sCAAsC,yCAAa;AACnD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,mBAAmB;AAC7C,KAAK;AACL;AACA;AACA;AACA,gBAAgB;AAChB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,mBAAmB;AAC7C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,8CAA8C,kCAAkC;AAChF;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA,4CAA4C,gCAAY;AACxD;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,gBAAgB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gCAAK;AACxC;AACA;AACA;AACA,iDAAiD,wCAAc;AAC/D;AACA;AACA;AACA,0CAA0C,mBAAI,SAAS;AACvD;AACA,8BAA8B,wCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClgGA;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACJ;AACD;AACE;AACA;AACC;AACA;AACG;AACJ;AACA;AACC;AACR;AACE;AACI;AACW;AACZ;AACE;AACP;AACK;AACA;AACI;AACM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BvD;AACA;AAC0D;AACb;AACY;AACX;AACN;AACxC;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,oBAAO,GAAG,sHAAsH;AACtJ;AACA,6EAA6E,wCAAc;AAC3F;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA,0BAA0B,wBAAU;AACpC;AACA;AACA,kCAAkC,gBAAM;AACxC,qBAAqB;AACrB;AACA;AACA;AACA,0BAA0B,wBAAU;AACpC;AACA;AACA,kCAAkC,gBAAM;AACxC,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,2CAA2C,MAAM;AACjD;AACA;AACA,wCAAwC,sBAAQ;AAChD;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,WAAW;AACjD;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAAS;AAC3B;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AC7JA;AACA;AACqE;AACiB;AAClC;AACI;AACC;AACJ;AACT;AACD;AACZ;AAC4B;AAC3D;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,WAAW,EAAE,WAAW;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+BAA+B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gCAAc,WAAW,qCAAmB;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,+BAA+B,0BAAY;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,sBAAsB,2CAAe;AACrC;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,2CAAe;AACjC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,mBAAS;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6BAA6B;AACjD,wBAAwB,iCAAiC;AACzD,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,6CAA6C,uBAAuB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,6CAA6C,uBAAuB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,2BAAS;AAC/B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,YAAY;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2BAAS;AAC7B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,2BAAS;AAC/B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0BAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAAY;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0BAAY;AAC1C,qBAAqB;AACrB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAc;AACjD;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAK;AAC7B;AACA,8BAA8B,6BAAmB;AACjD;AACA,YAAY,6BAAmB;AAC/B;AACA,YAAY,6BAAmB;AAC/B;AACA;AACA,YAAY,6BAAmB,QAAQ,+HAA+H;AACtK;AACA;AACA,mBAAmB,wBAAU;AAC7B;AACA,0BAA0B,gBAAM;AAChC,aAAa;AACb;AACA,eAAe,wBAAU;AACzB;AACA;AACA;AACA,gBAAgB,gBAAM;AACtB,gBAAgB,gBAAM;AACtB;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,yDAAyD,4CAA4C;AACrG,gBAAgB,aAAa;AAC7B,gBAAgB,gCAAgC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yBAAM,GAAG;AACpC;AACA;AACA;AACA,qCAAqC,yBAAM,GAAG;AAC9C;AACA;AACA;AACA,oCAAoC,yBAAM,GAAG;AAC7C;AACA;AACA;AACA,gCAAgC,yBAAM,GAAG;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wCAAc;AACzD;AACA,gBAAgB,sBAAY,0BAA0B,iCAAiC,SAAS,oBAAoB;AACpH;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mBAAmB;AAC3D,aAAa;AACb;AACA,kDAAkD,mBAAmB;AACrE,aAAa;AACb;AACA;AACA;AACA;AACA,sEAAsE,oBAAc;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,mBAAS;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wCAAc;AACzD;AACA;AACA,qBAAqB,wBAAU;AAC/B;AACA;AACA,8BAA8B,gBAAM;AACpC,iBAAiB;AACjB;AACA;AACA;AACA,2CAA2C,wCAAc;AACzD;AACA;AACA,qBAAqB,wBAAU;AAC/B;AACA;AACA,8BAA8B,gBAAM;AACpC,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,sBAAsB,2CAAe;AACrC;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,uDAAuD;AAC5D,CAAC,0BAA0B;AAC3B;;AC92EA;AACA;AACmF;AACxC;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yBAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,2BAAa;AACjD;AACA,qBAAqB;AACrB;AACA;AACA;AACA,oCAAoC,+BAAiB;AACrD;AACA,qBAAqB;AACrB;AACA;AACA;AACA,oCAAoC,0BAAY;AAChD;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;;AC1IA;AACA;AACwG;AAC/C;AACwK;AAClM;AACa;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,wCAAc;AACnD;AACA;AACA,uBAAuB,wBAAU;AACjC;AACA;AACA,8BAA8B,gBAAM;AACpC,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,eAAe,qDAAqB,CAAC,uCAAW,QAAQ,6BAAmB,CAAC,qCAAS,IAAI,mCAAmC,SAAS,6BAAmB,CAAC,kDAAsB,IAAI,MAAM,oCAAQ;AACjM;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,wCAAc;AACnD,mBAAmB,yCAAa;AAChC,kBAAkB,mCAAO;AACzB;AACA,gBAAgB,eAAe;AAC/B,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,wCAAc;AACnD,mBAAmB,yCAAa;AAChC,kBAAkB,mCAAO;AACzB;AACA,gBAAgB,eAAe;AAC/B,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,wCAAc;AACnD,mBAAmB,yCAAa;AAChC,kBAAkB,oCAAQ;AAC1B;AACA,gBAAgB,eAAe;AAC/B,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,wCAAc;AACnD,mBAAmB,yCAAa;AAChC,kBAAkB,qCAAS;AAC3B;AACA,gBAAgB,eAAe;AAC/B,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,wCAAc;AACjG,mBAAmB,yCAAa;AAChC,kBAAkB,mCAAO;AACzB;AACA,qBAAqB,eAAe;AACpC,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,wCAAc;AACjG,mBAAmB,yCAAa;AAChC,kBAAkB,2CAAe;AACjC;AACA,wFAAwF,+BAAqB,GAAG,YAAY;AAC5H;AACA;AACA,6BAA6B,eAAe;AAC5C;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2DAA2D;AACzE,cAAc,+DAA+D;AAC7E,cAAc,yDAAyD;AACvE,cAAc,2DAA2D;AACzE,cAAc,6DAA6D;AAC3E;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,wBAAwB,iBAAU;AAClC,aAAa;AACb;AACA;AACA,wBAAwB,iBAAU;AAClC,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,cAAc,iEAAiE;AAC/E,cAAc,wBAAwB,mCAAO,qBAAqB;AAClE;AACA;AACA,wBAAwB,iBAAU;AAClC;AACA;AACA;AACA;AACA,CAAC,oCAAoC;AACrC;AACA;AACA;AACO,+BAA+B,uCAAW;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,wCAAc;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,CAAC,sCAAU,IAAI,gNAAgN;AAClQ,YAAY,6BAAmB,aAAa,YAAY;AACxD,YAAY,6BAAmB,aAAa,eAAe;AAC3D,YAAY,6BAAmB,aAAa,mBAAmB;AAC/D,YAAY,6BAAmB,aAAa,cAAc;AAC1D;AACA;AACA;;;;;;ACzQA;AACA;AAC+D;AACN;AAC/B;AAC6B;AAC0C;AAC5C;AACrD;AACA;AACA;AACO;AACP,2CAA2C,wCAAc;AACzD,2BAA2B,qCAAuB;AAClD;AACA;AACA;AACA;AACA;AACA,qBAAqB,sCAAmB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,sCAAmB,CAAC,sCAAc,IAAI,+EAA+E;AAC9J;AACA,qDAAqD,sCAAmB,UAAU,qIAAqI;AACvN;AACA,QAAQ,sCAAmB,UAAU,qDAAqD,cAAc,EAAE,aAAa,GAAG;AAC1H,YAAY,sCAAmB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,sCAAmB,CAAC,2CAAe,UAAU,oBAAoB;AAC3G;AACA;AACA;AACA;AACA;AACA,0CAA0C,sCAAmB,CAAC,sCAAU,UAAU,oBAAoB;AACtG;AACA;AACA;AACA,YAAY,sCAAmB,WAAW,QAAQ,uBAAuB,mBAAmB,GAAG,qBAAqB;AACpH,YAAY,sCAAmB,WAAW,QAAQ;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAmB,WAAW,QAAQ;AACtD,gBAAgB,sCAAmB,WAAW,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,iCAAiC,wCAAY;AACpD;AACA;AACA;AACA;AACA;AACA,wCAAwC,wCAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sCAAmB;AACtC;AACA;AACA;AACA;AACA,wBAAwB,sCAAmB,gCAAgC,wFAAwF;AACnK;AACA,oBAAoB,sCAAmB,gCAAgC,4GAA4G;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qCAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,oCAAa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,oCAAa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,CAAC,gDAAgD;AACjD;;AC3ZA;AACA;AACyD;AACd;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,wCAAc;AAC3D;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG,4BAA4B;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA,gDAAgD,8BAA8B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kCAAkC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjSA;AACA;AAC0D;AACT;AACP;AACe;AACb;AACD;AACL;AACtC;AACA;AACA;AACO;AACP;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yBAAM;AACzC,iCAAiC,yBAAM;AACvC;AACA,oCAAoC,yBAAM;AAC1C;AACA;AACA;AACA;AACA;AACA,+BAA+B,4BAAS;AACxC;AACA;AACA,8BAA8B,oCAAsB;AACpD,oCAAoC,oCAAsB;AAC1D;AACA,sCAAsC,4BAA4B;AAClE,yCAAyC;AACzC;AACA;AACA,aAAa;AACb;AACA,0BAA0B,QAAQ;AAClC,6CAA6C,wCAAc;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,sCAAsC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAO;AAC5B;AACA;AACA,iDAAiD,oCAAsB;AACvE;AACA,kCAAkC,oCAAsB;AACxD,kCAAkC,oCAAsB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,wBAAU;AAC3B;AACA;AACA,0BAA0B,gBAAM,YAAY,6BAA6B;AACzE,aAAa;AACb;AACA;AACA;AACA;AACA,kBAAkB,2CAA2C;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,oBAAoB;AAChF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzWA;AACA;AACwC;AACxC;AACA;AACA;AACO;AACP;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,mBAAmB,aAAa;AAChC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACiD;AACQ;AACW;AACrC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wCAAc;AACrD,YAAY,6BAAmB,CAAC,gCAAQ,IAAI,mEAAmE;AAC/G;AACA;AACA;AACA;AACO,gCAAgC,wCAAY;AACnD;AACA;AACA;AACA;AACA;AACA,wCAAwC,wCAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,yBAAyB,gGAAgG;AAC5J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qCAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8CAA8C;AAC/C;;;;;;AChHA;AACA;AACgE;AACgB;AAC5B;AACT;AACpC,8BAA8B,kCAAgB;AACrD;AACA;AACA;AACA;AACA;AACA,kCAAkC,8BAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,+CAAsB;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gCAAU;AAC5B;AACA;AACA;AACA;AACA;AACA,0CAA0C,yBAAyB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6BAA6B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,cAAc;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iCAAe;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gCAAU;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,SAAS;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;;;;;;;AC1XA;AACA;AACoD;AACK;AACA;AACH;AACT;AACuB;AACd;AACtD,0BAA0B,iCAAM;AAChC;AACA;AACA;AACA,0BAA0B,sCAAW;AACrC;AACA;AACA;AACA,2BAA2B;AAC3B,sBAAsB,sBAAQ,mCAAmC,qBAAO;AACxE,QAAQ,sBAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sBAAQ;AAC9B;AACA,YAAY,sBAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACO,4BAA4B,iCAAM;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wCAAc;AAC9D;AACA,0BAA0B,sCAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,iBAAiB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,wCAAW;AACnB,QAAQ,wCAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,+CAA+C,qCAAS,GAAG,oBAAoB;AAC/E;AACA;AACA;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA,iCAAiC,qCAAS;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,qCAAS,GAAG,oBAAoB;AAChG;AACA,0CAA0C,qCAAS,GAAG,oBAAoB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wCAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wCAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wCAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wCAAc,yDAAyD,mDAAmD;AACtJ;AACA,YAAY,wCAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wCAAc,gDAAgD,mDAAmD;AAC7I;AACA,YAAY,wCAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,+CAAkB;AACrE;AACA;AACA;AACA,0CAA0C,+CAAkB;AAC5D;AACA;AACA;AACA,yCAAyC,+CAAkB;AAC3D;AACA;AACA;AACA,uBAAuB,iCAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA,8CAA8C,sCAAW;AACzD;AACA;AACA;AACA,kCAAkC,iCAAM,GAAG,uCAAuC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,mCAAU;AACzC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA,IAAI,qBAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,qBAAO,KAAK,qBAAO,KAAK;AAC3B;;;;;;;;;;;;;;AC7WA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;;;;ACZA;AACA;AACA;AACA;AAC4D;AACkB;AAC9B;AACO;AACd;AAC0B;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,oCAAS;AACvC;AACA;AACA,SAAS,IAAI,+BAA+B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,oCAAS;AACvC;AACA;AACA,SAAS,IAAI,+BAA+B;AAC5C;AACA;AACA;AACA;AACA;AACO,gCAAgC,6CAAiB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,OAAO,wBAAwB,mBAAmB;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,2BAAa;AAC9C,wCAAwC,kCAAkC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,oCAAS;AACxD;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,qCAAqC,0CAAc;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iCAAM;AAClB;AACA;AACA;AACA,YAAY,iCAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iCAAM;AAClB;AACA;AACA;AACA,YAAY,iCAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wCAAW,qBAAqB,iCAAM;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sBAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iCAAM;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wCAAW,qBAAqB,iCAAM;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sBAAQ;AAClC,4CAA4C,iBAAiB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wCAAW,qBAAqB,iCAAM;AACtD;AACA;AACA;AACA;AACA,yCAAyC,iBAAiB;AAC1D;AACA;AACA;AACA,YAAY,wCAAW,qBAAqB,iCAAM;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gDAAgD;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iCAAM;AAClB;AACA;AACA,YAAY,iCAAM;AAClB;AACA;AACA;AACA;AACA;AACA,YAAY,iCAAM;AAClB;AACA;AACA,YAAY,iCAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzjBA;AACA;AACA;AACA;AACyC;AACG;AAC5C;AACA;AACA;AACA;AACO,6BAA6B,iCAAM;AAC1C;AACA;AACA;AACA;AACA,gBAAgB,wCAAwC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,eAAe;AACvB;AACA,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxEA;AACA;AACgD;AAC0B;AACV;AACT;AACE;AACA;AACD;AACX;AACC;AACN;AACc;AACX;AACQ;AACG;AACV;AACuB;AACK;AACtB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,wBAAiB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,6BAA6B,wCAAY;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA,aAAa;AACb,wBAAwB,sBAAsB;AAC9C,+EAA+E,wCAAY;AAC3F;AACA,SAAS;AACT,kCAAkC,yBAAM;AACxC,0CAA0C,yBAAM;AAChD,2CAA2C,yBAAM;AACjD;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAAsB;AAC/C;AACA,iCAAiC,yBAAM;AACvC,wCAAwC,yBAAM;AAC9C;AACA;AACA;AACA;AACA,gDAAgD,wCAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAQ;AACpC,gDAAgD,MAAM;AACtD;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iCAAM;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+CAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,YAAY;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,eAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sCAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,8BAA8B,+CAA+C;AAC7E;AACA;AACA;AACA,oDAAoD,oBAAoB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,WAAW;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,kBAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0BAAY;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qBAAO;AAC9B;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qBAAqB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAM;AAC5C,iCAAiC,yBAAM;AACvC,qCAAqC,yBAAM;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,cAAc;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAAY;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,kCAAkC,kCAAkC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0BAAY;AAC5C;AACA;AACA;AACA;AACA,mCAAmC,0BAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,6CAA6C;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,cAAO;AACnB;AACA;AACA,QAAQ,cAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,cAAO;AACpB;AACA;AACA,QAAQ,cAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAO;AACvB;AACA;AACA,YAAY,cAAO;AACnB;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAO;AACvB;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA,oBAAoB,cAAO,wCAAwC,cAAO;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAO;AACvB;AACA;AACA;AACA,gCAAgC,UAAU;AAC1C;AACA,oBAAoB,cAAO,wCAAwC,cAAO;AAC1E;AACA;AACA;AACA;AACA;AACA,aAAa,cAAO;AACpB;AACA;AACA,QAAQ,cAAO;AACf,aAAa,cAAO;AACpB;AACA;AACA,QAAQ,cAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sBAAQ;AAC9B;AACA;AACA,qBAAqB;AACrB;AACA,qBAAqB,sBAAQ;AAC7B;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,SAAS;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,iBAAiB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,6BAA6B,kBAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,UAAU;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,UAAU;AAC/D,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,2BAA2B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,oBAAoB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sBAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+BAA+B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kBAAI;AAC7B;AACA;AACA,yBAAyB,kBAAI;AAC7B;AACA;AACA,uCAAuC,sCAAoB;AAC3D;AACA;AACA;AACA;AACA,gEAAgE,cAAc,OAAO,eAAe;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+BAA+B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yCAAyC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,wBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA,oCAAoC,wBAAiB;AACrD;AACA;AACA;AACA;AACA,0DAA0D,iBAAiB;AAC3E;AACA,yCAAyC,iBAAiB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,wBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA,0DAA0D,iBAAiB;AAC3E;AACA,yCAAyC,iBAAiB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA,oCAAoC,wBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,iBAAiB;AAC3D,wCAAwC,iBAAiB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0BAAY;AAC5C,mCAAmC,eAAe;AAClD;AACA,kCAAkC,2BAAS;AAC3C;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,4BAA4B,sBAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,wBAAiB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,iBAAiB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAO;AAC3B;AACA,yBAAyB,gCAAI;AAC7B,0BAA0B,uBAAQ;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT,oCAAoC,wBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,iBAAiB;AACpD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,cAAc;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,cAAc;AACrD;AACA;AACA;AACA;AACA,sCAAsC,cAAc;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,cAAc;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA,IAAI,cAAO;AACX;AACA;AACA;AACA;AACA,mCAAmC,8CAAgB;AACnD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,sCAAsC,sCAAW;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wCAAU,SAAS,+BAAC,KAAK,+BAAC,OAAO,6BAA6B,EAAE,+BAAC,QAAQ,mCAAmC,8BAA8B,+BAAC,QAAQ,oCAAoC,iBAAiB,+BAAC,OAAO,oCAAoC;AAC3Q;AACA;AACA,uBAAuB,wCAAU,SAAS,+BAAC,KAAK,+BAAC,OAAO,6BAA6B,EAAE,+BAAC,QAAQ,mCAAmC,GAAG,+BAAC,QAAQ,oCAAoC,iBAAiB,+BAAC,OAAO,oCAAoC;AAChP;AACA;AACA;AACA;AACA,uBAAuB,wCAAU,SAAS,+BAAC,KAAK,+BAAC,OAAO,cAAc,kBAAkB,EAAE,wBAAwB,GAAG,EAAE,+BAAC,QAAQ,mCAAmC,8BAA8B,+BAAC,QAAQ,oCAAoC;AAC9O;AACA;AACA,uBAAuB,wCAAU,SAAS,+BAAC,KAAK,+BAAC,OAAO,cAAc,kBAAkB,EAAE,wBAAwB,GAAG,EAAE,+BAAC,QAAQ,mCAAmC,GAAG,+BAAC,QAAQ,oCAAoC;AACnN;AACA;AACA;AACA;AACA,CAAC,EAAE,cAAO,KAAK,cAAO,KAAK;AAC3B;;ACnnFA;AACA;AACoE;AACZ;AACL;AACM;AACf;AACN;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,4BAA4B,wCAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qCAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,kBAAQ;AACb;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAQ,UAAU,kCAAU;AAC9C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,wBAAU;AAC3B;AACA;AACA,0BAA0B,gBAAM,YAAY,6BAA6B;AACzE,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,oBAAK;AAC7C;AACA,CAAC,sCAAsC;AACvC;;;;AC9OA;AACA;AAC0D;AACa;AACX;AACH;AACZ;AACL;AACxC;AACA;AACA;AACO,qCAAqC,2CAAc;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,wCAAc;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,aAAa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,oCAAoC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,oEAAoE,OAAO;AAC3E,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA;AACA;AACA,uCAAuC,0CAAwB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,wBAAwB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,sBAAQ;AACvE;AACA,gCAAgC,wBAAU;AAC1C;AACA;AACA;AACA,oBAAoB,gBAAM,gBAAgB,2BAA2B;AACrE,oBAAoB,gBAAM,YAAY,uBAAuB;AAC7D;AACA,aAAa;AACb;AACA;AACA,qCAAqC,sBAAQ;AAC7C;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,0CAAwB;AAC3D,QAAQ,sBAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB,sBAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,gBAAgB,sBAAQ;AACxB;AACA;AACA,oCAAoC,kCAAkC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7sBA;AACA;AACuD;AAC8C;AACzD;AAC5C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACO,+BAA+B,sCAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC,SAAS;AACT;AACA;AACA,QAAQ,eAAe;AACvB,QAAQ,eAAe;AACvB,QAAQ,eAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,eAAe;AACvB,QAAQ,eAAe;AACvB,QAAQ,eAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gDAAgD;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,sCAAoB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,yCAAyC,sCAAoB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD,gFAAgF;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,iCAAiC,wCAAsB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,gBAAgB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,iBAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG,OAAO;AACxG,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iGAAiG,OAAO;AACxG,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,cAAc,OAAO,sBAAsB;AACrE,0BAA0B,cAAc;AACxC;AACA;AACA,kDAAkD,sCAAoB;AACtE;AACA;AACA,kDAAkD,sCAAoB;AACtE;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sCAAoB;AAChC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,0BAAY;AACxD;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,yBAAyB,kBAAI;AAC7B,0BAA0B,sCAAoB;AAC9C;AACA;AACA;AACA,8BAA8B,kBAAI;AAClC;AACA;AACA;AACA;AACA;AACA;;AC3kBA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,mCAAmC,oBAAK;AAC/C;AACA;AACA;AACO,2BAA2B,oBAAK;AACvC;AACA;AACA;AACA;AACO,6BAA6B,oBAAK;AACzC;AACA;AACA;AACA;AACA;AACO,kCAAkC,oBAAK;AAC9C;;ACtBA;AACA;AACqD;AACV;AACpC,8BAA8B,uBAAa;AAClD;AACA;AACA;AACA,sCAAsC,yBAAM;AAC5C,qCAAqC,yBAAM;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACyD;AACwC;AACvE;AAC1B;AACA;AACA;AACA;AACA;AACA,+BAA+B,wCAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAmB,CAAC,uCAAW,UAAU,qCAAqC;AAC7F;AACA;AACA,eAAe,sCAAmB,CAAC,0CAAc,UAAU,qCAAqC;AAChG;AACA;AACA;AACA;AACA;AACO,kCAAkC,wCAAY;AACrD;AACA;AACA;AACA;AACA;AACA,wCAAwC,wCAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAmB,2BAA2B,+LAA+L;AAC7P;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qCAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;;ACpMA;AACA;AAC2D;AACnB;AACE;AACE;AAC5C;AACA;AACA;AACO,oCAAoC,0CAAgB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,cAAc;AAClD;AACA,sCAAsC,cAAc;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,0CAA0C,+BAA+B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,aAAa,GAAG,kBAAkB;AACrD;AACA;AACA;;ACxEA;AACA;AACA;AACA;AACA;AACA;AAC0B;AACK;AACJ;AACO;AACG;AACX;AACF;AACO;AACF;AACQ;AACL;AACR;AACS;AACX;AACG;AACC;AACI;AACL;AACO;AACJ;AAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzBA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACJ;AACD;AACE;AACN;AACM;AACI;AACJ;AACC;AACR;AACE;AACF;;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBpB;AACA;AAC2C;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,4BAA4B,yBAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;ACtLA;AACA;AAC4C;AACA;AACI;AAChD;AACA;AACA;AACO,6BAA6B,aAAa;AACjD;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,qBAAqB,iBAAO;AAC5B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAO;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oCAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;;ACnDA;AACA;AAC2C;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yBAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;;;;AC5GA;AACA;AAC6C;AACF;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,4BAA4B,yBAAM;AAClC;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qCAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qCAAQ;AAC9B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qCAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qCAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qCAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,YAAY,qCAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,sBAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,sBAAO,KAAK,sBAAO,KAAK;AAC3B;;AClZA;AACA;AACkD;AAClD;AACA;AACA;AACO,qCAAqC,cAAc;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,YAAY;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,YAAY;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wDAAwD;AACzD;;AChOA;AACA;AAC4C;AACO;AACR;AACO;AACF;AACM;AACE;AACxD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yBAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2BAAa;AAC7C;AACA;AACA;AACA;AACA;AACA,2BAA2B,aAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB,KAAK,sBAAsB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wBAAwB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC0B;AACO;AACA;AACD;AACG;AACJ;AAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACdA;AACA;AACiD;AACQ;AACJ;AACb;AACI;AACD;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yBAAM;AACvC,4BAA4B,yBAAM;AAClC;AACA;AACA;AACA;AACA,wBAAwB,4BAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAO;AACvB;AACA;AACA,wCAAwC,+BAA+B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,qBAAG;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAO;AACvB;AACA;AACA;AACA,YAAY,kBAAiB;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAiB;AAC7B;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,wCAAwC,gBAAgB;AACxD;AACA;AACA;AACA,YAAY,kBAAiB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oCAAW;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAiB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;ACjcA;AACA;AACqD;AACA;AACI;AACC;AACJ;AACX;AACkB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,iCAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,yBAAM;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yBAAM;AACzC,oCAAoC,yBAAM;AAC1C,+BAA+B,yBAAM;AACrC,kCAAkC,oCAAa;AAC/C,uBAAuB,mBAAI;AAC3B,SAAS;AACT;AACA;AACA;AACA,2BAA2B,sCAAW;AACtC;AACA;AACA;AACA;AACA;AACA,sFAAsF,wCAAc;AACpG;AACA;AACA;AACA,wBAAwB,wDAAwD;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oCAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,+DAA+D;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,YAAY;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,cAAO;AACnB;AACA,oCAAoC,cAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,cAAO;AACvC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,iCAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,cAAO;AAChC;AACA,QAAQ,cAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,cAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,cAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACO,2BAA2B,iCAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,MAAM;AAC9C;AACA;AACA;AACA;AACA;AACA;AACO,oBAAoB,iCAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,cAAO;AACzB,SAAS;AACT,4BAA4B,8BAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,wCAAc;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,cAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,iCAAM;AACzC;AACA;AACA;AACA;AACA,oBAAoB,wCAAwC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,kBAAkB;AAC3D;AACA,6CAA6C,kBAAkB;AAC/D,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,8CAAgB;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,8BAA8B,gCAAK;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iCAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD;AACA,8DAA8D,MAAM;AACpE,iBAAiB,IAAI;AACrB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,cAAO,KAAK,cAAO,KAAK;AAC3B;;AClpCA;AACA;AACA;AACA;AACA;AACA;AACwB;AACC;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACK;AACE;;AAE3B;;;;;;;;;;;;;;;;;;;;;ACVpB;AACA;AACA;AACA;AACA;AACA;AACoD;AACI;AACf;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,0BAA0B,mDAAM;AACvC;AACA;AACA;AACA;AACA,0BAA0B,8DAAe;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB,EAAE,wBAAwB;AACnF;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,kEAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,UAAU,EAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gCAAgC;AAC7D;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA,sCAAsC,mBAAmB;AACzD;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClLA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;;AAEpB;;;;;;;;;;;;;;;;;;;;;;;ACRpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsE;AACgB;AAChB;AACuB;AACR;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAU;AACzB,eAAe,gEAAW,EAAE,iEAAe,EAAE,oEAAe;AAC5D,cAAc,qEAAc;AAC5B;AACA,gBAAgB,kBAAkB;AAClC,iFAAiF,mEAAc;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+DAAa;AACzC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,8BAA8B,sEAAe;AAC7C;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF,mEAAc;AACtG,aAAa;AACb,gCAAgC,8DAAO;AACvC;AACA,wFAAwF,mEAAc;AACtG,aAAa;AACb;AACA,iCAAiC,oEAAa;AAC9C;AACA,6BAA6B,gEAAc,GAAG,8BAA8B;AAC5E,wDAAwD,2EAAoB;AAC5E;AACA,wBAAwB,eAAe;AACvC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,iBAAiB;AAC3D;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,kEAAW;AAC7B;AACA;AACA;AACA,oFAAoF,OAAO;AAC3F,iBAAiB;AACjB;AACA,SAAS;AACT;AACA,8BAA8B,oCAAoC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,OAAO,EAAC;AACvB;;;;;;;;;;;;ACrIA;AACA;AACA;AACA;;AAEA;AACkD;AACL;AACG;AACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTnB;AACxB;AACP,YAAY,6BAAmB,CAAC,wBAAc;AAC9C;AACA,QAAQ,6BAAmB,6CAA6C,6BAAmB,SAAS,sCAAsC;AAC1I;AACA;AACO;AACP,YAAY,6BAAmB,UAAU,kDAAkD;AAC3F;AACA,QAAQ,6BAAmB,qDAAqD,6BAAmB,SAAS,8CAA8C;AAC1J;AACA;AACA;;ACbA;AACA;AACA;AACA;AAC0D;AACX;AACS;AACF;AACX;AACS;AACK;AACa;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACO,8BAA8B,qCAAS;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oBAAM;AAC7C;AACA;AACA,0BAA0B,8BAAe;AACzC;AACA;AACA,sCAAsC,uCAAgB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,wCAAc;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA,iBAAiB,wBAAU;AAC3B;AACA,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA,iBAAiB;AACjB,0BAA0B,gBAAM;AAChC,aAAa;AACb;AACA;AACA;AACA,2CAA2C,wBAAU;AACrD;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA,iBAAiB;AACjB;AACA,oBAAoB,gBAAM,YAAY,yCAAyC;AAC/E,oBAAoB,gBAAM;AAC1B;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,WAAW;AAC/C;AACA;AACA,2BAA2B,oBAAM;AACjC;AACA;AACA,6BAA6B,uCAAgB,0BAA0B,oBAAM;AAC7E;AACA;AACA,sBAAsB,uCAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uCAAgB;AACtC;AACA;AACA;AACA;AACA;;;;ACjUA;AACA;AACA;AACA;AACoD;AACmB;AAC/B;AACT;AAC/B;AACA;AACA;AACO,sBAAsB,wBAAK;AAClC;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAY;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,CAAC,wBAAc,2CAA2C,6BAAmB,0GAA0G,uBAAuB,qCAAqC,6BAAmB,UAAU,sCAAsC,8CAA8C,6BAAmB,CAAC,iCAAK,IAAI;AACpa,uBAAuB,6BAAmB;AAC1C,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,0CAA0C,6BAAmB,CAAC,wBAAc;AAC5E,wBAAwB,6BAAmB;AAC3C,wBAAwB,6BAAmB;AAC3C;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,yCAAyC,6BAAmB,CAAC,wBAAc;AAC3E;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,SAAS;AAC3E;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA;AACA;AACA,0CAA0C,6BAAmB,CAAC,wBAAc;AAC5E;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,yCAAyC,6BAAmB,CAAC,wBAAc;AAC3E;AACA,iBAAiB;AACjB;AACA;AACA;AACA,0CAA0C,6BAAmB,CAAC,wBAAc,wBAAwB,6BAAmB,WAAW,0BAA0B;AAC5J;AACA,iBAAiB;AACjB;AACA;AACA;AACA,0CAA0C,6BAAmB,CAAC,wBAAc;AAC5E,wBAAwB,6BAAmB,YAAY;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,sCAAsC,6BAAmB,CAAC,oCAAQ,UAAU,iJAAiJ;AAC7N;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA,yBAAyB,sBAAY;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB;AACnC,YAAY,6BAAmB;AAC/B,YAAY,6BAAmB;AAC/B,gBAAgB,6BAAmB,YAAY;AAC/C;AACA,uBAAuB;AACvB;AACA;AACA;AACA,qBAAqB,sBAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,CAAC,wBAAc;AAClD,YAAY,6BAAmB,CAAC,qCAAS,IAAI;AAC7C;AACA,iBAAiB,yDAAyD;AAC1E,YAAY,6BAAmB,UAAU,uCAAuC,0DAA0D,GAAG;AAC7I,uCAAuC,6BAAmB;AAC1D,gBAAgB,6BAAmB;AACnC,gBAAgB,6BAAmB;AACnC,gBAAgB,6BAAmB;AACnC;AACA;AACA;AACA,WAAW,6BAAmB,UAAU,qCAAqC;AAC7E;AACA;;ACvLA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,2BAA2B,oBAAK;AACvC;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwB;AACC;AACA;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACG;;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXpB;AACA;AAC0C;AAC1C;AACA;AACA;AACO,uCAAuC,oBAAK;AACnD;;ACPA;AACA;AACA;AACA;AACA;AACA;AACyD;AACD;AACb;AAC6B;AACnB;AACf;AACtC;AACA;AACA;AACA,wCAAwC,yBAAM;AAC9C;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAAY;AACxC;AACA;AACA,4BAA4B,+BAAY;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,kBAAkB,gCAAgC;AAClD;AACA;AACA,wCAAwC,wBAAc;AACtD;AACA,0CAA0C,kCAAe;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yBAAM,GAAG,MAAM;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,oBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,yBAAM;AACxC;AACA;AACA;AACA,gCAAgC,yBAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,oBAAM;AAClB;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/QA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACF;;AAE5B;;;;;;;;;;ACVpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACU;AACV;;;;;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACyD;AACb;AACD;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qDAAM;AAClC;AACA;AACA,yBAAyB,mEAAc,GAAG,cAAc;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,sDAAO;AACzC;AACA;AACA,eAAe,sDAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;ACnKqC;AACrC;AACA;AACA;AACO;AACP;AACA;AACA;AACA,mCAAmC,4DAAoB;AACvD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,6DAAqB;AACxD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,mCAAmC,6DAAqB;AACxD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,mCAAmC,gEAAwB;AAC3D;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,mCAAmC,2DAAmB;AACtD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,mCAAmC,6DAAqB;AACxD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,mCAAmC,4DAAoB;AACvD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,mCAAmC,kEAA0B;AAC7D;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACkD;AAChB;AACN;AACJ;AACI;AACE;AACH;AACC;AACH;AACC;AAC1B;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,2CAA2C,WAAW,MAAM,MAAM;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,GAAG,MAAM,GAAG;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,4BAA4B;AAC5B,4BAA4B,IAAI;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxLA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;ACnDA;AACA;AACA;AACA;AACiD;AAC0B;AAC/B;AACD;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,4BAA4B,qDAAM;AAClC;AACA;AACA,gBAAgB,0BAA0B;AAC1C;AACA,2CAA2C,0DAAiB;AAC5D,6BAA6B,qEAAgB;AAC7C;AACA;AACA;AACA,6BAA6B,mEAAc,GAAG,kBAAkB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iEAAwB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iEAAwB;AACpC,YAAY,+DAAsB;AAClC,YAAY,iEAAwB;AACpC;AACA;AACA,iBAAiB,0DAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,yDAAgB;AACjC;AACA;AACA;AACA,gCAAgC,aAAa,IAAI,cAAc;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iEAAwB,YAAY,+DAAsB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,sDAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;ACvPA;AACA;AACA;AACA;AACiD;AACmB;AACX;AACjB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,mEAAc;AACnG;AACA;AACA;AACA;AACA,uFAAuF,2DAAS;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,SAAS;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,mBAAmB,0DAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B;AAC7B,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0DAAO;AAC7C,sBAAsB,0DAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yDAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,6DAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,MAAM;AACxE;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gDAAgD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;AChXA;AACA;AACA;AACA;AAC+C;AACU;AACtB;AACe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,UAAU,sGAAsG;AAChH,+BAA+B,mEAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,YAAY,qEAAqE;AACjF;AACA;AACA;AACA;AACA;AACA,sBAAsB,UAAU,SAAS,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,YAAY,+CAA+C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,YAAY,0CAA0C;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,2DAAU;AAChC;AACA;AACA;AACA,eAAe,4DAAW;AAC1B;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,UAAU,oCAAoC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,2BAA2B;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA,UAAU;AACV;AACA,YAAY,GAAG;AACf;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,wCAAwC,uBAAuB,GAAG,uBAAuB;AACzF;AACA;AACA;AACA;AACA,kDAAkD,wDAAwD,GAAG,uBAAuB;AACpI,CAAC,0BAA0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,SAAS;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,YAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,YAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB,EAAE,kBAAkB;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0BAA0B;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oCAAoC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,YAAY,8BAA8B;AAC1C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yDAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,yDAAM;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yDAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,yDAAM;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,yDAAM;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,GAAG;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,GAAG;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,kBAAkB;AAC1D;AACA;AACA,wCAAwC,eAAe,GAAG;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oDAAM;AACpB,yBAAyB;AACzB;AACA;AACA;AACA,+CAA+C;AAC/C,gCAAgC,kBAAkB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;AC5qCA;AACA;AACA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,gCAAgC,oDAAK;AAC5C;AACA;AACA;AACO,6BAA6B,oDAAK;AACzC;AACA;AACA;AACO,4BAA4B,oDAAK;AACxC;;;;;;;;;;;;;;;;;;;;;;;;;ACjByD;AAChB;AACA;AACzC;AACA;AACA;AACO,6BAA6B,mDAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,mEAAc;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8BAA8B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,4DAAoB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6DAAqB;AACtD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gEAAwB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,2DAAmB;AACpD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5YA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACK;;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTpB;AACA;AAC0D;AACV;AACC;AAC6F;AAClG;AACD;AACjB;AACK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,YAAY,wCAAwC;AACpD,YAAY,iCAAiC;AAC7C,YAAY,gCAAgC;AAC5C,0BAA0B,uBAAS;AACnC;AACA;AACA;AACA,wCAAwC,uBAAS;AACjD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,gEAAgE,QAAQ,4EAA4E;AACpJ;AACA;AACA;AACA;AACA;AACA,0CAA0C,UAAU;AACpD;AACA;AACA,wBAAwB,UAAU;AAClC;AACA,sCAAsC,wCAAY;AAClD;AACA;AACA;AACA;AACA;AACA,oCAAoC,4BAAU;AAC9C;AACA,uBAAuB,sCAAmB,CAAC,mCAAc;AACzD;AACA,oBAAoB,sCAAmB,0CAA0C,sCAAmB,SAAS,gBAAgB;AAC7H;AACA,oBAAoB,oBAAM;AAC1B,oBAAoB,oBAAM,cAAc,4BAA4B;AACpE;AACA,aAAa;AACb;AACA,qEAAqE,gCAAS;AAC9E;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,0DAA0D,QAAQ,+DAA+D;AACjI;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gDAAoB;AACpC;AACA,oBAAoB,UAAU;AAC9B;AACA,wBAAwB;AACxB,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA,wBAAwB,UAAU;AAClC,cAAc,uCAAW;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,oBAAoB,MAAM;AACtF;AACA;AACA,KAAK;AACL,wBAAwB,UAAU;AAClC,cAAc,wCAAY;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,cAAc;AAC/E;AACA;AACA,KAAK;AACL,wBAAwB,UAAU;AAClC;AACA,cAAc,uCAAW;AACzB;AACA,kBAAkB,wCAAY;AAC9B;AACA,sBAAsB,YAAY;AAClC,kBAAkB,YAAY;AAC9B,YAAY,+BAAO;AACnB,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA,+CAA+C,MAAM;AACrD;AACA,KAAK;AACL,wBAAwB,UAAU;AAClC,cAAc,qCAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA,wBAAwB,mBAAmB;AAC3C,qDAAqD,iBAAiB,oBAAoB;AAC1F;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA,uBAAuB,uCAAW;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,UAAU;AACnC,oBAAoB,WAAW;AAC/B;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA,kEAAkE,kBAAkB;AACpF;AACA,8BAA8B,uCAAW;AACzC;AACA,kCAAkC,wCAAY;AAC9C,kCAAkC,uCAAW;AAC7C;AACA;AACA;AACA;AACA;AACA,oCAAoC,sCAAmB,CAAC,mCAAc;AACtE;AACA;AACA,gCAAgC,sCAAmB,WAAW,4BAA4B;AAC1F;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sCAAU;AAC7B;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA,oBAAoB,sCAAmB,CAAC,mCAAc;AACtD;AACA;AACA,gBAAgB,sCAAmB,WAAW,4BAA4B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B,oBAAoB,KAAK;AACzB,8BAA8B,cAAc,IAAI,GAAG;AACnD;AACA;AACA,4BAA4B,aAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yBAAM,GAAG;AAC1C,CAAC,0BAA0B;AAC3B;;;;AC3UA;AACA;AACyD;AACK;AACnB;AAC3C;AACA;AACA;AACA;AACA;AACA,gCAAgC,yBAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,mCAAO,gBAAgB,oCAAQ;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wCAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvGA;AACA;AACgD;AACc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oCAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA,oCAAoC,mCAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mCAAO;AAC/C;AACA;AACA;AACA;AACA,mBAAmB,oCAAQ;AAC3B;AACA;AACA,mBAAmB,+BAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACqE;AACN;AACoF;AAC1F;AACV;AACO;AACsC;AACjC;AACJ;AACK;AAC5D;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA,MAAM,UAAM;AACZ;AACA;AACA,cAAc,6CAAuB;AACrC,eAAe,qCAAW;AAC1B,eAAe,mBAAS;AACxB;AACA;AACA,2CAA2C,4CAAsB;AACjE;AACA,YAAY,yBAAyB;AACrC;AACA,aAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,4CAAsB;AACpC,eAAe,6CAAuB,EAAE,qCAAW;AACnD,eAAe,yBAAe,EAAE,8BAAQ;AACxC;AACA;AACA;AACA,4BAA4B,qCAAe;AAC3C;AACA;AACA,6BAA6B,uCAAW;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,sCAAsC;AAC/E;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,6CAAuB,EAAE,wCAAe,EAAE,qCAAW;AACpE;AACA;AACA,QAAQ,+BAA+B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,6CAAuB,EAAE,qCAAW;AACnD,eAAe,6BAAe,EAAE,4CAAsB;AACtD;AACA;AACA;AACA;AACA;AACA,oCAAoC,wCAAkB;AACtD,mCAAmC,oBAAM;AACzC;AACA;AACA,8BAA8B,oBAAM,YAAY;AAChD;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,+BAA+B,gDAAoB;AACnD;AACA;AACA,sBAAsB,wCAAY;AAClC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAAe,CAAC,UAAM,6CAA6C,EAAC;AACpE;;;;;;;;;;;;;;;AC9IA;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACG;AACA;AACD;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZ5C;AACA;AACA;AACA;AACA;AACA;AACuE;AACb;AACD;AACgM;AAC/M;AACc;AACV;AACH;AACK;AACmB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,oCAAoC,oDAAK;AAChD;AACA;AACA;AACO,mCAAmC,oDAAK;AACxC;AACP;AACA,0BAA0B,qDAAM;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kEAAkB;AACrC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,cAAc;AAC1B,sCAAsC,qDAAc;AACpD;AACA;AACA,yBAAyB,6CAAM;AAC/B;AACA;AACA;AACA;AACA,2CAA2C,mEAAc;AACzD;AACA;AACA,uDAAuD,gEAAS;AAChE;AACA;AACA;AACA,qBAAqB,kDAAW;AAChC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oBAAoB,kDAAW;AAC/B;AACA;AACA;AACA,qBAAqB,6EAAkB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAmB,CAAC,uDAAc;AAC9C,QAAQ,0DAAmB,CAAC,+DAAQ,IAAI,cAAc,qBAAqB,wGAAwG;AACnL,gDAAgD,0DAAmB,UAAU,sDAAsD,MAAM,0DAAmB,eAAe,wDAAwD;AACnO,YAAY,0DAAmB,WAAW,oGAAoG;AAC9I,sBAAsB,0DAAmB,WAAW,8BAA8B;AAClF,qCAAqC,0DAAmB,CAAC,6DAAM,IAAI,+GAA+G;AAClL,gBAAgB,0DAAmB,2BAA2B,WAAW;AACzE,yBAAyB,0DAAmB,SAAS,4HAA4H;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,uBAAuB,OAAO;AAC9B;AACA;AACA,SAAS;AACT,oBAAoB,MAAM;AAC1B;AACA,YAAY,0DAAmB,CAAC,uDAAc,gCAAgC,0DAAmB,SAAS,mMAAmM;AAC7S;AACA,2BAA2B,kEAAW;AACtC;AACA;AACA;AACA,qBAAqB;AACrB;AACA,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAmB,CAAC,gEAAS,IAAI,sHAAsH;AACvK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kEAAW;AACpC;AACA;AACA;AACA,2BAA2B,qDAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAmB,CAAC,gEAAS,IAAI,sBAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,iBAAiB;AAClF;AACA;AACA;AACA;AACA;AACA,oBAAoB,0DAAmB,UAAU,4BAA4B;AAC7E,gBAAgB,0DAAmB,CAAC,+DAAQ,IAAI,8BAA8B;AAC9E,oBAAoB,0DAAmB,SAAS,sSAAsS;AACtV,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uEAAgB;AACtC;AACA;AACA;AACA;AACA;AACA,oCAAoC,qDAAM;AAC1C,gCAAgC,qDAAM;AACtC;AACA;AACA;AACA,iDAAiD,mEAAc;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,kCAAkC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD;AACA;AACA;AACA;AACA,kGAAkG,kBAAkB,EAAE,mBAAmB;AACzI,iBAAiB,gEAAU;AAC3B;AACA;AACA;AACA,oBAAoB,wDAAM;AAC1B,oBAAoB,wDAAM,cAAc,yBAAyB;AACjE;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,sCAAsC,oEAAa;AACnD;AACA,0BAA0B,0BAA0B,EAAE,mCAAmC;AACzF;AACA;AACA,SAAS;AACT,qCAAqC,oEAAa;AAClD;AACA;AACA,kBAAkB,oEAAa;AAC/B,yBAAyB,mEAAY;AACrC;AACA;AACA;AACA,SAAS;AACT,4CAA4C,oEAAa;AACzD;AACA;AACA,kBAAkB,sEAAe;AACjC,yBAAyB,oEAAa;AACtC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kGAAkG,2EAAoB;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,8BAA8B,gEAAS;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,mEAAc;AACpG;AACA;AACA,4CAA4C,oEAAa;AACzD;AACA,kBAAkB,kEAAW;AAC7B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sCAAsC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mGAAmG;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,iCAAiC,kDAAK;AAC7C;AACA;AACA;AACA,uFAAuF,mEAAc;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,qCAAqC,kDAAK;AACjD;AACA;AACA;AACA,uFAAuF,mEAAc;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClwBA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;;AAEzB;;;;;;;;;;;;;;;ACVpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACijB;AACjjB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,uEAAqB;AACnC,eAAe,iEAAe;AAC9B;AACA;AACA,4BAA4B,sEAAoB,GAAG,gBAAgB;AACnE;AACA,QAAQ,+DAAa;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mEAAiB;AAC/B;AACA;AACA,mBAAmB,kEAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kEAAgB;AAC9B,eAAe,+DAAa,EAAE,iEAAe;AAC7C;AACA,mBAAmB,iEAAe;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,+DAAa;AAC3B,eAAe,iEAAe;AAC9B;AACA,mBAAmB,uDAAK,GAAG,mGAAmG;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,+DAAa;AAC3B,eAAe,iEAAe;AAC9B;AACA,mBAAmB,8DAAY,GAAG,gBAAgB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gEAAc;AAC5B,eAAe,iEAAe;AAC9B;AACA,mBAAmB,+DAAa,GAAG,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oEAAkB;AAChC,eAAe,iEAAe;AAC9B;AACA,mBAAmB,mEAAiB,GAAG,gBAAgB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mEAAiB;AAC/B,eAAe,iEAAe;AAC9B;AACA,mBAAmB,kEAAgB,GAAG,gBAAgB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,iEAAe;AAC7B,eAAe,gEAAc;AAC7B,eAAe,iEAAe;AAC9B;AACA,mBAAmB,gEAAc,GAAG,+BAA+B;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,iEAAe;AAC7B,eAAe,iEAAe;AAC9B;AACA,mBAAmB,gEAAc,GAAG,gBAAgB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kEAAgB;AAC9B,eAAe,iEAAe;AAC9B;AACA,mBAAmB,iEAAe,GAAG,gBAAgB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,8DAAY;AAC1B,eAAe,iEAAe;AAC9B;AACA,mBAAmB,6DAAW,GAAG,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mEAAiB;AAC/B,eAAe,iEAAe;AAC9B;AACA,mBAAmB,kEAAgB,GAAG,gBAAgB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,iEAAe;AAC7B;AACA,eAAe,kEAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,iEAAe;AAC7B;AACA;AACA,QAAQ,mEAAiB;AACzB,QAAQ,kEAAgB;AACxB,QAAQ,+DAAa;AACrB,QAAQ,iEAAe;AACvB,QAAQ,+DAAa;AACrB,QAAQ,gEAAc;AACtB,QAAQ,oEAAkB;AAC1B,QAAQ,mEAAiB;AACzB,QAAQ,iEAAe;AACvB,QAAQ,iEAAe;AACvB,QAAQ,kEAAgB;AACxB,QAAQ,8DAAY;AACpB,QAAQ,mEAAiB;AACzB;AACA;AACA,mBAAmB,gEAAc;AACjC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iEAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAC;AACF;;;;;;;;ACjQa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,mBAAmB;AACnB,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,2BAA2B,mBAAO,CAAC,KAAoB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;;;;;;;;AC9Ca;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,oBAAoB;AACpB,oBAAoB,mBAAO,CAAC,KAAuB;AACnD,2BAA2B,mBAAO,CAAC,KAAqB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uBAAuB;AACvC,gFAAgF;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,gBAAgB,uBAAuB;AACvC,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,gBAAgB;;AAErE;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,gBAAgB,uBAAuB;AACvC,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB;AACpB;;;;;;;;ACjGa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,0BAA0B,GAAG,qBAAqB,GAAG,4BAA4B;AACjF,oBAAoB,mBAAO,CAAC,KAAuB;AACnD,YAAY,mBAAO,CAAC,KAAI;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB,qBAAqB,qBAAqB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;;;;;;;;ACpMa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;;;;;;;;AC5Ba;AACb;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,2BAA2B,GAAG,aAAa,GAAG,uBAAuB,GAAG,gBAAgB;AACxF,oBAAoB,mBAAO,CAAC,KAAuB;AACnD,qBAAqB,mBAAO,CAAC,KAAoB;AACjD,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,YAAY,mBAAO,CAAC,KAAI;AACxB,8BAA8B,mBAAO,CAAC,KAAY;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,eAAe,gBAAgB,gBAAgB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,sGAAsG,gBAAgB;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS,GAAG,wDAAwD;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAU,GAAG,SAAS;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qDAAqD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,+BAA+B,6BAA6B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,+BAA+B,6BAA6B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,WAAW,GAAG,2CAA2C;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,oBAAoB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qBAAqB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA,yCAAyC,YAAY;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,YAAY;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,uEAAuE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;;;;;;;;ACt/Ba;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,6BAA6B;AAC7B,+BAA+B;AAC/B,mBAAmB,mBAAO,CAAC,KAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC3Ba;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,oBAAoB;AACpB,oBAAoB,mBAAO,CAAC,KAAuB;AACnD,kBAAkB,mBAAO,CAAC,IAAiB;AAC3C,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,2BAA2B,mBAAO,CAAC,KAAqB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,0CAA0C,kCAAkC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,gBAAgB,UAAU;AAC1B,gBAAgB,6BAA6B;AAC7C;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uCAAuC;AAC3D;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB;AACpB;;;;;;;;ACrGa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,aAAa,mBAAO,CAAC,KAAe;AACpC,aAAa,mBAAO,CAAC,KAAU;AAC/B,aAAa,mBAAO,CAAC,IAAoB;AACzC,aAAa,mBAAO,CAAC,KAAY;AACjC,aAAa,mBAAO,CAAC,KAAS;AAC9B,aAAa,mBAAO,CAAC,KAAU;AAC/B,aAAa,mBAAO,CAAC,KAAc;AACnC,aAAa,mBAAO,CAAC,KAAW;AAChC,aAAa,mBAAO,CAAC,KAAoB;AACzC,aAAa,mBAAO,CAAC,KAAW;AAChC,aAAa,mBAAO,CAAC,KAAW;AAChC,aAAa,mBAAO,CAAC,KAAY;AACjC,aAAa,mBAAO,CAAC,KAAU;AAC/B,aAAa,mBAAO,CAAC,KAAQ;AAC7B,aAAa,mBAAO,CAAC,KAAa;AAClC,aAAa,mBAAO,CAAC,IAAa;AAClC;;;;;;;;ACtCa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,mBAAmB,GAAG,0BAA0B;AAChD,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,qBAAqB,mBAAO,CAAC,KAAoB;AACjD,mCAAmC,mBAAO,CAAC,KAAY;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,yBAAyB,0BAA0B,0BAA0B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,+BAA+B;AAChF;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;;;;;;;;AChTa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,wBAAwB;AACxB,oBAAoB,mBAAO,CAAC,KAAuB;AACnD,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,YAAY,mBAAO,CAAC,KAAI;AACxB,eAAe,mBAAO,CAAC,KAAQ;AAC/B,mCAAmC,mBAAO,CAAC,KAAY;AACvD,iBAAiB,mBAAO,CAAC,KAAU;AACnC,8BAA8B,mBAAO,CAAC,KAAY;AAClD,kBAAkB,mBAAO,CAAC,KAAW;AACrC,kBAAkB,mBAAO,CAAC,KAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,QAAQ;AACzD;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,kBAAkB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,cAAc;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,oCAAoC,wBAAwB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,qCAAqC;AACjJ;AACA,oHAAoH,qCAAqC;AACzJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,+BAA+B;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,wBAAwB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,yBAAyB;AAChD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gCAAgC,wBAAwB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,oBAAoB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+FAA+F;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,4BAA4B;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,eAAe,GAAG,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,KAAK,yBAAyB,WAAW;AACxF;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,KAAK;AACrD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;AC9hDa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,gCAAgC,GAAG,kCAAkC,GAAG,2BAA2B;AACnG,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,qBAAqB,mBAAO,CAAC,KAAoB;AACjD,mCAAmC,mBAAO,CAAC,KAAY;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA,oBAAoB,GAAG,qCAAqC,UAAU,iBAAiB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+DAA+D,0BAA0B;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,kCAAkC;AAClC;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,QAAQ;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,SAAS;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,+EAA+E;AACpF,CAAC,0BAA0B;AAC3B;;;;;;;;ACpaa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,0BAA0B,GAAG,wBAAwB,GAAG,iBAAiB,GAAG,qBAAqB,GAAG,cAAc;AAClH;AACA,eAAe,mBAAO,CAAC,KAAQ;AAC/B,sDAAqD,EAAE,qCAAqC,qCAAqC,EAAC;AAClI,4BAA4B,mBAAO,CAAC,KAAU;AAC9C,cAAc;AACd,mCAAmC,mBAAO,CAAC,KAAY;AACvD,qBAAqB;AACrB,+BAA+B,mBAAO,CAAC,KAAW;AAClD,iBAAiB;AACjB,kBAAkB,mBAAO,CAAC,KAAW;AACrC,oDAAmD,EAAE,qCAAqC,sCAAsC,EAAC;AACjI,aAAa,mBAAO,CAAC,KAAW;AAChC;;;;;;;;AC3Ca;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D;;;;;;;;ACJa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,qBAAqB;AACrB,kBAAkB,mBAAO,CAAC,IAAiB;AAC3C,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,YAAY,mBAAO,CAAC,KAAI;AACxB,sBAAsB,mBAAO,CAAC,KAAgB;AAC9C,kBAAkB,mBAAO,CAAC,KAAW;AACrC,kBAAkB,mBAAO,CAAC,KAAW;AACrC,kBAAkB,mBAAO,CAAC,KAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,qCAAqC;AACjJ;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,qBAAqB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB,qBAAqB,qBAAqB;AAC/D;;;;;;;;AC9Wa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,yCAAyC;AACzC,qBAAqB;AACrB,mBAAmB;AACnB,wBAAwB;AACxB,8BAA8B;AAC9B,yBAAyB;AACzB,0BAA0B;AAC1B,kBAAkB;AAClB,mBAAmB;AACnB,wBAAwB;AACxB,uBAAuB;AACvB,qBAAqB;AACrB,sBAAsB;AACtB,oBAAoB;AACpB,wBAAwB;AACxB,yBAAyB;AACzB,yBAAyB;AACzB,uBAAuB;AACvB,yBAAyB;AACzB,uBAAuB;AACvB,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC,yCAAyC,yCAAyC;AAC3H;;;;;;;;ACvLa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,uBAAuB,GAAG,0BAA0B;AACpD,mBAAmB;AACnB,gBAAgB;AAChB,qBAAqB;AACrB,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,2BAA2B,mBAAO,CAAC,KAAqB;AACxD,oBAAoB,mBAAO,CAAC,KAAuB;AACnD,mBAAmB,mBAAO,CAAC,KAAY;AACvC;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA,mCAAmC,GAAG;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;;;;;;;;ACvQa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,iBAAiB;AACjB,mBAAmB;AACnB,mCAAmC,mBAAO,CAAC,KAAY;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;ACrQa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,uBAAuB;AACvB,qBAAqB;AACrB,sBAAsB;AACtB,mBAAmB,mBAAO,CAAC,KAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gCAAgC;AAC9C,oBAAoB,oCAAoC;AACxD,qBAAqB,2CAA2C;AAChE;AACA;AACA;AACA;AACA,KAAK;AACL,aAAa,wDAAwD;AACrE;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oBAAoB,iBAAiB;AACrC,iBAAiB,0DAA0D;AAC3E,gBAAgB,mCAAmC;AACnD,kBAAkB,mBAAmB;AACrC,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA;AACA,oBAAoB,0BAA0B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/Fa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,qBAAqB,GAAG,kBAAkB;AAC1C,gCAAgC,mBAAO,CAAC,IAAc;AACtD,kBAAkB;AAClB,mCAAmC,mBAAO,CAAC,KAAW;AACtD,qBAAqB;AACrB,aAAa,mBAAO,CAAC,KAAW;AAChC;;;;;;;;ACpCa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D;;;;;;;;ACJa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,yBAAyB;AACzB,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,kBAAkB,mBAAO,CAAC,IAAiB;AAC3C,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,sBAAsB,mBAAO,CAAC,KAAgB;AAC9C,kBAAkB,mBAAO,CAAC,KAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oHAAoH,qCAAqC;AACzJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;;;;;;;ACtHa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,2BAA2B;AAC3B,gBAAgB;AAChB,2BAA2B,mBAAO,CAAC,KAAqB;AACxD,mBAAmB,mBAAO,CAAC,IAAY;AACvC,oBAAoB,mBAAO,CAAC,KAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;;;;;;;;ACjEa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,yBAAyB;AACzB,0BAA0B;AAC1B,mBAAmB,mBAAO,CAAC,KAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,QAAQ;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,QAAQ;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7Ea;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,sBAAsB;AACtB,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,kBAAkB,mBAAO,CAAC,KAAW;AACrC,mBAAmB,mBAAO,CAAC,KAAY;AACvC,gBAAgB,mBAAO,CAAC,KAAS;AACjC,iBAAiB,mBAAO,CAAC,KAAU;AACnC,qBAAqB,mBAAO,CAAC,KAAc;AAC3C,oBAAoB,mBAAO,CAAC,IAAa;AACzC,2BAA2B,mBAAO,CAAC,KAAoB;AACvD,kBAAkB,mBAAO,CAAC,KAAW;AACrC,kBAAkB,mBAAO,CAAC,KAAW;AACrC,mBAAmB,mBAAO,CAAC,KAAY;AACvC,eAAe,mBAAO,CAAC,KAAQ;AAC/B,oBAAoB,mBAAO,CAAC,KAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;;;;;;;;AC3Ga;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,wBAAwB;AACxB,oBAAoB,mBAAO,CAAC,KAAuB;AACnD,2BAA2B,mBAAO,CAAC,KAAqB;AACxD,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,sFAAsF;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;;;;;;;;;AChEa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,wBAAwB;AACxB,oBAAoB,mBAAO,CAAC,KAAuB;AACnD,oBAAoB,mBAAO,CAAC,KAAoB;AAChD;AACA;AACA;AACA;AACA,gBAAgB,mBAAO,CAAC,KAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,iBAAiB,EAAE,oBAAoB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,uBAAuB,wBAAwB,wBAAwB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC,+BAA+B,OAAO,aAAa,OAAO,uBAAuB,OAAO;AACxF;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wEAAwE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,2BAA2B;AAC/E;AACA;AACA;AACA;AACA;AACA,6DAA6D,eAAe;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;ACpPa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,yBAAyB;AACzB,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,YAAY,mBAAO,CAAC,KAAI;AACxB,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,kBAAkB,mBAAO,CAAC,EAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8GAA8G,qCAAqC;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,4CAA4C;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oCAAoC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oCAAoC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;;;;;;;ACxWa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,GAAG,eAAe;AACpC,6BAA6B,mBAAO,CAAC,KAAW;AAChD,eAAe;AACf,gCAAgC,mBAAO,CAAC,EAAW;AACnD,kBAAkB;AAClB,aAAa,mBAAO,CAAC,KAAW;AAChC;;;;;;;;ACpCa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,sBAAsB;AACtB,kBAAkB,mBAAO,CAAC,IAAiB;AAC3C,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,2BAA2B,mBAAO,CAAC,KAAqB;AACxD,sBAAsB,mBAAO,CAAC,KAAgB;AAC9C,kBAAkB,mBAAO,CAAC,KAAW;AACrC,kBAAkB,mBAAO,CAAC,EAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8GAA8G,wCAAwC;AACtJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA,gCAAgC,0BAA0B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,qBAAqB,sBAAsB,sBAAsB;AAClE;;;;;;;;AC9Va;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,wBAAwB,GAAG,2BAA2B;AACtD,mBAAmB;AACnB,qBAAqB;AACrB,uBAAuB;AACvB,uBAAuB;AACvB,oBAAoB;AACpB,qBAAqB;AACrB,2BAA2B,mBAAO,CAAC,KAAqB;AACxD,oBAAoB,mBAAO,CAAC,KAAuB;AACnD,mBAAmB,mBAAO,CAAC,KAAY;AACvC;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA,yFAAyF,GAAG;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;;;;;;;;ACzNa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D;;;;;;;;ACJa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,qBAAqB;AACrB,gCAAgC;AAChC,sBAAsB;AACtB,mBAAmB,mBAAO,CAAC,KAAoB;AAC/C,mBAAmB,mBAAO,CAAC,KAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzCa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,sBAAsB;AACtB,oBAAoB,mBAAO,CAAC,KAAuB;AACnD,kBAAkB,mBAAO,CAAC,KAAqB;AAC/C,2BAA2B,mBAAO,CAAC,KAAqB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,gBAAgB,kBAAkB;AAClC,gBAAgB,6BAA6B;AAC7C;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,gBAAgB,kBAAkB;AAClC,gBAAgB,6BAA6B;AAC7C;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,aAAa;AACjD;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,gBAAgB,kBAAkB;AAClC,gBAAgB,6BAA6B;AAC7C;AACA;AACA;AACA,uBAAuB,uBAAuB,KAAK;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,gBAAgB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,OAAO,EAAE,aAAa;AACxC;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;AC1Ha;AACb;AACA;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAe;AACf;;;;;;;;ACPa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,0BAA0B;AAC1B,oBAAoB,mBAAO,CAAC,KAAuB;AACnD,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,YAAY,mBAAO,CAAC,KAAI;AACxB,kBAAkB,mBAAO,CAAC,KAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,uDAAuD,WAAW;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,qCAAqC;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wBAAwB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,4BAA4B;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;ACnVa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0CAA0C,4BAA4B;AACtE,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,mBAAmB,GAAG,gBAAgB;AACtC,8BAA8B,mBAAO,CAAC,KAAY;AAClD,gBAAgB;AAChB,iCAAiC,mBAAO,CAAC,KAAW;AACpD,mBAAmB;AACnB,aAAa,mBAAO,CAAC,KAAW;AAChC;;;;;;;;ACpCa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,uBAAuB;AACvB,kBAAkB,mBAAO,CAAC,IAAiB;AAC3C,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,YAAY,mBAAO,CAAC,KAAI;AACxB,sBAAsB,mBAAO,CAAC,KAAgB;AAC9C,kBAAkB,mBAAO,CAAC,KAAW;AACrC,kBAAkB,mBAAO,CAAC,KAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,qCAAqC;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA,SAAS;AACT;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,qBAAqB;AACrB,SAAS;AACT;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sBAAsB,uBAAuB,uBAAuB;AACrE;;;;;;;;AC/Sa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,yBAAyB,GAAG,4BAA4B;AACxD,mBAAmB;AACnB,gBAAgB;AAChB,mBAAmB;AACnB,wBAAwB;AACxB,oBAAoB,mBAAO,CAAC,KAAuB;AACnD,2BAA2B,mBAAO,CAAC,KAAqB;AACxD;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA,kGAAkG,KAAK;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;ACxKa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,mBAAmB;AACnB,kBAAkB,mBAAO,CAAC,KAAW;AACrC,+CAA8C,EAAE,qCAAqC,iCAAiC,EAAC;AACvH;;;;;;;;ACPa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,yBAAyB,GAAG,oBAAoB,GAAG,wBAAwB,GAAG,uBAAuB,GAAG,uBAAuB,GAAG,uBAAuB,GAAG,uBAAuB,GAAG,yBAAyB,GAAG,0BAA0B,GAAG,sBAAsB,GAAG,qBAAqB,GAAG,qBAAqB,GAAG,wBAAwB,GAAG,6BAA6B,GAAG,yBAAyB;AAC5Y,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,yBAAyB;AACzB;;;;;;;;AClEa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,mBAAmB;AACnB,oBAAoB,mBAAO,CAAC,KAAuB;AACnD,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,kBAAkB,mBAAO,CAAC,IAAiB;AAC3C,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,2BAA2B,mBAAO,CAAC,KAAqB;AACxD,sBAAsB,mBAAO,CAAC,KAAgB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B,gBAAgB,6BAA6B;AAC7C;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;AC3La;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,KAAK;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,KAAK,oBAAoB,SAAS;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,KAAK,mCAAmC,uBAAuB;AAC5G;AACA;AACA;AACA;AACA;;;;;;;;ACjDa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,wBAAwB;AACxB,oBAAoB,mBAAO,CAAC,KAAuB;AACnD,kBAAkB,mBAAO,CAAC,KAAqB;AAC/C,2BAA2B,mBAAO,CAAC,KAAqB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,gBAAgB,kBAAkB;AAClC,gBAAgB,6BAA6B;AAC7C;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,gBAAgB,kBAAkB;AAClC,gBAAgB,6BAA6B;AAC7C;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,gBAAgB,kBAAkB;AAClC,gBAAgB,6BAA6B;AAC7C;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,gBAAgB,kBAAkB;AAClC,gBAAgB,6BAA6B;AAC7C;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9HA;AACA;AACA;AACA;AACwD;AAChB;AACxC;AACA;AACA,8CAA8C,4BAAQ;AACtD;AACA;AACA,KAAK,IAAI;AACT;AACA,gCAAgC;AAChC;AACA;AACA,YAAY,sCAAmB,UAAU,0CAA0C;AACnF,QAAQ,sCAAmB,UAAU,uCAAuC;AAC5E,YAAY,sCAAmB,WAAW,sCAAsC;AAChF,YAAY,sCAAmB,aAAa;AAC5C;AACA,mBAAmB;AACnB,QAAQ,sCAAmB,UAAU,qCAAqC,qCAAqC,sCAAmB,YAAY,+CAA+C;AAC7L,YAAY,sCAAmB,WAAW,wCAAwC;AAClF,YAAY,sCAAmB,YAAY,oJAAoJ;AAC/L;AACA;AACA;AACA;AACO,mCAAmC,uCAAW;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6CAA6C;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAmB,mBAAmB,uGAAuG;AAC7J;AACA;AACA;AACA,YAAY,sCAAmB;AAC/B,QAAQ,sCAAmB;AAC3B,iCAAiC,sCAAmB;AACpD,YAAY,sCAAmB;AAC/B,YAAY,sCAAmB;AAC/B;AACA,8DAA8D,sCAAmB,UAAU,YAAY;AACvG;AACO,6CAA6C,uCAAW;AAC/D;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAmB,6BAA6B,gBAAgB;AAC/E;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsE;AACsD;AACnE;AACmE;AAC/D;AAC2C;AAC7C;AACI;AAChB;AACO;AACqD;AACb;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA,MAAM,UAAM;AACZ;AACA;AACA;AACA,QAAQ,8CAAgB;AACxB,QAAQ,8BAAQ;AAChB,QAAQ,qCAAW;AACnB,QAAQ,iDAAqB;AAC7B,QAAQ,oBAAU;AAClB;AACA;AACA,QAAQ,yBAAe;AACvB,QAAQ,6BAAe;AACvB,QAAQ,uCAAyB;AACjC,QAAQ,0CAAc;AACtB;AACA;AACA,cAAc,mCAAqB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA,wBAAwB,2BAAa;AACrC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,2DAA2D,kBAAkB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,UAAM;AAC1B,gBAAgB,iBAAiB,QAAQ,2GAAmC;AAC5E,2BAA2B,4BAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,sDAAsD,gDAAoB;AAC1E;AACA;AACA,kBAAkB,wCAAY;AAC9B;AACA;AACA,SAAS;AACT,sDAAsD,gDAAoB;AAC1E;AACA;AACA,kBAAkB,0CAAc;AAChC;AACA;AACA,SAAS;AACT,yCAAyC,mCAAO;AAChD;AACA,8DAA8D,yCAAa;AAC3E;AACA;AACA,iBAAiB;AACjB,sBAAsB,sCAAU;AAChC;AACA,aAAa;AACb;AACA;AACA,2DAA2D,gDAAoB;AAC/E;AACA;AACA,sBAAsB,sCAAU;AAChC;AACA,aAAa;AACb;AACA;AACA,4BAA4B,wCAAY;AACxC;AACA;AACA;AACA,oCAAoC,kBAAkB;AACtD;AACA;AACA;AACA;AACA;AACA,yDAAyD,8DAA8D;AACvH;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAM;AACzC;AACA;AACA;AACA;AACA,wCAAwC,8DAA8D;AACtG,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oBAAoB;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAgB;AACxB,QAAQ,wCAAe;AACvB,QAAQ,8BAAQ;AAChB,QAAQ,4CAAmB;AAC3B,QAAQ,oBAAU;AAClB,QAAQ,qCAAW;AACnB;AACA,eAAe,yBAAe,EAAE,6BAAe;AAC/C;AACA,cAAc,uCAAyB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA,wBAAwB,2BAAa;AACrC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,wBAAwB,UAAM;AAC9B;AACA,oBAAoB,oBAAoB,QAAQ,2GAAmC;AACnF;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,kCAAkC,4BAAc;AAChD;AACA,aAAa;AACb;AACA,mCAAmC,wCAAY;AAC/C;AACA;AACA;AACA,2CAA2C,2BAA2B;AACtE,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,cAAc,oCAAQ;AACtB;AACA,2BAA2B,YAAY;AACvC,KAAK;AACL;AACA,yBAAyB,QAAQ,6FAA6F;AAC9H,cAAc,oCAAQ;AACtB;AACA,2BAA2B,YAAY;AACvC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,cAAc,wCAAY;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA,wCAAwC;AACxC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,SAAS;AACzF;AACA;AACA;AACA;AACA,4EAA4E,SAAS;AACrF;AACA;AACA;AACA;AACA;AACA,wFAAwF,cAAc,EAAE,gDAAgD;AACxJ;AACA,0FAA0F,uBAAuB,EAAE,mDAAmD;AACtK;AACA,6CAA6C,8BAA8B;AAC3E;AACA;AACA;AACA,6BAA6B;AAC7B,kCAAkC,4BAAU;AAC5C;AACA;AACA,0CAA0C,oBAAM;AAChD,6BAA6B;AAC7B;AACA;AACA;AACA,wCAAwC,oBAAoB;AAC5D;AACA;AACA;AACA,qBAAqB;AACrB,uCAAuC,4BAAc,GAAG,SAAS;AACjE;AACA,wCAAwC,0CAAc;AACtD;AACA;AACA;AACA;AACA,0BAA0B,kCAAgB;AAC1C;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA,cAAc,0CAAc;AAC5B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,SAAS;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,0BAA0B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAAe,CAAC,UAAM,aAAa,EAAC;AACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5aA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACK;AACE;AACA;;AAE3B;;;;;;ACVpB,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA,IAAI,YAAO;;AAEX,YAAO,qBAAqB,6BAAmB;AAC/C,YAAO,iBAAiB,0CAAa;;AAErC,MAAM,YAAO,UAAU,+BAAa;AACpC;AACA,YAAO,UAAU,uBAAM;AACvB,YAAO,sBAAsB,8BAAkB;;AAE/C,IAAI,WAAM,GAAG,kCAAG,CAAC,uCAAO,EAAE,YAAO;;;;AAI8C;AAC/E,OAAO,2EAAe,uCAAO,IAAI,uCAAO,UAAU,uCAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACE;AACA;AACC;AACF;;AAE1B;;;ACdpB;AACA;AACA;AACA;;AAEA;AACkD;AACL;AACE;AACA;AACC;AACE;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZlD;AACA;AACA;AACA;AAC0B;AACyB;AACM;AACmD;AAC9D;AACM;AACT;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,qBAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAM;AAClC,uCAAuC,oBAAM;AAC7C,uCAAuC,oBAAM;AAC7C;AACA;AACA;AACA,gDAAgD,4BAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,oEAAoE,OAAO;AAC3E,SAAS;AACT;AACA;AACA,uCAAuC,oDAAoB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA,wCAAwC,sCAAS;AACjD,kCAAkC,sCAAS;AAC3C,mBAAmB,sCAAmB;AACtC,SAAS;AACT;AACA;AACA;AACA,6BAA6B,YAAY,IAAI,GAAG,IAAI,QAAQ;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sCAAS;AACpD,oCAAoC,sCAAS;AAC7C,2BAA2B,sCAAmB;AAC9C,iBAAiB;AACjB,uBAAuB,sCAAmB,SAAS,QAAQ,GAAG,GAAG,WAAW,GAAG;AAC/E;AACA;AACA;AACA,aAAa;AACb;AACA,gBAAgB,sCAAmB,UAAU,2CAA2C;AACxF;AACA,yCAAyC,EAAE,yCAAyC,6CAA6C;AACjI,YAAY,sCAAmB,UAAU,qDAAqD;AAC9F,gBAAgB,sCAAmB,UAAU,mCAAmC;AAChF,gBAAgB,sCAAmB,CAAC,mCAAO,iBAAiB,uCAAuC,wCAAY,cAAc,uCAAO,qFAAqF;AACzN,gBAAgB,sCAAmB,WAAW,6CAA6C;AAC3F,YAAY,sCAAmB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,gBAAgB,sCAAmB,UAAU,oCAAoC;AACjF,YAAY,sCAAmB,CAAC,qCAAS,IAAI,sKAAsK;AACnN,yCAAyC,sCAAmB;AAC5D,gBAAgB,sCAAmB,SAAS,mCAAmC;AAC/E,gBAAgB,sCAAmB;AACnC,sCAAsC,sCAAmB;AACzD,gBAAgB,sCAAmB,SAAS,mCAAmC;AAC/E,gBAAgB,sCAAmB;AACnC,sEAAsE,sCAAmB,QAAQ,sCAAsC;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oBAAM;AACtC,8BAA8B,8BAAe;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,+DAA+D,OAAO;AACtE,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA,oEAAoE;AACpE;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;;;;;;;ACxdA;AACA;AACA;AACA;AAC0B;AAC8B;AACE;AACd;AACA;AACK;AACE;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,iCAAiC,oCAAe;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,oCAAoC,sBAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA,wBAAwB,sBAAO;AAC/B;AACA;AACA;AACA,8BAA8B,oCAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4CAA4C;AACxE,SAAS;AACT;AACA;AACA;AACA,iBAAiB,8BAAgB;AACjC,SAAS;AACT;AACA;AACA;AACA,gBAAgB,sCAAmB,CAAC,mCAAc;AAClD,YAAY,sCAAmB,UAAU,gCAAgC;AACzE,gBAAgB,sCAAmB,SAAS,qFAAqF;AACjI,gBAAgB,sCAAmB,UAAU,0CAA0C,4BAA4B,sCAAmB,CAAC,kCAAM,IAAI,oDAAoD;AACrM,gBAAgB,sCAAmB,UAAU,4CAA4C;AACzF,YAAY,sCAAmB,CAAC,yCAAa,IAAI,WAAW,uCAAa,kRAAkR,uBAAuB;AAClX;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,aAAa,sBAAO,8FAA8F,iFAAiF;AACnM;AACA;AACA;AACA;AACA;AACA,gHAAgH;AAChH;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,sBAAO;AACpB,aAAa,sBAAO;AACpB;AACA;AACA;AACA,mCAAmC,sBAAO;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAO;AACnC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,sBAAO;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/LA;AACA;AACA;AACA;AAC0B;AACnB,qCAAqC,YAAY;AACxD;AACA,YAAY,sCAAmB,UAAU,4CAA4C;AACrF,QAAQ,sCAAmB,UAAU,mDAAmD;AACxF,YAAY,sCAAmB;AAC/B,YAAY,sCAAmB;AAC/B;AACA;;ACZA;AACA;AACA;AACA;AACmD;AACO;AACY;AACtE;AACA;AACA;AACA;AACO,yBAAyB,mIAAmI;AACnK,gDAAgD,4BAAQ;AACxD,sCAAsC,4BAAQ;AAC9C,uBAAuB,+BAAY;AACnC,8BAA8B,+BAAY,GAAG;AAC7C,IAAI,6BAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,8BAA8B,oCAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,sBAAsB,gCAAa;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,IAAI;AACT;AACA,eAAe,sCAAmB,CAAC,yBAAyB,IAAI,wBAAwB;AACxF;AACA,YAAY,sCAAmB,UAAU,gDAAgD;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAmB,UAAU,sCAAsC,kBAAkB,iBAAiB;AACtH,YAAY,sCAAmB,CAAC,kBAAkB,IAAI;AACtD;AACA,iBAAiB;AACjB;AACA,iBAAiB,8CAA8C;AAC/D,KAAK;AACL;AACA;;AC9EA;AACA;AACA;AACA;AACkD;AACO;AACgC;AAC9C;AACE;AACnB;AACgB;AACM;AAChD;AACA;AACA;AACO,6BAA6B,6BAAU;AAC9C;AACA;AACA;AACA,sBAAsB,6BAAU;AAChC;AACA,SAAS;AACT;AACA;AACA,oCAAoC,oBAAM;AAC1C,gDAAgD,4BAAc;AAC9D;AACA,8BAA8B,UAAU;AACxC;AACA;AACA;AACA,SAAS;AACT,yBAAyB,UAAU;AACnC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,8BAA8B,uCAAW,QAAQ,sCAAmB,CAAC,qCAAS,IAAI,iCAAiC,SAAS,sCAAmB,CAAC,aAAa,IAAI,yXAAyX;AAC1hB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,kEAAkE,OAAO;AACzE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oDAAoB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,wBAAU;AAC3B;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,iBAAiB,wBAAU;AAC3B;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9HA;AACA;AACgD;AACS;AACT;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,6BAA6B,wBAAK;AACzC;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,gDAAgD,4BAAc;AAC9D;AACA,8CAA8C,yBAAM;AACpD;AACA;AACA;AACA,wEAAwE,uBAAuB;AAC/F;AACA;AACA,+CAA+C,mCAAmC;AAClF,0CAA0C,uJAAuJ;AACjM,qEAAqE,oBAAoB,EAAE,gBAAgB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,kBAAQ;AACb,qBAAqB,kBAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yBAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACvHA;AACA;AAC6C;AACM;AACP;AACA;AACD;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,4BAA4B,oBAAM;AAClC,6BAA6B,oBAAM;AACnC;AACA,8BAA8B,oBAAM;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,oCAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAAI;AAC3B,yBAAyB;AACzB;AACA;AACA,qBAAqB,cAAc;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA,gBAAgB,sBAAO;AACvB;AACA;AACA;AACA;AACA;AACA,kCAAkC,kCAAS,GAAG,MAAM;AACpD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChKA;AACA;AACA;AACA;AAC0E;AACa;AACnC;AACK;AACzD;AACA;AACA;AACO;AACP,+BAA+B,4BAAc;AAC7C;AACA;AACA,0BAA0B,cAAc;AACxC;AACA;AACA,KAAK;AACL,wBAAwB,iBAAiB;AACzC;AACA;AACA,gBAAgB,2CAAkB;AAClC,kCAAkC,kDAAyB;AAC3D;AACA,aAAa;AACb,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,mCAAa;AAC9C;AACA;AACA;AACA;AACA,mFAAmF,4BAAc;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oDAAoD;AACpF;AACA,qBAAqB;AACrB;AACA,0BAA0B,yCAAyC;AACnE,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,4CAA4C;AAC3E,YAAY,+HAA+H;AAC3I;AACA,+BAA+B,+BAA+B,SAAS,cAAc;AACrF;AACA,+BAA+B,6BAA6B;AAC5D,cAAc,mBAAmB,KAAK,cAAc;AACpD;AACA,+BAA+B,wBAAwB,SAAS,cAAc;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC,uBAAuB,aAAa;AACpC;AACA,wCAAwC,gCAAgC;AACxE;AACA;AACA;;ACzGA;AACA;AACuE;AACd;AACiB;AAC/B;AACqB;AAClB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,wBAAwB,6BAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAAU;AAChC;AACA,SAAS;AACT;AACA;AACA,oCAAoC,oBAAM;AAC1C;AACA,4BAA4B,mCAAO;AACnC,gBAAgB,gDAAgD;AAChE;AACA,wCAAwC,4BAAc;AACtD;AACA;AACA,+CAA+C,0CAAiB;AAChE;AACA,0BAA0B;AAC1B,aAAa;AACb,uBAAuB,mCAAU,SAAS,6BAA6B;AACvE;AACA,SAAS;AACT;AACA,uCAAuC,0CAAiB;AACxD;AACA,0BAA0B;AAC1B,aAAa;AACb,uBAAuB,mCAAU,SAAS,6BAA6B;AACvE;AACA,SAAS;AACT;AACA;AACA;AACA,0BAA0B,eAAe;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAAc;AACjD;AACA,2BAA2B,yBAAM;AACjC,4CAA4C,4BAAS,GAAG,YAAY;AACpE,2BAA2B,yBAAM;AACjC,wBAAwB,mCAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yBAAyB;AACzC,kCAAkC,mCAAO;AACzC;AACA;AACA;AACA;AACA,6BAA6B,gDAAoB,GAAG,8BAA8B;AAClF;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAAc;AACjD;AACA;AACA,2BAA2B,yBAAM;AACjC,4CAA4C,4BAAS,GAAG,YAAY;AACpE,2BAA2B,yBAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;AC1RA;AACA;AACA;AACA;AAC4E;AACnB;AACb;AACD;AACa;AAChB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,2BAA2B,yBAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,oBAAM;AACvC;AACA,gBAAgB,4DAA4D;AAC5E,wCAAwC,4BAAc;AACtD;AACA;AACA;AACA;AACA;AACA,0CAA0C,gCAAa;AACvD,gBAAgB,cAAc,EAAE,oBAAO;AACvC,yCAAyC,SAAS;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,iBAAiB;AACjB;AACA;AACA,YAAY,sBAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wBAAU;AACzB;AACA;AACA;AACA,gBAAgB,gBAAM,gBAAgB,iCAAiC;AACvE,gBAAgB,gBAAM,YAAY,6BAA6B;AAC/D;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAO;AACX;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAAc;AACjD;AACA,6DAA6D,eAAe;AAC5E,aAAa,8BAAgB;AAC7B;AACA;AACA,CAAC,EAAE,oBAAO,KAAK,oBAAO,KAAK;AAC3B;;ACjKA;AACA;AACA;AACA;AACyD;AACD;AACZ;AACC;AACd;AACuC;AACxB;AACJ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,gCAAgC,6BAAU;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAAU;AAChC;AACA,SAAS;AACT;AACA;AACA,sBAAsB,sBAAO;AAC7B,gDAAgD,4BAAc;AAC9D;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA,mDAAmD,uCAAW,QAAQ,6BAAmB,CAAC,yBAAyB,IAAI,6BAA6B;AACpJ;AACA,2CAA2C,YAAY;AACvD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,uCAAuC,UAAU;AACjD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6BAAU;AAClB,QAAQ,6BAAU;AAClB,QAAQ,6BAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yBAAO;AACjC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,IAAI,yBAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAO;AAC1B;AACA;AACA,0BAA0B,sBAAO;AACjC;AACA;AACA,8BAA8B,sBAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,yBAAO,KAAK,yBAAO,KAAK;AAC3B;;;;AC5SA;AACA;AACA;AACA;AACA;AACA;AACiC;AACG;AACX;AACzB;;;;;;;;;;;;;;ACTA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,kCAAkC,oDAAK;AAC9C;AACA;AACA;AACA;AACA;AACO,sCAAsC,oDAAK;AAClD;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;AACA;AACmD;AACP;AACY;AACb;AACrB;AACS;AACW;AAC1C;AACA;AACA;AACA,aAAa,iBAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,6BAA6B,eAAG;AAChC;AACA;AACA,SAAS;AACT,8BAA8B,eAAG,GAAG,wBAAwB;AAC5D,iCAAiC,6BAAM;AACvC,kCAAkC,6BAAM;AACxC;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,mBAAmB;AACpE,0BAA0B,wDAAwD;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,UAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,aAAa,QAAQ,MAAM,SAAS,OAAO;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAAM;AAC5B;AACA;AACA;AACA;AACA,kCAAkC,mCAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,yCAAyC,aAAa;AACtD;AACA;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mCAAmC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,6DAA6D,OAAO;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,UAAW;AAC/B;AACA;AACA,yBAAyB,IAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,UAAW;AAC/B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qCAAkB;AACrC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA,wBAAwB,6CAA6C;AACrE;AACA,mCAAmC,OAAO,aAAa,WAAW,WAAW,aAAa;AAC1F;AACA,8BAA8B,EAAE,UAAU,EAAE,QAAQ;AACpD,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC,+BAA+B,QAAQ,oBAAoB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,OAAO;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAO,kBAAkB,iBAAO;AAChD,gBAAgB,iBAAO,kBAAkB,iBAAO;AAChD;AACA;AACA,iBAAiB,iBAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,gBAAgB,+BAA+B;AAC/C,4BAA4B,mCAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mCAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,aAAa;AACpC,gBAAgB,aAAa;AAC7B;AACA;AACA,wCAAwC,gCAAgC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,iBAAO;AACpD;AACA;AACA,mBAAmB,iBAAO;AAC1B;AACA,uBAAuB,iBAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA,8BAA8B,iBAAO;AACrC;AACA;AACA,mBAAmB,iBAAO;AAC1B;AACA,sBAAsB,iBAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,SAAS;AAC9C;AACA;AACA;AACA;AACA,kEAAkE,YAAY,wKAAwK;AACtP;AACA;AACA,2CAA2C,iBAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,iBAAO,8DAA8D,sDAAsD;AAC3J,yBAAyB;AACzB;AACA;AACA,6CAA6C,SAAS;AACtD;AACA;AACA;AACA;AACA,wEAAwE,aAAa;AACrF;AACA,gDAAgD;AAChD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6BAAe;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6BAAe;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,QAAQ;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA,8BAA8B,iBAAO;AACrC;AACA;AACA,mBAAmB,iBAAO;AAC1B;AACA,sBAAsB,iBAAO;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,SAAS;AACtC;AACA;AACA;AACA,oBAAoB,iBAAO;AAC3B,kDAAkD,UAAU;AAC5D;AACA,oCAAoC;AACpC;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA,cAAc;AACd,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,IAAI,KAAK,sCAAsC;AACxE,yBAAyB,IAAI,KAAK,KAAK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,IAAI,KAAK,oCAAoC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,qCAAqC,OAAO;AAC5C,kDAAkD,IAAI;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAO;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,WAAW,uBAAuB,WAAW,OAAO,0BAA0B,eAAe,YAAY;AACrK;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;ACxrCA;AACA;AACA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,8BAA8B,eAAK;AAC1C;AACA;AACA;AACO,6BAA6B,eAAK;AACzC;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACkC;AACT;AACzB;;;;;;;;ACVa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,uBAAuB,GAAG,uBAAuB,GAAG,eAAe,GAAG,YAAY,GAAG,WAAW,GAAG,iBAAiB,GAAG,WAAW,GAAG,SAAS,GAAG,kBAAkB,GAAG,WAAW;AACjL,eAAe,mBAAO,CAAC,KAAQ;AAC/B,iBAAiB,mBAAO,CAAC,KAAuB;AAChD,wBAAwB,mBAAO,CAAC,KAA8B;AAC9D,yBAAyB,mBAAO,CAAC,KAAkC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,kBAAkB;AAClB,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAe;AACf,iBAAiB,mBAAO,CAAC,KAAoB;AAC7C,8CAA6C,EAAE,qCAAqC,iCAAiC,EAAC;AACtH,gBAAgB,mBAAO,CAAC,KAAmB;AAC3C,qCAAoC,EAAE,qCAAqC,uBAAuB,EAAC;AACnG,uCAAsC,EAAE,qCAAqC,yBAAyB,EAAC;AACvG,6CAA4C,EAAE,qCAAqC,+BAA+B,EAAC;AACnH,uCAAsC,EAAE,qCAAqC,yBAAyB,EAAC;AACvG,wCAAuC,EAAE,qCAAqC,0BAA0B,EAAC;AACzG,2CAA0C,EAAE,qCAAqC,6BAA6B,EAAC;AAC/G,yBAAyB,mBAAO,CAAC,KAA4B;AAC7D,mDAAkD,EAAE,qCAAqC,sCAAsC,EAAC;AAChI,kBAAkB,mBAAO,CAAC,KAAqB;AAC/C,mDAAkD,EAAE,qCAAqC,+BAA+B,EAAC;AACzH;;;;;;;;ACjDa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,GAAG,wBAAwB,GAAG,mBAAmB,GAAG,qBAAqB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,YAAY,GAAG,kBAAkB,GAAG,mBAAmB;AAC1Q;AACA;AACA;AACA,mBAAmB;AACnB,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,EAAE,EAAE,EAAE;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,eAAe,EAAE,EAAE;AACzC;AACA;AACA;AACA;AACA;AACA,mBAAmB,EAAE,EAAE,WAAW;AAClC;AACA;AACA;AACA,4DAA4D,GAAG,EAAE,GAAG;AACpE;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,kFAAkF,IAAI,WAAW,IAAI;AACrG;AACA,mBAAmB;AACnB;AACA;AACA;AACA,4BAA4B,IAAI;AAChC;AACA,qDAAqD,IAAI;AACzD;AACA,wBAAwB;AACxB;AACA;AACA;AACA,kBAAkB;AAClB;;;;;;;;AC3Ja;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,eAAe,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,kBAAkB,GAAG,aAAa,GAAG,YAAY,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,WAAW,GAAG,iBAAiB,GAAG,WAAW,GAAG,SAAS;AACvS,eAAe,mBAAO,CAAC,KAAQ;AAC/B,gBAAgB,mBAAO,CAAC,KAAS;AACjC,aAAa,mBAAO,CAAC,KAAQ;AAC7B,qCAAoC,EAAE,qCAAqC,oBAAoB,EAAC;AAChG,uCAAsC,EAAE,qCAAqC,sBAAsB,EAAC;AACpG,6CAA4C,EAAE,qCAAqC,4BAA4B,EAAC;AAChH,uCAAsC,EAAE,qCAAqC,sBAAsB,EAAC;AACpG,+CAA8C,EAAE,qCAAqC,8BAA8B,EAAC;AACpH,6CAA4C,EAAE,qCAAqC,4BAA4B,EAAC;AAChH,8CAA6C,EAAE,qCAAqC,6BAA6B,EAAC;AAClH,wCAAuC,EAAE,qCAAqC,uBAAuB,EAAC;AACtG,cAAc,mBAAO,CAAC,KAAS;AAC/B,yCAAwC,EAAE,qCAAqC,yBAAyB,EAAC;AACzG,8CAA6C,EAAE,qCAAqC,8BAA8B,EAAC;AACnH,kDAAiD,EAAE,qCAAqC,kCAAkC,EAAC;AAC3H,4CAA2C,EAAE,qCAAqC,4BAA4B,EAAC;AAC/G,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA,wDAAwD,SAAS;AACjE,kBAAkB,SAAS,EAAE,UAAU,EAAE,KAAK;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,IAAI;AACjB,kBAAkB,UAAU,IAAI,UAAU;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,IAAI;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,IAAI;AACjB,kBAAkB,UAAU,EAAE,QAAQ,IAAI,UAAU;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,IAAI;AACjB,kBAAkB,WAAW;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,IAAI;AACjB,uCAAuC,WAAW;AAClD,uBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,IAAI;AACjB,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,IAAI;AACjB,kBAAkB,WAAW;AAC7B;AACA;AACA,kBAAkB,UAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA;AACA,iBAAiB,qCAAqC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,sBAAsB,SAAS,EAAE,KAAK,GAAG,OAAO,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,OAAO,WAAW,UAAU,GAAG,UAAU;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA,sBAAsB;AACtB;AACA,0CAA0C,kBAAkB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,IAAI;AAC/D,gDAAgD,IAAI,GAAG,EAAE;AACzD;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,IAAI;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,SAAS,KAAK,WAAW;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,QAAQ,QAAQ,GAAG,QAAQ,YAAY;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG,OAAO;AACvG;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,qFAAqF,QAAQ,EAAE,IAAI,EAAE,OAAO;AAC5G;AACA;AACA,4DAA4D,EAAE;AAC9D;AACA;;;;;;;;ACxrBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,GAAG,sBAAsB,GAAG,aAAa,GAAG,gBAAgB,GAAG,sBAAsB;AACvG,eAAe,mBAAO,CAAC,KAAQ;AAC/B;AACA;AACA,qCAAqC,MAAM;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,qBAAqB,sBAAsB,sBAAsB;AAClE,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAmB,IAAI;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,OAAO,EAAE,WAAW;AACtC;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA,wCAAwC,kBAAkB;AAC1D;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,qBAAqB;AAC3C;AACA,2CAA2C,0BAA0B,GAAG,UAAU;AAClF;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6BAA6B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,KAAK;AACvD,oCAAoC,UAAU,EAAE,eAAe;AAC/D,SAAS;AACT;AACA;AACA;AACA;AACA,kDAAkD,KAAK;AACvD;AACA,SAAS;AACT;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,EAAE,aAAa;AACtF;AACA;AACA,4CAA4C,KAAK,EAAE,EAAE,EAAE,aAAa;AACpE;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,kBAAkB;AAClB;;;;;;;;AC9Ia;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,oBAAoB,GAAG,wBAAwB,GAAG,wBAAwB,GAAG,mBAAmB,GAAG,yBAAyB,GAAG,oBAAoB;AACnJ,kBAAkB,mBAAO,CAAC,KAAW;AACrC,eAAe,mBAAO,CAAC,KAAQ;AAC/B,gBAAgB,mBAAO,CAAC,KAAS;AACjC,oBAAoB;AACpB,gBAAgB,SAAS,sCAAsC,QAAQ;AACvE;AACA,yBAAyB;AACzB,gBAAgB,qBAAqB;AACrC,iCAAiC,QAAQ,oBAAoB,YAAY;AACzE,iCAAiC,QAAQ;AACzC;AACA;AACA,YAAY,KAAK;AACjB,YAAY,gCAAgC;AAC5C;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA,mBAAmB;AACnB;AACA,YAAY,KAAK;AACjB,YAAY,gCAAgC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,+BAA+B,yBAAyB,wEAAwE,wBAAwB;AACxJ;AACA,wBAAwB;AACxB,wBAAwB,iDAAiD;AACzE;AACA;AACA;AACA;AACA;AACA,2CAA2C,wBAAwB,GAAG,EAAE;AACxE,mCAAmC,IAAI,mEAAmE,IAAI;AAC9G,uCAAuC,IAAI,oCAAoC,iBAAiB,GAAG,QAAQ;AAC3G;AACA,2CAA2C,IAAI;AAC/C,2CAA2C,IAAI;AAC/C;AACA,KAAK;AACL;AACA,oBAAoB;AACpB;AACA;AACA,+BAA+B,yBAAyB,0EAA0E,IAAI,yBAAyB,wBAAwB,QAAQ,IAAI;AACnM,iCAAiC,uBAAuB;AACxD;AACA;AACA,YAAY,+BAA+B;AAC3C;AACA,0CAA0C,mBAAmB,GAAG,KAAK;AACrE;AACA;AACA,uCAAuC,aAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,eAAe;AAC3B;AACA,mCAAmC;AACnC;AACA;AACA,gDAAgD;AAChD,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,WAAW,IAAI,cAAc;AAC1D;AACA,gCAAgC,UAAU,EAAE,wDAAwD;AACpG;AACA;AACA;AACA,2BAA2B,eAAe,iBAAiB,IAAI,0BAA0B;AACzF,uEAAuE,cAAc,GAAG,QAAQ;AAChG;AACA,wCAAwC,QAAQ,EAAE,sDAAsD;AACxG;AACA;AACA;AACA,gCAAgC,iBAAiB;AACjD,YAAY,iCAAiC;AAC7C,YAAY,+CAA+C;AAC3D,8HAA8H;AAC9H;AACA;AACA;AACA;AACA,qFAAqF,aAAa,EAAE,WAAW;AAC/G;AACA;AACA;AACA;AACA;;;;;;;;AC1Ha;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,qBAAqB,GAAG,0BAA0B,GAAG,kBAAkB,GAAG,qBAAqB,GAAG,iBAAiB;AACnH,kBAAkB,mBAAO,CAAC,KAAW;AACrC,2BAA2B,mBAAO,CAAC,KAA6B;AAChE,gBAAgB,mBAAO,CAAC,KAAS;AACjC,kBAAkB,mBAAO,CAAC,KAAW;AACrC,eAAe,mBAAO,CAAC,KAAQ;AAC/B,mBAAmB,mBAAO,CAAC,KAAY;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF;AACvF,YAAY,aAAa;AACzB,YAAY,gBAAgB;AAC5B,oDAAoD,2BAA2B;AAC/E;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qCAAqC,SAAS,aAAa;AACnF;AACA;AACA;AACA;AACA,6CAA6C,qBAAqB,MAAM,sBAAsB;AAC9F;AACA,yCAAyC,eAAe;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,oBAAoB,eAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2FAA2F;AAC3F,gBAAgB,WAAW;AAC3B;AACA,mCAAmC,gCAAgC;AACnE;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA,+BAA+B,gCAAgC;AAC/D;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,sBAAsB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,WAAW;AACvB,iCAAiC,gCAAgC;AACjE;AACA;AACA;AACA;AACA;;;;;;;;ACjPa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAe;AACf;;;;;;;;AC3Ba;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAW;AACrC;AACA;AACA,gDAAgD,KAAK,UAAU,OAAO;AACtE;AACA;AACA;AACA;AACA,kBAAe;AACf;;;;;;;;ACXa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,qBAAqB,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,mBAAmB,GAAG,iBAAiB;AACjI,eAAe,mBAAO,CAAC,KAAQ;AAC/B,cAAc,mBAAO,CAAC,KAAiB;AACvC,iBAAiB,mBAAO,CAAC,KAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,YAAY,wBAAwB;AACpC;AACA,sBAAsB;AACtB;AACA;AACA;AACA,uBAAuB,eAAe;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,OAAO;AAC9D,sCAAsC,OAAO;AAC7C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,IAAI;AAC3C;AACA;AACA,qBAAqB;AACrB;;;;;;;;AC1Ja;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,gBAAgB,GAAG,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB,2BAA2B;AAC7C,kBAAkB,2BAA2B;AAC7C,iBAAiB,0BAA0B;AAC3C,kBAAkB,2BAA2B;AAC7C;AACA;AACA,iBAAiB,qDAAqD;AACtE,kBAAkB,WAAW;AAC7B,gBAAgB,WAAW;AAC3B,eAAe;AACf,oBAAoB;AACpB;AACA;AACA,gBAAgB;AAChB;;;;;;;;ACzBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,uBAAuB,GAAG,oBAAoB,GAAG,YAAY,GAAG,eAAe,GAAG,oBAAoB,GAAG,4BAA4B,GAAG,sBAAsB,GAAG,gBAAgB,GAAG,2BAA2B,GAAG,yBAAyB,GAAG,sBAAsB,GAAG,wBAAwB,GAAG,sBAAsB,GAAG,4BAA4B,GAAG,sBAAsB,GAAG,yBAAyB,GAAG,yBAAyB,GAAG,cAAc;AACzb,kBAAkB,mBAAO,CAAC,KAAW;AACrC,eAAe,mBAAO,CAAC,KAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,YAAY,aAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,IAAI;AACzD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,0BAA0B,0BAA0B;AACpD;AACA;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA,+BAA+B,aAAa,EAAE,WAAW,EAAE,oCAAoC;AAC/F;AACA,sBAAsB;AACtB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,kBAAkB,IAAI;AACtB;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,8BAA8B,qDAAqD;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,kEAAkE,IAAI,cAAc,MAAM;AAC1F,uCAAuC,MAAM,gFAAgF,IAAI,KAAK,0CAA0C,GAAG,IAAI,KAAK;AAC5L,SAAS;AACT,mEAAmE,IAAI;AACvE;AACA;AACA;AACA;AACA,mDAAmD,IAAI,KAAK;AAC5D;AACA;AACA,SAAS;AACT,6DAA6D,gBAAgB;AAC7E;AACA,KAAK;AACL;AACA,kEAAkE,IAAI,cAAc,MAAM,yDAAyD,MAAM,oBAAoB,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK;AAC5M,mEAAmE,IAAI,2EAA2E,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK;AACjL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,kEAAkE,MAAM,EAAE,8BAA8B;AACxG;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,CAAC,WAAW,YAAY,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,UAAU;AACtD,6CAA6C,UAAU;AACvD;AACA,4CAA4C,SAAS;AACrD,4CAA4C,SAAS,6CAA6C;AAClG;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,0BAA0B,IAAI;AAC9B;AACA;AACA;AACA;AACA,uBAAuB;AACvB;;;;;;;;ACjLa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,qBAAqB,GAAG,sBAAsB,GAAG,6BAA6B;AAC9E,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;;;;;;;AClBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,yBAAyB,GAAG,4BAA4B;AACxD,iBAAiB,mBAAO,CAAC,KAAW;AACpC,kBAAkB,mBAAO,CAAC,KAAY;AACtC,gBAAgB,mBAAO,CAAC,KAAU;AAClC;AACA;AACA;AACA;AACA,YAAY,4BAA4B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,aAAa;AACpD;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,YAAY,cAAc;AAC1B;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,yBAAyB;AACzB;AACA,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;;;;;;;;ACjDa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,uBAAuB,GAAG,sBAAsB,GAAG,qBAAqB,GAAG,8BAA8B,GAAG,oBAAoB,GAAG,sBAAsB,GAAG,gBAAgB;AAC5K,gBAAgB,mBAAO,CAAC,KAAU;AAClC,wBAAwB,mBAAO,CAAC,KAAiB;AACjD,iBAAiB,mBAAO,CAAC,KAAW;AACpC,kBAAkB,mBAAO,CAAC,KAAY;AACtC,eAAe,mBAAO,CAAC,KAAS;AAChC;AACA;AACA;AACA;AACA,CAAC,eAAe,gBAAgB,gBAAgB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B,oEAAoE,KAAK;AACzE;AACA;AACA,mCAAmC,UAAU,+BAA+B,KAAK,OAAO,KAAK;AAC7F,8CAA8C,KAAK;AACnD,yDAAyD,KAAK;AAC9D;AACA;AACA,+BAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,SAAS;AACxC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,gDAAgD,UAAU,iBAAiB,UAAU;AACrF,8DAA8D,KAAK;AACnE,gDAAgD,MAAM;AACtD;AACA;AACA;AACA;AACA,gDAAgD,UAAU,kBAAkB,MAAM;AAClF,oBAAoB,UAAU,iBAAiB,MAAM,KAAK,MAAM,MAAM,KAAK;AAC3E,0DAA0D,KAAK;AAC/D;AACA;AACA;AACA,gDAAgD,UAAU,mBAAmB,MAAM;AACnF,oBAAoB,UAAU,kBAAkB,MAAM,KAAK,MAAM,MAAM,MAAM,OAAO,MAAM;AAC1F,0DAA0D,KAAK;AAC/D;AACA;AACA;AACA,gDAAgD,MAAM,iBAAiB,MAAM,WAAW,MAAM;AAC9F;AACA,gDAAgD,MAAM,gBAAgB,MAAM;AAC5E;AACA;AACA;AACA,+CAA+C,MAAM,YAAY,MAAM,WAAW,MAAM;AACxF;AACA;AACA;AACA;AACA,gDAAgD,UAAU,kBAAkB,UAAU;AACtF,mBAAmB,UAAU,mBAAmB,MAAM;AACtD,0DAA0D,KAAK;AAC/D;AACA;AACA;AACA,4BAA4B,qCAAqC;AACjE;AACA,+BAA+B,YAAY,qDAAqD,WAAW,GAAG,mBAAmB;AACjI;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,MAAM,EAAE,IAAI;AACnD;AACA,qDAAqD,KAAK;AAC1D;AACA;AACA,uCAAuC,MAAM,YAAY,MAAM,gCAAgC,KAAK;AACpG;AACA;AACA,iDAAiD,MAAM,iBAAiB,KAAK;AAC7E;AACA;AACA;AACA;AACA;AACA,8CAA8C,MAAM,EAAE,IAAI,EAAE,SAAS;AACrE;AACA;AACA;AACA,6DAA6D,MAAM,+DAA+D,KAAK;AACvI;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,MAAM;AACxD,0DAA0D,MAAM,KAAK,OAAO;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,gBAAgB,QAAQ,gBAAgB,OAAO;AAC/C,eAAe,qBAAqB,oDAAoD,QAAQ,QAAQ,uBAAuB,QAAQ,aAAa;AACpJ;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA,YAAY,oBAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;;;;;;;AC1Ma;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,sBAAsB;AACtB,kBAAkB,mBAAO,CAAC,KAAY;AACtC,eAAe,mBAAO,CAAC,KAAS;AAChC;AACA,YAAY,oBAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,YAAY,iCAAiC;AAC7C;AACA;AACA,0CAA0C,KAAK,EAAE,iCAAiC;AAClF;AACA,mEAAmE,UAAU;AAC7E;AACA;AACA,wCAAwC,WAAW;AACnD;AACA,wCAAwC,WAAW,KAAK,WAAW,cAAc,WAAW;AAC5F;AACA,UAAU,WAAW;AACrB,8CAA8C,WAAW,cAAc,WAAW;AAClF,0CAA0C,WAAW,IAAI,uCAAuC;AAChG;AACA;;;;;;;;AClCa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,eAAe,GAAG,kBAAkB,GAAG,4BAA4B;AACnE,qBAAqB,mBAAO,CAAC,KAAc;AAC3C,mBAAmB,mBAAO,CAAC,KAAY;AACvC,wBAAwB,mBAAO,CAAC,KAAiB;AACjD,mBAAmB,mBAAO,CAAC,KAAY;AACvC,mBAAmB,mBAAO,CAAC,IAAY;AACvC,kBAAkB,mBAAO,CAAC,KAAW;AACrC,oBAAoB,mBAAO,CAAC,KAAa;AACzC,kBAAkB,mBAAO,CAAC,KAAY;AACtC,gBAAgB,mBAAO,CAAC,KAAU;AAClC,kBAAkB,mBAAO,CAAC,KAAY;AACtC,eAAe,mBAAO,CAAC,KAAS;AAChC,iBAAiB,mBAAO,CAAC,KAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,4BAA4B,4CAA4C;AACxE;AACA,mDAAmD,qBAAqB,IAAI,uBAAuB;AACnG,qDAAqD,EAAE,4BAA4B;AACnF;AACA;AACA,SAAS;AACT;AACA;AACA,mDAAmD,qBAAqB,IAAI,wBAAwB;AACpG;AACA;AACA;AACA,8BAA8B,EAAE,6BAA6B,OAAO,2BAA2B,IAAI,mCAAmC,IAAI,yBAAyB,GAAG,qBAAqB,EAAE,wCAAwC,+BAA+B,GAAG,mBAAmB,GAAG;AAC7R;AACA;AACA;AACA,kEAAkE,uBAAuB,GAAG,6BAA6B;AACzH,gEAAgE,uBAAuB,GAAG,2BAA2B;AACrH,wEAAwE,uBAAuB,GAAG,mCAAmC;AACrI,8DAA8D,uBAAuB,GAAG,yBAAyB;AACjH;AACA,wEAAwE,uBAAuB,GAAG,+BAA+B;AACjI,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE,KAAK;AACL;AACA;AACA,YAAY,oBAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,YAAY,oBAAoB;AAChC,8DAA8D,aAAa;AAC3E,+BAA+B,aAAa,qDAAqD,aAAa;AAC9G,+BAA+B,aAAa,qDAAqD,aAAa;AAC9G;AACA;AACA;AACA,gGAAgG,OAAO;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,cAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,oBAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,WAAW,MAAM,uBAAuB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,oCAAoC;AAChD;AACA,sEAAsE,cAAc;AACpF;AACA;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAA6C;AACvE;AACA;AACA,qCAAqC,qBAAqB,cAAc,IAAI;AAC5E;AACA;AACA,iDAAiD,cAAc;AAC/D,kDAAkD,qBAAqB;AACvE,qCAAqC,qBAAqB,iBAAiB,IAAI,IAAI,WAAW,IAAI,SAAS;AAC3G;AACA;AACA;AACA,YAAY,sDAAsD;AAClE;AACA;AACA,mCAAmC,wBAAwB,wFAAwF,gBAAgB,GAAG,wBAAwB;AAC9L;AACA;AACA,uCAAuC,aAAa;AACpD;AACA;AACA,uCAAuC,wBAAwB;AAC/D;AACA;AACA,2BAA2B,8BAA8B;AACzD;AACA,uCAAuC,UAAU;AACjD;AACA,uCAAuC,UAAU;AACjD;AACA;AACA,YAAY,2CAA2C;AACvD,YAAY,QAAQ;AACpB;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wBAAwB,MAAM,eAAe;AACpF;AACA;AACA;AACA,YAAY,qBAAqB,aAAa,IAAI;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,EAAE,4BAA4B,uBAAuB;AAC/F;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA,sDAAsD,eAAe,iBAAiB,QAAQ;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,SAAS,gBAAgB,+BAA+B;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B,sCAAsC,YAAY,oBAAoB,kDAAkD;AACxH;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,mCAAmC;AACnD,qDAAqD,YAAY;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,iGAAiG;AAC5I;AACA;AACA;AACA;AACA;AACA,4EAA4E,yBAAyB,GAAG;AACxG,4CAA4C,kBAAkB,GAAG,WAAW;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,mCAAmC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,MAAM;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,MAAM;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,KAAK,EAAE,qEAAqE;AACnH,uCAAuC,MAAM,KAAK,KAAK;AACvD;AACA;AACA;AACA;AACA,gCAAgC,aAAa,EAAE,IAAI,8BAA8B,UAAU;AAC3F;AACA;AACA,eAAe;AACf;;;;;;;;ACvgBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,4BAA4B,GAAG,uBAAuB,GAAG,uBAAuB,GAAG,wBAAwB;AAC3G,kBAAkB,mBAAO,CAAC,KAAY;AACtC,gBAAgB,mBAAO,CAAC,KAAU;AAClC,eAAe,mBAAO,CAAC,KAAyB;AAChD,iBAAiB,mBAAO,CAAC,KAAW;AACpC;AACA,YAAY,yCAAyC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iBAAiB,GAAG,QAAQ;AACtD;AACA;AACA,KAAK;AACL;AACA;AACA,wBAAwB;AACxB;AACA;AACA,YAAY,gDAAgD;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qHAAqH,GAAG,aAAa,mBAAmB,kDAAkD,EAAE;AAC5M;AACA;AACA;AACA,iDAAiD,YAAY;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO,EAAE,oEAAoE;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA,YAAY,gBAAgB;AAC5B,qEAAqE,cAAc,GAAG,sBAAsB;AAC5G;AACA;AACA,YAAY,MAAM;AAClB,6CAA6C,KAAK;AAClD;AACA,iEAAiE,yBAAyB,aAAa,MAAM,IAAI,wBAAwB,UAAU,KAAK;AACxJ,gEAAgE,wBAAwB;AACxF;AACA,KAAK;AACL;AACA,6BAA6B,WAAW;AACxC;AACA;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C,qEAAqE,cAAc,IAAI,qDAAqD;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,gCAAgC,mCAAmC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,QAAQ,IAAI,eAAe;AAC9F;AACA;AACA;AACA;AACA,oCAAoC,QAAQ,8BAA8B,cAAc;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;;;;;;;;AC3Ha;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,2BAA2B,GAAG,2BAA2B,GAAG,oBAAoB;AAChF,kBAAkB,mBAAO,CAAC,KAAY;AACtC,eAAe,mBAAO,CAAC,KAAS;AAChC,4BAA4B,sEAAsE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,cAAc,EAAE,oCAAoC;AACpG,kCAAkC,iBAAiB,GAAG,QAAQ;AAC9D;AACA;AACA;AACA,gDAAgD,cAAc,EAAE,oCAAoC,EAAE,uCAAuC;AAC7I,kCAAkC,iBAAiB,GAAG,QAAQ,GAAG,uCAAuC;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,8CAA8C,+DAA+D;AAC7G;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA,gBAAgB,+BAA+B;AAC/C,6DAA6D,QAAQ,EAAE,qCAAqC;AAC5G;AACA,oDAAoD,UAAU,EAAE,kEAAkE;AAClI,2DAA2D,SAAS;AACpE;AACA;AACA;AACA,8FAA8F;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,0CAA0C,uEAAuE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD,yCAAyC;AACzC;AACA,2BAA2B;AAC3B;;;;;;;;AChFa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,eAAe,GAAG,YAAY,GAAG,WAAW,GAAG,iBAAiB,GAAG,WAAW,GAAG,SAAS,GAAG,kBAAkB;AAC/G,iBAAiB,mBAAO,CAAC,KAAoB;AAC7C,8CAA6C,EAAE,qCAAqC,iCAAiC,EAAC;AACtH,gBAAgB,mBAAO,CAAC,KAAmB;AAC3C,qCAAoC,EAAE,qCAAqC,uBAAuB,EAAC;AACnG,uCAAsC,EAAE,qCAAqC,yBAAyB,EAAC;AACvG,6CAA4C,EAAE,qCAAqC,+BAA+B,EAAC;AACnH,uCAAsC,EAAE,qCAAqC,yBAAyB,EAAC;AACvG,wCAAuC,EAAE,qCAAqC,0BAA0B,EAAC;AACzG,2CAA0C,EAAE,qCAAqC,6BAA6B,EAAC;AAC/G,2BAA2B,mBAAO,CAAC,KAA4B;AAC/D,oBAAoB,mBAAO,CAAC,KAAqB;AACjD,gBAAgB,mBAAO,CAAC,KAAiB;AACzC,kBAAkB,mBAAO,CAAC,KAAW;AACrC,kBAAkB,mBAAO,CAAC,KAAmB;AAC7C,kBAAkB,mBAAO,CAAC,KAAmB;AAC7C,mBAAmB,mBAAO,CAAC,KAA6B;AACxD,eAAe,mBAAO,CAAC,KAAgB;AACvC,uBAAuB,mBAAO,CAAC,KAAkB;AACjD,cAAc,mBAAO,CAAC,KAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,6CAA6C;AAClF,oCAAoC,aAAa;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8BAA8B,IAAI,kBAAkB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,gBAAgB,aAAa;AAC7B,gDAAgD,SAAS,yCAAyC;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,aAAa;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,MAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,gCAAgC;AAC/D;AACA,6CAA6C,KAAK,gBAAgB,YAAY;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA,0CAA0C,UAAU;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,WAAW;AAC/B,mDAAmD,UAAU,YAAY;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qCAAqC,KAAK;AAChD;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,EAAE,gBAAgB,EAAE,UAAU;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2CAA2C;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,GAAG;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAe;AACf;AACA;AACA;AACA;AACA,gCAAgC,IAAI,WAAW,IAAI,IAAI,eAAe;AACtE;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA,iBAAiB,SAAS,YAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA,uCAAuC,KAAK;AAC5C;AACA,uCAAuC,KAAK;AAC5C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,4DAA4D,SAAS;AACrE;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA,UAAU,aAAa;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;;;;;;;ACzmBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D;AACA,cAAc,mBAAO,CAAC,KAAiB;AACvC;AACA,kBAAe;AACf;;;;;;;;ACNa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA,kBAAe;AACf;AACA;;;;;;;;ACvBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,YAAY,mBAAO,CAAC,KAAU;AAC9B;AACA,kBAAe;AACf;;;;;;;;ACLa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAe;AACf;;;;;;;;ACVa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,+BAA+B;AAC/B,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,eAAe,mBAAO,CAAC,KAAoB;AAC3C;AACA,gBAAgB,UAAU,OAAO,mDAAmD,KAAK;AACzF,eAAe,UAAU,OAAO,wBAAwB,SAAS,KAAK;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,YAAY,iCAAiC;AAC7C;AACA,qDAAqD,KAAK;AAC1D;AACA,wBAAwB,mBAAmB;AAC3C,qCAAqC,KAAK,KAAK,aAAa;AAC5D;AACA;AACA,2DAA2D,KAAK,KAAK,aAAa,IAAI;AACtF;AACA;AACA;AACA;AACA;AACA,4BAA4B,qDAAqD;AACjF;AACA;AACA,SAAS;AACT;AACA;AACA,+BAA+B;AAC/B,kBAAe;AACf;;;;;;;;AChDa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,eAAe,mBAAO,CAAC,KAAS;AAChC,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,gBAAgB,mBAAO,CAAC,KAAqB;AAC7C,eAAe,mBAAO,CAAC,KAAoB;AAC3C;AACA;AACA,eAAe,QAAQ,wBAAwB,sBAAsB,2BAA2B;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iDAAiD;AACjE;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,WAAW,MAAM,uBAAuB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF,KAAK,MAAM,EAAE;AACrG;AACA;AACA;AACA;AACA;AACA,wGAAwG,+BAA+B,QAAQ,IAAI;AACnJ;AACA;AACA;AACA;AACA,gDAAgD,KAAK,GAAG,IAAI;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yBAAyB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;ACzGa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,eAAe,mBAAO,CAAC,KAAoB;AAC3C;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,iCAAiC;AAC5E;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;ACtBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,eAAe,mBAAO,CAAC,KAAS;AAChC;AACA;AACA;AACA;AACA;AACA,aAAa,yCAAyC;AACtD;AACA,kBAAe;AACf;;;;;;;;ACXa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,eAAe,mBAAO,CAAC,KAAoB;AAC3C;AACA,gBAAgB,UAAU,YAAY;AACtC,sDAAsD,KAAK;AAC3D,sDAAsD,KAAK,mBAAmB,KAAK;AACnF,eAAe,UAAU,YAAY,4CAA4C,eAAe,KAAK,uBAAuB,eAAe,IAAI,iBAAiB,KAAK;AACrK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA;AACA,gBAAgB,2BAA2B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,KAAK;AAC9D,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,KAAK,KAAK,IAAI;AACzD;AACA,2CAA2C,MAAM,KAAK,KAAK,KAAK,IAAI;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,KAAK;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA,yCAAyC,MAAM;AAC/C;AACA,2CAA2C,OAAO,KAAK,IAAI;AAC3D;AACA;AACA,2CAA2C,OAAO,IAAI,IAAI;AAC1D;AACA;AACA;AACA,+CAA+C,OAAO,KAAK,IAAI;AAC/D;AACA;AACA,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;AC9Fa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,0BAA0B,GAAG,4BAA4B,GAAG,aAAa;AACzE,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,eAAe,mBAAO,CAAC,KAAoB;AAC3C,eAAe,mBAAO,CAAC,KAAS;AAChC,aAAa;AACb,gBAAgB,UAAU,6BAA6B;AACvD;AACA,+CAA+C,cAAc,EAAE,MAAM,gBAAgB,UAAU;AAC/F,KAAK;AACL,eAAe,UAAU,8CAA8C,wBAAwB,YAAY,SAAS;AACpH,uBAAuB,gBAAgB;AACvC,iBAAiB,UAAU;AAC3B,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,uCAAuC,aAAa,MAAM,iDAAiD;AAC3G;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,YAAY,yBAAyB;AACrC;AACA;AACA;AACA;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,kBAAe;AACf;;;;;;;;ACpFa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,eAAe,mBAAO,CAAC,KAAoB;AAC3C;AACA,gBAAgB,QAAQ,uCAAuC,gBAAgB;AAC/E,eAAe,QAAQ,wBAAwB,kBAAkB,iBAAiB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA,6DAA6D,QAAQ;AACrE;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,kBAAe;AACf;;;;;;;;ACjEa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,0BAA0B,mBAAO,CAAC,KAAmB;AACrD,sBAAsB,mBAAO,CAAC,KAAe;AAC7C,gBAAgB,mBAAO,CAAC,KAAS;AACjC,oBAAoB,mBAAO,CAAC,KAAa;AACzC,mBAAmB,mBAAO,CAAC,KAAY;AACvC,uBAAuB,mBAAO,CAAC,KAAgB;AAC/C,wBAAwB,mBAAO,CAAC,KAAiB;AACjD,+BAA+B,mBAAO,CAAC,IAAwB;AAC/D,qBAAqB,mBAAO,CAAC,KAAc;AAC3C,4BAA4B,mBAAO,CAAC,KAAqB;AACzD,cAAc,mBAAO,CAAC,KAAO;AAC7B,gBAAgB,mBAAO,CAAC,KAAS;AACjC,gBAAgB,mBAAO,CAAC,KAAS;AACjC,gBAAgB,mBAAO,CAAC,KAAS;AACjC,aAAa,mBAAO,CAAC,KAAM;AAC3B,mBAAmB,mBAAO,CAAC,KAAY;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAe;AACf;;;;;;;;AC3Ca;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,qBAAqB;AACrB,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,eAAe,mBAAO,CAAC,KAAoB;AAC3C,eAAe,mBAAO,CAAC,KAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,YAAY,uCAAuC;AACnD;AACA;AACA;AACA;AACA;AACA,qDAAqD,KAAK;AAC1D;AACA;AACA;AACA,mCAAmC,KAAK,IAAI,EAAE;AAC9C;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA,4BAA4B,QAAQ,OAAO,EAAE,mCAAmC,YAAY,0CAA0C,cAAc;AACpJ;AACA;AACA;AACA;AACA,qBAAqB;AACrB,kBAAe;AACf;;;;;;;;ACnDa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,eAAe,mBAAO,CAAC,KAAoB;AAC3C,eAAe,mBAAO,CAAC,KAAS;AAChC,0BAA0B,mBAAO,CAAC,KAAmB;AACrD;AACA,gBAAgB,UAAU,OAAO,mDAAmD,KAAK;AACzF,eAAe,UAAU,OAAO,wBAAwB,SAAS,KAAK;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2BAA2B;AAC3C,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;AC7Ba;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,eAAe,mBAAO,CAAC,KAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,aAAa,8BAA8B;AAC3C;AACA,kBAAe;AACf;;;;;;;;ACzBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,eAAe,mBAAO,CAAC,KAAoB;AAC3C;AACA;AACA,eAAe,QAAQ,wBAAwB,kBAAkB,gBAAgB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,gDAAgD,UAAU,KAAK,MAAM;AACrE;AACA,8DAA8D,QAAQ,IAAI,EAAE;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;AC3Da;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,eAAe,mBAAO,CAAC,KAAS;AAChC,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,eAAe,mBAAO,CAAC,KAAoB;AAC3C,eAAe,mBAAO,CAAC,KAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,MAAM,kBAAkB,KAAK;AAC7F;AACA;AACA;AACA;AACA;AACA,2CAA2C,iCAAiC,QAAQ,IAAI;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,uDAAuD,MAAM,GAAG,IAAI;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;AC1Ea;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,gBAAgB,mBAAO,CAAC,KAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAe;AACf;;;;;;;;ACXa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,mBAAmB,mBAAO,CAAC,KAAwB;AACnD,eAAe,mBAAO,CAAC,KAAS;AAChC,eAAe,mBAAO,CAAC,KAAoB;AAC3C,+BAA+B,mBAAO,CAAC,IAAwB;AAC/D;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;ACrDa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,eAAe,mBAAO,CAAC,KAAoB;AAC3C;AACA;AACA,eAAe,QAAQ,wBAAwB,gBAAgB,qBAAqB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;ACrCa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,eAAe,mBAAO,CAAC,KAAoB;AAC3C;AACA;AACA;AACA,WAAW,2BAA2B;AACtC;AACA,gDAAgD,QAAQ;AACxD,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;ACZa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,qBAAqB,GAAG,qBAAqB,GAAG,kBAAkB,GAAG,wBAAwB,GAAG,wBAAwB,GAAG,2BAA2B,GAAG,wBAAwB,GAAG,sBAAsB,GAAG,qBAAqB,GAAG,mBAAmB,GAAG,yBAAyB,GAAG,wBAAwB,GAAG,8BAA8B;AAChV,kBAAkB,mBAAO,CAAC,KAAoB;AAC9C,eAAe,mBAAO,CAAC,KAAiB;AACxC,gBAAgB,mBAAO,CAAC,KAAkB;AAC1C,eAAe,mBAAO,CAAC,KAAiB;AACxC;AACA,YAAY,gBAAgB;AAC5B;AACA,wBAAwB,qCAAqC,KAAK,GAAG;AACrE;AACA,KAAK;AACL;AACA,8BAA8B;AAC9B,4BAA4B,iBAAiB,QAAQ;AACrD,uJAAuJ,SAAS,IAAI,KAAK;AACzK;AACA,wBAAwB;AACxB;AACA,oBAAoB,0BAA0B;AAC9C;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,mBAAmB;AACnB;AACA,+BAA+B,iBAAiB,QAAQ,KAAK,IAAI,SAAS;AAC1E;AACA,qBAAqB;AACrB;AACA,qCAAqC,KAAK,EAAE,sCAAsC;AAClF,+CAA+C,MAAM,KAAK,mCAAmC;AAC7F;AACA,sBAAsB;AACtB;AACA,qCAAqC,KAAK,EAAE,sCAAsC;AAClF;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,wBAAwB;AACxB,4BAA4B,wBAAwB,0CAA0C,MAAM;AACpG,2DAA2D,WAAW,IAAI,KAAK,IAAI,aAAa,EAAE,WAAW;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,cAAc,IAAI,sBAAsB;AAC7E,2DAA2D,KAAK,QAAQ,QAAQ,IAAI,KAAK,yBAAyB,KAAK,GAAG,KAAK;AAC/H;AACA,wBAAwB;AACxB;AACA,sBAAsB,WAAW,QAAQ;AACzC;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA,kCAAkC,4EAA4E,GAAG,QAAQ,IAAI,EAAE;AAC/H,KAAK;AACL;AACA,kBAAkB;AAClB;AACA,YAAY,yBAAyB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,KAAK;AAC9D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA,qBAAqB;AACrB;AACA,YAAY,2BAA2B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,8CAA8C,OAAO,KAAK,SAAS;AACnE;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,qBAAqB;AACrB;;;;;;;;AClIa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;ACTa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,aAAa,mBAAO,CAAC,KAAM;AAC3B,cAAc,mBAAO,CAAC,KAAO;AAC7B;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAqB;AAC3B;AACA;AACA;AACA;AACA,kBAAe;AACf;;;;;;;;ACfa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,eAAe,GAAG,mBAAmB;AACrC,oBAAoB,mBAAO,CAAC,KAAyB;AACrD,eAAe,mBAAO,CAAC,KAAS;AAChC,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,gBAAgB,mBAAO,CAAC,KAAqB;AAC7C,kBAAkB,mBAAO,CAAC,KAAe;AACzC,eAAe,mBAAO,CAAC,KAAoB;AAC3C;AACA;AACA;AACA;AACA,gBAAgB,wBAAwB;AACxC,gBAAgB,mDAAmD;AACnE,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,WAAW;AACjE,oDAAoD,SAAS;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,gDAAgD,IAAI,UAAU;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,YAAY,MAAM;AAClB;AACA,uCAAuC,mBAAmB;AAC1D,8BAA8B,4BAA4B,UAAU,EAAE;AACtE;AACA,mBAAmB;AACnB;AACA,YAAY,UAAU;AACtB,YAAY,kCAAkC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,8CAA8C;AAC7F,iCAAiC;AACjC;AACA;AACA,SAAS;AACT,yCAAyC,GAAG,aAAa,mBAAmB;AAC5E;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD,gEAAgE,yBAAyB,aAAa,MAAM,IAAI,wBAAwB,UAAU,KAAK,KAAK;AAC5J,+DAA+D,wBAAwB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,OAAO;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,OAAO;AAC1E;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,kBAAe;AACf;;;;;;;;ACzHa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,gBAAgB,mBAAO,CAAC,KAAwB;AAChD,kBAAkB,mBAAO,CAAC,KAAe;AACzC,oBAAoB,mBAAO,CAAC,KAAyB;AACrD,eAAe,mBAAO,CAAC,KAAoB;AAC3C;AACA,gBAAgB,UAAU,uBAAuB;AACjD,kBAAkB,QAAQ;AAC1B,2BAA2B,QAAQ;AACnC,eAAe,UAAU,4BAA4B,wBAAwB,SAAS,WAAW,SAAS,QAAQ,cAAc,KAAK;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,KAAK,EAAE,oCAAoC;AACpG,0CAA0C,KAAK,gEAAgE,kDAAkD;AACjK;AACA;AACA;AACA;AACA;AACA,+CAA+C,KAAK,MAAM,SAAS;AACnE;AACA;AACA;AACA,+BAA+B,sDAAsD;AACrF;AACA;AACA;AACA;AACA,2CAA2C,8BAA8B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qHAAqH,QAAQ;AAC7H;AACA;AACA;AACA;AACA;AACA,mDAAmD,QAAQ;AAC3D;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,QAAQ;AAC1E;AACA;AACA;AACA;AACA,uDAAuD,QAAQ;AAC/D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;ACvGa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB;AAClB;AACA;AACA;AACA;AACA,CAAC,iBAAiB,kBAAkB,kBAAkB;AACtD;;;;;;;;ACRa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,eAAe,mBAAO,CAAC,KAAQ;AAC/B,qBAAqB,mBAAO,CAAC,KAAc;AAC3C,qBAAqB,mBAAO,CAAC,KAAc;AAC3C,iBAAiB,mBAAO,CAAC,KAAU;AACnC,mBAAmB,mBAAO,CAAC,KAAY;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAe;AACf;;;;;;;;AChBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAuB;AACjD;AACA,gBAAgB,YAAY,8CAA8C,WAAW;AACrF,eAAe,YAAY,wBAAwB,UAAU,YAAY;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2CAA2C;AAC3D,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+DAA+D,KAAK,GAAG,WAAW;AAClF;AACA;AACA;AACA,8CAA8C,MAAM,mBAAmB,MAAM,iEAAiE,KAAK,uDAAuD,KAAK;AAC/M;AACA;AACA;AACA;AACA,2CAA2C,YAAY,MAAM,OAAO;AACpE;AACA;AACA;AACA,2CAA2C,KAAK,iBAAiB,OAAO,GAAG,KAAK,MAAM,OAAO,GAAG,KAAK;AACrG,0CAA0C,OAAO,GAAG,KAAK;AACzD,8DAA8D,QAAQ,kBAAkB,YAAY,IAAI,OAAO,QAAQ,KAAK;AAC5H,2CAA2C,QAAQ,KAAK,QAAQ,cAAc,OAAO,MAAM,UAAU,MAAM,UAAU;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO,+BAA+B,cAAc;AAClG;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,kBAAkB,EAAE,mCAAmC;AACrG;AACA,wDAAwD,gCAAgC;AACxF;AACA,0FAA0F,IAAI;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,OAAO,GAAG,KAAK;AACpE;AACA,yEAAyE,OAAO,GAAG,KAAK,yBAAyB,OAAO,QAAQ,KAAK;AACrI;AACA;AACA,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;AC3Fa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,iBAAiB,mBAAO,CAAC,KAAU;AACnC;AACA,kBAAe;AACf;;;;;;;;ACLa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,yBAAyB,GAAG,0BAA0B;AACtD,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;;;;;;;;ACjBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,eAAe,mBAAO,CAAC,KAAoB;AAC3C,gBAAgB,mBAAO,CAAC,KAAqB;AAC7C;AACA;AACA,eAAe,YAAY,wBAAwB,gBAAgB,YAAY;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA,+CAA+C,0CAA0C,GAAG,KAAK,IAAI,WAAW;AAChH;AACA;AACA,yCAAyC,QAAQ,MAAM,KAAK;AAC5D;AACA,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;ACxBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,eAAe,mBAAO,CAAC,KAAoB;AAC3C,gBAAgB,mBAAO,CAAC,KAAqB;AAC7C;AACA;AACA,eAAe,YAAY,wBAAwB,iBAAiB,YAAY;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,SAAS,GAAG,KAAK,IAAI,EAAE;AAChG;AACA;AACA;AACA;AACA,sCAAsC,SAAS,GAAG,KAAK,IAAI,QAAQ,GAAG,EAAE;AACxE,sCAAsC,MAAM,MAAM,IAAI;AACtD;AACA,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;AC/Ca;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,sBAAsB,mBAAO,CAAC,KAAe;AAC7C,qBAAqB,mBAAO,CAAC,KAAc;AAC3C,sBAAsB,mBAAO,CAAC,KAAe;AAC7C,kBAAkB,mBAAO,CAAC,KAAW;AACrC,0BAA0B,mBAAO,CAAC,KAAmB;AACrD,mBAAmB,mBAAO,CAAC,KAAY;AACvC,qBAAqB,mBAAO,CAAC,KAAc;AAC3C,sBAAsB,mBAAO,CAAC,KAAe;AAC7C,gBAAgB,mBAAO,CAAC,KAAS;AACjC,eAAe,mBAAO,CAAC,KAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,kDAAkD;AACxD,MAAM,4CAA4C;AAClD;AACA;AACA;AACA,kBAAe;AACf;;;;;;;;AChCa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAuB;AACjD;AACA,cAAc,qBAAqB;AACnC;AACA,mDAAmD,MAAM,OAAO,YAAY;AAC5E,KAAK;AACL,eAAe,YAAY,wBAAwB,SAAS,YAAY;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4BAA4B;AAC5C;AACA,0CAA0C,KAAK,UAAU,IAAI,EAAE,WAAW;AAC1E,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;ACvBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,eAAe,mBAAO,CAAC,KAAoB;AAC3C,qBAAqB,mBAAO,CAAC,KAA0B;AACvD;AACA,cAAc,qBAAqB;AACnC;AACA,mDAAmD,MAAM,OAAO,YAAY;AAC5E,KAAK;AACL,eAAe,YAAY,wBAAwB,SAAS,YAAY;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD;AACA,oEAAoE,KAAK,+BAA+B,mDAAmD,GAAG,KAAK;AACnK,0CAA0C,KAAK,EAAE,IAAI,EAAE,WAAW;AAClE,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;AC1Ba;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAuB;AACjD;AACA;AACA,eAAe,wCAAwC;AACvD,eAAe,wCAAwC;AACvD,wBAAwB,uCAAuC;AAC/D,wBAAwB,uCAAuC;AAC/D;AACA;AACA,gBAAgB,qBAAqB,mCAAmC,qBAAqB,EAAE,WAAW;AAC1G,eAAe,qBAAqB,wBAAwB,cAAc,oBAAoB,WAAW,YAAY;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4BAA4B;AAC5C,0CAA0C,MAAM,EAAE,oBAAoB,EAAE,YAAY,WAAW,KAAK;AACpG,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;AC1Ba;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAuB;AACjD;AACA,cAAc,qBAAqB;AACnC;AACA,mDAAmD,MAAM,OAAO,YAAY;AAC5E,KAAK;AACL,eAAe,YAAY,wBAAwB,SAAS,YAAY;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4BAA4B;AAC5C;AACA,sDAAsD,KAAK,WAAW,IAAI,EAAE,WAAW;AACvF,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;ACvBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB,mBAAO,CAAC,KAAuB;AACjD;AACA,gBAAgB,YAAY,+CAA+C,WAAW;AACtF,eAAe,YAAY,wBAAwB,cAAc,YAAY;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4BAA4B;AAC5C;AACA;AACA;AACA;AACA,sDAAsD,IAAI,MAAM,IAAI,SAAS,KAAK;AAClF,kCAAkC,KAAK,eAAe,IAAI;AAC1D,2CAA2C,YAAY,YAAY,KAAK,IAAI,KAAK,GAAG,WAAW,IAAI,QAAQ;AAC3G,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;ACzBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,eAAe,mBAAO,CAAC,KAAS;AAChC,kBAAkB,mBAAO,CAAC,KAAuB;AACjD;AACA,gBAAgB,YAAY,+CAA+C,WAAW;AACtF,eAAe,YAAY,wBAAwB,WAAW,YAAY;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sCAAsC;AACtD;AACA;AACA,+DAA+D,WAAW,IAAI,EAAE;AAChF,2CAA2C,OAAO,QAAQ,KAAK;AAC/D,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;ACvBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,eAAe,mBAAO,CAAC,KAAS;AAChC,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,eAAe,mBAAO,CAAC,KAAoB;AAC3C;AACA,gBAAgB,UAAU,mBAAmB,wDAAwD,gBAAgB;AACrH,eAAe,UAAU,mBAAmB,wBAAwB,mBAAmB,iBAAiB;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2CAA2C;AAC3D,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA,sDAAsD,YAAY,uBAAuB,WAAW;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA,aAAa;AACb;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;AC9Ea;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,mBAAmB,mBAAO,CAAC,KAAiC;AAC5D,kBAAkB,mBAAO,CAAC,KAAuB;AACjD,eAAe,mBAAO,CAAC,KAAoB;AAC3C,gBAAgB,mBAAO,CAAC,KAAqB;AAC7C;AACA,gBAAgB,UAAU,QAAQ,mEAAmE,GAAG,MAAM,GAAG;AACjH,eAAe,UAAU,QAAQ,wBAAwB,KAAK,EAAE,OAAO,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yDAAyD;AACzE;AACA;AACA;AACA;AACA,uEAAuE,YAAY;AACnF;AACA;AACA,uDAAuD,KAAK;AAC5D;AACA,4BAA4B,MAAM;AAClC;AACA,uCAAuC,GAAG;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE,uCAAuC,EAAE,EAAE,GAAG;AAC9C,kDAAkD,KAAK,GAAG,EAAE;AAC5D;AACA;AACA,sDAAsD,MAAM,kCAAkC,MAAM;AACpG;AACA,mDAAmD,QAAQ,GAAG,KAAK;AACnE,sDAAsD,QAAQ,GAAG,KAAK;AACtE;AACA;AACA,iBAAiB;AACjB,8CAA8C,QAAQ,GAAG,KAAK,MAAM,EAAE;AACtE,aAAa;AACb;AACA;AACA;AACA;AACA,oDAAoD,EAAE,EAAE,GAAG,qCAAqC,GAAG,IAAI,IAAI,EAAE,EAAE,GAAG,oCAAoC,IAAI,GAAG,KAAK,GAAG,EAAE,KAAK,KAAK,GAAG,EAAE;AACtL;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA,kBAAe;AACf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;;;;;;;;;ACfA;AACA;AACA;AACA;AAC+B;AACa;AACH;AACwB;AAC1D;AACA,4BAA4B,yBAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,sBAAO;AACzF,qCAAqC,sBAAO;AAC5C;AACA,gFAAgF,UAAU,aAAa,KAAK;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iCAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+FAA+F,yBAAyB;AACxH;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yBAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,UAAU;AAC7C;AACA;AACA;AACA,6EAA6E;AAC7E,YAAY,6BAAmB,UAAU,iJAAiJ;AAC1L,gBAAgB,6BAAmB,QAAQ;AAC3C;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA,YAAY,6BAAmB,aAAa;AAC5C;AACA;AACA;AACA,yJAAyJ,2BAA2B,6BAAmB,CAAC,qCAAS,gBAAgB,6BAAmB,CAAC,qCAAS;AAC9P;AACA;AACA;;ACxRA;AACA;AACA;AACA;AAC4C;AACb;AAC2C;AAC1E;AACO,2BAA2B,yBAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oCAAQ;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,UAAU,gCAAgC;AAC7E;AACA;AACA;AACA,gBAAgB,6BAAmB,UAAU,gCAAgC;AAC7E,YAAY,6BAAmB,UAAU,uBAAuB;AAChE;AACA;AACA,gBAAgB,6BAAmB,QAAQ,kGAAkG;AAC7I;AACA;AACA;AACA,gBAAgB,6BAAmB,UAAU,gCAAgC;AAC7E,YAAY,6BAAmB,UAAU,sCAAsC;AAC/E;AACA;AACA;AACA,2CAA2C,6BAAmB,UAAU,gCAAgC;AACxG,YAAY,6BAAmB,UAAU,0BAA0B;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,6BAAmB,UAAU,8BAA8B;AAC1E;AACA;AACA,gBAAgB,6BAAmB,CAAC,aAAa,IAAI;AACrD;AACA;AACA,gCAAgC,WAAW;AAC3C,aAAa,oLAAoL;AACjM;AACA;AACA,yDAAyD,6BAAmB,UAAU,6DAA6D;AACnJ,YAAY,6BAAmB,UAAU,wCAAwC;AACjF,+CAA+C,6BAAmB,UAAU,iCAAiC;AAC7G;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,UAAU,gNAAgN;AAC7P;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,QAAQ;AAC3C;AACA,eAAe;AACf;AACA;AACA,6CAA6C,6BAAmB,CAAC,aAAa,IAAI;AAClF;AACA;AACA,gCAAgC,WAAW;AAC3C,aAAa,oIAAoI,MAAM,6BAAmB;AAC1K;AACA;AACA,gBAAgB,6BAAmB,UAAU,gCAAgC;AAC7E,YAAY,6BAAmB,UAAU,4DAA4D;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAAmB,CAAC,wBAAc;AACrD;AACA,gBAAgB,6BAAmB,UAAU,4DAA4D;AACzG,YAAY,6BAAmB,UAAU,WAAW,wBAAwB,EAAE;AAC9E;AACA;AACA;AACA,wBAAwB,6BAAmB,UAAU,8CAA8C;AACnG,oBAAoB,6BAAmB,UAAU,wCAAwC;AACzF,yCAAyC,QAAQ,6EAA6E;AAC9H;AACA,oBAAoB,6BAAmB,UAAU,uCAAuC;AACxF,wBAAwB,6BAAmB,aAAa;AACxD;AACA;AACA,+BAA+B;AAC/B,wBAAwB,6BAAmB,aAAa;AACxD;AACA;AACA;AACA,+BAA+B;AAC/B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,CAAC,wBAAc;AAClD,YAAY,6BAAmB,UAAU,wEAAwE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5OA;AACA;AACA;AACA;AAC+B;AACe;AAC9C;AACA;AACO,2BAA2B,yBAAe;AACjD;AACA,gBAAgB,6BAAmB,UAAU;AAC7C,2BAA2B,kCAAkC;AAC7D,aAAa,+BAA+B;AAC5C,YAAY,6BAAmB,UAAU,wCAAwC;AACjF,wBAAwB,6BAAmB,CAAC,YAAY,IAAI,qVAAqV;AACjZ,aAAa;AACb;AACA;AACA;;AClBA;AACA;AACA;AACA;AACmE;AACpC;AACxB,gCAAgC,yBAAe;AACtD;AACA,gBAAgB,6BAAmB,UAAU;AAC7C;AACA,oGAAoG;AACpG;AACA,YAAY,6BAAmB,CAAC,kDAAsB,UAAU,sEAAsE;AACtI;AACA;AACA;;ACfA;AACA;AACA;AACA;AACsD;AACvB;AACyB;AACxD;AACA,YAAY,6BAAmB,UAAU,mCAAmC;AAC5E,QAAQ,6BAAmB;AAC3B,YAAY,6BAAmB;AAC/B,gBAAgB,6BAAmB;AACnC,oBAAoB,6BAAmB;AACvC,wBAAwB,6BAAmB;AAC3C,oBAAoB,6BAAmB;AACvC,oBAAoB,6BAAmB;AACvC,wBAAwB,6BAAmB;AAC3C,oBAAoB,6BAAmB;AACvC,gBAAgB,6BAAmB;AACnC,oBAAoB,6BAAmB;AACvC,wBAAwB,6BAAmB;AAC3C,oBAAoB,6BAAmB;AACvC,oBAAoB,6BAAmB;AACvC,wBAAwB,6BAAmB;AAC3C,oBAAoB,6BAAmB;AACvC;AACA;AACA;AACA,YAAY,6BAAmB,UAAU,2CAA2C;AACpF,QAAQ,6BAAmB,QAAQ,uFAAuF;AAC1H;AACA;AACA,QAAQ,6BAAmB,QAAQ,sFAAsF;AACzH;AACA;AACO,qBAAqB,yBAAe;AAC3C;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,UAAU,gCAAgC;AAC7E,YAAY,6BAAmB,CAAC,iBAAiB,IAAI,qGAAqG;AAC1J;AACA;AACA;AACA,gBAAgB,6BAAmB,UAAU,+BAA+B;AAC5E,YAAY,6BAAmB,UAAU,kCAAkC;AAC3E,gBAAgB,6BAAmB;AACnC,gBAAgB,6BAAmB,CAAC,qCAAS,IAAI,gNAAgN;AACjQ,gBAAgB,6BAAmB,oBAAoB,oKAAoK;AAC3N,YAAY,6BAAmB,UAAU,8CAA8C;AACvF,gBAAgB,6BAAmB,UAAU,qCAAqC;AAClF;AACA;AACA,oBAAoB,6BAAmB,UAAU,gCAAgC;AACjF,wBAAwB,6BAAmB,UAAU,wBAAwB;AAC7E;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,gBAAgB,4BAA4B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,gBAAgB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;AACA;AACA;AACA;AACwD;AACZ;AACE;AACZ;AACa;AAChB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,UAAU,EAAE,MAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sCAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,qCAAQ;AACtB;AACA;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,yBAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0CAA0C;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oBAAoB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,gBAAgB;AACrD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAO,mEAAmE,wDAAwD;AAClJ;AACA,gBAAgB,sBAAO;AACvB;AACA;AACA,oBAAoB,sBAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAO,mEAAmE,wDAAwD;AAClJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,UAAU,2DAA2D;AACxG,YAAY,6BAAmB,CAAC,MAAM,IAAI,uSAAuS;AACjV,YAAY,6BAAmB,CAAC,YAAY,IAAI;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4DAA4D;AAC7E;AACA;AACA;;ACnWA;AACA;AACA;AACA;AAC0B;AACgB;AACnC;AACP,WAAW,sCAAmB,CAAC,UAAU,IAAI,qDAAqD;AAClG;AACA;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACgF;AACV;AACJ;AACf;AACP;AACO;AACP;AACP;AACO;AACD;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0BAAgB;AAC/B,eAAe,yBAAW,EAAE,iDAAqB;AACjD;AACA,wFAAwF,4BAAc;AACtG;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mCAAM,GAAG;AACjD;AACA,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb,gCAAgC,UAAU;AAC1C;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb,gCAAgC,UAAU;AAC1C;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA,qBAAqB;AACrB;AACA;AACA,0CAA0C,aAAa;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,oBAAoB,oCAAQ;AAC5B;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA,gCAAgC,MAAM,EAAE,6BAAe;AACvD;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,yBAAe;AAC9C;AACA,gCAAgC;AAChC;AACA,aAAa;AACb;AACA;AACA;AACA,gCAAgC,sBAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,qCAAqC,cAAc;AACnD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,0CAAe,SAAS,EAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,gCAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClTA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACkD;;AAE9B;;;;;;;;;ACRP;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;;;;;;;ACvEa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,aAAa,mBAAO,CAAC,KAAiB;AACtC,aAAa,mBAAO,CAAC,KAAc;AACnC,aAAa,mBAAO,CAAC,KAAkB;AACvC,aAAa,mBAAO,CAAC,KAAW;AAChC,aAAa,mBAAO,CAAC,KAAU;AAC/B;;;;;;;;AC7Ba;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D;;;;;;;;ACJa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,sBAAsB;AACtB,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C,qBAAqB,mBAAO,CAAC,KAAoB;AACjD,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA,gCAAgC,eAAe,GAAG,QAAQ;AAC1D;AACA;AACA,6CAA6C,MAAM;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA,qCAAqC,eAAe,GAAG,QAAQ;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,MAAM;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,0BAA0B;AAC3B;;;;;;;;ACzTa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,eAAe;AACf,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,gBAAgB,uBAAuB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA,6DAA6D;AAC7D;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,oBAAoB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,kBAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,UAAU;AACnE;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,IAAI,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,cAAc,eAAe,eAAe;AAC7C;;;;;;;;AChPa;AACb;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,gBAAgB;AAChB,oBAAoB,mBAAO,CAAC,IAAmB;AAC/C;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZA;AACA;AAC+B;AAC/B;AACA;AACA;AACO;AACP,YAAY,wCAAwC;AACpD;AACA,0BAA0B,kBAAc;AACxC;AACA,YAAY,uBAAmB,UAAU,qCAAqC,gBAAgB,YAAY;AAC1G,kCAAkC,EAAE;AACpC;AACA,oBAAoB,uBAAmB,UAAU,mBAAmB,gBAAgB,QAAQ,OAAO;AACnG;AACA;AACA,oBAAoB,uBAAmB,UAAU,mBAAmB,eAAe,QAAQ,OAAO;AAClG;AACA;AACA,oBAAoB,uBAAmB,UAAU,mBAAmB,eAAe,QAAQ,OAAO;AAClG;AACA,KAAK;AACL;AACA;;;;;;ACxBA;AACA;AACqD;AACC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,oBAAoB,oBAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,0CAA0C,yBAAW;AACrD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;;AC3JA;AACA;AAC+B;AAC/B;AACA;AACA;AACO;AACP,YAAY,6BAA6B;AACzC,YAAY,uBAAmB,UAAU,gJAAgJ;AACzL,QAAQ,uBAAmB,WAAW,0CAA0C;AAChF;AACA;AACA;AACA;AACA;AACA,YAAY,uBAAmB,UAAU;AACzC,sBAAsB,iBAAiB;AACvC,WAAW;AACX,QAAQ,uBAAmB;AAC3B;AACA;;ACpBA;AACA;AAC+B;AAC/B;AACA;AACA;AACO;AACP,YAAY,oCAAoC;AAChD,YAAY,uBAAmB,WAAW,oCAAoC,UAAU,0BAA0B;AAClH;AACA;;ACVA;AACA;AACA;AACA;AAC0B;AACnB;AACP;AACA;AACA;AACA,qJAAqJ,QAAQ,IAAI,QAAQ,EAAE,QAAQ;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gCAAmB,UAAU,qMAAqM;AAC9O,QAAQ,gCAAmB,UAAU,wBAAwB;AAC7D,YAAY,gCAAmB,aAAa,4BAA4B,OAAO,+EAA+E;AAC9J,YAAY,gCAAmB,WAAW,wJAAwJ;AAClM;AACA;;ACvBA;AACA;AACwB;AACA;AACM;AACP;AACU;AACjC;;;;;;ACPA;AACA;AAC6C;AAC0B;AACV;AAC7D;AACA;AACA;AACO,wBAAwB,oBAAM;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2CAAa;AAC7C;AACA,8CAA8C,yBAAW;AACzD,gDAAgD,mBAAK;AACrD,qDAAqD,mBAAK;AAC1D,kDAAkD,mBAAK;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,IAAI;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2BAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2BAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,+BAA+B,gDAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2BAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;ACxJA;AACA;AAC0C;AAC1C;AACO,uBAAuB,oBAAK;AACnC;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC6B;AACD;AACH;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTpB;AACA;AACA;AACA;AACA;AACA;AAC0D;AACsD;AAC/D;AACA;AACa;AACX;AACY;AACY;AACrB;AACqC;AACpD;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kEAAgB;AAC9B,eAAe,yEAAgB,EAAE,gEAAW;AAC5C;AACA,QAAQ,iEAAe;AACvB,QAAQ,2DAAS;AACjB,QAAQ,oEAAe;AACvB,QAAQ,2DAAS;AACjB,QAAQ,+DAAa;AACrB,QAAQ,wEAAuB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,MAAM,EAAC;AACtB;AACA;AACA;AACA;AACA;AACA,YAAY,2BAA2B;AACvC;AACA;AACA,wBAAwB,+DAAa;AACrC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,mCAAmC;AAClE;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,8BAA8B,kDAAI,GAAG,UAAU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB;AACpB,SAAS;AACT;AACA;AACA,cAAc,kCAAkC;AAChD,cAAc,kCAAkC;AAChD,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,2BAA2B,mBAAmB;AAC5E,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,oBAAoB;AACpB,SAAS;AACT;AACA;AACA;AACA,oBAAoB;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,wBAAwB;AACjF;AACA;AACA,mBAAmB,mEAAY;AAC/B;AACA;AACA,gCAAgC,iBAAiB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2BAA2B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,mEAAY;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,6DAAW;AAChD;AACA;AACA;AACA,mEAAmE,SAAS,QAAQ;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,oEAAoE,gBAAgB;AACpF;AACA,6BAA6B,0DAAK;AAClC,8BAA8B,mEAAY;AAC1C;AACA,6BAA6B,gEAAc,GAAG,mCAAmC;AACjF,0CAA0C,kBAAkB;AAC5D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gEAAgE,MAAM;AACtE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,cAAc,kEAAW,aAAa,wBAAwB;AAC9D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2DAAS;AACzB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,cAAc,+DAAQ,aAAa,wBAAwB;AAC3D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2BAA2B,QAAQ,gHAAgH;AACnJ,cAAc,gEAAS,aAAa,wBAAwB;AAC5D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,UAAU,IAAI,cAAc;AACzE;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxfA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACK;AACT;;AAEhB;;;ACVpB;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACG;AACH;AACA;AACD;AACC;;;;;;;;;;;;;;;;;;;;;;ACb7C;AACA;AAC0C;AAC1C;AACA;AACA;AACO,6BAA6B,eAAK;AACzC;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;;;;;;;;;;AClCA;AACA;AACyD;AACL;AACR;AACI;AACP;AACX;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,uBAAuB,iCAAM;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA,0BAA0B,yBAAe;AACzC;AACA,mCAAmC,4BAAc;AACjD;AACA;AACA;AACA,0BAA0B,GAAG,SAAS;AACtC,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,aAAa;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,OAAO;AACpE,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iCAAM;AAC7B,QAAQ,8BAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,YAAY,sBAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2BAA2B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2GAAsB;AACtC,gBAAgB,2GAA0B;AAC1C;AACA,sBAAsB,2GAA4B;AAClD,sBAAsB,2GAA6B;AACnD,gBAAgB,2GAAgC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;ACvgBA;AACA;AACA;AACA;AACA;AACA;AACyB;AACA;AACzB;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACqD;AACC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAa,EAAE,gEAAW;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,iEAAe,MAAM,EAAC;AACtB;;;;;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACqD;AACC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAa,EAAE,gEAAW;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,iEAAe,MAAM,EAAC;AACtB;;;;;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACqD;AACC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAa,EAAE,gEAAW;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,iEAAe,MAAM,EAAC;AACtB;;;;;;;;;;;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACqE;AACN;AAC6G;AACtG;AACkG;AACxK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,mEAAc;AAC7F,0BAA0B,GAAG,4DAAe;AAC5C;AACA,oBAAoB,iEAAoB;AACxC,qBAAqB,8DAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT,2BAA2B,YAAY,yJAAyJ;AAChM,2BAA2B,YAAY;AACvC,KAAK;AACL;AACA;AACA,sCAAsC,oEAAa;AACnD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT,2BAA2B,YAAY,2JAA2J;AAClM,2BAA2B,YAAY;AACvC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT,2BAA2B,YAAY,2JAA2J;AAClM,2BAA2B,YAAY;AACvC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,0CAA0C,QAAQ,sEAAsE;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAa;AAC/B,kBAAkB,sEAAe;AACjC;AACA;AACA;AACA;AACA,+CAA+C,iBAAiB;AAChE;AACA;AACA,+CAA+C,kBAAkB;AACjE;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,wBAAwB,mEAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F,MAAM;AACnG;AACA;AACA;AACA,0BAA0B,2EAAoB;AAC9C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8DAAO;AACzC,4CAA4C,2EAAoB;AAChE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,4BAA4B,8DAAO,GAAG,wBAAwB;AAC9D;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,2BAA2B,oEAAa;AACxC;AACA,cAAc,mEAAY;AAC1B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iCAAiC,sCAAsC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,qEAAwB;AACtC;AACA;AACA,mBAAmB,oEAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oEAAuB;AACrC,eAAe,qEAAwB;AACvC,eAAe,gEAAW,EAAE,oEAAe,EAAE,8DAAS,EAAE,yEAAgB;AACxE;AACA;AACA;AACA;AACA;AACA,iEAAe,mBAAmB,EAAC;AACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjRA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACkD;AACF;AACR;;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVpB;AACA;AACiE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,yBAAe;AAC3C;AACA;AACA,SAAS;AACT;AACA;AACA,0BAA0B,iBAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,6DAA6D,kBAAkB;AAC/E,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;;;;;;ACxEA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,qCAAqC,oBAAK;AACjD;AACA;AACA;AACO,oCAAoC,oBAAK;AAChD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;;AC5BA;AACA;AACsD;AACV;AACD;AACA;AAC3C;AACA;AACA;AACO,mCAAmC,uBAAS;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,oBAAM;AAC/C,oCAAoC,oBAAM;AAC1C,qGAAqG,GAAG,eAAe;AACvH;AACA,oCAAoC,oBAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,aAAa,sBAAO;AACpB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kHAAkH,QAAQ,sEAAsE;AAChM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpOA;AACA;AAC+B;AACsB;AACrD;AACA;AACA;AACO,kCAAkC,6BAAmB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAuD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAAmB,CAAC,uCAAQ,IAAI;AAChD;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,YAAY,6BAAmB,UAAU,iCAAiC;AAC1E,gBAAgB,6BAAmB,WAAW,0EAA0E;AACxH;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACqD;AACtB;AACiB;AAChD;AACA;AACA;AACO,kCAAkC,6BAAmB;AAC5D;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B,gBAAgB,6BAAmB,CAAC,uCAAQ,IAAI,yFAAyF;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6BAAmB,CAAC,mBAAmB,IAAI,QAAQ,cAAc,GAAG,aAAa,GAAG,aAAa,sLAAsL;AACxT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACyD;AAC1B;AACiB;AAChD;AACA;AACA;AACO,oCAAoC,0BAAY;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6BAAmB,UAAU,6CAA6C;AAC9F,gBAAgB,6BAAmB,UAAU,oDAAoD;AACjG,oBAAoB,6BAAmB;AACvC,oBAAoB,6BAAmB;AACvC;AACA,gBAAgB,6BAAmB,CAAC,mBAAmB,IAAI;AAC3D,4CAA4C,SAAS;AACrD,aAAa;AACb;AACA,eAAe;AACf;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACsD;AACN;AACG;AACnD;AACA;AACA;AACO,mCAAmC,uBAAS;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa,wBAAK,gBAAgB;AAClD;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yBAAM;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,MAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;AC/FA;AACA;AACwD;AACxD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gDAAkB;AACrC;AACA,SAAS;AACT;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AAC4C;AAC5C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,uCAAuC,gBAAgB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,YAAY,4CAA4C;AACxD;AACA;AACA;AACA;AACA;AACA,wCAAwC,eAAe;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,gBAAgB,IAAI,UAAU;AACtF;AACA;AACA;AACA;AACA;AACO;AACP,uFAAuF,gBAAgB;AACvG;AACA,KAAK;AACL;AACA;;;;;;AChLA;AACA;AACiD;AACO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,cAAc,2CAAc;AAC5B;AACA;AACA;AACA;AACA,oFAAoF,gCAAS;AAC7F;AACA;AACA;AACA;AACA,SAAS;AACT,8CAA8C,MAAM;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sCAAsC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,wBAAwB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,GAAG;AACnC;AACA,gCAAgC,GAAG;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,IAAI;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI,KAAK,GAAG,KAAK,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnOA;AACA;AACyB;AACc;AACvC;;ACJA;AACA;AACA;AACA;AACA;AACA;AAC0B;AACF;AACA;AACG;AACA;AACD;AACA;AACD;AACC;AAC1B;AACgD;AAChD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChBA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACL;AACE;AACC;;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZpB;AACA;AACA;AACA;AACA;AACA;AACsD;AACT;AACW;AACA;AACK;AACE;AACO;AAC7B;AACA;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gEAAW;AAC1B,cAAc,gEAAe;AAC7B;AACA,mFAAmF,mEAAc;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,wBAAwB,qCAAqC;AAC7D;AACA;AACA;AACA;AACA,uCAAuC,wBAAwB;AAC/D;AACA,kCAAkC,wDAAO,GAAG,oCAAoC;AAChF,oBAAoB,mDAAM;AAC1B,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gEAAW;AAC1B,eAAe,gEAAe,EAAE,gEAAe;AAC/C;AACA,mFAAmF,mEAAc;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oCAAoC;AAChF;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gEAAW;AAC1B,eAAe,gEAAe,EAAE,kEAAgB;AAChD;AACA,mFAAmF,mEAAc;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oCAAoC;AAChF;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gEAAW;AAC1B,eAAe,gEAAe,EAAE,kEAAc,EAAE,uEAAmB;AACnE;AACA,mFAAmF,mEAAc;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uDAAI;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,OAAO;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oCAAoC;AAChF;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,OAAO,EAAC;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA;AACA,uBAAuB,uDAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxQA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;AACU;AACH;AACA;;AAE3B;;;ACXpB;AACA;AACA;AACA;;AAEA;AACwC;AACO;AACA;AACC;AACJ;AACG;AACF;AACD;;;;;;;;;;;;;;;;;;;;;ACb5C;AACA;AAC0C;AAC1C;AACA;AACA;AACO,4BAA4B,eAAK;AACxC;;;;;;;;ACPA;AACA;AACqD;AACF;AACG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,sBAAsB,oBAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,yBAAW;AACrD,0BAA0B,kCAAS,GAAG,sBAAsB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAQ;AAChB;AACA;AACA;AACA;AACA;AACA,sBAAsB,8BAA8B;AACpD;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;;AC9MA;AACA;AACA;AACA;AACA;AACA;AACyB;AACA;AACzB;;;;;;;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqE;AACM;AAC1B;AACc;AACsD;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oEAAe;AAC9B,cAAc,yEAAoB;AAClC;AACA;AACA;AACA,mBAAmB,wEAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oEAAe,SAAS,yEAAgB;AACvD,eAAe,8DAAS,EAAE,yEAAoB;AAC9C,cAAc,gEAAW;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,uEAAkB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,wDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yEAAgB,EAAE,gEAAW,EAAE,yEAAoB;AAClE,eAAe,2DAAS,EAAE,iEAAe;AACzC;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,YAAY;AACrC,yBAAyB,aAAa,IAAI,WAAW;AACrD;AACA,0DAA0D,OAAO;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,gEAAU;AACvD;AACA;AACA;AACA,gCAAgC,wDAAM;AACtC,gCAAgC,wDAAM,YAAY,sCAAsC;AACxF;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,OAAO;AAC5F;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,SAAS;AACT;AACA,yDAAyD,OAAO;AAChE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,OAAO,EAAC;AACvB;;;;;;;;;;;AC9JA;AACA;AACA;AACA;;AAEA;AAC6C;AACG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACR7C;AACA;AAC+C;AACS;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,kFAAkF;AACzF;AACA,6FAA6F,uCAAgB;AAC7G;AACA,8BAA8B,gBAAgB,GAAG,0BAA0B;AAC3E,6BAA6B,oBAAM;AACnC,uBAAuB,oBAAM;AAC7B;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAgB;AACzC;AACA;AACA,kBAAkB,uCAAgB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uCAAgB;AAClC;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACoD;AACV;AACQ;AAClD;AACA;AACA;AACO;AACP;AACA;AACA;AACO,iCAAiC,oBAAK;AACtC,kCAAkC,uBAAa;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sBAAsB,gIAAgI;AACrK;AACA;AACA;AACA;AACA;AACO,wBAAwB,oBAAK;AACpC;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACiD;AACP;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,qBAAqB;AAC1F;AACA,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,uBAAuB,eAAe;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,eAAe;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,SAAS;AACtI;AACA,iBAAiB,eAAe;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,6CAA6C;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA,uBAAuB,4EAA4E;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACmB;AACnB;;AC7bA;AACA;AACoC;AACa;AACjD;AACA;AACA;AACA;AACO;AACP;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;;ACtDA;AACA;AACoC;AACkC;AAC5B;AAC1C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,mBAAmB;AAC5F;AACA,kCAAkC,OAAO,GAAG,oCAAoC;AAChF,8BAA8B,qBAAqB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,kBAAkB;AAC7E;AACA;AACA;AACA,mHAAmH;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iIAAiI,qBAAqB;AACtJ;AACA;AACA,+CAA+C,qBAAqB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,qBAAqB;AAC5D;AACA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACuB;AACG;AACA;AACD;AACA;AACzB;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACyG;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,sEAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,4EAAqB;AACnC;AACA;AACA,yCAAyC,2EAAoB;AAC7D;AACA;AACA;AACA,iEAAe,4CAA4C,EAAC;AAC5D;;;;;;;;;;AClCA;AACA;AACA;AACA;;AAEA;AACkD;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPhD;AACA;AAC6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,+BAA+B,cAAc,IAAI;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kBAAI;AAClB;AACA;AACA,KAAK,IAAI;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;ACtFA;AACA;AACA;AACA;AAC0B;AACS;AACnC;AACA;AACA;AACA;AACA;AACA;AACO;AACP,YAAY,sCAAsC;AAClD,YAAY,gCAAmB,aAAa,sBAAsB,OAAO,8FAA8F;AACvK;AACA;;;;;;;;;;;;;;;;;;AChBA;AACA;AACwD;AACjD;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,iCAAiC;AAC3E,uCAAuC,sBAAsB;AAC7D,yCAAyC,sBAAsB;AAC/D,0CAA0C,sBAAsB;AAChE,wCAAwC,sBAAsB;AAC9D,+CAA+C,yBAAyB;AACxE,kDAAkD,yBAAyB;AAC3E,iDAAiD,yBAAyB;AAC1E,8CAA8C,yBAAyB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAc;AAC7B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,0DAA0D;AACxE;AACA;AACA,qCAAqC,iBAAiB;AACtD,iCAAiC,aAAa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8BAA8B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;AACrC;;AC7WA;AACA;AACyC;AACE;AACjB;AACoB;AACI;AACI;AACY;AAC1B;AACU;AAC3C;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,eAAe;AAClD;AACA;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA,qBAAqB,MAAM;AAC3B;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,KAAK;AAC1F;AACA;AACA;AACA,iCAAiC,oBAAoB,uBAAa,kBAAkB;AACpF;AACA,gDAAgD,eAAe;AAC/D;AACA;AACA;AACA;AACA,mCAAmC,eAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qCAAqC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,OAAO;AACrC;AACA;AACA;AACA,iCAAiC,MAAM;AACvC;AACA;AACA,mCAAmC,eAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,+BAA+B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,qCAAqC;AAC/D;AACA;AACA;AACA,uBAAuB,gCAAmB,mBAAmB,UAAU;AACvE;AACA;AACA,8BAA8B,OAAO;AACrC;AACA,mBAAmB,gCAAmB,uBAAuB,UAAU;AACvE;AACA,2CAA2C,MAAM;AACjD,eAAe,gCAAmB,mBAAmB,UAAU;AAC/D;AACA;AACA,mBAAmB,eAAe;AAClC;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,kFAAkF,KAAK,YAAY,OAAO;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kDAAkD;AACpE;AACA,gCAAgC,oBAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,KAAK,YAAY,OAAO;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA,oFAAoF,KAAK,eAAe,YAAY,YAAY,OAAO;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,cAAc,iEAAiE,IAAI;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,+CAA+C,kBAAkB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,aAAa;AACnD;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mBAAI;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,QAAQ;AACxD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,0BAA0B,6BAAgB,YAAY;AACtD,oBAAoB,uEAAuE,IAAI;AAC/F;AACA,8BAA8B,2BAAc;AAC5C;AACA,YAAY,4BAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,+DAA+D,6BAAc;AAC7E;AACA;AACA;AACA,uBAAuB,gCAAmB,CAAC,6BAAc;AACzD;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,0BAA0B,OAAO,YAAY,YAAY;AACzD;AACA;AACA;AACA,iBAAiB;AACjB;AACA,kCAAkC,gCAAmB,UAAU,+DAA+D,2BAA2B,YAAY;AACrK;AACA,wCAAwC,yCAAyC;AACjF,wBAAwB,gCAAmB,CAAC,6BAAc;AAC1D;AACA;AACA;AACA;AACA;AACA,4BAA4B,6BAAc;AAC1C;AACA;AACA,8BAA8B,OAAO,YAAY,YAAY;AAC7D;AACA;AACA;AACA;AACA;AACA,wBAAwB,gCAAmB,QAAQ,eAAe;AAClE;AACA;AACA;AACA,SAAS;AACT,2CAA2C,YAAY;AACvD;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc,IAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2EAA2E;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yCAAyC;AACzE;AACA;AACA;AACA,yBAAyB,6BAAgB,IAAI,qEAAqE;AAClH;AACA;AACA;AACA,4BAA4B,yCAAyC;AACrE,mBAAmB,gCAAmB,CAAC,6BAAc;AACrD;AACA;AACA;AACA,oBAAoB,gCAAmB,QAAQ,WAAW,OAAO,YAAY,YAAY,0BAA0B;AACnH,yCAAyC,KAAK;AAC9C;AACA;AACA,KAAK;AACL;AACA,6BAA6B,yCAAyC;AACtE;AACA;AACA;AACA,2BAA2B,YAAY;AACvC;AACA;AACA,kCAAkC,OAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4BAAU;AACtC,iCAAiC,gCAAmB,eAAe,uLAAuL;AAC1P;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;AACO;AACP;AACA,YAAY,mBAAS;AACrB,CAAC;AACM;AACP;AACA,YAAY,qBAAW;AACvB,CAAC;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChpBA;AACA;AACA;AACA;AACA;AACoC;AACpC;AACqE;AACA;AACX;AACI;AACG;AACP;AACI;AACkB;AACS;AACpB;AACA;AACE;AACc;AACpB;AACa;AAChB;AACa;AACX;AACI;AACN;AACQ;AACR;AACK;AACP;AACe;AACR;AACA;AACP;AACW;AACb;AACM;AACS;AACJ;AACE;AACJ;AACP;AACQ;AACE;AACV;AACQ;AACd;AACmB;AACF;AACR;AACO;AACK;AACd;AACY;AACH;AACG;AACV;AACmB;AACjB;AACP;AACG;AACE;AACA;AACX;AACmB;AACV;AACE;AACkB;AACf;AACuB;AACvB;AACG;AACL;AACK;AACE;AACX;AACE;AACV;AACiB;AACF;AACE;AACJ;AACM;AACI;AACN;AACC;AACK;AACY;AACrB;AACJ;AACC;AACJ;AACM;AACG;AACL;AACH;AACM;AACL;AACH;AACQ;AACN;AACI;AACK;AACP;AACa;AACL;AACF;AACE;AACV;AACF;AACa;AACb;AACY;AACI;AAChB;AACW;AACD;AACR;AACA;AACE;AACO;AACR;AACqB;AACvB;AACE;AAC7D;AACO,yBAAyB,OAAO,GAAG,yCAAyC,yBAAc,EAAE;AAC5F,yBAAyB,OAAO,GAAG,yCAAyC,yBAAc,EAAE;AAC5F,oBAAoB,OAAO,GAAG,mCAAmC,mBAAS,EAAE;AAC5E,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,uBAAuB,OAAO,GAAG,uCAAuC,uBAAY,EAAE;AACtF,oBAAoB,OAAO,GAAG,mCAAmC,mBAAS,EAAE;AAC5E,sBAAsB,OAAO,GAAG,qCAAqC,qBAAW,EAAE;AAClF,+BAA+B,OAAO,GAAG,gDAAgD,gCAAoB,EAAE;AAC/G,mCAAmC,OAAO,GAAG,qDAAqD,qCAAwB,EAAE;AAC5H,0BAA0B,OAAO,GAAG,0CAA0C,0BAAe,EAAE;AAC/F,0BAA0B,OAAO,GAAG,0CAA0C,0BAAe,EAAE;AAC/F,2BAA2B,OAAO,GAAG,2CAA2C,2BAAgB,EAAE;AAClG,iCAAiC,OAAO,GAAG,mDAAmD,mCAAsB,EAAE;AACtH,wBAAwB,OAAO,GAAG,wCAAwC,wBAAa,EAAE;AACzF,8BAA8B,OAAO,GAAG,8CAA8C,8BAAmB,EAAE;AAC3G,sBAAsB,OAAO,GAAG,qCAAqC,qBAAW,EAAE;AAClF,4BAA4B,OAAO,GAAG,4CAA4C,4BAAiB,EAAE;AACrG,uBAAuB,OAAO,GAAG,sCAAsC,sBAAY,EAAE;AACrF,yBAAyB,OAAO,GAAG,wCAAwC,wBAAc,EAAE;AAC3F,sBAAsB,OAAO,GAAG,qCAAqC,qBAAW,EAAE;AAClF,yBAAyB,OAAO,GAAG,yCAAyC,yBAAc,EAAE;AAC5F,sBAAsB,OAAO,GAAG,qCAAqC,qBAAW,EAAE;AAClF,0BAA0B,OAAO,GAAG,0CAA0C,0BAAe,EAAE;AAC/F,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,4BAA4B,OAAO,GAAG,4CAA4C,4BAAiB,EAAE;AACrG,yBAAyB,OAAO,GAAG,wCAAwC,wBAAc,EAAE;AAC3F,wBAAwB,OAAO,GAAG,uCAAuC,uBAAa,EAAE;AACxF,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,0BAA0B,OAAO,GAAG,yCAAyC,yBAAe,EAAE;AAC9F,oBAAoB,OAAO,GAAG,mCAAmC,mBAAS,EAAE;AAC5E,uBAAuB,OAAO,GAAG,sCAAsC,sBAAY,EAAE;AACrF,2BAA2B,OAAO,GAAG,2CAA2C,2BAAgB,EAAE;AAClG,yBAAyB,OAAO,GAAG,yCAAyC,yBAAc,EAAE;AAC5F,0BAA0B,OAAO,GAAG,0CAA0C,0BAAe,EAAE;AAC/F,wBAAwB,OAAO,GAAG,wCAAwC,wBAAa,EAAE;AACzF,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,yBAAyB,OAAO,GAAG,wCAAwC,wBAAc,EAAE;AAC3F,0BAA0B,OAAO,GAAG,yCAAyC,yBAAe,EAAE;AAC9F,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,yBAAyB,OAAO,GAAG,wCAAwC,wBAAc,EAAE;AAC3F,sBAAsB,OAAO,GAAG,qCAAqC,qBAAW,EAAE;AAClF,2BAA2B,OAAO,GAAG,0CAA0C,0BAAgB,EAAE;AACjG,0BAA0B,OAAO,GAAG,0CAA0C,0BAAe,EAAE;AAC/F,uBAAuB,OAAO,GAAG,sCAAsC,sBAAY,EAAE;AACrF,0BAA0B,OAAO,GAAG,yCAAyC,yBAAe,EAAE;AAC9F,4BAA4B,OAAO,GAAG,4CAA4C,4BAAiB,EAAE;AACrG,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,2BAA2B,OAAO,GAAG,2CAA2C,2BAAgB,EAAE;AAClG,0BAA0B,OAAO,GAAG,0CAA0C,0BAAe,EAAE;AAC/F,uBAAuB,OAAO,GAAG,sCAAsC,sBAAY,EAAE;AACrF,2BAA2B,OAAO,GAAG,2CAA2C,2BAAgB,EAAE;AAClG,+BAA+B,OAAO,GAAG,+CAA+C,+BAAoB,EAAE;AAC9G,uBAAuB,OAAO,GAAG,sCAAsC,sBAAY,EAAE;AACrF,wBAAwB,OAAO,GAAG,uCAAuC,uBAAa,EAAE;AACxF,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,sBAAsB,OAAO,GAAG,qCAAqC,qBAAW,EAAE;AAClF,sBAAsB,OAAO,GAAG,qCAAqC,qBAAW,EAAE;AAClF,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,0BAA0B,OAAO,GAAG,yCAAyC,yBAAe,EAAE;AAC9F,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,sBAAsB,OAAO,GAAG,qCAAqC,qBAAW,EAAE;AAClF,+BAA+B,OAAO,GAAG,+CAA+C,+BAAoB,EAAE;AAC9G,wBAAwB,OAAO,GAAG,uCAAuC,uBAAa,EAAE;AACxF,mCAAmC,OAAO,GAAG,mDAAmD,mCAAwB,EAAE;AAC1H,uBAAuB,OAAO,GAAG,sCAAsC,sBAAY,EAAE;AACrF,yBAAyB,OAAO,GAAG,wCAAwC,wBAAc,EAAE;AAC3F,uBAAuB,OAAO,GAAG,sCAAsC,sBAAY,EAAE;AACrF,yBAAyB,OAAO,GAAG,wCAAwC,wBAAc,EAAE;AAC3F,yBAAyB,OAAO,GAAG,yCAAyC,yBAAc,EAAE;AAC5F,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,yBAAyB,OAAO,GAAG,wCAAwC,wBAAc,EAAE;AAC3F,wBAAwB,OAAO,GAAG,uCAAuC,uBAAa,EAAE;AACxF,yBAAyB,OAAO,GAAG,yCAAyC,yBAAc,EAAE;AAC5F,uBAAuB,OAAO,GAAG,uCAAuC,uBAAY,EAAE;AACtF,0BAA0B,OAAO,GAAG,0CAA0C,0BAAe,EAAE;AAC/F,2BAA2B,OAAO,GAAG,2CAA2C,2BAAgB,EAAE;AAClG,yBAAyB,OAAO,GAAG,wCAAwC,wBAAc,EAAE;AAC3F,0BAA0B,OAAO,GAAG,yCAAyC,yBAAe,EAAE;AAC9F,4BAA4B,OAAO,GAAG,4CAA4C,4BAAiB,EAAE;AACrG,iCAAiC,OAAO,GAAG,kDAAkD,kCAAsB,EAAE;AACrH,wBAAwB,OAAO,GAAG,uCAAuC,uBAAa,EAAE;AACxF,sBAAsB,OAAO,GAAG,qCAAqC,qBAAW,EAAE;AAClF,sBAAsB,OAAO,GAAG,qCAAqC,qBAAW,EAAE;AAClF,oBAAoB,OAAO,GAAG,mCAAmC,mBAAS,EAAE;AAC5E,uBAAuB,OAAO,GAAG,sCAAsC,sBAAY,EAAE;AACrF,wBAAwB,OAAO,GAAG,wCAAwC,wBAAa,EAAE;AACzF,sBAAsB,OAAO,GAAG,qCAAqC,qBAAW,EAAE;AAClF,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,wBAAwB,OAAO,GAAG,uCAAuC,uBAAa,EAAE;AACxF,sBAAsB,OAAO,GAAG,qCAAqC,qBAAW,EAAE;AAClF,oBAAoB,OAAO,GAAG,mCAAmC,mBAAS,EAAE;AAC5E,wBAAwB,OAAO,GAAG,uCAAuC,uBAAa,EAAE;AACxF,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,uBAAuB,OAAO,GAAG,sCAAsC,sBAAY,EAAE;AACrF,yBAAyB,OAAO,GAAG,wCAAwC,wBAAc,EAAE;AAC3F,sBAAsB,OAAO,GAAG,qCAAqC,qBAAW,EAAE;AAClF,4BAA4B,OAAO,GAAG,2CAA2C,2BAAiB,EAAE;AACpG,yBAAyB,OAAO,GAAG,yCAAyC,yBAAc,EAAE;AAC5F,wBAAwB,OAAO,GAAG,wCAAwC,wBAAa,EAAE;AACzF,yBAAyB,OAAO,GAAG,yCAAyC,yBAAc,EAAE;AAC5F,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,oBAAoB,OAAO,GAAG,mCAAmC,mBAAS,EAAE;AAC5E,0BAA0B,OAAO,GAAG,0CAA0C,0BAAe,EAAE;AAC/F,oBAAoB,OAAO,GAAG,mCAAmC,mBAAS,EAAE;AAC5E,yBAAyB,OAAO,GAAG,wCAAwC,wBAAc,EAAE;AAC3F,2BAA2B,OAAO,GAAG,2CAA2C,2BAAgB,EAAE;AAClG,oBAAoB,OAAO,GAAG,mCAAmC,mBAAS,EAAE;AAC5E,yBAAyB,OAAO,GAAG,yCAAyC,yBAAc,EAAE;AAC5F,wBAAwB,OAAO,GAAG,uCAAuC,uBAAa,EAAE;AACxF,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,sBAAsB,OAAO,GAAG,qCAAqC,qBAAW,EAAE;AAClF,yBAAyB,OAAO,GAAG,wCAAwC,wBAAc,EAAE;AAC3F,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,+BAA+B,OAAO,GAAG,+CAA+C,+BAAoB,EAAE;AAC9G,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AAC/E,qBAAqB,OAAO,GAAG,oCAAoC,oBAAU,EAAE;AACtF;;ACtPA;AACA;AAC2C;AACkB;AACrB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,wBAAwB,yBAAM;AACrC;AACA;AACA,oCAAoC,oBAAM;AAC1C,gBAAgB,2BAA2B;AAC3C;AACA,2BAA2B,yBAAM;AACjC;AACA;AACA;AACA;AACA,sCAAsC,aAAa;AACnD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,4BAA4B,wBAAK;AACjC;AACA,2BAA2B,8BAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChKA;AACA;AACA;AACA;AACyD;AACb;AACd;AACiD;AACrD;AAC+C;AACzE;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,4EAA4E,wCAAc;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,gCAAmB,CAAC,WAAW,UAAU,cAAc,MAAM,gCAAmB,CAAC,aAAa,UAAU,cAAc;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gCAAmB,aAAa,uJAAuJ;AACnM;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,4EAA4E,wCAAc;AAC1F;AACA;AACA,yBAAyB,gCAAmB,CAAC,SAAS,UAAU,+DAA+D;AAC/H;AACA;AACA;AACA;AACA,YAAY,gCAAmB,aAAa,yHAAyH;AACrK;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,4EAA4E,wCAAc;AAC1F;AACA;AACA,yBAAyB,gCAAmB,CAAC,OAAO,UAAU,+DAA+D;AAC7H;AACA;AACA;AACA;AACA,YAAY,gCAAmB,aAAa,8FAA8F;AAC1I;AACA;AACA,YAAY,6EAA6E;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,wCAAc;AAC9F,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mCAAW;AAClC,6BAA6B,mCAAW;AACxC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD,8BAA8B;AAC9B,gBAAgB,+BAA+B;AAC/C,gBAAgB,gCAAmB,UAAU,4BAA4B;AACzE,6BAA6B,gCAAmB,UAAU,wCAAwC;AAClG,gBAAgB,gCAAmB,UAAU,sEAAsE,mBAAmB,UAAU;AAChJ,gBAAgB,gCAAmB,UAAU,8CAA8C,mBAAmB,eAAe,uCAAuC,gCAAmB,CAAC,6BAAc;AACtM,gCAAgC,gCAAmB,eAAe,2CAA2C,mBAAmB,SAAS;AACzI,gBAAgB,gCAAmB,qBAAqB,uBAAuB,mBAAmB,iGAAiG;AACnM;AACA,wBAAwB,gCAAmB,UAAU,0CAA0C;AAC/F;AACA,oBAAoB,gCAAmB,UAAU,iCAAiC;AAClF,wBAAwB,gCAAmB,eAAe,2FAA2F;AACrJ,wBAAwB,gCAAmB,eAAe,6FAA6F;AACvJ,wBAAwB,gCAAmB,eAAe,0EAA0E;AACpI,aAAa;AACb,6BAA6B,gCAAmB,cAAc,4FAA4F;AAC1J;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD,8BAA8B;AAC9B,gBAAgB,+BAA+B;AAC/C,gBAAgB,gCAAmB,eAAe,wBAAwB;AAC1E,6BAA6B,gCAAmB,UAAU,wCAAwC;AAClG,gBAAgB,gCAAmB,UAAU,sEAAsE,mBAAmB,UAAU;AAChJ,gBAAgB,gCAAmB,UAAU,8CAA8C,mBAAmB,gBAAgB,uCAAuC,gCAAmB,CAAC,6BAAc;AACvM;AACA,uCAAuC,sBAAO,+BAA+B,gCAAmB,eAAe,uBAAuB,mBAAmB;AACzJ,2BAA2B,mBAAmB,sBAAO,0BAA0B;AAC/E,4BAA4B;AAC5B,gBAAgB,gCAAmB,qBAAqB,uBAAuB,mBAAmB,kGAAkG;AACpM;AACA,YAAY,iCAAS,mDAAmD,gCAAmB,cAAc,0GAA0G;AACnN;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,wCAAc;AAC9F;AACA;AACA,gBAAgB,wHAAwH;AACxI,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA,+DAA+D,sBAAO;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,4CAAwB;AAC3E;AACA,gBAAgB,gCAAmB,UAAU,yBAAyB,+DAA+D,GAAG;AACxI;AACA;AACA;AACA,gBAAgB,gCAAmB,UAAU,qDAAqD;AAClG;AACA,8BAA8B,gCAAmB,UAAU,mCAAmC;AAC9F,YAAY,gCAAmB,UAAU,mCAAmC;AAC5E;AACA,mDAAmD,GAAG;AACtD,gGAAgG,gCAAmB,UAAU,wCAAwC;AACrK,oBAAoB,gCAAmB,UAAU,+DAA+D;AAChH,yEAAyE,gCAAmB,UAAU,uCAAuC,4BAA4B,gCAAmB,SAAS,+DAA+D,cAAc,gCAAmB,CAAC,6BAAc;AACpT,iCAAiC,gCAAmB,YAAY,0IAA0I;AAC1M,gBAAgB,gCAAmB,UAAU,cAAc;AAC3D;AACA;AACA;AACA;AACA;AACA,kFAAkF,GAAG;AACrF,iCAAiC,gCAAmB,aAAa,gIAAgI;AACjM,6EAA6E,gCAAmB,UAAU,uCAAuC;AACjJ;AACA;AACA,iDAAiD,gCAAmB,UAAU,mCAAmC;AACjH;AACA;AACA,gBAAgB,gCAAmB,UAAU,+BAA+B;AAC5E;AACA,CAAC;AACD;AACA;AACA;AACO;AACP,YAAY,oFAAoF;AAChG,uBAAuB,uBAAuB,sBAAO;AACrD,+BAA+B;AAC/B;AACA,YAAY,yDAAyD,qBAAqB,sBAAO;AACjG;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,0BAAa;AACvC,0BAA0B,0BAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gCAAmB,CAAC,wBAAI,IAAI,2DAA2D;AACnG;AACA;;AC1RA;AACA;AACO;AACP;;ACHA;AACA;AAC+B;AACc;AACV;AACe;AAC3C;AACA,yBAAyB,mBAAe;AAC/C;AACA,gBAAgB,wEAAwE,kBAAkB,+BAA+B;AACzI,oBAAoB,OAAO;AAC3B,aAAa,mBAAmB;AAChC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE,oBAAoB,uBAAmB,aAAa,4BAA4B;AAChF,SAAS;AACT,gBAAgB,uBAAmB,UAAU,gBAAgB;AAC7D,YAAY,uBAAmB,aAAa,0FAA0F;AACtI;AACA;AACA,YAAY,uBAAmB,eAAe;AAC9C;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;;ACjCA;AACA;AACyC;AACzC;AACA;AACA;AACO,qBAAqB,yBAAM;AAClC;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,MAAM,cAAO,eAAe;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,cAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,cAAO,KAAK,cAAO,KAAK;AAC3B;;AC7GA;AACA;AACA;AACA;AAC0B;AACQ;AACC;AACnC;AACA;AACA;AACA;AACA;AACA;AACO;AACP,YAAY,4CAA4C;AACxD,YAAY,gCAAmB,UAAU,WAAW,OAAO,8BAA8B;AACzF,QAAQ,gCAAmB,YAAY,0BAA0B;AACjE,sBAAsB,gCAAmB,WAAW,kCAAkC,mCAAmC,gCAAmB,CAAC,OAAO,iBAAiB,yDAAyD,MAAM,gCAAmB,oBAAoB,wCAAwC;AACnT;AACA;;;;;;ACnBA;AACA;AACA;AAC6C;AACW;AACb;AACJ;AACvC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACO,yBAAyB,uBAAI;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gDAAkB;AACzC;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,SAAS;AACT;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,sCAAsC;AAC9F;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,wDAAwD,sCAAsC;AAC9F;AACA,mBAAmB,gDAAkB;AACrC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qCAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qCAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;;;;;;;;;;;;;;ACxSA;AACA;AACgD;AACL;AACF;AACV;AACe;AAC9C;AACA;AACA;AACO,0BAA0B,yBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,wCAAW,mBAAmB,yBAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,4BAAU;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,iCAAiC,oBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gBAAgB,aAAa,KAAK;AAC3D,QAAQ,mCAAmC,SAAS;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,qBAAqB;AACrB,kBAAkB,mCAAmC,SAAS;AAC9D;AACA;AACA;AACA;AACA;AACO,wBAAwB,mBAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,gCAAgC,oBAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;;AChOA;AACA;AACmD;AACyE;AACnE;AACL;AACD;AACH;AACM;AACA;AACV;AACb;AACiB;AACb;AACa;AAChD,4CAA0B,aAAa,0BAAQ,IAAI,2BAAS;AAC5D,kDAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8BAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qCAAI;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wCAAW,iCAAiC,yBAAM;AAC9D;AACA;AACA;AACA;AACA,YAAY,wCAAW,0BAA0B,yBAAM;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,sBAAsB,yBAAM;AACnC;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,gBAAgB,4CAA4C;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oCAAG;AAClB,mBAAmB,eAAO;AAC1B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qCAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,eAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,oCAAG;AACjC,qBAAqB;AACrB,SAAS;AACT,uBAAuB,qCAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,MAAM;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oCAAS;AACrC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yBAAyB;AAC3C;AACA;AACA;AACA;AACA;AACA,6BAA6B,eAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,eAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,eAAO;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,eAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,WAAW;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAO;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,eAAO;AAC1B;AACA;AACA,CAAC,0BAA0B;AAC3B;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uBAAmB,CAAC,qCAAM,IAAI;AAC1C;AACA,2QAA2Q;AAC3Q,4CAA4C,uBAAmB,CAAC,OAAO,iBAAiB;AACxF;AACA,YAAY,OAAO,yCAAyC;AAC5D,wBAAwB,uBAAmB,WAAW,8CAA8C;AACpG;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO,4BAA4B,WAAW;AAC9C;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uBAAmB,2BAA2B,+HAA+H;AAC7L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,YAAY,uBAAmB,CAAC,SAAS,IAAI;AAC7C,0CAA0C,4DAA4D,uBAAmB,2BAA2B,GAAG,eAAO,0BAA0B;AACxL;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO,mCAAmC,WAAW;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uBAAmB,kCAAkC,eAAe;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yBAAM;AACjC;AACA;AACA;AACA;AACA,gBAAgB,4CAA4C;AAC5D;AACA;AACA;AACA;AACA;AACA,0BAA0B,8BAAW;AACrC,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,MAAM;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mEAAmE;AACnF;AACA,kCAAkC,kCAAkC;AACpE,iCAAiC,2BAA2B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,2CAA2C,wCAAc;AACzD;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,eAAO;AACX;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA,wCAAwC,2CAAe;AACvD,yBAAyB,SAAS,GAAG,GAAG;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,8CAAgB;AAC/C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,yBAAyB,yBAAM;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,eAAO,KAAK,eAAO,KAAK;AAC3B;;ACxkCA;AACA;AACA;AACA;AACwC;AACJ;AACpC;AACA;AACA;AACO,+BAA+B,wBAAK;AAC3C,4BAA4B;AAC5B;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACqC;AACS;AAC0B;AACrB;AACd;AACrC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,qBAAqB,EAAE,GAAG,EAAE,GAAG,EAAE;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sCAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,gCAAgC,sBAAQ;AACxC;AACA,QAAQ,uBAAS;AACjB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,wBAAwB,oBAAM;AAC9B,4EAA4E,oBAAM;AAClF,IAAI,uBAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,yBAAyB,yBAAW;AACpC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,YAAY,gCAAmB,CAAC,qCAAM,IAAI,wKAAwK,oBAAoB,gCAAmB,CAAC,UAAU,UAAU,wBAAwB;AACtS;AACA;AACA;AACA;AACA,qCAAqC,WAAW;AAChD;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,SAAS;AACT;AACA;AACA,eAAe,gCAAmB,cAAc,yBAAyB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;;ACzIA;AACA;AACgD;AAC0B;AAClC;AACxC;AACA;AACA;AACA,qCAAqC,kCAAe;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wCAAW,sBAAsB,yBAAM;AACvD;AACA;AACA;AACA;AACA;AACA,gBAAgB,wCAAW,sBAAsB,yBAAM;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wCAAW,sBAAsB,yBAAM;AACvD;AACA;AACA;AACA;AACA;AACA,gBAAgB,wCAAW,sBAAsB,yBAAM;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACO;AACP;AACA;AACA;AACA;AACA,2BAA2B,iCAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,aAAa;AACzB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,4CAA4C;AAC7C;;ACjPA;AACA;AACyD;AACoB;AACvB;AAClB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,wBAAwB,yBAAM;AACrC,4BAA4B;AAC5B;AACA;AACA,0CAA0C,8BAAW;AACrD;AACA,4DAA4D,wCAAc;AAC1E;AACA;AACA;AACA;AACA,wEAAwE,iCAAc;AACtF;AACA,wBAAwB,gBAAgB;AACxC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,wBAAK;AAC7D;AACA;AACA;AACA;AACA,mGAAmG,OAAO;AAC1G;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACyC;AACzC;AACA;AACA;AACO,sBAAsB,yBAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AAC6C;AAC7C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,eAAO;AAC9C,sCAAsC,eAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kBAAkB;AAClD;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;AACA;AACA;AACA,IAAI,eAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,eAAO,KAAK,eAAO,KAAK;AAC3B;;AC1GA;AACA;AAC2C;AACF;AACzC;AACA;AACA;AACO,qBAAqB,yBAAM;AAClC;AACA;AACA;AACA;AACA,iCAAiC,oBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACwC;AACa;AAC9C;AACP;AACA;AACA;AACA;AACA;AACO;AACP,sCAAsC,sBAAQ;AAC9C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,2BAA2B,gCAAgC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,gCAAmB,SAAS,gCAAgC;AAChH,gBAAgB,gCAAmB,SAAS,iGAAiG;AAC7I,KAAK;AACL,yDAAyD,gCAAmB,eAAe;AAC3F;AACA,WAAW;AACX,YAAY,gCAAmB,YAAY,wBAAwB;AACnE,QAAQ,gCAAmB;AAC3B,YAAY,gCAAmB,SAAS,mCAAmC;AAC3E,QAAQ,gCAAmB;AAC3B;AACA;AACA;AACA,qEAAqE,WAAW,GAAG,aAAa;AAChG,YAAY,gCAAmB,SAAS,0HAA0H;AAClK,QAAQ,gCAAmB,UAAU,2CAA2C;AAChF,YAAY,gCAAmB;AAC/B,YAAY,gCAAmB,mBAAmB,wCAAwC;AAC1F;AACA;;ACvDA;AACA;AACA;AACA;AAC6C;AACO;AACJ;AACJ;AACD;AACW;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE;AACA,mCAAmC;AACnC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA,iCAAiC,oBAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,2CAA2C;AACrF;AACA;AACA;AACA,wEAAwE,SAAS;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,mCAAmC;AAC7E;AACA;AACA;AACA,kEAAkE,SAAS;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,6CAA6C;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sBAAsB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0CAA0C;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,mBAAmB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,iBAAiB;AACjB;AACA;AACA;AACA,gBAAgB,qCAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,YAAY;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,+BAA+B;AACnE;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAkC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,GAAG;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,2BAA2B,yBAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA,0BAA0B,oBAAM;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oCAAS;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,mBAAmB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,8BAAe;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF,MAAM;AAC9F;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wCAAwC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,0BAA0B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA,8CAA8C,oBAAoB;AAClE;AACA;AACA;AACA;AACA;AACA,+CAA+C,oBAAoB;AACnE;AACA,sDAAsD,sBAAsB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,QAAQ,yGAAyG;AACjK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,oBAAoB;AACjE;AACA,0DAA0D,MAAM;AAChE;AACA;AACA;AACA;AACA;AACA,6CAA6C,cAAc;AAC3D;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA,kDAAkD,QAAQ,uGAAuG;AACjK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,IAAI;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4BAA4B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA,uCAAuC,MAAM;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,kBAAkB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,6BAA6B,8BAAW;AAC/C;AACA;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wCAAW,qBAAqB,yBAAM;AAClD;AACA;AACA;AACA;AACA;AACA,YAAY,wCAAW,qBAAqB,yBAAM;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wCAAW,qBAAqB,yBAAM;AAClD;AACA;AACA;AACA;AACA;AACA,YAAY,wCAAW,qBAAqB,yBAAM;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,MAAM;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;AACrC;;ACl/CA;AACA;AACyB;AACG;AACL;AACM;AACJ;AACI;AACD;AACL;AACY;AACV;AACG;AACF;AACA;AACD;AACD;AACE;AACH;AACQ;AAC/B;;;;ACpBA;AACA;AACuC;AACU;AACN;AACL;AACqB;AAC3D,yBAAyB,cAAc;AACvC;AACA;AACA,CAAC;AACM;AACP;AACA;AACA;AACA;AACA,2BAA2B,iCAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,+BAAC;AACpB,2BAA2B,OAAO;AAClC,aAAa,WAAW,+BAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+BAAC,OAAO,WAAW,EAAE,SAAS;AACrD;AACA;AACA,mBAAmB,+BAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO,CAAC,YAAY;AACvC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC,8CAA8C;AAC/C;;AC/DA;AACA;AAC2C;AACJ;AACa;AACT;AACL;AACqB;AAC3D,oBAAoB,cAAc;AAClC;AACA,CAAC;AACD;AACA;AACA;AACA;AACO,6BAA6B,8BAAW;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,oBAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,sBAAsB,uBAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uBAAI;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uBAAI;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+BAAC,OAAO,WAAW,EAAE,SAAS;AACrD;AACA;AACA,mBAAmB,+BAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA;AACA,uBAAuB,OAAO,CAAC,YAAY,cAAc,wBAAwB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+BAAC,OAAO,WAAW;AAC1C;AACA;AACA,uBAAuB,+BAAC,OAAO,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;AC7LA;AACA;AACyD;AACd;AACmB;AACnB;AACL;AACc;AACpD;AACA;AACA;AACA;AACO,wBAAwB,yBAAM;AACrC;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,gBAAgB,iDAAiD;AACjE,oFAAoF,wCAAc;AAClG,QAAQ,OAAO;AACf;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yBAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF,wCAAc;AACtG;AACA;AACA;AACA,8BAA8B,OAAO,yCAAyC,YAAY;AAC1F;AACA;AACA;AACA,aAAa;AACb,mBAAmB,uCAAK,UAAU,kBAAkB,EAAE,SAAS;AAC/D;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACO,2BAA2B,4BAAS;AAC3C;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,4BAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;AACrC;AACA;AACA;AACA;AACO,0BAA0B,2BAAQ;AACzC;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;;ACjHA;AACA;AACoC;AACV;AACE;AAC5B;;ACLA;AACA;AAC8B;AACJ;AACA;AAC1B;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kDAAkD;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,mBAAmB;AACrD,mCAAmC,oBAAoB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA,6BAA6B,gBAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;;AC5PA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,kCAAkC,oBAAK;AAC9C;AACA;AACA;AACO,4BAA4B,oBAAK;AACxC;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,GAAG;AACtD;AACA;AACA,kDAAkD,GAAG;AACrD;AACA;AACA;AACA;AACA;AACA,yHAAyH,MAAM,GAAG;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AAC6B;AACN;AACI;AACF;AACD;AACe;AACvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;;AAEpB;;;;;;;;;;;;;;;;;;;;;ACRpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO,2BAA2B,mDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAe,SAAS,EAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+IAAoB;AAChD;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3MA,MAA0G;AAC1G,MAAgG;AAChG,MAAuG;AACvG,MAA0H;AAC1H,MAAmH;AACnH,MAAmH;AACnH,MAA6G;AAC7G;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,mBAAO;;;;AAIuD;AAC/E,OAAO,iDAAe,mBAAO,IAAI,mBAAO,UAAU,mBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACwC;;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;ACRpB;AACA;AACA;AACA;AACuC;AACI;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,8BAA8B,yBAAM;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kBAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yBAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChIA;AACA;AAC0C;AAC1C;AACA;AACA;AACO,+BAA+B,eAAK;AAC3C;AACA;AACA;AACO,6BAA6B,eAAK;AACzC;;ACXA;AACA;AACA;AACA;AACA;AACA;AACwB;AACC;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA,uCAAuC;AACvC,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,qDAAqD;AACrD,8BAA8B,UAAU,aAAa;AACrD,8BAA8B,mBAAmB,IAAI;AACrD,8BAA8B,SAAS,cAAc;AACrD,8BAA8B,UAAU,aAAa;AACrD;AACA;AACA,sCAAsC;AACtC;AACA,cAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,mCAAmC;AACnC,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,+CAA+C;AAC/C,+CAA+C;AAC/C,+CAA+C;AAC/C,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,KAAK;AACzD,oDAAoD,KAAK;AACzD,oDAAoD,KAAK;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,KAAK;AAC3D,sDAAsD,KAAK;AAC3D,sDAAsD,KAAK;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,8BAA8B;AACrC,OAAO,gCAAgC;AACvC,OAAO;AACP;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,8BAA8B;AACrC,OAAO,gCAAgC;AACvC,OAAO;AACP;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA,oBAAoB,KAAK;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,2CAA2C;AAC3C,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,OAAO;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C;AACA;AACA;;AAEoN;AACpN;;;;;;;;;;;;;;;;;;;ACr+EmD;AACiB;AACd;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,8DAAe;AAC5C;AACA;AACA;AACA,+EAA+E,6DAAc;AAC7F;AACA;AACA,4BAA4B,6DAAe;AAC3C,+BAA+B,wDAAW;AAC1C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEuB;AACvB;;;;;;;;;;;;;;;;;;;;;;;;;AC9W6C;AACD;AACY;AACF;AACD;AACV;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qDAAM;AACzC,oCAAoC,qDAAM;AAC1C,sCAAsC,qDAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,GAAG;AAC3C;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA,mBAAmB,kEAAkB;AACrC;AACA;AACA;AACA,wCAAwC,qBAAqB;AAC7D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,GAAG;AAC3C;AACA,oCAAoC,2CAA2C;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sDAAO;AAClC;AACA;AACA,yJAAyJ,YAAY;AACrK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sDAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sDAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAO;AAC9B;AACA;AACA;AACA,wDAAwD,GAAG;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wBAAwB;AAC/D;AACA,mBAAmB,kEAAkB;AACrC;AACA,YAAY,uDAAQ;AACpB;AACA,2CAA2C,0BAA0B;AACrE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,QAAQ,+GAA+G;AACxL;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA,4BAA4B,wCAAwC;AACpE;AACA;AACA;AACA;AACA;AACA,sDAAsD,KAAK;AAC3D,mCAAmC,QAAQ,WAAW,KAAK;AAC3D,4BAA4B,MAAM,EAAE,KAAK;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ;AACpB;AACA;AACA,iBAAiB,sDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oCAAoC;AACxD,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,sDAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,iBAAiB;AAChF;AACA,aAAa,sDAAQ;AACrB,iDAAiD,iBAAiB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA,gBAAgB,sDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEA;AAC3B;;;;;;;;AC/kCA;AACA,IAAI,KAA4D,oBAAoB,mBAAO,CAAC,KAAmB;AAC/G,IAAI,CAC0I;AAC9I,CAAC,yCAAyC;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,0CAA0C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,UAAU;AACzD;AACA;AACA,2CAA2C,UAAU;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,GAAG;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,GAAG;AACxD;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,GAAG;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,UAAU,2CAA2C,GAAG;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,WAAW;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,0BAA0B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK,wCAAwC;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,oCAAoC;;AAEzC;AACA;AACA;AACA;;AAEA,CAAC;AACD;;;;;;;;;;;;;;;;;;AC1hC2C;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0DAA0D;;AAEyC;AACpG;;;;;;;;;;;;;;;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE6B;AACxD;;;;;;;;;;;;;;;AC/bwD;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,0BAA0B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,MAAM,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,MAAM,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,mBAAmB,kEAAkB;AACrC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,cAAc,MAAM,cAAc;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEX;AAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/8BA,MAAyH;AACzH,MAA+G;AAC/G,MAAsH;AACtH,MAAyI;AACzI,MAAkI;AAClI,MAAkI;AAClI,MAA6H;AAC7H;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,oBAAO;;;;AAIuE;AAC/F,OAAO,qDAAe,oBAAO,IAAI,oBAAO,UAAU,oBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEqB;;;;;;;;;;;;;;;;ACdrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE2C;AACtE;;;;;;;;;;;;;;;;;;;;;;ACjRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEL;AACtB;;;ACrfiE;AAChB;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uBAAK,CAAC,uBAAK;AAChC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sBAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;;AAEiB;AACpD;;;;;;;;;;;;;;;;;;;;AC7f6D;AAClB;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA,yBAAyB,8DAAe;AACxC,2BAA2B,qDAAM;AACjC;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA,2BAA2B,iDAAiD;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sDAAO,0CAA0C;AAChF;AACA;AACA,cAAc,yBAAyB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,kBAAkB;AAChF;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,UAAU;AACvD;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,gBAAgB;AAC7E;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAe;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA,aAAa;AACb,yBAAyB,uDAAuD;AAChF;AACA,SAAS;AACT,2BAA2B,8DAAe;AAC1C;AACA,oBAAoB,UAAU;AAC9B;AACA,mCAAmC,8DAAe;AAClD;AACA;AACA;AACA;AACA,mCAAmC,8DAAe;AAClD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,4CAA4C;AAClF;AACA;AACA;AACA;;AAEmD;AACnD;;;;;;;;;;;;;ACxiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,KAAK;AAC/B,0BAA0B,KAAK,GAAG,KAAK;AACvC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEC;AAC5B;;;;;;;;;;;;;;;;;;ACjMmD;AACC;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,sBAAsB;AACtB;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8DAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,8DAAe;AACzD,0BAA0B,YAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8DAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,uDAAI;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,wBAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAED;AAC1B;;;;;;;;;;;;;;;;;;;;AC7lB6C;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,cAAc;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,wBAAwB;AACjF;AACA;AACA;AACA,qDAAqD,sBAAsB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,KAAK;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,KAAK;AACrD;AACA;AACA;AACA;AACA,6CAA6C,KAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEsD;AACjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrqB0E;AACd;AACM;AACW;AACvB;AACX;AACH;AACW;AACA;AACK;AACH;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,eAAe,KAAK,cAAc;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,qBAAqB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qBAAqB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,qBAAqB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,mBAAmB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qDAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd,QAAQ,0DAAW;AACnB,QAAQ,gEAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB,SAAS,eAAe;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,6BAA6B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,8CAA8C;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,kCAAkC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,iEAAkB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,iEAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iEAAkB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iEAAkB;AACjD,KAAK,gCAAgC;AACrC;AACA;AACA;AACA,+BAA+B,sDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,oEAAoE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA,QAAQ,0DAAW;AACnB;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gEAAgB;AAChD;AACA,qCAAqC,OAAO;AAC5C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd,QAAQ,gEAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,IAAI;AAC/B;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC;AACA;AACA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA,8BAA8B,OAAO;AACrC;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gEAAgB;AAC9D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,4CAA4C,gEAAgB;AAC5D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sBAAsB;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B,qBAAqB,uDAAQ;AAC7B,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC,kCAAkC,KAAK;AACvC,mCAAmC,cAAc;AACjD,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC,kCAAkC,KAAK;AACvC,mCAAmC,MAAM;AACzC,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAgB;AAClD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mDAAI,SAAS;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,IAAI;AAChC,6BAA6B,KAAK;AAClC,+BAA+B,kBAAkB;AACjD;AACA,kCAAkC,OAAO;AACzC;AACA;AACA,kCAAkC,MAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,kBAAkB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,kBAAkB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,yCAAyC;AACzD,gCAAgC,qDAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAI;AAC3B,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,sBAAsB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,qDAAqD;AACrE;AACA,qCAAqC,qDAAM;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uDAAQ;AAC9B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAQ;AAClC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAQ;AAClC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,WAAW,GAAG,gBAAgB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAgB;AAClD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,oCAAoC,gEAAgB;AACpD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,gBAAgB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,yCAAyC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAQ;AAC1B;AACA;AACA;AACA;AACA,YAAY,0DAAU;AACtB;AACA;AACA;AACA;AACA,6DAA6D,OAAO;AACpE,YAAY,0DAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA,qDAAqD,mBAAmB;AACxE;AACA;AACA;AACA;AACA;AACA,mDAAmD,uBAAuB;AAC1E;AACA;AACA;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6BAA6B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,MAAM,uCAAuC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC;AACxB;AACA;AACA;AACA,uCAAuC,oBAAoB;AAC3D,iBAAiB;AACjB;AACA,mBAAmB,iDAAC;AACpB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,MAAM,6CAA6C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,4CAA4C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,0CAA0C;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,4CAA4C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,6CAA6C;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wDAAS,wCAAwC,iDAAC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,WAAW;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wDAAS,0CAA0C,iDAAC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU,EAAE,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA,kBAAkB,sCAAsC;AACxD;AACA;AACA;AACA;AACA;AACA,+BAA+B,oDAAoD;AACnF;AACA;AACA,2BAA2B,2CAA2C;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sDAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC,oBAAoB,uDAAQ;AAC5B,iDAAiD,sDAAO;AACxD,aAAa;AACb;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,qDAAM;AACvC,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uDAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uDAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,MAAM;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAmB;AACjC,YAAY,wDAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC;AACpB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,gCAAgC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,mCAAmC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,sCAAsC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yBAAyB;AAC3C;AACA,2BAA2B;AAC3B;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC,QAAQ,mCAAmC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM;AACpC,gBAAgB,wDAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,eAAe,MAAM,eAAe;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA,kBAAkB,wDAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,eAAe,MAAM,eAAe;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sDAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC,wBAAwB,uDAAQ;AAChC,qDAAqD,sDAAO;AAC5D,iBAAiB;AACjB;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kEAAkB;AACrC,YAAY,uDAAQ;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,SAAS;AACxE;AACA,aAAa,sDAAQ;AACrB,iDAAiD,SAAS;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sDAAQ;AACzB,iBAAiB,sDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC,mCAAmC,qDAAM;AACzC,iCAAiC,qDAAM;AACvC,sCAAsC,qDAAM;AAC5C,uCAAuC,qDAAM;AAC7C,yCAAyC,qDAAM;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA,8CAA8C,kCAAkC;AAChF;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uDAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kDAAI;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uDAAQ;AAChC,uBAAuB,wDAAU;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA,+CAA+C,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,YAAY,0DAAW;AACvB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC,MAAM,oDAAoD;AAClF;AACA;AACA,uBAAuB,iDAAC,MAAM,oDAAoD;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,iCAAiC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,qCAAqC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,WAAW,GAAG,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,YAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAA2D;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA,2BAA2B,4CAA4C;AACvE;AACA;AACA;AACA,2BAA2B,8BAA8B;AACzD;AACA;AACA;AACA;AACA;AACA,2BAA2B,+CAA+C;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,MAAM;AAC3C;AACA;AACA,oCAAoC,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,wDAAK;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,wDAAK;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,wDAAK;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wDAAK;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wDAAK;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mCAAmC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB,qBAAqB,uDAAQ;AAC7B,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAQ;AAClC,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C,0CAA0C,KAAK;AAC/C,2CAA2C,QAAQ;AACnD,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C,0CAA0C,KAAK;AAC/C,2CAA2C,MAAM;AACjD,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qDAAM;AACzC,iCAAiC,qDAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAI;AACzB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ,YAAY,sDAAQ;AACxC,YAAY,0DAAW;AACvB;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAmB;AACjC,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,mBAAmB;AAC5D;AACA;AACA,yCAAyC,oBAAoB;AAC7D;AACA;AACA,yCAAyC,qBAAqB;AAC9D;AACA;AACA,yCAAyC,sBAAsB;AAC/D;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA,yCAAyC,0BAA0B;AACnE;AACA;AACA,yCAAyC,2BAA2B;AACpE;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAI;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAI;AAC3B,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wDAAU,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,8BAA8B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ,YAAY,sDAAQ;AACxC,YAAY,0DAAW;AACvB;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,uCAAuC;AACrD;AACA,2BAA2B,uDAAQ;AACnC;AACA;AACA;AACA;AACA;AACA,sCAAsC,SAAS;AAC/C,uCAAuC,SAAS;AAChD;AACA;AACA,yBAAyB,kDAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ;AACnC,4BAA4B,SAAS;AACrC,6BAA6B,UAAU;AACvC,8BAA8B,WAAW;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iEAAkB;AACnD;AACA;AACA;AACA,4CAA4C,gEAAgB;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,wDAAU;AACvB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qDAAM;AACxC,mCAAmC,qDAAM;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAG;AAC1B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,yCAAyC;AACjF;AACA;AACA;AACA,uCAAuC,uCAAuC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uDAAI;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA,0DAA0D,OAAO;AACjE;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,gEAAgB;AACrD;AACA,yBAAyB,8CAA8C;AACvE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,cAAc,6DAAe,IAAI;AACrF;AACA;AACA;AACA;AACA;AACA,+CAA+C,aAAa;AAC5D;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,wDAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA,cAAc,YAAY;AAC1B;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC;AACpB;AACA;AACA,uCAAuC,IAAI,sCAAsC;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,mCAAmC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC,QAAQ,sCAAsC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qDAAM;AACrC,kCAAkC,qDAAM;AACxC,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,MAAM;AACvC,kCAAkC,KAAK;AACvC,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA,gCAAgC,MAAM;AACtC,mCAAmC,KAAK;AACxC,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,EAAE;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,oBAAoB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,yCAAyC;AACzD,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,mCAAmC,qDAAM;AACzC,iCAAiC,qDAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uBAAuB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2DAA2D;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,sDAAQ,YAAY,sDAAQ;AACxC,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEkT;AAC7U;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChweA,MAAyH;AACzH,MAA+G;AAC/G,MAAsH;AACtH,MAAyI;AACzI,MAAkI;AAClI,MAAkI;AAClI,MAA6H;AAC7H;AACA;;AAEA;;AAEA,4BAA4B,6BAAmB;AAC/C,wBAAwB,0CAAa;;AAErC,uBAAuB,+BAAa;AACpC;AACA,iBAAiB,uBAAM;AACvB,6BAA6B,8BAAkB;;AAE/C,aAAa,kCAAG,CAAC,oBAAO;;;;AAIuE;AAC/F,OAAO,oDAAe,oBAAO,IAAI,oBAAO,UAAU,oBAAO,mBAAmB,EAAC;;;AC1B7E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEqB","sources":["webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application-extension/lib/topbar.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application-extension/style/base.css?2e83","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/lib/connectionlost.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/lib/frontend.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/lib/shell.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/lib/lab.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/lib/router.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/lib/treepathupdater.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/lib/utils.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/lib/layoutrestorer.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/lib/mimerenderers.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/lib/status.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/style/base.css?04d2","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/lib/announcements.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/lib/licensesplugin.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/lib/notificationplugin.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/lib/palette.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/lib/settingconnector.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/lib/settingsplugin.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/lib/statusbarplugin.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/lib/subshell-settings.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/lib/themesplugins.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/lib/toolbarregistryplugin.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/lib/workspacesplugin.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/lib/shortcuts.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/style/base.css?ed4a","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/widgettracker.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/dialog.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/sessioncontext.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/kernelstatuses.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/toolbar/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/clipboard.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/commandlinker.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/commandpalette.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/domutils.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/inputdialog.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/licenses.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/printing.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/mainareawidget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/menufactory.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/notification.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/runningSessions.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/sanitizer.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/semanticCommand.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/thememanager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/toolbar/registry.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/toolbar/factory.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/windowresolver.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/style/base.css?a1f8","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/attachments/lib/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/attachments/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/style/buttons.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/style/core.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/style/datagrid.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/style/dockpanel.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/style/menus.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/style/scrollbar.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/style/sidepanel.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/style/skiplink.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/style/tabs.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/application/style/titlepanel.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/style/contextualhelp.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/style/notification.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils-extension/style/splash.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/style/commandpalette.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/style/dialog.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/style/inputdialog.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/style/licenses.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/style/mainareawidget.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/style/materialcolors.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/apputils/style/toolbar.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cell-toolbar/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/style/collapser.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/style/headerfooter.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/style/inputarea.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/style/placeholder.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/style/widget.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/celltags-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codeeditor/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codeeditor/style/linecol.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/csvviewer/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/style/breakpoints.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/style/callstack.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/style/editor.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/style/kernelSources.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/style/sidebar.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/style/sources.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/style/variables.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docregistry/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/documentsearch/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/extensionmanager/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/help-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/htmlviewer/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/imageviewer/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/inspector/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/javascript-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/json-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/launcher/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/logconsole-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/logconsole/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/markdownviewer/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/markedparser-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mathjax-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mathjax-extension/style/fonts.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mermaid-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mermaid/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/metadataform/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/style/executionindicator.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/style/notebookfooter.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/style/toc.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/style/toolbar.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/outputarea/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/pdf-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/pluginmanager/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/property-inspector/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/rendermime/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/running/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/shortcuts-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statusbar/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/terminal/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/tooltip/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/collapse.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/deprecated.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/deprecatedExtra.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/hoverbox.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/icons.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/iconsalt.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/iconshover.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/iframe.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/rjsfTemplates.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/sidepanel.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/spinner.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/styling.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/switch.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/tabbar.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/table.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/toolbar.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/toolkit.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/windowedlist.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/vega5-extension/style/base.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/dragdrop/style/index.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/widgets/style/accordionpanel.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/widgets/style/commandpalette.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/widgets/style/dockpanel.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/widgets/style/index.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/widgets/style/menu.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/widgets/style/menubar.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/widgets/style/scrollbar.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/widgets/style/splitpanel.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/widgets/style/tabbar.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/widgets/style/tabpanel.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/widgets/style/widget.css","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/builder/node_modules/css-loader/dist/runtime/api.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/builder/node_modules/css-loader/dist/runtime/getUrl.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/builder/node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/builder/node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/builder/node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/builder/node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/builder/node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cell-toolbar-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cell-toolbar/style/base.css?5432","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cell-toolbar/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cell-toolbar-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cell-toolbar/lib/celltoolbartracker.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cell-toolbar/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/lib/celldragutils.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/lib/collapser.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/lib/headerfooter.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/lib/inputarea.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/lib/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/lib/placeholder.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/lib/searchprovider.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/lib/resizeHandle.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/attachments/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/style/base.css?8a72","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/cells/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/celltags-extension/lib/celltag.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/celltags-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/celltags-extension/style/base.css?12d8","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/celltags-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codeeditor/lib/mimetype.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codeeditor/lib/editor.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codeeditor/lib/jsoneditor.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codeeditor/lib/lineCol.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codeeditor/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codeeditor/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codeeditor/lib/viewer.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codeeditor/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codeeditor/style/base.css?d184","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codeeditor/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror-extension/lib/commands.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror-extension/lib/services.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/commands.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/extensions/customStyle.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/extensions/ipython-md.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/extensions/rulers.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/extensions/yundomanager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/extensions/ybinding.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/extensions/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/extension.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/theme.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/pythonBuiltin.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/language.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/editor.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/factory.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/mimetype.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/searchprovider.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/token.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/style/base.css?f262","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/codemirror/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer-extension/lib/renderer.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/lib/handler.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/lib/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/lib/reconciliator.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/lib/default/contextprovider.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/lib/default/kernelprovider.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/lib/ghost.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/lib/inline.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/lib/manager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/lib/icons.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/lib/default/inlinehistoryprovider.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/style/base.css?94a4","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/completer/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console-extension/lib/foreign.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console-extension/lib/cellexecutor.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console-extension/style/base.css?93d6","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console/lib/cellexecutor.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console/lib/foreign.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console/lib/history.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console/lib/panel.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console/style/base.css?3518","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/console/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/coreutils/lib/activitymonitor.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/coreutils/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/coreutils/lib/interfaces.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/coreutils/lib/lru.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/coreutils/lib/markdowncodeblocks.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/coreutils/lib/pageconfig.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/coreutils/lib/path.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/coreutils/lib/signal.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/coreutils/lib/text.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/coreutils/lib/time.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/coreutils/lib/url.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/csvviewer-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/csvviewer-extension/lib/searchprovider.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/csvviewer/style/base.css?8ffe","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/csvviewer/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/csvviewer-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/csvviewer/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/csvviewer/lib/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/csvviewer/lib/parse.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/csvviewer/lib/toolbar.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/csvviewer/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/style/base.css?5fe1","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/hash.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/config.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/dialogs/evaluate.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/factory.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/handlers/editor.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/handlers/console.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/handlers/file.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/handlers/notebook.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/handler.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/breakpoints/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/callstack/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/sources/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/kernelSources/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/variables/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/variables/grid.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/variables/mimerenderer.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/service.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/session.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/breakpoints/body.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/breakpoints/pauseonexceptions.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/breakpoints/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/callstack/body.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/callstack/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/sources/body.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/sources/sourcepath.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/sources/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/kernelSources/filter.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/kernelSources/body.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/kernelSources/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/variables/scope.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/variables/tree.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/variables/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/sidebar.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/sources.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/debugger.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/debugger/lib/panels/variables/gridpanel.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docmanager-extension/lib/recents.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docmanager-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docmanager-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docmanager/lib/dialogs.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docmanager/lib/savehandler.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docmanager/lib/widgetmanager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docmanager/lib/manager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docmanager/lib/pathstatus.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docmanager/lib/savingstatus.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docmanager/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docmanager/lib/recents.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docmanager/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docmanager/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docregistry/lib/context.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docregistry/lib/components.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docregistry/lib/default.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docregistry/lib/mimedocument.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docregistry/lib/registry.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docregistry/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docregistry/style/base.css?37d3","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/docregistry/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/documentsearch-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/documentsearch-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/documentsearch/lib/searchprovider.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/documentsearch/lib/providers/genericsearchprovider.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/documentsearch/lib/providers/textprovider.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/documentsearch/lib/searchmodel.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/documentsearch/lib/searchview.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/documentsearch/lib/searchproviderregistry.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/documentsearch/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/documentsearch/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/documentsearch/style/base.css?a817","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/documentsearch/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/extensionmanager-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/extensionmanager/style/base.css?311c","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/extensionmanager/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/extensionmanager-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/extensionmanager/lib/dialog.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/extensionmanager/lib/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/extensionmanager/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/extensionmanager/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser-extension/style/base.css?7c04","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser/lib/crumbs.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser/lib/listing.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser/lib/browser.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser/lib/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser/lib/opendialog.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser/lib/upload.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser/lib/uploadstatus.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser/style/base.css?29e9","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/filebrowser/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor-extension/lib/commands.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor-extension/lib/syntaxstatus.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor/lib/fileeditorlspadapter.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor/lib/searchprovider.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor/lib/syntaxstatus.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor/lib/tabspacestatus.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor/lib/toc/factory.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor/lib/toc/latex.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor/lib/toc/markdown.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor/lib/toc/python.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor/lib/toc/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor/style/base.css?6a4a","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/fileeditor/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/help-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/help-extension/style/base.css?a11f","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/help-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/htmlviewer-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/htmlviewer/style/base.css?fe76","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/htmlviewer/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/htmlviewer-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/htmlviewer/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/htmlviewer/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/htmlviewer/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/hub-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/hub-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/imageviewer-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/imageviewer/style/base.css?3caa","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/imageviewer/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/imageviewer-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/imageviewer/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/imageviewer/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/imageviewer/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/javascript-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/javascript-extension/style/base.css?40b3","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/javascript-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/json-extension/lib/component.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/json-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/json-extension/style/base.css?2601","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/json-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/launcher/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/launcher/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/launcher/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/launcher/style/base.css?bc49","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/launcher/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/logconsole-extension/lib/status.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/logconsole-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/logconsole-extension/style/base.css?9aec","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/logconsole-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/logconsole/lib/logger.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/logconsole/lib/registry.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/logconsole/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/logconsole/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/logconsole/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/logconsole/style/base.css?0a42","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/logconsole/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp-extension/lib/renderer.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp-extension/style/base.css?fd72","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/adapters/editorAdapter.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/adapters/adapter.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/adapters/tracker.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/adapters/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/utils.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/ws-connection/server-capability-registration.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/ws-connection/ws-connection.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/connection.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/connection_manager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/extractors/manager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/positioning.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/extractors/text_extractor.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/extractors/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/feature.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/manager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/virtual/document.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/lsp/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mainmenu-extension/lib/recents.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mainmenu-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mainmenu-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mainmenu/lib/edit.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mainmenu/lib/file.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mainmenu/lib/help.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mainmenu/lib/kernel.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mainmenu/lib/run.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mainmenu/lib/settings.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mainmenu/lib/tabs.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mainmenu/lib/view.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mainmenu/lib/mainmenu.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mainmenu/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mainmenu/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mainmenu/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/markdownviewer-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/markdownviewer/style/base.css?bfaf","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/markdownviewer/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/markdownviewer-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/markdownviewer/lib/toc.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/markdownviewer/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/markdownviewer/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/markdownviewer/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/markedparser-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/markedparser-extension/style/base.css?2362","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/markedparser-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mathjax-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mathjax-extension/style/base.css?f5be","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mathjax-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mermaid-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mermaid-extension/style/base.css?173b","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mermaid-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mermaid/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mermaid/lib/manager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mermaid/lib/markdown.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mermaid/lib/mime.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mermaid/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mermaid/style/base.css?2cb8","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/mermaid/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/metadataform-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/metadataform-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/metadataform/lib/form.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/metadataform/lib/metadataform.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/metadataform/lib/metadataformProvider.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/metadataform/lib/token.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/metadataform/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/metadataform/style/base.css?93c2","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/metadataform/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/nbformat/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook-extension/lib/cellexecutor.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook-extension/lib/nboutput.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook-extension/lib/tool-widgets/activeCellToolWidget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook-extension/lib/tool-widgets/metadataEditorFields.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/cellexecutor.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/actions.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/celllist.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/default-toolbar.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/executionindicator.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/history.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/modelfactory.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/modestatus.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/notebooklspadapter.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/notebooktools.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/constants.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/windowing.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/notebookfooter.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/panel.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/searchprovider.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/toc.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/tracker.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/truststatus.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/widgetfactory.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/style/base.css?663b","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/notebook/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/observables/lib/observablemap.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/observables/lib/observablejson.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/observables/lib/observablestring.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/observables/lib/observablelist.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/observables/lib/undoablelist.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/observables/lib/modeldb.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/observables/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/outputarea/lib/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/outputarea/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/outputarea/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/outputarea/style/base.css?49e0","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/outputarea/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/pdf-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/pdf-extension/style/base.css?cc51","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/pdf-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/pluginmanager-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/pluginmanager-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/pluginmanager/lib/dialogs.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/pluginmanager/lib/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/pluginmanager/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/pluginmanager/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/pluginmanager/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/pluginmanager/style/base.css?85d0","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/pluginmanager/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/property-inspector/lib/token.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/property-inspector/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/property-inspector/style/base.css?c1f5","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/property-inspector/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/rendermime-interfaces/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/rendermime/lib/attachmentmodel.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/rendermime/lib/factories.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/rendermime/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/rendermime/lib/latex.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/rendermime/lib/mimemodel.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/rendermime/lib/outputmodel.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/rendermime/lib/registry.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/rendermime/lib/renderers.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/rendermime/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/rendermime/lib/widgets.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/rendermime/style/base.css?1ebb","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/rendermime/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/running-extension/lib/kernels.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/running-extension/lib/opentabs.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/running-extension/lib/recents.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/running-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/running-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/running/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/running/style/base.css?d82f","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/running/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/basemanager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/builder/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/config/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/connectionstatus.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/contents/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/contents/validate.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/event/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/kernel/comm.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/kernel/default.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/kernel/future.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/kernel/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/kernel/kernel.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/kernel/manager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/kernel/messages.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/kernel/restapi.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/kernel/serialize.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/kernel/validate.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/kernelspec/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/kernelspec/kernelspec.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/kernelspec/manager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/kernelspec/restapi.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/kernelspec/validate.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/manager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/nbconvert/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/serverconnection.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/session/default.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/session/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/session/manager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/session/restapi.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/session/session.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/session/validate.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/setting/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/shim/ws.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/terminal/default.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/terminal/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/terminal/manager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/terminal/restapi.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/terminal/terminal.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/user/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/validate.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/services/lib/workspace/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor-extension/lib/importSettingsWidget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/inspector/style/base.css?e4cf","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/inspector/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor/style/base.css?a61f","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor/lib/pluginlist.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor/lib/SettingsFormEditor.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor/lib/InstructionsPlaceholder.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor/lib/settingspanel.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor/lib/settingseditor.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/inspector/lib/inspector.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/inspector/lib/handler.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor/lib/inspector.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor/lib/raweditor.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor/lib/plugineditor.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor/lib/jsonsettingeditor.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingeditor/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/lib/settingregistry.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/ajv.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/codegen/code.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/codegen/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/codegen/scope.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/errors.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/names.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/ref_error.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/resolve.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/rules.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/util.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/validate/applicability.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/validate/boolSchema.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/validate/dataType.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/validate/defaults.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/validate/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/validate/keyword.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/compile/validate/subschema.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/core.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/runtime/equal.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/runtime/ucs2length.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/runtime/uri.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/runtime/validation_error.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/allOf.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/anyOf.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/contains.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/dependencies.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/if.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/items.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/items2020.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/not.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/oneOf.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/properties.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/applicator/thenElse.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/code.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/core/id.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/core/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/core/ref.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/discriminator/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/discriminator/types.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/draft7.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/format/format.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/format/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/metadata.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/validation/const.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/validation/enum.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/validation/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/validation/limitItems.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/validation/limitLength.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/validation/limitNumber.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/validation/limitProperties.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/validation/multipleOf.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/validation/pattern.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/validation/required.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/settingregistry/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/shortcuts-extension/lib/types.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/shortcuts-extension/lib/components/ShortcutInput.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/shortcuts-extension/lib/components/ShortcutItem.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/shortcuts-extension/lib/components/ShortcutList.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/shortcuts-extension/lib/components/ShortcutTitleItem.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/shortcuts-extension/lib/components/TopNav.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/shortcuts-extension/lib/registry.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/shortcuts-extension/lib/components/ShortcutUI.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/shortcuts-extension/lib/renderer.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/shortcuts-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/shortcuts-extension/style/base.css?4094","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/shortcuts-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statedb/lib/dataconnector.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statedb/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statedb/lib/interfaces.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statedb/lib/restorablepool.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statedb/lib/statedb.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statedb/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statusbar/lib/components/group.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statusbar/lib/components/hover.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statusbar/lib/components/progressBar.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statusbar/lib/components/text.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statusbar/lib/components/progressCircle.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statusbar/lib/components/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statusbar/lib/statusbar.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statusbar/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statusbar/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statusbar/style/base.css?489d","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/statusbar/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/terminal-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/terminal/style/base.css?a0b5","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/terminal/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/terminal-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/terminal/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/terminal/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/terminal/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/theme-dark-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/theme-dark-high-contrast-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/theme-light-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc-extension/style/base.css?90da","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/lib/factory.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/lib/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/lib/tocitem.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/lib/toctree.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/lib/treeview.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/lib/panel.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/lib/registry.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/lib/tracker.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/lib/utils/common.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/lib/utils/markdown.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/lib/utils/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/style/base.css?93b5","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/toc/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/tooltip-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/tooltip/style/base.css?c99a","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/tooltip/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/tooltip-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/tooltip/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/tooltip/lib/widget.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/tooltip/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/translation-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/translation-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/translation/lib/server.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/translation/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/translation/lib/utils.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/translation/lib/gettext.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/translation/lib/base.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/translation/lib/manager.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/translation/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/utils.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/button.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/style/icon.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/icon/labicon.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/icon/iconimports.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/collapser.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/form.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/interface.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/htmlselect.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/iframe.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/inputgroup.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/menu.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/vdom.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/toolbar.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/panelwithtoolbar.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/search.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/accordiontoolbar.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/sidepanel.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/spinner.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/styling.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/switch.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/table.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/windowedlist.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/components/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/icon/widgets/commandpalettesvg.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/icon/widgets/menusvg.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/icon/widgets/tabbarsvg.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/icon/widgets/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/icon/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/hoverbox.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/FormRendererRegistry.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/base.css?9e75","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/ui-components/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/vega5-extension/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/vega5-extension/style/base.css?7ef9","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/vega5-extension/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/workspaces/lib/model.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/workspaces/lib/tokens.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@jupyterlab/workspaces/lib/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/algorithm/dist/index.es6.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/application/dist/index.es6.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/commands/dist/index.es6.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/coreutils/dist/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/disposable/dist/index.es6.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/domutils/dist/index.es6.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/dragdrop/dist/index.es6.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/dragdrop/style/index.css?175d","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/dragdrop/style/index.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/keyboard/dist/index.es6.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/collections/dist/index.es6.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/messaging/dist/index.es6.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/polling/dist/index.es6.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/properties/dist/index.es6.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/signaling/dist/index.es6.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/virtualdom/dist/index.es6.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/widgets/dist/index.es6.js","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/widgets/style/index.css?3da9","webpack://_JUPYTERLAB.CORE_OUTPUT/../node_modules/@lumino/widgets/style/index.js"],"sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { createToolbarFactory, IToolbarWidgetRegistry, setToolbar } from '@jupyterlab/apputils';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { Toolbar } from '@jupyterlab/ui-components';\nconst TOPBAR_FACTORY = 'TopBar';\n/**\n * A plugin adding a toolbar to the top area.\n */\nexport const topbar = {\n    id: '@jupyterlab/application-extension:top-bar',\n    description: 'Adds a toolbar to the top area (next to the main menu bar).',\n    autoStart: true,\n    requires: [ISettingRegistry, IToolbarWidgetRegistry],\n    optional: [ITranslator],\n    activate: (app, settingRegistry, toolbarRegistry, translator) => {\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        const toolbar = new Toolbar();\n        toolbar.id = 'jp-top-bar';\n        toolbar.node.setAttribute('aria-label', trans.__('Topbar toolbar'));\n        // Set toolbar\n        setToolbar(toolbar, createToolbarFactory(toolbarRegistry, settingRegistry, TOPBAR_FACTORY, topbar.id, translator !== null && translator !== void 0 ? translator : nullTranslator), toolbar);\n        app.shell.add(toolbar, 'top', { rank: 900 });\n    }\n};\n//# sourceMappingURL=topbar.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module application-extension\n */\nimport { ConnectionLost, IConnectionLost, ILabShell, ILabStatus, ILayoutRestorer, IRouter, ITreePathUpdater, JupyterFrontEnd, JupyterFrontEndContextMenu, JupyterLab, LabShell, LayoutRestorer, Router } from '@jupyterlab/application';\nimport { Dialog, ICommandPalette, IWindowResolver, MenuFactory, showDialog, showErrorMessage } from '@jupyterlab/apputils';\nimport { PageConfig, URLExt } from '@jupyterlab/coreutils';\nimport { IPropertyInspectorProvider, SideBarPropertyInspectorProvider } from '@jupyterlab/property-inspector';\nimport { ISettingRegistry, SettingRegistry } from '@jupyterlab/settingregistry';\nimport { IStateDB } from '@jupyterlab/statedb';\nimport { IStatusBar } from '@jupyterlab/statusbar';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { buildIcon, jupyterIcon, RankedMenu, Switch } from '@jupyterlab/ui-components';\nimport { find, some } from '@lumino/algorithm';\nimport { JSONExt, PromiseDelegate } from '@lumino/coreutils';\nimport { CommandRegistry } from '@lumino/commands';\nimport { DisposableDelegate, DisposableSet } from '@lumino/disposable';\nimport { Widget } from '@lumino/widgets';\nimport * as React from 'react';\nimport { topbar } from './topbar';\n/**\n * Default context menu item rank\n */\nexport const DEFAULT_CONTEXT_ITEM_RANK = 100;\n/**\n * The command IDs used by the application plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.activateNextTab = 'application:activate-next-tab';\n    CommandIDs.activatePreviousTab = 'application:activate-previous-tab';\n    CommandIDs.activateNextTabBar = 'application:activate-next-tab-bar';\n    CommandIDs.activatePreviousTabBar = 'application:activate-previous-tab-bar';\n    CommandIDs.close = 'application:close';\n    CommandIDs.closeOtherTabs = 'application:close-other-tabs';\n    CommandIDs.closeRightTabs = 'application:close-right-tabs';\n    CommandIDs.closeAll = 'application:close-all';\n    CommandIDs.setMode = 'application:set-mode';\n    CommandIDs.showPropertyPanel = 'property-inspector:show-panel';\n    CommandIDs.resetLayout = 'application:reset-layout';\n    CommandIDs.toggleContextMenu = 'application:toggle-context-menu';\n    CommandIDs.toggleHeader = 'application:toggle-header';\n    CommandIDs.toggleMode = 'application:toggle-mode';\n    CommandIDs.toggleLeftArea = 'application:toggle-left-area';\n    CommandIDs.toggleRightArea = 'application:toggle-right-area';\n    CommandIDs.toggleSideTabBar = 'application:toggle-side-tabbar';\n    CommandIDs.toggleSidebarWidget = 'application:toggle-sidebar-widget';\n    CommandIDs.togglePresentationMode = 'application:toggle-presentation-mode';\n    CommandIDs.toggleFullscreenMode = 'application:toggle-fullscreen-mode';\n    CommandIDs.tree = 'router:tree';\n    CommandIDs.switchSidebar = 'sidebar:switch';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * A plugin to register the commands for the main application.\n */\nconst mainCommands = {\n    id: '@jupyterlab/application-extension:commands',\n    description: 'Adds commands related to the shell.',\n    autoStart: true,\n    requires: [ITranslator],\n    optional: [ILabShell, ICommandPalette],\n    activate: (app, translator, labShell, palette) => {\n        var _a;\n        const { commands, shell } = app;\n        const trans = translator.load('jupyterlab');\n        const category = trans.__('Main Area');\n        // Add Command to override the JLab context menu.\n        commands.addCommand(JupyterFrontEndContextMenu.contextMenu, {\n            label: trans.__('Shift+Right Click for Browser Menu'),\n            isEnabled: () => false,\n            execute: () => void 0\n        });\n        // Returns the widget associated with the most recent contextmenu event.\n        const contextMenuWidget = () => {\n            const test = (node) => !!node.dataset.id;\n            const node = app.contextMenuHitTest(test);\n            if (!node) {\n                // Fall back to active widget if path cannot be obtained from event.\n                return shell.currentWidget;\n            }\n            return (find(shell.widgets('main'), widget => widget.id === node.dataset.id) ||\n                shell.currentWidget);\n        };\n        // Closes an array of widgets.\n        const closeWidgets = (widgets) => {\n            widgets.forEach(widget => widget.close());\n        };\n        // Find the tab area for a widget within a specific dock area.\n        const findTab = (area, widget) => {\n            if (area.type === 'tab-area') {\n                return area.widgets.includes(widget) ? area : null;\n            }\n            if (area.type === 'split-area') {\n                for (const child of area.children) {\n                    const found = findTab(child, widget);\n                    if (found) {\n                        return found;\n                    }\n                }\n            }\n            return null;\n        };\n        // Find the tab area for a widget within the main dock area.\n        const tabAreaFor = (widget) => {\n            var _a;\n            const layout = labShell === null || labShell === void 0 ? void 0 : labShell.saveLayout();\n            const mainArea = layout === null || layout === void 0 ? void 0 : layout.mainArea;\n            if (!mainArea || PageConfig.getOption('mode') !== 'multiple-document') {\n                return null;\n            }\n            const area = (_a = mainArea.dock) === null || _a === void 0 ? void 0 : _a.main;\n            return area ? findTab(area, widget) : null;\n        };\n        // Returns an array of all widgets to the right of a widget in a tab area.\n        const widgetsRightOf = (widget) => {\n            const { id } = widget;\n            const tabArea = tabAreaFor(widget);\n            const widgets = tabArea ? tabArea.widgets || [] : [];\n            const index = widgets.findIndex(widget => widget.id === id);\n            if (index < 0) {\n                return [];\n            }\n            return widgets.slice(index + 1);\n        };\n        // Gets and returns the dataId of currently active tab in the specified sidebar (left or right)\n        // or an empty string\n        const activeSidePanelWidget = (side) => {\n            // default active element is luancher (luancher-0)\n            let activeTab;\n            if (side != 'left' && side != 'right') {\n                throw Error(`Unsupported sidebar: ${side}`);\n            }\n            if (side === 'left') {\n                activeTab = document.querySelector('.lm-TabBar-tab.lm-mod-current');\n            }\n            else {\n                const query = document.querySelectorAll('.lm-TabBar-tab.lm-mod-current');\n                activeTab = query[query.length - 1];\n            }\n            const activeTabDataId = activeTab === null || activeTab === void 0 ? void 0 : activeTab.getAttribute('data-id');\n            if (activeTabDataId) {\n                return activeTabDataId === null || activeTabDataId === void 0 ? void 0 : activeTabDataId.toString();\n            }\n            else {\n                return '';\n            }\n        };\n        // Sets tab focus on the element\n        function setTabFocus(focusElement) {\n            if (focusElement) {\n                focusElement.focus();\n            }\n        }\n        commands.addCommand(CommandIDs.close, {\n            label: () => trans.__('Close Tab'),\n            isEnabled: () => {\n                const widget = contextMenuWidget();\n                return !!widget && widget.title.closable;\n            },\n            execute: () => {\n                const widget = contextMenuWidget();\n                if (widget) {\n                    widget.close();\n                }\n            }\n        });\n        commands.addCommand(CommandIDs.closeOtherTabs, {\n            label: () => trans.__('Close All Other Tabs'),\n            isEnabled: () => {\n                // Ensure there are at least two widgets.\n                return some(shell.widgets('main'), (_, i) => i === 1);\n            },\n            execute: () => {\n                const widget = contextMenuWidget();\n                if (!widget) {\n                    return;\n                }\n                const { id } = widget;\n                for (const widget of shell.widgets('main')) {\n                    if (widget.id !== id) {\n                        widget.close();\n                    }\n                }\n            }\n        });\n        commands.addCommand(CommandIDs.closeRightTabs, {\n            label: () => trans.__('Close Tabs to Right'),\n            isEnabled: () => !!contextMenuWidget() &&\n                widgetsRightOf(contextMenuWidget()).length > 0,\n            execute: () => {\n                const widget = contextMenuWidget();\n                if (!widget) {\n                    return;\n                }\n                closeWidgets(widgetsRightOf(widget));\n            }\n        });\n        (_a = shell.currentChanged) === null || _a === void 0 ? void 0 : _a.connect(() => {\n            [\n                CommandIDs.close,\n                CommandIDs.closeOtherTabs,\n                CommandIDs.closeRightTabs\n            ].forEach(cmd => commands.notifyCommandChanged(cmd));\n        });\n        if (labShell) {\n            commands.addCommand(CommandIDs.activateNextTab, {\n                label: trans.__('Activate Next Tab'),\n                execute: () => {\n                    labShell.activateNextTab();\n                }\n            });\n            commands.addCommand(CommandIDs.activatePreviousTab, {\n                label: trans.__('Activate Previous Tab'),\n                execute: () => {\n                    labShell.activatePreviousTab();\n                }\n            });\n            commands.addCommand(CommandIDs.activateNextTabBar, {\n                label: trans.__('Activate Next Tab Bar'),\n                execute: () => {\n                    labShell.activateNextTabBar();\n                }\n            });\n            commands.addCommand(CommandIDs.activatePreviousTabBar, {\n                label: trans.__('Activate Previous Tab Bar'),\n                execute: () => {\n                    labShell.activatePreviousTabBar();\n                }\n            });\n            commands.addCommand(CommandIDs.closeAll, {\n                label: trans.__('Close All Tabs'),\n                execute: () => {\n                    labShell.closeAll();\n                }\n            });\n            commands.addCommand(CommandIDs.toggleHeader, {\n                label: trans.__('Show Header'),\n                execute: () => {\n                    if (labShell.mode === 'single-document') {\n                        labShell.toggleTopInSimpleModeVisibility();\n                    }\n                },\n                isToggled: () => labShell.isTopInSimpleModeVisible(),\n                isVisible: () => labShell.mode === 'single-document'\n            });\n            commands.addCommand(CommandIDs.toggleLeftArea, {\n                label: trans.__('Show Left Sidebar'),\n                execute: () => {\n                    if (labShell.leftCollapsed) {\n                        labShell.expandLeft();\n                    }\n                    else {\n                        labShell.collapseLeft();\n                        if (labShell.currentWidget) {\n                            labShell.activateById(labShell.currentWidget.id);\n                        }\n                    }\n                },\n                isToggled: () => !labShell.leftCollapsed,\n                isEnabled: () => !labShell.isEmpty('left')\n            });\n            commands.addCommand(CommandIDs.toggleRightArea, {\n                label: trans.__('Show Right Sidebar'),\n                execute: () => {\n                    if (labShell.rightCollapsed) {\n                        labShell.expandRight();\n                    }\n                    else {\n                        labShell.collapseRight();\n                        if (labShell.currentWidget) {\n                            labShell.activateById(labShell.currentWidget.id);\n                        }\n                    }\n                },\n                isToggled: () => !labShell.rightCollapsed,\n                isEnabled: () => !labShell.isEmpty('right')\n            });\n            commands.addCommand(CommandIDs.toggleSidebarWidget, {\n                label: args => args === undefined ||\n                    args.side === undefined ||\n                    args.index === undefined\n                    ? trans.__('Toggle Sidebar Element')\n                    : args.side === 'right'\n                        ? trans.__('Toggle Element %1 in Right Sidebar', parseInt(args.index, 10) + 1)\n                        : trans.__('Toggle Element %1 in Left Sidebar', parseInt(args.index, 10) + 1),\n                execute: args => {\n                    const index = parseInt(args.index, 10);\n                    if (args.side != 'left' && args.side != 'right') {\n                        throw Error(`Unsupported sidebar: ${args.side}`);\n                    }\n                    const widgets = Array.from(labShell.widgets(args.side));\n                    if (index >= widgets.length) {\n                        return;\n                    }\n                    const widgetId = widgets[index].id;\n                    const focusElement = document.querySelector(\"[data-id='\" + widgetId + \"']\");\n                    if (activeSidePanelWidget(args.side) === widgetId) {\n                        if (args.side == 'left') {\n                            labShell.collapseLeft();\n                            setTabFocus(focusElement);\n                        }\n                        if (args.side == 'right') {\n                            labShell.collapseRight();\n                            setTabFocus(focusElement);\n                        }\n                    }\n                    else {\n                        labShell.activateById(widgetId);\n                        setTabFocus(focusElement);\n                    }\n                }\n            });\n            commands.addCommand(CommandIDs.toggleSideTabBar, {\n                label: args => args.side === 'right'\n                    ? trans.__('Show Right Activity Bar')\n                    : trans.__('Show Left Activity Bar'),\n                execute: args => {\n                    if (args.side === 'right') {\n                        labShell.toggleSideTabBarVisibility('right');\n                    }\n                    else {\n                        labShell.toggleSideTabBarVisibility('left');\n                    }\n                },\n                isToggled: args => args.side === 'right'\n                    ? labShell.isSideTabBarVisible('right')\n                    : labShell.isSideTabBarVisible('left'),\n                isEnabled: args => args.side === 'right'\n                    ? !labShell.isEmpty('right')\n                    : !labShell.isEmpty('left')\n            });\n            commands.addCommand(CommandIDs.togglePresentationMode, {\n                label: () => trans.__('Presentation Mode'),\n                execute: () => {\n                    labShell.presentationMode = !labShell.presentationMode;\n                },\n                isToggled: () => labShell.presentationMode,\n                isVisible: () => true\n            });\n            commands.addCommand(CommandIDs.toggleFullscreenMode, {\n                label: trans.__('Fullscreen Mode'),\n                execute: () => {\n                    if (document.fullscreenElement === null ||\n                        document.fullscreenElement === undefined) {\n                        document.documentElement.requestFullscreen().catch(reason => {\n                            console.error('Failed to enter fullscreen mode.', reason);\n                        });\n                    }\n                    else if (document.fullscreenElement !== null) {\n                        document.exitFullscreen().catch(reason => {\n                            console.error('Failed to exit fullscreen mode.', reason);\n                        });\n                    }\n                },\n                isToggled: () => document.fullscreenElement !== null\n            });\n            commands.addCommand(CommandIDs.setMode, {\n                label: args => args['mode']\n                    ? trans.__('Set %1 mode.', args['mode'])\n                    : trans.__('Set the layout `mode`.'),\n                caption: trans.__('The layout `mode` can be \"single-document\" or \"multiple-document\".'),\n                isVisible: args => {\n                    const mode = args['mode'];\n                    return mode === 'single-document' || mode === 'multiple-document';\n                },\n                execute: args => {\n                    const mode = args['mode'];\n                    if (mode === 'single-document' || mode === 'multiple-document') {\n                        labShell.mode = mode;\n                        return;\n                    }\n                    throw new Error(`Unsupported application shell mode: ${mode}`);\n                }\n            });\n            commands.addCommand(CommandIDs.toggleMode, {\n                label: trans.__('Simple Interface'),\n                isToggled: () => labShell.mode === 'single-document',\n                execute: () => {\n                    const args = labShell.mode === 'multiple-document'\n                        ? { mode: 'single-document' }\n                        : { mode: 'multiple-document' };\n                    return commands.execute(CommandIDs.setMode, args);\n                }\n            });\n            commands.addCommand(CommandIDs.resetLayout, {\n                label: trans.__('Reset Default Layout'),\n                execute: () => {\n                    // Turn off presentation mode\n                    if (labShell.presentationMode) {\n                        commands\n                            .execute(CommandIDs.togglePresentationMode)\n                            .catch(reason => {\n                            console.error('Failed to undo presentation mode.', reason);\n                        });\n                    }\n                    // Turn off fullscreen mode\n                    if (document.fullscreenElement !== null ||\n                        document.fullscreenElement !== undefined) {\n                        commands.execute(CommandIDs.toggleFullscreenMode).catch(reason => {\n                            console.error('Failed to exit fullscreen mode.', reason);\n                        });\n                    }\n                    // Display top header\n                    if (labShell.mode === 'single-document' &&\n                        !labShell.isTopInSimpleModeVisible()) {\n                        commands.execute(CommandIDs.toggleHeader).catch(reason => {\n                            console.error('Failed to display title header.', reason);\n                        });\n                    }\n                    // Display side tabbar\n                    ['left', 'right'].forEach(side => {\n                        if (!labShell.isSideTabBarVisible(side) &&\n                            !labShell.isEmpty(side)) {\n                            commands\n                                .execute(CommandIDs.toggleSideTabBar, { side })\n                                .catch(reason => {\n                                console.error(`Failed to show ${side} activity bar.`, reason);\n                            });\n                        }\n                    });\n                    // Some actions are also trigger indirectly\n                    // - by listening to this command execution.\n                }\n            });\n        }\n        if (palette) {\n            [\n                CommandIDs.activateNextTab,\n                CommandIDs.activatePreviousTab,\n                CommandIDs.activateNextTabBar,\n                CommandIDs.activatePreviousTabBar,\n                CommandIDs.close,\n                CommandIDs.closeAll,\n                CommandIDs.closeOtherTabs,\n                CommandIDs.closeRightTabs,\n                CommandIDs.toggleHeader,\n                CommandIDs.toggleLeftArea,\n                CommandIDs.toggleRightArea,\n                CommandIDs.togglePresentationMode,\n                CommandIDs.toggleFullscreenMode,\n                CommandIDs.toggleMode,\n                CommandIDs.resetLayout\n            ].forEach(command => palette.addItem({ command, category }));\n            ['right', 'left'].forEach(side => {\n                palette.addItem({\n                    command: CommandIDs.toggleSideTabBar,\n                    category,\n                    args: { side }\n                });\n            });\n        }\n    }\n};\n/**\n * The main extension.\n */\nconst main = {\n    id: '@jupyterlab/application-extension:main',\n    description: 'Initializes the application and provides the URL tree path handler.',\n    requires: [\n        IRouter,\n        IWindowResolver,\n        ITranslator,\n        JupyterFrontEnd.ITreeResolver\n    ],\n    optional: [IConnectionLost],\n    provides: ITreePathUpdater,\n    activate: (app, router, resolver, translator, treeResolver, connectionLost) => {\n        const trans = translator.load('jupyterlab');\n        if (!(app instanceof JupyterLab)) {\n            throw new Error(`${main.id} must be activated in JupyterLab.`);\n        }\n        // These two internal state variables are used to manage the two source\n        // of the tree part of the URL being updated: 1) path of the active document,\n        // 2) path of the default browser if the active main area widget isn't a document.\n        let _docTreePath = '';\n        let _defaultBrowserTreePath = '';\n        function updateTreePath(treePath) {\n            // Wait for tree resolver to finish before updating the path because it use the PageConfig['treePath']\n            void treeResolver.paths.then(() => {\n                _defaultBrowserTreePath = treePath;\n                if (!_docTreePath) {\n                    const url = PageConfig.getUrl({ treePath });\n                    const path = URLExt.parse(url).pathname;\n                    router.navigate(path, { skipRouting: true });\n                    // Persist the new tree path to PageConfig as it is used elsewhere at runtime.\n                    PageConfig.setOption('treePath', treePath);\n                }\n            });\n        }\n        // Requiring the window resolver guarantees that the application extension\n        // only loads if there is a viable window name. Otherwise, the application\n        // will short-circuit and ask the user to navigate away.\n        const workspace = resolver.name;\n        console.debug(`Starting application in workspace: \"${workspace}\"`);\n        // If there were errors registering plugins, tell the user.\n        if (app.registerPluginErrors.length !== 0) {\n            const body = (React.createElement(\"pre\", null, app.registerPluginErrors.map(e => e.message).join('\\n')));\n            void showErrorMessage(trans.__('Error Registering Plugins'), {\n                message: body\n            });\n        }\n        // Watch the mode and update the page URL to /lab or /doc to reflect the\n        // change.\n        app.shell.modeChanged.connect((_, args) => {\n            const url = PageConfig.getUrl({ mode: args });\n            const path = URLExt.parse(url).pathname;\n            router.navigate(path, { skipRouting: true });\n            // Persist this mode change to PageConfig as it is used elsewhere at runtime.\n            PageConfig.setOption('mode', args);\n        });\n        // Wait for tree resolver to finish before updating the path because it use the PageConfig['treePath']\n        void treeResolver.paths.then(() => {\n            // Watch the path of the current widget in the main area and update the page\n            // URL to reflect the change.\n            app.shell.currentPathChanged.connect((_, args) => {\n                const maybeTreePath = args.newValue;\n                const treePath = maybeTreePath || _defaultBrowserTreePath;\n                const url = PageConfig.getUrl({ treePath: treePath });\n                const path = URLExt.parse(url).pathname;\n                router.navigate(path, { skipRouting: true });\n                // Persist the new tree path to PageConfig as it is used elsewhere at runtime.\n                PageConfig.setOption('treePath', treePath);\n                _docTreePath = maybeTreePath;\n            });\n        });\n        // If the connection to the server is lost, handle it with the\n        // connection lost handler.\n        connectionLost = connectionLost || ConnectionLost;\n        app.serviceManager.connectionFailure.connect((manager, error) => connectionLost(manager, error, translator));\n        const builder = app.serviceManager.builder;\n        const build = () => {\n            return builder\n                .build()\n                .then(() => {\n                return showDialog({\n                    title: trans.__('Build Complete'),\n                    body: (React.createElement(\"div\", null,\n                        trans.__('Build successfully completed, reload page?'),\n                        React.createElement(\"br\", null),\n                        trans.__('You will lose any unsaved changes.'))),\n                    buttons: [\n                        Dialog.cancelButton({\n                            label: trans.__('Reload Without Saving'),\n                            actions: ['reload']\n                        }),\n                        Dialog.okButton({ label: trans.__('Save and Reload') })\n                    ],\n                    hasClose: true\n                });\n            })\n                .then(({ button: { accept, actions } }) => {\n                if (accept) {\n                    void app.commands\n                        .execute('docmanager:save')\n                        .then(() => {\n                        router.reload();\n                    })\n                        .catch(err => {\n                        void showErrorMessage(trans.__('Save Failed'), {\n                            message: React.createElement(\"pre\", null, err.message)\n                        });\n                    });\n                }\n                else if (actions.includes('reload')) {\n                    router.reload();\n                }\n            })\n                .catch(err => {\n                void showErrorMessage(trans.__('Build Failed'), {\n                    message: React.createElement(\"pre\", null, err.message)\n                });\n            });\n        };\n        if (builder.isAvailable && builder.shouldCheck) {\n            void builder.getStatus().then(response => {\n                if (response.status === 'building') {\n                    return build();\n                }\n                if (response.status !== 'needed') {\n                    return;\n                }\n                const body = (React.createElement(\"div\", null,\n                    trans.__('JupyterLab build is suggested:'),\n                    React.createElement(\"br\", null),\n                    React.createElement(\"pre\", null, response.message)));\n                void showDialog({\n                    title: trans.__('Build Recommended'),\n                    body,\n                    buttons: [\n                        Dialog.cancelButton(),\n                        Dialog.okButton({ label: trans.__('Build') })\n                    ]\n                }).then(result => (result.button.accept ? build() : undefined));\n            });\n        }\n        return updateTreePath;\n    },\n    autoStart: true\n};\n/**\n * Plugin to build the context menu from the settings.\n */\nconst contextMenuPlugin = {\n    id: '@jupyterlab/application-extension:context-menu',\n    description: 'Populates the context menu.',\n    autoStart: true,\n    requires: [ISettingRegistry, ITranslator],\n    optional: [ICommandPalette],\n    activate: (app, settingRegistry, translator, palette) => {\n        const trans = translator.load('jupyterlab');\n        function createMenu(options) {\n            const menu = new RankedMenu({ ...options, commands: app.commands });\n            if (options.label) {\n                menu.title.label = trans.__(options.label);\n            }\n            return menu;\n        }\n        // Load the context menu lately so plugins are loaded.\n        app.started\n            .then(() => {\n            return Private.loadSettingsContextMenu(app.contextMenu, app.commands, settingRegistry, createMenu, translator);\n        })\n            .then(() => {\n            if (palette) {\n                palette === null || palette === void 0 ? void 0 : palette.addItem({\n                    category: trans.__('Settings'),\n                    command: CommandIDs.toggleContextMenu\n                });\n            }\n        })\n            .catch(reason => {\n            console.error('Failed to load context menu items from settings registry.', reason);\n        });\n    }\n};\n/**\n * Check if the application is dirty before closing the browser tab.\n */\nconst dirty = {\n    id: '@jupyterlab/application-extension:dirty',\n    description: 'Adds safeguard dialog when closing the browser tab with unsaved modifications.',\n    autoStart: true,\n    requires: [ITranslator],\n    activate: (app, translator) => {\n        if (!(app instanceof JupyterLab)) {\n            throw new Error(`${dirty.id} must be activated in JupyterLab.`);\n        }\n        const trans = translator.load('jupyterlab');\n        const message = trans.__('Are you sure you want to exit JupyterLab?\\n\\nAny unsaved changes will be lost.');\n        // The spec for the `beforeunload` event is implemented differently by\n        // the different browser vendors. Consequently, the `event.returnValue`\n        // attribute needs to set in addition to a return value being returned.\n        // For more information, see:\n        // https://developer.mozilla.org/en/docs/Web/Events/beforeunload\n        window.addEventListener('beforeunload', event => {\n            if (app.status.isDirty) {\n                return (event.returnValue = message);\n            }\n        });\n    }\n};\n/**\n * The default layout restorer provider.\n */\nconst layout = {\n    id: '@jupyterlab/application-extension:layout',\n    description: 'Provides the shell layout restorer.',\n    requires: [IStateDB, ILabShell, ISettingRegistry],\n    optional: [ITranslator],\n    activate: (app, state, labShell, settingRegistry, translator) => {\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        const first = app.started;\n        const registry = app.commands;\n        const mode = PageConfig.getOption('mode');\n        const restorer = new LayoutRestorer({\n            connector: state,\n            first,\n            registry,\n            mode\n        });\n        settingRegistry\n            .load(shell.id)\n            .then(settings => {\n            var _a, _b;\n            // Add a layer of customization to support app shell mode\n            const customizedLayout = settings.composite['layout'];\n            // Restore the layout.\n            void labShell\n                .restoreLayout(mode, restorer, {\n                'multiple-document': (_a = customizedLayout.multiple) !== null && _a !== void 0 ? _a : {},\n                'single-document': (_b = customizedLayout.single) !== null && _b !== void 0 ? _b : {}\n            })\n                .then(() => {\n                labShell.layoutModified.connect(() => {\n                    void restorer.save(labShell.saveLayout());\n                });\n                settings.changed.connect(onSettingsChanged);\n                Private.activateSidebarSwitcher(app, labShell, settings, trans);\n            });\n        })\n            .catch(reason => {\n            console.error('Fail to load settings for the layout restorer.');\n            console.error(reason);\n        });\n        return restorer;\n        async function onSettingsChanged(settings) {\n            if (!JSONExt.deepEqual(settings.composite['layout'], {\n                single: labShell.userLayout['single-document'],\n                multiple: labShell.userLayout['multiple-document']\n            })) {\n                const result = await showDialog({\n                    title: trans.__('Information'),\n                    body: trans.__('User layout customization has changed. You may need to reload JupyterLab to see the changes.'),\n                    buttons: [\n                        Dialog.cancelButton(),\n                        Dialog.okButton({ label: trans.__('Reload') })\n                    ]\n                });\n                if (result.button.accept) {\n                    location.reload();\n                }\n            }\n        }\n    },\n    autoStart: true,\n    provides: ILayoutRestorer\n};\n/**\n * The default URL router provider.\n */\nconst router = {\n    id: '@jupyterlab/application-extension:router',\n    description: 'Provides the URL router',\n    requires: [JupyterFrontEnd.IPaths],\n    activate: (app, paths) => {\n        const { commands } = app;\n        const base = paths.urls.base;\n        const router = new Router({ base, commands });\n        void app.started.then(() => {\n            // Route the very first request on load.\n            void router.route();\n            // Route all pop state events.\n            window.addEventListener('popstate', () => {\n                void router.route();\n            });\n        });\n        return router;\n    },\n    autoStart: true,\n    provides: IRouter\n};\n/**\n * The default tree route resolver plugin.\n */\nconst tree = {\n    id: '@jupyterlab/application-extension:tree-resolver',\n    description: 'Provides the tree route resolver',\n    autoStart: true,\n    requires: [IRouter],\n    provides: JupyterFrontEnd.ITreeResolver,\n    activate: (app, router) => {\n        const { commands } = app;\n        const set = new DisposableSet();\n        const delegate = new PromiseDelegate();\n        const treePattern = new RegExp('/(lab|doc)(/workspaces/[a-zA-Z0-9-_]+)?(/tree/.*)?');\n        set.add(commands.addCommand(CommandIDs.tree, {\n            execute: async (args) => {\n                var _a;\n                if (set.isDisposed) {\n                    return;\n                }\n                const query = URLExt.queryStringToObject((_a = args.search) !== null && _a !== void 0 ? _a : '');\n                const browser = query['file-browser-path'] || '';\n                // Remove the file browser path from the query string.\n                delete query['file-browser-path'];\n                // Clean up artifacts immediately upon routing.\n                set.dispose();\n                delegate.resolve({ browser, file: PageConfig.getOption('treePath') });\n            }\n        }));\n        set.add(router.register({ command: CommandIDs.tree, pattern: treePattern }));\n        // If a route is handled by the router without the tree command being\n        // invoked, resolve to `null` and clean up artifacts.\n        const listener = () => {\n            if (set.isDisposed) {\n                return;\n            }\n            set.dispose();\n            delegate.resolve(null);\n        };\n        router.routed.connect(listener);\n        set.add(new DisposableDelegate(() => {\n            router.routed.disconnect(listener);\n        }));\n        return { paths: delegate.promise };\n    }\n};\n/**\n * The default URL not found extension.\n */\nconst notfound = {\n    id: '@jupyterlab/application-extension:notfound',\n    description: 'Defines the behavior for not found URL (aka route).',\n    requires: [JupyterFrontEnd.IPaths, IRouter, ITranslator],\n    activate: (_, paths, router, translator) => {\n        const trans = translator.load('jupyterlab');\n        const bad = paths.urls.notFound;\n        if (!bad) {\n            return;\n        }\n        const base = router.base;\n        const message = trans.__('The path: %1 was not found. JupyterLab redirected to: %2', bad, base);\n        // Change the URL back to the base application URL.\n        router.navigate('');\n        void showErrorMessage(trans.__('Path Not Found'), { message });\n    },\n    autoStart: true\n};\n/**\n * Change the favicon changing based on the busy status;\n */\nconst busy = {\n    id: '@jupyterlab/application-extension:faviconbusy',\n    description: 'Handles the favicon depending on the application status.',\n    requires: [ILabStatus],\n    activate: async (_, status) => {\n        status.busySignal.connect((_, isBusy) => {\n            const favicon = document.querySelector(`link[rel=\"icon\"]${isBusy ? '.idle.favicon' : '.busy.favicon'}`);\n            if (!favicon) {\n                return;\n            }\n            const newFavicon = document.querySelector(`link${isBusy ? '.busy.favicon' : '.idle.favicon'}`);\n            if (!newFavicon) {\n                return;\n            }\n            // If we have the two icons with the special classes, then toggle them.\n            if (favicon !== newFavicon) {\n                favicon.rel = '';\n                newFavicon.rel = 'icon';\n                // Firefox doesn't seem to recognize just changing rel, so we also\n                // reinsert the link into the DOM.\n                newFavicon.parentNode.replaceChild(newFavicon, newFavicon);\n            }\n        });\n    },\n    autoStart: true\n};\n/**\n * The default JupyterLab application shell.\n */\nconst shell = {\n    id: '@jupyterlab/application-extension:shell',\n    description: 'Provides the JupyterLab shell. It has an extended API compared to `app.shell`.',\n    optional: [ISettingRegistry],\n    activate: (app, settingRegistry) => {\n        if (!(app.shell instanceof LabShell)) {\n            throw new Error(`${shell.id} did not find a LabShell instance.`);\n        }\n        if (settingRegistry) {\n            void settingRegistry.load(shell.id).then(settings => {\n                app.shell.updateConfig(settings.composite);\n                settings.changed.connect(() => {\n                    app.shell.updateConfig(settings.composite);\n                });\n            });\n        }\n        return app.shell;\n    },\n    autoStart: true,\n    provides: ILabShell\n};\n/**\n * The default JupyterLab application status provider.\n */\nconst status = {\n    id: '@jupyterlab/application-extension:status',\n    description: 'Provides the application status.',\n    activate: (app) => {\n        if (!(app instanceof JupyterLab)) {\n            throw new Error(`${status.id} must be activated in JupyterLab.`);\n        }\n        return app.status;\n    },\n    autoStart: true,\n    provides: ILabStatus\n};\n/**\n * The default JupyterLab application-specific information provider.\n *\n * #### Notes\n * This plugin should only be used by plugins that specifically need to access\n * JupyterLab application information, e.g., listing extensions that have been\n * loaded or deferred within JupyterLab.\n */\nconst info = {\n    id: '@jupyterlab/application-extension:info',\n    description: 'Provides the application information.',\n    activate: (app) => {\n        if (!(app instanceof JupyterLab)) {\n            throw new Error(`${info.id} must be activated in JupyterLab.`);\n        }\n        return app.info;\n    },\n    autoStart: true,\n    provides: JupyterLab.IInfo\n};\n/**\n * The default JupyterLab paths dictionary provider.\n */\nconst paths = {\n    id: '@jupyterlab/application-extension:paths',\n    description: 'Provides the application paths.',\n    activate: (app) => {\n        if (!(app instanceof JupyterLab)) {\n            throw new Error(`${paths.id} must be activated in JupyterLab.`);\n        }\n        return app.paths;\n    },\n    autoStart: true,\n    provides: JupyterFrontEnd.IPaths\n};\n/**\n * The default property inspector provider.\n */\nconst propertyInspector = {\n    id: '@jupyterlab/application-extension:property-inspector',\n    description: 'Provides the property inspector.',\n    autoStart: true,\n    requires: [ILabShell, ITranslator],\n    optional: [ILayoutRestorer],\n    provides: IPropertyInspectorProvider,\n    activate: (app, labshell, translator, restorer) => {\n        const trans = translator.load('jupyterlab');\n        const widget = new SideBarPropertyInspectorProvider({\n            shell: labshell,\n            translator\n        });\n        widget.title.icon = buildIcon;\n        widget.title.caption = trans.__('Property Inspector');\n        widget.id = 'jp-property-inspector';\n        labshell.add(widget, 'right', { rank: 100, type: 'Property Inspector' });\n        app.commands.addCommand(CommandIDs.showPropertyPanel, {\n            label: trans.__('Property Inspector'),\n            execute: () => {\n                labshell.activateById(widget.id);\n            }\n        });\n        if (restorer) {\n            restorer.add(widget, 'jp-property-inspector');\n        }\n        return widget;\n    }\n};\nconst jupyterLogo = {\n    id: '@jupyterlab/application-extension:logo',\n    description: 'Sets the application logo.',\n    autoStart: true,\n    requires: [ILabShell],\n    activate: (app, shell) => {\n        const logo = new Widget();\n        jupyterIcon.element({\n            container: logo.node,\n            elementPosition: 'center',\n            margin: '2px 2px 2px 8px',\n            height: 'auto',\n            width: '16px'\n        });\n        logo.id = 'jp-MainLogo';\n        shell.add(logo, 'top', { rank: 0 });\n    }\n};\n/**\n * The simple interface mode switch in the status bar.\n */\nconst modeSwitchPlugin = {\n    id: '@jupyterlab/application-extension:mode-switch',\n    description: 'Adds the interface mode switch',\n    requires: [ILabShell, ITranslator],\n    optional: [IStatusBar, ISettingRegistry],\n    activate: (app, labShell, translator, statusBar, settingRegistry) => {\n        if (statusBar === null) {\n            // Bail early\n            return;\n        }\n        const trans = translator.load('jupyterlab');\n        const modeSwitch = new Switch();\n        modeSwitch.id = 'jp-single-document-mode';\n        modeSwitch.valueChanged.connect((_, args) => {\n            labShell.mode = args.newValue ? 'single-document' : 'multiple-document';\n        });\n        labShell.modeChanged.connect((_, mode) => {\n            modeSwitch.value = mode === 'single-document';\n        });\n        if (settingRegistry) {\n            const loadSettings = settingRegistry.load(shell.id);\n            const updateSettings = (settings) => {\n                const startMode = settings.get('startMode').composite;\n                if (startMode) {\n                    labShell.mode =\n                        startMode === 'single' ? 'single-document' : 'multiple-document';\n                }\n            };\n            Promise.all([loadSettings, app.restored])\n                .then(([settings]) => {\n                updateSettings(settings);\n            })\n                .catch((reason) => {\n                console.error(reason.message);\n            });\n        }\n        // Show the current file browser shortcut in its title.\n        const updateModeSwitchTitle = () => {\n            const binding = app.commands.keyBindings.find(b => b.command === 'application:toggle-mode');\n            if (binding) {\n                const ks = binding.keys.map(CommandRegistry.formatKeystroke).join(', ');\n                modeSwitch.caption = trans.__('Simple Interface (%1)', ks);\n            }\n            else {\n                modeSwitch.caption = trans.__('Simple Interface');\n            }\n        };\n        updateModeSwitchTitle();\n        app.commands.keyBindingChanged.connect(() => {\n            updateModeSwitchTitle();\n        });\n        modeSwitch.label = trans.__('Simple');\n        statusBar.registerStatusItem(modeSwitchPlugin.id, {\n            priority: 1,\n            item: modeSwitch,\n            align: 'left',\n            rank: -1\n        });\n    },\n    autoStart: true\n};\n/**\n * Export the plugins as default.\n */\nconst plugins = [\n    contextMenuPlugin,\n    dirty,\n    main,\n    mainCommands,\n    layout,\n    router,\n    tree,\n    notfound,\n    busy,\n    shell,\n    status,\n    info,\n    modeSwitchPlugin,\n    paths,\n    propertyInspector,\n    jupyterLogo,\n    topbar\n];\nexport default plugins;\nvar Private;\n(function (Private) {\n    async function displayInformation(trans) {\n        const result = await showDialog({\n            title: trans.__('Information'),\n            body: trans.__('Context menu customization has changed. You will need to reload JupyterLab to see the changes.'),\n            buttons: [\n                Dialog.cancelButton(),\n                Dialog.okButton({ label: trans.__('Reload') })\n            ]\n        });\n        if (result.button.accept) {\n            location.reload();\n        }\n    }\n    async function loadSettingsContextMenu(contextMenu, commands, registry, menuFactory, translator) {\n        var _a;\n        const trans = translator.load('jupyterlab');\n        const pluginId = contextMenuPlugin.id;\n        let canonical = null;\n        let loaded = {};\n        /**\n         * Populate the plugin's schema defaults.\n         *\n         * We keep track of disabled entries in case the plugin is loaded\n         * after the menu initialization.\n         */\n        function populate(schema) {\n            var _a, _b;\n            loaded = {};\n            const pluginDefaults = Object.keys(registry.plugins)\n                .map(plugin => {\n                var _a, _b;\n                const items = (_b = (_a = registry.plugins[plugin].schema['jupyter.lab.menus']) === null || _a === void 0 ? void 0 : _a.context) !== null && _b !== void 0 ? _b : [];\n                loaded[plugin] = items;\n                return items;\n            })\n                .concat([(_b = (_a = schema['jupyter.lab.menus']) === null || _a === void 0 ? void 0 : _a.context) !== null && _b !== void 0 ? _b : []])\n                .reduceRight((acc, val) => SettingRegistry.reconcileItems(acc, val, true), []);\n            // Apply default value as last step to take into account overrides.json\n            // The standard default being [] as the plugin must use `jupyter.lab.menus.context`\n            // to define their default value.\n            schema.properties.contextMenu.default = SettingRegistry.reconcileItems(pluginDefaults, schema.properties.contextMenu.default, true)\n                // flatten one level\n                .sort((a, b) => { var _a, _b; return ((_a = a.rank) !== null && _a !== void 0 ? _a : Infinity) - ((_b = b.rank) !== null && _b !== void 0 ? _b : Infinity); });\n        }\n        // Transform the plugin object to return different schema than the default.\n        registry.transform(pluginId, {\n            compose: plugin => {\n                var _a, _b, _c, _d;\n                // Only override the canonical schema the first time.\n                if (!canonical) {\n                    canonical = JSONExt.deepCopy(plugin.schema);\n                    populate(canonical);\n                }\n                const defaults = (_c = (_b = (_a = canonical.properties) === null || _a === void 0 ? void 0 : _a.contextMenu) === null || _b === void 0 ? void 0 : _b.default) !== null && _c !== void 0 ? _c : [];\n                const user = {\n                    ...plugin.data.user,\n                    contextMenu: (_d = plugin.data.user.contextMenu) !== null && _d !== void 0 ? _d : []\n                };\n                const composite = {\n                    ...plugin.data.composite,\n                    contextMenu: SettingRegistry.reconcileItems(defaults, user.contextMenu, false)\n                };\n                plugin.data = { composite, user };\n                return plugin;\n            },\n            fetch: plugin => {\n                // Only override the canonical schema the first time.\n                if (!canonical) {\n                    canonical = JSONExt.deepCopy(plugin.schema);\n                    populate(canonical);\n                }\n                return {\n                    data: plugin.data,\n                    id: plugin.id,\n                    raw: plugin.raw,\n                    schema: canonical,\n                    version: plugin.version\n                };\n            }\n        });\n        // Repopulate the canonical variable after the setting registry has\n        // preloaded all initial plugins.\n        const settings = await registry.load(pluginId);\n        // Set the suppress flag on document.body if necessary.\n        const setDisabled = (settings) => {\n            const root = document.body;\n            const isDisabled = root.hasAttribute('data-jp-suppress-context-menu');\n            const shouldDisable = settings.get('disabled').composite;\n            if (isDisabled && !shouldDisable) {\n                root.removeAttribute('data-jp-suppress-context-menu');\n            }\n            else if (shouldDisable && !isDisabled) {\n                root.setAttribute('data-jp-suppress-context-menu', 'true');\n            }\n        };\n        const contextItems = (_a = settings.composite.contextMenu) !== null && _a !== void 0 ? _a : [];\n        // Create menu item for non-disabled element\n        SettingRegistry.filterDisabledItems(contextItems).forEach(item => {\n            MenuFactory.addContextItem({\n                // We have to set the default rank because Lumino is sorting the visible items\n                rank: DEFAULT_CONTEXT_ITEM_RANK,\n                ...item\n            }, contextMenu, menuFactory);\n        });\n        settings.changed.connect(() => {\n            var _a;\n            // As extension may change the context menu through API,\n            // prompt the user to reload if the menu has been updated.\n            const newItems = (_a = settings.composite.contextMenu) !== null && _a !== void 0 ? _a : [];\n            if (!JSONExt.deepEqual(contextItems, newItems)) {\n                void displayInformation(trans);\n            }\n            setDisabled(settings);\n        });\n        registry.pluginChanged.connect(async (sender, plugin) => {\n            var _a, _b, _c, _d;\n            if (plugin !== pluginId) {\n                // If the plugin changed its menu.\n                const oldItems = (_a = loaded[plugin]) !== null && _a !== void 0 ? _a : [];\n                const newItems = (_c = (_b = registry.plugins[plugin].schema['jupyter.lab.menus']) === null || _b === void 0 ? void 0 : _b.context) !== null && _c !== void 0 ? _c : [];\n                if (!JSONExt.deepEqual(oldItems, newItems)) {\n                    if (loaded[plugin]) {\n                        // The plugin has changed, request the user to reload the UI\n                        await displayInformation(trans);\n                    }\n                    else {\n                        // The plugin was not yet loaded when the menu was built => update the menu\n                        loaded[plugin] = JSONExt.deepCopy(newItems);\n                        // Merge potential disabled state\n                        const toAdd = (_d = SettingRegistry.reconcileItems(newItems, contextItems, false, false)) !== null && _d !== void 0 ? _d : [];\n                        SettingRegistry.filterDisabledItems(toAdd).forEach(item => {\n                            MenuFactory.addContextItem({\n                                // We have to set the default rank because Lumino is sorting the visible items\n                                rank: DEFAULT_CONTEXT_ITEM_RANK,\n                                ...item\n                            }, contextMenu, menuFactory);\n                        });\n                    }\n                }\n            }\n        });\n        // Handle disabled status.\n        setDisabled(settings);\n        commands.addCommand(CommandIDs.toggleContextMenu, {\n            label: trans.__('Enable Context Menu'),\n            isToggleable: true,\n            isToggled: () => !settings.get('disabled').composite,\n            execute: () => void settings.set('disabled', !settings.get('disabled').composite)\n        });\n    }\n    Private.loadSettingsContextMenu = loadSettingsContextMenu;\n    function activateSidebarSwitcher(app, labShell, settings, trans) {\n        // Add a command to switch a side panels's side\n        app.commands.addCommand(CommandIDs.switchSidebar, {\n            label: trans.__('Switch Sidebar Side'),\n            execute: () => {\n                // First, try to find the correct panel based on the application\n                // context menu click. Bail if we don't find a sidebar for the widget.\n                const contextNode = app.contextMenuHitTest(node => !!node.dataset.id);\n                if (!contextNode) {\n                    return;\n                }\n                const id = contextNode.dataset['id'];\n                const leftPanel = document.getElementById('jp-left-stack');\n                const node = document.getElementById(id);\n                let newLayout = null;\n                // Move the panel to the other side.\n                if (leftPanel && node && leftPanel.contains(node)) {\n                    const widget = find(labShell.widgets('left'), w => w.id === id);\n                    if (widget) {\n                        newLayout = labShell.move(widget, 'right');\n                        labShell.activateById(widget.id);\n                    }\n                }\n                else {\n                    const widget = find(labShell.widgets('right'), w => w.id === id);\n                    if (widget) {\n                        newLayout = labShell.move(widget, 'left');\n                        labShell.activateById(widget.id);\n                    }\n                }\n                if (newLayout) {\n                    settings\n                        .set('layout', {\n                        single: newLayout['single-document'],\n                        multiple: newLayout['multiple-document']\n                    })\n                        .catch(reason => {\n                        console.error('Failed to save user layout customization.', reason);\n                    });\n                }\n            }\n        });\n        app.commands.commandExecuted.connect((registry, executed) => {\n            if (executed.id === CommandIDs.resetLayout) {\n                settings.remove('layout').catch(reason => {\n                    console.error('Failed to remove user layout customization.', reason);\n                });\n            }\n        });\n    }\n    Private.activateSidebarSwitcher = activateSidebarSwitcher;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/statusbar/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/property-inspector/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Dialog, showDialog } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\n/**\n * A default connection lost handler, which brings up an error dialog.\n */\nexport const ConnectionLost = async function (manager, err, translator) {\n    translator = translator || nullTranslator;\n    const trans = translator.load('jupyterlab');\n    const title = trans.__('Server Connection Error');\n    const networkMsg = trans.__('A connection to the Jupyter server could not be established.\\n' +\n        'JupyterLab will continue trying to reconnect.\\n' +\n        'Check your network connection or Jupyter server configuration.\\n');\n    if (!Private.displayConnectionLost) {\n        return;\n    }\n    if (Private.serverConnectionLost) {\n        // Wait for the pre-existing promise to complete\n        await Private.serverConnectionLost;\n        return;\n    }\n    const dialog = showDialog({\n        title: title,\n        body: networkMsg,\n        checkbox: {\n            label: trans.__('Do not show this message again in this session.'),\n            caption: trans.__('If checked, you will not see a dialog informing you about an issue with server connection in this session.')\n        },\n        buttons: [Dialog.cancelButton({ label: trans.__('Close') })]\n    })\n        .then(result => {\n        if (result.isChecked) {\n            Private.displayConnectionLost = false;\n        }\n        return;\n    })\n        .catch(error => {\n        console.error('An error occurred while showing the dialog: ', error);\n    })\n        .finally(() => {\n        Private.serverConnectionLost = undefined;\n    });\n    Private.serverConnectionLost = dialog;\n};\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Boolean determining if connection lost dialog is displayed.\n     */\n    Private.displayConnectionLost = true;\n})(Private || (Private = {}));\n//# sourceMappingURL=connectionlost.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { CommandLinker } from '@jupyterlab/apputils';\nimport { DocumentRegistry } from '@jupyterlab/docregistry';\nimport { ServiceManager } from '@jupyterlab/services';\nimport { ContextMenuSvg } from '@jupyterlab/ui-components';\nimport { Application } from '@lumino/application';\nimport { Token } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\n/**\n * The base Jupyter front-end application class.\n *\n * @typeparam `T` - The `shell` type. Defaults to `JupyterFrontEnd.IShell`.\n *\n * @typeparam `U` - The type for supported format names. Defaults to `string`.\n *\n * #### Notes\n * This type is useful as a generic application against which front-end plugins\n * can be authored. It inherits from the Lumino `Application`.\n */\nexport class JupyterFrontEnd extends Application {\n    /**\n     * Construct a new JupyterFrontEnd object.\n     */\n    constructor(options) {\n        super(options);\n        this._formatChanged = new Signal(this);\n        // Class to scope global Jupyter CSS rules\n        options.shell.addClass('jp-ThemedContainer');\n        // render context menu/submenus with inline svg icon tweaks\n        this.contextMenu = new ContextMenuSvg({\n            commands: this.commands,\n            renderer: options.contextMenuRenderer,\n            groupByTarget: false,\n            sortBySelector: false\n        });\n        // The default restored promise if one does not exist in the options.\n        const restored = new Promise(resolve => {\n            requestAnimationFrame(() => {\n                resolve();\n            });\n        });\n        this.commandLinker =\n            options.commandLinker || new CommandLinker({ commands: this.commands });\n        this.docRegistry = options.docRegistry || new DocumentRegistry();\n        this.restored =\n            options.restored ||\n                this.started.then(() => restored).catch(() => restored);\n        this.serviceManager = options.serviceManager || new ServiceManager();\n    }\n    /**\n     * The application form factor, e.g., `desktop` or `mobile`.\n     */\n    get format() {\n        return this._format;\n    }\n    set format(format) {\n        if (this._format !== format) {\n            this._format = format;\n            document.body.dataset['format'] = format;\n            this._formatChanged.emit(format);\n        }\n    }\n    /**\n     * A signal that emits when the application form factor changes.\n     */\n    get formatChanged() {\n        return this._formatChanged;\n    }\n    /**\n     * Walks up the DOM hierarchy of the target of the active `contextmenu`\n     * event, testing each HTMLElement ancestor for a user-supplied function. This can\n     * be used to find an HTMLElement on which to operate, given a context menu click.\n     *\n     * @param fn - a function that takes an `HTMLElement` and returns a\n     *   boolean for whether it is the element the requester is seeking.\n     *\n     * @returns an HTMLElement or undefined, if none is found.\n     */\n    contextMenuHitTest(fn) {\n        if (!this._contextMenuEvent ||\n            !(this._contextMenuEvent.target instanceof Node)) {\n            return undefined;\n        }\n        let node = this._contextMenuEvent.target;\n        do {\n            if (node instanceof HTMLElement && fn(node)) {\n                return node;\n            }\n            node = node.parentNode;\n        } while (node && node.parentNode && node !== node.parentNode);\n        return undefined;\n        // TODO: we should be able to use .composedPath() to simplify this function\n        // down to something like the below, but it seems like composedPath is\n        // sometimes returning an empty list.\n        /*\n        if (this._contextMenuEvent) {\n          this._contextMenuEvent\n            .composedPath()\n            .filter(x => x instanceof HTMLElement)\n            .find(test);\n        }\n        return undefined;\n        */\n    }\n    /**\n     * A method invoked on a document `'contextmenu'` event.\n     */\n    evtContextMenu(event) {\n        this._contextMenuEvent = event;\n        if (event.shiftKey ||\n            Private.suppressContextMenu(event.target)) {\n            return;\n        }\n        const opened = this.contextMenu.open(event);\n        if (opened) {\n            const items = this.contextMenu.menu.items;\n            // If only the context menu information will be shown,\n            // with no real commands, close the context menu and\n            // allow the native one to open.\n            if (items.length === 1 &&\n                items[0].command === JupyterFrontEndContextMenu.contextMenu) {\n                this.contextMenu.menu.close();\n                return;\n            }\n            // Stop propagation and allow the application context menu to show.\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    }\n}\n/**\n * The namespace for `JupyterFrontEnd` class statics.\n */\n(function (JupyterFrontEnd) {\n    /**\n     * Is JupyterLab in document mode?\n     *\n     * @param path - Full URL of JupyterLab\n     * @param paths - The current IPaths object hydrated from PageConfig.\n     */\n    function inDocMode(path, paths) {\n        const docPattern = new RegExp(`^${paths.urls.doc}`);\n        const match = path.match(docPattern);\n        if (match) {\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    JupyterFrontEnd.inDocMode = inDocMode;\n    /**\n     * The application paths dictionary token.\n     */\n    JupyterFrontEnd.IPaths = new Token('@jupyterlab/application:IPaths', `A service providing information about various\n  URLs and server paths for the current application. Use this service if you want to\n  assemble URLs to use the JupyterLab REST API.`);\n    /**\n     * The application tree resolver token.\n     *\n     * #### Notes\n     * Not all Jupyter front-end applications will have a tree resolver\n     * implemented on the client-side. This token should not be required as a\n     * dependency if it is possible to make it an optional dependency.\n     */\n    JupyterFrontEnd.ITreeResolver = new Token('@jupyterlab/application:ITreeResolver', 'A service to resolve the tree path.');\n})(JupyterFrontEnd || (JupyterFrontEnd = {}));\n/**\n * A namespace for module-private functionality.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Returns whether the element is itself, or a child of, an element with the `jp-suppress-context-menu` data attribute.\n     */\n    function suppressContextMenu(element) {\n        return element.closest('[data-jp-suppress-context-menu]') !== null;\n    }\n    Private.suppressContextMenu = suppressContextMenu;\n})(Private || (Private = {}));\n/**\n * A namespace for the context menu override.\n */\nexport var JupyterFrontEndContextMenu;\n(function (JupyterFrontEndContextMenu) {\n    /**\n     * An id for a private context-menu-info ersatz command.\n     */\n    JupyterFrontEndContextMenu.contextMenu = '__internal:context-menu-info';\n})(JupyterFrontEndContextMenu || (JupyterFrontEndContextMenu = {}));\n//# sourceMappingURL=frontend.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { DocumentWidget } from '@jupyterlab/docregistry';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { classes, DockPanelSvg, LabIcon, TabBarSvg, tabIcon, TabPanelSvg } from '@jupyterlab/ui-components';\nimport { ArrayExt, find, map } from '@lumino/algorithm';\nimport { JSONExt, PromiseDelegate, Token } from '@lumino/coreutils';\nimport { MessageLoop } from '@lumino/messaging';\nimport { Debouncer } from '@lumino/polling';\nimport { Signal } from '@lumino/signaling';\nimport { AccordionPanel, BoxLayout, BoxPanel, FocusTracker, Panel, SplitPanel, StackedPanel, TabBar, Widget } from '@lumino/widgets';\n/**\n * The class name added to AppShell instances.\n */\nconst APPLICATION_SHELL_CLASS = 'jp-LabShell';\n/**\n * The class name added to side bar instances.\n */\nconst SIDEBAR_CLASS = 'jp-SideBar';\n/**\n * The class name added to the current widget's title.\n */\nconst CURRENT_CLASS = 'jp-mod-current';\n/**\n * The class name added to the active widget's title.\n */\nconst ACTIVE_CLASS = 'jp-mod-active';\n/**\n * The default rank of items added to a sidebar.\n */\nconst DEFAULT_RANK = 900;\nconst ACTIVITY_CLASS = 'jp-Activity';\n/**\n * The JupyterLab application shell token.\n */\nexport const ILabShell = new Token('@jupyterlab/application:ILabShell', 'A service for interacting with the JupyterLab shell. The top-level ``application`` object also has a reference to the shell, but it has a restricted interface in order to be agnostic to different shell implementations on the application. Use this to get more detailed information about currently active widgets and layout state.');\n/**\n * The application shell for JupyterLab.\n */\nexport class LabShell extends Widget {\n    /**\n     * Construct a new application shell.\n     */\n    constructor(options) {\n        super();\n        /**\n         * A message hook for child add/remove messages on the main area dock panel.\n         */\n        this._dockChildHook = (handler, msg) => {\n            switch (msg.type) {\n                case 'child-added':\n                    msg.child.addClass(ACTIVITY_CLASS);\n                    this._tracker.add(msg.child);\n                    break;\n                case 'child-removed':\n                    msg.child.removeClass(ACTIVITY_CLASS);\n                    this._tracker.remove(msg.child);\n                    break;\n                default:\n                    break;\n            }\n            return true;\n        };\n        this._activeChanged = new Signal(this);\n        this._cachedLayout = null;\n        this._currentChanged = new Signal(this);\n        this._currentPath = '';\n        this._currentPathChanged = new Signal(this);\n        this._modeChanged = new Signal(this);\n        this._isRestored = false;\n        this._layoutModified = new Signal(this);\n        this._layoutDebouncer = new Debouncer(() => {\n            this._layoutModified.emit(undefined);\n        }, 0);\n        this._restored = new PromiseDelegate();\n        this._tracker = new FocusTracker();\n        this._topHandlerHiddenByUser = false;\n        this._idTypeMap = new Map();\n        this._mainOptionsCache = new Map();\n        this._sideOptionsCache = new Map();\n        this._delayedWidget = new Array();\n        this.addClass(APPLICATION_SHELL_CLASS);\n        this.id = 'main';\n        if ((options === null || options === void 0 ? void 0 : options.waitForRestore) === false) {\n            this._userLayout = { 'multiple-document': {}, 'single-document': {} };\n        }\n        // Skip Links\n        const skipLinkWidget = (this._skipLinkWidget = new Private.SkipLinkWidget(this));\n        this._skipLinkWidget.show();\n        //  Wrap the skip widget to customize its position and size\n        const skipLinkWrapper = new Panel();\n        skipLinkWrapper.addClass('jp-skiplink-wrapper');\n        skipLinkWrapper.addWidget(skipLinkWidget);\n        const headerPanel = (this._headerPanel = new BoxPanel());\n        const menuHandler = (this._menuHandler = new Private.PanelHandler());\n        menuHandler.panel.node.setAttribute('role', 'navigation');\n        const topHandler = (this._topHandler = new Private.PanelHandler());\n        topHandler.panel.node.setAttribute('role', 'banner');\n        const bottomPanel = (this._bottomPanel = new BoxPanel());\n        bottomPanel.node.setAttribute('role', 'contentinfo');\n        const hboxPanel = new BoxPanel();\n        const vsplitPanel = (this._vsplitPanel =\n            new Private.RestorableSplitPanel());\n        const dockPanel = (this._dockPanel = new DockPanelSvg({\n            hiddenMode: Widget.HiddenMode.Display\n        }));\n        MessageLoop.installMessageHook(dockPanel, this._dockChildHook);\n        const hsplitPanel = (this._hsplitPanel =\n            new Private.RestorableSplitPanel());\n        const downPanel = (this._downPanel = new TabPanelSvg({\n            tabsMovable: true\n        }));\n        const leftHandler = (this._leftHandler = new Private.SideBarHandler());\n        const rightHandler = (this._rightHandler = new Private.SideBarHandler());\n        const rootLayout = new BoxLayout();\n        headerPanel.id = 'jp-header-panel';\n        menuHandler.panel.id = 'jp-menu-panel';\n        topHandler.panel.id = 'jp-top-panel';\n        bottomPanel.id = 'jp-bottom-panel';\n        hboxPanel.id = 'jp-main-content-panel';\n        vsplitPanel.id = 'jp-main-vsplit-panel';\n        dockPanel.id = 'jp-main-dock-panel';\n        hsplitPanel.id = 'jp-main-split-panel';\n        downPanel.id = 'jp-down-stack';\n        leftHandler.sideBar.addClass(SIDEBAR_CLASS);\n        leftHandler.sideBar.addClass('jp-mod-left');\n        leftHandler.sideBar.node.setAttribute('role', 'complementary');\n        leftHandler.stackedPanel.id = 'jp-left-stack';\n        rightHandler.sideBar.addClass(SIDEBAR_CLASS);\n        rightHandler.sideBar.addClass('jp-mod-right');\n        rightHandler.sideBar.node.setAttribute('role', 'complementary');\n        rightHandler.stackedPanel.id = 'jp-right-stack';\n        dockPanel.node.setAttribute('role', 'main');\n        hboxPanel.spacing = 0;\n        vsplitPanel.spacing = 1;\n        dockPanel.spacing = 5;\n        hsplitPanel.spacing = 1;\n        headerPanel.direction = 'top-to-bottom';\n        vsplitPanel.orientation = 'vertical';\n        hboxPanel.direction = 'left-to-right';\n        hsplitPanel.orientation = 'horizontal';\n        bottomPanel.direction = 'bottom-to-top';\n        SplitPanel.setStretch(leftHandler.stackedPanel, 0);\n        SplitPanel.setStretch(downPanel, 0);\n        SplitPanel.setStretch(dockPanel, 1);\n        SplitPanel.setStretch(rightHandler.stackedPanel, 0);\n        BoxPanel.setStretch(leftHandler.sideBar, 0);\n        BoxPanel.setStretch(hsplitPanel, 1);\n        BoxPanel.setStretch(rightHandler.sideBar, 0);\n        SplitPanel.setStretch(vsplitPanel, 1);\n        hsplitPanel.addWidget(leftHandler.stackedPanel);\n        hsplitPanel.addWidget(dockPanel);\n        hsplitPanel.addWidget(rightHandler.stackedPanel);\n        vsplitPanel.addWidget(hsplitPanel);\n        vsplitPanel.addWidget(downPanel);\n        hboxPanel.addWidget(leftHandler.sideBar);\n        hboxPanel.addWidget(vsplitPanel);\n        hboxPanel.addWidget(rightHandler.sideBar);\n        rootLayout.direction = 'top-to-bottom';\n        rootLayout.spacing = 0; // TODO make this configurable?\n        // Use relative sizing to set the width of the side panels.\n        // This will still respect the min-size of children widget in the stacked\n        // panel. The default sizes will be overwritten during layout restoration.\n        vsplitPanel.setRelativeSizes([3, 1]);\n        hsplitPanel.setRelativeSizes([1, 2.5, 1]);\n        BoxLayout.setStretch(headerPanel, 0);\n        BoxLayout.setStretch(menuHandler.panel, 0);\n        BoxLayout.setStretch(topHandler.panel, 0);\n        BoxLayout.setStretch(hboxPanel, 1);\n        BoxLayout.setStretch(bottomPanel, 0);\n        rootLayout.addWidget(skipLinkWrapper);\n        rootLayout.addWidget(headerPanel);\n        rootLayout.addWidget(topHandler.panel);\n        rootLayout.addWidget(hboxPanel);\n        rootLayout.addWidget(bottomPanel);\n        // initially hiding header and bottom panel when no elements inside,\n        this._headerPanel.hide();\n        this._bottomPanel.hide();\n        this._downPanel.hide();\n        this.layout = rootLayout;\n        // Connect change listeners.\n        this._tracker.currentChanged.connect(this._onCurrentChanged, this);\n        this._tracker.activeChanged.connect(this._onActiveChanged, this);\n        // Connect main layout change listener.\n        this._dockPanel.layoutModified.connect(this._onLayoutModified, this);\n        // Connect vsplit layout change listener\n        this._vsplitPanel.updated.connect(this._onLayoutModified, this);\n        // Connect down panel change listeners\n        this._downPanel.currentChanged.connect(this._onLayoutModified, this);\n        this._downPanel.tabBar.tabMoved.connect(this._onTabPanelChanged, this);\n        this._downPanel.stackedPanel.widgetRemoved.connect(this._onTabPanelChanged, this);\n        // Catch current changed events on the side handlers.\n        this._leftHandler.updated.connect(this._onLayoutModified, this);\n        this._rightHandler.updated.connect(this._onLayoutModified, this);\n        // Catch update events on the horizontal split panel\n        this._hsplitPanel.updated.connect(this._onLayoutModified, this);\n        // Setup single-document-mode title bar\n        const titleHandler = (this._titleHandler = new Private.TitleHandler(this));\n        this.add(titleHandler, 'top', { rank: 100 });\n        if (this._dockPanel.mode === 'multiple-document') {\n            this._topHandler.addWidget(this._menuHandler.panel, 100);\n            titleHandler.hide();\n        }\n        else {\n            rootLayout.insertWidget(3, this._menuHandler.panel);\n        }\n        this.translator = nullTranslator;\n        // Wire up signals to update the title panel of the simple interface mode to\n        // follow the title of this.currentWidget\n        this.currentChanged.connect((sender, args) => {\n            let newValue = args.newValue;\n            let oldValue = args.oldValue;\n            // Stop watching the title of the previously current widget\n            if (oldValue) {\n                oldValue.title.changed.disconnect(this._updateTitlePanelTitle, this);\n                if (oldValue instanceof DocumentWidget) {\n                    oldValue.context.pathChanged.disconnect(this._updateCurrentPath, this);\n                }\n            }\n            // Start watching the title of the new current widget\n            if (newValue) {\n                newValue.title.changed.connect(this._updateTitlePanelTitle, this);\n                this._updateTitlePanelTitle();\n                if (newValue instanceof DocumentWidget) {\n                    newValue.context.pathChanged.connect(this._updateCurrentPath, this);\n                }\n            }\n            this._updateCurrentPath();\n        });\n    }\n    /**\n     * A signal emitted when main area's active focus changes.\n     */\n    get activeChanged() {\n        return this._activeChanged;\n    }\n    /**\n     * The active widget in the shell's main area.\n     */\n    get activeWidget() {\n        return this._tracker.activeWidget;\n    }\n    /**\n     * Whether the add buttons for each main area tab bar are enabled.\n     */\n    get addButtonEnabled() {\n        return this._dockPanel.addButtonEnabled;\n    }\n    set addButtonEnabled(value) {\n        this._dockPanel.addButtonEnabled = value;\n    }\n    /**\n     * A signal emitted when the add button on a main area tab bar is clicked.\n     */\n    get addRequested() {\n        return this._dockPanel.addRequested;\n    }\n    /**\n     * A signal emitted when main area's current focus changes.\n     */\n    get currentChanged() {\n        return this._currentChanged;\n    }\n    /**\n     * Current document path.\n     */\n    // FIXME deprecation `undefined` is to ensure backward compatibility in 4.x\n    get currentPath() {\n        return this._currentPath;\n    }\n    /**\n     * A signal emitted when the path of the current document changes.\n     *\n     * This also fires when the current document itself changes.\n     */\n    get currentPathChanged() {\n        return this._currentPathChanged;\n    }\n    /**\n     * The current widget in the shell's main area.\n     */\n    get currentWidget() {\n        return this._tracker.currentWidget;\n    }\n    /**\n     * A signal emitted when the main area's layout is modified.\n     */\n    get layoutModified() {\n        return this._layoutModified;\n    }\n    /**\n     * Whether the left area is collapsed.\n     */\n    get leftCollapsed() {\n        return !this._leftHandler.sideBar.currentTitle;\n    }\n    /**\n     * Whether the left area is collapsed.\n     */\n    get rightCollapsed() {\n        return !this._rightHandler.sideBar.currentTitle;\n    }\n    /**\n     * Whether JupyterLab is in presentation mode with the\n     * `jp-mod-presentationMode` CSS class.\n     */\n    get presentationMode() {\n        return this.hasClass('jp-mod-presentationMode');\n    }\n    set presentationMode(value) {\n        this.toggleClass('jp-mod-presentationMode', value);\n    }\n    /**\n     * The main dock area's user interface mode.\n     */\n    get mode() {\n        return this._dockPanel.mode;\n    }\n    set mode(mode) {\n        const dock = this._dockPanel;\n        if (mode === dock.mode) {\n            return;\n        }\n        const applicationCurrentWidget = this.currentWidget;\n        if (mode === 'single-document') {\n            // Cache the current multi-document layout before changing the mode.\n            this._cachedLayout = dock.saveLayout();\n            dock.mode = mode;\n            // In case the active widget in the dock panel is *not* the active widget\n            // of the application, defer to the application.\n            if (this.currentWidget) {\n                dock.activateWidget(this.currentWidget);\n            }\n            // Adjust menu and title\n            this.layout.insertWidget(3, this._menuHandler.panel);\n            this._titleHandler.show();\n            this._updateTitlePanelTitle();\n            if (this._topHandlerHiddenByUser) {\n                this._topHandler.panel.hide();\n            }\n        }\n        else {\n            // Cache a reference to every widget currently in the dock panel before\n            // changing its mode.\n            const widgets = Array.from(dock.widgets());\n            dock.mode = mode;\n            // Restore cached layout if possible.\n            if (this._cachedLayout) {\n                // Remove any disposed widgets in the cached layout and restore.\n                Private.normalizeAreaConfig(dock, this._cachedLayout.main);\n                dock.restoreLayout(this._cachedLayout);\n                this._cachedLayout = null;\n            }\n            // If layout restoration has been deferred, restore layout now.\n            if (this._layoutRestorer.isDeferred) {\n                this._layoutRestorer\n                    .restoreDeferred()\n                    .then(mainArea => {\n                    if (mainArea) {\n                        const { currentWidget, dock } = mainArea;\n                        if (dock) {\n                            this._dockPanel.restoreLayout(dock);\n                        }\n                        if (currentWidget) {\n                            this.activateById(currentWidget.id);\n                        }\n                    }\n                })\n                    .catch(reason => {\n                    console.error('Failed to restore the deferred layout.');\n                    console.error(reason);\n                });\n            }\n            // Add any widgets created during single document mode, which have\n            // subsequently been removed from the dock panel after the multiple document\n            // layout has been restored. If the widget has add options cached for\n            // the widget (i.e., if it has been placed with respect to another widget),\n            // then take that into account.\n            widgets.forEach(widget => {\n                if (!widget.parent) {\n                    this._addToMainArea(widget, {\n                        ...this._mainOptionsCache.get(widget),\n                        activate: false\n                    });\n                }\n            });\n            this._mainOptionsCache.clear();\n            // In case the active widget in the dock panel is *not* the active widget\n            // of the application, defer to the application.\n            if (applicationCurrentWidget) {\n                dock.activateWidget(applicationCurrentWidget);\n            }\n            // Adjust menu and title\n            this.add(this._menuHandler.panel, 'top', { rank: 100 });\n            this._titleHandler.hide();\n        }\n        // Set the mode data attribute on the applications shell node.\n        this.node.dataset.shellMode = mode;\n        this._downPanel.fit();\n        // Emit the mode changed signal\n        this._modeChanged.emit(mode);\n    }\n    /**\n     * A signal emitted when the shell/dock panel change modes (single/multiple document).\n     */\n    get modeChanged() {\n        return this._modeChanged;\n    }\n    /**\n     * Promise that resolves when state is first restored, returning layout\n     * description.\n     */\n    get restored() {\n        return this._restored.promise;\n    }\n    get translator() {\n        var _a;\n        return (_a = this._translator) !== null && _a !== void 0 ? _a : nullTranslator;\n    }\n    set translator(value) {\n        if (value !== this._translator) {\n            this._translator = value;\n            // Set translator for tab bars\n            TabBarSvg.translator = value;\n            const trans = value.load('jupyterlab');\n            this._menuHandler.panel.node.setAttribute('aria-label', trans.__('main menu'));\n            this._leftHandler.sideBar.node.setAttribute('aria-label', trans.__('main sidebar'));\n            this._leftHandler.sideBar.contentNode.setAttribute('aria-label', trans.__('main sidebar'));\n            this._rightHandler.sideBar.node.setAttribute('aria-label', trans.__('alternate sidebar'));\n            this._rightHandler.sideBar.contentNode.setAttribute('aria-label', trans.__('alternate sidebar'));\n            this._topHandler.panel.node.setAttribute('aria-label', trans.__('Top Bar'));\n            this._bottomPanel.node.setAttribute('aria-label', trans.__('Bottom Panel'));\n            this._dockPanel.node.setAttribute('aria-label', trans.__('Main Content'));\n        }\n    }\n    /**\n     * User customized shell layout.\n     */\n    get userLayout() {\n        return JSONExt.deepCopy(this._userLayout);\n    }\n    /**\n     * Activate a widget in its area.\n     */\n    activateById(id) {\n        if (this._leftHandler.has(id)) {\n            this._leftHandler.activate(id);\n            return;\n        }\n        if (this._rightHandler.has(id)) {\n            this._rightHandler.activate(id);\n            return;\n        }\n        const tabIndex = this._downPanel.tabBar.titles.findIndex(title => title.owner.id === id);\n        if (tabIndex >= 0) {\n            this._downPanel.currentIndex = tabIndex;\n            return;\n        }\n        const dock = this._dockPanel;\n        const widget = find(dock.widgets(), value => value.id === id);\n        if (widget) {\n            dock.activateWidget(widget);\n        }\n    }\n    /**\n     * Activate widget in specified area.\n     *\n     * ### Notes\n     * The alpha version of this method only supports activating the \"main\" area.\n     *\n     * @alpha\n     * @param area Name of area to activate\n     */\n    activateArea(area = 'main') {\n        switch (area) {\n            case 'main':\n                {\n                    const current = this._currentTabBar();\n                    if (!current) {\n                        return;\n                    }\n                    if (current.currentTitle) {\n                        current.currentTitle.owner.activate();\n                    }\n                }\n                return;\n            case 'left':\n            case 'right':\n            case 'header':\n            case 'top':\n            case 'menu':\n            case 'bottom':\n                console.debug(`Area: ${area} activation not yet implemented`);\n                break;\n            default:\n                throw new Error(`Invalid area: ${area}`);\n        }\n    }\n    /**\n     * Activate the next Tab in the active TabBar.\n     */\n    activateNextTab() {\n        const current = this._currentTabBar();\n        if (!current) {\n            return;\n        }\n        const ci = current.currentIndex;\n        if (ci === -1) {\n            return;\n        }\n        if (ci < current.titles.length - 1) {\n            current.currentIndex += 1;\n            if (current.currentTitle) {\n                current.currentTitle.owner.activate();\n            }\n            return;\n        }\n        if (ci === current.titles.length - 1) {\n            const nextBar = this._adjacentBar('next');\n            if (nextBar) {\n                nextBar.currentIndex = 0;\n                if (nextBar.currentTitle) {\n                    nextBar.currentTitle.owner.activate();\n                }\n            }\n        }\n    }\n    /**\n     * Activate the previous Tab in the active TabBar.\n     */\n    activatePreviousTab() {\n        const current = this._currentTabBar();\n        if (!current) {\n            return;\n        }\n        const ci = current.currentIndex;\n        if (ci === -1) {\n            return;\n        }\n        if (ci > 0) {\n            current.currentIndex -= 1;\n            if (current.currentTitle) {\n                current.currentTitle.owner.activate();\n            }\n            return;\n        }\n        if (ci === 0) {\n            const prevBar = this._adjacentBar('previous');\n            if (prevBar) {\n                const len = prevBar.titles.length;\n                prevBar.currentIndex = len - 1;\n                if (prevBar.currentTitle) {\n                    prevBar.currentTitle.owner.activate();\n                }\n            }\n        }\n    }\n    /**\n     * Activate the next TabBar.\n     */\n    activateNextTabBar() {\n        const nextBar = this._adjacentBar('next');\n        if (nextBar) {\n            if (nextBar.currentTitle) {\n                nextBar.currentTitle.owner.activate();\n            }\n        }\n    }\n    /**\n     * Activate the next TabBar.\n     */\n    activatePreviousTabBar() {\n        const nextBar = this._adjacentBar('previous');\n        if (nextBar) {\n            if (nextBar.currentTitle) {\n                nextBar.currentTitle.owner.activate();\n            }\n        }\n    }\n    /**\n     * Add a widget to the JupyterLab shell\n     *\n     * @param widget Widget\n     * @param area Area\n     * @param options Options\n     */\n    add(widget, area = 'main', options) {\n        var _a;\n        if (!this._userLayout) {\n            this._delayedWidget.push({ widget, area, options });\n            return;\n        }\n        let userPosition;\n        if ((options === null || options === void 0 ? void 0 : options.type) && this._userLayout[this.mode][options.type]) {\n            userPosition = this._userLayout[this.mode][options.type];\n            this._idTypeMap.set(widget.id, options.type);\n        }\n        else {\n            userPosition = this._userLayout[this.mode][widget.id];\n        }\n        if (options === null || options === void 0 ? void 0 : options.type) {\n            this._idTypeMap.set(widget.id, options.type);\n            widget.disposed.connect(() => {\n                this._idTypeMap.delete(widget.id);\n            });\n        }\n        area = (_a = userPosition === null || userPosition === void 0 ? void 0 : userPosition.area) !== null && _a !== void 0 ? _a : area;\n        options =\n            options || (userPosition === null || userPosition === void 0 ? void 0 : userPosition.options)\n                ? {\n                    ...options,\n                    ...userPosition === null || userPosition === void 0 ? void 0 : userPosition.options\n                }\n                : undefined;\n        switch (area || 'main') {\n            case 'bottom':\n                return this._addToBottomArea(widget, options);\n            case 'down':\n                return this._addToDownArea(widget, options);\n            case 'header':\n                return this._addToHeaderArea(widget, options);\n            case 'left':\n                return this._addToLeftArea(widget, options);\n            case 'main':\n                return this._addToMainArea(widget, options);\n            case 'menu':\n                return this._addToMenuArea(widget, options);\n            case 'right':\n                return this._addToRightArea(widget, options);\n            case 'top':\n                return this._addToTopArea(widget, options);\n            default:\n                throw new Error(`Invalid area: ${area}`);\n        }\n    }\n    /**\n     * Move a widget type to a new area.\n     *\n     * The type is determined from the `widget.id` and fallback to `widget.id`.\n     *\n     * #### Notes\n     * If `mode` is undefined, both mode are updated.\n     * The new layout is now persisted.\n     *\n     * @param widget Widget to move\n     * @param area New area\n     * @param mode Mode to change\n     * @returns The new user layout\n     */\n    move(widget, area, mode) {\n        var _a;\n        const type = (_a = this._idTypeMap.get(widget.id)) !== null && _a !== void 0 ? _a : widget.id;\n        for (const m of ['single-document', 'multiple-document'].filter(c => !mode || c === mode)) {\n            this._userLayout[m][type] = {\n                ...this._userLayout[m][type],\n                area\n            };\n        }\n        this.add(widget, area);\n        return this._userLayout;\n    }\n    /**\n     * Collapse the left area.\n     */\n    collapseLeft() {\n        this._leftHandler.collapse();\n        this._onLayoutModified();\n    }\n    /**\n     * Collapse the right area.\n     */\n    collapseRight() {\n        this._rightHandler.collapse();\n        this._onLayoutModified();\n    }\n    /**\n     * Dispose the shell.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._layoutDebouncer.dispose();\n        super.dispose();\n    }\n    /**\n     * Expand the left area.\n     *\n     * #### Notes\n     * This will open the most recently used tab,\n     * or the first tab if there is no most recently used.\n     */\n    expandLeft() {\n        this._leftHandler.expand();\n        this._onLayoutModified();\n    }\n    /**\n     * Expand the right area.\n     *\n     * #### Notes\n     * This will open the most recently used tab,\n     * or the first tab if there is no most recently used.\n     */\n    expandRight() {\n        this._rightHandler.expand();\n        this._onLayoutModified();\n    }\n    /**\n     * Close all widgets in the main and down area.\n     */\n    closeAll() {\n        // Make a copy of all the widget in the dock panel (using `Array.from()`)\n        // before removing them because removing them while iterating through them\n        // modifies the underlying data of the iterator.\n        Array.from(this._dockPanel.widgets()).forEach(widget => widget.close());\n        this._downPanel.stackedPanel.widgets.forEach(widget => widget.close());\n    }\n    /**\n     * Whether an side tab bar is visible or not.\n     *\n     * @param side Sidebar of interest\n     * @returns Side tab bar visibility\n     */\n    isSideTabBarVisible(side) {\n        switch (side) {\n            case 'left':\n                return this._leftHandler.isVisible;\n            case 'right':\n                return this._rightHandler.isVisible;\n        }\n    }\n    /**\n     * Whether the top bar in simple mode is visible or not.\n     *\n     * @returns Top bar visibility\n     */\n    isTopInSimpleModeVisible() {\n        return !this._topHandlerHiddenByUser;\n    }\n    /**\n     * True if the given area is empty.\n     */\n    isEmpty(area) {\n        switch (area) {\n            case 'bottom':\n                return this._bottomPanel.widgets.length === 0;\n            case 'down':\n                return this._downPanel.stackedPanel.widgets.length === 0;\n            case 'header':\n                return this._headerPanel.widgets.length === 0;\n            case 'left':\n                return this._leftHandler.stackedPanel.widgets.length === 0;\n            case 'main':\n                return this._dockPanel.isEmpty;\n            case 'menu':\n                return this._menuHandler.panel.widgets.length === 0;\n            case 'right':\n                return this._rightHandler.stackedPanel.widgets.length === 0;\n            case 'top':\n                return this._topHandler.panel.widgets.length === 0;\n            default:\n                return true;\n        }\n    }\n    /**\n     * Restore the layout state and configuration for the application shell.\n     *\n     * #### Notes\n     * This should only be called once.\n     */\n    async restoreLayout(mode, layoutRestorer, configuration = {}) {\n        var _a, _b, _c, _d;\n        // Set the configuration and add widgets added before the shell was ready.\n        this._userLayout = {\n            'single-document': (_a = configuration['single-document']) !== null && _a !== void 0 ? _a : {},\n            'multiple-document': (_b = configuration['multiple-document']) !== null && _b !== void 0 ? _b : {}\n        };\n        this._delayedWidget.forEach(({ widget, area, options }) => {\n            this.add(widget, area, options);\n        });\n        this._delayedWidget.length = 0;\n        this._layoutRestorer = layoutRestorer;\n        // Get the layout from the restorer\n        const layout = await layoutRestorer.fetch();\n        // Reset the layout\n        const { mainArea, downArea, leftArea, rightArea, topArea, relativeSizes } = layout;\n        // Rehydrate the main area.\n        if (mainArea) {\n            const { currentWidget, dock } = mainArea;\n            if (dock && mode === 'multiple-document') {\n                this._dockPanel.restoreLayout(dock);\n            }\n            if (mode) {\n                this.mode = mode;\n            }\n            if (currentWidget) {\n                this.activateById(currentWidget.id);\n            }\n        }\n        else {\n            // This is needed when loading in an empty workspace in single doc mode\n            if (mode) {\n                this.mode = mode;\n            }\n        }\n        if ((topArea === null || topArea === void 0 ? void 0 : topArea.simpleVisibility) !== undefined) {\n            this._topHandlerHiddenByUser = !topArea.simpleVisibility;\n            if (this.mode === 'single-document') {\n                this._topHandler.panel.setHidden(this._topHandlerHiddenByUser);\n            }\n        }\n        // Rehydrate the down area\n        if (downArea) {\n            const { currentWidget, widgets, size } = downArea;\n            const widgetIds = (_c = widgets === null || widgets === void 0 ? void 0 : widgets.map(widget => widget.id)) !== null && _c !== void 0 ? _c : [];\n            // Remove absent widgets\n            this._downPanel.tabBar.titles\n                .filter(title => !widgetIds.includes(title.owner.id))\n                .map(title => title.owner.close());\n            // Add new widgets\n            const titleIds = this._downPanel.tabBar.titles.map(title => title.owner.id);\n            widgets === null || widgets === void 0 ? void 0 : widgets.filter(widget => !titleIds.includes(widget.id)).map(widget => this._downPanel.addWidget(widget));\n            // Reorder tabs\n            while (!ArrayExt.shallowEqual(widgetIds, this._downPanel.tabBar.titles.map(title => title.owner.id))) {\n                this._downPanel.tabBar.titles.forEach((title, index) => {\n                    const position = widgetIds.findIndex(id => title.owner.id == id);\n                    if (position >= 0 && position != index) {\n                        this._downPanel.tabBar.insertTab(position, title);\n                    }\n                });\n            }\n            if (currentWidget) {\n                const index = this._downPanel.stackedPanel.widgets.findIndex(widget => widget.id === currentWidget.id);\n                if (index) {\n                    this._downPanel.currentIndex = index;\n                    (_d = this._downPanel.currentWidget) === null || _d === void 0 ? void 0 : _d.activate();\n                }\n            }\n            if (size && size > 0.0) {\n                this._vsplitPanel.setRelativeSizes([1.0 - size, size]);\n            }\n            else {\n                // Close all tabs and hide the panel\n                this._downPanel.stackedPanel.widgets.forEach(widget => widget.close());\n                this._downPanel.hide();\n            }\n        }\n        // Rehydrate the left area.\n        if (leftArea) {\n            this._leftHandler.rehydrate(leftArea);\n        }\n        else {\n            if (mode === 'single-document') {\n                this.collapseLeft();\n            }\n        }\n        // Rehydrate the right area.\n        if (rightArea) {\n            this._rightHandler.rehydrate(rightArea);\n        }\n        else {\n            if (mode === 'single-document') {\n                this.collapseRight();\n            }\n        }\n        // Restore the relative sizes.\n        if (relativeSizes) {\n            this._hsplitPanel.setRelativeSizes(relativeSizes);\n        }\n        if (!this._isRestored) {\n            // Make sure all messages in the queue are finished before notifying\n            // any extensions that are waiting for the promise that guarantees the\n            // application state has been restored.\n            MessageLoop.flush();\n            this._restored.resolve(layout);\n        }\n    }\n    /**\n     * Save the dehydrated state of the application shell.\n     */\n    saveLayout() {\n        // If the application is in single document mode, use the cached layout if\n        // available. Otherwise, default to querying the dock panel for layout.\n        const layout = {\n            mainArea: {\n                currentWidget: this._tracker.currentWidget,\n                dock: this.mode === 'single-document'\n                    ? this._cachedLayout || this._dockPanel.saveLayout()\n                    : this._dockPanel.saveLayout()\n            },\n            downArea: {\n                currentWidget: this._downPanel.currentWidget,\n                widgets: Array.from(this._downPanel.stackedPanel.widgets),\n                size: this._vsplitPanel.relativeSizes()[1]\n            },\n            leftArea: this._leftHandler.dehydrate(),\n            rightArea: this._rightHandler.dehydrate(),\n            topArea: { simpleVisibility: !this._topHandlerHiddenByUser },\n            relativeSizes: this._hsplitPanel.relativeSizes()\n        };\n        return layout;\n    }\n    /**\n     * Toggle top header visibility in simple mode\n     *\n     * Note: Does nothing in multi-document mode\n     */\n    toggleTopInSimpleModeVisibility() {\n        if (this.mode === 'single-document') {\n            if (this._topHandler.panel.isVisible) {\n                this._topHandlerHiddenByUser = true;\n                this._topHandler.panel.hide();\n            }\n            else {\n                this._topHandlerHiddenByUser = false;\n                this._topHandler.panel.show();\n                this._updateTitlePanelTitle();\n            }\n            this._onLayoutModified();\n        }\n    }\n    /**\n     * Toggle side tab bar visibility\n     *\n     * @param side Sidebar of interest\n     */\n    toggleSideTabBarVisibility(side) {\n        if (side === 'right') {\n            if (this._rightHandler.isVisible) {\n                this._rightHandler.hide();\n            }\n            else {\n                this._rightHandler.show();\n            }\n        }\n        else {\n            if (this._leftHandler.isVisible) {\n                this._leftHandler.hide();\n            }\n            else {\n                this._leftHandler.show();\n            }\n        }\n    }\n    /**\n     * Update the shell configuration.\n     *\n     * @param config Shell configuration\n     */\n    updateConfig(config) {\n        if (config.hiddenMode) {\n            switch (config.hiddenMode) {\n                case 'display':\n                    this._dockPanel.hiddenMode = Widget.HiddenMode.Display;\n                    break;\n                case 'scale':\n                    this._dockPanel.hiddenMode = Widget.HiddenMode.Scale;\n                    break;\n                case 'contentVisibility':\n                    this._dockPanel.hiddenMode = Widget.HiddenMode.ContentVisibility;\n                    break;\n            }\n        }\n    }\n    /**\n     * Returns the widgets for an application area.\n     */\n    widgets(area) {\n        switch (area !== null && area !== void 0 ? area : 'main') {\n            case 'main':\n                return this._dockPanel.widgets();\n            case 'left':\n                return map(this._leftHandler.sideBar.titles, t => t.owner);\n            case 'right':\n                return map(this._rightHandler.sideBar.titles, t => t.owner);\n            case 'header':\n                return this._headerPanel.children();\n            case 'top':\n                return this._topHandler.panel.children();\n            case 'menu':\n                return this._menuHandler.panel.children();\n            case 'bottom':\n                return this._bottomPanel.children();\n            default:\n                throw new Error(`Invalid area: ${area}`);\n        }\n    }\n    /**\n     * Handle `after-attach` messages for the application shell.\n     */\n    onAfterAttach(msg) {\n        this.node.dataset.shellMode = this.mode;\n    }\n    /**\n     * Update the title panel title based on the title of the current widget.\n     */\n    _updateTitlePanelTitle() {\n        let current = this.currentWidget;\n        const inputElement = this._titleHandler.inputElement;\n        inputElement.value = current ? current.title.label : '';\n        inputElement.title = current ? current.title.caption : '';\n    }\n    /**\n     * The path of the current widget changed, fire the _currentPathChanged signal.\n     */\n    _updateCurrentPath() {\n        let current = this.currentWidget;\n        let newValue = '';\n        if (current && current instanceof DocumentWidget) {\n            newValue = current.context.path;\n        }\n        this._currentPathChanged.emit({\n            newValue: newValue,\n            oldValue: this._currentPath\n        });\n        this._currentPath = newValue;\n    }\n    /**\n     * Add a widget to the left content area.\n     *\n     * #### Notes\n     * Widgets must have a unique `id` property, which will be used as the DOM id.\n     */\n    _addToLeftArea(widget, options) {\n        if (!widget.id) {\n            console.error('Widgets added to app shell must have unique id property.');\n            return;\n        }\n        options = options || this._sideOptionsCache.get(widget) || {};\n        this._sideOptionsCache.set(widget, options);\n        const rank = 'rank' in options ? options.rank : DEFAULT_RANK;\n        this._leftHandler.addWidget(widget, rank);\n        this._onLayoutModified();\n    }\n    /**\n     * Add a widget to the main content area.\n     *\n     * #### Notes\n     * Widgets must have a unique `id` property, which will be used as the DOM id.\n     * All widgets added to the main area should be disposed after removal\n     * (disposal before removal will remove the widget automatically).\n     *\n     * In the options, `ref` defaults to `null`, `mode` defaults to `'tab-after'`,\n     * and `activate` defaults to `true`.\n     */\n    _addToMainArea(widget, options) {\n        if (!widget.id) {\n            console.error('Widgets added to app shell must have unique id property.');\n            return;\n        }\n        options = options || {};\n        const dock = this._dockPanel;\n        const mode = options.mode || 'tab-after';\n        let ref = this.currentWidget;\n        if (options.ref) {\n            ref = find(dock.widgets(), value => value.id === options.ref) || null;\n        }\n        const { title } = widget;\n        // Add widget ID to tab so that we can get a handle on the tab's widget\n        // (for context menu support)\n        title.dataset = { ...title.dataset, id: widget.id };\n        if (title.icon instanceof LabIcon) {\n            // bind an appropriate style to the icon\n            title.icon = title.icon.bindprops({\n                stylesheet: 'mainAreaTab'\n            });\n        }\n        else if (typeof title.icon === 'string' || !title.icon) {\n            // add some classes to help with displaying css background imgs\n            title.iconClass = classes(title.iconClass, 'jp-Icon');\n        }\n        dock.addWidget(widget, { mode, ref });\n        // The dock panel doesn't account for placement information while\n        // in single document mode, so upon rehydrating any widgets that were\n        // added will not be in the correct place. Cache the placement information\n        // here so that we can later rehydrate correctly.\n        if (dock.mode === 'single-document') {\n            this._mainOptionsCache.set(widget, options);\n        }\n        if (options.activate !== false) {\n            dock.activateWidget(widget);\n        }\n    }\n    /**\n     * Add a widget to the right content area.\n     *\n     * #### Notes\n     * Widgets must have a unique `id` property, which will be used as the DOM id.\n     */\n    _addToRightArea(widget, options) {\n        if (!widget.id) {\n            console.error('Widgets added to app shell must have unique id property.');\n            return;\n        }\n        options = options || this._sideOptionsCache.get(widget) || {};\n        const rank = 'rank' in options ? options.rank : DEFAULT_RANK;\n        this._sideOptionsCache.set(widget, options);\n        this._rightHandler.addWidget(widget, rank);\n        this._onLayoutModified();\n    }\n    /**\n     * Add a widget to the top content area.\n     *\n     * #### Notes\n     * Widgets must have a unique `id` property, which will be used as the DOM id.\n     */\n    _addToTopArea(widget, options) {\n        var _a;\n        if (!widget.id) {\n            console.error('Widgets added to app shell must have unique id property.');\n            return;\n        }\n        options = options || {};\n        const rank = (_a = options.rank) !== null && _a !== void 0 ? _a : DEFAULT_RANK;\n        this._topHandler.addWidget(widget, rank);\n        this._onLayoutModified();\n        if (this._topHandler.panel.isHidden) {\n            this._topHandler.panel.show();\n        }\n    }\n    /**\n     * Add a widget to the title content area.\n     *\n     * #### Notes\n     * Widgets must have a unique `id` property, which will be used as the DOM id.\n     */\n    _addToMenuArea(widget, options) {\n        var _a;\n        if (!widget.id) {\n            console.error('Widgets added to app shell must have unique id property.');\n            return;\n        }\n        options = options || {};\n        const rank = (_a = options.rank) !== null && _a !== void 0 ? _a : DEFAULT_RANK;\n        this._menuHandler.addWidget(widget, rank);\n        this._onLayoutModified();\n        if (this._menuHandler.panel.isHidden) {\n            this._menuHandler.panel.show();\n        }\n    }\n    /**\n     * Add a widget to the header content area.\n     *\n     * #### Notes\n     * Widgets must have a unique `id` property, which will be used as the DOM id.\n     */\n    _addToHeaderArea(widget, options) {\n        if (!widget.id) {\n            console.error('Widgets added to app shell must have unique id property.');\n            return;\n        }\n        // Temporary: widgets are added to the panel in order of insertion.\n        this._headerPanel.addWidget(widget);\n        this._onLayoutModified();\n        if (this._headerPanel.isHidden) {\n            this._headerPanel.show();\n        }\n    }\n    /**\n     * Add a widget to the bottom content area.\n     *\n     * #### Notes\n     * Widgets must have a unique `id` property, which will be used as the DOM id.\n     */\n    _addToBottomArea(widget, options) {\n        if (!widget.id) {\n            console.error('Widgets added to app shell must have unique id property.');\n            return;\n        }\n        // Temporary: widgets are added to the panel in order of insertion.\n        this._bottomPanel.addWidget(widget);\n        this._onLayoutModified();\n        if (this._bottomPanel.isHidden) {\n            this._bottomPanel.show();\n        }\n    }\n    _addToDownArea(widget, options) {\n        if (!widget.id) {\n            console.error('Widgets added to app shell must have unique id property.');\n            return;\n        }\n        options = options || {};\n        const { title } = widget;\n        // Add widget ID to tab so that we can get a handle on the tab's widget\n        // (for context menu support)\n        title.dataset = { ...title.dataset, id: widget.id };\n        if (title.icon instanceof LabIcon) {\n            // bind an appropriate style to the icon\n            title.icon = title.icon.bindprops({\n                stylesheet: 'mainAreaTab'\n            });\n        }\n        else if (typeof title.icon === 'string' || !title.icon) {\n            // add some classes to help with displaying css background imgs\n            title.iconClass = classes(title.iconClass, 'jp-Icon');\n        }\n        this._downPanel.addWidget(widget);\n        this._onLayoutModified();\n        if (this._downPanel.isHidden) {\n            this._downPanel.show();\n        }\n    }\n    /*\n     * Return the tab bar adjacent to the current TabBar or `null`.\n     */\n    _adjacentBar(direction) {\n        const current = this._currentTabBar();\n        if (!current) {\n            return null;\n        }\n        const bars = Array.from(this._dockPanel.tabBars());\n        const len = bars.length;\n        const index = bars.indexOf(current);\n        if (direction === 'previous') {\n            return index > 0 ? bars[index - 1] : index === 0 ? bars[len - 1] : null;\n        }\n        // Otherwise, direction is 'next'.\n        return index < len - 1\n            ? bars[index + 1]\n            : index === len - 1\n                ? bars[0]\n                : null;\n    }\n    /*\n     * Return the TabBar that has the currently active Widget or null.\n     */\n    _currentTabBar() {\n        const current = this._tracker.currentWidget;\n        if (!current) {\n            return null;\n        }\n        const title = current.title;\n        const bars = this._dockPanel.tabBars();\n        return find(bars, bar => bar.titles.indexOf(title) > -1) || null;\n    }\n    /**\n     * Handle a change to the dock area active widget.\n     */\n    _onActiveChanged(sender, args) {\n        if (args.newValue) {\n            args.newValue.title.className += ` ${ACTIVE_CLASS}`;\n        }\n        if (args.oldValue) {\n            args.oldValue.title.className = args.oldValue.title.className.replace(ACTIVE_CLASS, '');\n        }\n        this._activeChanged.emit(args);\n    }\n    /**\n     * Handle a change to the dock area current widget.\n     */\n    _onCurrentChanged(sender, args) {\n        if (args.newValue) {\n            args.newValue.title.className += ` ${CURRENT_CLASS}`;\n        }\n        if (args.oldValue) {\n            args.oldValue.title.className = args.oldValue.title.className.replace(CURRENT_CLASS, '');\n        }\n        this._currentChanged.emit(args);\n        this._onLayoutModified();\n    }\n    /**\n     * Handle a change on the down panel widgets\n     */\n    _onTabPanelChanged() {\n        if (this._downPanel.stackedPanel.widgets.length === 0) {\n            this._downPanel.hide();\n        }\n        this._onLayoutModified();\n    }\n    /**\n     * Handle a change to the layout.\n     */\n    _onLayoutModified() {\n        void this._layoutDebouncer.invoke();\n    }\n}\nvar Private;\n(function (Private) {\n    /**\n     * A less-than comparison function for side bar rank items.\n     */\n    function itemCmp(first, second) {\n        return first.rank - second.rank;\n    }\n    Private.itemCmp = itemCmp;\n    /**\n     * Removes widgets that have been disposed from an area config, mutates area.\n     */\n    function normalizeAreaConfig(parent, area) {\n        if (!area) {\n            return;\n        }\n        if (area.type === 'tab-area') {\n            area.widgets = area.widgets.filter(widget => !widget.isDisposed && widget.parent === parent);\n            return;\n        }\n        area.children.forEach(child => {\n            normalizeAreaConfig(parent, child);\n        });\n    }\n    Private.normalizeAreaConfig = normalizeAreaConfig;\n    /**\n     * A class which manages a panel and sorts its widgets by rank.\n     */\n    class PanelHandler {\n        constructor() {\n            /**\n             * A message hook for child add/remove messages on the main area dock panel.\n             */\n            this._panelChildHook = (handler, msg) => {\n                switch (msg.type) {\n                    case 'child-added':\n                        {\n                            const widget = msg.child;\n                            // If we already know about this widget, we're done\n                            if (this._items.find(v => v.widget === widget)) {\n                                break;\n                            }\n                            // Otherwise, add to the end by default\n                            const rank = this._items[this._items.length - 1].rank;\n                            this._items.push({ widget, rank });\n                        }\n                        break;\n                    case 'child-removed':\n                        {\n                            const widget = msg.child;\n                            ArrayExt.removeFirstWhere(this._items, v => v.widget === widget);\n                        }\n                        break;\n                    default:\n                        break;\n                }\n                return true;\n            };\n            this._items = new Array();\n            this._panel = new Panel();\n            MessageLoop.installMessageHook(this._panel, this._panelChildHook);\n        }\n        /**\n         * Get the panel managed by the handler.\n         */\n        get panel() {\n            return this._panel;\n        }\n        /**\n         * Add a widget to the panel.\n         *\n         * If the widget is already added, it will be moved.\n         */\n        addWidget(widget, rank) {\n            widget.parent = null;\n            const item = { widget, rank };\n            const index = ArrayExt.upperBound(this._items, item, Private.itemCmp);\n            ArrayExt.insert(this._items, index, item);\n            this._panel.insertWidget(index, widget);\n        }\n    }\n    Private.PanelHandler = PanelHandler;\n    /**\n     * A class which manages a side bar and related stacked panel.\n     */\n    class SideBarHandler {\n        /**\n         * Construct a new side bar handler.\n         */\n        constructor() {\n            this._isHiddenByUser = false;\n            this._items = new Array();\n            this._updated = new Signal(this);\n            this._sideBar = new TabBar({\n                insertBehavior: 'none',\n                removeBehavior: 'none',\n                allowDeselect: true,\n                orientation: 'vertical'\n            });\n            this._stackedPanel = new StackedPanel();\n            this._sideBar.hide();\n            this._stackedPanel.hide();\n            this._lastCurrent = null;\n            this._sideBar.currentChanged.connect(this._onCurrentChanged, this);\n            this._sideBar.tabActivateRequested.connect(this._onTabActivateRequested, this);\n            this._stackedPanel.widgetRemoved.connect(this._onWidgetRemoved, this);\n        }\n        /**\n         * Whether the side bar is visible\n         */\n        get isVisible() {\n            return this._sideBar.isVisible;\n        }\n        /**\n         * Get the tab bar managed by the handler.\n         */\n        get sideBar() {\n            return this._sideBar;\n        }\n        /**\n         * Get the stacked panel managed by the handler\n         */\n        get stackedPanel() {\n            return this._stackedPanel;\n        }\n        /**\n         * Signal fires when the stack panel or the sidebar changes\n         */\n        get updated() {\n            return this._updated;\n        }\n        /**\n         * Handles a movement to the handles of a widget\n         */\n        _onHandleMoved() {\n            return this._refreshVisibility();\n        }\n        /**\n         * Handles changes to the expansion status of a widget\n         */\n        _onExpansionToggle(sender, index) {\n            return this._refreshVisibility();\n        }\n        /**\n         * Expand the sidebar.\n         *\n         * #### Notes\n         * This will open the most recently used tab, or the first tab\n         * if there is no most recently used.\n         */\n        expand() {\n            const previous = this._lastCurrent || (this._items.length > 0 && this._items[0].widget);\n            if (previous) {\n                this.activate(previous.id);\n            }\n        }\n        /**\n         * Activate a widget residing in the side bar by ID.\n         *\n         * @param id - The widget's unique ID.\n         */\n        activate(id) {\n            const widget = this._findWidgetByID(id);\n            if (widget) {\n                this._sideBar.currentTitle = widget.title;\n                widget.activate();\n            }\n        }\n        /**\n         * Test whether the sidebar has the given widget by id.\n         */\n        has(id) {\n            return this._findWidgetByID(id) !== null;\n        }\n        /**\n         * Collapse the sidebar so no items are expanded.\n         */\n        collapse() {\n            this._sideBar.currentTitle = null;\n        }\n        /**\n         * Add a widget and its title to the stacked panel and side bar.\n         *\n         * If the widget is already added, it will be moved.\n         */\n        addWidget(widget, rank) {\n            var _a, _b, _c, _d;\n            widget.parent = null;\n            widget.hide();\n            const item = { widget, rank };\n            const index = this._findInsertIndex(item);\n            ArrayExt.insert(this._items, index, item);\n            this._stackedPanel.insertWidget(index, widget);\n            const title = this._sideBar.insertTab(index, widget.title);\n            // Store the parent id in the title dataset\n            // in order to dispatch click events to the right widget.\n            title.dataset = { id: widget.id };\n            if (title.icon instanceof LabIcon) {\n                // bind an appropriate style to the icon\n                title.icon = title.icon.bindprops({\n                    stylesheet: 'sideBar'\n                });\n            }\n            else if (typeof title.icon === 'string' && title.icon != '') {\n                // add some classes to help with displaying css background imgs\n                title.iconClass = classes(title.iconClass, 'jp-Icon', 'jp-Icon-20');\n            }\n            else if (!title.icon && !title.label) {\n                // add a fallback icon if there is no title label nor icon\n                title.icon = tabIcon.bindprops({\n                    stylesheet: 'sideBar'\n                });\n            }\n            // @ts-expect-error sometimes widget is an Accordion Panel\n            (_b = (_a = widget.content) === null || _a === void 0 ? void 0 : _a.expansionToggled) === null || _b === void 0 ? void 0 : _b.connect(this._onExpansionToggle, this);\n            // @ts-expect-error sometimes widget is a SidePanel\n            (_d = (_c = widget.content) === null || _c === void 0 ? void 0 : _c.handleMoved) === null || _d === void 0 ? void 0 : _d.connect(this._onHandleMoved, this);\n            this._refreshVisibility();\n        }\n        /**\n         * Dehydrate the side bar data.\n         */\n        dehydrate() {\n            const collapsed = this._sideBar.currentTitle === null;\n            const widgets = Array.from(this._stackedPanel.widgets);\n            const currentWidget = widgets[this._sideBar.currentIndex];\n            const widgetStates = {};\n            this._stackedPanel.widgets.forEach((w) => {\n                if (w.id && w.content instanceof SplitPanel) {\n                    widgetStates[w.id] = {\n                        sizes: w.content.relativeSizes(),\n                        expansionStates: w.content.widgets.map(wi => wi.isVisible)\n                    };\n                }\n            });\n            return {\n                collapsed,\n                currentWidget,\n                visible: !this._isHiddenByUser,\n                widgets,\n                widgetStates\n            };\n        }\n        /**\n         * Rehydrate the side bar.\n         */\n        rehydrate(data) {\n            if (data.currentWidget) {\n                this.activate(data.currentWidget.id);\n            }\n            if (data.collapsed) {\n                this.collapse();\n            }\n            if (!data.visible) {\n                this.hide();\n            }\n            if (data.widgetStates) {\n                this._stackedPanel.widgets.forEach((w) => {\n                    var _a;\n                    if (w.id && w.content instanceof SplitPanel) {\n                        const state = (_a = data.widgetStates[w.id]) !== null && _a !== void 0 ? _a : {};\n                        w.content.widgets.forEach((wi, widx) => {\n                            var _a;\n                            const expansion = ((_a = state.expansionStates) !== null && _a !== void 0 ? _a : [])[widx];\n                            if (typeof expansion === 'boolean' &&\n                                w.content instanceof AccordionPanel) {\n                                expansion ? w.content.expand(widx) : w.content.collapse(widx);\n                            }\n                        });\n                        if (state.sizes) {\n                            w.content.setRelativeSizes(state.sizes);\n                        }\n                    }\n                });\n            }\n        }\n        /**\n         * Hide the side bar even if it contains widgets\n         */\n        hide() {\n            this._isHiddenByUser = true;\n            this._refreshVisibility();\n        }\n        /**\n         * Show the side bar if it contains widgets\n         */\n        show() {\n            this._isHiddenByUser = false;\n            this._refreshVisibility();\n        }\n        /**\n         * Find the insertion index for a rank item.\n         */\n        _findInsertIndex(item) {\n            return ArrayExt.upperBound(this._items, item, Private.itemCmp);\n        }\n        /**\n         * Find the index of the item with the given widget, or `-1`.\n         */\n        _findWidgetIndex(widget) {\n            return ArrayExt.findFirstIndex(this._items, i => i.widget === widget);\n        }\n        /**\n         * Find the widget which owns the given title, or `null`.\n         */\n        _findWidgetByTitle(title) {\n            const item = find(this._items, value => value.widget.title === title);\n            return item ? item.widget : null;\n        }\n        /**\n         * Find the widget with the given id, or `null`.\n         */\n        _findWidgetByID(id) {\n            const item = find(this._items, value => value.widget.id === id);\n            return item ? item.widget : null;\n        }\n        /**\n         * Refresh the visibility of the side bar and stacked panel.\n         */\n        _refreshVisibility() {\n            this._stackedPanel.setHidden(this._sideBar.currentTitle === null);\n            this._sideBar.setHidden(this._isHiddenByUser || this._sideBar.titles.length === 0);\n            this._updated.emit();\n        }\n        /**\n         * Handle the `currentChanged` signal from the sidebar.\n         */\n        _onCurrentChanged(sender, args) {\n            const oldWidget = args.previousTitle\n                ? this._findWidgetByTitle(args.previousTitle)\n                : null;\n            const newWidget = args.currentTitle\n                ? this._findWidgetByTitle(args.currentTitle)\n                : null;\n            if (oldWidget) {\n                oldWidget.hide();\n            }\n            if (newWidget) {\n                newWidget.show();\n            }\n            this._lastCurrent = newWidget || oldWidget;\n            this._refreshVisibility();\n        }\n        /**\n         * Handle a `tabActivateRequest` signal from the sidebar.\n         */\n        _onTabActivateRequested(sender, args) {\n            args.title.owner.activate();\n        }\n        /*\n         * Handle the `widgetRemoved` signal from the stacked panel.\n         */\n        _onWidgetRemoved(sender, widget) {\n            if (widget === this._lastCurrent) {\n                this._lastCurrent = null;\n            }\n            ArrayExt.removeAt(this._items, this._findWidgetIndex(widget));\n            this._sideBar.removeTab(widget.title);\n            this._refreshVisibility();\n        }\n    }\n    Private.SideBarHandler = SideBarHandler;\n    class SkipLinkWidget extends Widget {\n        /**\n         * Construct a new skipLink widget.\n         */\n        constructor(shell) {\n            super();\n            this.addClass('jp-skiplink');\n            this.id = 'jp-skiplink';\n            this._shell = shell;\n            this._createSkipLink('Skip to main panel', 'main');\n        }\n        handleEvent(event) {\n            var _a, _b;\n            switch (event.type) {\n                case 'click':\n                    if (event.target instanceof HTMLElement) {\n                        this._shell.activateArea((_b = (_a = event.target) === null || _a === void 0 ? void 0 : _a.dataset) === null || _b === void 0 ? void 0 : _b.targetarea);\n                    }\n                    break;\n            }\n        }\n        /**\n         * Handle `after-attach` messages for the widget.\n         */\n        onAfterAttach(msg) {\n            super.onAfterAttach(msg);\n            this.node.addEventListener('click', this);\n        }\n        /**\n         * A message handler invoked on a `'before-detach'`\n         * message\n         */\n        onBeforeDetach(msg) {\n            this.node.removeEventListener('click', this);\n            super.onBeforeDetach(msg);\n        }\n        _createSkipLink(skipLinkText, area) {\n            const skipLink = document.createElement('a');\n            skipLink.href = '#';\n            skipLink.tabIndex = 0;\n            skipLink.text = skipLinkText;\n            skipLink.className = 'skip-link';\n            skipLink.dataset['targetarea'] = area;\n            this.node.appendChild(skipLink);\n        }\n    }\n    Private.SkipLinkWidget = SkipLinkWidget;\n    class TitleHandler extends Widget {\n        /**\n         * Construct a new title handler.\n         */\n        constructor(shell) {\n            super();\n            this._selected = false;\n            const inputElement = document.createElement('input');\n            inputElement.type = 'text';\n            this.node.appendChild(inputElement);\n            this._shell = shell;\n            this.id = 'jp-title-panel-title';\n        }\n        /**\n         * Handle `after-attach` messages for the widget.\n         */\n        onAfterAttach(msg) {\n            super.onAfterAttach(msg);\n            this.inputElement.addEventListener('keyup', this);\n            this.inputElement.addEventListener('click', this);\n            this.inputElement.addEventListener('blur', this);\n        }\n        /**\n         * Handle `before-detach` messages for the widget.\n         */\n        onBeforeDetach(msg) {\n            super.onBeforeDetach(msg);\n            this.inputElement.removeEventListener('keyup', this);\n            this.inputElement.removeEventListener('click', this);\n            this.inputElement.removeEventListener('blur', this);\n        }\n        handleEvent(event) {\n            switch (event.type) {\n                case 'keyup':\n                    void this._evtKeyUp(event);\n                    break;\n                case 'click':\n                    this._evtClick(event);\n                    break;\n                case 'blur':\n                    this._selected = false;\n                    break;\n            }\n        }\n        /**\n         * Handle `keyup` events on the handler.\n         */\n        async _evtKeyUp(event) {\n            if (event.key == 'Enter') {\n                const widget = this._shell.currentWidget;\n                if (widget == null) {\n                    return;\n                }\n                const oldName = widget.title.label;\n                const inputElement = this.inputElement;\n                const newName = inputElement.value;\n                inputElement.blur();\n                if (newName !== oldName) {\n                    widget.title.label = newName;\n                }\n                else {\n                    inputElement.value = oldName;\n                }\n            }\n        }\n        /**\n         * Handle `click` events on the handler.\n         */\n        _evtClick(event) {\n            // only handle primary button clicks\n            if (event.button !== 0 || this._selected) {\n                return;\n            }\n            const inputElement = this.inputElement;\n            event.preventDefault();\n            event.stopPropagation();\n            this._selected = true;\n            const selectEnd = inputElement.value.indexOf('.');\n            if (selectEnd === -1) {\n                inputElement.select();\n            }\n            else {\n                inputElement.setSelectionRange(0, selectEnd);\n            }\n        }\n        /**\n         * The input element containing the parent widget's title.\n         */\n        get inputElement() {\n            return this.node.children[0];\n        }\n    }\n    Private.TitleHandler = TitleHandler;\n    class RestorableSplitPanel extends SplitPanel {\n        /**\n         * Construct a new RestorableSplitPanel.\n         */\n        constructor(options = {}) {\n            super(options);\n            this._updated = new Signal(this);\n        }\n        /**\n         * A signal emitted when the split panel is updated.\n         */\n        get updated() {\n            return this._updated;\n        }\n        /**\n         * Emit 'updated' signal on 'update' requests.\n         */\n        onUpdateRequest(msg) {\n            super.onUpdateRequest(msg);\n            this._updated.emit();\n        }\n    }\n    Private.RestorableSplitPanel = RestorableSplitPanel;\n})(Private || (Private = {}));\n//# sourceMappingURL=shell.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { PageConfig } from '@jupyterlab/coreutils';\nimport { Base64ModelFactory } from '@jupyterlab/docregistry';\nimport { ConnectionStatus, ServiceManager } from '@jupyterlab/services';\nimport { PromiseDelegate, Token } from '@lumino/coreutils';\nimport { JupyterFrontEnd } from './frontend';\nimport { createRendermimePlugins } from './mimerenderers';\nimport { LabShell } from './shell';\nimport { LabStatus } from './status';\n/**\n * JupyterLab is the main application class. It is instantiated once and shared.\n */\nexport class JupyterLab extends JupyterFrontEnd {\n    /**\n     * Construct a new JupyterLab object.\n     */\n    constructor(options = { shell: new LabShell() }) {\n        super({\n            ...options,\n            shell: options.shell || new LabShell(),\n            serviceManager: options.serviceManager ||\n                new ServiceManager({\n                    standby: () => {\n                        return !this._info.isConnected || 'when-hidden';\n                    }\n                })\n        });\n        /**\n         * The name of the JupyterLab application.\n         */\n        this.name = PageConfig.getOption('appName') || 'JupyterLab';\n        /**\n         * A namespace/prefix plugins may use to denote their provenance.\n         */\n        this.namespace = PageConfig.getOption('appNamespace') || this.name;\n        /**\n         * A list of all errors encountered when registering plugins.\n         *\n         * @deprecated This is unused and may be removed in a future version.\n         */\n        this.registerPluginErrors = [];\n        /**\n         * The application busy and dirty status signals and flags.\n         */\n        this.status = new LabStatus(this);\n        /**\n         * The version of the JupyterLab application.\n         */\n        this.version = PageConfig.getOption('appVersion') || 'unknown';\n        this._allPluginsActivated = new PromiseDelegate();\n        // Populate application info.\n        this._info = new JupyterLab.Info(options);\n        this.restored = this.shell.restored\n            .then(async () => {\n            const activated = [];\n            const deferred = this.activateDeferredPlugins().catch(error => {\n                console.error('Error when activating deferred plugins\\n:', error);\n            });\n            activated.push(deferred);\n            if (this._info.deferred) {\n                const customizedDeferred = Promise.all(this._info.deferred.matches.map(pluginID => this.activatePlugin(pluginID))).catch(error => {\n                    console.error('Error when activating customized list of deferred plugins:\\n', error);\n                });\n                activated.push(customizedDeferred);\n            }\n            Promise.all(activated)\n                .then(() => {\n                this._allPluginsActivated.resolve();\n            })\n                .catch(() => undefined);\n        })\n            .catch(() => undefined);\n        // Populate application paths override the defaults if necessary.\n        const defaultURLs = JupyterLab.defaultPaths.urls;\n        const defaultDirs = JupyterLab.defaultPaths.directories;\n        const optionURLs = (options.paths && options.paths.urls) || {};\n        const optionDirs = (options.paths && options.paths.directories) || {};\n        this._paths = {\n            urls: Object.keys(defaultURLs).reduce((acc, key) => {\n                if (key in optionURLs) {\n                    const value = optionURLs[key];\n                    acc[key] = value;\n                }\n                else {\n                    acc[key] = defaultURLs[key];\n                }\n                return acc;\n            }, {}),\n            directories: Object.keys(JupyterLab.defaultPaths.directories).reduce((acc, key) => {\n                if (key in optionDirs) {\n                    const value = optionDirs[key];\n                    acc[key] = value;\n                }\n                else {\n                    acc[key] = defaultDirs[key];\n                }\n                return acc;\n            }, {})\n        };\n        if (this._info.devMode) {\n            this.shell.addClass('jp-mod-devMode');\n        }\n        // Add initial model factory.\n        this.docRegistry.addModelFactory(new Base64ModelFactory());\n        if (options.mimeExtensions) {\n            for (const plugin of createRendermimePlugins(options.mimeExtensions)) {\n                this.registerPlugin(plugin);\n            }\n        }\n    }\n    /**\n     * The JupyterLab application information dictionary.\n     */\n    get info() {\n        return this._info;\n    }\n    /**\n     * The JupyterLab application paths dictionary.\n     */\n    get paths() {\n        return this._paths;\n    }\n    /**\n     * Promise that resolves when all the plugins are activated, including the deferred.\n     */\n    get allPluginsActivated() {\n        return this._allPluginsActivated.promise;\n    }\n    /**\n     * Register plugins from a plugin module.\n     *\n     * @param mod - The plugin module to register.\n     *\n     * @deprecated This is unused and may be removed in a future version.\n     */\n    registerPluginModule(mod) {\n        let data = mod.default;\n        // Handle commonjs exports.\n        if (!mod.hasOwnProperty('__esModule')) {\n            data = mod;\n        }\n        if (!Array.isArray(data)) {\n            data = [data];\n        }\n        data.forEach(item => {\n            try {\n                this.registerPlugin(item);\n            }\n            catch (error) {\n                this.registerPluginErrors.push(error);\n            }\n        });\n    }\n    /**\n     * Register the plugins from multiple plugin modules.\n     *\n     * @param mods - The plugin modules to register.\n     *\n     * @deprecated This is unused and may be removed in a future version.\n     */\n    registerPluginModules(mods) {\n        mods.forEach(mod => {\n            this.registerPluginModule(mod);\n        });\n    }\n    /**\n     * Override keydown handling to prevent command shortcuts from preventing user input.\n     *\n     * This introduces a slight delay to the command invocation, but no delay to user input.\n     */\n    evtKeydown(keyDownEvent) {\n        const permissionToExecute = new PromiseDelegate();\n        // Hold the execution of any keybinding until we know if this event would cause text insertion\n        this.commands.holdKeyBindingExecution(keyDownEvent, permissionToExecute.promise);\n        // Process the key immediately to invoke the prevent default handlers as needed\n        this.commands.processKeydownEvent(keyDownEvent);\n        // If we do not know the target, we cannot check if input would be inserted\n        // as there is no target to attach the `beforeinput` event listener; in that\n        // case we just permit execution immediately (this may happen for programmatic\n        // uses of keydown)\n        const target = keyDownEvent.target;\n        if (!target) {\n            return permissionToExecute.resolve(true);\n        }\n        let onBeforeInput = null;\n        let onBeforeKeyUp = null;\n        const disconnectListeners = () => {\n            if (onBeforeInput) {\n                target.removeEventListener('beforeinput', onBeforeInput);\n            }\n            if (onBeforeKeyUp) {\n                target.removeEventListener('keyup', onBeforeKeyUp);\n            }\n        };\n        // Permit the execution conditionally, depending on whether the event would lead to text insertion\n        const causesInputPromise = Promise.race([\n            new Promise(resolve => {\n                onBeforeInput = (inputEvent) => {\n                    switch (inputEvent.inputType) {\n                        case 'historyUndo':\n                        case 'historyRedo': {\n                            if (inputEvent.target instanceof Element &&\n                                inputEvent.target.closest('[data-jp-undoer]')) {\n                                // Allow to use custom undo/redo bindings on `jpUndoer`s\n                                inputEvent.preventDefault();\n                                disconnectListeners();\n                                return resolve(false);\n                            }\n                            break;\n                        }\n                        case 'insertLineBreak': {\n                            if (inputEvent.target instanceof Element &&\n                                inputEvent.target.closest('.jp-Cell')) {\n                                // Allow to override the default action of Shift + Enter on cells as this is used for cell execution\n                                inputEvent.preventDefault();\n                                disconnectListeners();\n                                return resolve(false);\n                            }\n                            break;\n                        }\n                    }\n                    disconnectListeners();\n                    return resolve(true);\n                };\n                target.addEventListener('beforeinput', onBeforeInput, { once: true });\n            }),\n            new Promise(resolve => {\n                onBeforeKeyUp = (keyUpEvent) => {\n                    if (keyUpEvent.code === keyDownEvent.code) {\n                        disconnectListeners();\n                        return resolve(false);\n                    }\n                };\n                target.addEventListener('keyup', onBeforeKeyUp, { once: true });\n            }),\n            new Promise(resolve => {\n                setTimeout(() => {\n                    disconnectListeners();\n                    return resolve(false);\n                }, Private.INPUT_GUARD_TIMEOUT);\n            })\n        ]);\n        causesInputPromise\n            .then(willCauseInput => {\n            permissionToExecute.resolve(!willCauseInput);\n        })\n            .catch(console.warn);\n    }\n}\n/**\n * The namespace for `JupyterLab` class statics.\n */\n(function (JupyterLab) {\n    /**\n     * The application info token.\n     */\n    JupyterLab.IInfo = new Token('@jupyterlab/application:IInfo', 'A service providing metadata about the current application, including disabled extensions and whether dev mode is enabled.');\n    /**\n     * The information about a JupyterLab application.\n     */\n    class Info {\n        constructor({ connectionStatus, ...options } = {}) {\n            var _a, _b, _c, _d, _e, _f, _g;\n            this._connectionStatus = connectionStatus !== null && connectionStatus !== void 0 ? connectionStatus : new ConnectionStatus();\n            this._availablePlugins =\n                (_a = options.availablePlugins) !== null && _a !== void 0 ? _a : JupyterLab.defaultInfo.availablePlugins;\n            this._devMode = (_b = options.devMode) !== null && _b !== void 0 ? _b : JupyterLab.defaultInfo.devMode;\n            this._deferred = JSON.parse(JSON.stringify((_c = options.deferred) !== null && _c !== void 0 ? _c : JupyterLab.defaultInfo.deferred));\n            this._disabled = JSON.parse(JSON.stringify((_d = options.disabled) !== null && _d !== void 0 ? _d : JupyterLab.defaultInfo.disabled));\n            this._filesCached =\n                (_e = options.filesCached) !== null && _e !== void 0 ? _e : JupyterLab.defaultInfo.filesCached;\n            this._mimeExtensions = JSON.parse(JSON.stringify((_f = options.mimeExtensions) !== null && _f !== void 0 ? _f : JupyterLab.defaultInfo.mimeExtensions));\n            this.isConnected =\n                (_g = options.isConnected) !== null && _g !== void 0 ? _g : JupyterLab.defaultInfo.isConnected;\n        }\n        /**\n         * The information about available plugins.\n         */\n        get availablePlugins() {\n            return this._availablePlugins;\n        }\n        /**\n         * Whether the application is in dev mode.\n         */\n        get devMode() {\n            return this._devMode;\n        }\n        /**\n         * The collection of deferred extension patterns and matched extensions.\n         */\n        get deferred() {\n            return this._deferred;\n        }\n        /**\n         * The collection of disabled extension patterns and matched extensions.\n         */\n        get disabled() {\n            return this._disabled;\n        }\n        /**\n         * Whether files are cached on the server.\n         */\n        get filesCached() {\n            return this._filesCached;\n        }\n        /**\n         * Every periodic network polling should be paused while this is set\n         * to `false`. Extensions should use this value to decide whether to proceed\n         * with the polling.\n         * The extensions may also set this value to `false` if there is no need to\n         * fetch anything from the server backend basing on some conditions\n         * (e.g. when an error message dialog is displayed).\n         * At the same time, the extensions are responsible for setting this value\n         * back to `true`.\n         */\n        get isConnected() {\n            return this._connectionStatus.isConnected;\n        }\n        set isConnected(v) {\n            this._connectionStatus.isConnected = v;\n        }\n        /**\n         * The mime renderer extensions.\n         */\n        get mimeExtensions() {\n            return this._mimeExtensions;\n        }\n    }\n    JupyterLab.Info = Info;\n    /**\n     * The default JupyterLab application info.\n     */\n    JupyterLab.defaultInfo = {\n        devMode: PageConfig.getOption('devMode').toLowerCase() === 'true',\n        deferred: { patterns: [], matches: [] },\n        disabled: { patterns: [], matches: [] },\n        mimeExtensions: [],\n        availablePlugins: [],\n        filesCached: PageConfig.getOption('cacheFiles').toLowerCase() === 'true',\n        isConnected: true\n    };\n    /**\n     * The default JupyterLab application paths.\n     */\n    JupyterLab.defaultPaths = {\n        urls: {\n            base: PageConfig.getOption('baseUrl'),\n            notFound: PageConfig.getOption('notFoundUrl'),\n            app: PageConfig.getOption('appUrl'),\n            doc: PageConfig.getOption('docUrl'),\n            static: PageConfig.getOption('staticUrl'),\n            settings: PageConfig.getOption('settingsUrl'),\n            themes: PageConfig.getOption('themesUrl'),\n            translations: PageConfig.getOption('translationsApiUrl'),\n            hubHost: PageConfig.getOption('hubHost') || undefined,\n            hubPrefix: PageConfig.getOption('hubPrefix') || undefined,\n            hubUser: PageConfig.getOption('hubUser') || undefined,\n            hubServerName: PageConfig.getOption('hubServerName') || undefined\n        },\n        directories: {\n            appSettings: PageConfig.getOption('appSettingsDir'),\n            schemas: PageConfig.getOption('schemasDir'),\n            static: PageConfig.getOption('staticDir'),\n            templates: PageConfig.getOption('templatesDir'),\n            themes: PageConfig.getOption('themesDir'),\n            userSettings: PageConfig.getOption('userSettingsDir'),\n            serverRoot: PageConfig.getOption('serverRoot'),\n            workspaces: PageConfig.getOption('workspacesDir')\n        }\n    };\n})(JupyterLab || (JupyterLab = {}));\n/**\n * A namespace for module-private functionality.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The delay for invoking a command introduced by user input guard.\n     * Decreasing this value may lead to commands incorrectly triggering\n     * on user input. Increasing this value will lead to longer delay for\n     * command invocation. Note that user input is never delayed.\n     *\n     * The value represents the number in milliseconds.\n     */\n    Private.INPUT_GUARD_TIMEOUT = 10;\n})(Private || (Private = {}));\n//# sourceMappingURL=lab.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { URLExt } from '@jupyterlab/coreutils';\nimport { PromiseDelegate, Token } from '@lumino/coreutils';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Signal } from '@lumino/signaling';\n/**\n * A static class that routes URLs within the application.\n */\nexport class Router {\n    /**\n     * Create a URL router.\n     */\n    constructor(options) {\n        /**\n         * If a matching rule's command resolves with the `stop` token during routing,\n         * no further matches will execute.\n         */\n        this.stop = new Token('@jupyterlab/application:Router#stop');\n        this._routed = new Signal(this);\n        this._rules = new Map();\n        this.base = options.base;\n        this.commands = options.commands;\n    }\n    /**\n     * Returns the parsed current URL of the application.\n     */\n    get current() {\n        var _a, _b;\n        const { base } = this;\n        const parsed = URLExt.parse(window.location.href);\n        const { search, hash } = parsed;\n        const path = (_b = (_a = parsed.pathname) === null || _a === void 0 ? void 0 : _a.replace(base, '/')) !== null && _b !== void 0 ? _b : '';\n        const request = path + search + hash;\n        return { hash, path, request, search };\n    }\n    /**\n     * A signal emitted when the router routes a route.\n     */\n    get routed() {\n        return this._routed;\n    }\n    /**\n     * Navigate to a new path within the application.\n     *\n     * @param path - The new path or empty string if redirecting to root.\n     *\n     * @param options - The navigation options.\n     */\n    navigate(path, options = {}) {\n        const { base } = this;\n        const { history } = window;\n        const { hard } = options;\n        const old = document.location.href;\n        const url = path && path.indexOf(base) === 0 ? path : URLExt.join(base, path);\n        if (url === old) {\n            return hard ? this.reload() : undefined;\n        }\n        history.pushState({}, '', url);\n        if (hard) {\n            return this.reload();\n        }\n        if (!options.skipRouting) {\n            // Because a `route()` call may still be in the stack after having received\n            // a `stop` token, wait for the next stack frame before calling `route()`.\n            requestAnimationFrame(() => {\n                void this.route();\n            });\n        }\n    }\n    /**\n     * Register to route a path pattern to a command.\n     *\n     * @param options - The route registration options.\n     *\n     * @returns A disposable that removes the registered rule from the router.\n     */\n    register(options) {\n        var _a;\n        const { command, pattern } = options;\n        const rank = (_a = options.rank) !== null && _a !== void 0 ? _a : 100;\n        const rules = this._rules;\n        rules.set(pattern, { command, rank });\n        return new DisposableDelegate(() => {\n            rules.delete(pattern);\n        });\n    }\n    /**\n     * Cause a hard reload of the document.\n     */\n    reload() {\n        window.location.reload();\n    }\n    /**\n     * Route a specific path to an action.\n     *\n     * #### Notes\n     * If a pattern is matched, its command will be invoked with arguments that\n     * match the `IRouter.ILocation` interface.\n     */\n    route() {\n        const { commands, current, stop } = this;\n        const { request } = current;\n        const routed = this._routed;\n        const rules = this._rules;\n        const matches = [];\n        // Collect all rules that match the URL.\n        rules.forEach((rule, pattern) => {\n            if (request === null || request === void 0 ? void 0 : request.match(pattern)) {\n                matches.push(rule);\n            }\n        });\n        // Order the matching rules by rank and enqueue them.\n        const queue = matches.sort((a, b) => b.rank - a.rank);\n        const done = new PromiseDelegate();\n        // Process each enqueued command sequentially and short-circuit if a promise\n        // resolves with the `stop` token.\n        const next = async () => {\n            if (!queue.length) {\n                routed.emit(current);\n                done.resolve(undefined);\n                return;\n            }\n            const { command } = queue.pop();\n            try {\n                const request = this.current.request;\n                const result = await commands.execute(command, current);\n                if (result === stop) {\n                    queue.length = 0;\n                    console.debug(`Routing ${request} was short-circuited by ${command}`);\n                }\n            }\n            catch (reason) {\n                console.warn(`Routing ${request} to ${command} failed`, reason);\n            }\n            void next();\n        };\n        void next();\n        return done.promise;\n    }\n}\n//# sourceMappingURL=router.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * A token for which a plugin can provide to respond to connection failures\n * to the application server.\n */\nexport const IConnectionLost = new Token('@jupyterlab/application:IConnectionLost', `A service for invoking the dialog shown\n  when JupyterLab has lost its connection to the server. Use this if, for some reason,\n  you want to bring up the \"connection lost\" dialog under new circumstances.`);\n/**\n * The application status token.\n */\nexport const ILabStatus = new Token('@jupyterlab/application:ILabStatus', `A service for interacting with the application busy/dirty\n  status. Use this if you want to set the application \"busy\" favicon, or to set\n  the application \"dirty\" status, which asks the user for confirmation before leaving the application page.`);\n/**\n * The URL Router token.\n */\nexport const IRouter = new Token('@jupyterlab/application:IRouter', 'The URL router used by the application. Use this to add custom URL-routing for your extension (e.g., to invoke a command if the user navigates to a sub-path).');\n//# sourceMappingURL=tokens.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { Token } from '@lumino/coreutils';\n/**\n * The tree path updater token.\n */\nexport const ITreePathUpdater = new Token('@jupyterlab/application:ITreePathUpdater', 'A service to update the tree path.');\n//# sourceMappingURL=treepathupdater.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { SemanticCommand } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\n/**\n * Add a semantic commands to the application and take care\n * of setting up the command changed signal.\n *\n * @param options Semantic command options\n */\nexport function addSemanticCommand(options) {\n    const { id, commands, shell, semanticCommands, default: defaultValues, overrides, trans } = options;\n    commands.addCommand(id, {\n        ...createSemanticCommand({ commands, shell }, semanticCommands, defaultValues !== null && defaultValues !== void 0 ? defaultValues : {}, trans !== null && trans !== void 0 ? trans : nullTranslator.load('jupyterlab')),\n        ...overrides\n    });\n    const commandList = Array.isArray(semanticCommands)\n        ? semanticCommands\n        : [semanticCommands];\n    const onCommandChanged = (commands, args) => {\n        if (args.id) {\n            if (args.id === id && args.type === 'removed') {\n                commands.commandChanged.disconnect(onCommandChanged);\n            }\n            else {\n                const commandIds = commandList.reduce((agg, cmd) => agg.concat(cmd.ids), []);\n                if (commandIds.includes(args.id)) {\n                    switch (args.type) {\n                        case 'changed':\n                        case 'many-changed':\n                            commands.notifyCommandChanged(id);\n                            break;\n                        case 'removed':\n                            for (const cmd of commandList) {\n                                cmd.remove(args.id);\n                            }\n                            break;\n                    }\n                }\n            }\n        }\n    };\n    commands.commandChanged.connect(onCommandChanged);\n}\n/**\n * Create the command options from the given semantic commands list\n * and the given default values.\n *\n * @param app Jupyter Application\n * @param semanticCommands Single semantic command  or a list of commands\n * @param defaultValues Default values\n * @param trans Translation bundle\n * @returns Command options\n *\n * @deprecated Please use {@link addSemanticCommand}. This function will\n * be removed of the public API in JupyterLab 5.\n */\nexport function createSemanticCommand(app, semanticCommands, defaultValues, trans) {\n    const { commands, shell } = app;\n    const commandList = Array.isArray(semanticCommands)\n        ? semanticCommands\n        : [semanticCommands];\n    return {\n        label: concatenateTexts('label'),\n        caption: concatenateTexts('caption'),\n        isEnabled: () => {\n            var _a;\n            const isEnabled = reduceAttribute('isEnabled');\n            return ((isEnabled.length > 0 &&\n                !isEnabled.some(enabled => enabled === false)) ||\n                ((_a = defaultValues.isEnabled) !== null && _a !== void 0 ? _a : false));\n        },\n        isToggled: () => {\n            var _a;\n            const isToggled = reduceAttribute('isToggled');\n            return (isToggled.some(enabled => enabled === true) ||\n                ((_a = defaultValues.isToggled) !== null && _a !== void 0 ? _a : false));\n        },\n        isVisible: () => {\n            var _a;\n            const isVisible = reduceAttribute('isVisible');\n            return ((isVisible.length > 0 &&\n                !isVisible.some(visible => visible === false)) ||\n                ((_a = defaultValues.isVisible) !== null && _a !== void 0 ? _a : true));\n        },\n        execute: async () => {\n            const widget = shell.currentWidget;\n            const commandIds = commandList.map(cmd => widget !== null ? cmd.getActiveCommandId(widget) : null);\n            const toExecute = commandIds.filter(commandId => commandId !== null && commands.isEnabled(commandId));\n            let result = null;\n            if (toExecute.length > 0) {\n                for (const commandId of toExecute) {\n                    const args = { [SemanticCommand.WIDGET]: widget.id };\n                    result = await commands.execute(commandId, args);\n                    if (typeof result === 'boolean' && result === false) {\n                        // If a command returns a boolean, assume it is the execution success status\n                        // So break if it is false.\n                        break;\n                    }\n                }\n            }\n            else if (defaultValues.execute) {\n                result = await commands.execute(defaultValues.execute);\n            }\n            return result;\n        }\n    };\n    function reduceAttribute(attribute) {\n        const widget = shell.currentWidget;\n        const commandIds = commandList.map(cmd => widget !== null ? cmd.getActiveCommandId(widget) : null);\n        const attributes = commandIds\n            .filter(commandId => commandId !== null)\n            .map(commandId => commands[attribute](commandId));\n        return attributes;\n    }\n    function concatenateTexts(attribute) {\n        return () => {\n            var _a;\n            const texts = reduceAttribute(attribute).map((text, textIndex) => attribute == 'caption' && textIndex > 0\n                ? text.toLocaleLowerCase()\n                : text);\n            switch (texts.length) {\n                case 0:\n                    return (_a = defaultValues[attribute]) !== null && _a !== void 0 ? _a : '';\n                case 1:\n                    return texts[0];\n                default: {\n                    const hasEllipsis = texts.some(l => /…$/.test(l));\n                    const main = texts\n                        .slice(undefined, -1)\n                        .map(l => l.replace(/…$/, ''))\n                        .join(', ');\n                    const end = texts.slice(-1)[0].replace(/…$/, '') + (hasEllipsis ? '…' : '');\n                    return trans.__('%1 and %2', main, end);\n                }\n            }\n        };\n    }\n}\n//# sourceMappingURL=utils.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module application\n */\nexport { ConnectionLost } from './connectionlost';\nexport { JupyterFrontEnd, JupyterFrontEndContextMenu } from './frontend';\nexport { JupyterLab } from './lab';\nexport { ILayoutRestorer, LayoutRestorer } from './layoutrestorer';\nexport { createRendermimePlugin, createRendermimePlugins, IMimeDocumentTracker } from './mimerenderers';\nexport { Router } from './router';\nexport { ILabShell, LabShell } from './shell';\nexport * from './status';\nexport * from './tokens';\nexport { ITreePathUpdater } from './treepathupdater';\nexport * from './utils';\n//# sourceMappingURL=index.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { JSONExt, PromiseDelegate, Token } from '@lumino/coreutils';\nimport { AttachedProperty } from '@lumino/properties';\n/**\n * The layout restorer token.\n */\nexport const ILayoutRestorer = new Token('@jupyterlab/application:ILayoutRestorer', 'A service providing application layout restoration functionality. Use this to have your activities restored across page loads.');\n/**\n * The data connector key for restorer data.\n */\nconst KEY = 'layout-restorer:data';\n/**\n * The default implementation of a layout restorer.\n *\n * #### Notes\n * The lifecycle for state restoration is subtle. The sequence of events is:\n *\n * 1. The layout restorer plugin is instantiated and makes a `fetch` call to\n *    the data connector that stores the layout restoration data. The `fetch`\n *    call returns a promise that resolves in step 6, below.\n *\n * 2. Other plugins that care about state restoration require the layout\n *    restorer as a dependency.\n *\n * 3. As each load-time plugin initializes (which happens before the front-end\n *    application has `started`), it instructs the layout restorer whether\n *    the restorer ought to `restore` its widgets by passing in its widget\n *    tracker.\n *    Alternatively, a plugin that does not require its own widget tracker\n *    (because perhaps it only creates a single widget, like a command palette),\n *    can simply `add` its widget along with a persistent unique name to the\n *    layout restorer so that its layout state can be restored when the lab\n *    application restores.\n *\n * 4. After all the load-time plugins have finished initializing, the front-end\n *    application `started` promise will resolve. This is the `first`\n *    promise that the layout restorer waits for. By this point, all of the\n *    plugins that care about restoration will have instructed the layout\n *    restorer to `restore` their widget trackers.\n *\n * 5. The layout restorer will then instruct each plugin's widget tracker\n *    to restore its state and reinstantiate whichever widgets it wants. The\n *    tracker returns a promise to the layout restorer that resolves when it\n *    has completed restoring the tracked widgets it cares about.\n *\n * 6. As each widget tracker finishes restoring the widget instances it cares\n *    about, it resolves the promise that was returned to the layout restorer\n *    (in step 5). After all of the promises that the restorer is awaiting have\n *    settled, the restorer then resolves the outstanding `fetch` promise\n *    (from step 1) and hands off a layout state object to the application\n *    shell's `restoreLayout` method for restoration.\n *\n * 7. Once the application shell has finished restoring the layout, the\n *    JupyterLab application's `restored` promise is resolved.\n *\n * Of particular note are steps 5 and 6: since data restoration of plugins\n * is accomplished by executing commands, the command that is used to restore\n * the data of each plugin must return a promise that only resolves when the\n * widget has been created and added to the plugin's widget tracker.\n */\nexport class LayoutRestorer {\n    /**\n     * Create a layout restorer.\n     */\n    constructor(options) {\n        this._deferred = new Array();\n        this._deferredMainArea = null;\n        this._firstDone = false;\n        this._promisesDone = false;\n        this._promises = [];\n        this._restored = new PromiseDelegate();\n        this._trackers = new Set();\n        this._widgets = new Map();\n        this._mode = 'multiple-document';\n        this._connector = options.connector;\n        this._first = options.first;\n        this._registry = options.registry;\n        if (options.mode) {\n            this._mode = options.mode;\n        }\n        void this._first\n            .then(() => {\n            this._firstDone = true;\n        })\n            .then(() => Promise.all(this._promises))\n            .then(() => {\n            this._promisesDone = true;\n            // Release the tracker set.\n            this._trackers.clear();\n        })\n            .then(() => {\n            this._restored.resolve(void 0);\n        });\n    }\n    /**\n     * Whether full layout restoration is deferred and is currently incomplete.\n     *\n     * #### Notes\n     * This flag is useful for tracking when the application has started in\n     * 'single-document' mode and the main area has not yet been restored.\n     */\n    get isDeferred() {\n        return this._deferred.length > 0;\n    }\n    /**\n     * A promise resolved when the layout restorer is ready to receive signals.\n     */\n    get restored() {\n        return this._restored.promise;\n    }\n    /**\n     * Add a widget to be tracked by the layout restorer.\n     */\n    add(widget, name) {\n        Private.nameProperty.set(widget, name);\n        this._widgets.set(name, widget);\n        widget.disposed.connect(this._onWidgetDisposed, this);\n    }\n    /**\n     * Fetch the layout state for the application.\n     *\n     * #### Notes\n     * Fetching the layout relies on all widget restoration to be complete, so\n     * calls to `fetch` are guaranteed to return after restoration is complete.\n     */\n    async fetch() {\n        var _a;\n        const blank = {\n            fresh: true,\n            mainArea: null,\n            downArea: null,\n            leftArea: null,\n            rightArea: null,\n            topArea: null,\n            relativeSizes: null\n        };\n        const layout = this._connector.fetch(KEY);\n        try {\n            const [data] = await Promise.all([layout, this.restored]);\n            if (!data) {\n                return blank;\n            }\n            const { main, down, left, right, relativeSizes, top } = data;\n            // If any data exists, then this is not a fresh session.\n            const fresh = false;\n            // Rehydrate main area.\n            let mainArea = null;\n            if (this._mode === 'multiple-document') {\n                mainArea = this._rehydrateMainArea(main);\n            }\n            else {\n                this._deferredMainArea = main;\n            }\n            // Rehydrate down area.\n            const downArea = this._rehydrateDownArea(down);\n            // Rehydrate left area.\n            const leftArea = this._rehydrateSideArea(left);\n            // Rehydrate right area.\n            const rightArea = this._rehydrateSideArea(right);\n            return {\n                fresh,\n                mainArea,\n                downArea,\n                leftArea,\n                rightArea,\n                relativeSizes: relativeSizes || null,\n                topArea: (_a = top) !== null && _a !== void 0 ? _a : null\n            };\n        }\n        catch (error) {\n            return blank;\n        }\n    }\n    /**\n     * Restore the widgets of a particular widget tracker.\n     *\n     * @param tracker - The widget tracker whose widgets will be restored.\n     *\n     * @param options - The restoration options.\n     */\n    async restore(tracker, options) {\n        if (this._firstDone) {\n            throw new Error('restore() must be called before `first` has resolved.');\n        }\n        const { namespace } = tracker;\n        if (this._trackers.has(namespace)) {\n            throw new Error(`The tracker \"${namespace}\" is already restored.`);\n        }\n        const { args, command, name, when } = options;\n        // Add the tracker to the private trackers collection.\n        this._trackers.add(namespace);\n        // Whenever a new widget is added to the tracker, record its name.\n        tracker.widgetAdded.connect((_, widget) => {\n            const widgetName = name(widget);\n            if (widgetName) {\n                this.add(widget, `${namespace}:${widgetName}`);\n            }\n        }, this);\n        // Whenever a widget is updated, get its new name.\n        tracker.widgetUpdated.connect((_, widget) => {\n            const widgetName = name(widget);\n            if (widgetName) {\n                const name = `${namespace}:${widgetName}`;\n                Private.nameProperty.set(widget, name);\n                this._widgets.set(name, widget);\n            }\n        });\n        const first = this._first;\n        if (this._mode == 'multiple-document') {\n            const promise = tracker\n                .restore({\n                args: args || (() => JSONExt.emptyObject),\n                command,\n                connector: this._connector,\n                name,\n                registry: this._registry,\n                when: when ? [first].concat(when) : first\n            })\n                .catch(error => {\n                console.error(error);\n            });\n            this._promises.push(promise);\n            return promise;\n        }\n        tracker.defer({\n            args: args || (() => JSONExt.emptyObject),\n            command,\n            connector: this._connector,\n            name,\n            registry: this._registry,\n            when: when ? [first].concat(when) : first\n        });\n        this._deferred.push(tracker);\n    }\n    /**\n     * Restore the application layout if its restoration has been deferred.\n     *\n     * @returns - the rehydrated main area.\n     */\n    async restoreDeferred() {\n        if (!this.isDeferred) {\n            return null;\n        }\n        // Empty the deferred list and wait for all trackers to restore.\n        const wait = Promise.resolve();\n        const promises = this._deferred.map(t => wait.then(() => t.restore()));\n        this._deferred.length = 0;\n        await Promise.all(promises);\n        // Rehydrate the main area layout.\n        return this._rehydrateMainArea(this._deferredMainArea);\n    }\n    /**\n     * Save the layout state for the application.\n     */\n    save(layout) {\n        var _a;\n        // If there are promises that are unresolved, bail.\n        if (!this._promisesDone) {\n            const warning = 'save() was called prematurely.';\n            console.warn(warning);\n            return Promise.reject(warning);\n        }\n        const dehydrated = {};\n        // Save the cached main area layout if restoration is deferred.\n        dehydrated.main = this.isDeferred\n            ? this._deferredMainArea\n            : this._dehydrateMainArea(layout.mainArea);\n        // Update only the current widget in the db when restoration is deferred.\n        // Useful for providing the tab title in doc mode.\n        if (this.isDeferred) {\n            const currentWidget = (_a = layout.mainArea) === null || _a === void 0 ? void 0 : _a.currentWidget;\n            if (currentWidget) {\n                const widgetName = Private.nameProperty.get(currentWidget);\n                dehydrated.main = {\n                    ...dehydrated.main,\n                    current: widgetName || undefined\n                };\n            }\n        }\n        dehydrated.down = this._dehydrateDownArea(layout.downArea);\n        dehydrated.left = this._dehydrateSideArea(layout.leftArea);\n        dehydrated.right = this._dehydrateSideArea(layout.rightArea);\n        dehydrated.relativeSizes = layout.relativeSizes;\n        dehydrated.top = { ...layout.topArea };\n        return this._connector.save(KEY, dehydrated);\n    }\n    /**\n     * Dehydrate a main area description into a serializable object.\n     */\n    _dehydrateMainArea(area) {\n        if (!area) {\n            return null;\n        }\n        return Private.serializeMain(area);\n    }\n    /**\n     * Rehydrate a serialized main area description object.\n     *\n     * #### Notes\n     * This function consumes data that can become corrupted, so it uses type\n     * coercion to guarantee the dehydrated object is safely processed.\n     */\n    _rehydrateMainArea(area) {\n        if (!area) {\n            return null;\n        }\n        return Private.deserializeMain(area, this._widgets);\n    }\n    /**\n     * Dehydrate a down area description into a serializable object.\n     */\n    _dehydrateDownArea(area) {\n        if (!area) {\n            return null;\n        }\n        const dehydrated = {\n            size: area.size\n        };\n        if (area.currentWidget) {\n            const current = Private.nameProperty.get(area.currentWidget);\n            if (current) {\n                dehydrated.current = current;\n            }\n        }\n        if (area.widgets) {\n            dehydrated.widgets = area.widgets\n                .map(widget => Private.nameProperty.get(widget))\n                .filter(name => !!name);\n        }\n        return dehydrated;\n    }\n    /**\n     * Rehydrate a serialized side area description object.\n     *\n     * #### Notes\n     * This function consumes data that can become corrupted, so it uses type\n     * coercion to guarantee the dehydrated object is safely processed.\n     */\n    _rehydrateDownArea(area) {\n        var _a;\n        if (!area) {\n            return { currentWidget: null, size: 0.0, widgets: null };\n        }\n        const internal = this._widgets;\n        const currentWidget = area.current && internal.has(`${area.current}`)\n            ? internal.get(`${area.current}`)\n            : null;\n        const widgets = !Array.isArray(area.widgets)\n            ? null\n            : area.widgets\n                .map(name => internal.has(`${name}`) ? internal.get(`${name}`) : null)\n                .filter(widget => !!widget);\n        return {\n            currentWidget: currentWidget,\n            size: (_a = area.size) !== null && _a !== void 0 ? _a : 0.0,\n            widgets: widgets\n        };\n    }\n    /**\n     * Dehydrate a side area description into a serializable object.\n     */\n    _dehydrateSideArea(area) {\n        if (!area) {\n            return null;\n        }\n        const dehydrated = {\n            collapsed: area.collapsed,\n            visible: area.visible\n        };\n        if (area.currentWidget) {\n            const current = Private.nameProperty.get(area.currentWidget);\n            if (current) {\n                dehydrated.current = current;\n            }\n        }\n        if (area.widgets) {\n            dehydrated.widgets = area.widgets\n                .map(widget => Private.nameProperty.get(widget))\n                .filter(name => !!name);\n        }\n        if (area.widgetStates) {\n            dehydrated.widgetStates = area.widgetStates;\n        }\n        return dehydrated;\n    }\n    /**\n     * Rehydrate a serialized side area description object.\n     *\n     * #### Notes\n     * This function consumes data that can become corrupted, so it uses type\n     * coercion to guarantee the dehydrated object is safely processed.\n     */\n    _rehydrateSideArea(area) {\n        var _a, _b;\n        if (!area) {\n            return {\n                collapsed: true,\n                currentWidget: null,\n                visible: true,\n                widgets: null,\n                widgetStates: {\n                    ['null']: {\n                        sizes: null,\n                        expansionStates: null\n                    }\n                }\n            };\n        }\n        const internal = this._widgets;\n        const collapsed = (_a = area.collapsed) !== null && _a !== void 0 ? _a : false;\n        const currentWidget = area.current && internal.has(`${area.current}`)\n            ? internal.get(`${area.current}`)\n            : null;\n        const widgets = !Array.isArray(area.widgets)\n            ? null\n            : area.widgets\n                .map(name => internal.has(`${name}`) ? internal.get(`${name}`) : null)\n                .filter(widget => !!widget);\n        const widgetStates = area.widgetStates;\n        return {\n            collapsed,\n            currentWidget: currentWidget,\n            widgets: widgets,\n            visible: (_b = area.visible) !== null && _b !== void 0 ? _b : true,\n            widgetStates: widgetStates\n        };\n    }\n    /**\n     * Handle a widget disposal.\n     */\n    _onWidgetDisposed(widget) {\n        const name = Private.nameProperty.get(widget);\n        this._widgets.delete(name);\n    }\n}\n/*\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * An attached property for a widget's ID in the serialized restore data.\n     */\n    Private.nameProperty = new AttachedProperty({\n        name: 'name',\n        create: owner => ''\n    });\n    /**\n     * Serialize individual areas within the main area.\n     */\n    function serializeArea(area) {\n        if (!area || !area.type) {\n            return null;\n        }\n        if (area.type === 'tab-area') {\n            return {\n                type: 'tab-area',\n                currentIndex: area.currentIndex,\n                widgets: area.widgets\n                    .map(widget => Private.nameProperty.get(widget))\n                    .filter(name => !!name)\n            };\n        }\n        return {\n            type: 'split-area',\n            orientation: area.orientation,\n            sizes: area.sizes,\n            children: area.children\n                .map(serializeArea)\n                .filter(area => !!area)\n        };\n    }\n    /**\n     * Return a dehydrated, serializable version of the main dock panel.\n     */\n    function serializeMain(area) {\n        const dehydrated = {\n            dock: (area && area.dock && serializeArea(area.dock.main)) || null\n        };\n        if (area) {\n            if (area.currentWidget) {\n                const current = Private.nameProperty.get(area.currentWidget);\n                if (current) {\n                    dehydrated.current = current;\n                }\n            }\n        }\n        return dehydrated;\n    }\n    Private.serializeMain = serializeMain;\n    /**\n     * Deserialize individual areas within the main area.\n     *\n     * #### Notes\n     * Because this data comes from a potentially unreliable foreign source, it is\n     * typed as a `JSONObject`; but the actual expected type is:\n     * `ITabArea | ISplitArea`.\n     *\n     * For fault tolerance, types are manually checked in deserialization.\n     */\n    function deserializeArea(area, names) {\n        if (!area) {\n            return null;\n        }\n        // Because this data is saved to a foreign data source, its type safety is\n        // not guaranteed when it is retrieved, so exhaustive checks are necessary.\n        const type = area.type || 'unknown';\n        if (type === 'unknown' || (type !== 'tab-area' && type !== 'split-area')) {\n            console.warn(`Attempted to deserialize unknown type: ${type}`);\n            return null;\n        }\n        if (type === 'tab-area') {\n            const { currentIndex, widgets } = area;\n            const hydrated = {\n                type: 'tab-area',\n                currentIndex: currentIndex || 0,\n                widgets: (widgets &&\n                    widgets\n                        .map(widget => names.get(widget))\n                        .filter(widget => !!widget)) ||\n                    []\n            };\n            // Make sure the current index is within bounds.\n            if (hydrated.currentIndex > hydrated.widgets.length - 1) {\n                hydrated.currentIndex = 0;\n            }\n            return hydrated;\n        }\n        const { orientation, sizes, children } = area;\n        const hydrated = {\n            type: 'split-area',\n            orientation: orientation,\n            sizes: sizes || [],\n            children: (children &&\n                children\n                    .map(child => deserializeArea(child, names))\n                    .filter(widget => !!widget)) ||\n                []\n        };\n        return hydrated;\n    }\n    /**\n     * Return the hydrated version of the main dock panel, ready to restore.\n     *\n     * #### Notes\n     * Because this data comes from a potentially unreliable foreign source, it is\n     * typed as a `JSONObject`; but the actual expected type is: `IMainArea`.\n     *\n     * For fault tolerance, types are manually checked in deserialization.\n     */\n    function deserializeMain(area, names) {\n        if (!area) {\n            return null;\n        }\n        const name = area.current || null;\n        const dock = area.dock || null;\n        return {\n            currentWidget: (name && names.has(name) && names.get(name)) || null,\n            dock: dock ? { main: deserializeArea(dock, names) } : null\n        };\n    }\n    Private.deserializeMain = deserializeMain;\n})(Private || (Private = {}));\n//# sourceMappingURL=layoutrestorer.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { WidgetTracker } from '@jupyterlab/apputils';\nimport { MimeDocumentFactory } from '@jupyterlab/docregistry';\nimport { IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { ITranslator } from '@jupyterlab/translation';\nimport { LabIcon } from '@jupyterlab/ui-components';\nimport { Token } from '@lumino/coreutils';\nimport { AttachedProperty } from '@lumino/properties';\nimport { ILayoutRestorer } from './layoutrestorer';\n/**\n * The mime document tracker token.\n */\nexport const IMimeDocumentTracker = new Token('@jupyterlab/application:IMimeDocumentTracker', 'A widget tracker for documents rendered using a mime renderer extension. Use this if you want to list and interact with documents rendered by such extensions.');\n/**\n * Create rendermime plugins for rendermime extension modules.\n */\nexport function createRendermimePlugins(extensions) {\n    const plugins = [];\n    const namespace = 'application-mimedocuments';\n    const tracker = new WidgetTracker({ namespace });\n    extensions.forEach(mod => {\n        let data = mod.default;\n        // Handle CommonJS exports.\n        if (!mod.hasOwnProperty('__esModule')) {\n            data = mod;\n        }\n        if (!Array.isArray(data)) {\n            data = [data];\n        }\n        data.forEach(item => {\n            plugins.push(createRendermimePlugin(tracker, item));\n        });\n    });\n    // Also add a meta-plugin handling state restoration\n    // and exposing the mime document widget tracker.\n    plugins.push({\n        id: '@jupyterlab/application-extension:mimedocument',\n        description: 'Provides a mime document widget tracker.',\n        optional: [ILayoutRestorer],\n        provides: IMimeDocumentTracker,\n        autoStart: true,\n        activate: (app, restorer) => {\n            if (restorer) {\n                void restorer.restore(tracker, {\n                    command: 'docmanager:open',\n                    args: widget => ({\n                        path: widget.context.path,\n                        factory: Private.factoryNameProperty.get(widget)\n                    }),\n                    name: widget => `${widget.context.path}:${Private.factoryNameProperty.get(widget)}`\n                });\n            }\n            return tracker;\n        }\n    });\n    return plugins;\n}\n/**\n * Create rendermime plugins for rendermime extension modules.\n */\nexport function createRendermimePlugin(tracker, item) {\n    return {\n        id: item.id,\n        description: item.description,\n        requires: [IRenderMimeRegistry, ITranslator],\n        autoStart: true,\n        activate: (app, rendermime, translator) => {\n            // Add the mime renderer.\n            if (item.rank !== undefined) {\n                rendermime.addFactory(item.rendererFactory, item.rank);\n            }\n            else {\n                rendermime.addFactory(item.rendererFactory);\n            }\n            // Handle the widget factory.\n            if (!item.documentWidgetFactoryOptions) {\n                return;\n            }\n            const registry = app.docRegistry;\n            let options = [];\n            if (Array.isArray(item.documentWidgetFactoryOptions)) {\n                options = item.documentWidgetFactoryOptions;\n            }\n            else {\n                options = [\n                    item.documentWidgetFactoryOptions\n                ];\n            }\n            if (item.fileTypes) {\n                item.fileTypes.forEach(ft => {\n                    if (ft.icon) {\n                        // upconvert the contents of the icon field to a proper LabIcon\n                        ft = { ...ft, icon: LabIcon.resolve({ icon: ft.icon }) };\n                    }\n                    app.docRegistry.addFileType(ft);\n                });\n            }\n            options.forEach(option => {\n                const toolbarFactory = option.toolbarFactory\n                    ? (w) => option.toolbarFactory(w.content.renderer)\n                    : undefined;\n                const factory = new MimeDocumentFactory({\n                    renderTimeout: item.renderTimeout,\n                    dataType: item.dataType,\n                    rendermime,\n                    modelName: option.modelName,\n                    name: option.name,\n                    primaryFileType: registry.getFileType(option.primaryFileType),\n                    fileTypes: option.fileTypes,\n                    defaultFor: option.defaultFor,\n                    defaultRendered: option.defaultRendered,\n                    toolbarFactory,\n                    translator,\n                    factory: item.rendererFactory\n                });\n                registry.addWidgetFactory(factory);\n                factory.widgetCreated.connect((sender, widget) => {\n                    Private.factoryNameProperty.set(widget, factory.name);\n                    // Notify the widget tracker if restore data needs to update.\n                    widget.context.pathChanged.connect(() => {\n                        void tracker.save(widget);\n                    });\n                    void tracker.add(widget);\n                });\n            });\n        }\n    };\n}\n/**\n * Private namespace for the module.\n */\nvar Private;\n(function (Private) {\n    /**\n     * An attached property for keeping the factory name\n     * that was used to create a mimedocument.\n     */\n    Private.factoryNameProperty = new AttachedProperty({\n        name: 'factoryName',\n        create: () => undefined\n    });\n})(Private || (Private = {}));\n//# sourceMappingURL=mimerenderers.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Signal } from '@lumino/signaling';\n/**\n * The application status signals and flags class.\n */\nexport class LabStatus {\n    /**\n     * Construct a new  status object.\n     */\n    constructor(app) {\n        this._busyCount = 0;\n        this._dirtyCount = 0;\n        this._busySignal = new Signal(app);\n        this._dirtySignal = new Signal(app);\n    }\n    /**\n     * Returns a signal for when application changes its busy status.\n     */\n    get busySignal() {\n        return this._busySignal;\n    }\n    /**\n     * Returns a signal for when application changes its dirty status.\n     */\n    get dirtySignal() {\n        return this._dirtySignal;\n    }\n    /**\n     * Whether the application is busy.\n     */\n    get isBusy() {\n        return this._busyCount > 0;\n    }\n    /**\n     * Whether the application is dirty.\n     */\n    get isDirty() {\n        return this._dirtyCount > 0;\n    }\n    /**\n     * Set the application state to dirty.\n     *\n     * @returns A disposable used to clear the dirty state for the caller.\n     */\n    setDirty() {\n        const oldDirty = this.isDirty;\n        this._dirtyCount++;\n        if (this.isDirty !== oldDirty) {\n            this._dirtySignal.emit(this.isDirty);\n        }\n        return new DisposableDelegate(() => {\n            const oldDirty = this.isDirty;\n            this._dirtyCount = Math.max(0, this._dirtyCount - 1);\n            if (this.isDirty !== oldDirty) {\n                this._dirtySignal.emit(this.isDirty);\n            }\n        });\n    }\n    /**\n     * Set the application state to busy.\n     *\n     * @returns A disposable used to clear the busy state for the caller.\n     */\n    setBusy() {\n        const oldBusy = this.isBusy;\n        this._busyCount++;\n        if (this.isBusy !== oldBusy) {\n            this._busySignal.emit(this.isBusy);\n        }\n        return new DisposableDelegate(() => {\n            const oldBusy = this.isBusy;\n            this._busyCount--;\n            if (this.isBusy !== oldBusy) {\n                this._busySignal.emit(this.isBusy);\n            }\n        });\n    }\n}\n//# sourceMappingURL=status.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@fortawesome/fontawesome-free/css/all.min.css';\nimport '@fortawesome/fontawesome-free/css/v4-shims.min.css';\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\n\nimport './base.css';\n","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { Notification } from '@jupyterlab/apputils';\nimport { URLExt } from '@jupyterlab/coreutils';\nimport { IConfigSectionManager, ServerConnection } from '@jupyterlab/services';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nconst COMMAND_HELP_OPEN = 'help:open';\nconst NEWS_API_URL = '/lab/api/news';\nconst UPDATE_API_URL = '/lab/api/update';\nconst PRIVACY_URL = 'https://jupyterlab.readthedocs.io/en/stable/privacy_policies.html';\n/**\n * Call the announcement API\n *\n * @param endpoint Endpoint to request\n * @param init Initial values for the request\n * @returns The response body interpreted as JSON\n */\nasync function requestAPI(endpoint, init = {}) {\n    // Make request to Jupyter API\n    const settings = ServerConnection.makeSettings();\n    const requestUrl = URLExt.join(settings.baseUrl, endpoint);\n    let response;\n    try {\n        response = await ServerConnection.makeRequest(requestUrl, init, settings);\n    }\n    catch (error) {\n        throw new ServerConnection.NetworkError(error);\n    }\n    const data = await response.json();\n    if (!response.ok) {\n        throw new ServerConnection.ResponseError(response, data.message);\n    }\n    return data;\n}\nexport const announcements = {\n    id: '@jupyterlab/apputils-extension:announcements',\n    description: 'Add the announcement feature. It will fetch news on the internet and check for application updates.',\n    autoStart: true,\n    optional: [IConfigSectionManager, ISettingRegistry, ITranslator],\n    activate: (app, configSectionManager, settingRegistry, translator) => {\n        var _a, _b;\n        const CONFIG_SECTION_NAME = announcements.id.replace(/[^\\w]/g, '');\n        void Promise.all([\n            app.restored,\n            (_a = settingRegistry === null || settingRegistry === void 0 ? void 0 : settingRegistry.load('@jupyterlab/apputils-extension:notification')) !== null && _a !== void 0 ? _a : Promise.resolve(null),\n            // Use config instead of state to store independently of the workspace\n            // if a news has been displayed or not.\n            (_b = configSectionManager === null || configSectionManager === void 0 ? void 0 : configSectionManager.create({\n                name: CONFIG_SECTION_NAME\n            })) !== null && _b !== void 0 ? _b : Promise.resolve(null)\n        ]).then(async ([_, settings, config]) => {\n            const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n            // Store dismiss state\n            Notification.manager.changed.connect((manager, change) => {\n                var _a;\n                if (change.type !== 'removed') {\n                    return;\n                }\n                const { id, tags } = ((_a = change\n                    .notification.options.data) !== null && _a !== void 0 ? _a : {});\n                if ((tags !== null && tags !== void 0 ? tags : []).some(tag => ['news', 'update'].includes(tag)) && id) {\n                    const update = {};\n                    update[id] = { seen: true, dismissed: true };\n                    config === null || config === void 0 ? void 0 : config.update(update).catch(reason => {\n                        console.error(`Failed to update the announcements config:\\n${reason}`);\n                    });\n                }\n            });\n            const mustFetchNews = settings === null || settings === void 0 ? void 0 : settings.get('fetchNews').composite;\n            if (mustFetchNews === 'none') {\n                const notificationId = Notification.emit(trans.__('Would you like to get notified about official Jupyter news?'), 'default', {\n                    autoClose: false,\n                    actions: [\n                        {\n                            label: trans.__('Open privacy policy'),\n                            caption: PRIVACY_URL,\n                            callback: event => {\n                                event.preventDefault();\n                                if (app.commands.hasCommand(COMMAND_HELP_OPEN)) {\n                                    void app.commands.execute(COMMAND_HELP_OPEN, {\n                                        text: trans.__('Privacy policies'),\n                                        url: PRIVACY_URL\n                                    });\n                                }\n                                else {\n                                    window.open(PRIVACY_URL, '_blank', 'noreferrer');\n                                }\n                            },\n                            displayType: 'link'\n                        },\n                        {\n                            label: trans.__('Yes'),\n                            callback: () => {\n                                Notification.dismiss(notificationId);\n                                config === null || config === void 0 ? void 0 : config.update({}).then(() => fetchNews()).catch(reason => {\n                                    console.error(`Failed to get the news:\\n${reason}`);\n                                });\n                                settings === null || settings === void 0 ? void 0 : settings.set('fetchNews', 'true').catch((reason) => {\n                                    console.error(`Failed to save setting 'fetchNews':\\n${reason}`);\n                                });\n                            }\n                        },\n                        {\n                            label: trans.__('No'),\n                            callback: () => {\n                                Notification.dismiss(notificationId);\n                                settings === null || settings === void 0 ? void 0 : settings.set('fetchNews', 'false').catch((reason) => {\n                                    console.error(`Failed to save setting 'fetchNews':\\n${reason}`);\n                                });\n                            }\n                        }\n                    ]\n                });\n            }\n            else {\n                await fetchNews();\n            }\n            async function fetchNews() {\n                var _a, _b, _c, _d;\n                if (((_a = settings === null || settings === void 0 ? void 0 : settings.get('fetchNews').composite) !== null && _a !== void 0 ? _a : 'false') === 'true') {\n                    try {\n                        const response = await requestAPI(NEWS_API_URL);\n                        for (const { link, message, type, options } of response.news) {\n                            // @ts-expect-error data has no index\n                            const id = options.data['id'];\n                            // Filter those notifications\n                            const state = (_b = config === null || config === void 0 ? void 0 : config.data[id]) !== null && _b !== void 0 ? _b : {\n                                seen: false,\n                                dismissed: false\n                            };\n                            if (!state.dismissed) {\n                                options.actions = [\n                                    {\n                                        label: trans.__('Hide'),\n                                        caption: trans.__('Never show this notification again.'),\n                                        callback: () => {\n                                            const update = {};\n                                            update[id] = { seen: true, dismissed: true };\n                                            config === null || config === void 0 ? void 0 : config.update(update).catch(reason => {\n                                                console.error(`Failed to update the announcements config:\\n${reason}`);\n                                            });\n                                        }\n                                    }\n                                ];\n                                if ((link === null || link === void 0 ? void 0 : link.length) === 2) {\n                                    options.actions.push({\n                                        label: link[0],\n                                        caption: link[1],\n                                        callback: () => {\n                                            window.open(link[1], '_blank', 'noreferrer');\n                                        },\n                                        displayType: 'link'\n                                    });\n                                }\n                                if (!state.seen) {\n                                    options.autoClose = 5000;\n                                    const update = {};\n                                    update[id] = { seen: true };\n                                    config === null || config === void 0 ? void 0 : config.update(update).catch(reason => {\n                                        console.error(`Failed to update the announcements config:\\n${reason}`);\n                                    });\n                                }\n                                Notification.emit(message, type, options);\n                            }\n                        }\n                    }\n                    catch (reason) {\n                        console.log('Failed to get the announcements.', reason);\n                    }\n                }\n                if ((_c = settings === null || settings === void 0 ? void 0 : settings.get('checkForUpdates').composite) !== null && _c !== void 0 ? _c : true) {\n                    const response = await requestAPI(UPDATE_API_URL);\n                    if (response.notification) {\n                        const { link, message, type, options } = response.notification;\n                        // @ts-expect-error data has no index\n                        const id = options.data['id'];\n                        const state = (_d = config === null || config === void 0 ? void 0 : config.data[id]) !== null && _d !== void 0 ? _d : {\n                            seen: false,\n                            dismissed: false\n                        };\n                        if (!state.dismissed) {\n                            let notificationId;\n                            options.actions = [\n                                {\n                                    label: trans.__('Ignore all updates'),\n                                    caption: trans.__('Do not prompt me if a new JupyterLab version is available.'),\n                                    callback: () => {\n                                        settings === null || settings === void 0 ? void 0 : settings.set('checkForUpdates', false).then(() => {\n                                            Notification.dismiss(notificationId);\n                                        }).catch((reason) => {\n                                            console.error('Failed to set the `checkForUpdates` setting.', reason);\n                                        });\n                                    }\n                                }\n                            ];\n                            if ((link === null || link === void 0 ? void 0 : link.length) === 2) {\n                                options.actions.push({\n                                    label: link[0],\n                                    caption: link[1],\n                                    callback: () => {\n                                        window.open(link[1], '_blank', 'noreferrer');\n                                    },\n                                    // Because the link to the changelog is the primary option,\n                                    // display it in an accent color.\n                                    displayType: 'accent'\n                                });\n                            }\n                            if (!state.seen) {\n                                options.autoClose = 5000;\n                                const update = {};\n                                update[id] = { seen: true };\n                                config === null || config === void 0 ? void 0 : config.update(update).catch(reason => {\n                                    console.error(`Failed to update the announcements config:\\n${reason}`);\n                                });\n                            }\n                            notificationId = Notification.emit(message, type, options);\n                        }\n                    }\n                }\n            }\n        });\n    }\n};\n//# sourceMappingURL=announcements.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { ILayoutRestorer } from '@jupyterlab/application';\nimport { ICommandPalette, ILicensesClient, Licenses, MainAreaWidget, WidgetTracker } from '@jupyterlab/apputils';\nimport { PageConfig, URLExt } from '@jupyterlab/coreutils';\nimport { IMainMenu } from '@jupyterlab/mainmenu';\nimport { ITranslator } from '@jupyterlab/translation';\nimport { CommandToolbarButton, copyrightIcon, refreshIcon, Toolbar } from '@jupyterlab/ui-components';\n/**\n * The command IDs used by the licenses plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.licenses = 'apputils:licenses';\n    CommandIDs.licenseReport = 'apputils:license-report';\n    CommandIDs.refreshLicenses = 'apputils:licenses-refresh';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The license client plugin for fetching licenses.\n */\nexport const licensesClient = {\n    id: '@jupyterlab/apputils-extension:licenses-client',\n    description: 'The licenses client plugin for fetching licenses.',\n    autoStart: true,\n    provides: ILicensesClient,\n    activate: (app) => {\n        const licensesUrl = URLExt.join(PageConfig.getBaseUrl(), PageConfig.getOption('licensesUrl')) + '/';\n        const serverSettings = app.serviceManager.serverSettings;\n        return new Licenses.LicensesClient({ licensesUrl, serverSettings });\n    }\n};\n/**\n * A plugin to add a licenses reporting tools.\n */\nexport const licensesPlugin = {\n    id: '@jupyterlab/apputils-extension:licenses-plugin',\n    description: 'Adds licenses reporting tools.',\n    requires: [ILicensesClient, ITranslator],\n    optional: [ILayoutRestorer, IMainMenu, ICommandPalette],\n    autoStart: true,\n    activate: (app, client, translator, restorer, menu, palette) => {\n        const { commands, shell } = app;\n        const trans = translator.load('jupyterlab');\n        const category = trans.__('Help');\n        const downloadAsText = trans.__('Download All Licenses as');\n        const refreshLicenses = trans.__('Refresh Licenses');\n        const licensesNamespace = 'help-licenses';\n        const licensesTracker = new WidgetTracker({\n            namespace: licensesNamespace\n        });\n        // translation strings\n        const licensesText = trans.__('Licenses');\n        // an incrementer for license widget ids\n        let counter = 0;\n        /**\n         * Create a MainAreaWidget for a license viewer\n         */\n        function createLicenseWidget(args) {\n            const licensesModel = new Licenses.Model({\n                ...args,\n                client,\n                trans\n            });\n            const content = new Licenses({ model: licensesModel });\n            content.id = `${licensesNamespace}-${++counter}`;\n            content.title.label = licensesText;\n            content.title.icon = copyrightIcon;\n            const main = new MainAreaWidget({\n                content,\n                reveal: licensesModel.licensesReady\n            });\n            main.toolbar.addItem('refresh-licenses', new CommandToolbarButton({\n                id: CommandIDs.refreshLicenses,\n                args: { noLabel: 1 },\n                commands\n            }));\n            main.toolbar.addItem('spacer', Toolbar.createSpacerItem());\n            for (const format of Object.keys(Licenses.REPORT_FORMATS)) {\n                const button = new CommandToolbarButton({\n                    id: CommandIDs.licenseReport,\n                    args: { format, noLabel: 1 },\n                    commands\n                });\n                main.toolbar.addItem(`download-${format}`, button);\n            }\n            return main;\n        }\n        /**\n         * Return a full license report format based on a format name\n         */\n        function formatOrDefault(format) {\n            return (Licenses.REPORT_FORMATS[format] ||\n                Licenses.REPORT_FORMATS[Licenses.DEFAULT_FORMAT]);\n        }\n        // register license-related commands\n        commands.addCommand(CommandIDs.licenses, {\n            label: licensesText,\n            execute: (args) => {\n                // bail if no license API is available from the server\n                if (!PageConfig.getOption('licensesUrl')) {\n                    console.warn('No license API available from the server');\n                    return;\n                }\n                const licenseMain = createLicenseWidget(args);\n                shell.add(licenseMain, 'main', { type: 'Licenses' });\n                // add to tracker so it can be restored, and update when choices change\n                void licensesTracker.add(licenseMain);\n                licenseMain.content.model.trackerDataChanged.connect(() => {\n                    void licensesTracker.save(licenseMain);\n                });\n                return licenseMain;\n            }\n        });\n        commands.addCommand(CommandIDs.refreshLicenses, {\n            label: args => (args.noLabel ? '' : refreshLicenses),\n            caption: refreshLicenses,\n            icon: refreshIcon,\n            execute: async () => {\n                var _a;\n                return (_a = licensesTracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content.model.initLicenses();\n            }\n        });\n        commands.addCommand(CommandIDs.licenseReport, {\n            label: args => {\n                if (args.noLabel) {\n                    return '';\n                }\n                const format = formatOrDefault(`${args.format}`);\n                return `${downloadAsText} ${format.title}`;\n            },\n            caption: args => {\n                const format = formatOrDefault(`${args.format}`);\n                return `${downloadAsText} ${format.title}`;\n            },\n            icon: args => {\n                const format = formatOrDefault(`${args.format}`);\n                return format.icon;\n            },\n            execute: async (args) => {\n                var _a;\n                const format = formatOrDefault(`${args.format}`);\n                return await ((_a = licensesTracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content.model.download({\n                    format: format.id\n                }));\n            }\n        });\n        // handle optional integrations\n        if (palette) {\n            palette.addItem({ command: CommandIDs.licenses, category });\n        }\n        if (menu) {\n            const helpMenu = menu.helpMenu;\n            helpMenu.addGroup([{ command: CommandIDs.licenses }], 0);\n        }\n        if (restorer) {\n            void restorer.restore(licensesTracker, {\n                command: CommandIDs.licenses,\n                name: widget => 'licenses',\n                args: widget => {\n                    const { currentBundleName, currentPackageIndex, packageFilter } = widget.content.model;\n                    const args = {\n                        currentBundleName,\n                        currentPackageIndex,\n                        packageFilter\n                    };\n                    return args;\n                }\n            });\n        }\n    }\n};\n//# sourceMappingURL=licensesplugin.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { Notification, ReactWidget } from '@jupyterlab/apputils';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { GroupItem, IStatusBar, showPopup, TextItem } from '@jupyterlab/statusbar';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { bellIcon, Button, closeIcon, deleteIcon, ToolbarButtonComponent, UseSignal, VDomModel } from '@jupyterlab/ui-components';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { Widget } from '@lumino/widgets';\nimport * as React from 'react';\nimport { createRoot } from 'react-dom/client';\n/**\n * Toast close button class\n */\nconst TOAST_CLOSE_BUTTON_CLASS = 'jp-Notification-Toast-Close';\n/**\n * Toast close button class right margin required due to custom hover effect\n */\nconst TOAST_CLOSE_BUTTON_MARGIN_CLASS = 'jp-Notification-Toast-Close-Margin';\n/**\n * Maximal number of characters displayed in a notification.\n */\nconst MAX_MESSAGE_LENGTH = 140;\nvar CommandIDs;\n(function (CommandIDs) {\n    /**\n     * Dismiss a notification\n     */\n    CommandIDs.dismiss = 'apputils:dismiss-notification';\n    /**\n     * Display all notifications\n     */\n    CommandIDs.display = 'apputils:display-notifications';\n    /**\n     * Create a notification\n     */\n    CommandIDs.notify = 'apputils:notify';\n    /**\n     * Update a notification\n     */\n    CommandIDs.update = 'apputils:update-notification';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * Half spacing between subitems in a status item.\n */\nconst HALF_SPACING = 4;\n/**\n * Notification center view\n */\nfunction NotificationCenter(props) {\n    const { manager, onClose, trans } = props;\n    // Markdown parsed notifications\n    const [notifications, setNotifications] = React.useState([]);\n    // Load asynchronously react-toastify icons\n    const [icons, setIcons] = React.useState(null);\n    React.useEffect(() => {\n        async function onChanged() {\n            setNotifications(await Promise.all(manager.notifications.map(async (n) => {\n                return Object.freeze({\n                    ...n\n                });\n            })));\n        }\n        if (notifications.length !== manager.count) {\n            void onChanged();\n        }\n        manager.changed.connect(onChanged);\n        return () => {\n            manager.changed.disconnect(onChanged);\n        };\n    }, [manager]);\n    React.useEffect(() => {\n        Private.getIcons()\n            .then(toastifyIcons => {\n            setIcons(toastifyIcons);\n        })\n            .catch(r => {\n            console.error(`Failed to get react-toastify icons:\\n${r}`);\n        });\n    }, []);\n    return (React.createElement(UseSignal, { signal: manager.changed }, () => (React.createElement(React.Fragment, null,\n        React.createElement(\"h2\", { className: \"jp-Notification-Header jp-Toolbar\" },\n            React.createElement(\"span\", { className: \"jp-Toolbar-item\" }, manager.count > 0\n                ? trans._n('%1 notification', '%1 notifications', manager.count)\n                : trans.__('No notifications')),\n            React.createElement(\"span\", { className: \"jp-Toolbar-item jp-Toolbar-spacer\" }),\n            React.createElement(ToolbarButtonComponent, { noFocusOnClick: false, onClick: () => {\n                    manager.dismiss();\n                }, icon: deleteIcon, tooltip: trans.__('Dismiss all notifications'), enabled: manager.count > 0 }),\n            React.createElement(ToolbarButtonComponent, { noFocusOnClick: false, onClick: onClose, icon: closeIcon, tooltip: trans.__('Hide notifications') })),\n        React.createElement(\"ol\", { className: \"jp-Notification-List\" }, notifications.map(notification => {\n            var _a;\n            const { id, message, type, options } = notification;\n            const toastType = type === 'in-progress' ? 'default' : type;\n            const closeNotification = () => {\n                manager.dismiss(id);\n            };\n            const icon = type === 'default'\n                ? null\n                : type === 'in-progress'\n                    ? (_a = icons === null || icons === void 0 ? void 0 : icons.spinner) !== null && _a !== void 0 ? _a : null\n                    : icons && icons[type];\n            return (React.createElement(\"li\", { className: \"jp-Notification-List-Item\", key: notification.id, onClick: event => {\n                    // Stop propagation to avoid closing the popup on click\n                    event.stopPropagation();\n                } },\n                React.createElement(\"div\", { className: `Toastify__toast Toastify__toast-theme--light Toastify__toast--${toastType} jp-Notification-Toast-${toastType}` },\n                    React.createElement(\"div\", { className: \"Toastify__toast-body\" },\n                        icon && (React.createElement(\"div\", { className: \"Toastify__toast-icon\" }, icon({ theme: 'light', type: toastType }))),\n                        React.createElement(\"div\", null, Private.createContent(message, closeNotification, options.actions))),\n                    React.createElement(Private.CloseButton, { close: closeNotification, closeIcon: deleteIcon.react, title: trans.__('Dismiss notification'), closeIconMargin: true }))));\n        }))))));\n}\n/**\n * Status widget model\n */\nclass NotificationStatusModel extends VDomModel {\n    constructor(manager) {\n        super();\n        this.manager = manager;\n        this._highlight = false;\n        this._listOpened = false;\n        this._doNotDisturbMode = false;\n        this._count = manager.count;\n        this.manager.changed.connect(this.onNotificationChanged, this);\n    }\n    /**\n     * Number of notifications.\n     */\n    get count() {\n        return this._count;\n    }\n    /**\n     * Whether to silence all notifications or not.\n     */\n    get doNotDisturbMode() {\n        return this._doNotDisturbMode;\n    }\n    set doNotDisturbMode(v) {\n        this._doNotDisturbMode = v;\n    }\n    /**\n     * Whether to highlight the status widget or not.\n     */\n    get highlight() {\n        return this._highlight;\n    }\n    /**\n     * Whether the popup is opened or not.\n     */\n    get listOpened() {\n        return this._listOpened;\n    }\n    set listOpened(v) {\n        this._listOpened = v;\n        if (this._listOpened || this._highlight) {\n            this._highlight = false;\n        }\n        this.stateChanged.emit();\n    }\n    onNotificationChanged(_, change) {\n        // Set private attribute to trigger only once the signal emission\n        this._count = this.manager.count;\n        const { autoClose } = change.notification.options;\n        const noToast = this.doNotDisturbMode ||\n            (typeof autoClose === 'number' && autoClose <= 0);\n        // Highlight if\n        //   the list is not opened (the style change if list is opened due to clickedItem style in statusbar.)\n        //   the change type is not removed\n        //   the notification will be hidden\n        if (!this._listOpened && change.type !== 'removed' && noToast) {\n            this._highlight = true;\n        }\n        this.stateChanged.emit();\n    }\n}\n/**\n * Status view\n */\nfunction NotificationStatus(props) {\n    return (React.createElement(GroupItem, { spacing: HALF_SPACING, onClick: () => {\n            props.onClick();\n        }, title: props.count > 0\n            ? props.trans._n('%1 notification', '%1 notifications', props.count)\n            : props.trans.__('No notifications') },\n        React.createElement(TextItem, { className: \"jp-Notification-Status-Text\", source: `${props.count}` }),\n        React.createElement(bellIcon.react, { top: '2px', stylesheet: 'statusBar' })));\n}\n/**\n * Add notification center and toast\n */\nexport const notificationPlugin = {\n    id: '@jupyterlab/apputils-extension:notification',\n    description: 'Add the notification center and its status indicator.',\n    autoStart: true,\n    optional: [IStatusBar, ISettingRegistry, ITranslator],\n    activate: (app, statusBar, settingRegistry, translator) => {\n        Private.translator = translator !== null && translator !== void 0 ? translator : nullTranslator;\n        const trans = Private.translator.load('jupyterlab');\n        const model = new NotificationStatusModel(Notification.manager);\n        model.doNotDisturbMode = false;\n        if (settingRegistry) {\n            void Promise.all([\n                settingRegistry.load(notificationPlugin.id),\n                app.restored\n            ]).then(([plugin]) => {\n                const updateSettings = () => {\n                    model.doNotDisturbMode = plugin.get('doNotDisturbMode')\n                        .composite;\n                };\n                updateSettings();\n                plugin.changed.connect(updateSettings);\n            });\n        }\n        app.commands.addCommand(CommandIDs.notify, {\n            label: trans.__('Emit a notification'),\n            caption: trans.__('Notification is described by {message: string, type?: string, options?: {autoClose?: number | false, actions: {label: string, commandId: string, args?: ReadOnlyJSONObject, caption?: string, className?: string}[], data?: ReadOnlyJSONValue}}.'),\n            execute: args => {\n                var _a;\n                const { message, type } = args;\n                const options = (_a = args.options) !== null && _a !== void 0 ? _a : {};\n                return Notification.manager.notify(message, type !== null && type !== void 0 ? type : 'default', {\n                    ...options,\n                    actions: options.actions\n                        ? options.actions.map((action) => {\n                            return {\n                                ...action,\n                                callback: () => {\n                                    app.commands\n                                        .execute(action.commandId, action.args)\n                                        .catch(r => {\n                                        console.error(`Failed to executed '${action.commandId}':\\n${r}`);\n                                    });\n                                }\n                            };\n                        })\n                        : null\n                });\n            }\n        });\n        app.commands.addCommand(CommandIDs.update, {\n            label: trans.__('Update a notification'),\n            caption: trans.__('Notification is described by {id: string, message: string, type?: string, options?: {autoClose?: number | false, actions: {label: string, commandId: string, args?: ReadOnlyJSONObject, caption?: string, className?: string}[], data?: ReadOnlyJSONValue}}.'),\n            execute: args => {\n                const { id, message, type, ...options } = args;\n                return Notification.manager.update({\n                    id,\n                    message,\n                    type: type !== null && type !== void 0 ? type : 'default',\n                    ...options,\n                    actions: options.actions\n                        ? options.actions.map((action) => {\n                            return {\n                                ...action,\n                                callback: () => {\n                                    app.commands\n                                        .execute(action.commandId, action.args)\n                                        .catch(r => {\n                                        console.error(`Failed to executed '${action.commandId}':\\n${r}`);\n                                    });\n                                }\n                            };\n                        })\n                        : null\n                });\n            }\n        });\n        app.commands.addCommand(CommandIDs.dismiss, {\n            label: trans.__('Dismiss a notification'),\n            execute: args => {\n                const { id } = args;\n                Notification.manager.dismiss(id);\n            }\n        });\n        let popup = null;\n        model.listOpened = false;\n        const notificationList = ReactWidget.create(React.createElement(NotificationCenter, { manager: Notification.manager, onClose: () => {\n                popup === null || popup === void 0 ? void 0 : popup.dispose();\n            }, trans: trans }));\n        notificationList.addClass('jp-Notification-Center');\n        async function onNotification(manager, change) {\n            var _a;\n            if (model.doNotDisturbMode || (popup !== null && !popup.isDisposed)) {\n                return;\n            }\n            const { message, type, options, id } = change.notification;\n            if (typeof options.autoClose === 'number' && options.autoClose <= 0) {\n                // If the notification is silent, bail early.\n                return;\n            }\n            switch (change.type) {\n                case 'added':\n                    await Private.createToast(id, message, type, options);\n                    break;\n                case 'updated':\n                    {\n                        const toast = await Private.toast();\n                        const actions = options.actions;\n                        const autoClose = (_a = options.autoClose) !== null && _a !== void 0 ? _a : (actions && actions.length > 0 ? false : null);\n                        if (toast.isActive(id)) {\n                            // Update existing toast\n                            const closeToast = () => {\n                                // Dismiss the displayed toast\n                                toast.dismiss(id);\n                                // Dismiss the notification from the queue\n                                manager.dismiss(id);\n                            };\n                            toast.update(id, {\n                                type: type === 'in-progress' ? null : type,\n                                isLoading: type === 'in-progress',\n                                autoClose: autoClose,\n                                render: Private.createContent(message, closeToast, options.actions)\n                            });\n                        }\n                        else {\n                            // Needs to recreate a closed toast\n                            await Private.createToast(id, message, type, options);\n                        }\n                    }\n                    break;\n                case 'removed':\n                    await Private.toast().then(t => {\n                        t.dismiss(id);\n                    });\n                    break;\n            }\n        }\n        Notification.manager.changed.connect(onNotification);\n        const displayNotifications = () => {\n            if (popup) {\n                popup.dispose();\n                popup = null;\n            }\n            else {\n                popup = showPopup({\n                    body: notificationList,\n                    anchor: notificationStatus,\n                    align: 'right',\n                    hasDynamicSize: true,\n                    startHidden: true\n                });\n                // Dismiss all toasts when opening the notification center\n                Private.toast()\n                    .then(t => {\n                    t.dismiss();\n                })\n                    .catch(r => {\n                    console.error(`Failed to dismiss all toasts:\\n${r}`);\n                })\n                    .finally(() => {\n                    popup === null || popup === void 0 ? void 0 : popup.launch();\n                    // Focus on the pop-up\n                    notificationList.node.focus();\n                    popup === null || popup === void 0 ? void 0 : popup.disposed.connect(() => {\n                        model.listOpened = false;\n                        popup = null;\n                    });\n                });\n            }\n            model.listOpened = popup !== null;\n        };\n        app.commands.addCommand(CommandIDs.display, {\n            label: trans.__('Show Notifications'),\n            execute: displayNotifications\n        });\n        const notificationStatus = ReactWidget.create(React.createElement(UseSignal, { signal: model.stateChanged }, () => {\n            if (model.highlight || (popup && !popup.isDisposed)) {\n                notificationStatus.addClass('jp-mod-selected');\n            }\n            else {\n                notificationStatus.removeClass('jp-mod-selected');\n            }\n            return (React.createElement(NotificationStatus, { count: model.count, highlight: model.highlight, trans: trans, onClick: displayNotifications }));\n        }));\n        notificationStatus.addClass('jp-Notification-Status');\n        if (statusBar) {\n            statusBar.registerStatusItem(notificationPlugin.id, {\n                item: notificationStatus,\n                align: 'right',\n                rank: -1\n            });\n        }\n        else {\n            notificationStatus.addClass('jp-ThemedContainer');\n            // if the status bar is not available, position the notification\n            // status in the bottom right corner of the page\n            notificationStatus.node.style.position = 'fixed';\n            notificationStatus.node.style.bottom = '0';\n            // 10px is the default padding for the status bar\n            notificationStatus.node.style.right = '10px';\n            Widget.attach(notificationStatus, document.body);\n            notificationStatus.show();\n        }\n    }\n};\nvar Private;\n(function (Private) {\n    /**\n     * Translator object for private namespace\n     */\n    Private.translator = nullTranslator;\n    /**\n     * Pointer to asynchronously loaded react-toastify\n     */\n    let toastify = null;\n    function CloseButton(props) {\n        var _a;\n        return (React.createElement(\"button\", { className: `jp-Button jp-mod-minimal ${TOAST_CLOSE_BUTTON_CLASS}${props.closeIconMargin ? ` ${TOAST_CLOSE_BUTTON_MARGIN_CLASS}` : ''}`, title: (_a = props.title) !== null && _a !== void 0 ? _a : '', onClick: props.close },\n            React.createElement(props.closeIcon, { className: \"jp-icon-hover\", tag: \"span\" })));\n    }\n    Private.CloseButton = CloseButton;\n    function ToastifyCloseButton(props) {\n        const trans = Private.translator.load('jupyterlab');\n        return (React.createElement(CloseButton, { close: props.closeToast, closeIcon: closeIcon.react, title: trans.__('Hide notification') }));\n    }\n    let waitForToastify = null;\n    /**\n     * Asynchronously load the toast container\n     *\n     * @returns The toast object\n     */\n    async function toast() {\n        if (waitForToastify === null) {\n            waitForToastify = new PromiseDelegate();\n        }\n        else {\n            await waitForToastify.promise;\n        }\n        if (toastify === null) {\n            toastify = await import('react-toastify');\n            const container = document.body.appendChild(document.createElement('div'));\n            container.id = 'react-toastify-container';\n            container.classList.add('jp-ThemedContainer');\n            const root = createRoot(container);\n            root.render(React.createElement(toastify.ToastContainer, { draggable: false, closeOnClick: false, hideProgressBar: true, newestOnTop: true, pauseOnFocusLoss: true, pauseOnHover: true, position: \"bottom-right\", className: \"jp-toastContainer\", transition: toastify.Slide, closeButton: ToastifyCloseButton }));\n            waitForToastify.resolve();\n        }\n        return toastify.toast;\n    }\n    Private.toast = toast;\n    /**\n     * react-toastify icons loader\n     */\n    async function getIcons() {\n        if (toastify === null) {\n            await toast();\n        }\n        return toastify.Icons;\n    }\n    Private.getIcons = getIcons;\n    const displayType2Class = {\n        accent: 'jp-mod-accept',\n        link: 'jp-mod-link',\n        warn: 'jp-mod-warn',\n        default: ''\n    };\n    /**\n     * Create a button with customized callback in a toast\n     */\n    function ToastButton({ action, closeToast }) {\n        var _a, _b;\n        const clickHandler = (event) => {\n            action.callback(event);\n            if (!event.defaultPrevented) {\n                closeToast();\n            }\n        };\n        const classes = [\n            'jp-toast-button',\n            displayType2Class[(_a = action.displayType) !== null && _a !== void 0 ? _a : 'default']\n        ].join(' ');\n        return (React.createElement(Button, { title: (_b = action.caption) !== null && _b !== void 0 ? _b : action.label, className: classes, onClick: clickHandler, small: true }, action.label));\n    }\n    /**\n     * Helper function to construct the notification content\n     *\n     * @param message Message to print in the notification\n     * @param closeHandler Function closing the notification\n     * @param actions Toast actions\n     */\n    function createContent(message, closeHandler, actions) {\n        var _a;\n        const shortenMessage = message.length > MAX_MESSAGE_LENGTH\n            ? message.slice(0, MAX_MESSAGE_LENGTH) + '…'\n            : message;\n        return (React.createElement(React.Fragment, null,\n            React.createElement(\"div\", { className: \"jp-toast-message\" }, shortenMessage.split('\\n').map((part, index) => (React.createElement(React.Fragment, { key: `part-${index}` },\n                index > 0 ? React.createElement(\"br\", null) : null,\n                part)))),\n            ((_a = actions === null || actions === void 0 ? void 0 : actions.length) !== null && _a !== void 0 ? _a : 0) > 0 && (React.createElement(\"div\", { className: \"jp-toast-buttonBar\" },\n                React.createElement(\"div\", { className: \"jp-toast-spacer\" }),\n                actions.map((action, idx) => {\n                    return (React.createElement(ToastButton, { key: 'button-' + idx, action: action, closeToast: closeHandler }));\n                })))));\n    }\n    Private.createContent = createContent;\n    /**\n     * Create a toast notification\n     *\n     * @param toastId Toast unique id\n     * @param message Toast message\n     * @param type Toast type\n     * @param options Toast options\n     * @returns Toast id\n     */\n    async function createToast(toastId, message, type, options = {}) {\n        const { actions, autoClose, data } = options;\n        const t = await toast();\n        const toastOptions = {\n            autoClose: autoClose !== null && autoClose !== void 0 ? autoClose : (actions && actions.length > 0 ? false : undefined),\n            data: data,\n            className: `jp-Notification-Toast-${type}`,\n            toastId,\n            type: type === 'in-progress' ? null : type,\n            isLoading: type === 'in-progress'\n        };\n        return t(({ closeToast }) => createContent(message, () => {\n            if (closeToast)\n                closeToast();\n            Notification.manager.dismiss(toastId);\n        }, actions), toastOptions);\n    }\n    Private.createToast = createToast;\n})(Private || (Private = {}));\n//# sourceMappingURL=notificationplugin.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { ModalCommandPalette } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { CommandPaletteSvg, paletteIcon } from '@jupyterlab/ui-components';\nimport { find } from '@lumino/algorithm';\nimport { CommandRegistry } from '@lumino/commands';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { CommandPalette } from '@lumino/widgets';\n/**\n * The command IDs used by the apputils extension.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.activate = 'apputils:activate-command-palette';\n})(CommandIDs || (CommandIDs = {}));\nconst PALETTE_PLUGIN_ID = '@jupyterlab/apputils-extension:palette';\n/**\n * A thin wrapper around the `CommandPalette` class to conform with the\n * JupyterLab interface for the application-wide command palette.\n */\nexport class Palette {\n    /**\n     * Create a palette instance.\n     */\n    constructor(palette, translator) {\n        this.translator = translator || nullTranslator;\n        const trans = this.translator.load('jupyterlab');\n        this._palette = palette;\n        this._palette.title.label = '';\n        this._palette.title.caption = trans.__('Command Palette');\n    }\n    /**\n     * The placeholder text of the command palette's search input.\n     */\n    set placeholder(placeholder) {\n        this._palette.inputNode.placeholder = placeholder;\n    }\n    get placeholder() {\n        return this._palette.inputNode.placeholder;\n    }\n    /**\n     * Activate the command palette for user input.\n     */\n    activate() {\n        this._palette.activate();\n    }\n    /**\n     * Add a command item to the command palette.\n     *\n     * @param options - The options for creating the command item.\n     *\n     * @returns A disposable that will remove the item from the palette.\n     */\n    addItem(options) {\n        const item = this._palette.addItem(options);\n        return new DisposableDelegate(() => {\n            this._palette.removeItem(item);\n        });\n    }\n}\n/**\n * A namespace for `Palette` statics.\n */\n(function (Palette) {\n    /**\n     * Activate the command palette.\n     */\n    function activate(app, translator, settingRegistry) {\n        const { commands, shell } = app;\n        const trans = translator.load('jupyterlab');\n        const palette = Private.createPalette(app, translator);\n        const modalPalette = new ModalCommandPalette({ commandPalette: palette });\n        let modal = false;\n        palette.node.setAttribute('role', 'region');\n        palette.node.setAttribute('aria-label', trans.__('Command Palette Section'));\n        shell.add(palette, 'left', { rank: 300, type: 'Command Palette' });\n        if (settingRegistry) {\n            const loadSettings = settingRegistry.load(PALETTE_PLUGIN_ID);\n            const updateSettings = (settings) => {\n                const newModal = settings.get('modal').composite;\n                if (modal && !newModal) {\n                    palette.parent = null;\n                    modalPalette.detach();\n                    shell.add(palette, 'left', { rank: 300, type: 'Command Palette' });\n                }\n                else if (!modal && newModal) {\n                    palette.parent = null;\n                    modalPalette.palette = palette;\n                    palette.show();\n                    modalPalette.attach();\n                }\n                modal = newModal;\n            };\n            Promise.all([loadSettings, app.restored])\n                .then(([settings]) => {\n                updateSettings(settings);\n                settings.changed.connect(settings => {\n                    updateSettings(settings);\n                });\n            })\n                .catch((reason) => {\n                console.error(reason.message);\n            });\n        }\n        // Show the current palette shortcut in its title.\n        const updatePaletteTitle = () => {\n            const binding = find(app.commands.keyBindings, b => b.command === CommandIDs.activate);\n            if (binding) {\n                const ks = binding.keys.map(CommandRegistry.formatKeystroke).join(', ');\n                palette.title.caption = trans.__('Commands (%1)', ks);\n            }\n            else {\n                palette.title.caption = trans.__('Commands');\n            }\n        };\n        updatePaletteTitle();\n        app.commands.keyBindingChanged.connect(() => {\n            updatePaletteTitle();\n        });\n        commands.addCommand(CommandIDs.activate, {\n            execute: () => {\n                if (modal) {\n                    modalPalette.activate();\n                }\n                else {\n                    shell.activateById(palette.id);\n                }\n            },\n            label: trans.__('Activate Command Palette')\n        });\n        palette.inputNode.placeholder = trans.__('SEARCH');\n        return new Palette(palette, translator);\n    }\n    Palette.activate = activate;\n    /**\n     * Restore the command palette.\n     */\n    function restore(app, restorer, translator) {\n        const palette = Private.createPalette(app, translator);\n        // Let the application restorer track the command palette for restoration of\n        // application state (e.g. setting the command palette as the current side bar\n        // widget).\n        restorer.add(palette, 'command-palette');\n    }\n    Palette.restore = restore;\n})(Palette || (Palette = {}));\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The private command palette instance.\n     */\n    let palette;\n    /**\n     * Create the application-wide command palette.\n     */\n    function createPalette(app, translator) {\n        if (!palette) {\n            // use a renderer tweaked to use inline svg icons\n            palette = new CommandPalette({\n                commands: app.commands,\n                renderer: CommandPaletteSvg.defaultRenderer\n            });\n            palette.id = 'command-palette';\n            palette.title.icon = paletteIcon;\n            const trans = translator.load('jupyterlab');\n            palette.title.label = trans.__('Commands');\n        }\n        return palette;\n    }\n    Private.createPalette = createPalette;\n})(Private || (Private = {}));\n//# sourceMappingURL=palette.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { PageConfig } from '@jupyterlab/coreutils';\nimport { DataConnector } from '@jupyterlab/statedb';\nimport { Throttler } from '@lumino/polling';\n/**\n * A data connector for fetching settings.\n *\n * #### Notes\n * This connector adds a query parameter to the base services setting manager.\n */\nexport class SettingConnector extends DataConnector {\n    constructor(connector) {\n        super();\n        this._throttlers = Object.create(null);\n        this._connector = connector;\n    }\n    /**\n     * Fetch settings for a plugin.\n     * @param id - The plugin ID\n     *\n     * #### Notes\n     * The REST API requests are throttled at one request per plugin per 100ms.\n     */\n    fetch(id) {\n        const throttlers = this._throttlers;\n        if (!(id in throttlers)) {\n            throttlers[id] = new Throttler(() => this._connector.fetch(id), 100);\n        }\n        return throttlers[id].invoke();\n    }\n    async list(query = 'all') {\n        const { isDisabled } = PageConfig.Extension;\n        const { ids, values } = await this._connector.list(query === 'ids' ? 'ids' : undefined);\n        if (query === 'all') {\n            return { ids, values };\n        }\n        if (query === 'ids') {\n            return { ids };\n        }\n        return {\n            ids: ids.filter(id => !isDisabled(id)),\n            values: values.filter(({ id }) => !isDisabled(id))\n        };\n    }\n    async save(id, raw) {\n        await this._connector.save(id, raw);\n    }\n}\n//# sourceMappingURL=settingconnector.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { PageConfig } from '@jupyterlab/coreutils';\nimport { ISettingConnector, ISettingRegistry, SettingRegistry } from '@jupyterlab/settingregistry';\nimport { SettingConnector } from './settingconnector';\n/**\n * Provides the settings connector as a separate plugin to allow for alternative\n * implementations that may want to fetch settings from a different source or\n * endpoint.\n */\nexport const settingsConnector = {\n    id: '@jupyterlab/apputils-extension:settings-connector',\n    description: 'Provides the settings connector.',\n    autoStart: true,\n    provides: ISettingConnector,\n    activate: (app) => new SettingConnector(app.serviceManager.settings)\n};\n/**\n * The default setting registry provider.\n */\nexport const settingsPlugin = {\n    id: '@jupyterlab/apputils-extension:settings',\n    autoStart: true,\n    provides: ISettingRegistry,\n    optional: [ISettingConnector],\n    description: 'Provides the setting registry.',\n    activate: async (app, settingsConnector) => {\n        const { isDisabled } = PageConfig.Extension;\n        const connector = settingsConnector !== null && settingsConnector !== void 0 ? settingsConnector : new SettingConnector(app.serviceManager.settings);\n        // On startup, check if a plugin is available in the application.\n        // This helps avoid loading plugin files from other lab-based applications\n        // that have placed their schemas next to the JupyterLab schemas. Different lab-based\n        // applications might not have the same set of plugins loaded on the page.\n        // As an example this helps prevent having new toolbar items added by another application\n        // appear in JupyterLab as a side-effect when they are defined via the settings system.\n        const registry = new SettingRegistry({\n            connector,\n            plugins: (await connector.list('active')).values.filter(value => app.hasPlugin(value.id))\n        });\n        // If there are plugins that have schemas that are not in the setting\n        // registry after the application has restored, try to load them manually\n        // because otherwise, its settings will never become available in the\n        // setting registry.\n        void app.restored.then(async () => {\n            const plugins = await connector.list('ids');\n            plugins.ids.forEach(async (id) => {\n                if (!app.hasPlugin(id) || isDisabled(id) || id in registry.plugins) {\n                    return;\n                }\n                try {\n                    await registry.load(id);\n                }\n                catch (error) {\n                    console.warn(`Settings failed to load for (${id})`, error);\n                    if (!app.isPluginActivated(id)) {\n                        console.warn(`If 'jupyter.lab.transform=true' in the plugin schema, this ` +\n                            `may happen if {autoStart: false} in (${id}) or if it is ` +\n                            `one of the deferredExtensions in page config.`);\n                    }\n                }\n            });\n        });\n        return registry;\n    }\n};\n//# sourceMappingURL=settingsplugin.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { ILabShell } from '@jupyterlab/application';\nimport { IKernelStatusModel, ISessionContextDialogs, KernelStatus, RunningSessions, SessionContextDialogs } from '@jupyterlab/apputils';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { IStatusBar } from '@jupyterlab/statusbar';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\n/**\n * A plugin that provides a kernel status item to the status bar.\n */\nexport const kernelStatus = {\n    id: '@jupyterlab/apputils-extension:kernel-status',\n    description: 'Provides the kernel status indicator model.',\n    autoStart: true,\n    requires: [IStatusBar],\n    provides: IKernelStatusModel,\n    optional: [ISessionContextDialogs, ITranslator, ILabShell],\n    activate: (app, statusBar, sessionDialogs_, translator_, labShell) => {\n        const translator = translator_ !== null && translator_ !== void 0 ? translator_ : nullTranslator;\n        const sessionDialogs = sessionDialogs_ !== null && sessionDialogs_ !== void 0 ? sessionDialogs_ : new SessionContextDialogs({ translator });\n        // When the status item is clicked, launch the kernel\n        // selection dialog for the current session.\n        const changeKernel = async () => {\n            if (!item.model.sessionContext) {\n                return;\n            }\n            await sessionDialogs.selectKernel(item.model.sessionContext);\n        };\n        const changeKernelOnKeyDown = async (event) => {\n            if (event.key === 'Enter' ||\n                event.key === 'Spacebar' ||\n                event.key === ' ') {\n                event.preventDefault();\n                event.stopPropagation();\n                return changeKernel();\n            }\n        };\n        // Create the status item.\n        const item = new KernelStatus({ onClick: changeKernel, onKeyDown: changeKernelOnKeyDown }, translator);\n        const providers = new Set();\n        const addSessionProvider = (provider) => {\n            providers.add(provider);\n            if (app.shell.currentWidget) {\n                updateSession(app.shell, {\n                    newValue: app.shell.currentWidget,\n                    oldValue: null\n                });\n            }\n        };\n        function updateSession(shell, changes) {\n            var _a;\n            const { oldValue, newValue } = changes;\n            // Clean up after the old value if it exists,\n            // listen for changes to the title of the activity\n            if (oldValue) {\n                oldValue.title.changed.disconnect(onTitleChanged);\n            }\n            item.model.sessionContext =\n                (_a = [...providers]\n                    .map(provider => provider(changes.newValue))\n                    .filter(session => session !== null)[0]) !== null && _a !== void 0 ? _a : null;\n            if (newValue && item.model.sessionContext) {\n                onTitleChanged(newValue.title);\n                newValue.title.changed.connect(onTitleChanged);\n            }\n        }\n        // When the title of the active widget changes, update the label\n        // of the hover text.\n        const onTitleChanged = (title) => {\n            item.model.activityName = title.label;\n        };\n        if (labShell) {\n            labShell.currentChanged.connect(updateSession);\n        }\n        statusBar.registerStatusItem(kernelStatus.id, {\n            priority: 1,\n            item,\n            align: 'left',\n            rank: 1,\n            isActive: () => item.model.sessionContext !== null\n        });\n        return { addSessionProvider };\n    }\n};\n/*\n * A plugin providing running terminals and sessions information\n * to the status bar.\n */\nexport const runningSessionsStatus = {\n    id: '@jupyterlab/apputils-extension:running-sessions-status',\n    description: 'Add the running sessions and terminals status bar item.',\n    autoStart: true,\n    requires: [IStatusBar, ITranslator],\n    optional: [ISettingRegistry],\n    activate: (app, statusBar, translator, settingRegistry) => {\n        const createStatusItem = (options) => {\n            const item = new RunningSessions({\n                onClick: () => app.shell.activateById('jp-running-sessions'),\n                onKeyDown: (event) => {\n                    if (event.key === 'Enter' ||\n                        event.key === 'Spacebar' ||\n                        event.key === ' ') {\n                        event.preventDefault();\n                        event.stopPropagation();\n                        app.shell.activateById('jp-running-sessions');\n                    }\n                },\n                serviceManager: app.serviceManager,\n                translator,\n                ...options\n            });\n            item.model.sessions = Array.from(app.serviceManager.sessions.running()).length;\n            item.model.terminals = Array.from(app.serviceManager.terminals.running()).length;\n            return item;\n        };\n        const registerItem = (options) => {\n            const item = createStatusItem(options);\n            return statusBar.registerStatusItem(runningSessionsStatus.id, {\n                item,\n                align: 'left',\n                rank: 0\n            });\n        };\n        if (settingRegistry) {\n            let disposable;\n            const onSettingsUpdated = (kernelSettings, terminalsSettings) => {\n                var _a, _b;\n                const showTerminalsMap = {\n                    'if-any': undefined,\n                    never: false,\n                    always: true\n                };\n                const showKernels = (_a = kernelSettings === null || kernelSettings === void 0 ? void 0 : kernelSettings.get('showStatusBarItem').composite) !== null && _a !== void 0 ? _a : true;\n                const showTerminals = showTerminalsMap[(_b = terminalsSettings === null || terminalsSettings === void 0 ? void 0 : terminalsSettings.get('showStatusBarItem').composite) !== null && _b !== void 0 ? _b : 'if-any'];\n                disposable === null || disposable === void 0 ? void 0 : disposable.dispose();\n                if (showKernels || showTerminals !== false) {\n                    disposable = registerItem({\n                        showKernels,\n                        showTerminals\n                    });\n                }\n            };\n            const kernelsPluginId = '@jupyterlab/apputils-extension:kernels-settings';\n            const terminalPluginId = '@jupyterlab/terminal-extension:plugin';\n            void Promise.all([\n                // Settings may be missing if the respective plugins are not enabled/included.\n                kernelsPluginId in settingRegistry.plugins\n                    ? settingRegistry.load(kernelsPluginId).catch(() => undefined)\n                    : Promise.resolve(undefined),\n                terminalPluginId in settingRegistry.plugins\n                    ? settingRegistry.load(terminalPluginId).catch(() => undefined)\n                    : Promise.resolve(undefined)\n            ]).then(([kernelSettings, terminalSettings]) => {\n                onSettingsUpdated(kernelSettings, terminalSettings);\n                if (kernelSettings) {\n                    kernelSettings.changed.connect(settings => {\n                        kernelSettings = settings;\n                        onSettingsUpdated(kernelSettings, terminalSettings);\n                    });\n                }\n                if (terminalSettings) {\n                    terminalSettings.changed.connect(settings => {\n                        terminalSettings = settings;\n                        onSettingsUpdated(kernelSettings, terminalSettings);\n                    });\n                }\n            });\n        }\n        else {\n            registerItem({\n                showKernels: true\n            });\n        }\n    }\n};\n//# sourceMappingURL=statusbarplugin.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\n/*\n * A plugin loading kernel subshell settings.\n */\nexport const subshellsSettings = {\n    id: '@jupyterlab/apputils-extension:subshell-settings',\n    description: 'Kernel subshell settings.',\n    autoStart: true,\n    requires: [],\n    optional: [ISettingRegistry],\n    activate: (app, settingRegistry) => {\n        if (settingRegistry) {\n            app.started\n                .then(async () => {\n                const subshellsSettings = await settingRegistry.load('@jupyterlab/apputils-extension:kernels-settings');\n                const commsOverSubshells = subshellsSettings.get('commsOverSubshells')\n                    .composite;\n                app.serviceManager.kernels.commsOverSubshells = commsOverSubshells;\n                subshellsSettings.changed.connect(() => {\n                    const commsOverSubshells = subshellsSettings.get('commsOverSubshells').composite;\n                    app.serviceManager.kernels.commsOverSubshells = commsOverSubshells;\n                });\n            })\n                .catch(reason => {\n                console.error('Fail to load settings for the subshells.');\n                console.error(reason);\n            });\n        }\n    }\n};\n//# sourceMappingURL=subshell-settings.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { JupyterFrontEnd } from '@jupyterlab/application';\nimport { ICommandPalette, ISplashScreen, IThemeManager, ThemeManager } from '@jupyterlab/apputils';\nimport { PageConfig, URLExt } from '@jupyterlab/coreutils';\nimport { IMainMenu } from '@jupyterlab/mainmenu';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator } from '@jupyterlab/translation';\nimport scrollbarStyleText from '../style/scrollbar.raw.css';\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.changeTheme = 'apputils:change-theme';\n    CommandIDs.changePreferredLightTheme = 'apputils:change-light-theme';\n    CommandIDs.changePreferredDarkTheme = 'apputils:change-dark-theme';\n    CommandIDs.toggleAdaptiveTheme = 'apputils:adaptive-theme';\n    CommandIDs.themeScrollbars = 'apputils:theme-scrollbars';\n    CommandIDs.changeFont = 'apputils:change-font';\n    CommandIDs.incrFontSize = 'apputils:incr-font-size';\n    CommandIDs.decrFontSize = 'apputils:decr-font-size';\n})(CommandIDs || (CommandIDs = {}));\nfunction createStyleSheet(text) {\n    const style = document.createElement('style');\n    style.setAttribute('type', 'text/css');\n    style.appendChild(document.createTextNode(text));\n    return style;\n}\n/**\n * The default theme manager provider.\n */\nexport const themesPlugin = {\n    id: '@jupyterlab/apputils-extension:themes',\n    description: 'Provides the theme manager.',\n    requires: [ISettingRegistry, JupyterFrontEnd.IPaths, ITranslator],\n    optional: [ISplashScreen],\n    activate: (app, settings, paths, translator, splash) => {\n        const trans = translator.load('jupyterlab');\n        const host = app.shell;\n        const commands = app.commands;\n        const url = URLExt.join(PageConfig.getBaseUrl(), paths.urls.themes);\n        const key = themesPlugin.id;\n        const manager = new ThemeManager({\n            key,\n            host,\n            settings,\n            splash: splash !== null && splash !== void 0 ? splash : undefined,\n            url\n        });\n        let scrollbarsStyleElement = null;\n        // Keep a synchronously set reference to the current theme,\n        // since the asynchronous setting of the theme in `changeTheme`\n        // can lead to an incorrect toggle on the currently used theme.\n        let currentTheme;\n        manager.themeChanged.connect((sender, args) => {\n            // Set data attributes on the application shell for the current theme.\n            currentTheme = args.newValue;\n            document.body.dataset.jpThemeLight = String(manager.isLight(currentTheme));\n            document.body.dataset.jpThemeName = currentTheme;\n            document.body.style.colorScheme = manager.isLight(currentTheme)\n                ? 'light'\n                : 'dark';\n            if (document.body.dataset.jpThemeScrollbars !==\n                String(manager.themeScrollbars(currentTheme))) {\n                document.body.dataset.jpThemeScrollbars = String(manager.themeScrollbars(currentTheme));\n                if (manager.themeScrollbars(currentTheme)) {\n                    if (!scrollbarsStyleElement) {\n                        scrollbarsStyleElement = createStyleSheet(scrollbarStyleText);\n                    }\n                    if (!scrollbarsStyleElement.parentElement) {\n                        document.body.appendChild(scrollbarsStyleElement);\n                    }\n                }\n                else {\n                    if (scrollbarsStyleElement && scrollbarsStyleElement.parentElement) {\n                        scrollbarsStyleElement.parentElement.removeChild(scrollbarsStyleElement);\n                    }\n                }\n            }\n            commands.notifyCommandChanged(CommandIDs.changeTheme);\n        });\n        commands.addCommand(CommandIDs.changeTheme, {\n            label: args => {\n                if (args.theme === undefined) {\n                    return trans.__('Switch to the provided `theme`.');\n                }\n                const theme = args['theme'];\n                const displayName = manager.getDisplayName(theme);\n                return args['isPalette']\n                    ? trans.__('Use Theme: %1', displayName)\n                    : displayName;\n            },\n            isToggled: args => args['theme'] === currentTheme,\n            execute: args => {\n                const theme = args['theme'];\n                if (theme === manager.theme) {\n                    return;\n                }\n                // Disable adaptive theme if users decide to change the theme when adaptive theme is on\n                if (manager.isToggledAdaptiveTheme()) {\n                    return manager.toggleAdaptiveTheme();\n                }\n                return manager.setTheme(theme);\n            }\n        });\n        commands.addCommand(CommandIDs.changePreferredLightTheme, {\n            label: args => {\n                if (args.theme === undefined) {\n                    return trans.__('Switch to the provided light `theme`.');\n                }\n                const theme = args['theme'];\n                const displayName = manager.getDisplayName(theme);\n                return args['isPalette']\n                    ? trans.__('Set Preferred Light Theme: %1', displayName)\n                    : displayName;\n            },\n            isToggled: args => args['theme'] === manager.preferredLightTheme,\n            execute: args => {\n                const theme = args['theme'];\n                if (theme === manager.preferredLightTheme) {\n                    return;\n                }\n                return manager.setPreferredLightTheme(theme);\n            }\n        });\n        commands.addCommand(CommandIDs.changePreferredDarkTheme, {\n            label: args => {\n                if (args.theme === undefined) {\n                    return trans.__('Switch to the provided dark `theme`.');\n                }\n                const theme = args['theme'];\n                const displayName = manager.getDisplayName(theme);\n                return args['isPalette']\n                    ? trans.__('Set Preferred Dark Theme: %1', displayName)\n                    : displayName;\n            },\n            isToggled: args => args['theme'] === manager.preferredDarkTheme,\n            execute: args => {\n                const theme = args['theme'];\n                if (theme === manager.preferredDarkTheme) {\n                    return;\n                }\n                return manager.setPreferredDarkTheme(theme);\n            }\n        });\n        commands.addCommand(CommandIDs.toggleAdaptiveTheme, {\n            // Avoid lengthy option text in menu\n            label: args => args['isPalette']\n                ? trans.__('Synchronize Styling Theme with System Settings')\n                : trans.__('Synchronize with System Settings'),\n            isToggled: () => manager.isToggledAdaptiveTheme(),\n            execute: () => {\n                manager.toggleAdaptiveTheme().catch(console.warn);\n            }\n        });\n        commands.addCommand(CommandIDs.themeScrollbars, {\n            label: trans.__('Theme Scrollbars'),\n            isToggled: () => manager.isToggledThemeScrollbars(),\n            execute: () => manager.toggleThemeScrollbars()\n        });\n        commands.addCommand(CommandIDs.changeFont, {\n            label: args => args['enabled'] ? `${args['font']}` : trans.__('waiting for fonts'),\n            isEnabled: args => args['enabled'],\n            isToggled: args => manager.getCSS(args['key']) === args['font'],\n            execute: args => manager.setCSSOverride(args['key'], args['font'])\n        });\n        commands.addCommand(CommandIDs.incrFontSize, {\n            label: args => {\n                switch (args.key) {\n                    case 'code-font-size':\n                        return trans.__('Increase Code Font Size');\n                    case 'content-font-size1':\n                        return trans.__('Increase Content Font Size');\n                    case 'ui-font-size1':\n                        return trans.__('Increase UI Font Size');\n                    default:\n                        return trans.__('Increase Font Size');\n                }\n            },\n            execute: args => manager.incrFontSize(args['key'])\n        });\n        commands.addCommand(CommandIDs.decrFontSize, {\n            label: args => {\n                switch (args.key) {\n                    case 'code-font-size':\n                        return trans.__('Decrease Code Font Size');\n                    case 'content-font-size1':\n                        return trans.__('Decrease Content Font Size');\n                    case 'ui-font-size1':\n                        return trans.__('Decrease UI Font Size');\n                    default:\n                        return trans.__('Decrease Font Size');\n                }\n            },\n            execute: args => manager.decrFontSize(args['key'])\n        });\n        return manager;\n    },\n    autoStart: true,\n    provides: IThemeManager\n};\n/**\n * The default theme manager's UI command palette and main menu functionality.\n *\n * #### Notes\n * This plugin loads separately from the theme manager plugin in order to\n * prevent blocking of the theme manager while it waits for the command palette\n * and main menu to become available.\n */\nexport const themesPaletteMenuPlugin = {\n    id: '@jupyterlab/apputils-extension:themes-palette-menu',\n    description: 'Adds theme commands to the menu and the command palette.',\n    requires: [IThemeManager, ITranslator],\n    optional: [ICommandPalette, IMainMenu],\n    activate: (app, manager, translator, palette, mainMenu) => {\n        const trans = translator.load('jupyterlab');\n        // If we have a main menu, add the theme manager to the settings menu.\n        if (mainMenu) {\n            void app.restored.then(() => {\n                var _a;\n                const isPalette = false;\n                const themeMenu = (_a = mainMenu.settingsMenu.items.find(item => {\n                    var _a;\n                    return item.type === 'submenu' &&\n                        ((_a = item.submenu) === null || _a === void 0 ? void 0 : _a.id) === 'jp-mainmenu-settings-apputilstheme';\n                })) === null || _a === void 0 ? void 0 : _a.submenu;\n                // choose a theme\n                if (themeMenu) {\n                    manager.themes.forEach((theme, index) => {\n                        themeMenu.insertItem(index, {\n                            command: CommandIDs.changeTheme,\n                            args: { isPalette, theme }\n                        });\n                    });\n                }\n            });\n        }\n        // If we have a command palette, add theme switching options to it.\n        if (palette) {\n            void app.restored.then(() => {\n                const category = trans.__('Theme');\n                const command = CommandIDs.changeTheme;\n                const isPalette = true;\n                // choose a theme\n                manager.themes.forEach(theme => {\n                    palette.addItem({ command, args: { isPalette, theme }, category });\n                });\n                // choose preferred light theme\n                manager.themes.forEach(theme => {\n                    palette.addItem({\n                        command: CommandIDs.changePreferredLightTheme,\n                        args: { isPalette, theme },\n                        category\n                    });\n                });\n                // choose preferred dark theme\n                manager.themes.forEach(theme => {\n                    palette.addItem({\n                        command: CommandIDs.changePreferredDarkTheme,\n                        args: { isPalette, theme },\n                        category\n                    });\n                });\n                // toggle adaptive theme\n                palette.addItem({\n                    command: CommandIDs.toggleAdaptiveTheme,\n                    args: { isPalette },\n                    category\n                });\n                // toggle scrollbar theming\n                palette.addItem({ command: CommandIDs.themeScrollbars, category });\n                // increase/decrease code font size\n                palette.addItem({\n                    command: CommandIDs.incrFontSize,\n                    args: {\n                        key: 'code-font-size'\n                    },\n                    category\n                });\n                palette.addItem({\n                    command: CommandIDs.decrFontSize,\n                    args: {\n                        key: 'code-font-size'\n                    },\n                    category\n                });\n                // increase/decrease content font size\n                palette.addItem({\n                    command: CommandIDs.incrFontSize,\n                    args: {\n                        key: 'content-font-size1'\n                    },\n                    category\n                });\n                palette.addItem({\n                    command: CommandIDs.decrFontSize,\n                    args: {\n                        key: 'content-font-size1'\n                    },\n                    category\n                });\n                // increase/decrease ui font size\n                palette.addItem({\n                    command: CommandIDs.incrFontSize,\n                    args: {\n                        key: 'ui-font-size1'\n                    },\n                    category\n                });\n                palette.addItem({\n                    command: CommandIDs.decrFontSize,\n                    args: {\n                        key: 'ui-font-size1'\n                    },\n                    category\n                });\n            });\n        }\n    },\n    autoStart: true\n};\n//# sourceMappingURL=themesplugins.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { createDefaultFactory, IToolbarWidgetRegistry, ToolbarWidgetRegistry } from '@jupyterlab/apputils';\n/**\n * The default toolbar registry.\n */\nexport const toolbarRegistry = {\n    id: '@jupyterlab/apputils-extension:toolbar-registry',\n    description: 'Provides toolbar items registry.',\n    autoStart: true,\n    provides: IToolbarWidgetRegistry,\n    activate: (app) => {\n        const registry = new ToolbarWidgetRegistry({\n            defaultFactory: createDefaultFactory(app.commands)\n        });\n        return registry;\n    }\n};\n//# sourceMappingURL=toolbarregistryplugin.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { IRouter, JupyterFrontEnd } from '@jupyterlab/application';\nimport { URLExt } from '@jupyterlab/coreutils';\nimport { ABCWidgetFactory, DocumentWidget } from '@jupyterlab/docregistry';\nimport { IStateDB } from '@jupyterlab/statedb';\nimport { IWorkspaceCommands } from '@jupyterlab/workspaces';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { Widget } from '@lumino/widgets';\nconst WORKSPACE_NAME = 'jupyterlab-workspace';\nconst WORKSPACE_EXT = '.' + WORKSPACE_NAME;\nconst LAST_SAVE_ID = 'workspace-ui:lastSave';\nconst ICON_NAME = 'jp-JupyterIcon';\n/**\n * The workspace MIME renderer.\n */\nexport const workspacesPlugin = {\n    id: '@jupyterlab/apputils-extension:workspaces',\n    description: 'Add workspace file type.',\n    autoStart: true,\n    requires: [IStateDB, ITranslator, JupyterFrontEnd.IPaths],\n    optional: [IRouter, IWorkspaceCommands],\n    activate: (app, state, translator, paths, router, workspaceCommands) => {\n        // The workspace factory creates dummy widgets to load a new workspace.\n        const factory = new Private.WorkspaceFactory({\n            workspaces: app.serviceManager.workspaces,\n            state,\n            translator,\n            open: async (id) => {\n                if (workspaceCommands) {\n                    await app.commands.execute(workspaceCommands.open, { workspace: id });\n                }\n                else {\n                    const workspacesBase = URLExt.join(paths.urls.app, 'workspaces');\n                    const url = URLExt.join(workspacesBase, id);\n                    if (!url.startsWith(workspacesBase)) {\n                        throw new Error('Can only be used for workspaces');\n                    }\n                    if (router) {\n                        router.navigate(url, { hard: true });\n                    }\n                    else {\n                        document.location.href = url;\n                    }\n                }\n            }\n        });\n        const trans = translator.load('jupyterlab');\n        app.docRegistry.addFileType({\n            name: WORKSPACE_NAME,\n            contentType: 'file',\n            fileFormat: 'text',\n            displayName: trans.__('JupyterLab Workspace File'),\n            extensions: [WORKSPACE_EXT],\n            mimeTypes: ['text/json'],\n            iconClass: ICON_NAME\n        });\n        app.docRegistry.addWidgetFactory(factory);\n    }\n};\nvar Private;\n(function (Private) {\n    /**\n     * This widget factory is used to handle double click on workspace\n     */\n    class WorkspaceFactory extends ABCWidgetFactory {\n        /**\n         * Construct a widget factory that uploads a workspace and navigates to it.\n         *\n         * @param options - The instantiation options for a `WorkspaceFactory`.\n         */\n        constructor(options) {\n            const trans = (options.translator || nullTranslator).load('jupyterlab');\n            super({\n                name: 'Workspace loader',\n                label: trans.__('Workspace loader'),\n                fileTypes: [WORKSPACE_NAME],\n                defaultFor: [WORKSPACE_NAME],\n                readOnly: true\n            });\n            this._state = options.state;\n            this._workspaces = options.workspaces;\n            this._open = options.open;\n        }\n        /**\n         * Loads the workspace into load, and jump to it\n         * @param context This is used to query the workspace content\n         */\n        createNewWidget(context) {\n            // Save a file's contents as a workspace and navigate to that workspace.\n            void context.ready.then(async () => {\n                const file = context.model;\n                const workspace = file.toJSON();\n                const path = context.path;\n                const id = workspace.metadata.id;\n                // Save the file contents as a workspace.\n                await this._workspaces.save(id, workspace);\n                // Save last save location for the save command.\n                await this._state.save(LAST_SAVE_ID, path);\n                // Navigate to new workspace.\n                await this._open(id);\n            });\n            return dummyWidget(context);\n        }\n    }\n    Private.WorkspaceFactory = WorkspaceFactory;\n    /**\n     * Returns a dummy widget with disposed content that doesn't render in the UI.\n     *\n     * @param context - The file context.\n     */\n    function dummyWidget(context) {\n        const widget = new DocumentWidget({ content: new Widget(), context });\n        widget.content.dispose();\n        return widget;\n    }\n})(Private || (Private = {}));\n//# sourceMappingURL=workspacesplugin.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { CommandRegistry } from '@lumino/commands';\nimport { Selector } from '@lumino/domutils';\nimport * as React from 'react';\nimport { Dialog, showDialog } from '@jupyterlab/apputils';\n/**\n * The class name for each row of ContextShortcutTable\n */\nconst SHORTCUT_TABLE_ROW_CLASS = 'jp-ContextualShortcut-TableRow';\n/**\n * The class name for the last row of ContextShortcutTable\n */\nconst SHORTCUT_TABLE_LAST_ROW_CLASS = 'jp-ContextualShortcut-TableLastRow';\n/**\n * The class name for each item of ContextShortcutTable\n */\nconst SHORTCUT_TABLE_ITEM_CLASS = 'jp-ContextualShortcut-TableItem';\n/**\n * The class name for each button-like symbol representing a key used in a shortcut in the ContextShortcutTable\n */\nconst SHORTCUT_KEY_CLASS = 'jp-ContextualShortcut-Key';\nexport function displayShortcuts(options) {\n    const { commands, trans, activeElement } = options;\n    const elt = activeElement !== null && activeElement !== void 0 ? activeElement : document.activeElement;\n    /**\n     * Find the distance from the target node to the first matching node.\n     *\n     * Based on Lumino private function commands.Private.targetDistance\n     * This traverses the DOM path from `elt` to the root\n     * computes the distance from `elt` to the first node which matches\n     * the CSS selector. If no match is found, `-1` is returned.\n     *\n     * It also stops traversal if the `data-lm-suppress-shortcuts` or\n     * `data-p-suppress-shortcuts` attributes are found.\n     */\n    function formatKeys(keys) {\n        const topContainer = [];\n        keys.forEach((key, index) => {\n            const container = [];\n            key.split(' ').forEach((ch, chIndex) => {\n                container.push(React.createElement(\"span\", { className: SHORTCUT_KEY_CLASS, key: `ch-${chIndex}` },\n                    React.createElement(\"kbd\", null, ch)), React.createElement(React.Fragment, { key: `fragment-${chIndex}` }, \" + \"));\n            });\n            topContainer.push(React.createElement(\"span\", { key: `key-${index}` }, container.slice(0, -1)), React.createElement(React.Fragment, { key: `fragment-${index}` }, \" + \"));\n        });\n        return React.createElement(\"span\", null, topContainer.slice(0, -1));\n    }\n    function capitalizeString(str) {\n        const capitalizedStr = str.charAt(0).toUpperCase() + str.slice(1);\n        return capitalizedStr;\n    }\n    function formatLabel(b) {\n        const label = commands.label(b.command);\n        const commandID = b.command.split(':')[1];\n        const automaticLabel = commandID.split('-');\n        let capitalizedLabel = '';\n        for (let i = 0; i < automaticLabel.length; i++) {\n            const str = capitalizeString(automaticLabel[i]);\n            capitalizedLabel = capitalizedLabel + ' ' + str;\n        }\n        if (label.length > 0) {\n            return label;\n        }\n        else {\n            return capitalizedLabel;\n        }\n    }\n    function matchDistance(selector, elt) {\n        let targ = elt;\n        for (let dist = 0; targ !== null && targ !== targ.parentElement; targ = targ.parentElement, ++dist) {\n            if (targ.hasAttribute('data-lm-suppress-shortcuts')) {\n                return -1;\n            }\n            if (targ.matches(selector)) {\n                return dist;\n            }\n        }\n        return -1;\n    }\n    // Find active keybindings for target element\n    const activeBindings = new Map();\n    for (let i = 0; i < commands.keyBindings.length; i++) {\n        const kb = commands.keyBindings[i];\n        let distance = matchDistance(kb.selector, elt);\n        if (distance < 0) {\n            continue;\n        }\n        let formatted = CommandRegistry.formatKeystroke(kb.keys);\n        if (activeBindings.has(formatted)) {\n            let oldBinding = activeBindings.get(formatted);\n            // if the existing binding takes precedence, ignore this binding by continuing\n            if (oldBinding[0] < distance ||\n                (oldBinding[0] === distance &&\n                    Selector.calculateSpecificity(oldBinding[1].selector) >\n                        Selector.calculateSpecificity(kb.selector))) {\n                continue;\n            }\n        }\n        activeBindings.set(formatted, [distance, kb]);\n    }\n    // Group shortcuts by distance\n    let maxDistance = -1;\n    const groupedBindings = new Map();\n    for (let [distance, binding] of activeBindings.values()) {\n        maxDistance = Math.max(distance, maxDistance);\n        if (!groupedBindings.has(distance)) {\n            groupedBindings.set(distance, []);\n        }\n        groupedBindings.get(distance).push(binding);\n    }\n    // Display shortcuts by group\n    const bindingTable = [];\n    for (let d = 0; d <= maxDistance; d++) {\n        if (groupedBindings.has(d)) {\n            bindingTable.push(groupedBindings.get(d).map(b => (React.createElement(\"tr\", { className: SHORTCUT_TABLE_ROW_CLASS, key: `${b.command}-${b.keys.join('-').replace(' ', '_')}` },\n                React.createElement(\"td\", { className: SHORTCUT_TABLE_ITEM_CLASS }, formatLabel(b)),\n                React.createElement(\"td\", { className: SHORTCUT_TABLE_ITEM_CLASS }, formatKeys([...b.keys]))))));\n            bindingTable.push(React.createElement(\"tr\", { className: SHORTCUT_TABLE_LAST_ROW_CLASS, key: `group-${d}-last` }));\n        }\n    }\n    const body = (React.createElement(\"table\", null,\n        React.createElement(\"tbody\", null, bindingTable)));\n    return showDialog({\n        title: trans.__('Keyboard Shortcuts'),\n        body,\n        buttons: [\n            Dialog.cancelButton({\n                label: trans.__('Close')\n            })\n        ]\n    });\n}\n//# sourceMappingURL=shortcuts.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module apputils-extension\n */\nimport { ILayoutRestorer, IRouter, JupyterFrontEnd } from '@jupyterlab/application';\nimport { Dialog, ICommandPalette, ISanitizer, ISessionContextDialogs, ISplashScreen, IWindowResolver, MainAreaWidget, Printing, Sanitizer, SessionContextDialogs, WindowResolver } from '@jupyterlab/apputils';\nimport { PageConfig, PathExt, URLExt } from '@jupyterlab/coreutils';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { IStateDB, StateDB } from '@jupyterlab/statedb';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { jupyterFaviconIcon } from '@jupyterlab/ui-components';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Debouncer, Throttler } from '@lumino/polling';\nimport { announcements } from './announcements';\nimport { licensesClient, licensesPlugin } from './licensesplugin';\nimport { notificationPlugin } from './notificationplugin';\nimport { Palette } from './palette';\nimport { settingsConnector, settingsPlugin } from './settingsplugin';\nimport { kernelStatus, runningSessionsStatus } from './statusbarplugin';\nimport { subshellsSettings } from './subshell-settings';\nimport { themesPaletteMenuPlugin, themesPlugin } from './themesplugins';\nimport { toolbarRegistry } from './toolbarregistryplugin';\nimport { workspacesPlugin } from './workspacesplugin';\nimport { displayShortcuts } from './shortcuts';\n/**\n * The interval in milliseconds before recover options appear during splash.\n */\nconst SPLASH_RECOVER_TIMEOUT = 12000;\n/**\n * The command IDs used by the apputils plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.loadState = 'apputils:load-statedb';\n    CommandIDs.print = 'apputils:print';\n    CommandIDs.reset = 'apputils:reset';\n    CommandIDs.resetOnLoad = 'apputils:reset-on-load';\n    CommandIDs.runFirstEnabled = 'apputils:run-first-enabled';\n    CommandIDs.runAllEnabled = 'apputils:run-all-enabled';\n    CommandIDs.toggleHeader = 'apputils:toggle-header';\n    CommandIDs.displayShortcuts = 'apputils:display-shortcuts';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The default command palette extension.\n */\nconst palette = {\n    id: '@jupyterlab/apputils-extension:palette',\n    description: 'Provides the command palette.',\n    autoStart: true,\n    requires: [ITranslator],\n    provides: ICommandPalette,\n    optional: [ISettingRegistry],\n    activate: (app, translator, settingRegistry) => {\n        return Palette.activate(app, translator, settingRegistry);\n    }\n};\n/**\n * The default command palette's restoration extension.\n *\n * #### Notes\n * The command palette's restoration logic is handled separately from the\n * command palette provider extension because the layout restorer dependency\n * causes the command palette to be unavailable to other extensions earlier\n * in the application load cycle.\n */\nconst paletteRestorer = {\n    id: '@jupyterlab/apputils-extension:palette-restorer',\n    description: 'Restores the command palette.',\n    autoStart: true,\n    requires: [ILayoutRestorer, ITranslator],\n    activate: (app, restorer, translator) => {\n        Palette.restore(app, restorer, translator);\n    }\n};\n/**\n * The default window name resolver provider.\n */\nconst resolver = {\n    id: '@jupyterlab/apputils-extension:resolver',\n    description: 'Provides the window name resolver.',\n    autoStart: true,\n    provides: IWindowResolver,\n    requires: [JupyterFrontEnd.IPaths, IRouter],\n    activate: async (app, paths, router) => {\n        const { hash, search } = router.current;\n        const query = URLExt.queryStringToObject(search || '');\n        const solver = new WindowResolver();\n        const workspace = PageConfig.getOption('workspace');\n        const treePath = PageConfig.getOption('treePath');\n        const mode = PageConfig.getOption('mode') === 'multiple-document' ? 'lab' : 'doc';\n        // This is used as a key in local storage to refer to workspaces, either the name\n        // of the workspace or the string PageConfig.defaultWorkspace. Both lab and doc modes share the same workspace.\n        const candidate = workspace ? workspace : PageConfig.defaultWorkspace;\n        const rest = treePath ? URLExt.join('tree', treePath) : '';\n        try {\n            await solver.resolve(candidate);\n            return solver;\n        }\n        catch (error) {\n            // Window resolution has failed so the URL must change. Return a promise\n            // that never resolves to prevent the application from loading plugins\n            // that rely on `IWindowResolver`.\n            return new Promise(() => {\n                const { base } = paths.urls;\n                const pool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\n                const random = pool[Math.floor(Math.random() * pool.length)];\n                let path = URLExt.join(base, mode, 'workspaces', `auto-${random}`);\n                path = rest ? URLExt.join(path, URLExt.encodeParts(rest)) : path;\n                // Reset the workspace on load.\n                query['reset'] = '';\n                const url = path + URLExt.objectToQueryString(query) + (hash || '');\n                router.navigate(url, { hard: true });\n            });\n        }\n    }\n};\n/**\n * The default splash screen provider.\n */\nconst splash = {\n    id: '@jupyterlab/apputils-extension:splash',\n    description: 'Provides the splash screen.',\n    autoStart: true,\n    requires: [ITranslator],\n    provides: ISplashScreen,\n    activate: (app, translator) => {\n        const trans = translator.load('jupyterlab');\n        const { commands, restored } = app;\n        // Create splash element and populate it.\n        const splash = document.createElement('div');\n        const galaxy = document.createElement('div');\n        const logo = document.createElement('div');\n        splash.id = 'jupyterlab-splash';\n        galaxy.id = 'galaxy';\n        logo.id = 'main-logo';\n        jupyterFaviconIcon.element({\n            container: logo,\n            stylesheet: 'splash'\n        });\n        galaxy.appendChild(logo);\n        ['1', '2', '3'].forEach(id => {\n            const moon = document.createElement('div');\n            const planet = document.createElement('div');\n            moon.id = `moon${id}`;\n            moon.className = 'moon orbit';\n            planet.id = `planet${id}`;\n            planet.className = 'planet';\n            moon.appendChild(planet);\n            galaxy.appendChild(moon);\n        });\n        splash.appendChild(galaxy);\n        // Create debounced recovery dialog function.\n        let dialog;\n        const recovery = new Throttler(async () => {\n            if (dialog) {\n                return;\n            }\n            dialog = new Dialog({\n                title: trans.__('Loading…'),\n                body: trans.__(`The loading screen is taking a long time.\nWould you like to clear the workspace or keep waiting?`),\n                buttons: [\n                    Dialog.cancelButton({ label: trans.__('Keep Waiting') }),\n                    Dialog.warnButton({ label: trans.__('Clear Workspace') })\n                ]\n            });\n            try {\n                const result = await dialog.launch();\n                dialog.dispose();\n                dialog = null;\n                if (result.button.accept && commands.hasCommand(CommandIDs.reset)) {\n                    return commands.execute(CommandIDs.reset);\n                }\n                // Re-invoke the recovery timer in the next frame.\n                requestAnimationFrame(() => {\n                    // Because recovery can be stopped, handle invocation rejection.\n                    void recovery.invoke().catch(_ => undefined);\n                });\n            }\n            catch (error) {\n                /* no-op */\n            }\n        }, { limit: SPLASH_RECOVER_TIMEOUT, edge: 'trailing' });\n        // Return ISplashScreen.\n        let splashCount = 0;\n        return {\n            show: (light = true) => {\n                splash.classList.remove('splash-fade');\n                splash.classList.toggle('light', light);\n                splash.classList.toggle('dark', !light);\n                splashCount++;\n                document.body.appendChild(splash);\n                // Because recovery can be stopped, handle invocation rejection.\n                void recovery.invoke().catch(_ => undefined);\n                return new DisposableDelegate(async () => {\n                    await restored;\n                    if (--splashCount === 0) {\n                        void recovery.stop();\n                        if (dialog) {\n                            dialog.dispose();\n                            dialog = null;\n                        }\n                        splash.classList.add('splash-fade');\n                        window.setTimeout(() => {\n                            document.body.removeChild(splash);\n                        }, 200);\n                    }\n                });\n            }\n        };\n    }\n};\nconst print = {\n    id: '@jupyterlab/apputils-extension:print',\n    description: 'Add the print capability',\n    autoStart: true,\n    requires: [ITranslator],\n    activate: (app, translator) => {\n        var _a;\n        const trans = translator.load('jupyterlab');\n        app.commands.addCommand(CommandIDs.print, {\n            label: trans.__('Print…'),\n            isEnabled: () => {\n                const widget = app.shell.currentWidget;\n                return Printing.getPrintFunction(widget) !== null;\n            },\n            execute: async () => {\n                const widget = app.shell.currentWidget;\n                const printFunction = Printing.getPrintFunction(widget);\n                if (printFunction) {\n                    await printFunction();\n                }\n            }\n        });\n        (_a = app.shell.currentChanged) === null || _a === void 0 ? void 0 : _a.connect(() => {\n            app.commands.notifyCommandChanged(CommandIDs.print);\n        });\n    }\n};\nexport const toggleHeader = {\n    id: '@jupyterlab/apputils-extension:toggle-header',\n    description: 'Adds a command to display the main area widget content header.',\n    autoStart: true,\n    requires: [ITranslator],\n    optional: [ICommandPalette],\n    activate: (app, translator, palette) => {\n        var _a;\n        const trans = translator.load('jupyterlab');\n        const category = trans.__('Main Area');\n        app.commands.addCommand(CommandIDs.toggleHeader, {\n            label: trans.__('Show Header Above Content'),\n            isEnabled: () => app.shell.currentWidget instanceof MainAreaWidget &&\n                !app.shell.currentWidget.contentHeader.isDisposed &&\n                app.shell.currentWidget.contentHeader.widgets.length > 0,\n            isToggled: () => {\n                const widget = app.shell.currentWidget;\n                return widget instanceof MainAreaWidget\n                    ? !widget.contentHeader.isHidden\n                    : false;\n            },\n            execute: async () => {\n                const widget = app.shell.currentWidget;\n                if (widget instanceof MainAreaWidget) {\n                    widget.contentHeader.setHidden(!widget.contentHeader.isHidden);\n                }\n            }\n        });\n        (_a = app.shell.currentChanged) === null || _a === void 0 ? void 0 : _a.connect(() => {\n            app.commands.notifyCommandChanged(CommandIDs.toggleHeader);\n        });\n        if (palette) {\n            palette.addItem({ command: CommandIDs.toggleHeader, category });\n        }\n    }\n};\n/**\n * Update the browser title based on the workspace and the current\n * active item.\n */\nasync function updateTabTitle(workspace, db, name) {\n    var _a, _b;\n    const data = await db.toJSON();\n    let current = (_b = (_a = data['layout-restorer:data']) === null || _a === void 0 ? void 0 : _a.main) === null || _b === void 0 ? void 0 : _b.current;\n    if (current === undefined ||\n        !(current.startsWith('notebook') || current.startsWith('editor'))) {\n        document.title = `${PageConfig.getOption('appName') || 'JupyterLab'}${workspace === 'default' ? '' : ` (${workspace})`}`;\n    }\n    else {\n        // File name from current path\n        let currentFile = PathExt.basename(decodeURIComponent(window.location.href));\n        // Truncate to first 12 characters of current document name + ... if length > 15\n        currentFile =\n            currentFile.length > 15\n                ? currentFile.slice(0, 12).concat(`…`)\n                : currentFile;\n        workspace =\n            workspace.length > 15 ? workspace.slice(0, 12).concat(`…`) : workspace;\n        // Number of restorable items that are either notebooks or editors\n        const count = Object.keys(data).filter(item => item.startsWith('notebook') || item.startsWith('editor')).length;\n        document.title = `${currentFile}${count > 1 ? ` (${count})` : ``} - ${workspace === 'default' ? name : workspace}`;\n    }\n}\n/**\n * The default state database for storing application state.\n *\n * #### Notes\n * If this extension is loaded with a window resolver, it will automatically add\n * state management commands, URL support for `clone` and `reset`, and workspace\n * auto-saving. Otherwise, it will return a simple in-memory state database.\n */\nconst state = {\n    id: '@jupyterlab/apputils-extension:state',\n    description: 'Provides the application state. It is stored per workspaces.',\n    autoStart: true,\n    provides: IStateDB,\n    requires: [JupyterFrontEnd.IPaths, IRouter, ITranslator],\n    optional: [IWindowResolver],\n    activate: (app, paths, router, translator, resolver) => {\n        const trans = translator.load('jupyterlab');\n        if (resolver === null) {\n            return new StateDB();\n        }\n        let resolved = false;\n        const { commands, name, serviceManager } = app;\n        const { workspaces } = serviceManager;\n        const workspace = resolver.name;\n        const transform = new PromiseDelegate();\n        const db = new StateDB({ transform: transform.promise });\n        const save = new Debouncer(async () => {\n            const id = workspace;\n            const metadata = { id };\n            const data = await db.toJSON();\n            await workspaces.save(id, { data, metadata });\n        });\n        // Any time the local state database changes, save the workspace.\n        db.changed.connect(() => void save.invoke(), db);\n        db.changed.connect(() => updateTabTitle(workspace, db, name));\n        commands.addCommand(CommandIDs.loadState, {\n            label: trans.__('Load state for the current workspace.'),\n            execute: async (args) => {\n                // Since the command can be executed an arbitrary number of times, make\n                // sure it is safe to call multiple times.\n                if (resolved) {\n                    return;\n                }\n                const { hash, path, search } = args;\n                const query = URLExt.queryStringToObject(search || '');\n                const clone = typeof query['clone'] === 'string'\n                    ? query['clone'] === ''\n                        ? PageConfig.defaultWorkspace\n                        : query['clone']\n                    : null;\n                const source = clone || workspace || null;\n                if (source === null) {\n                    console.error(`${CommandIDs.loadState} cannot load null workspace.`);\n                    return;\n                }\n                try {\n                    const saved = await workspaces.fetch(source);\n                    // If this command is called after a reset, the state database\n                    // will already be resolved.\n                    if (!resolved) {\n                        resolved = true;\n                        transform.resolve({ type: 'overwrite', contents: saved.data });\n                    }\n                }\n                catch ({ message }) {\n                    console.warn(`Fetching workspace \"${workspace}\" failed.`, message);\n                    // If the workspace does not exist, cancel the data transformation\n                    // and save a workspace with the current user state data.\n                    if (!resolved) {\n                        resolved = true;\n                        transform.resolve({ type: 'cancel', contents: null });\n                    }\n                }\n                if (source === clone) {\n                    // Maintain the query string parameters but remove `clone`.\n                    delete query['clone'];\n                    const url = path + URLExt.objectToQueryString(query) + hash;\n                    const cloned = save.invoke().then(() => router.stop);\n                    // After the state has been cloned, navigate to the URL.\n                    void cloned.then(() => {\n                        router.navigate(url);\n                    });\n                    return cloned;\n                }\n                // After the state database has finished loading, save it.\n                await save.invoke();\n            }\n        });\n        commands.addCommand(CommandIDs.reset, {\n            label: trans.__('Reset Application State'),\n            execute: async ({ reload }) => {\n                await db.clear();\n                await save.invoke();\n                if (reload) {\n                    router.reload();\n                }\n            }\n        });\n        commands.addCommand(CommandIDs.resetOnLoad, {\n            label: trans.__('Reset state when loading for the workspace.'),\n            execute: (args) => {\n                const { hash, path, search } = args;\n                const query = URLExt.queryStringToObject(search || '');\n                const reset = 'reset' in query;\n                const clone = 'clone' in query;\n                if (!reset) {\n                    return;\n                }\n                // If the state database has already been resolved, resetting is\n                // impossible without reloading.\n                if (resolved) {\n                    return router.reload();\n                }\n                // Empty the state database.\n                resolved = true;\n                transform.resolve({ type: 'clear', contents: null });\n                // Maintain the query string parameters but remove `reset`.\n                delete query['reset'];\n                const url = path + URLExt.objectToQueryString(query) + hash;\n                const cleared = db.clear().then(() => save.invoke());\n                // After the state has been reset, navigate to the URL.\n                if (clone) {\n                    void cleared.then(() => {\n                        router.navigate(url, { hard: true });\n                    });\n                }\n                else {\n                    void cleared.then(() => {\n                        router.navigate(url);\n                    });\n                }\n                return cleared;\n            }\n        });\n        router.register({\n            command: CommandIDs.loadState,\n            pattern: /.?/,\n            rank: 30 // High priority: 30:100.\n        });\n        router.register({\n            command: CommandIDs.resetOnLoad,\n            pattern: /(\\?reset|\\&reset)($|&)/,\n            rank: 20 // High priority: 20:100.\n        });\n        return db;\n    }\n};\n/**\n * The default session context dialogs extension.\n */\nconst sessionDialogs = {\n    id: '@jupyterlab/apputils-extension:sessionDialogs',\n    description: 'Provides the session context dialogs.',\n    provides: ISessionContextDialogs,\n    optional: [ITranslator, ISettingRegistry],\n    autoStart: true,\n    activate: async (app, translator, settingRegistry) => {\n        return new SessionContextDialogs({\n            translator: translator !== null && translator !== void 0 ? translator : nullTranslator,\n            settingRegistry: settingRegistry !== null && settingRegistry !== void 0 ? settingRegistry : null\n        });\n    }\n};\n/**\n * Utility commands\n */\nconst utilityCommands = {\n    id: '@jupyterlab/apputils-extension:utilityCommands',\n    description: 'Adds meta commands to run set of other commands.',\n    requires: [ITranslator],\n    optional: [ICommandPalette],\n    autoStart: true,\n    activate: (app, translator, palette) => {\n        const trans = translator.load('jupyterlab');\n        const { commands } = app;\n        commands.addCommand(CommandIDs.runFirstEnabled, {\n            label: trans.__('Run First Enabled Command'),\n            execute: args => {\n                const commands = args.commands;\n                const commandArgs = args.args;\n                const argList = Array.isArray(args);\n                for (let i = 0; i < commands.length; i++) {\n                    const cmd = commands[i];\n                    const arg = argList ? commandArgs[i] : commandArgs;\n                    if (app.commands.isEnabled(cmd, arg)) {\n                        return app.commands.execute(cmd, arg);\n                    }\n                }\n            }\n        });\n        // Add a command for taking lists of commands and command arguments\n        // and running all the enabled commands.\n        commands.addCommand(CommandIDs.runAllEnabled, {\n            label: trans.__('Run All Enabled Commands Passed as Args'),\n            execute: async (args) => {\n                var _a, _b;\n                const commands = (_a = args.commands) !== null && _a !== void 0 ? _a : [];\n                const commandArgs = args.args;\n                const argList = Array.isArray(args);\n                const errorIfNotEnabled = (_b = args.errorIfNotEnabled) !== null && _b !== void 0 ? _b : false;\n                for (let i = 0; i < commands.length; i++) {\n                    const cmd = commands[i];\n                    const arg = argList ? commandArgs[i] : commandArgs;\n                    if (app.commands.isEnabled(cmd, arg)) {\n                        await app.commands.execute(cmd, arg);\n                    }\n                    else {\n                        if (errorIfNotEnabled) {\n                            console.error(`${cmd} is not enabled.`);\n                        }\n                    }\n                }\n            },\n            isEnabled: args => {\n                var _a;\n                const commands = (_a = args.commands) !== null && _a !== void 0 ? _a : [];\n                const commandArgs = args.args;\n                const argList = Array.isArray(args);\n                return commands.some((cmd, idx) => app.commands.isEnabled(cmd, argList ? commandArgs[idx] : commandArgs));\n            }\n        });\n        commands.addCommand(CommandIDs.displayShortcuts, {\n            label: trans.__('Show Keyboard Shortcuts…'),\n            caption: trans.__('Show relevant keyboard shortcuts for the current active widget'),\n            execute: args => {\n                var _a;\n                const currentWidget = app.shell.currentWidget;\n                const included = currentWidget === null || currentWidget === void 0 ? void 0 : currentWidget.node.contains(document.activeElement);\n                if (!included && currentWidget instanceof MainAreaWidget) {\n                    const currentNode = (_a = currentWidget.content.node) !== null && _a !== void 0 ? _a : currentWidget === null || currentWidget === void 0 ? void 0 : currentWidget.node;\n                    currentNode === null || currentNode === void 0 ? void 0 : currentNode.focus();\n                }\n                const options = { commands, trans };\n                return displayShortcuts(options);\n            }\n        });\n        if (palette) {\n            const category = trans.__('Help');\n            palette.addItem({ command: CommandIDs.displayShortcuts, category });\n        }\n    }\n};\n/**\n * The default HTML sanitizer.\n */\nconst sanitizer = {\n    id: '@jupyterlab/apputils-extension:sanitizer',\n    description: 'Provides the HTML sanitizer.',\n    autoStart: true,\n    provides: ISanitizer,\n    requires: [ISettingRegistry],\n    activate: (app, settings) => {\n        const sanitizer = new Sanitizer();\n        const loadSetting = (setting) => {\n            const allowedSchemes = setting.get('allowedSchemes')\n                .composite;\n            const autolink = setting.get('autolink').composite;\n            const allowNamedProperties = setting.get('allowNamedProperties')\n                .composite;\n            if (allowedSchemes) {\n                sanitizer.setAllowedSchemes(allowedSchemes);\n            }\n            sanitizer.setAutolink(autolink);\n            sanitizer.setAllowNamedProperties(allowNamedProperties);\n        };\n        // Wait for the application to be restored and\n        // for the settings for this plugin to be loaded\n        settings\n            .load('@jupyterlab/apputils-extension:sanitizer')\n            .then(setting => {\n            // Read the settings\n            loadSetting(setting);\n            // Listen for your plugin setting changes using Signal\n            setting.changed.connect(loadSetting);\n        })\n            .catch(reason => {\n            console.error(`Failed to load sanitizer settings:`, reason);\n        });\n        return sanitizer;\n    }\n};\n/*\n * A plugin owning the kernel settings\n */\nexport const kernelSettings = {\n    id: '@jupyterlab/apputils-extension:kernels-settings',\n    description: 'Reserves the name for kernel settings.',\n    autoStart: true,\n    requires: [ISettingRegistry],\n    activate: (_app, settingRegistry) => {\n        void settingRegistry.load(kernelSettings.id);\n    }\n};\n/**\n * Export the plugins as default.\n */\nconst plugins = [\n    kernelSettings,\n    announcements,\n    kernelStatus,\n    licensesClient,\n    licensesPlugin,\n    notificationPlugin,\n    palette,\n    paletteRestorer,\n    print,\n    resolver,\n    runningSessionsStatus,\n    subshellsSettings,\n    sanitizer,\n    settingsConnector,\n    settingsPlugin,\n    state,\n    splash,\n    sessionDialogs,\n    themesPlugin,\n    themesPaletteMenuPlugin,\n    toggleHeader,\n    toolbarRegistry,\n    utilityCommands,\n    workspacesPlugin\n];\nexport default plugins;\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/statusbar/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/mainmenu/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { RestorablePool } from '@jupyterlab/statedb';\nimport { Signal } from '@lumino/signaling';\nimport { FocusTracker } from '@lumino/widgets';\n/**\n * A class that keeps track of widget instances on an Application shell.\n *\n * @typeparam T - The type of widget being tracked. Defaults to `Widget`.\n *\n * #### Notes\n * The API surface area of this concrete implementation is substantially larger\n * than the widget tracker interface it implements. The interface is intended\n * for export by JupyterLab plugins that create widgets and have clients who may\n * wish to keep track of newly created widgets. This class, however, can be used\n * internally by plugins to restore state as well.\n */\nexport class WidgetTracker {\n    /**\n     * Create a new widget tracker.\n     *\n     * @param options - The instantiation options for a widget tracker.\n     */\n    constructor(options) {\n        this._currentChanged = new Signal(this);\n        this._deferred = null;\n        this._isDisposed = false;\n        this._widgetAdded = new Signal(this);\n        this._widgetUpdated = new Signal(this);\n        const focus = (this._focusTracker = new FocusTracker());\n        const pool = (this._pool = new RestorablePool(options));\n        this.namespace = options.namespace;\n        focus.currentChanged.connect((_, current) => {\n            if (current.newValue !== this.currentWidget) {\n                pool.current = current.newValue;\n            }\n        }, this);\n        pool.added.connect((_, widget) => {\n            this._widgetAdded.emit(widget);\n        }, this);\n        pool.currentChanged.connect((_, widget) => {\n            // If the pool's current reference is `null` but the focus tracker has a\n            // current widget, update the pool to match the focus tracker.\n            if (widget === null && focus.currentWidget) {\n                pool.current = focus.currentWidget;\n                return;\n            }\n            this.onCurrentChanged(widget);\n            this._currentChanged.emit(widget);\n        }, this);\n        pool.updated.connect((_, widget) => {\n            this._widgetUpdated.emit(widget);\n        }, this);\n    }\n    /**\n     * A signal emitted when the current widget changes.\n     */\n    get currentChanged() {\n        return this._currentChanged;\n    }\n    /**\n     * The current widget is the most recently focused or added widget.\n     *\n     * #### Notes\n     * It is the most recently focused widget, or the most recently added\n     * widget if no widget has taken focus.\n     */\n    get currentWidget() {\n        return this._pool.current || null;\n    }\n    /**\n     * A promise resolved when the tracker has been restored.\n     */\n    get restored() {\n        if (this._deferred) {\n            return Promise.resolve();\n        }\n        else {\n            return this._pool.restored;\n        }\n    }\n    /**\n     * The number of widgets held by the tracker.\n     */\n    get size() {\n        return this._pool.size;\n    }\n    /**\n     * A signal emitted when a widget is added.\n     *\n     * #### Notes\n     * This signal will only fire when a widget is added to the tracker. It will\n     * not fire if a widget is injected into the tracker.\n     */\n    get widgetAdded() {\n        return this._widgetAdded;\n    }\n    /**\n     * A signal emitted when a widget is updated.\n     */\n    get widgetUpdated() {\n        return this._widgetUpdated;\n    }\n    /**\n     * Add a new widget to the tracker.\n     *\n     * @param widget - The widget being added.\n     *\n     * #### Notes\n     * The widget passed into the tracker is added synchronously; its existence in\n     * the tracker can be checked with the `has()` method. The promise this method\n     * returns resolves after the widget has been added and saved to an underlying\n     * restoration connector, if one is available.\n     *\n     * The newly added widget becomes the current widget unless the focus tracker\n     * already had a focused widget.\n     */\n    async add(widget) {\n        this._focusTracker.add(widget);\n        await this._pool.add(widget);\n        if (!this._focusTracker.activeWidget) {\n            this._pool.current = widget;\n        }\n    }\n    /**\n     * Test whether the tracker is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the tracker.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._pool.dispose();\n        this._focusTracker.dispose();\n        Signal.clearData(this);\n    }\n    /**\n     * Find the first widget in the tracker that satisfies a filter function.\n     *\n     * @param fn The filter function to call on each widget.\n     *\n     * #### Notes\n     * If no widget is found, the value returned is `undefined`.\n     */\n    find(fn) {\n        return this._pool.find(fn);\n    }\n    /**\n     * Iterate through each widget in the tracker.\n     *\n     * @param fn - The function to call on each widget.\n     */\n    forEach(fn) {\n        return this._pool.forEach(fn);\n    }\n    /**\n     * Filter the widgets in the tracker based on a predicate.\n     *\n     * @param fn - The function by which to filter.\n     */\n    filter(fn) {\n        return this._pool.filter(fn);\n    }\n    /**\n     * Inject a foreign widget into the widget tracker.\n     *\n     * @param widget - The widget to inject into the tracker.\n     *\n     * #### Notes\n     * Injected widgets will not have their state saved by the tracker.\n     *\n     * The primary use case for widget injection is for a plugin that offers a\n     * sub-class of an extant plugin to have its instances share the same commands\n     * as the parent plugin (since most relevant commands will use the\n     * `currentWidget` of the parent plugin's widget tracker). In this situation,\n     * the sub-class plugin may well have its own widget tracker for layout and\n     * state restoration in addition to injecting its widgets into the parent\n     * plugin's widget tracker.\n     */\n    inject(widget) {\n        return this._pool.inject(widget);\n    }\n    /**\n     * Check if this tracker has the specified widget.\n     *\n     * @param widget - The widget whose existence is being checked.\n     */\n    has(widget) {\n        return this._pool.has(widget);\n    }\n    /**\n     * Restore the widgets in this tracker's namespace.\n     *\n     * @param options - The configuration options that describe restoration.\n     *\n     * @returns A promise that resolves when restoration has completed.\n     *\n     * #### Notes\n     * This function should not typically be invoked by client code.\n     * Its primary use case is to be invoked by a restorer.\n     */\n    async restore(options) {\n        const deferred = this._deferred;\n        if (deferred) {\n            this._deferred = null;\n            return this._pool.restore(deferred);\n        }\n        if (options) {\n            return this._pool.restore(options);\n        }\n        console.warn('No options provided to restore the tracker.');\n    }\n    /**\n     * Save the restore options for this tracker, but do not restore yet.\n     *\n     * @param options - The configuration options that describe restoration.\n     *\n     * ### Notes\n     * This function is useful when starting the shell in 'single-document' mode,\n     * to avoid restoring all useless widgets. It should not ordinarily be called\n     * by client code.\n     */\n    defer(options) {\n        this._deferred = options;\n    }\n    /**\n     * Save the restore data for a given widget.\n     *\n     * @param widget - The widget being saved.\n     */\n    async save(widget) {\n        return this._pool.save(widget);\n    }\n    /**\n     * Handle the current change event.\n     *\n     * #### Notes\n     * The default implementation is a no-op.\n     */\n    onCurrentChanged(value) {\n        /* no-op */\n    }\n}\n//# sourceMappingURL=widgettracker.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { Button, closeIcon, LabIcon, ReactWidget, Styling } from '@jupyterlab/ui-components';\nimport { ArrayExt } from '@lumino/algorithm';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { MessageLoop } from '@lumino/messaging';\nimport { Panel, PanelLayout, Widget } from '@lumino/widgets';\nimport * as React from 'react';\nimport { WidgetTracker } from './widgettracker';\n/**\n * Create and show a dialog.\n *\n * @param options - The dialog setup options.\n *\n * @returns A promise that resolves with whether the dialog was accepted.\n */\nexport function showDialog(options = {}) {\n    const dialog = new Dialog(options);\n    return dialog.launch();\n}\n/**\n * Show an error message dialog.\n *\n * @param title - The title of the dialog box.\n *\n * @param error - the error to show in the dialog body (either a string\n *   or an object with a string `message` property).\n */\nexport function showErrorMessage(title, error, buttons) {\n    const trans = Dialog.translator.load('jupyterlab');\n    buttons = buttons !== null && buttons !== void 0 ? buttons : [Dialog.cancelButton({ label: trans.__('Close') })];\n    console.warn('Showing error:', error);\n    // Cache promises to prevent multiple copies of identical dialogs showing\n    // to the user.\n    const body = typeof error === 'string' ? error : error.message;\n    const key = title + '----' + body;\n    const promise = Private.errorMessagePromiseCache.get(key);\n    if (promise) {\n        return promise;\n    }\n    else {\n        const dialogPromise = showDialog({\n            title: title,\n            body: body,\n            buttons: buttons\n        }).then(() => {\n            Private.errorMessagePromiseCache.delete(key);\n        }, error => {\n            // TODO: Use .finally() above when supported\n            Private.errorMessagePromiseCache.delete(key);\n            throw error;\n        });\n        Private.errorMessagePromiseCache.set(key, dialogPromise);\n        return dialogPromise;\n    }\n}\n/**\n * A modal dialog widget.\n */\nexport class Dialog extends Widget {\n    /**\n     * Create a dialog panel instance.\n     *\n     * @param options - The dialog setup options.\n     */\n    constructor(options = {}) {\n        const dialogNode = document.createElement('dialog');\n        dialogNode.ariaModal = 'true';\n        super({ node: dialogNode });\n        this._hasValidationErrors = false;\n        this._ready = new PromiseDelegate();\n        this._focusNodeSelector = '';\n        this.addClass('jp-Dialog');\n        this.addClass('jp-ThemedContainer');\n        const normalized = Private.handleOptions(options);\n        const renderer = normalized.renderer;\n        this._host = normalized.host;\n        this._defaultButton = normalized.defaultButton;\n        this._buttons = normalized.buttons;\n        this._hasClose = normalized.hasClose;\n        this._buttonNodes = this._buttons.map(b => renderer.createButtonNode(b));\n        this._checkboxNode = null;\n        this._lastMouseDownInDialog = false;\n        if (normalized.checkbox) {\n            const { label = '', caption = '', checked = false, className = '' } = normalized.checkbox;\n            this._checkboxNode = renderer.createCheckboxNode({\n                label,\n                caption: caption !== null && caption !== void 0 ? caption : label,\n                checked,\n                className\n            });\n        }\n        const layout = (this.layout = new PanelLayout());\n        const content = new Panel();\n        content.addClass('jp-Dialog-content');\n        if (typeof options.body === 'string') {\n            content.addClass('jp-Dialog-content-small');\n            dialogNode.ariaLabel = [normalized.title, options.body].join(' ');\n        }\n        layout.addWidget(content);\n        this._body = normalized.body;\n        const header = renderer.createHeader(normalized.title, () => this.reject(), options);\n        const body = renderer.createBody(normalized.body);\n        const footer = renderer.createFooter(this._buttonNodes, this._checkboxNode);\n        content.addWidget(header);\n        content.addWidget(body);\n        content.addWidget(footer);\n        this._bodyWidget = body;\n        this._primary = this._buttonNodes[this._defaultButton];\n        this._focusNodeSelector = options.focusNodeSelector;\n        // Add new dialogs to the tracker.\n        void Dialog.tracker.add(this);\n    }\n    /**\n     * A promise that resolves when the Dialog first rendering is done.\n     */\n    get ready() {\n        return this._ready.promise;\n    }\n    /**\n     * Dispose of the resources used by the dialog.\n     */\n    dispose() {\n        const promise = this._promise;\n        if (promise) {\n            this._promise = null;\n            promise.reject(void 0);\n            ArrayExt.removeFirstOf(Private.launchQueue, promise.promise);\n        }\n        super.dispose();\n    }\n    /**\n     * Launch the dialog as a modal window.\n     *\n     * @returns a promise that resolves with the result of the dialog.\n     */\n    launch() {\n        // Return the existing dialog if already open.\n        if (this._promise) {\n            return this._promise.promise;\n        }\n        const promise = (this._promise = new PromiseDelegate());\n        const promises = Promise.all(Private.launchQueue);\n        Private.launchQueue.push(this._promise.promise);\n        return promises.then(() => {\n            // Do not show Dialog if it was disposed of before it was at the front of the launch queue\n            if (!this._promise) {\n                return Promise.resolve({\n                    button: Dialog.cancelButton(),\n                    isChecked: null,\n                    value: null\n                });\n            }\n            Widget.attach(this, this._host);\n            return promise.promise;\n        });\n    }\n    /**\n     * Resolve the current dialog.\n     *\n     * @param index - An optional index to the button to resolve.\n     *\n     * #### Notes\n     * Will default to the defaultIndex.\n     * Will resolve the current `show()` with the button value.\n     * Will be a no-op if the dialog is not shown.\n     */\n    resolve(index) {\n        if (!this._promise) {\n            return;\n        }\n        if (index === undefined) {\n            index = this._defaultButton;\n        }\n        this._resolve(this._buttons[index]);\n    }\n    /**\n     * Reject the current dialog with a default reject value.\n     *\n     * #### Notes\n     * Will be a no-op if the dialog is not shown.\n     */\n    reject() {\n        if (!this._promise) {\n            return;\n        }\n        this._resolve(Dialog.cancelButton());\n    }\n    /**\n     * Handle the DOM events for the directory listing.\n     *\n     * @param event - The DOM event sent to the widget.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the panel's DOM node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'keydown':\n                this._evtKeydown(event);\n                break;\n            case 'mousedown':\n                this._evtMouseDown(event);\n                break;\n            case 'click':\n                this._evtClick(event);\n                break;\n            case 'input':\n                this._evtInput(event);\n                break;\n            case 'focus':\n                this._evtFocus(event);\n                break;\n            case 'contextmenu':\n                event.preventDefault();\n                event.stopPropagation();\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     *  A message handler invoked on an `'after-attach'` message.\n     */\n    onAfterAttach(msg) {\n        const node = this.node;\n        node.addEventListener('keydown', this, true);\n        node.addEventListener('contextmenu', this, true);\n        node.addEventListener('click', this, true);\n        document.addEventListener('mousedown', this, true);\n        document.addEventListener('focus', this, true);\n        document.addEventListener('input', this, true);\n        this._first = Private.findFirstFocusable(this.node);\n        this._original = document.activeElement;\n        const setFocus = () => {\n            var _a;\n            if (this._focusNodeSelector) {\n                const body = this.node.querySelector('.jp-Dialog-body');\n                const el = body === null || body === void 0 ? void 0 : body.querySelector(this._focusNodeSelector);\n                if (el) {\n                    this._primary = el;\n                }\n            }\n            (_a = this._primary) === null || _a === void 0 ? void 0 : _a.focus();\n            this._ready.resolve();\n        };\n        if (this._bodyWidget instanceof ReactWidget &&\n            this._bodyWidget.renderPromise !== undefined) {\n            this._bodyWidget\n                .renderPromise.then(() => {\n                setFocus();\n            })\n                .catch(() => {\n                console.error(\"Error while loading Dialog's body\");\n            });\n        }\n        else {\n            setFocus();\n        }\n    }\n    /**\n     *  A message handler invoked on an `'after-detach'` message.\n     */\n    onAfterDetach(msg) {\n        const node = this.node;\n        node.removeEventListener('keydown', this, true);\n        node.removeEventListener('contextmenu', this, true);\n        node.removeEventListener('click', this, true);\n        document.removeEventListener('focus', this, true);\n        document.removeEventListener('mousedown', this, true);\n        document.removeEventListener('input', this, true);\n        this._original.focus();\n    }\n    /**\n     * A message handler invoked on a `'close-request'` message.\n     */\n    onCloseRequest(msg) {\n        if (this._promise) {\n            this.reject();\n        }\n        super.onCloseRequest(msg);\n    }\n    /**\n     * Handle the `'input'` event for dialog's children.\n     *\n     * @param event - The DOM event sent to the widget\n     */\n    _evtInput(_event) {\n        this._hasValidationErrors = !!this.node.querySelector(':invalid');\n        for (let i = 0; i < this._buttons.length; i++) {\n            if (this._buttons[i].accept) {\n                this._buttonNodes[i].disabled = this._hasValidationErrors;\n            }\n        }\n    }\n    /**\n     * Handle the `'click'` event for a dialog button.\n     *\n     * @param event - The DOM event sent to the widget\n     */\n    _evtClick(event) {\n        const content = this.node.getElementsByClassName('jp-Dialog-content')[0];\n        if (!content.contains(event.target)) {\n            event.stopPropagation();\n            event.preventDefault();\n            if (this._hasClose && !this._lastMouseDownInDialog) {\n                this.reject();\n            }\n            return;\n        }\n        for (const buttonNode of this._buttonNodes) {\n            if (buttonNode.contains(event.target)) {\n                const index = this._buttonNodes.indexOf(buttonNode);\n                this.resolve(index);\n            }\n        }\n    }\n    /**\n     * Handle the `'keydown'` event for the widget.\n     *\n     * @param event - The DOM event sent to the widget\n     */\n    _evtKeydown(event) {\n        // Check for escape key\n        switch (event.keyCode) {\n            case 27: // Escape.\n                event.stopPropagation();\n                event.preventDefault();\n                if (this._hasClose) {\n                    this.reject();\n                }\n                break;\n            case 37: {\n                // Left arrow\n                const activeEl = document.activeElement;\n                if (activeEl instanceof HTMLButtonElement) {\n                    let idx = this._buttonNodes.indexOf(activeEl) - 1;\n                    // Handle a left arrows on the first button\n                    if (idx < 0) {\n                        idx = this._buttonNodes.length - 1;\n                    }\n                    const node = this._buttonNodes[idx];\n                    event.stopPropagation();\n                    event.preventDefault();\n                    node.focus();\n                }\n                break;\n            }\n            case 39: {\n                // Right arrow\n                const activeEl = document.activeElement;\n                if (activeEl instanceof HTMLButtonElement) {\n                    let idx = this._buttonNodes.indexOf(activeEl) + 1;\n                    // Handle a right arrows on the last button\n                    if (idx == this._buttons.length) {\n                        idx = 0;\n                    }\n                    const node = this._buttonNodes[idx];\n                    event.stopPropagation();\n                    event.preventDefault();\n                    node.focus();\n                }\n                break;\n            }\n            case 9: {\n                // Tab.\n                // Handle a tab on the last button.\n                const node = this._buttonNodes[this._buttons.length - 1];\n                if (document.activeElement === node && !event.shiftKey) {\n                    event.stopPropagation();\n                    event.preventDefault();\n                    this._first.focus();\n                }\n                break;\n            }\n            case 13: {\n                // Enter.\n                event.stopPropagation();\n                event.preventDefault();\n                const activeEl = document.activeElement;\n                if (activeEl instanceof HTMLButtonElement) {\n                    const index = this._buttonNodes.indexOf(activeEl);\n                    if (index !== -1) {\n                        this.resolve(index);\n                    }\n                }\n                else if (!(activeEl instanceof HTMLTextAreaElement)) {\n                    const index = this._defaultButton;\n                    this.resolve(index);\n                }\n                break;\n            }\n            default:\n                break;\n        }\n    }\n    /**\n     * Handle the `'focus'` event for the widget.\n     *\n     * @param event - The DOM event sent to the widget\n     */\n    _evtFocus(event) {\n        var _a;\n        const target = event.target;\n        if (!this.node.contains(target)) {\n            event.stopPropagation();\n            (_a = this._buttonNodes[this._defaultButton]) === null || _a === void 0 ? void 0 : _a.focus();\n        }\n    }\n    /**\n     * Handle the `'mousedown'` event for the widget.\n     *\n     * @param event - The DOM event sent to the widget\n     */\n    _evtMouseDown(event) {\n        const content = this.node.getElementsByClassName('jp-Dialog-content')[0];\n        const target = event.target;\n        this._lastMouseDownInDialog = content.contains(target);\n    }\n    /**\n     * Resolve a button item.\n     */\n    _resolve(button) {\n        var _a, _b, _c;\n        if (this._hasValidationErrors && button.accept) {\n            // Do not allow accepting with validation errors\n            return;\n        }\n        // Prevent loopback.\n        const promise = this._promise;\n        if (!promise) {\n            this.dispose();\n            return;\n        }\n        this._promise = null;\n        ArrayExt.removeFirstOf(Private.launchQueue, promise.promise);\n        const body = this._body;\n        let value = null;\n        if (button.accept &&\n            body instanceof Widget &&\n            typeof body.getValue === 'function') {\n            value = body.getValue();\n        }\n        this.dispose();\n        promise.resolve({\n            button,\n            isChecked: (_c = (_b = (_a = this._checkboxNode) === null || _a === void 0 ? void 0 : _a.querySelector('input')) === null || _b === void 0 ? void 0 : _b.checked) !== null && _c !== void 0 ? _c : null,\n            value\n        });\n    }\n}\n/**\n * The namespace for Dialog class statics.\n */\n(function (Dialog) {\n    /**\n     * Translator object.\n     */\n    Dialog.translator = nullTranslator;\n    /**\n     * Create a button item.\n     */\n    function createButton(value) {\n        value.accept = value.accept !== false;\n        const trans = Dialog.translator.load('jupyterlab');\n        const defaultLabel = value.accept ? trans.__('Ok') : trans.__('Cancel');\n        return {\n            ariaLabel: value.ariaLabel || value.label || defaultLabel,\n            label: value.label || defaultLabel,\n            iconClass: value.iconClass || '',\n            iconLabel: value.iconLabel || '',\n            caption: value.caption || '',\n            className: value.className || '',\n            accept: value.accept,\n            actions: value.actions || [],\n            displayType: value.displayType || 'default'\n        };\n    }\n    Dialog.createButton = createButton;\n    /**\n     * Create a reject button.\n     */\n    function cancelButton(options = {}) {\n        options.accept = false;\n        return createButton(options);\n    }\n    Dialog.cancelButton = cancelButton;\n    /**\n     * Create an accept button.\n     */\n    function okButton(options = {}) {\n        options.accept = true;\n        return createButton(options);\n    }\n    Dialog.okButton = okButton;\n    /**\n     * Create a warn button.\n     */\n    function warnButton(options = {}) {\n        options.displayType = 'warn';\n        return createButton(options);\n    }\n    Dialog.warnButton = warnButton;\n    /**\n     * Disposes all dialog instances.\n     *\n     * #### Notes\n     * This function should only be used in tests or cases where application state\n     * may be discarded.\n     */\n    function flush() {\n        Dialog.tracker.forEach(dialog => {\n            dialog.dispose();\n        });\n    }\n    Dialog.flush = flush;\n    /**\n     * The default implementation of a dialog renderer.\n     */\n    class Renderer {\n        /**\n         * Create the header of the dialog.\n         *\n         * @param title - The title of the dialog.\n         *\n         * @returns A widget for the dialog header.\n         */\n        createHeader(title, reject = () => {\n            /* empty */\n        }, options = {}) {\n            let header;\n            const handleMouseDown = (event) => {\n                // Fire action only when left button is pressed.\n                if (event.button === 0) {\n                    event.preventDefault();\n                    reject();\n                }\n            };\n            const handleKeyDown = (event) => {\n                const { key } = event;\n                if (key === 'Enter' || key === ' ') {\n                    reject();\n                }\n            };\n            if (typeof title === 'string') {\n                const trans = Dialog.translator.load('jupyterlab');\n                header = ReactWidget.create(React.createElement(React.Fragment, null,\n                    title,\n                    options.hasClose && (React.createElement(Button, { className: \"jp-Dialog-close-button\", onMouseDown: handleMouseDown, onKeyDown: handleKeyDown, title: trans.__('Cancel'), minimal: true },\n                        React.createElement(LabIcon.resolveReact, { icon: closeIcon, tag: \"span\" })))));\n            }\n            else {\n                header = ReactWidget.create(title);\n            }\n            header.addClass('jp-Dialog-header');\n            Styling.styleNode(header.node);\n            return header;\n        }\n        /**\n         * Create the body of the dialog.\n         *\n         * @param value - The input value for the body.\n         *\n         * @returns A widget for the body.\n         */\n        createBody(value) {\n            const styleReactWidget = (widget) => {\n                if (widget.renderPromise !== undefined) {\n                    widget.renderPromise\n                        .then(() => {\n                        Styling.styleNode(widget.node);\n                    })\n                        .catch(() => {\n                        console.error(\"Error while loading Dialog's body\");\n                    });\n                }\n                else {\n                    Styling.styleNode(widget.node);\n                }\n            };\n            let body;\n            if (typeof value === 'string') {\n                body = new Widget({ node: document.createElement('span') });\n                body.node.textContent = value;\n            }\n            else if (value instanceof Widget) {\n                body = value;\n                if (body instanceof ReactWidget) {\n                    styleReactWidget(body);\n                }\n                else {\n                    Styling.styleNode(body.node);\n                }\n            }\n            else {\n                body = ReactWidget.create(value);\n                // Immediately update the body even though it has not yet attached in\n                // order to trigger a render of the DOM nodes from the React element.\n                MessageLoop.sendMessage(body, Widget.Msg.UpdateRequest);\n                styleReactWidget(body);\n            }\n            body.addClass('jp-Dialog-body');\n            return body;\n        }\n        /**\n         * Create the footer of the dialog.\n         *\n         * @param buttons - The buttons nodes to add to the footer.\n         * @param checkbox - The checkbox node to add to the footer.\n         *\n         * @returns A widget for the footer.\n         */\n        createFooter(buttons, checkbox) {\n            const footer = new Widget();\n            footer.addClass('jp-Dialog-footer');\n            if (checkbox) {\n                footer.node.appendChild(checkbox);\n                footer.node.insertAdjacentHTML('beforeend', '<div class=\"jp-Dialog-spacer\"></div>');\n            }\n            const footerButton = document.createElement('div');\n            for (const button of buttons) {\n                footerButton.appendChild(button);\n            }\n            footer.node.appendChild(footerButton);\n            Styling.styleNode(footer.node);\n            return footer;\n        }\n        /**\n         * Create a button node for the dialog.\n         *\n         * @param button - The button data.\n         *\n         * @returns A node for the button.\n         */\n        createButtonNode(button) {\n            const e = document.createElement('button');\n            e.className = this.createItemClass(button);\n            e.appendChild(this.renderIcon(button));\n            e.appendChild(this.renderLabel(button));\n            return e;\n        }\n        /**\n         * Create a checkbox node for the dialog.\n         *\n         * @param checkbox - The checkbox data.\n         *\n         * @returns A node for the checkbox.\n         */\n        createCheckboxNode(checkbox) {\n            const e = document.createElement('label');\n            e.className = 'jp-Dialog-checkbox';\n            if (checkbox.className) {\n                e.classList.add(checkbox.className);\n            }\n            e.title = checkbox.caption;\n            e.textContent = checkbox.label;\n            const input = document.createElement('input');\n            input.type = 'checkbox';\n            input.checked = !!checkbox.checked;\n            e.insertAdjacentElement('afterbegin', input);\n            return e;\n        }\n        /**\n         * Create the class name for the button.\n         *\n         * @param data - The data to use for the class name.\n         *\n         * @returns The full class name for the button.\n         */\n        createItemClass(data) {\n            // Setup the initial class name.\n            let name = 'jp-Dialog-button';\n            // Add the other state classes.\n            if (data.accept) {\n                name += ' jp-mod-accept';\n            }\n            else {\n                name += ' jp-mod-reject';\n            }\n            if (data.displayType === 'warn') {\n                name += ' jp-mod-warn';\n            }\n            // Add the extra class.\n            const extra = data.className;\n            if (extra) {\n                name += ` ${extra}`;\n            }\n            // Return the complete class name.\n            return name;\n        }\n        /**\n         * Render an icon element for a dialog item.\n         *\n         * @param data - The data to use for rendering the icon.\n         *\n         * @returns An HTML element representing the icon.\n         */\n        renderIcon(data) {\n            const e = document.createElement('div');\n            e.className = this.createIconClass(data);\n            e.appendChild(document.createTextNode(data.iconLabel));\n            return e;\n        }\n        /**\n         * Create the class name for the button icon.\n         *\n         * @param data - The data to use for the class name.\n         *\n         * @returns The full class name for the item icon.\n         */\n        createIconClass(data) {\n            const name = 'jp-Dialog-buttonIcon';\n            const extra = data.iconClass;\n            return extra ? `${name} ${extra}` : name;\n        }\n        /**\n         * Render the label element for a button.\n         *\n         * @param data - The data to use for rendering the label.\n         *\n         * @returns An HTML element representing the item label.\n         */\n        renderLabel(data) {\n            const e = document.createElement('div');\n            e.className = 'jp-Dialog-buttonLabel';\n            e.title = data.caption;\n            e.ariaLabel = data.ariaLabel;\n            e.appendChild(document.createTextNode(data.label));\n            return e;\n        }\n    }\n    Dialog.Renderer = Renderer;\n    /**\n     * The default renderer instance.\n     */\n    Dialog.defaultRenderer = new Renderer();\n    /**\n     * The dialog widget tracker.\n     */\n    Dialog.tracker = new WidgetTracker({\n        namespace: '@jupyterlab/apputils:Dialog'\n    });\n})(Dialog || (Dialog = {}));\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The queue for launching dialogs.\n     */\n    Private.launchQueue = [];\n    Private.errorMessagePromiseCache = new Map();\n    /**\n     * Handle the input options for a dialog.\n     *\n     * @param options - The input options.\n     *\n     * @returns A new options object with defaults applied.\n     */\n    function handleOptions(options = {}) {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n        const buttons = (_a = options.buttons) !== null && _a !== void 0 ? _a : [\n            Dialog.cancelButton(),\n            Dialog.okButton()\n        ];\n        return {\n            title: (_b = options.title) !== null && _b !== void 0 ? _b : '',\n            body: (_c = options.body) !== null && _c !== void 0 ? _c : '',\n            host: (_d = options.host) !== null && _d !== void 0 ? _d : document.body,\n            checkbox: (_e = options.checkbox) !== null && _e !== void 0 ? _e : null,\n            buttons,\n            defaultButton: (_f = options.defaultButton) !== null && _f !== void 0 ? _f : buttons.length - 1,\n            renderer: (_g = options.renderer) !== null && _g !== void 0 ? _g : Dialog.defaultRenderer,\n            focusNodeSelector: (_h = options.focusNodeSelector) !== null && _h !== void 0 ? _h : '',\n            hasClose: (_j = options.hasClose) !== null && _j !== void 0 ? _j : true\n        };\n    }\n    Private.handleOptions = handleOptions;\n    /**\n     *  Find the first focusable item in the dialog.\n     */\n    function findFirstFocusable(node) {\n        const candidateSelectors = [\n            'input',\n            'select',\n            'a[href]',\n            'textarea',\n            'button',\n            '[tabindex]'\n        ].join(',');\n        return node.querySelectorAll(candidateSelectors)[0];\n    }\n    Private.findFirstFocusable = findFirstFocusable;\n})(Private || (Private = {}));\n//# sourceMappingURL=dialog.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { find } from '@lumino/algorithm';\nimport { JSONExt, PromiseDelegate, UUID } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\nimport { Widget } from '@lumino/widgets';\nimport * as React from 'react';\nimport { Dialog, showDialog } from './dialog';\n/**\n * The default implementation for a session context object.\n */\nexport class SessionContext {\n    /**\n     * Construct a new session context.\n     */\n    constructor(options) {\n        var _a, _b, _c, _d;\n        this._path = '';\n        this._name = '';\n        this._type = '';\n        this._prevKernelName = '';\n        this._isDisposed = false;\n        this._disposed = new Signal(this);\n        this._session = null;\n        this._ready = new PromiseDelegate();\n        this._initializing = false;\n        this._initStarted = new PromiseDelegate();\n        this._initPromise = new PromiseDelegate();\n        this._isReady = false;\n        this._isTerminating = false;\n        this._isRestarting = false;\n        this._kernelChanged = new Signal(this);\n        this._preferenceChanged = new Signal(this);\n        this._sessionChanged = new Signal(this);\n        this._statusChanged = new Signal(this);\n        this._connectionStatusChanged = new Signal(this);\n        this._pendingInput = false;\n        this._iopubMessage = new Signal(this);\n        this._unhandledMessage = new Signal(this);\n        this._propertyChanged = new Signal(this);\n        this._dialog = null;\n        this._busyDisposable = null;\n        this._pendingKernelName = '';\n        this._pendingSessionRequest = '';\n        this.kernelManager = options.kernelManager;\n        this.sessionManager = options.sessionManager;\n        this.specsManager = options.specsManager;\n        this.translator = options.translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        this._path = (_a = options.path) !== null && _a !== void 0 ? _a : UUID.uuid4();\n        this._type = (_b = options.type) !== null && _b !== void 0 ? _b : '';\n        this._name = (_c = options.name) !== null && _c !== void 0 ? _c : '';\n        this._setBusy = options.setBusy;\n        this._kernelPreference = (_d = options.kernelPreference) !== null && _d !== void 0 ? _d : {};\n    }\n    /**\n     * The current session connection.\n     */\n    get session() {\n        var _a;\n        return (_a = this._session) !== null && _a !== void 0 ? _a : null;\n    }\n    /**\n     * The session path.\n     *\n     * #### Notes\n     * Typically `.session.path` should be used. This attribute is useful if\n     * there is no current session.\n     */\n    get path() {\n        return this._path;\n    }\n    /**\n     * The session type.\n     *\n     * #### Notes\n     * Typically `.session.type` should be used. This attribute is useful if\n     * there is no current session.\n     */\n    get type() {\n        return this._type;\n    }\n    /**\n     * The session name.\n     *\n     * #### Notes\n     * Typically `.session.name` should be used. This attribute is useful if\n     * there is no current session.\n     */\n    get name() {\n        return this._name;\n    }\n    /**\n     * A signal emitted when the kernel connection changes, proxied from the session connection.\n     */\n    get kernelChanged() {\n        return this._kernelChanged;\n    }\n    /**\n     * A signal emitted when the session connection changes.\n     */\n    get sessionChanged() {\n        return this._sessionChanged;\n    }\n    /**\n     * A signal emitted when the kernel status changes, proxied from the kernel.\n     */\n    get statusChanged() {\n        return this._statusChanged;\n    }\n    /**\n     * A flag indicating if the session has pending input, proxied from the kernel.\n     */\n    get pendingInput() {\n        return this._pendingInput;\n    }\n    /**\n     * A signal emitted when the kernel status changes, proxied from the kernel.\n     */\n    get connectionStatusChanged() {\n        return this._connectionStatusChanged;\n    }\n    /**\n     * A signal emitted for iopub kernel messages, proxied from the kernel.\n     */\n    get iopubMessage() {\n        return this._iopubMessage;\n    }\n    /**\n     * A signal emitted for an unhandled kernel message, proxied from the kernel.\n     */\n    get unhandledMessage() {\n        return this._unhandledMessage;\n    }\n    /**\n     * A signal emitted when a session property changes, proxied from the current session.\n     */\n    get propertyChanged() {\n        return this._propertyChanged;\n    }\n    /**\n     * The kernel preference of this client session.\n     *\n     * This is used when selecting a new kernel, and should reflect the sort of\n     * kernel the activity prefers.\n     */\n    get kernelPreference() {\n        return this._kernelPreference;\n    }\n    set kernelPreference(value) {\n        if (!JSONExt.deepEqual(value, this._kernelPreference)) {\n            const oldValue = this._kernelPreference;\n            this._kernelPreference = value;\n            this._preferenceChanged.emit({\n                name: 'kernelPreference',\n                oldValue,\n                newValue: JSONExt.deepCopy(value)\n            });\n        }\n    }\n    /**\n     * Signal emitted if the kernel preference changes.\n     */\n    get kernelPreferenceChanged() {\n        return this._preferenceChanged;\n    }\n    /**\n     * Whether the context is ready.\n     */\n    get isReady() {\n        return this._isReady;\n    }\n    /**\n     * A promise that is fulfilled when the context is ready.\n     */\n    get ready() {\n        return this._ready.promise;\n    }\n    /**\n     * Whether the context is terminating.\n     */\n    get isTerminating() {\n        return this._isTerminating;\n    }\n    /**\n     * Whether the context is restarting.\n     */\n    get isRestarting() {\n        return this._isRestarting;\n    }\n    /**\n     * Whether the kernel is \"No Kernel\" or not.\n     *\n     * #### Notes\n     * As the displayed name is translated, this can be used directly.\n     */\n    get hasNoKernel() {\n        return this.kernelDisplayName === this.noKernelName;\n    }\n    /**\n     * The display name of the current kernel, or a sensible alternative.\n     *\n     * #### Notes\n     * This is a convenience function to have a consistent sensible name for the\n     * kernel.\n     */\n    get kernelDisplayName() {\n        var _a, _b, _c, _d, _e, _f, _g;\n        const kernel = (_a = this.session) === null || _a === void 0 ? void 0 : _a.kernel;\n        if (this._pendingKernelName === this.noKernelName) {\n            return this.noKernelName;\n        }\n        if (this._pendingKernelName) {\n            return ((_d = (_c = (_b = this.specsManager.specs) === null || _b === void 0 ? void 0 : _b.kernelspecs[this._pendingKernelName]) === null || _c === void 0 ? void 0 : _c.display_name) !== null && _d !== void 0 ? _d : this._pendingKernelName);\n        }\n        if (!kernel) {\n            return this.noKernelName;\n        }\n        return ((_g = (_f = (_e = this.specsManager.specs) === null || _e === void 0 ? void 0 : _e.kernelspecs[kernel.name]) === null || _f === void 0 ? void 0 : _f.display_name) !== null && _g !== void 0 ? _g : kernel.name);\n    }\n    /**\n     * A sensible status to display\n     *\n     * #### Notes\n     * This combines the status and connection status into a single status for\n     * the user.\n     */\n    get kernelDisplayStatus() {\n        var _a, _b;\n        const kernel = (_a = this.session) === null || _a === void 0 ? void 0 : _a.kernel;\n        if (this._isTerminating) {\n            return 'terminating';\n        }\n        if (this._isRestarting) {\n            return 'restarting';\n        }\n        if (this._pendingKernelName === this.noKernelName) {\n            return 'unknown';\n        }\n        if (!kernel && this._pendingKernelName) {\n            return 'initializing';\n        }\n        if (!kernel &&\n            !this.isReady &&\n            this.kernelPreference.canStart !== false &&\n            this.kernelPreference.shouldStart !== false) {\n            return 'initializing';\n        }\n        return ((_b = ((kernel === null || kernel === void 0 ? void 0 : kernel.connectionStatus) === 'connected'\n            ? kernel === null || kernel === void 0 ? void 0 : kernel.status\n            : kernel === null || kernel === void 0 ? void 0 : kernel.connectionStatus)) !== null && _b !== void 0 ? _b : 'unknown');\n    }\n    /**\n     * The name of the previously started kernel.\n     */\n    get prevKernelName() {\n        return this._prevKernelName;\n    }\n    /**\n     * Test whether the context is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * A signal emitted when the poll is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * Get the constant displayed name for \"No Kernel\"\n     */\n    get noKernelName() {\n        return this._trans.__('No Kernel');\n    }\n    /**\n     * Dispose of the resources held by the context.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._disposed.emit();\n        if (this._session) {\n            if (this.kernelPreference.shutdownOnDispose) {\n                // Fire and forget the session shutdown request\n                this.sessionManager.shutdown(this._session.id).catch(reason => {\n                    console.error(`Kernel not shut down ${reason}`);\n                });\n            }\n            // Dispose the session connection\n            this._session.dispose();\n            this._session = null;\n        }\n        if (this._dialog) {\n            this._dialog.dispose();\n        }\n        if (this._busyDisposable) {\n            this._busyDisposable.dispose();\n            this._busyDisposable = null;\n        }\n        Signal.clearData(this);\n    }\n    /**\n     * Starts new Kernel.\n     *\n     * @returns Whether to ask the user to pick a kernel.\n     */\n    async startKernel() {\n        const preference = this.kernelPreference;\n        if (!preference.autoStartDefault && preference.shouldStart === false) {\n            return true;\n        }\n        let options;\n        if (preference.id) {\n            options = { id: preference.id };\n        }\n        else {\n            const name = Private.getDefaultKernel({\n                specs: this.specsManager.specs,\n                sessions: this.sessionManager.running(),\n                preference\n            });\n            if (name) {\n                options = { name };\n            }\n        }\n        if (options) {\n            try {\n                await this._changeKernel(options);\n                return false;\n            }\n            catch (err) {\n                /* no-op */\n            }\n        }\n        // Always fall back to selecting a kernel\n        return true;\n    }\n    /**\n     * Restart the current Kernel.\n     *\n     * @returns A promise that resolves when the kernel is restarted.\n     */\n    async restartKernel() {\n        var _a, _b, _c, _d, _e, _f;\n        const kernel = ((_a = this.session) === null || _a === void 0 ? void 0 : _a.kernel) || null;\n        if (this._isRestarting) {\n            return;\n        }\n        this._isRestarting = true;\n        this._isReady = false;\n        this._statusChanged.emit('restarting');\n        try {\n            await ((_c = (_b = this.session) === null || _b === void 0 ? void 0 : _b.kernel) === null || _c === void 0 ? void 0 : _c.restart());\n            this._isReady = true;\n        }\n        catch (e) {\n            console.error(e);\n        }\n        this._isRestarting = false;\n        this._statusChanged.emit(((_e = (_d = this.session) === null || _d === void 0 ? void 0 : _d.kernel) === null || _e === void 0 ? void 0 : _e.status) || 'unknown');\n        this._kernelChanged.emit({\n            name: 'kernel',\n            oldValue: kernel,\n            newValue: ((_f = this.session) === null || _f === void 0 ? void 0 : _f.kernel) || null\n        });\n    }\n    /**\n     * Change the current kernel associated with the session.\n     */\n    async changeKernel(options = {}) {\n        if (this.isDisposed) {\n            throw new Error('Disposed');\n        }\n        // Wait for the initialization method to try\n        // and start its kernel first to ensure consistent\n        // ordering.\n        await this._initStarted.promise;\n        return this._changeKernel(options);\n    }\n    /**\n     * Kill the kernel and shutdown the session.\n     *\n     * @returns A promise that resolves when the session is shut down.\n     */\n    async shutdown() {\n        if (this.isDisposed || !this._initializing) {\n            return;\n        }\n        await this._initStarted.promise;\n        this._pendingSessionRequest = '';\n        this._pendingKernelName = this.noKernelName;\n        return this._shutdownSession();\n    }\n    /**\n     * Initialize the session context\n     *\n     * @returns A promise that resolves with whether to ask the user to select a kernel.\n     *\n     * #### Notes\n     * If a server session exists on the current path, we will connect to it.\n     * If preferences include disabling `canStart` or `shouldStart`, no\n     * server session will be started.\n     * If a kernel id is given, we attempt to start a session with that id.\n     * If a default kernel is available, we connect to it.\n     * Otherwise we ask the user to select a kernel.\n     */\n    async initialize() {\n        if (this._initializing) {\n            return this._initPromise.promise;\n        }\n        this._initializing = true;\n        const needsSelection = await this._initialize();\n        if (!needsSelection) {\n            this._isReady = true;\n            this._ready.resolve(undefined);\n        }\n        if (!this._pendingSessionRequest) {\n            this._initStarted.resolve(void 0);\n        }\n        this._initPromise.resolve(needsSelection);\n        return needsSelection;\n    }\n    /**\n     * Inner initialize function that doesn't handle promises.\n     * This makes it easier to consolidate promise handling logic.\n     */\n    async _initialize() {\n        const manager = this.sessionManager;\n        await manager.ready;\n        await manager.refreshRunning();\n        const model = find(manager.running(), item => {\n            return item.path === this._path;\n        });\n        if (model) {\n            try {\n                const session = manager.connectTo({ model });\n                this._handleNewSession(session);\n            }\n            catch (err) {\n                void this._handleSessionError(err);\n                return Promise.reject(err);\n            }\n        }\n        return await this._startIfNecessary();\n    }\n    /**\n     * Shut down the current session.\n     */\n    async _shutdownSession() {\n        var _a;\n        const session = this._session;\n        // Capture starting values in case an error is raised.\n        const isTerminating = this._isTerminating;\n        const isReady = this._isReady;\n        this._isTerminating = true;\n        this._isReady = false;\n        this._statusChanged.emit('terminating');\n        try {\n            await (session === null || session === void 0 ? void 0 : session.shutdown());\n            this._isTerminating = false;\n            session === null || session === void 0 ? void 0 : session.dispose();\n            this._session = null;\n            const kernel = (session === null || session === void 0 ? void 0 : session.kernel) || null;\n            this._statusChanged.emit('unknown');\n            this._kernelChanged.emit({\n                name: 'kernel',\n                oldValue: kernel,\n                newValue: null\n            });\n            this._sessionChanged.emit({\n                name: 'session',\n                oldValue: session,\n                newValue: null\n            });\n        }\n        catch (err) {\n            this._isTerminating = isTerminating;\n            this._isReady = isReady;\n            const status = (_a = session === null || session === void 0 ? void 0 : session.kernel) === null || _a === void 0 ? void 0 : _a.status;\n            if (status === undefined) {\n                this._statusChanged.emit('unknown');\n            }\n            else {\n                this._statusChanged.emit(status);\n            }\n            throw err;\n        }\n        return;\n    }\n    /**\n     * Start the session if necessary.\n     *\n     * @returns Whether to ask the user to pick a kernel.\n     */\n    async _startIfNecessary() {\n        var _a;\n        const preference = this.kernelPreference;\n        if (this.isDisposed ||\n            ((_a = this.session) === null || _a === void 0 ? void 0 : _a.kernel) ||\n            preference.shouldStart === false ||\n            preference.canStart === false) {\n            // Not necessary to start a kernel\n            return false;\n        }\n        return this.startKernel();\n    }\n    /**\n     * Change the kernel.\n     */\n    async _changeKernel(model = {}) {\n        if (model.name) {\n            this._pendingKernelName = model.name;\n        }\n        if (!this._session) {\n            this._kernelChanged.emit({\n                name: 'kernel',\n                oldValue: null,\n                newValue: null\n            });\n        }\n        // Guarantee that the initialized kernel\n        // will be started first.\n        if (!this._pendingSessionRequest) {\n            this._initStarted.resolve(void 0);\n        }\n        // If we already have a session, just change the kernel.\n        if (this._session && !this._isTerminating) {\n            try {\n                await this._session.changeKernel(model);\n                return this._session.kernel;\n            }\n            catch (err) {\n                void this._handleSessionError(err);\n                throw err;\n            }\n        }\n        // Use a UUID for the path to overcome a race condition on the server\n        // where it will re-use a session for a given path but only after\n        // the kernel finishes starting.\n        // We later switch to the real path below.\n        // Use the correct directory so the kernel will be started in that directory.\n        const dirName = PathExt.dirname(this._path);\n        const requestId = (this._pendingSessionRequest = PathExt.join(dirName, UUID.uuid4()));\n        try {\n            this._statusChanged.emit('starting');\n            const session = await this.sessionManager.startNew({\n                path: requestId,\n                type: this._type,\n                name: this._name,\n                kernel: model\n            });\n            // Handle a preempt.\n            if (this._pendingSessionRequest !== session.path) {\n                await session.shutdown();\n                session.dispose();\n                return null;\n            }\n            // Change to the real path.\n            await session.setPath(this._path);\n            // Update the name in case it has changed since we launched the session.\n            await session.setName(this._name);\n            if (this._session && !this._isTerminating) {\n                await this._shutdownSession();\n            }\n            return this._handleNewSession(session);\n        }\n        catch (err) {\n            void this._handleSessionError(err);\n            throw err;\n        }\n    }\n    /**\n     * Handle a new session object.\n     */\n    _handleNewSession(session) {\n        var _a, _b, _c;\n        if (this.isDisposed) {\n            throw Error('Disposed');\n        }\n        if (!this._isReady) {\n            this._isReady = true;\n            this._ready.resolve(undefined);\n        }\n        if (this._session) {\n            this._session.dispose();\n        }\n        this._session = session;\n        this._pendingKernelName = '';\n        if (session) {\n            this._prevKernelName = (_b = (_a = session.kernel) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '';\n            session.disposed.connect(this._onSessionDisposed, this);\n            session.propertyChanged.connect(this._onPropertyChanged, this);\n            session.kernelChanged.connect(this._onKernelChanged, this);\n            session.statusChanged.connect(this._onStatusChanged, this);\n            session.connectionStatusChanged.connect(this._onConnectionStatusChanged, this);\n            session.pendingInput.connect(this._onPendingInput, this);\n            session.iopubMessage.connect(this._onIopubMessage, this);\n            session.unhandledMessage.connect(this._onUnhandledMessage, this);\n            if (session.path !== this._path) {\n                this._onPropertyChanged(session, 'path');\n            }\n            if (session.name !== this._name) {\n                this._onPropertyChanged(session, 'name');\n            }\n            if (session.type !== this._type) {\n                this._onPropertyChanged(session, 'type');\n            }\n        }\n        // Any existing session/kernel connection was disposed above when the session was\n        // disposed, so the oldValue should be null.\n        this._sessionChanged.emit({\n            name: 'session',\n            oldValue: null,\n            newValue: session\n        });\n        this._kernelChanged.emit({\n            oldValue: null,\n            newValue: (session === null || session === void 0 ? void 0 : session.kernel) || null,\n            name: 'kernel'\n        });\n        this._statusChanged.emit(((_c = session === null || session === void 0 ? void 0 : session.kernel) === null || _c === void 0 ? void 0 : _c.status) || 'unknown');\n        return (session === null || session === void 0 ? void 0 : session.kernel) || null;\n    }\n    /**\n     * Handle an error in session startup.\n     */\n    async _handleSessionError(err) {\n        this._handleNewSession(null);\n        let traceback = '';\n        let message = '';\n        try {\n            traceback = err.traceback;\n            message = err.message;\n        }\n        catch (err) {\n            // no-op\n        }\n        await this._displayKernelError(message, traceback);\n    }\n    /**\n     * Display kernel error\n     */\n    async _displayKernelError(message, traceback) {\n        const body = (React.createElement(\"div\", null,\n            message && React.createElement(\"pre\", null, message),\n            traceback && (React.createElement(\"details\", { className: \"jp-mod-wide\" },\n                React.createElement(\"pre\", null, traceback)))));\n        const dialog = (this._dialog = new Dialog({\n            title: this._trans.__('Error Starting Kernel'),\n            body,\n            buttons: [Dialog.okButton()]\n        }));\n        await dialog.launch();\n        this._dialog = null;\n    }\n    /**\n     * Handle a session termination.\n     */\n    _onSessionDisposed() {\n        if (this._session) {\n            const oldValue = this._session;\n            this._session = null;\n            const newValue = this._session;\n            this._sessionChanged.emit({ name: 'session', oldValue, newValue });\n        }\n    }\n    /**\n     * Handle a change to a session property.\n     */\n    _onPropertyChanged(sender, property) {\n        switch (property) {\n            case 'path':\n                this._path = sender.path;\n                break;\n            case 'name':\n                this._name = sender.name;\n                break;\n            case 'type':\n                this._type = sender.type;\n                break;\n            default:\n                throw new Error(`unrecognized property ${property}`);\n        }\n        this._propertyChanged.emit(property);\n    }\n    /**\n     * Handle a change to the kernel.\n     */\n    _onKernelChanged(sender, args) {\n        this._kernelChanged.emit(args);\n    }\n    /**\n     * Handle a change to the session status.\n     */\n    _onStatusChanged(sender, status) {\n        var _a;\n        if (status === 'dead') {\n            const model = (_a = sender.kernel) === null || _a === void 0 ? void 0 : _a.model;\n            if (model === null || model === void 0 ? void 0 : model.reason) {\n                const traceback = model.traceback || '';\n                void this._displayKernelError(model.reason, traceback);\n            }\n        }\n        // Set that this kernel is busy, if we haven't already\n        // If we have already, and now we aren't busy, dispose\n        // of the busy disposable.\n        if (this._setBusy) {\n            if (status === 'busy') {\n                if (!this._busyDisposable) {\n                    this._busyDisposable = this._setBusy();\n                }\n            }\n            else {\n                if (this._busyDisposable) {\n                    this._busyDisposable.dispose();\n                    this._busyDisposable = null;\n                }\n            }\n        }\n        // Proxy the signal\n        this._statusChanged.emit(status);\n    }\n    /**\n     * Handle a change to the session status.\n     */\n    _onConnectionStatusChanged(sender, status) {\n        // Proxy the signal\n        this._connectionStatusChanged.emit(status);\n    }\n    /**\n     * Handle a change to the pending input.\n     */\n    _onPendingInput(sender, value) {\n        // Set the signal value\n        this._pendingInput = value;\n    }\n    /**\n     * Handle an iopub message.\n     */\n    _onIopubMessage(sender, message) {\n        if (message.header.msg_type === 'shutdown_reply') {\n            this.session.kernel.removeInputGuard();\n        }\n        this._iopubMessage.emit(message);\n    }\n    /**\n     * Handle an unhandled message.\n     */\n    _onUnhandledMessage(sender, message) {\n        this._unhandledMessage.emit(message);\n    }\n}\n/**\n * A namespace for `SessionContext` statics.\n */\n(function (SessionContext) {\n    /**\n     * Get the default kernel name given select options.\n     */\n    function getDefaultKernel(options) {\n        const { preference } = options;\n        const { shouldStart } = preference;\n        if (shouldStart === false) {\n            return null;\n        }\n        return Private.getDefaultKernel(options);\n    }\n    SessionContext.getDefaultKernel = getDefaultKernel;\n})(SessionContext || (SessionContext = {}));\n/**\n * The default implementation of the client session dialog provider.\n */\nexport class SessionContextDialogs {\n    constructor(options = {}) {\n        var _a;\n        this._translator = (_a = options.translator) !== null && _a !== void 0 ? _a : nullTranslator;\n        this._settingRegistry = options.settingRegistry || null;\n    }\n    /**\n     * Select a kernel for the session.\n     */\n    async selectKernel(sessionContext) {\n        if (sessionContext.isDisposed) {\n            return Promise.resolve();\n        }\n        const translator = this._translator;\n        const trans = translator.load('jupyterlab');\n        // If there is no existing kernel, offer the option to keep no kernel.\n        let label = trans.__('Cancel');\n        if (sessionContext.hasNoKernel) {\n            label = sessionContext.kernelDisplayName;\n        }\n        const buttons = [\n            Dialog.cancelButton({ label }),\n            Dialog.okButton({\n                label: trans.__('Select'),\n                ariaLabel: trans.__('Select Kernel')\n            })\n        ];\n        const autoStartDefault = sessionContext.kernelPreference.autoStartDefault;\n        const hasCheckbox = typeof autoStartDefault === 'boolean';\n        const dialog = new Dialog({\n            title: trans.__('Select Kernel'),\n            body: Private.createKernelSelector(sessionContext, translator),\n            buttons,\n            checkbox: hasCheckbox\n                ? {\n                    label: trans.__('Always start the preferred kernel'),\n                    caption: trans.__('Remember my choice and always start the preferred kernel'),\n                    checked: autoStartDefault\n                }\n                : null\n        });\n        const result = await dialog.launch();\n        if (sessionContext.isDisposed || !result.button.accept) {\n            return;\n        }\n        if (hasCheckbox && result.isChecked !== null) {\n            sessionContext.kernelPreference = {\n                ...sessionContext.kernelPreference,\n                autoStartDefault: result.isChecked\n            };\n        }\n        const model = result.value;\n        if (model === null && !sessionContext.hasNoKernel) {\n            return sessionContext.shutdown();\n        }\n        if (model) {\n            await sessionContext.changeKernel(model);\n        }\n    }\n    /**\n     * Restart the session.\n     *\n     * @returns A promise that resolves with whether the kernel has restarted.\n     *\n     * #### Notes\n     * If there is a running kernel, present a dialog.\n     * If there is no kernel, we start a kernel with the last run\n     * kernel name and resolves with `true`.\n     */\n    async restart(sessionContext) {\n        var _a, _b, _c, _d, _e;\n        const trans = this._translator.load('jupyterlab');\n        await sessionContext.initialize();\n        if (sessionContext.isDisposed) {\n            throw new Error('session already disposed');\n        }\n        const kernel = (_a = sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel;\n        if (!kernel && sessionContext.prevKernelName) {\n            await sessionContext.changeKernel({\n                name: sessionContext.prevKernelName\n            });\n            return true;\n        }\n        // Bail if there is no previous kernel to start.\n        if (!kernel) {\n            throw new Error('No kernel to restart');\n        }\n        // Skip the dialog and restart the kernel\n        const kernelPluginId = '@jupyterlab/apputils-extension:sessionDialogs';\n        const skipKernelRestartDialog = (_c = (_b = sessionContext.kernelPreference) === null || _b === void 0 ? void 0 : _b.skipKernelRestartDialog) !== null && _c !== void 0 ? _c : false;\n        const skipKernelRestartDialogSetting = (_e = (await ((_d = this._settingRegistry) === null || _d === void 0 ? void 0 : _d.get(kernelPluginId, 'skipKernelRestartDialog')))) === null || _e === void 0 ? void 0 : _e.composite;\n        if (skipKernelRestartDialogSetting || skipKernelRestartDialog) {\n            await sessionContext.restartKernel();\n            return true;\n        }\n        const restartBtn = Dialog.warnButton({\n            label: trans.__('Restart'),\n            ariaLabel: trans.__('Confirm Kernel Restart')\n        });\n        const result = await showDialog({\n            title: trans.__('Restart Kernel?'),\n            body: trans.__('Do you want to restart the kernel of %1? All variables will be lost.', sessionContext.name),\n            buttons: [\n                Dialog.cancelButton({ ariaLabel: trans.__('Cancel Kernel Restart') }),\n                restartBtn\n            ],\n            checkbox: {\n                label: trans.__('Do not ask me again.'),\n                caption: trans.__('If checked, the kernel will restart without confirmation prompt in the future; you can change this back in the settings.')\n            }\n        });\n        if (kernel.isDisposed) {\n            return false;\n        }\n        if (result.button.accept) {\n            if (typeof result.isChecked === 'boolean' && result.isChecked == true) {\n                sessionContext.kernelPreference = {\n                    ...sessionContext.kernelPreference,\n                    skipKernelRestartDialog: true\n                };\n            }\n            await sessionContext.restartKernel();\n            return true;\n        }\n        return false;\n    }\n}\n(function (SessionContextDialogs) {\n    /**\n     * Returns available kernel options grouped based on session context.\n     *\n     * #### Notes\n     * If a language preference is set in the given session context, the options\n     * returned are grouped with the language preference at the top:\n     *\n     *  - (Start %1 Kernel, language)\n     *    - { all kernelspecs whose language matches in alphabetical order }\n     *  - (Use No Kernel)\n     *    - `No Kernel`\n     *  - (Start Kernel)\n     *    - { all other kernelspecs in alphabetical order }\n     *  - (Connect to Existing %1 Kernel, language)\n     *    - { all running kernels whose language matches in alphabetical order }\n     *  - (Connect to Kernel)\n     *    - { all other running kernels in alphabetical order }\n     *\n     * If no language preference is set, these groups and options are returned:\n     *\n     *  - (Start Kernel)\n     *    - { all kernelspecs in alphabetical order }\n     *  - (Use No Kernel)\n     *    - `No Kernel`\n     *  - (Connect to Existing Kernel)\n     *    - { all running kernels in alphabetical order  }\n     *\n     * If the session has a kernel ID and a kernel exists with that id, its\n     * corresponding option has `selected` set to `true`. Otherwise if the session\n     * context language preference is set, the first kernelspec that matches it is\n     * selected.\n     */\n    function kernelOptions(sessionContext, translator = null) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        const options = { disabled: false, groups: [] };\n        // Create mapping of sessions and kernel ids.\n        const kernels = Array.from((_b = (_a = sessionContext.kernelManager) === null || _a === void 0 ? void 0 : _a.running()) !== null && _b !== void 0 ? _b : \n        // If kernel manager is unavailable use kernels from running sessions.\n        // TODO: Remove this (next version) when kernel manager is guaranteed.\n        Array.from(sessionContext.sessionManager.running())\n            .filter(session => !!session.kernel)\n            .map(session => session.kernel));\n        const sessions = Array.from((_c = sessionContext.sessionManager.running()) !== null && _c !== void 0 ? _c : []).reduce((sessions, session) => {\n            var _a;\n            if ((_a = session.kernel) === null || _a === void 0 ? void 0 : _a.id)\n                sessions[session.kernel.id] = session;\n            return sessions;\n        }, {});\n        const preference = {\n            ...sessionContext.kernelPreference,\n            id: (_e = (_d = sessionContext.session) === null || _d === void 0 ? void 0 : _d.kernel) === null || _e === void 0 ? void 0 : _e.id\n        };\n        const currentKernelDisplayName = !sessionContext.hasNoKernel\n            ? sessionContext.kernelDisplayName\n            : null;\n        const specs = {\n            default: '',\n            kernelspecs: Object.create(null),\n            ...sessionContext.specsManager.specs\n        };\n        // Create mapping of languages and kernel names.\n        const sorted = [];\n        const languages = Object.create(null);\n        for (const name in specs.kernelspecs) {\n            sorted.push(specs.kernelspecs[name]);\n            languages[name] = specs.kernelspecs[name].language;\n        }\n        sorted.sort((a, b) => a.display_name.localeCompare(b.display_name));\n        translator = translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        const language = preference.language ||\n            languages[preference.name] ||\n            (preference.id ? languages[(_f = sessions[preference.id]) === null || _f === void 0 ? void 0 : _f.name] : '');\n        const labels = {\n            connectKernel: trans.__('Connect to Existing Kernel'),\n            startPreferred: trans.__('Start %1 Kernel', language),\n            startOther: trans.__('Start Kernel'),\n            connectToPreferred: trans.__('Connect to Existing %1 Kernel', language),\n            connectToOther: trans.__('Connect to Other Kernel'),\n            noKernel: trans.__('No Kernel'),\n            startKernel: trans.__('Start Kernel'),\n            useNoKernel: trans.__('Use No Kernel')\n        };\n        const noKernel = {\n            label: labels.useNoKernel,\n            options: [\n                {\n                    text: labels.noKernel,\n                    title: labels.noKernel,\n                    value: JSON.stringify(null)\n                }\n            ]\n        };\n        const optionForKernel = (kernel, displayName, session) => {\n            const sessionName = session\n                ? session.name || PathExt.basename(session.path)\n                : kernel.name || trans.__('Unknown Kernel');\n            return {\n                text: `${sessionName} (${kernel.id.split('-')[0]})`,\n                title: (session ? `${trans.__('Path: %1', session.path)}\\n` : ``) +\n                    `${trans.__('Name: %1', sessionName)}\\n` +\n                    `${trans.__('Kernel Name: %1', displayName !== null && displayName !== void 0 ? displayName : kernel.name)}\\n` +\n                    `${trans.__('Kernel Id: %1', kernel.id)}`,\n                value: JSON.stringify({ id: kernel.id })\n            };\n        };\n        const optionForSpec = (spec) => ({\n            text: spec.display_name,\n            value: JSON.stringify({ name: spec.name })\n        });\n        // If a kernel cannot be started, bail.\n        if (preference.canStart === false) {\n            options.disabled = true;\n            options.groups.push(noKernel);\n            return options;\n        }\n        // Create kernel option groups based on whether language preference exists.\n        if (language) {\n            // Add all kernelspecs, separating out the preferred language first.\n            const preferred = {\n                label: labels.startPreferred,\n                options: []\n            };\n            const other = {\n                label: labels.startOther,\n                options: []\n            };\n            const preferredRunning = {\n                label: labels.connectToPreferred,\n                options: []\n            };\n            const otherRunning = {\n                label: labels.connectToOther,\n                options: []\n            };\n            for (const spec of sorted) {\n                (spec.language === language ? preferred : other).options.push(optionForSpec(spec));\n            }\n            options.groups.push(preferred);\n            options.groups.push(noKernel);\n            options.groups.push(other);\n            kernels\n                .map(kernel => {\n                var _a, _b;\n                return ({\n                    option: optionForKernel(kernel, (_b = (_a = specs.kernelspecs[kernel.name]) === null || _a === void 0 ? void 0 : _a.display_name) !== null && _b !== void 0 ? _b : '', sessions[kernel.id]),\n                    language: languages[kernel.name]\n                });\n            })\n                .sort((a, b) => a.option.text.localeCompare(b.option.text))\n                .forEach(kernel => (language === kernel.language\n                ? preferredRunning\n                : otherRunning).options.push(kernel.option));\n            if (preferredRunning.options.length)\n                options.groups.push(preferredRunning);\n            if (otherRunning.options.length)\n                options.groups.push(otherRunning);\n        }\n        else {\n            // Add kernelspecs first.\n            options.groups.push({\n                label: labels.startKernel,\n                options: sorted.map(spec => optionForSpec(spec))\n            });\n            // Next add the no kernel option.\n            options.groups.push(noKernel);\n            // Add running kernels.\n            options.groups.push({\n                label: labels.connectKernel,\n                options: kernels\n                    .map(kernel => {\n                    var _a, _b;\n                    return optionForKernel(kernel, (_b = (_a = specs.kernelspecs[kernel.name]) === null || _a === void 0 ? void 0 : _a.display_name) !== null && _b !== void 0 ? _b : '', sessions[kernel.id]);\n                })\n                    .sort((a, b) => a.text.localeCompare(b.text))\n            });\n        }\n        // Set the selected option.\n        if (preference.id || currentKernelDisplayName || preference.name) {\n            for (const group of options.groups) {\n                for (const option of group.options) {\n                    const choice = JSON.parse(option.value);\n                    if (!choice)\n                        continue;\n                    if (preference.id) {\n                        if (preference.id === choice.id) {\n                            option.selected = true;\n                            return options;\n                        }\n                        continue;\n                    }\n                    if (currentKernelDisplayName) {\n                        if (currentKernelDisplayName ===\n                            ((_g = specs.kernelspecs[choice.name]) === null || _g === void 0 ? void 0 : _g.display_name)) {\n                            option.selected = true;\n                            return options;\n                        }\n                        continue;\n                    }\n                    if (preference.name) {\n                        if (preference.name === choice.name) {\n                            option.selected = true;\n                            return options;\n                        }\n                        continue;\n                    }\n                }\n            }\n        }\n        return options;\n    }\n    SessionContextDialogs.kernelOptions = kernelOptions;\n})(SessionContextDialogs || (SessionContextDialogs = {}));\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Return a kernel selector widget.\n     */\n    Private.createKernelSelector = (sessionContext, translator) => new KernelSelector({\n        node: createSelectorNode(sessionContext, translator)\n    });\n    /**\n     * A widget that provides a kernel selection.\n     */\n    class KernelSelector extends Widget {\n        /**\n         * Get the value of the kernel selector widget.\n         */\n        getValue() {\n            const selector = this.node.querySelector('select');\n            return JSON.parse(selector.value);\n        }\n    }\n    /**\n     * Create an HTML node for a kernel selector widget.\n     */\n    function createSelectorNode(sessionContext, translator) {\n        // Create the dialog body.\n        translator = translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        const body = document.createElement('div');\n        const text = document.createElement('label');\n        text.textContent = `${trans.__('Select kernel for:')} \"${sessionContext.name}\"`;\n        body.appendChild(text);\n        const select = document.createElement('select');\n        const options = SessionContextDialogs.kernelOptions(sessionContext, translator);\n        if (options.disabled)\n            select.disabled = true;\n        for (const group of options.groups) {\n            const { label, options } = group;\n            const optgroup = document.createElement('optgroup');\n            optgroup.label = label;\n            for (const { selected, text, title, value } of options) {\n                const option = document.createElement('option');\n                if (selected)\n                    option.selected = true;\n                if (title)\n                    option.title = title;\n                option.text = text;\n                option.value = value;\n                optgroup.appendChild(option);\n            }\n            select.appendChild(optgroup);\n        }\n        body.appendChild(select);\n        return body;\n    }\n    /**\n     * Get the default kernel name given select options.\n     */\n    function getDefaultKernel(options) {\n        var _a;\n        const { specs, preference } = options;\n        const { name, language, canStart, autoStartDefault } = preference;\n        if (!specs || canStart === false) {\n            return null;\n        }\n        const defaultName = autoStartDefault ? specs.default : null;\n        if (!name && !language) {\n            return defaultName;\n        }\n        // Look for an exact match of a spec name.\n        for (const specName in specs.kernelspecs) {\n            if (specName === name) {\n                return name;\n            }\n        }\n        // Bail if there is no language.\n        if (!language) {\n            return defaultName;\n        }\n        // Check for a single kernel matching the language.\n        const matches = [];\n        for (const specName in specs.kernelspecs) {\n            const kernelLanguage = (_a = specs.kernelspecs[specName]) === null || _a === void 0 ? void 0 : _a.language;\n            if (language === kernelLanguage) {\n                matches.push(specName);\n            }\n        }\n        if (matches.length === 1) {\n            const specName = matches[0];\n            console.warn('No exact match found for ' +\n                specName +\n                ', using kernel ' +\n                specName +\n                ' that matches ' +\n                'language=' +\n                language);\n            return specName;\n        }\n        // No matches found.\n        return defaultName;\n    }\n    Private.getDefaultKernel = getDefaultKernel;\n})(Private || (Private = {}));\n//# sourceMappingURL=sessioncontext.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { TextItem } from '@jupyterlab/statusbar';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { VDomModel, VDomRenderer } from '@jupyterlab/ui-components';\nimport { JSONExt } from '@lumino/coreutils';\nimport React from 'react';\n/**\n * Helper function to translate kernel statuses mapping by using\n * input translator.\n *\n * @param translator - Language translator.\n * @return The translated kernel status mapping.\n */\nexport function translateKernelStatuses(translator) {\n    translator = translator || nullTranslator;\n    const trans = translator.load('jupyterlab');\n    const translated = {\n        unknown: trans.__('Unknown'),\n        starting: trans.__('Starting'),\n        idle: trans.__('Idle'),\n        busy: trans.__('Busy'),\n        terminating: trans.__('Terminating'),\n        restarting: trans.__('Restarting'),\n        autorestarting: trans.__('Autorestarting'),\n        dead: trans.__('Dead'),\n        connected: trans.__('Connected'),\n        connecting: trans.__('Connecting'),\n        disconnected: trans.__('Disconnected'),\n        initializing: trans.__('Initializing'),\n        '': ''\n    };\n    return translated;\n}\n/**\n * A pure functional component for rendering kernel status.\n */\nfunction KernelStatusComponent(props) {\n    const translator = props.translator || nullTranslator;\n    const trans = translator.load('jupyterlab');\n    let statusText = '';\n    if (props.status) {\n        statusText = ` | ${props.status}`;\n    }\n    return (React.createElement(TextItem, { onClick: props.handleClick, onKeyDown: props.handleKeyDown, source: `${props.kernelName}${statusText}`, title: trans.__('Change kernel for %1', props.activityName), tabIndex: 0 }));\n}\n/**\n * A VDomRenderer widget for displaying the status of a kernel.\n */\nexport class KernelStatus extends VDomRenderer {\n    /**\n     * Construct the kernel status widget.\n     */\n    constructor(opts, translator) {\n        super(new KernelStatus.Model(translator));\n        this.translator = translator || nullTranslator;\n        this._handleClick = opts.onClick;\n        this._handleKeyDown = opts.onKeyDown;\n        this.addClass('jp-mod-highlighted');\n    }\n    /**\n     * Render the kernel status item.\n     */\n    render() {\n        if (this.model === null) {\n            return null;\n        }\n        else {\n            return (React.createElement(KernelStatusComponent, { status: this.model.status, kernelName: this.model.kernelName, activityName: this.model.activityName, handleClick: this._handleClick, handleKeyDown: this._handleKeyDown, translator: this.translator }));\n        }\n    }\n}\n/**\n * A namespace for KernelStatus statics.\n */\n(function (KernelStatus) {\n    /**\n     * A VDomModel for the kernel status indicator.\n     */\n    class Model extends VDomModel {\n        constructor(translator) {\n            super();\n            this._activityName = '';\n            this._kernelName = '';\n            this._kernelStatus = '';\n            this._sessionContext = null;\n            translator = translator !== null && translator !== void 0 ? translator : nullTranslator;\n            this._trans = translator.load('jupyterlab');\n            this._statusNames = translateKernelStatuses(translator);\n        }\n        /**\n         * The name of the kernel.\n         */\n        get kernelName() {\n            return this._kernelName;\n        }\n        /**\n         * The current status of the kernel.\n         */\n        get status() {\n            return this._kernelStatus\n                ? this._statusNames[this._kernelStatus]\n                : undefined;\n        }\n        /**\n         * A display name for the activity.\n         */\n        get activityName() {\n            return this._activityName;\n        }\n        set activityName(val) {\n            const oldVal = this._activityName;\n            if (oldVal === val) {\n                return;\n            }\n            this._activityName = val;\n            this.stateChanged.emit();\n        }\n        /**\n         * The current client session associated with the kernel status indicator.\n         */\n        get sessionContext() {\n            return this._sessionContext;\n        }\n        set sessionContext(sessionContext) {\n            var _a, _b, _c, _d;\n            (_a = this._sessionContext) === null || _a === void 0 ? void 0 : _a.statusChanged.disconnect(this._onKernelStatusChanged, this);\n            (_b = this._sessionContext) === null || _b === void 0 ? void 0 : _b.connectionStatusChanged.disconnect(this._onKernelStatusChanged, this);\n            (_c = this._sessionContext) === null || _c === void 0 ? void 0 : _c.kernelChanged.disconnect(this._onKernelChanged, this);\n            const oldState = this._getAllState();\n            this._sessionContext = sessionContext;\n            this._kernelStatus = sessionContext === null || sessionContext === void 0 ? void 0 : sessionContext.kernelDisplayStatus;\n            this._kernelName =\n                (_d = sessionContext === null || sessionContext === void 0 ? void 0 : sessionContext.kernelDisplayName) !== null && _d !== void 0 ? _d : this._trans.__('No Kernel');\n            sessionContext === null || sessionContext === void 0 ? void 0 : sessionContext.statusChanged.connect(this._onKernelStatusChanged, this);\n            sessionContext === null || sessionContext === void 0 ? void 0 : sessionContext.connectionStatusChanged.connect(this._onKernelStatusChanged, this);\n            sessionContext === null || sessionContext === void 0 ? void 0 : sessionContext.kernelChanged.connect(this._onKernelChanged, this);\n            this._triggerChange(oldState, this._getAllState());\n        }\n        /**\n         * React to changes to the kernel status.\n         */\n        _onKernelStatusChanged() {\n            var _a;\n            this._kernelStatus = (_a = this._sessionContext) === null || _a === void 0 ? void 0 : _a.kernelDisplayStatus;\n            this.stateChanged.emit(void 0);\n        }\n        /**\n         * React to changes in the kernel.\n         */\n        _onKernelChanged(_sessionContext, change) {\n            var _a;\n            const oldState = this._getAllState();\n            // sync setting of status and display name\n            this._kernelStatus = (_a = this._sessionContext) === null || _a === void 0 ? void 0 : _a.kernelDisplayStatus;\n            this._kernelName = _sessionContext.kernelDisplayName;\n            this._triggerChange(oldState, this._getAllState());\n        }\n        _getAllState() {\n            return [this._kernelName, this._kernelStatus, this._activityName];\n        }\n        _triggerChange(oldState, newState) {\n            if (JSONExt.deepEqual(oldState, newState)) {\n                this.stateChanged.emit(void 0);\n            }\n        }\n    }\n    KernelStatus.Model = Model;\n})(KernelStatus || (KernelStatus = {}));\n//# sourceMappingURL=kernelstatuses.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { circleEmptyIcon, circleIcon, LabIcon, offlineBoltIcon, ReactWidget, refreshIcon, stopIcon, ToolbarButton, ToolbarButtonComponent, UseSignal } from '@jupyterlab/ui-components';\nimport { Widget } from '@lumino/widgets';\nimport * as React from 'react';\nimport { SessionContextDialogs } from '../sessioncontext';\nimport { translateKernelStatuses } from '../kernelstatuses';\n/**\n * The class name added to toolbar kernel name text.\n */\nconst TOOLBAR_KERNEL_NAME_CLASS = 'jp-Toolbar-kernelName';\n/**\n * The class name added to toolbar kernel status icon.\n */\nconst TOOLBAR_KERNEL_STATUS_CLASS = 'jp-Toolbar-kernelStatus';\n/**\n * The namespace for Toolbar class statics.\n */\nexport var Toolbar;\n(function (Toolbar) {\n    /**\n     * Create an interrupt toolbar item.\n     *\n     * @deprecated since version v3.2\n     * This is dead code now.\n     */\n    function createInterruptButton(sessionContext, translator) {\n        translator = translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        return new ToolbarButton({\n            icon: stopIcon,\n            onClick: () => {\n                var _a, _b;\n                void ((_b = (_a = sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel) === null || _b === void 0 ? void 0 : _b.interrupt());\n            },\n            tooltip: trans.__('Interrupt the kernel')\n        });\n    }\n    Toolbar.createInterruptButton = createInterruptButton;\n    /**\n     * Create a restart toolbar item.\n     *\n     * @deprecated since v3.2\n     * This is dead code now.\n     */\n    function createRestartButton(sessionContext, dialogs, translator) {\n        translator = translator !== null && translator !== void 0 ? translator : nullTranslator;\n        const trans = translator.load('jupyterlab');\n        return new ToolbarButton({\n            icon: refreshIcon,\n            onClick: () => {\n                void (dialogs !== null && dialogs !== void 0 ? dialogs : new SessionContextDialogs({ translator })).restart(sessionContext);\n            },\n            tooltip: trans.__('Restart the kernel')\n        });\n    }\n    Toolbar.createRestartButton = createRestartButton;\n    /**\n     * Create a kernel name indicator item.\n     *\n     * #### Notes\n     * It will display the `'display_name`' of the session context. It can\n     * handle a change in context or kernel.\n     */\n    function createKernelNameItem(sessionContext, dialogs, translator) {\n        const el = ReactWidget.create(React.createElement(Private.KernelNameComponent, { sessionContext: sessionContext, dialogs: dialogs !== null && dialogs !== void 0 ? dialogs : new SessionContextDialogs({ translator }), translator: translator }));\n        el.addClass('jp-KernelName');\n        return el;\n    }\n    Toolbar.createKernelNameItem = createKernelNameItem;\n    /**\n     * Create a kernel status indicator item.\n     *\n     * @deprecated since v3.5\n     * The kernel status indicator is now replaced by the execution status indicator.\n     *\n     * #### Notes\n     * It will show a busy status if the kernel status is busy.\n     * It will show the current status in the node title.\n     * It can handle a change to the context or the kernel.\n     */\n    function createKernelStatusItem(sessionContext, translator) {\n        return new Private.KernelStatus(sessionContext, translator);\n    }\n    Toolbar.createKernelStatusItem = createKernelStatusItem;\n})(Toolbar || (Toolbar = {}));\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * React component for a kernel name button.\n     *\n     * This wraps the ToolbarButtonComponent and watches the kernel\n     * session for changes.\n     */\n    function KernelNameComponent(props) {\n        const translator = props.translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        const callback = () => {\n            void props.dialogs.selectKernel(props.sessionContext);\n        };\n        return (React.createElement(UseSignal, { signal: props.sessionContext.kernelChanged, initialSender: props.sessionContext }, sessionContext => (React.createElement(ToolbarButtonComponent, { className: TOOLBAR_KERNEL_NAME_CLASS, onClick: callback, tooltip: trans.__('Switch kernel'), label: sessionContext === null || sessionContext === void 0 ? void 0 : sessionContext.kernelDisplayName }))));\n    }\n    Private.KernelNameComponent = KernelNameComponent;\n    /**\n     * A toolbar item that displays kernel status.\n     *\n     * @deprecated This code is not use any longer and will be removed in JupyterLab 5\n     */\n    class KernelStatus extends Widget {\n        /**\n         * Construct a new kernel status widget.\n         */\n        constructor(sessionContext, translator) {\n            super();\n            this.translator = translator || nullTranslator;\n            this._trans = this.translator.load('jupyterlab');\n            this.addClass(TOOLBAR_KERNEL_STATUS_CLASS);\n            this._statusNames = translateKernelStatuses(this.translator);\n            this._onStatusChanged(sessionContext);\n            sessionContext.statusChanged.connect(this._onStatusChanged, this);\n            sessionContext.connectionStatusChanged.connect(this._onStatusChanged, this);\n        }\n        /**\n         * Handle a status on a kernel.\n         */\n        _onStatusChanged(sessionContext) {\n            if (this.isDisposed) {\n                return;\n            }\n            const status = sessionContext.kernelDisplayStatus;\n            const circleIconProps = {\n                container: this.node,\n                title: this._trans.__('Kernel %1', this._statusNames[status] || status),\n                stylesheet: 'toolbarButton',\n                alignSelf: 'normal',\n                height: '24px'\n            };\n            // set the icon\n            LabIcon.remove(this.node);\n            if (status === 'busy' ||\n                status === 'starting' ||\n                status === 'terminating' ||\n                status === 'restarting' ||\n                status === 'initializing') {\n                circleIcon.element(circleIconProps);\n            }\n            else if (status === 'connecting' ||\n                status === 'disconnected' ||\n                status === 'unknown') {\n                offlineBoltIcon.element(circleIconProps);\n            }\n            else {\n                circleEmptyIcon.element(circleIconProps);\n            }\n        }\n    }\n    Private.KernelStatus = KernelStatus;\n})(Private || (Private = {}));\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { MimeData } from '@lumino/coreutils';\n/**\n * The clipboard interface.\n */\nexport var Clipboard;\n(function (Clipboard) {\n    /**\n     * Get the application clipboard instance.\n     */\n    function getInstance() {\n        return Private.instance;\n    }\n    Clipboard.getInstance = getInstance;\n    /**\n     * Set the application clipboard instance.\n     */\n    function setInstance(value) {\n        Private.instance = value;\n    }\n    Clipboard.setInstance = setInstance;\n    /**\n     * Copy text to the system clipboard.\n     *\n     * #### Notes\n     * This can only be called in response to a user input event.\n     */\n    function copyToSystem(clipboardData) {\n        const node = document.body;\n        const handler = (event) => {\n            const data = event.clipboardData || window.clipboardData;\n            if (typeof clipboardData === 'string') {\n                data.setData('text', clipboardData);\n            }\n            else {\n                clipboardData.types().map((mimeType) => {\n                    data.setData(mimeType, clipboardData.getData(mimeType));\n                });\n            }\n            event.preventDefault();\n            node.removeEventListener('copy', handler);\n        };\n        node.addEventListener('copy', handler);\n        generateEvent(node);\n    }\n    Clipboard.copyToSystem = copyToSystem;\n    /**\n     * Generate a clipboard event on a node.\n     *\n     * @param node - The element on which to generate the event.\n     *\n     * @param type - The type of event to generate.\n     *   `'paste'` events cannot be programmatically generated.\n     *\n     * #### Notes\n     * This can only be called in response to a user input event.\n     */\n    function generateEvent(node, type = 'copy') {\n        // http://stackoverflow.com/a/5210367\n        // Identify selected text.\n        let sel = window.getSelection();\n        // Save the current selection.\n        const savedRanges = [];\n        for (let i = 0, len = (sel === null || sel === void 0 ? void 0 : sel.rangeCount) || 0; i < len; ++i) {\n            savedRanges[i] = sel.getRangeAt(i).cloneRange();\n        }\n        // Select the node content.\n        const range = document.createRange();\n        range.selectNodeContents(node);\n        if (sel) {\n            sel.removeAllRanges();\n            sel.addRange(range);\n        }\n        // Execute the command.\n        document.execCommand(type);\n        // Restore the previous selection.\n        sel = window.getSelection();\n        if (sel) {\n            sel.removeAllRanges();\n            for (let i = 0, len = savedRanges.length; i < len; ++i) {\n                sel.addRange(savedRanges[i]);\n            }\n        }\n    }\n    Clipboard.generateEvent = generateEvent;\n})(Clipboard || (Clipboard = {}));\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The application clipboard instance.\n     */\n    Private.instance = new MimeData();\n})(Private || (Private = {}));\n//# sourceMappingURL=clipboard.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { JSONExt } from '@lumino/coreutils';\n/**\n * The command data attribute added to nodes that are connected.\n */\nconst COMMAND_ATTR = 'commandlinker-command';\n/**\n * The args data attribute added to nodes that are connected.\n */\nconst ARGS_ATTR = 'commandlinker-args';\n/**\n * A static class that provides helper methods to generate clickable nodes that\n * execute registered commands with pre-populated arguments.\n */\nexport class CommandLinker {\n    /**\n     * Instantiate a new command linker.\n     */\n    constructor(options) {\n        this._isDisposed = false;\n        this._commands = options.commands;\n        document.body.addEventListener('click', this);\n    }\n    /**\n     * Test whether the linker is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the linker.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        document.body.removeEventListener('click', this);\n    }\n    /**\n     * Connect a command/argument pair to a given node so that when it is clicked,\n     * the command will execute.\n     *\n     * @param node - The node being connected.\n     *\n     * @param command - The command ID to execute upon click.\n     *\n     * @param args - The arguments with which to invoke the command.\n     *\n     * @returns The same node that was passed in, after it has been connected.\n     *\n     * #### Notes\n     * Only `click` events will execute the command on a connected node. So, there\n     * are two considerations that are relevant:\n     * 1. If a node is connected, the default click action will be prevented.\n     * 2. The `HTMLElement` passed in should be clickable.\n     */\n    connectNode(node, command, args) {\n        node.setAttribute(`data-${COMMAND_ATTR}`, command);\n        if (args !== void 0) {\n            node.setAttribute(`data-${ARGS_ATTR}`, JSON.stringify(args));\n        }\n        return node;\n    }\n    /**\n     * Disconnect a node that has been connected to execute a command on click.\n     *\n     * @param node - The node being disconnected.\n     *\n     * @returns The same node that was passed in, after it has been disconnected.\n     *\n     * #### Notes\n     * This method is safe to call multiple times and is safe to call on nodes\n     * that were never connected.\n     *\n     * This method can be called on rendered virtual DOM nodes that were populated\n     * using the `populateVNodeDataset` method in order to disconnect them from\n     * executing their command/argument pair.\n     */\n    disconnectNode(node) {\n        node.removeAttribute(`data-${COMMAND_ATTR}`);\n        node.removeAttribute(`data-${ARGS_ATTR}`);\n        return node;\n    }\n    /**\n     * Handle the DOM events for the command linker helper class.\n     *\n     * @param event - The DOM event sent to the class.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the panel's DOM node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'click':\n                this._evtClick(event);\n                break;\n            default:\n                return;\n        }\n    }\n    /**\n     * Populate the `dataset` attribute within the collection of attributes used\n     * to instantiate a virtual DOM node with the values necessary for its\n     * rendered DOM node to respond to clicks by executing a command/argument\n     * pair.\n     *\n     * @param command - The command ID to execute upon click.\n     *\n     * @param args - The arguments with which to invoke the command.\n     *\n     * @returns A `dataset` collection for use within virtual node attributes.\n     *\n     * #### Notes\n     * The return value can be used on its own as the value for the `dataset`\n     * attribute of a virtual element, or it can be added to an existing `dataset`\n     * as in the example below.\n     *\n     * #### Example\n     * ```typescript\n     * let command = 'some:command-id';\n     * let args = { alpha: 'beta' };\n     * let anchor = h.a({\n     *   className: 'some-class',\n     *   dataset: {\n     *     foo: '1',\n     *     bar: '2',\n     *     ../...linker.populateVNodeDataset(command, args)\n     *   }\n     * }, 'some text');\n     * ```\n     */\n    populateVNodeDataset(command, args) {\n        let dataset;\n        if (args !== void 0) {\n            dataset = { [ARGS_ATTR]: JSON.stringify(args), [COMMAND_ATTR]: command };\n        }\n        else {\n            dataset = { [COMMAND_ATTR]: command };\n        }\n        return dataset;\n    }\n    /**\n     * The global click handler that deploys commands/argument pairs that are\n     * attached to the node being clicked.\n     */\n    _evtClick(event) {\n        let target = event.target;\n        while (target && target.parentElement) {\n            if (target.hasAttribute(`data-${COMMAND_ATTR}`)) {\n                event.preventDefault();\n                const command = target.getAttribute(`data-${COMMAND_ATTR}`);\n                if (!command) {\n                    return;\n                }\n                const argsValue = target.getAttribute(`data-${ARGS_ATTR}`);\n                let args = JSONExt.emptyObject;\n                if (argsValue) {\n                    args = JSON.parse(argsValue);\n                }\n                void this._commands.execute(command, args);\n                return;\n            }\n            target = target.parentElement;\n        }\n    }\n}\n//# sourceMappingURL=commandlinker.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { searchIcon } from '@jupyterlab/ui-components';\nimport { Panel, Widget } from '@lumino/widgets';\n/**\n * Class name identifying the input group with search icon.\n */\nconst SEARCH_ICON_GROUP_CLASS = 'jp-SearchIconGroup';\n/**\n * Wrap the command palette in a modal to make it more usable.\n */\nexport class ModalCommandPalette extends Panel {\n    constructor(options) {\n        super();\n        this.addClass('jp-ModalCommandPalette');\n        this.addClass('jp-ThemedContainer');\n        this.id = 'modal-command-palette';\n        this.palette = options.commandPalette;\n        this._commandPalette.commands.commandExecuted.connect(() => {\n            if (this.isAttached && this.isVisible) {\n                this.hideAndReset();\n            }\n        });\n        // required to properly receive blur and focus events;\n        // selection of items with mouse may not work without this.\n        this.node.tabIndex = 0;\n    }\n    get palette() {\n        return this._commandPalette;\n    }\n    set palette(value) {\n        this._commandPalette = value;\n        if (!this.searchIconGroup) {\n            this._commandPalette.inputNode.insertAdjacentElement('afterend', this.createSearchIconGroup());\n        }\n        this.addWidget(value);\n        this.hideAndReset();\n    }\n    attach() {\n        Widget.attach(this, document.body);\n    }\n    detach() {\n        Widget.detach(this);\n    }\n    /**\n     * Hide the modal command palette and reset its search.\n     */\n    hideAndReset() {\n        this.hide();\n        this._commandPalette.inputNode.value = '';\n        this._commandPalette.refresh();\n    }\n    /**\n     * Handle incoming events.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'keydown':\n                this._evtKeydown(event);\n                break;\n            case 'blur': {\n                // if the focus shifted outside of this DOM element, hide and reset.\n                if (\n                // focus went away from child element\n                this.node.contains(event.target) &&\n                    // and it did NOT go to another child element but someplace else\n                    !this.node.contains(event.relatedTarget)) {\n                    event.stopPropagation();\n                    this.hideAndReset();\n                }\n                break;\n            }\n            case 'contextmenu':\n                event.preventDefault();\n                event.stopPropagation();\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Find the element with search icon group.\n     */\n    get searchIconGroup() {\n        return this._commandPalette.node.getElementsByClassName(SEARCH_ICON_GROUP_CLASS)[0];\n    }\n    /**\n     * Create element with search icon group.\n     */\n    createSearchIconGroup() {\n        const inputGroup = document.createElement('div');\n        inputGroup.classList.add(SEARCH_ICON_GROUP_CLASS);\n        searchIcon.render(inputGroup);\n        return inputGroup;\n    }\n    /**\n     *  A message handler invoked on an `'after-attach'` message.\n     */\n    onAfterAttach(msg) {\n        this.node.addEventListener('keydown', this, true);\n        this.node.addEventListener('contextmenu', this, true);\n    }\n    /**\n     *  A message handler invoked on an `'after-detach'` message.\n     */\n    onAfterDetach(msg) {\n        this.node.removeEventListener('keydown', this, true);\n        this.node.removeEventListener('contextmenu', this, true);\n    }\n    onBeforeHide(msg) {\n        document.removeEventListener('blur', this, true);\n    }\n    onAfterShow(msg) {\n        document.addEventListener('blur', this, true);\n    }\n    /**\n     * A message handler invoked on an `'activate-request'` message.\n     */\n    onActivateRequest(msg) {\n        if (this.isAttached) {\n            this.show();\n            this._commandPalette.activate();\n        }\n    }\n    /**\n     * Handle the `'keydown'` event for the widget.\n     */\n    _evtKeydown(event) {\n        // Check for escape key\n        switch (event.keyCode) {\n            case 27: // Escape.\n                event.stopPropagation();\n                event.preventDefault();\n                this.hideAndReset();\n                break;\n            default:\n                break;\n        }\n    }\n}\n//# sourceMappingURL=commandpalette.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ArrayExt } from '@lumino/algorithm';\nimport { UUID } from '@lumino/coreutils';\nimport { ElementExt } from '@lumino/domutils';\n/**\n * The namespace for DOM utilities.\n */\nexport var DOMUtils;\n(function (DOMUtils) {\n    /**\n     * Get the index of the node at a client position, or `-1`.\n     */\n    function hitTestNodes(nodes, x, y) {\n        return ArrayExt.findFirstIndex(nodes, node => {\n            return ElementExt.hitTest(node, x, y);\n        });\n    }\n    DOMUtils.hitTestNodes = hitTestNodes;\n    /**\n     * Find the first element matching a class name.\n     * Only use this function when the element existence is guaranteed.\n     */\n    function findElement(parent, className) {\n        return parent.querySelector(`.${className}`);\n    }\n    DOMUtils.findElement = findElement;\n    /**\n     * Find the first element matching a class name.\n     */\n    function findElements(parent, className) {\n        return parent.getElementsByClassName(className);\n    }\n    DOMUtils.findElements = findElements;\n    /**\n     * Create a DOM id with prefix \"id-\" to solve bug for UUIDs beginning with numbers.\n     */\n    function createDomID() {\n        return `id-${UUID.uuid4()}`;\n    }\n    DOMUtils.createDomID = createDomID;\n    /**\n     * Check whether the active element descendant from given parent is editable.\n     * When checking active elements it includes elements in the open shadow DOM.\n     */\n    function hasActiveEditableElement(parent, root = document) {\n        const element = root.activeElement;\n        return !!(element &&\n            parent.contains(element) &&\n            (element.matches(':read-write') ||\n                (element.shadowRoot &&\n                    hasActiveEditableElement(element.shadowRoot, element.shadowRoot))));\n    }\n    DOMUtils.hasActiveEditableElement = hasActiveEditableElement;\n})(DOMUtils || (DOMUtils = {}));\n//# sourceMappingURL=domutils.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Widget } from '@lumino/widgets';\nimport { Dialog, showDialog } from './dialog';\nconst INPUT_DIALOG_CLASS = 'jp-Input-Dialog';\nconst INPUT_BOOLEAN_DIALOG_CLASS = 'jp-Input-Boolean-Dialog';\n/**\n * Namespace for input dialogs\n */\nexport var InputDialog;\n(function (InputDialog) {\n    /**\n     * Create and show a input dialog for a boolean.\n     *\n     * @param options - The dialog setup options.\n     *\n     * @returns A promise that resolves with whether the dialog was accepted\n     */\n    function getBoolean(options) {\n        return showDialog({\n            ...options,\n            body: new InputBooleanDialog(options),\n            buttons: [\n                Dialog.cancelButton({ label: options.cancelLabel }),\n                Dialog.okButton({ label: options.okLabel })\n            ],\n            focusNodeSelector: 'input'\n        });\n    }\n    InputDialog.getBoolean = getBoolean;\n    /**\n     * Create and show a input dialog for a number.\n     *\n     * @param options - The dialog setup options.\n     *\n     * @returns A promise that resolves with whether the dialog was accepted\n     */\n    function getNumber(options) {\n        return showDialog({\n            ...options,\n            body: new InputNumberDialog(options),\n            buttons: [\n                Dialog.cancelButton({ label: options.cancelLabel }),\n                Dialog.okButton({ label: options.okLabel })\n            ],\n            focusNodeSelector: 'input'\n        });\n    }\n    InputDialog.getNumber = getNumber;\n    /**\n     * Create and show a input dialog for a choice.\n     *\n     * @param options - The dialog setup options.\n     *\n     * @returns A promise that resolves with whether the dialog was accepted\n     */\n    function getItem(options) {\n        return showDialog({\n            ...options,\n            body: new InputItemsDialog(options),\n            buttons: [\n                Dialog.cancelButton({ label: options.cancelLabel }),\n                Dialog.okButton({ label: options.okLabel })\n            ],\n            focusNodeSelector: options.editable ? 'input' : 'select'\n        });\n    }\n    InputDialog.getItem = getItem;\n    /**\n     * Create and show a input dialog for a choice.\n     *\n     * @param options - The dialog setup options.\n     *\n     * @returns A promise that resolves with whether the dialog was accepted\n     */\n    function getMultipleItems(options) {\n        return showDialog({\n            ...options,\n            body: new InputMultipleItemsDialog(options),\n            buttons: [\n                Dialog.cancelButton({ label: options.cancelLabel }),\n                Dialog.okButton({ label: options.okLabel })\n            ]\n        });\n    }\n    InputDialog.getMultipleItems = getMultipleItems;\n    /**\n     * Create and show a input dialog for a text.\n     *\n     * @param options - The dialog setup options.\n     *\n     * @returns A promise that resolves with whether the dialog was accepted\n     */\n    function getText(options) {\n        return showDialog({\n            ...options,\n            body: new InputTextDialog(options),\n            buttons: [\n                Dialog.cancelButton({ label: options.cancelLabel }),\n                Dialog.okButton({ label: options.okLabel })\n            ],\n            focusNodeSelector: 'input'\n        });\n    }\n    InputDialog.getText = getText;\n    /**\n     * Create and show a input dialog for a password.\n     *\n     * @param options - The dialog setup options.\n     *\n     * @returns A promise that resolves with whether the dialog was accepted\n     */\n    function getPassword(options) {\n        return showDialog({\n            ...options,\n            body: new InputPasswordDialog(options),\n            buttons: [\n                Dialog.cancelButton({ label: options.cancelLabel }),\n                Dialog.okButton({ label: options.okLabel })\n            ],\n            focusNodeSelector: 'input'\n        });\n    }\n    InputDialog.getPassword = getPassword;\n})(InputDialog || (InputDialog = {}));\n/**\n * Base widget for input dialog body\n */\nclass InputDialogBase extends Widget {\n    /**\n     * InputDialog constructor\n     *\n     * @param label Input field label\n     */\n    constructor(options) {\n        super();\n        this.addClass(INPUT_DIALOG_CLASS);\n        this._input = document.createElement('input');\n        this._input.classList.add('jp-mod-styled');\n        this._input.id = 'jp-dialog-input-id';\n        if (options.label !== undefined) {\n            const labelElement = document.createElement('label');\n            labelElement.textContent = options.label;\n            labelElement.htmlFor = this._input.id;\n            // Initialize the node\n            this.node.appendChild(labelElement);\n        }\n        const wrapper = document.createElement('div');\n        wrapper.className = 'jp-InputDialog-inputWrapper';\n        if (options.prefix) {\n            const prefix = document.createElement('span');\n            prefix.className = 'jp-InputDialog-inputPrefix';\n            prefix.textContent = options.prefix;\n            // Both US WDS (https://designsystem.digital.gov/components/input-prefix-suffix/)\n            // and UK DS (https://design-system.service.gov.uk/components/text-input/) recommend\n            // hiding prefixes and suffixes from screen readers.\n            prefix.ariaHidden = 'true';\n            wrapper.appendChild(prefix);\n        }\n        wrapper.appendChild(this._input);\n        if (options.suffix) {\n            const suffix = document.createElement('span');\n            suffix.className = 'jp-InputDialog-inputSuffix';\n            suffix.textContent = options.suffix;\n            suffix.ariaHidden = 'true';\n            wrapper.appendChild(suffix);\n        }\n        this.node.appendChild(wrapper);\n    }\n}\n/**\n * Widget body for input boolean dialog\n */\nclass InputBooleanDialog extends InputDialogBase {\n    /**\n     * InputBooleanDialog constructor\n     *\n     * @param options Constructor options\n     */\n    constructor(options) {\n        super(options);\n        this.addClass(INPUT_BOOLEAN_DIALOG_CLASS);\n        this._input.type = 'checkbox';\n        this._input.checked = options.value ? true : false;\n    }\n    /**\n     * Get the text specified by the user\n     */\n    getValue() {\n        return this._input.checked;\n    }\n}\n/**\n * Widget body for input number dialog\n */\nclass InputNumberDialog extends InputDialogBase {\n    /**\n     * InputNumberDialog constructor\n     *\n     * @param options Constructor options\n     */\n    constructor(options) {\n        super(options);\n        this._input.type = 'number';\n        this._input.value = options.value ? options.value.toString() : '0';\n    }\n    /**\n     * Get the number specified by the user.\n     */\n    getValue() {\n        if (this._input.value) {\n            return Number(this._input.value);\n        }\n        else {\n            return Number.NaN;\n        }\n    }\n}\n/**\n * Base widget body for input text/password/email dialog\n */\nclass InputDialogTextBase extends InputDialogBase {\n    /**\n     * InputDialogTextBase constructor\n     *\n     * @param options Constructor options\n     */\n    constructor(options) {\n        super(options);\n        this._input.value = options.text ? options.text : '';\n        if (options.placeholder) {\n            this._input.placeholder = options.placeholder;\n        }\n        if (options.pattern) {\n            this._input.pattern = options.pattern;\n        }\n        if (options.required) {\n            this._input.required = options.required;\n        }\n    }\n    /**\n     * Get the text specified by the user\n     */\n    getValue() {\n        return this._input.value;\n    }\n}\n/**\n * Widget body for input text dialog\n */\nclass InputTextDialog extends InputDialogTextBase {\n    /**\n     * InputTextDialog constructor\n     *\n     * @param options Constructor options\n     */\n    constructor(options) {\n        var _a;\n        super(options);\n        this._input.type = 'text';\n        this._initialSelectionRange = Math.min(this._input.value.length, Math.max(0, (_a = options.selectionRange) !== null && _a !== void 0 ? _a : this._input.value.length));\n    }\n    /**\n     *  A message handler invoked on an `'after-attach'` message.\n     */\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        if (this._initialSelectionRange > 0 && this._input.value) {\n            this._input.setSelectionRange(0, this._initialSelectionRange);\n        }\n    }\n}\n/**\n * Widget body for input password dialog\n */\nclass InputPasswordDialog extends InputDialogTextBase {\n    /**\n     * InputPasswordDialog constructor\n     *\n     * @param options Constructor options\n     */\n    constructor(options) {\n        super(options);\n        this._input.type = 'password';\n    }\n    /**\n     *  A message handler invoked on an `'after-attach'` message.\n     */\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        if (this._input.value) {\n            this._input.select();\n        }\n    }\n}\n/**\n * Widget body for input list dialog\n */\nclass InputItemsDialog extends InputDialogBase {\n    /**\n     * InputItemsDialog constructor\n     *\n     * @param options Constructor options\n     */\n    constructor(options) {\n        super(options);\n        this._editable = options.editable || false;\n        let current = options.current || 0;\n        let defaultIndex;\n        if (typeof current === 'number') {\n            defaultIndex = Math.max(0, Math.min(current, options.items.length - 1));\n            current = '';\n        }\n        this._list = document.createElement('select');\n        options.items.forEach((item, index) => {\n            const option = document.createElement('option');\n            if (index === defaultIndex) {\n                option.selected = true;\n                current = item;\n            }\n            option.value = item;\n            option.textContent = item;\n            this._list.appendChild(option);\n        });\n        if (options.editable) {\n            /* Use of list and datalist */\n            const data = document.createElement('datalist');\n            data.id = 'input-dialog-items';\n            data.appendChild(this._list);\n            this._input.type = 'list';\n            this._input.value = current;\n            this._input.setAttribute('list', data.id);\n            if (options.placeholder) {\n                this._input.placeholder = options.placeholder;\n            }\n            this.node.appendChild(data);\n        }\n        else {\n            /* Use select directly */\n            this._input.parentElement.replaceChild(this._list, this._input);\n        }\n    }\n    /**\n     * Get the user choice\n     */\n    getValue() {\n        if (this._editable) {\n            return this._input.value;\n        }\n        else {\n            return this._list.value;\n        }\n    }\n}\n/**\n * Widget body for input list dialog\n */\nclass InputMultipleItemsDialog extends InputDialogBase {\n    /**\n     * InputMultipleItemsDialog constructor\n     *\n     * @param options Constructor options\n     */\n    constructor(options) {\n        super(options);\n        let defaults = options.defaults || [];\n        this._list = document.createElement('select');\n        this._list.setAttribute('multiple', '');\n        options.items.forEach(item => {\n            const option = document.createElement('option');\n            option.value = item;\n            option.textContent = item;\n            this._list.appendChild(option);\n        });\n        // use the select\n        this._input.remove();\n        this.node.appendChild(this._list);\n        // select the current ones\n        const htmlOptions = this._list.options;\n        for (let i = 0; i < htmlOptions.length; i++) {\n            const option = htmlOptions[i];\n            if (defaults.includes(option.value)) {\n                option.selected = true;\n            }\n            else {\n                option.selected = false;\n            }\n        }\n    }\n    /**\n     * Get the user choices\n     */\n    getValue() {\n        let result = [];\n        for (let opt of this._list.options) {\n            if (opt.selected && !opt.classList.contains('hidden')) {\n                result.push(opt.value || opt.text);\n            }\n        }\n        return result;\n    }\n}\n//# sourceMappingURL=inputdialog.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ServerConnection } from '@jupyterlab/services';\nimport { jsonIcon, markdownIcon, spreadsheetIcon, VDomModel, VDomRenderer } from '@jupyterlab/ui-components';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\nimport { h } from '@lumino/virtualdom';\nimport { Panel, SplitPanel, TabBar, Widget } from '@lumino/widgets';\nimport * as React from 'react';\nconst FILTER_SECTION_TITLE_CLASS = 'jp-Licenses-Filters-title';\n/**\n * A license viewer\n */\nexport class Licenses extends SplitPanel {\n    constructor(options) {\n        super();\n        this.addClass('jp-Licenses');\n        this.model = options.model;\n        this.initLeftPanel();\n        this.initFilters();\n        this.initBundles();\n        this.initGrid();\n        this.initLicenseText();\n        this.setRelativeSizes([1, 2, 3]);\n        void this.model.initLicenses().then(() => this._updateBundles());\n        this.model.trackerDataChanged.connect(() => {\n            this.title.label = this.model.title;\n        });\n    }\n    /**\n     * Handle disposing of the widget\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._bundles.currentChanged.disconnect(this.onBundleSelected, this);\n        this.model.dispose();\n        super.dispose();\n    }\n    /**\n     * Initialize the left area for filters and bundles\n     */\n    initLeftPanel() {\n        this._leftPanel = new Panel();\n        this._leftPanel.addClass('jp-Licenses-FormArea');\n        this.addWidget(this._leftPanel);\n        SplitPanel.setStretch(this._leftPanel, 1);\n    }\n    /**\n     * Initialize the filters\n     */\n    initFilters() {\n        this._filters = new Licenses.Filters(this.model);\n        SplitPanel.setStretch(this._filters, 1);\n        this._leftPanel.addWidget(this._filters);\n    }\n    /**\n     * Initialize the listing of available bundles\n     */\n    initBundles() {\n        this._bundles = new TabBar({\n            orientation: 'vertical',\n            renderer: new Licenses.BundleTabRenderer(this.model)\n        });\n        this._bundles.addClass('jp-Licenses-Bundles');\n        SplitPanel.setStretch(this._bundles, 1);\n        this._leftPanel.addWidget(this._bundles);\n        this._bundles.currentChanged.connect(this.onBundleSelected, this);\n        this.model.stateChanged.connect(() => this._bundles.update());\n    }\n    /**\n     * Initialize the listing of packages within the current bundle\n     */\n    initGrid() {\n        this._grid = new Licenses.Grid(this.model);\n        SplitPanel.setStretch(this._grid, 1);\n        this.addWidget(this._grid);\n    }\n    /**\n     * Initialize the full text of the current package\n     */\n    initLicenseText() {\n        this._licenseText = new Licenses.FullText(this.model);\n        SplitPanel.setStretch(this._grid, 1);\n        this.addWidget(this._licenseText);\n    }\n    /**\n     * Event handler for updating the model with the current bundle\n     */\n    onBundleSelected() {\n        var _a;\n        if ((_a = this._bundles.currentTitle) === null || _a === void 0 ? void 0 : _a.label) {\n            this.model.currentBundleName = this._bundles.currentTitle.label;\n        }\n    }\n    /**\n     * Update the bundle tabs.\n     */\n    _updateBundles() {\n        this._bundles.clearTabs();\n        let i = 0;\n        const { currentBundleName } = this.model;\n        let currentIndex = 0;\n        for (const bundle of this.model.bundleNames) {\n            const tab = new Widget();\n            tab.title.label = bundle;\n            if (bundle === currentBundleName) {\n                currentIndex = i;\n            }\n            this._bundles.insertTab(++i, tab.title);\n        }\n        this._bundles.currentIndex = currentIndex;\n    }\n}\n/** A namespace for license components */\n(function (Licenses) {\n    /**\n     * License report formats understood by the server (once lower-cased)\n     */\n    Licenses.REPORT_FORMATS = {\n        markdown: {\n            id: 'markdown',\n            title: 'Markdown',\n            icon: markdownIcon\n        },\n        csv: {\n            id: 'csv',\n            title: 'CSV',\n            icon: spreadsheetIcon\n        },\n        json: {\n            id: 'json',\n            title: 'JSON',\n            icon: jsonIcon\n        }\n    };\n    /**\n     * The default format (most human-readable)\n     */\n    Licenses.DEFAULT_FORMAT = 'markdown';\n    /**\n     * A class used for fetching licenses from the server.\n     */\n    class LicensesClient {\n        /**\n         * Create a new license client.\n         */\n        constructor(options = {}) {\n            var _a;\n            this._licensesUrl = options.licensesUrl || '';\n            this._serverSettings =\n                (_a = options.serverSettings) !== null && _a !== void 0 ? _a : ServerConnection.makeSettings();\n        }\n        /**\n         * Download the licenses in the requested format.\n         */\n        async download(options) {\n            const url = `${this._licensesUrl}?format=${options.format}&download=1`;\n            const element = document.createElement('a');\n            element.href = url;\n            element.download = '';\n            document.body.appendChild(element);\n            element.click();\n            document.body.removeChild(element);\n            URL.revokeObjectURL(url);\n            return void 0;\n        }\n        /**\n         * Fetch the license bundles from the server.\n         */\n        async getBundles() {\n            const response = await ServerConnection.makeRequest(this._licensesUrl, {}, this._serverSettings);\n            return response.json();\n        }\n    }\n    Licenses.LicensesClient = LicensesClient;\n    /**\n     * A model for license data\n     */\n    class Model extends VDomModel {\n        constructor(options) {\n            super();\n            this._selectedPackageChanged = new Signal(this);\n            this._trackerDataChanged = new Signal(this);\n            this._currentPackageIndex = 0;\n            this._licensesReady = new PromiseDelegate();\n            this._packageFilter = {};\n            this._trans = options.trans;\n            this._client = options.client;\n            if (options.currentBundleName) {\n                this._currentBundleName = options.currentBundleName;\n            }\n            if (options.packageFilter) {\n                this._packageFilter = options.packageFilter;\n            }\n            if (options.currentPackageIndex) {\n                this._currentPackageIndex = options.currentPackageIndex;\n            }\n        }\n        /**\n         * Handle the initial request for the licenses from the server.\n         */\n        async initLicenses() {\n            try {\n                this._serverResponse = await this._client.getBundles();\n                this._licensesReady.resolve();\n                this.stateChanged.emit(void 0);\n            }\n            catch (err) {\n                this._licensesReady.reject(err);\n            }\n        }\n        /**\n         * Download the licenses in the requested format.\n         */\n        async download(options) {\n            return this._client.download(options);\n        }\n        /**\n         * A promise that resolves when the licenses from the server change\n         */\n        get selectedPackageChanged() {\n            return this._selectedPackageChanged;\n        }\n        /**\n         * A promise that resolves when the trackable data changes\n         */\n        get trackerDataChanged() {\n            return this._trackerDataChanged;\n        }\n        /**\n         * The names of the license bundles available\n         */\n        get bundleNames() {\n            var _a;\n            return Object.keys(((_a = this._serverResponse) === null || _a === void 0 ? void 0 : _a.bundles) || {});\n        }\n        /**\n         * The current license bundle\n         */\n        get currentBundleName() {\n            if (this._currentBundleName) {\n                return this._currentBundleName;\n            }\n            if (this.bundleNames.length) {\n                return this.bundleNames[0];\n            }\n            return null;\n        }\n        /**\n         * Set the current license bundle, and reset the selected index\n         */\n        set currentBundleName(currentBundleName) {\n            if (this._currentBundleName !== currentBundleName) {\n                this._currentBundleName = currentBundleName;\n                this.stateChanged.emit(void 0);\n                this._trackerDataChanged.emit(void 0);\n            }\n        }\n        /**\n         * A promise that resolves when the licenses are available from the server\n         */\n        get licensesReady() {\n            return this._licensesReady.promise;\n        }\n        /**\n         * All the license bundles, keyed by the distributing packages\n         */\n        get bundles() {\n            var _a;\n            return ((_a = this._serverResponse) === null || _a === void 0 ? void 0 : _a.bundles) || {};\n        }\n        /**\n         * The index of the currently-selected package within its license bundle\n         */\n        get currentPackageIndex() {\n            return this._currentPackageIndex;\n        }\n        /**\n         * Update the currently-selected package within its license bundle\n         */\n        set currentPackageIndex(currentPackageIndex) {\n            if (this._currentPackageIndex === currentPackageIndex) {\n                return;\n            }\n            this._currentPackageIndex = currentPackageIndex;\n            this._selectedPackageChanged.emit(void 0);\n            this.stateChanged.emit(void 0);\n            this._trackerDataChanged.emit(void 0);\n        }\n        /**\n         * The license data for the currently-selected package\n         */\n        get currentPackage() {\n            var _a;\n            if (this.currentBundleName &&\n                this.bundles &&\n                this._currentPackageIndex != null) {\n                return this.getFilteredPackages(((_a = this.bundles[this.currentBundleName]) === null || _a === void 0 ? void 0 : _a.packages) || [])[this._currentPackageIndex];\n            }\n            return null;\n        }\n        /**\n         * A translation bundle\n         */\n        get trans() {\n            return this._trans;\n        }\n        get title() {\n            return `${this._currentBundleName || ''} ${this._trans.__('Licenses')}`.trim();\n        }\n        /**\n         * The current package filter\n         */\n        get packageFilter() {\n            return this._packageFilter;\n        }\n        set packageFilter(packageFilter) {\n            this._packageFilter = packageFilter;\n            this.stateChanged.emit(void 0);\n            this._trackerDataChanged.emit(void 0);\n        }\n        /**\n         * Get filtered packages from current bundle where at least one token of each\n         * key is present.\n         */\n        getFilteredPackages(allRows) {\n            let rows = [];\n            let filters = Object.entries(this._packageFilter)\n                .filter(([k, v]) => v && `${v}`.trim().length)\n                .map(([k, v]) => [k, `${v}`.toLowerCase().trim().split(' ')]);\n            for (const row of allRows) {\n                let keyHits = 0;\n                for (const [key, bits] of filters) {\n                    let bitHits = 0;\n                    let rowKeyValue = `${row[key]}`.toLowerCase();\n                    for (const bit of bits) {\n                        if (rowKeyValue.includes(bit)) {\n                            bitHits += 1;\n                        }\n                    }\n                    if (bitHits) {\n                        keyHits += 1;\n                    }\n                }\n                if (keyHits === filters.length) {\n                    rows.push(row);\n                }\n            }\n            return Object.values(rows);\n        }\n    }\n    Licenses.Model = Model;\n    /**\n     * A filter form for limiting the packages displayed\n     */\n    class Filters extends VDomRenderer {\n        constructor(model) {\n            super(model);\n            /**\n             * Render a filter input\n             */\n            this.renderFilter = (key) => {\n                const value = this.model.packageFilter[key] || '';\n                return (React.createElement(\"input\", { type: \"text\", name: key, defaultValue: value, className: \"jp-mod-styled\", onInput: this.onFilterInput }));\n            };\n            /**\n             * Handle a filter input changing\n             */\n            this.onFilterInput = (evt) => {\n                const input = evt.currentTarget;\n                const { name, value } = input;\n                this.model.packageFilter = { ...this.model.packageFilter, [name]: value };\n            };\n            this.addClass('jp-Licenses-Filters');\n            this.addClass('jp-RenderedHTMLCommon');\n        }\n        render() {\n            const { trans } = this.model;\n            return (React.createElement(\"div\", null,\n                React.createElement(\"label\", null,\n                    React.createElement(\"strong\", { className: FILTER_SECTION_TITLE_CLASS }, trans.__('Filter Licenses By'))),\n                React.createElement(\"ul\", null,\n                    React.createElement(\"li\", null,\n                        React.createElement(\"label\", null, trans.__('Package')),\n                        this.renderFilter('name')),\n                    React.createElement(\"li\", null,\n                        React.createElement(\"label\", null, trans.__('Version')),\n                        this.renderFilter('versionInfo')),\n                    React.createElement(\"li\", null,\n                        React.createElement(\"label\", null, trans.__('License')),\n                        this.renderFilter('licenseId'))),\n                React.createElement(\"label\", null,\n                    React.createElement(\"strong\", { className: FILTER_SECTION_TITLE_CLASS }, trans.__('Distributions')))));\n        }\n    }\n    Licenses.Filters = Filters;\n    /**\n     * A fancy bundle renderer with the package count\n     */\n    class BundleTabRenderer extends TabBar.Renderer {\n        constructor(model) {\n            super();\n            this.closeIconSelector = '.lm-TabBar-tabCloseIcon';\n            this.model = model;\n        }\n        /**\n         * Render a full bundle\n         */\n        renderTab(data) {\n            let title = data.title.caption;\n            let key = this.createTabKey(data);\n            let style = this.createTabStyle(data);\n            let className = this.createTabClass(data);\n            let dataset = this.createTabDataset(data);\n            return h.li({ key, className, title, style, dataset }, this.renderIcon(data), this.renderLabel(data), this.renderCountBadge(data));\n        }\n        /**\n         * Render the package count\n         */\n        renderCountBadge(data) {\n            const bundle = data.title.label;\n            const { bundles } = this.model;\n            const packages = this.model.getFilteredPackages((bundles && bundle ? bundles[bundle].packages : []) || []);\n            return h.label({}, `${packages.length}`);\n        }\n    }\n    Licenses.BundleTabRenderer = BundleTabRenderer;\n    /**\n     * A grid of licenses\n     */\n    class Grid extends VDomRenderer {\n        constructor(model) {\n            super(model);\n            /**\n             * Render a single package's license information\n             */\n            this.renderRow = (row, index) => {\n                const selected = index === this.model.currentPackageIndex;\n                const onCheck = () => (this.model.currentPackageIndex = index);\n                return (React.createElement(\"tr\", { key: row.name, className: selected ? 'jp-mod-selected' : '', onClick: onCheck },\n                    React.createElement(\"td\", null,\n                        React.createElement(\"input\", { type: \"radio\", name: \"show-package-license\", value: index, onChange: onCheck, checked: selected })),\n                    React.createElement(\"th\", null, row.name),\n                    React.createElement(\"td\", null,\n                        React.createElement(\"code\", null, row.versionInfo)),\n                    React.createElement(\"td\", null,\n                        React.createElement(\"code\", null, row.licenseId))));\n            };\n            this.addClass('jp-Licenses-Grid');\n            this.addClass('jp-RenderedHTMLCommon');\n        }\n        /**\n         * Render a grid of package license information\n         */\n        render() {\n            var _a;\n            const { bundles, currentBundleName, trans } = this.model;\n            const filteredPackages = this.model.getFilteredPackages(bundles && currentBundleName\n                ? ((_a = bundles[currentBundleName]) === null || _a === void 0 ? void 0 : _a.packages) || []\n                : []);\n            if (!filteredPackages.length) {\n                return (React.createElement(\"blockquote\", null,\n                    React.createElement(\"em\", null, trans.__('No Packages found'))));\n            }\n            return (React.createElement(\"form\", null,\n                React.createElement(\"table\", null,\n                    React.createElement(\"thead\", null,\n                        React.createElement(\"tr\", null,\n                            React.createElement(\"td\", null),\n                            React.createElement(\"th\", null, trans.__('Package')),\n                            React.createElement(\"th\", null, trans.__('Version')),\n                            React.createElement(\"th\", null, trans.__('License')))),\n                    React.createElement(\"tbody\", null, filteredPackages.map(this.renderRow)))));\n        }\n    }\n    Licenses.Grid = Grid;\n    /**\n     * A package's full license text\n     */\n    class FullText extends VDomRenderer {\n        constructor(model) {\n            super(model);\n            this.addClass('jp-Licenses-Text');\n            this.addClass('jp-RenderedHTMLCommon');\n            this.addClass('jp-RenderedMarkdown');\n        }\n        /**\n         * Render the license text, or a null state if no package is selected\n         */\n        render() {\n            const { currentPackage, trans } = this.model;\n            let head = '';\n            let quote = trans.__('No Package selected');\n            let code = '';\n            if (currentPackage) {\n                const { name, versionInfo, licenseId, extractedText } = currentPackage;\n                head = `${name} v${versionInfo}`;\n                quote = `${trans.__('License')}: ${licenseId || trans.__('No License ID found')}`;\n                code = extractedText || trans.__('No License Text found');\n            }\n            return [\n                React.createElement(\"h1\", { key: \"h1\" }, head),\n                React.createElement(\"blockquote\", { key: \"quote\" },\n                    React.createElement(\"em\", null, quote)),\n                React.createElement(\"code\", { key: \"code\" }, code)\n            ];\n        }\n    }\n    Licenses.FullText = FullText;\n})(Licenses || (Licenses = {}));\n//# sourceMappingURL=licenses.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ServerConnection } from '@jupyterlab/services';\n/**\n * Any object is \"printable\" if it implements the `IPrintable` interface.\n *\n * To do this it, it must have a method called `Printing.symbol` which returns either a function\n * to print the object or null if it cannot be printed.\n *\n * One way of printing is to use the `printWidget` function, which creates a hidden iframe\n * and copies the DOM nodes from your widget to that iframe and printing just that iframe.\n *\n * Another way to print is to use the `printURL` function, which takes a URL and prints that page.\n */\nexport var Printing;\n(function (Printing) {\n    /**\n     * Symbol to use for a method that returns a function to print an object.\n     */\n    Printing.symbol = Symbol('printable');\n    /**\n     * Returns whether an object implements a print method.\n     */\n    function isPrintable(a) {\n        if (typeof a !== 'object' || !a) {\n            return false;\n        }\n        return Printing.symbol in a;\n    }\n    Printing.isPrintable = isPrintable;\n    /**\n     * Returns the print function for an object, or null if it does not provide a handler.\n     */\n    function getPrintFunction(val) {\n        if (isPrintable(val)) {\n            return val[Printing.symbol]();\n        }\n        return null;\n    }\n    Printing.getPrintFunction = getPrintFunction;\n    /**\n     * Prints a widget by copying it's DOM node\n     * to a hidden iframe and printing that iframe.\n     */\n    function printWidget(widget) {\n        return printContent(widget.node);\n    }\n    Printing.printWidget = printWidget;\n    /**\n     * Prints a URL by loading it into an iframe.\n     *\n     * @param url URL to load into an iframe.\n     */\n    async function printURL(url) {\n        const settings = ServerConnection.makeSettings();\n        const text = await (await ServerConnection.makeRequest(url, {}, settings)).text();\n        return printContent(text);\n    }\n    Printing.printURL = printURL;\n    /**\n     * Prints a URL or an element in an iframe and then removes the iframe after printing.\n     */\n    async function printContent(textOrEl) {\n        const isText = typeof textOrEl === 'string';\n        const iframe = createIFrame();\n        const parent = window.document.body;\n        parent.appendChild(iframe);\n        if (isText) {\n            iframe.srcdoc = textOrEl;\n            await resolveWhenLoaded(iframe);\n        }\n        else {\n            iframe.src = 'about:blank';\n            await resolveWhenLoaded(iframe);\n            setIFrameNode(iframe, textOrEl);\n        }\n        const printed = resolveAfterEvent();\n        launchPrint(iframe.contentWindow);\n        // Once the print dialog has been dismissed, we regain event handling,\n        // and it should be safe to discard the hidden iframe.\n        await printed;\n        parent.removeChild(iframe);\n    }\n    /**\n     * Creates a new hidden iframe and appends it to the document\n     *\n     * Modified from\n     * https://github.com/joseluisq/printd/blob/eb7948d602583c055ab6dee3ee294b6a421da4b6/src/index.ts#L24\n     */\n    function createIFrame() {\n        const el = window.document.createElement('iframe');\n        // We need both allow-modals and allow-same-origin to be able to\n        // call print in the iframe.\n        // We intentionally do not allow scripts:\n        // https://github.com/jupyterlab/jupyterlab/pull/5850#pullrequestreview-230899790\n        el.setAttribute('sandbox', 'allow-modals allow-same-origin');\n        const css = 'visibility:hidden;width:0;height:0;position:absolute;z-index:-9999;bottom:0;';\n        el.setAttribute('style', css);\n        el.setAttribute('width', '0');\n        el.setAttribute('height', '0');\n        return el;\n    }\n    /**\n     * Copies a node from the base document to the iframe.\n     */\n    function setIFrameNode(iframe, node) {\n        iframe.contentDocument.body.appendChild(node.cloneNode(true));\n        iframe.contentDocument.close();\n    }\n    /**\n     * Promise that resolves when all resources are loaded in the window.\n     */\n    function resolveWhenLoaded(iframe) {\n        return new Promise(resolve => {\n            iframe.onload = () => resolve();\n        });\n    }\n    /**\n     * A promise that resolves after the next mousedown, mousemove, or\n     * keydown event. We use this as a proxy for determining when the\n     * main window has regained control after the print dialog is removed.\n     *\n     * We can't use the usual window.onafterprint handler because we\n     * disallow Javascript execution in the print iframe.\n     */\n    function resolveAfterEvent() {\n        return new Promise(resolve => {\n            const onEvent = () => {\n                document.removeEventListener('mousemove', onEvent, true);\n                document.removeEventListener('mousedown', onEvent, true);\n                document.removeEventListener('keydown', onEvent, true);\n                resolve();\n            };\n            document.addEventListener('mousemove', onEvent, true);\n            document.addEventListener('mousedown', onEvent, true);\n            document.addEventListener('keydown', onEvent, true);\n        });\n    }\n    /**\n     * Prints a content window.\n     */\n    function launchPrint(contentWindow) {\n        const result = contentWindow.document.execCommand('print', false);\n        // execCommand won't work in firefox so we call the `print` method instead if it fails\n        // https://github.com/joseluisq/printd/blob/eb7948d602583c055ab6dee3ee294b6a421da4b6/src/index.ts#L148\n        if (!result) {\n            contentWindow.print();\n        }\n    }\n})(Printing || (Printing = {}));\n//# sourceMappingURL=printing.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { ReactiveToolbar, Spinner } from '@jupyterlab/ui-components';\nimport { MessageLoop } from '@lumino/messaging';\nimport { BoxLayout, BoxPanel, Widget } from '@lumino/widgets';\nimport { DOMUtils } from './domutils';\nimport { Printing } from './printing';\n/**\n * A flag to indicate that event handlers are caught in the capture phase.\n */\nconst USE_CAPTURE = true;\n/**\n * A widget meant to be contained in the JupyterLab main area.\n *\n * #### Notes\n * Mirrors all of the `title` attributes of the content.\n * This widget is `closable` by default.\n * This widget is automatically disposed when closed.\n * This widget ensures its own focus when activated.\n */\nexport class MainAreaWidget extends Widget {\n    /**\n     * Construct a new main area widget.\n     *\n     * @param options - The options for initializing the widget.\n     */\n    constructor(options) {\n        super(options);\n        this._changeGuard = false;\n        this._spinner = new Spinner();\n        this._isRevealed = false;\n        this._evtMouseDown = () => {\n            if (!this.node.contains(document.activeElement)) {\n                this._focusContent();\n            }\n        };\n        this.addClass('jp-MainAreaWidget');\n        // Set contain=strict to avoid many forced layout rendering while adding cells.\n        // Don't forget to remove the CSS class when your remove the spinner to allow\n        // the content to be rendered.\n        // @see https://github.com/jupyterlab/jupyterlab/issues/9381\n        this.addClass('jp-MainAreaWidget-ContainStrict');\n        this.id = DOMUtils.createDomID();\n        const trans = (options.translator || nullTranslator).load('jupyterlab');\n        const content = (this._content = options.content);\n        content.node.setAttribute('role', 'region');\n        content.node.setAttribute('aria-label', trans.__('notebook content'));\n        const toolbar = (this._toolbar =\n            options.toolbar || new ReactiveToolbar({ noFocusOnClick: true }));\n        toolbar.node.setAttribute('role', 'toolbar');\n        toolbar.node.setAttribute('aria-label', trans.__('notebook actions'));\n        const contentHeader = (this._contentHeader =\n            options.contentHeader ||\n                new BoxPanel({\n                    direction: 'top-to-bottom',\n                    spacing: 0\n                }));\n        const layout = (this.layout = new BoxLayout({ spacing: 0 }));\n        layout.direction = 'top-to-bottom';\n        BoxLayout.setStretch(toolbar, 0);\n        BoxLayout.setStretch(contentHeader, 0);\n        BoxLayout.setStretch(content, 1);\n        layout.addWidget(toolbar);\n        layout.addWidget(contentHeader);\n        layout.addWidget(content);\n        if (!content.id) {\n            content.id = DOMUtils.createDomID();\n        }\n        content.node.tabIndex = -1;\n        this._updateTitle();\n        content.title.changed.connect(this._updateTitle, this);\n        this.title.closable = true;\n        this.title.changed.connect(this._updateContentTitle, this);\n        if (options.reveal) {\n            this.node.appendChild(this._spinner.node);\n            this._revealed = options.reveal\n                .then(() => {\n                if (content.isDisposed) {\n                    this.dispose();\n                    return;\n                }\n                content.disposed.connect(() => this.dispose());\n                const active = document.activeElement === this._spinner.node;\n                this._disposeSpinner();\n                this._isRevealed = true;\n                if (active) {\n                    this._focusContent();\n                }\n            })\n                .catch(e => {\n                // Show a revealed promise error.\n                const error = new Widget();\n                error.addClass('jp-MainAreaWidget-error');\n                // Show the error to the user.\n                const pre = document.createElement('pre');\n                pre.textContent = String(e);\n                error.node.appendChild(pre);\n                BoxLayout.setStretch(error, 1);\n                this._disposeSpinner();\n                content.dispose();\n                this._content = null;\n                toolbar.dispose();\n                this._toolbar = null;\n                layout.addWidget(error);\n                this._isRevealed = true;\n                throw error;\n            });\n        }\n        else {\n            // Handle no reveal promise.\n            this._spinner.dispose();\n            this.removeClass('jp-MainAreaWidget-ContainStrict');\n            content.disposed.connect(() => this.dispose());\n            this._isRevealed = true;\n            this._revealed = Promise.resolve(undefined);\n        }\n    }\n    /**\n     * Print method. Deferred to content.\n     */\n    [Printing.symbol]() {\n        if (!this._content) {\n            return null;\n        }\n        return Printing.getPrintFunction(this._content);\n    }\n    /**\n     * The content hosted by the widget.\n     */\n    get content() {\n        return this._content;\n    }\n    /**\n     * The toolbar hosted by the widget.\n     */\n    get toolbar() {\n        return this._toolbar;\n    }\n    /**\n     * A panel for widgets that sit between the toolbar and the content.\n     * Imagine a formatting toolbar, notification headers, etc.\n     */\n    get contentHeader() {\n        return this._contentHeader;\n    }\n    /**\n     * Whether the content widget or an error is revealed.\n     */\n    get isRevealed() {\n        return this._isRevealed;\n    }\n    /**\n     * A promise that resolves when the widget is revealed.\n     */\n    get revealed() {\n        return this._revealed;\n    }\n    /**\n     * Handle `'activate-request'` messages.\n     */\n    onActivateRequest(msg) {\n        if (this._isRevealed) {\n            this._focusContent();\n        }\n        else {\n            this._spinner.node.focus();\n        }\n    }\n    /**\n     * Handle `after-attach` messages for the widget.\n     */\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        // Focus content in capture phase to ensure relevant commands operate on the\n        // current main area widget.\n        // Add the event listener directly instead of using `handleEvent` in order\n        // to save sub-classes from needing to reason about calling it as well.\n        this.node.addEventListener('mousedown', this._evtMouseDown, USE_CAPTURE);\n    }\n    /**\n     * Handle `before-detach` messages for the widget.\n     */\n    onBeforeDetach(msg) {\n        this.node.removeEventListener('mousedown', this._evtMouseDown, USE_CAPTURE);\n        super.onBeforeDetach(msg);\n    }\n    /**\n     * Handle `'close-request'` messages.\n     */\n    onCloseRequest(msg) {\n        this.dispose();\n    }\n    /**\n     * Handle `'update-request'` messages by forwarding them to the content.\n     */\n    onUpdateRequest(msg) {\n        if (this._content) {\n            MessageLoop.sendMessage(this._content, msg);\n        }\n    }\n    _disposeSpinner() {\n        this.node.removeChild(this._spinner.node);\n        this._spinner.dispose();\n        this.removeClass('jp-MainAreaWidget-ContainStrict');\n    }\n    /**\n     * Update the title based on the attributes of the child widget.\n     */\n    _updateTitle() {\n        if (this._changeGuard || !this.content) {\n            return;\n        }\n        this._changeGuard = true;\n        const content = this.content;\n        this.title.label = content.title.label;\n        this.title.mnemonic = content.title.mnemonic;\n        this.title.icon = content.title.icon;\n        this.title.iconClass = content.title.iconClass;\n        this.title.iconLabel = content.title.iconLabel;\n        this.title.caption = content.title.caption;\n        this.title.className = content.title.className;\n        this.title.dataset = content.title.dataset;\n        this._changeGuard = false;\n    }\n    /**\n     * Update the content title based on attributes of the main widget.\n     */\n    _updateContentTitle() {\n        if (this._changeGuard || !this.content) {\n            return;\n        }\n        this._changeGuard = true;\n        const content = this.content;\n        content.title.label = this.title.label;\n        content.title.mnemonic = this.title.mnemonic;\n        content.title.icon = this.title.icon;\n        content.title.iconClass = this.title.iconClass;\n        content.title.iconLabel = this.title.iconLabel;\n        content.title.caption = this.title.caption;\n        content.title.className = this.title.className;\n        content.title.dataset = this.title.dataset;\n        this._changeGuard = false;\n    }\n    /**\n     * Give focus to the content.\n     */\n    _focusContent() {\n        if (!this.content) {\n            return;\n        }\n        // Focus the content node if we aren't already focused on it or a\n        // descendent.\n        if (!this.content.node.contains(document.activeElement)) {\n            this.content.node.focus();\n        }\n        // Activate the content asynchronously (which may change the focus).\n        this.content.activate();\n    }\n}\n//# sourceMappingURL=mainareawidget.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { Text } from '@jupyterlab/coreutils';\nimport { LabIcon } from '@jupyterlab/ui-components';\nimport { JSONExt } from '@lumino/coreutils';\n/**\n * Helper functions to build a menu from the settings\n */\nexport var MenuFactory;\n(function (MenuFactory) {\n    /**\n     * Create menus from their description\n     *\n     * @param data Menubar description\n     * @param menuFactory Factory for empty menu\n     */\n    function createMenus(data, menuFactory) {\n        return data\n            .filter(item => !item.disabled)\n            .sort((a, b) => { var _a, _b; return ((_a = a.rank) !== null && _a !== void 0 ? _a : Infinity) - ((_b = b.rank) !== null && _b !== void 0 ? _b : Infinity); })\n            .map(menuItem => {\n            return dataToMenu(menuItem, menuFactory);\n        });\n    }\n    MenuFactory.createMenus = createMenus;\n    /**\n     * Convert a menu description in a JupyterLabMenu object\n     *\n     * @param item Menu description\n     * @param menuFactory Empty menu factory\n     * @returns The menu widget\n     */\n    function dataToMenu(item, menuFactory) {\n        var _a, _b;\n        const menu = menuFactory(item);\n        menu.id = item.id;\n        // Set the label in case the menu factory did not.\n        if (!menu.title.label) {\n            menu.title.label = (_a = item.label) !== null && _a !== void 0 ? _a : Text.titleCase(menu.id.trim());\n        }\n        if (item.icon) {\n            menu.title.icon = LabIcon.resolve({ icon: item.icon });\n        }\n        if (item.mnemonic !== undefined) {\n            menu.title.mnemonic = item.mnemonic;\n        }\n        (_b = item.items) === null || _b === void 0 ? void 0 : _b.filter(item => !item.disabled).sort((a, b) => { var _a, _b; return ((_a = a.rank) !== null && _a !== void 0 ? _a : Infinity) - ((_b = b.rank) !== null && _b !== void 0 ? _b : Infinity); }).map(item => {\n            addItem(item, menu, menuFactory);\n        });\n        return menu;\n    }\n    /**\n     * Convert an item description in a context menu item object\n     *\n     * @param item Context menu item\n     * @param menu Context menu to populate\n     * @param menuFactory Empty menu factory\n     */\n    function addContextItem(item, menu, menuFactory) {\n        const { submenu, ...newItem } = item;\n        // Commands may not have been registered yet; so we don't force it to exist\n        menu.addItem({\n            ...newItem,\n            submenu: submenu ? dataToMenu(submenu, menuFactory) : null\n        });\n    }\n    MenuFactory.addContextItem = addContextItem;\n    /**\n     * Convert an item description in a menu item object\n     *\n     * @param item Menu item\n     * @param menu Menu to populate\n     * @param menuFactory Empty menu factory\n     */\n    function addItem(item, menu, menuFactory) {\n        const { submenu, ...newItem } = item;\n        // Commands may not have been registered yet; so we don't force it to exist\n        menu.addItem({\n            ...newItem,\n            submenu: submenu ? dataToMenu(submenu, menuFactory) : null\n        });\n    }\n    /**\n     * Update an existing list of menu and returns\n     * the new elements.\n     *\n     * #### Note\n     * New elements are added to the current menu list.\n     *\n     * @param menus Current menus\n     * @param data New description to take into account\n     * @param menuFactory Empty menu factory\n     * @returns Newly created menus\n     */\n    function updateMenus(menus, data, menuFactory) {\n        const newMenus = [];\n        data.forEach(item => {\n            const menu = menus.find(menu => menu.id === item.id);\n            if (menu) {\n                mergeMenus(item, menu, menuFactory);\n            }\n            else {\n                if (!item.disabled) {\n                    newMenus.push(dataToMenu(item, menuFactory));\n                }\n            }\n        });\n        menus.push(...newMenus);\n        return newMenus;\n    }\n    MenuFactory.updateMenus = updateMenus;\n    function mergeMenus(item, menu, menuFactory) {\n        var _a;\n        if (item.disabled) {\n            menu.dispose();\n        }\n        else {\n            (_a = item.items) === null || _a === void 0 ? void 0 : _a.forEach(entry => {\n                var _a, _b;\n                const existingItem = menu === null || menu === void 0 ? void 0 : menu.items.find((i, idx) => {\n                    var _a, _b, _c;\n                    return i.type === entry.type &&\n                        i.command === ((_a = entry.command) !== null && _a !== void 0 ? _a : '') &&\n                        ((_b = i.submenu) === null || _b === void 0 ? void 0 : _b.id) === ((_c = entry.submenu) === null || _c === void 0 ? void 0 : _c.id);\n                });\n                if (existingItem && entry.type !== 'separator') {\n                    if (entry.disabled) {\n                        menu.removeItem(existingItem);\n                    }\n                    else {\n                        switch ((_a = entry.type) !== null && _a !== void 0 ? _a : 'command') {\n                            case 'command':\n                                if (entry.command) {\n                                    if (!JSONExt.deepEqual(existingItem.args, (_b = entry.args) !== null && _b !== void 0 ? _b : {})) {\n                                        addItem(entry, menu, menuFactory);\n                                    }\n                                }\n                                break;\n                            case 'submenu':\n                                if (entry.submenu) {\n                                    mergeMenus(entry.submenu, existingItem.submenu, menuFactory);\n                                }\n                        }\n                    }\n                }\n                else {\n                    addItem(entry, menu, menuFactory);\n                }\n            });\n        }\n    }\n})(MenuFactory || (MenuFactory = {}));\n//# sourceMappingURL=menufactory.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { UUID } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\n/**\n * Notification manager\n */\nexport class NotificationManager {\n    constructor() {\n        this._isDisposed = false;\n        this._queue = [];\n        this._changed = new Signal(this);\n    }\n    /**\n     * Signal emitted whenever a notification changes.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Total number of notifications.\n     */\n    get count() {\n        return this._queue.length;\n    }\n    /**\n     * Whether the manager is disposed or not.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * The list of notifications.\n     */\n    get notifications() {\n        return this._queue.slice();\n    }\n    /**\n     * Dismiss one notification (specified by its id) or all if no id provided.\n     *\n     * @param id Notification id\n     */\n    dismiss(id) {\n        if (typeof id === 'undefined') {\n            const q = this._queue.slice();\n            this._queue.length = 0;\n            for (const notification of q) {\n                this._changed.emit({\n                    type: 'removed',\n                    notification\n                });\n            }\n        }\n        else {\n            const notificationIndex = this._queue.findIndex(n => n.id === id);\n            if (notificationIndex > -1) {\n                const notification = this._queue.splice(notificationIndex, 1)[0];\n                this._changed.emit({\n                    type: 'removed',\n                    notification\n                });\n            }\n        }\n    }\n    /**\n     * Dispose the manager.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n    }\n    /**\n     * Test whether a notification exists or not.\n     *\n     * @param id Notification id\n     * @returns Notification status\n     */\n    has(id) {\n        return this._queue.findIndex(n => n.id === id) > -1;\n    }\n    /**\n     * Add a new notification.\n     *\n     * This will trigger the `changed` signal with an `added` event.\n     *\n     * @param message Notification message\n     * @param type Notification type\n     * @param options Notification option\n     * @returns Notification unique id\n     */\n    notify(message, type, options) {\n        const now = Date.now();\n        const { progress, ...othersOptions } = options;\n        const notification = Object.freeze({\n            id: UUID.uuid4(),\n            createdAt: now,\n            modifiedAt: now,\n            message,\n            type,\n            options: {\n                // By default notification will be silent\n                autoClose: 0,\n                progress: typeof progress === 'number'\n                    ? Math.min(Math.max(0, progress), 1)\n                    : progress,\n                ...othersOptions\n            }\n        });\n        this._queue.unshift(notification);\n        this._changed.emit({\n            type: 'added',\n            notification\n        });\n        return notification.id;\n    }\n    /**\n     * Update an existing notification.\n     *\n     * If the notification does not exists this won't do anything.\n     *\n     * Once updated the notification will be moved at the begin\n     * of the notification stack.\n     *\n     * @param args Update options\n     * @returns Whether the update was successful or not.\n     */\n    update(args) {\n        const { id, message, actions, autoClose, data, progress, type } = args;\n        const newProgress = typeof progress === 'number'\n            ? Math.min(Math.max(0, progress), 1)\n            : progress;\n        const notificationIndex = this._queue.findIndex(n => n.id === id);\n        if (notificationIndex > -1) {\n            const oldNotification = this._queue[notificationIndex];\n            // We need to create a new object as notification are frozen; i.e. cannot be edited\n            const notification = Object.freeze({\n                ...oldNotification,\n                message: message !== null && message !== void 0 ? message : oldNotification.message,\n                type: type !== null && type !== void 0 ? type : oldNotification.type,\n                options: {\n                    actions: actions !== null && actions !== void 0 ? actions : oldNotification.options.actions,\n                    autoClose: autoClose !== null && autoClose !== void 0 ? autoClose : oldNotification.options.autoClose,\n                    data: data !== null && data !== void 0 ? data : oldNotification.options.data,\n                    progress: newProgress !== null && newProgress !== void 0 ? newProgress : oldNotification.options.progress\n                },\n                modifiedAt: Date.now()\n            });\n            this._queue.splice(notificationIndex, 1);\n            this._queue.unshift(notification);\n            this._changed.emit({\n                type: 'updated',\n                notification\n            });\n            return true;\n        }\n        return false;\n    }\n}\n/**\n * Notification namespace\n */\nexport var Notification;\n(function (Notification) {\n    /**\n     * The global notification manager.\n     */\n    Notification.manager = new NotificationManager();\n    /**\n     * Dismiss one notification (specified by its id) or all if no id provided\n     *\n     * @param id notification id\n     */\n    function dismiss(id) {\n        Notification.manager.dismiss(id);\n    }\n    Notification.dismiss = dismiss;\n    /**\n     * Helper function to emit a notification.\n     *\n     * #### Notes\n     * The message will be truncated if longer than 140 characters.\n     *\n     * @param message Notification message\n     * @param type Notification type\n     * @param options Options for the error notification\n     * @returns Notification unique id\n     */\n    function emit(message, type = 'default', options = {}) {\n        return Notification.manager.notify(message, type, options);\n    }\n    Notification.emit = emit;\n    /**\n     * Helper function to emit an error notification.\n     *\n     * #### Notes\n     * The message will be truncated if longer than 140 characters.\n     *\n     * @param message Notification message\n     * @param options Options for the error notification\n     * @returns Notification unique id\n     */\n    function error(message, options = {}) {\n        return Notification.manager.notify(message, 'error', options);\n    }\n    Notification.error = error;\n    /**\n     * Helper function to emit an info notification.\n     *\n     * #### Notes\n     * The message will be truncated if longer than 140 characters.\n     *\n     * @param message Notification message\n     * @param options Options for the info notification\n     * @returns Notification unique id\n     */\n    function info(message, options = {}) {\n        return Notification.manager.notify(message, 'info', options);\n    }\n    Notification.info = info;\n    /**\n     * Helper function to show an in-progress notification.\n     *\n     * #### Notes\n     * The message will be truncated if longer than 140 characters.\n     *\n     * @param promise Promise to wait for\n     * @param options Options for the in-progress notification\n     * @returns Notification unique id\n     */\n    function promise(promise, options) {\n        var _a;\n        const { pending, error, success } = options;\n        const id = Notification.manager.notify(pending.message, 'in-progress', (_a = pending.options) !== null && _a !== void 0 ? _a : {});\n        promise\n            .then(result => {\n            var _a, _b, _c;\n            Notification.manager.update({\n                id,\n                message: success.message(result, (_a = success.options) === null || _a === void 0 ? void 0 : _a.data),\n                type: 'success',\n                ...success.options,\n                data: (_c = (_b = success.options) === null || _b === void 0 ? void 0 : _b.data) !== null && _c !== void 0 ? _c : result\n            });\n        })\n            .catch(reason => {\n            var _a, _b, _c;\n            Notification.manager.update({\n                id,\n                message: error.message(reason, (_a = error.options) === null || _a === void 0 ? void 0 : _a.data),\n                type: 'error',\n                ...error.options,\n                data: (_c = (_b = error.options) === null || _b === void 0 ? void 0 : _b.data) !== null && _c !== void 0 ? _c : reason\n            });\n        });\n        return id;\n    }\n    Notification.promise = promise;\n    /**\n     * Helper function to emit a success notification.\n     *\n     * #### Notes\n     * The message will be truncated if longer than 140 characters.\n     *\n     * @param message Notification message\n     * @param options Options for the success notification\n     * @returns Notification unique id\n     */\n    function success(message, options = {}) {\n        return Notification.manager.notify(message, 'success', options);\n    }\n    Notification.success = success;\n    /**\n     * Helper function to update a notification.\n     *\n     * If the notification does not exists, nothing will happen.\n     *\n     * Once updated the notification will be moved at the begin\n     * of the notification stack.\n     *\n     * #### Notes\n     * The message will be truncated if longer than 140 characters.\n     *\n     * @param args Update options\n     * @returns Whether the update was successful or not.\n     */\n    function update(args) {\n        return Notification.manager.update(args);\n    }\n    Notification.update = update;\n    /**\n     * Helper function to emit a warning notification.\n     *\n     * #### Notes\n     * The message will be truncated if longer than 140 characters.\n     *\n     * @param message Notification message\n     * @param options Options for the warning notification\n     * @returns Notification unique id\n     */\n    function warning(message, options = {}) {\n        return Notification.manager.notify(message, 'warning', options);\n    }\n    Notification.warning = warning;\n})(Notification || (Notification = {}));\n//# sourceMappingURL=notification.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { kernelIcon, terminalIcon, VDomModel, VDomRenderer } from '@jupyterlab/ui-components';\nimport React from 'react';\nimport { GroupItem, TextItem } from '@jupyterlab/statusbar';\n/**\n * Half spacing between subitems in a status item, in pixels.\n */\nconst HALF_SPACING = 4;\n/**\n * A pure functional component for rendering kernel and terminal sessions.\n *\n * @param props the props for the component.\n *\n * @returns a tsx component for the running sessions.\n */\nfunction RunningSessionsComponent(props) {\n    var _a, _b;\n    const showKernels = (_a = props.showKernels) !== null && _a !== void 0 ? _a : true;\n    const showTerminals = (_b = props.showTerminals) !== null && _b !== void 0 ? _b : props.terminals > 0;\n    return (React.createElement(GroupItem, { tabIndex: 0, spacing: HALF_SPACING, onClick: props.handleClick, onKeyDown: props.handleKeyDown, style: { cursor: 'pointer' } },\n        showTerminals ? (React.createElement(GroupItem, { spacing: HALF_SPACING },\n            React.createElement(TextItem, { source: props.terminals }),\n            React.createElement(terminalIcon.react, { verticalAlign: \"middle\", stylesheet: \"statusBar\" }))) : null,\n        showKernels ? (React.createElement(GroupItem, { spacing: HALF_SPACING },\n            React.createElement(TextItem, { source: props.sessions }),\n            React.createElement(kernelIcon.react, { verticalAlign: \"middle\", stylesheet: \"statusBar\" }))) : null));\n}\n/**\n * A VDomRenderer for a RunningSessions status item.\n */\nexport class RunningSessions extends VDomRenderer {\n    /**\n     * Create a new RunningSessions widget.\n     */\n    constructor(opts) {\n        super(new RunningSessions.Model());\n        this._serviceManager = opts.serviceManager;\n        this._handleClick = opts.onClick;\n        this._handleKeyDown = opts.onKeyDown;\n        this.translator = opts.translator || nullTranslator;\n        this._showKernels = opts.showKernels;\n        this._showTerminals = opts.showTerminals;\n        this._trans = this.translator.load('jupyterlab');\n        this._serviceManager.sessions.runningChanged.connect(this._onSessionsRunningChanged, this);\n        this._serviceManager.terminals.runningChanged.connect(this._onTerminalsRunningChanged, this);\n        this.addClass('jp-mod-highlighted');\n    }\n    /**\n     * Render the running sessions widget.\n     */\n    render() {\n        if (!this.model) {\n            return null;\n        }\n        // TODO-TRANS: Should probably be handled differently.\n        // This is more localizable friendly: \"Terminals: %1 | Kernels: %2\"\n        // Generate a localized caption for the tooltip\n        const caption = this._trans.__('%1 Terminals, %2 Kernel sessions', this.model.terminals, this.model.sessions);\n        // Explicitly synchronize the title attribute with the Lumino widget's DOM\n        // This ensures the tooltip displays correctly when hovering over the widget\n        this.node.title = caption;\n        return (React.createElement(RunningSessionsComponent, { sessions: this.model.sessions, terminals: this.model.terminals, handleClick: this._handleClick, handleKeyDown: this._handleKeyDown, showKernels: this._showKernels, showTerminals: this._showTerminals }));\n    }\n    /**\n     * Dispose of the status item.\n     */\n    dispose() {\n        super.dispose();\n        this._serviceManager.sessions.runningChanged.disconnect(this._onSessionsRunningChanged, this);\n        this._serviceManager.terminals.runningChanged.disconnect(this._onTerminalsRunningChanged, this);\n    }\n    /**\n     * Set the number of kernel sessions when the list changes.\n     */\n    _onSessionsRunningChanged(manager, sessions) {\n        this.model.sessions = sessions.length;\n    }\n    /**\n     * Set the number of terminal sessions when the list changes.\n     */\n    _onTerminalsRunningChanged(manager, terminals) {\n        this.model.terminals = terminals.length;\n    }\n}\n/**\n * A namespace for RunningSessions statics.\n */\n(function (RunningSessions) {\n    /**\n     * A VDomModel for the RunningSessions status item.\n     */\n    class Model extends VDomModel {\n        constructor() {\n            super(...arguments);\n            this._terminals = 0;\n            this._sessions = 0;\n        }\n        /**\n         * The number of active kernel sessions.\n         */\n        get sessions() {\n            return this._sessions;\n        }\n        set sessions(sessions) {\n            const oldSessions = this._sessions;\n            this._sessions = sessions;\n            if (oldSessions !== this._sessions) {\n                this.stateChanged.emit(void 0);\n            }\n        }\n        /**\n         * The number of active terminal sessions.\n         */\n        get terminals() {\n            return this._terminals;\n        }\n        set terminals(terminals) {\n            const oldTerminals = this._terminals;\n            this._terminals = terminals;\n            if (oldTerminals !== this._terminals) {\n                this.stateChanged.emit(void 0);\n            }\n        }\n    }\n    RunningSessions.Model = Model;\n})(RunningSessions || (RunningSessions = {}));\n//# sourceMappingURL=runningSessions.js.map","/* eslint-disable camelcase */\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport sanitize from 'sanitize-html';\n/**\n * Helper class that contains regular expressions for inline CSS style validation.\n *\n * Which properties (and values) to allow is largely based on the Google Caja project:\n *   https://github.com/google/caja\n *\n * The regular expressions are largly based on the syntax definition found at\n * https://developer.mozilla.org/en-US/docs/Web/CSS.\n */\nclass CssProp {\n    static reg(r) {\n        return new RegExp('^' + r + '$', 'i');\n    }\n}\n/*\n * Numeric base expressions used to help build more complex regular expressions\n */\nCssProp.N = {\n    integer: `[+-]?[0-9]+`,\n    integer_pos: `[+]?[0-9]+`,\n    integer_zero_ff: `([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])`,\n    number: `[+-]?([0-9]*[.])?[0-9]+(e-?[0-9]*)?`,\n    number_pos: `[+]?([0-9]*[.])?[0-9]+(e-?[0-9]*)?`,\n    number_zero_hundred: `[+]?(([0-9]|[1-9][0-9])([.][0-9]+)?|100)`,\n    number_zero_one: `[+]?(1([.][0]+)?|0?([.][0-9]+)?)`\n};\n/*\n * Base expressions of common CSS syntax elements\n */\nCssProp.B = {\n    angle: `(${CssProp.N.number}(deg|rad|grad|turn)|0)`,\n    frequency: `${CssProp.N.number}(Hz|kHz)`,\n    ident: String.raw `-?([_a-z]|[\\xA0-\\xFF]|\\\\[0-9a-f]{1,6}(\\r\\n|[ \\t\\r\\n\\f])?|\\\\[^\\r\\n\\f0-9a-f])([_a-z0-9-]|[\\xA0-\\xFF]|\\\\[0-9a-f]{1,6}(\\r\\n|[ \\t\\r\\n\\f])?|\\\\[^\\r\\n\\f0-9a-f])*`,\n    len_or_perc: `(0|${CssProp.N.number}(px|em|rem|ex|in|cm|mm|pt|pc|%))`,\n    length: `(${CssProp.N.number}(px|em|rem|ex|in|cm|mm|pt|pc)|0)`,\n    length_pos: `(${CssProp.N.number_pos}(px|em|rem|ex|in|cm|mm|pt|pc)|0)`,\n    percentage: `${CssProp.N.number}%`,\n    percentage_pos: `${CssProp.N.number_pos}%`,\n    percentage_zero_hundred: `${CssProp.N.number_zero_hundred}%`,\n    string: String.raw `(\\\"([^\\n\\r\\f\\\\\"]|\\\\\\n|\\r\\n|\\r|\\f|\\\\[0-9a-f]{1,6}(\\r\\n|[ \\t\\r\\n\\f])?|\\\\[^\\r\\n\\f0-9a-f])*\\\")|(\\'([^\\n\\r\\f\\\\']|\\\\\\n|\\r\\n|\\r|\\f|\\\\[0-9a-f]{1,6}(\\r\\n|[ \\t\\r\\n\\f])?|\\\\[^\\r\\n\\f0-9a-f])*\\')`,\n    time: `${CssProp.N.number}(s|ms)`,\n    url: `url\\\\(.*?\\\\)`,\n    z_index: `[+-]?[0-9]{1,7}`\n};\n/*\n * Atomic (i.e. not dependent on other regular expressions) sub RegEx segments\n */\nCssProp.A = {\n    absolute_size: `xx-small|x-small|small|medium|large|x-large|xx-large`,\n    attachment: `scroll|fixed|local`,\n    bg_origin: `border-box|padding-box|content-box`,\n    border_style: `none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset`,\n    box: `border-box|padding-box|content-box`,\n    display_inside: `auto|block|table|flex|grid`,\n    display_outside: `block-level|inline-level|none|table-row-group|table-header-group|table-footer-group|table-row|table-cell|table-column-group|table-column|table-caption`,\n    ending_shape: `circle|ellipse`,\n    generic_family: `serif|sans-serif|cursive|fantasy|monospace`,\n    generic_voice: `male|female|child`,\n    relative_size: `smaller|larger`,\n    repeat_style: `repeat-x|repeat-y|((?:repeat|space|round|no-repeat)(?:\\\\s*(?:repeat|space|round|no-repeat))?)`,\n    side_or_corner: `(left|right)?\\\\s*(top|bottom)?`,\n    single_animation_direction: `normal|reverse|alternate|alternate-reverse`,\n    single_animation_fill_mode: `none|forwards|backwards|both`,\n    single_animation_play_state: `running|paused`\n};\n/*\n * Color definition sub expressions\n */\nCssProp._COLOR = {\n    hex: `\\\\#(0x)?[0-9a-f]+`,\n    name: `aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|transparent|violet|wheat|white|whitesmoke|yellow|yellowgreen`,\n    rgb: String.raw `rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)`,\n    rgba: String.raw `rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(${CssProp.N.integer_zero_ff}|${CssProp.N.number_zero_one}|${CssProp.B.percentage_zero_hundred})\\s*\\)`\n};\n/*\n * Compound (i.e. dependent on other (sub) regular expressions) sub RegEx segments\n */\nCssProp._C = {\n    alpha: `${CssProp.N.integer_zero_ff}|${CssProp.N.number_zero_one}|${CssProp.B.percentage_zero_hundred}`,\n    alphavalue: CssProp.N.number_zero_one,\n    bg_position: `((${CssProp.B.len_or_perc}|left|center|right|top|bottom)\\\\s*){1,4}`,\n    bg_size: `(${CssProp.B.length_pos}|${CssProp.B.percentage}|auto){1,2}|cover|contain`,\n    border_width: `thin|medium|thick|${CssProp.B.length}`,\n    bottom: `${CssProp.B.length}|auto`,\n    color: `${CssProp._COLOR.hex}|${CssProp._COLOR.rgb}|${CssProp._COLOR.rgba}|${CssProp._COLOR.name}`,\n    color_stop_length: `(${CssProp.B.len_or_perc}\\\\s*){1,2}`,\n    linear_color_hint: `${CssProp.B.len_or_perc}`,\n    family_name: `${CssProp.B.string}|(${CssProp.B.ident}\\\\s*)+`,\n    image_decl: CssProp.B.url,\n    left: `${CssProp.B.length}|auto`,\n    loose_quotable_words: `(${CssProp.B.ident})+`,\n    margin_width: `${CssProp.B.len_or_perc}|auto`,\n    padding_width: `${CssProp.B.length_pos}|${CssProp.B.percentage_pos}`,\n    page_url: CssProp.B.url,\n    position: `((${CssProp.B.len_or_perc}|left|center|right|top|bottom)\\\\s*){1,4}`,\n    right: `${CssProp.B.length}|auto`,\n    shadow: '',\n    size: `closest-side|farthest-side|closest-corner|farthest-corner|${CssProp.B.length}|(${CssProp.B.len_or_perc})\\\\s+(${CssProp.B.len_or_perc})`,\n    top: `${CssProp.B.length}|auto`\n};\nCssProp._C1 = {\n    image_list: `image\\\\(\\\\s*(${CssProp.B.url})*\\\\s*(${CssProp.B.url}|${CssProp._C.color})\\\\s*\\\\)`,\n    linear_color_stop: `(${CssProp._C.color})(\\\\s*${CssProp._C.color_stop_length})?`,\n    shadow: `((${CssProp._C.color})\\\\s+((${CssProp.B.length})\\\\s*){2,4}(\\s+inset)?)|((inset\\\\s+)?((${CssProp.B.length})\\\\s*){2,4}\\\\s*(${CssProp._C.color})?)`\n};\nCssProp._C2 = {\n    color_stop_list: `((${CssProp._C1.linear_color_stop})(\\\\s*(${CssProp._C.linear_color_hint}))?\\\\s*,\\\\s*)+(${CssProp._C1.linear_color_stop})`,\n    shape: `rect\\\\(\\\\s*(${CssProp._C.top})\\\\s*,\\\\s*(${CssProp._C.right})\\\\s*,\\\\s*(${CssProp._C.bottom})\\\\s*,\\\\s*(${CssProp._C.left})\\\\s*\\\\)`\n};\nCssProp._C3 = {\n    linear_gradient: `linear-gradient\\\\((((${CssProp.B.angle})|to\\\\s+(${CssProp.A.side_or_corner}))\\\\s*,\\\\s*)?\\\\s*(${CssProp._C2.color_stop_list})\\\\s*\\\\)`,\n    radial_gradient: `radial-gradient\\\\(((((${CssProp.A.ending_shape})|(${CssProp._C.size}))\\\\s*)*\\\\s*(at\\\\s+${CssProp._C.position})?\\\\s*,\\\\s*)?\\\\s*(${CssProp._C2.color_stop_list})\\\\s*\\\\)`\n};\nCssProp._C4 = {\n    image: `${CssProp.B.url}|${CssProp._C3.linear_gradient}|${CssProp._C3.radial_gradient}|${CssProp._C1.image_list}`,\n    bg_image: `(${CssProp.B.url}|${CssProp._C3.linear_gradient}|${CssProp._C3.radial_gradient}|${CssProp._C1.image_list})|none`\n};\nCssProp.C = {\n    ...CssProp._C,\n    ...CssProp._C1,\n    ...CssProp._C2,\n    ...CssProp._C3,\n    ...CssProp._C4\n};\n/*\n * Property value regular expressions not dependent on other sub expressions\n */\nCssProp.AP = {\n    border_collapse: `collapse|separate`,\n    box: `normal|none|contents`,\n    box_sizing: `content-box|padding-box|border-box`,\n    caption_side: `top|bottom`,\n    clear: `none|left|right|both`,\n    direction: `ltr|rtl`,\n    empty_cells: `show|hide`,\n    float: `left|right|none`,\n    font_stretch: `normal|wider|narrower|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded`,\n    font_style: `normal|italic|oblique`,\n    font_variant: `normal|small-caps`,\n    font_weight: `normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900`,\n    list_style_position: `inside|outside`,\n    list_style_type: `disc|circle|square|decimal|decimal-leading-zero|lower-roman|upper-roman|lower-greek|lower-latin|upper-latin|armenian|georgian|lower-alpha|upper-alpha|none`,\n    overflow: `visible|hidden|scroll|auto`,\n    overflow_wrap: `normal|break-word`,\n    overflow_x: `visible|hidden|scroll|auto|no-display|no-content`,\n    page_break_after: `auto|always|avoid|left|right`,\n    page_break_before: `auto|always|avoid|left|right`,\n    page_break_inside: `avoid|auto`,\n    position: `static|relative|absolute`,\n    resize: `none|both|horizontal|vertical`,\n    speak: `normal|none|spell-out`,\n    speak_header: `once|always`,\n    speak_numeral: `digits|continuous`,\n    speak_punctuation: `code|none`,\n    table_layout: `auto|fixed`,\n    text_align: `left|right|center|justify`,\n    text_decoration: `none|((underline|overline|line-through|blink)\\\\s*)+`,\n    text_transform: `capitalize|uppercase|lowercase|none`,\n    text_wrap: `normal|unrestricted|none|suppress`,\n    unicode_bidi: `normal|embed|bidi-override`,\n    visibility: `visible|hidden|collapse`,\n    white_space: `normal|pre|nowrap|pre-wrap|pre-line`,\n    word_break: `normal|keep-all|break-all`\n};\n/*\n * Compound propertiy value regular expressions (i.e. dependent on other sub expressions)\n */\nCssProp._CP = {\n    background_attachment: `${CssProp.A.attachment}(,\\\\s*${CssProp.A.attachment})*`,\n    background_color: CssProp.C.color,\n    background_origin: `${CssProp.A.box}(,\\\\s*${CssProp.A.box})*`,\n    background_repeat: `${CssProp.A.repeat_style}(,\\\\s*${CssProp.A.repeat_style})*`,\n    border: `((${CssProp.C.border_width}|${CssProp.A.border_style}|${CssProp.C.color})\\\\s*){1,3}`,\n    border_radius: `((${CssProp.B.len_or_perc})\\\\s*){1,4}(\\\\/\\\\s*((${CssProp.B.len_or_perc})\\\\s*){1,4})?`,\n    border_spacing: `${CssProp.B.length}\\\\s*(${CssProp.B.length})?`,\n    border_top_color: CssProp.C.color,\n    border_top_style: CssProp.A.border_style,\n    border_width: `((${CssProp.C.border_width})\\\\s*){1,4}`,\n    color: CssProp.C.color,\n    cursor: `(${CssProp.B.url}(\\\\s*,\\\\s*)?)*(auto|crosshair|default|pointer|move|e-resize|ne-resize|nw-resize|n-resize|se-resize|sw-resize|s-resize|w-resize|text|wait|help|progress|all-scroll|col-resize|hand|no-drop|not-allowed|row-resize|vertical-text)`,\n    display: `inline|block|list-item|run-in|inline-list-item|inline-block|table|inline-table|table-cell|table-caption|flex|inline-flex|grid|inline-grid|${CssProp.A.display_inside}|${CssProp.A.display_outside}|inherit|inline-box|inline-stack`,\n    display_outside: CssProp.A.display_outside,\n    elevation: `${CssProp.B.angle}|below|level|above|higher|lower`,\n    font_family: `(${CssProp.C.family_name}|${CssProp.A.generic_family})(,\\\\s*(${CssProp.C.family_name}|${CssProp.A.generic_family}))*`,\n    height: `${CssProp.B.length}|${CssProp.B.percentage}|auto`,\n    letter_spacing: `normal|${CssProp.B.length}`,\n    list_style_image: `${CssProp.C.image}|none`,\n    margin_right: CssProp.C.margin_width,\n    max_height: `${CssProp.B.length_pos}|${CssProp.B.percentage_pos}|none|auto`,\n    min_height: `${CssProp.B.length_pos}|${CssProp.B.percentage_pos}|auto`,\n    opacity: CssProp.C.alphavalue,\n    outline_color: `${CssProp.C.color}|invert`,\n    outline_width: CssProp.C.border_width,\n    padding: `((${CssProp.C.padding_width})\\\\s*){1,4}`,\n    padding_top: CssProp.C.padding_width,\n    pitch_range: CssProp.N.number,\n    right: `${CssProp.B.length}|${CssProp.B.percentage}|auto`,\n    stress: CssProp.N.number,\n    text_indent: `${CssProp.B.length}|${CssProp.B.percentage}`,\n    text_shadow: `none|${CssProp.C.shadow}(,\\\\s*(${CssProp.C.shadow}))*`,\n    volume: `${CssProp.N.number_pos}|${CssProp.B.percentage_pos}|silent|x-soft|soft|medium|loud|x-loud`,\n    word_wrap: CssProp.AP.overflow_wrap,\n    zoom: `normal|${CssProp.N.number_pos}|${CssProp.B.percentage_pos}`,\n    backface_visibility: CssProp.AP.visibility,\n    background_clip: `${CssProp.A.box}(,\\\\s*(${CssProp.A.box}))*`,\n    background_position: `${CssProp.C.bg_position}(,\\\\s*(${CssProp.C.bg_position}))*`,\n    border_bottom_color: CssProp.C.color,\n    border_bottom_style: CssProp.A.border_style,\n    border_color: `((${CssProp.C.color})\\\\s*){1,4}`,\n    border_left_color: CssProp.C.color,\n    border_right_color: CssProp.C.color,\n    border_style: `((${CssProp.A.border_style})\\\\s*){1,4}`,\n    border_top_left_radius: `(${CssProp.B.length}|${CssProp.B.percentage})(\\\\s*(${CssProp.B.length}|${CssProp.B.percentage}))?`,\n    border_top_width: CssProp.C.border_width,\n    box_shadow: `none|${CssProp.C.shadow}(,\\\\s*(${CssProp.C.shadow}))*`,\n    clip: `${CssProp.C.shape}|auto`,\n    display_inside: CssProp.A.display_inside,\n    font_size: `${CssProp.A.absolute_size}|${CssProp.A.relative_size}|${CssProp.B.length_pos}|${CssProp.B.percentage_pos}`,\n    line_height: `normal|${CssProp.N.number_pos}|${CssProp.B.length_pos}|${CssProp.B.percentage_pos}`,\n    margin_left: CssProp.C.margin_width,\n    max_width: `${CssProp.B.length_pos}|${CssProp.B.percentage_pos}|none|auto`,\n    outline_style: CssProp.A.border_style,\n    padding_bottom: CssProp.C.padding_width,\n    padding_right: CssProp.C.padding_width,\n    perspective: `none|${CssProp.B.length}`,\n    richness: CssProp.N.number,\n    text_overflow: `((clip|ellipsis|${CssProp.B.string})\\\\s*){1,2}`,\n    top: `${CssProp.B.length}|${CssProp.B.percentage}|auto`,\n    width: `${CssProp.B.length_pos}|${CssProp.B.percentage_pos}|auto`,\n    z_index: `auto|${CssProp.B.z_index}`,\n    // Simplified background\n    background: `(((${CssProp.C.bg_position}\\\\s*(\\\\/\\\\s*${CssProp.C.bg_size})?)|(${CssProp.A.repeat_style})|(${CssProp.A.attachment})|(${CssProp.A.bg_origin})|(${CssProp.C.bg_image})|(${CssProp.C.color}))\\\\s*)+`,\n    background_size: `${CssProp.C.bg_size}(,\\\\s*${CssProp.C.bg_size})*`,\n    border_bottom_left_radius: `(${CssProp.B.length}|${CssProp.B.percentage})(\\\\s*(${CssProp.B.length}|${CssProp.B.percentage}))?`,\n    border_bottom_width: CssProp.C.border_width,\n    border_left_style: CssProp.A.border_style,\n    border_right_style: CssProp.A.border_style,\n    border_top: `((${CssProp.C.border_width}|${CssProp.A.border_style}|${CssProp.C.color})\\\\s*){1,3}`,\n    bottom: `${CssProp.B.len_or_perc}|auto`,\n    list_style: `((${CssProp.AP.list_style_type}|${CssProp.AP.list_style_position}|${CssProp.C.image}|none})\\\\s*){1,3}`,\n    margin_top: CssProp.C.margin_width,\n    outline: `((${CssProp.C.color}|invert|${CssProp.A.border_style}|${CssProp.C.border_width})\\\\s*){1,3}`,\n    overflow_y: CssProp.AP.overflow_x,\n    pitch: `${CssProp.B.frequency}|x-low|low|medium|high|x-high`,\n    vertical_align: `baseline|sub|super|top|text-top|middle|bottom|text-bottom|${CssProp.B.len_or_perc}`,\n    word_spacing: `normal|${CssProp.B.length}`,\n    background_image: `${CssProp.C.bg_image}(,\\\\s*${CssProp.C.bg_image})*`,\n    border_bottom_right_radius: `(${CssProp.B.length}|${CssProp.B.percentage})(\\\\s*(${CssProp.B.length}|${CssProp.B.percentage}))?`,\n    border_left_width: CssProp.C.border_width,\n    border_right_width: CssProp.C.border_width,\n    left: `${CssProp.B.len_or_perc}|auto`,\n    margin_bottom: CssProp.C.margin_width,\n    pause_after: `${CssProp.B.time}|${CssProp.B.percentage}`,\n    speech_rate: `${CssProp.N.number}|x-slow|slow|medium|fast|x-fast|faster|slower`,\n    transition_duration: `${CssProp.B.time}(,\\\\s*${CssProp.B.time})*`,\n    border_bottom: `((${CssProp.C.border_width}|${CssProp.A.border_style}|${CssProp.C.color})\\\\s*){1,3}`,\n    border_right: `((${CssProp.C.border_width}|${CssProp.A.border_style}|${CssProp.C.color})\\\\s*){1,3}`,\n    margin: `((${CssProp.C.margin_width})\\\\s*){1,4}`,\n    padding_left: CssProp.C.padding_width,\n    border_left: `((${CssProp.C.border_width}|${CssProp.A.border_style}|${CssProp.C.color})\\\\s*){1,3}`,\n    quotes: `(${CssProp.B.string}\\\\s*${CssProp.B.string})+|none`,\n    border_top_right_radius: `(${CssProp.B.length}|${CssProp.B.percentage})(\\\\s*(${CssProp.B.length}|${CssProp.B.percentage}))?`,\n    min_width: `${CssProp.B.length_pos}|${CssProp.B.percentage_pos}|auto`\n};\nCssProp._CP1 = {\n    font: `(((((${CssProp.AP.font_style}|${CssProp.AP.font_variant}|${CssProp.AP.font_weight})\\\\s*){1,3})?\\\\s*(${CssProp._CP.font_size})\\\\s*(\\\\/\\\\s*(${CssProp._CP.line_height}))?\\\\s+(${CssProp._CP.font_family}))|caption|icon|menu|message-box|small-caption|status-bar)`\n};\nCssProp.CP = { ...CssProp._CP, ...CssProp._CP1 };\n// CSS Property value validation regular expressions for use with sanitize-html\nCssProp.BORDER_COLLAPSE = CssProp.reg(CssProp.AP.border_collapse);\nCssProp.BOX = CssProp.reg(CssProp.AP.box);\nCssProp.BOX_SIZING = CssProp.reg(CssProp.AP.box_sizing);\nCssProp.CAPTION_SIDE = CssProp.reg(CssProp.AP.caption_side);\nCssProp.CLEAR = CssProp.reg(CssProp.AP.clear);\nCssProp.DIRECTION = CssProp.reg(CssProp.AP.direction);\nCssProp.EMPTY_CELLS = CssProp.reg(CssProp.AP.empty_cells);\nCssProp.FLOAT = CssProp.reg(CssProp.AP.float);\nCssProp.FONT_STRETCH = CssProp.reg(CssProp.AP.font_stretch);\nCssProp.FONT_STYLE = CssProp.reg(CssProp.AP.font_style);\nCssProp.FONT_VARIANT = CssProp.reg(CssProp.AP.font_variant);\nCssProp.FONT_WEIGHT = CssProp.reg(CssProp.AP.font_weight);\nCssProp.LIST_STYLE_POSITION = CssProp.reg(CssProp.AP.list_style_position);\nCssProp.LIST_STYLE_TYPE = CssProp.reg(CssProp.AP.list_style_type);\nCssProp.OVERFLOW = CssProp.reg(CssProp.AP.overflow);\nCssProp.OVERFLOW_WRAP = CssProp.reg(CssProp.AP.overflow_wrap);\nCssProp.OVERFLOW_X = CssProp.reg(CssProp.AP.overflow_x);\nCssProp.PAGE_BREAK_AFTER = CssProp.reg(CssProp.AP.page_break_after);\nCssProp.PAGE_BREAK_BEFORE = CssProp.reg(CssProp.AP.page_break_before);\nCssProp.PAGE_BREAK_INSIDE = CssProp.reg(CssProp.AP.page_break_inside);\nCssProp.POSITION = CssProp.reg(CssProp.AP.position);\nCssProp.RESIZE = CssProp.reg(CssProp.AP.resize);\nCssProp.SPEAK = CssProp.reg(CssProp.AP.speak);\nCssProp.SPEAK_HEADER = CssProp.reg(CssProp.AP.speak_header);\nCssProp.SPEAK_NUMERAL = CssProp.reg(CssProp.AP.speak_numeral);\nCssProp.SPEAK_PUNCTUATION = CssProp.reg(CssProp.AP.speak_punctuation);\nCssProp.TABLE_LAYOUT = CssProp.reg(CssProp.AP.table_layout);\nCssProp.TEXT_ALIGN = CssProp.reg(CssProp.AP.text_align);\nCssProp.TEXT_DECORATION = CssProp.reg(CssProp.AP.text_decoration);\nCssProp.TEXT_TRANSFORM = CssProp.reg(CssProp.AP.text_transform);\nCssProp.TEXT_WRAP = CssProp.reg(CssProp.AP.text_wrap);\nCssProp.UNICODE_BIDI = CssProp.reg(CssProp.AP.unicode_bidi);\nCssProp.VISIBILITY = CssProp.reg(CssProp.AP.visibility);\nCssProp.WHITE_SPACE = CssProp.reg(CssProp.AP.white_space);\nCssProp.WORD_BREAK = CssProp.reg(CssProp.AP.word_break);\nCssProp.BACKGROUND_ATTACHMENT = CssProp.reg(CssProp.CP.background_attachment);\nCssProp.BACKGROUND_COLOR = CssProp.reg(CssProp.CP.background_color);\nCssProp.BACKGROUND_ORIGIN = CssProp.reg(CssProp.CP.background_origin);\nCssProp.BACKGROUND_REPEAT = CssProp.reg(CssProp.CP.background_repeat);\nCssProp.BORDER = CssProp.reg(CssProp.CP.border);\nCssProp.BORDER_RADIUS = CssProp.reg(CssProp.CP.border_radius);\nCssProp.BORDER_SPACING = CssProp.reg(CssProp.CP.border_spacing);\nCssProp.BORDER_TOP_COLOR = CssProp.reg(CssProp.CP.border_top_color);\nCssProp.BORDER_TOP_STYLE = CssProp.reg(CssProp.CP.border_top_style);\nCssProp.BORDER_WIDTH = CssProp.reg(CssProp.CP.border_width);\nCssProp.COLOR = CssProp.reg(CssProp.CP.color);\nCssProp.CURSOR = CssProp.reg(CssProp.CP.cursor);\nCssProp.DISPLAY = CssProp.reg(CssProp.CP.display);\nCssProp.DISPLAY_OUTSIDE = CssProp.reg(CssProp.CP.display_outside);\nCssProp.ELEVATION = CssProp.reg(CssProp.CP.elevation);\nCssProp.FONT_FAMILY = CssProp.reg(CssProp.CP.font_family);\nCssProp.HEIGHT = CssProp.reg(CssProp.CP.height);\nCssProp.LETTER_SPACING = CssProp.reg(CssProp.CP.letter_spacing);\nCssProp.LIST_STYLE_IMAGE = CssProp.reg(CssProp.CP.list_style_image);\nCssProp.MARGIN_RIGHT = CssProp.reg(CssProp.CP.margin_right);\nCssProp.MAX_HEIGHT = CssProp.reg(CssProp.CP.max_height);\nCssProp.MIN_HEIGHT = CssProp.reg(CssProp.CP.min_height);\nCssProp.OPACITY = CssProp.reg(CssProp.CP.opacity);\nCssProp.OUTLINE_COLOR = CssProp.reg(CssProp.CP.outline_color);\nCssProp.OUTLINE_WIDTH = CssProp.reg(CssProp.CP.outline_width);\nCssProp.PADDING = CssProp.reg(CssProp.CP.padding);\nCssProp.PADDING_TOP = CssProp.reg(CssProp.CP.padding_top);\nCssProp.PITCH_RANGE = CssProp.reg(CssProp.CP.pitch_range);\nCssProp.RIGHT = CssProp.reg(CssProp.CP.right);\nCssProp.STRESS = CssProp.reg(CssProp.CP.stress);\nCssProp.TEXT_INDENT = CssProp.reg(CssProp.CP.text_indent);\nCssProp.TEXT_SHADOW = CssProp.reg(CssProp.CP.text_shadow);\nCssProp.VOLUME = CssProp.reg(CssProp.CP.volume);\nCssProp.WORD_WRAP = CssProp.reg(CssProp.CP.word_wrap);\nCssProp.ZOOM = CssProp.reg(CssProp.CP.zoom);\nCssProp.BACKFACE_VISIBILITY = CssProp.reg(CssProp.CP.backface_visibility);\nCssProp.BACKGROUND_CLIP = CssProp.reg(CssProp.CP.background_clip);\nCssProp.BACKGROUND_POSITION = CssProp.reg(CssProp.CP.background_position);\nCssProp.BORDER_BOTTOM_COLOR = CssProp.reg(CssProp.CP.border_bottom_color);\nCssProp.BORDER_BOTTOM_STYLE = CssProp.reg(CssProp.CP.border_bottom_style);\nCssProp.BORDER_COLOR = CssProp.reg(CssProp.CP.border_color);\nCssProp.BORDER_LEFT_COLOR = CssProp.reg(CssProp.CP.border_left_color);\nCssProp.BORDER_RIGHT_COLOR = CssProp.reg(CssProp.CP.border_right_color);\nCssProp.BORDER_STYLE = CssProp.reg(CssProp.CP.border_style);\nCssProp.BORDER_TOP_LEFT_RADIUS = CssProp.reg(CssProp.CP.border_top_left_radius);\nCssProp.BORDER_TOP_WIDTH = CssProp.reg(CssProp.CP.border_top_width);\nCssProp.BOX_SHADOW = CssProp.reg(CssProp.CP.box_shadow);\nCssProp.CLIP = CssProp.reg(CssProp.CP.clip);\nCssProp.DISPLAY_INSIDE = CssProp.reg(CssProp.CP.display_inside);\nCssProp.FONT_SIZE = CssProp.reg(CssProp.CP.font_size);\nCssProp.LINE_HEIGHT = CssProp.reg(CssProp.CP.line_height);\nCssProp.MARGIN_LEFT = CssProp.reg(CssProp.CP.margin_left);\nCssProp.MAX_WIDTH = CssProp.reg(CssProp.CP.max_width);\nCssProp.OUTLINE_STYLE = CssProp.reg(CssProp.CP.outline_style);\nCssProp.PADDING_BOTTOM = CssProp.reg(CssProp.CP.padding_bottom);\nCssProp.PADDING_RIGHT = CssProp.reg(CssProp.CP.padding_right);\nCssProp.PERSPECTIVE = CssProp.reg(CssProp.CP.perspective);\nCssProp.RICHNESS = CssProp.reg(CssProp.CP.richness);\nCssProp.TEXT_OVERFLOW = CssProp.reg(CssProp.CP.text_overflow);\nCssProp.TOP = CssProp.reg(CssProp.CP.top);\nCssProp.WIDTH = CssProp.reg(CssProp.CP.width);\nCssProp.Z_INDEX = CssProp.reg(CssProp.CP.z_index);\nCssProp.BACKGROUND = CssProp.reg(CssProp.CP.background);\nCssProp.BACKGROUND_SIZE = CssProp.reg(CssProp.CP.background_size);\nCssProp.BORDER_BOTTOM_LEFT_RADIUS = CssProp.reg(CssProp.CP.border_bottom_left_radius);\nCssProp.BORDER_BOTTOM_WIDTH = CssProp.reg(CssProp.CP.border_bottom_width);\nCssProp.BORDER_LEFT_STYLE = CssProp.reg(CssProp.CP.border_left_style);\nCssProp.BORDER_RIGHT_STYLE = CssProp.reg(CssProp.CP.border_right_style);\nCssProp.BORDER_TOP = CssProp.reg(CssProp.CP.border_top);\nCssProp.BOTTOM = CssProp.reg(CssProp.CP.bottom);\nCssProp.LIST_STYLE = CssProp.reg(CssProp.CP.list_style);\nCssProp.MARGIN_TOP = CssProp.reg(CssProp.CP.margin_top);\nCssProp.OUTLINE = CssProp.reg(CssProp.CP.outline);\nCssProp.OVERFLOW_Y = CssProp.reg(CssProp.CP.overflow_y);\nCssProp.PITCH = CssProp.reg(CssProp.CP.pitch);\nCssProp.VERTICAL_ALIGN = CssProp.reg(CssProp.CP.vertical_align);\nCssProp.WORD_SPACING = CssProp.reg(CssProp.CP.word_spacing);\nCssProp.BACKGROUND_IMAGE = CssProp.reg(CssProp.CP.background_image);\nCssProp.BORDER_BOTTOM_RIGHT_RADIUS = CssProp.reg(CssProp.CP.border_bottom_right_radius);\nCssProp.BORDER_LEFT_WIDTH = CssProp.reg(CssProp.CP.border_left_width);\nCssProp.BORDER_RIGHT_WIDTH = CssProp.reg(CssProp.CP.border_right_width);\nCssProp.LEFT = CssProp.reg(CssProp.CP.left);\nCssProp.MARGIN_BOTTOM = CssProp.reg(CssProp.CP.margin_bottom);\nCssProp.PAUSE_AFTER = CssProp.reg(CssProp.CP.pause_after);\nCssProp.SPEECH_RATE = CssProp.reg(CssProp.CP.speech_rate);\nCssProp.TRANSITION_DURATION = CssProp.reg(CssProp.CP.transition_duration);\nCssProp.BORDER_BOTTOM = CssProp.reg(CssProp.CP.border_bottom);\nCssProp.BORDER_RIGHT = CssProp.reg(CssProp.CP.border_right);\nCssProp.MARGIN = CssProp.reg(CssProp.CP.margin);\nCssProp.PADDING_LEFT = CssProp.reg(CssProp.CP.padding_left);\nCssProp.BORDER_LEFT = CssProp.reg(CssProp.CP.border_left);\nCssProp.FONT = CssProp.reg(CssProp.CP.font);\nCssProp.QUOTES = CssProp.reg(CssProp.CP.quotes);\nCssProp.BORDER_TOP_RIGHT_RADIUS = CssProp.reg(CssProp.CP.border_top_right_radius);\nCssProp.MIN_WIDTH = CssProp.reg(CssProp.CP.min_width);\n/**\n * A class to sanitize HTML strings.\n */\nexport class Sanitizer {\n    constructor() {\n        this._autolink = true;\n        this._allowNamedProperties = false;\n        this._generateOptions = () => ({\n            // HTML tags that are allowed to be used. Tags were extracted from Google Caja\n            allowedTags: [\n                'a',\n                'abbr',\n                'acronym',\n                'address',\n                'area',\n                'article',\n                'aside',\n                'audio',\n                'b',\n                'bdi',\n                'bdo',\n                'big',\n                'blockquote',\n                'br',\n                'button',\n                'canvas',\n                'caption',\n                'center',\n                'cite',\n                'code',\n                'col',\n                'colgroup',\n                'colspan',\n                'command',\n                'data',\n                'datalist',\n                'dd',\n                'del',\n                'details',\n                'dfn',\n                'dir',\n                'div',\n                'dl',\n                'dt',\n                'em',\n                'fieldset',\n                'figcaption',\n                'figure',\n                'font',\n                'footer',\n                'form',\n                'h1',\n                'h2',\n                'h3',\n                'h4',\n                'h5',\n                'h6',\n                'header',\n                'hgroup',\n                'hr',\n                'i',\n                // 'iframe' is allowed by Google Caja, but disallowed by default by sanitize-html\n                // , 'iframe'\n                'img',\n                'input',\n                'ins',\n                'kbd',\n                'label',\n                'legend',\n                'li',\n                'map',\n                'mark',\n                'menu',\n                'meter',\n                'nav',\n                'nobr',\n                'ol',\n                'optgroup',\n                'option',\n                'output',\n                'p',\n                'pre',\n                'progress',\n                'q',\n                'rowspan',\n                's',\n                'samp',\n                'section',\n                'select',\n                'small',\n                'source',\n                'span',\n                'strike',\n                'strong',\n                'sub',\n                'summary',\n                'sup',\n                'table',\n                'tbody',\n                'td',\n                'textarea',\n                'tfoot',\n                'th',\n                'thead',\n                'time',\n                'tr',\n                'track',\n                'tt',\n                'u',\n                'ul',\n                'var',\n                'video',\n                'wbr'\n            ],\n            // Attributes that HTML tags are allowed to have, extracted from Google Caja.\n            // See https://github.com/jupyterlab/jupyterlab/issues/1812#issuecomment-285848435\n            allowedAttributes: {\n                '*': [\n                    'class',\n                    'dir',\n                    'draggable',\n                    'hidden',\n                    ...(this._allowNamedProperties ? ['id'] : []),\n                    'inert',\n                    'itemprop',\n                    'itemref',\n                    'itemscope',\n                    'lang',\n                    'spellcheck',\n                    'style',\n                    'title',\n                    'translate'\n                ],\n                // 'rel' and 'target' were *not* allowed by Google Caja\n                a: [\n                    'accesskey',\n                    'coords',\n                    'href',\n                    'hreflang',\n                    ...(this._allowNamedProperties ? ['name'] : []),\n                    'rel',\n                    'shape',\n                    'tabindex',\n                    'target',\n                    'type'\n                ],\n                area: [\n                    'accesskey',\n                    'alt',\n                    'coords',\n                    'href',\n                    'nohref',\n                    'shape',\n                    'tabindex'\n                ],\n                // 'autoplay' was *not* allowed by Google Caja\n                audio: [\n                    'autoplay',\n                    'controls',\n                    'loop',\n                    'mediagroup',\n                    'muted',\n                    'preload',\n                    'src'\n                ],\n                bdo: ['dir'],\n                blockquote: ['cite'],\n                br: ['clear'],\n                button: [\n                    'accesskey',\n                    'data-commandlinker-args',\n                    'data-commandlinker-command',\n                    'disabled',\n                    ...(this._allowNamedProperties ? ['name'] : []),\n                    'tabindex',\n                    'type',\n                    'value'\n                ],\n                canvas: ['height', 'width'],\n                caption: ['align'],\n                col: ['align', 'char', 'charoff', 'span', 'valign', 'width'],\n                colgroup: ['align', 'char', 'charoff', 'span', 'valign', 'width'],\n                command: [\n                    'checked',\n                    'command',\n                    'disabled',\n                    'icon',\n                    'label',\n                    'radiogroup',\n                    'type'\n                ],\n                data: ['value'],\n                del: ['cite', 'datetime'],\n                details: ['open'],\n                dir: ['compact'],\n                div: ['align'],\n                dl: ['compact'],\n                fieldset: ['disabled'],\n                font: ['color', 'face', 'size'],\n                form: [\n                    'accept',\n                    'autocomplete',\n                    'enctype',\n                    'method',\n                    ...(this._allowNamedProperties ? ['name'] : []),\n                    'novalidate'\n                ],\n                h1: ['align'],\n                h2: ['align'],\n                h3: ['align'],\n                h4: ['align'],\n                h5: ['align'],\n                h6: ['align'],\n                hr: ['align', 'noshade', 'size', 'width'],\n                iframe: [\n                    'align',\n                    'frameborder',\n                    'height',\n                    'marginheight',\n                    'marginwidth',\n                    'width'\n                ],\n                img: [\n                    'align',\n                    'alt',\n                    'border',\n                    'height',\n                    'hspace',\n                    'ismap',\n                    ...(this._allowNamedProperties ? ['name'] : []),\n                    'src',\n                    'usemap',\n                    'vspace',\n                    'width'\n                ],\n                input: [\n                    'accept',\n                    'accesskey',\n                    'align',\n                    'alt',\n                    'autocomplete',\n                    'checked',\n                    'disabled',\n                    'inputmode',\n                    'ismap',\n                    'list',\n                    'max',\n                    'maxlength',\n                    'min',\n                    'multiple',\n                    ...(this._allowNamedProperties ? ['name'] : []),\n                    'placeholder',\n                    'readonly',\n                    'required',\n                    'size',\n                    'src',\n                    'step',\n                    'tabindex',\n                    'type',\n                    'usemap',\n                    'value'\n                ],\n                ins: ['cite', 'datetime'],\n                label: ['accesskey', 'for'],\n                legend: ['accesskey', 'align'],\n                li: ['type', 'value'],\n                map: this._allowNamedProperties ? ['name'] : [],\n                menu: ['compact', 'label', 'type'],\n                meter: ['high', 'low', 'max', 'min', 'value'],\n                ol: ['compact', 'reversed', 'start', 'type'],\n                optgroup: ['disabled', 'label'],\n                option: ['disabled', 'label', 'selected', 'value'],\n                output: ['for', ...(this._allowNamedProperties ? ['name'] : [])],\n                p: ['align'],\n                pre: ['width'],\n                progress: ['max', 'min', 'value'],\n                q: ['cite'],\n                select: [\n                    'autocomplete',\n                    'disabled',\n                    'multiple',\n                    ...(this._allowNamedProperties ? ['name'] : []),\n                    'required',\n                    'size',\n                    'tabindex'\n                ],\n                source: ['type'],\n                table: [\n                    'align',\n                    'bgcolor',\n                    'border',\n                    'cellpadding',\n                    'cellspacing',\n                    'frame',\n                    'rules',\n                    'summary',\n                    'width'\n                ],\n                tbody: ['align', 'char', 'charoff', 'valign'],\n                td: [\n                    'abbr',\n                    'align',\n                    'axis',\n                    'bgcolor',\n                    'char',\n                    'charoff',\n                    'colspan',\n                    'headers',\n                    'height',\n                    'nowrap',\n                    'rowspan',\n                    'scope',\n                    'valign',\n                    'width'\n                ],\n                textarea: [\n                    'accesskey',\n                    'autocomplete',\n                    'cols',\n                    'disabled',\n                    'inputmode',\n                    ...(this._allowNamedProperties ? ['name'] : []),\n                    'placeholder',\n                    'readonly',\n                    'required',\n                    'rows',\n                    'tabindex',\n                    'wrap'\n                ],\n                tfoot: ['align', 'char', 'charoff', 'valign'],\n                th: [\n                    'abbr',\n                    'align',\n                    'axis',\n                    'bgcolor',\n                    'char',\n                    'charoff',\n                    'colspan',\n                    'headers',\n                    'height',\n                    'nowrap',\n                    'rowspan',\n                    'scope',\n                    'valign',\n                    'width'\n                ],\n                thead: ['align', 'char', 'charoff', 'valign'],\n                tr: ['align', 'bgcolor', 'char', 'charoff', 'valign'],\n                track: ['default', 'kind', 'label', 'srclang'],\n                ul: ['compact', 'type'],\n                video: [\n                    'autoplay',\n                    'controls',\n                    'height',\n                    'loop',\n                    'mediagroup',\n                    'muted',\n                    'poster',\n                    'preload',\n                    'src',\n                    'width'\n                ]\n            },\n            // Inline CSS styles that HTML tags may have (and their allowed values)\n            allowedStyles: {\n                // To simplify the data, all styles are allowed on all tags that allow the style attribute\n                '*': {\n                    'backface-visibility': [CssProp.BACKFACE_VISIBILITY],\n                    background: [CssProp.BACKGROUND],\n                    'background-attachment': [CssProp.BACKGROUND_ATTACHMENT],\n                    'background-clip': [CssProp.BACKGROUND_CLIP],\n                    'background-color': [CssProp.BACKGROUND_COLOR],\n                    'background-image': [CssProp.BACKGROUND_IMAGE],\n                    'background-origin': [CssProp.BACKGROUND_ORIGIN],\n                    'background-position': [CssProp.BACKGROUND_POSITION],\n                    'background-repeat': [CssProp.BACKGROUND_REPEAT],\n                    'background-size': [CssProp.BACKGROUND_SIZE],\n                    border: [CssProp.BORDER],\n                    'border-bottom': [CssProp.BORDER_BOTTOM],\n                    'border-bottom-color': [CssProp.BORDER_BOTTOM_COLOR],\n                    'border-bottom-left-radius': [CssProp.BORDER_BOTTOM_LEFT_RADIUS],\n                    'border-bottom-right-radius': [CssProp.BORDER_BOTTOM_RIGHT_RADIUS],\n                    'border-bottom-style': [CssProp.BORDER_BOTTOM_STYLE],\n                    'border-bottom-width': [CssProp.BORDER_BOTTOM_WIDTH],\n                    'border-collapse': [CssProp.BORDER_COLLAPSE],\n                    'border-color': [CssProp.BORDER_COLOR],\n                    'border-left': [CssProp.BORDER_LEFT],\n                    'border-left-color': [CssProp.BORDER_LEFT_COLOR],\n                    'border-left-style': [CssProp.BORDER_LEFT_STYLE],\n                    'border-left-width': [CssProp.BORDER_LEFT_WIDTH],\n                    'border-radius': [CssProp.BORDER_RADIUS],\n                    'border-right': [CssProp.BORDER_RIGHT],\n                    'border-right-color': [CssProp.BORDER_RIGHT_COLOR],\n                    'border-right-style': [CssProp.BORDER_RIGHT_STYLE],\n                    'border-right-width': [CssProp.BORDER_RIGHT_WIDTH],\n                    'border-spacing': [CssProp.BORDER_SPACING],\n                    'border-style': [CssProp.BORDER_STYLE],\n                    'border-top': [CssProp.BORDER_TOP],\n                    'border-top-color': [CssProp.BORDER_TOP_COLOR],\n                    'border-top-left-radius': [CssProp.BORDER_TOP_LEFT_RADIUS],\n                    'border-top-right-radius': [CssProp.BORDER_TOP_RIGHT_RADIUS],\n                    'border-top-style': [CssProp.BORDER_TOP_STYLE],\n                    'border-top-width': [CssProp.BORDER_TOP_WIDTH],\n                    'border-width': [CssProp.BORDER_WIDTH],\n                    bottom: [CssProp.BOTTOM],\n                    box: [CssProp.BOX],\n                    'box-shadow': [CssProp.BOX_SHADOW],\n                    'box-sizing': [CssProp.BOX_SIZING],\n                    'caption-side': [CssProp.CAPTION_SIDE],\n                    clear: [CssProp.CLEAR],\n                    clip: [CssProp.CLIP],\n                    color: [CssProp.COLOR],\n                    cursor: [CssProp.CURSOR],\n                    direction: [CssProp.DIRECTION],\n                    display: [CssProp.DISPLAY],\n                    'display-inside': [CssProp.DISPLAY_INSIDE],\n                    'display-outside': [CssProp.DISPLAY_OUTSIDE],\n                    elevation: [CssProp.ELEVATION],\n                    'empty-cells': [CssProp.EMPTY_CELLS],\n                    float: [CssProp.FLOAT],\n                    font: [CssProp.FONT],\n                    'font-family': [CssProp.FONT_FAMILY],\n                    'font-size': [CssProp.FONT_SIZE],\n                    'font-stretch': [CssProp.FONT_STRETCH],\n                    'font-style': [CssProp.FONT_STYLE],\n                    'font-variant': [CssProp.FONT_VARIANT],\n                    'font-weight': [CssProp.FONT_WEIGHT],\n                    height: [CssProp.HEIGHT],\n                    left: [CssProp.LEFT],\n                    'letter-spacing': [CssProp.LETTER_SPACING],\n                    'line-height': [CssProp.LINE_HEIGHT],\n                    'list-style': [CssProp.LIST_STYLE],\n                    'list-style-image': [CssProp.LIST_STYLE_IMAGE],\n                    'list-style-position': [CssProp.LIST_STYLE_POSITION],\n                    'list-style-type': [CssProp.LIST_STYLE_TYPE],\n                    margin: [CssProp.MARGIN],\n                    'margin-bottom': [CssProp.MARGIN_BOTTOM],\n                    'margin-left': [CssProp.MARGIN_LEFT],\n                    'margin-right': [CssProp.MARGIN_RIGHT],\n                    'margin-top': [CssProp.MARGIN_TOP],\n                    'max-height': [CssProp.MAX_HEIGHT],\n                    'max-width': [CssProp.MAX_WIDTH],\n                    'min-height': [CssProp.MIN_HEIGHT],\n                    'min-width': [CssProp.MIN_WIDTH],\n                    opacity: [CssProp.OPACITY],\n                    outline: [CssProp.OUTLINE],\n                    'outline-color': [CssProp.OUTLINE_COLOR],\n                    'outline-style': [CssProp.OUTLINE_STYLE],\n                    'outline-width': [CssProp.OUTLINE_WIDTH],\n                    overflow: [CssProp.OVERFLOW],\n                    'overflow-wrap': [CssProp.OVERFLOW_WRAP],\n                    'overflow-x': [CssProp.OVERFLOW_X],\n                    'overflow-y': [CssProp.OVERFLOW_Y],\n                    padding: [CssProp.PADDING],\n                    'padding-bottom': [CssProp.PADDING_BOTTOM],\n                    'padding-left': [CssProp.PADDING_LEFT],\n                    'padding-right': [CssProp.PADDING_RIGHT],\n                    'padding-top': [CssProp.PADDING_TOP],\n                    'page-break-after': [CssProp.PAGE_BREAK_AFTER],\n                    'page-break-before': [CssProp.PAGE_BREAK_BEFORE],\n                    'page-break-inside': [CssProp.PAGE_BREAK_INSIDE],\n                    'pause-after': [CssProp.PAUSE_AFTER],\n                    perspective: [CssProp.PERSPECTIVE],\n                    pitch: [CssProp.PITCH],\n                    'pitch-range': [CssProp.PITCH_RANGE],\n                    position: [CssProp.POSITION],\n                    quotes: [CssProp.QUOTES],\n                    resize: [CssProp.RESIZE],\n                    richness: [CssProp.RICHNESS],\n                    right: [CssProp.RIGHT],\n                    speak: [CssProp.SPEAK],\n                    'speak-header': [CssProp.SPEAK_HEADER],\n                    'speak-numeral': [CssProp.SPEAK_NUMERAL],\n                    'speak-punctuation': [CssProp.SPEAK_PUNCTUATION],\n                    'speech-rate': [CssProp.SPEECH_RATE],\n                    stress: [CssProp.STRESS],\n                    'table-layout': [CssProp.TABLE_LAYOUT],\n                    'text-align': [CssProp.TEXT_ALIGN],\n                    'text-decoration': [CssProp.TEXT_DECORATION],\n                    'text-indent': [CssProp.TEXT_INDENT],\n                    'text-overflow': [CssProp.TEXT_OVERFLOW],\n                    'text-shadow': [CssProp.TEXT_SHADOW],\n                    'text-transform': [CssProp.TEXT_TRANSFORM],\n                    'text-wrap': [CssProp.TEXT_WRAP],\n                    top: [CssProp.TOP],\n                    'unicode-bidi': [CssProp.UNICODE_BIDI],\n                    'vertical-align': [CssProp.VERTICAL_ALIGN],\n                    visibility: [CssProp.VISIBILITY],\n                    volume: [CssProp.VOLUME],\n                    'white-space': [CssProp.WHITE_SPACE],\n                    width: [CssProp.WIDTH],\n                    'word-break': [CssProp.WORD_BREAK],\n                    'word-spacing': [CssProp.WORD_SPACING],\n                    'word-wrap': [CssProp.WORD_WRAP],\n                    'z-index': [CssProp.Z_INDEX],\n                    zoom: [CssProp.ZOOM]\n                }\n            },\n            transformTags: {\n                // Set the \"rel\" attribute for <a> tags to \"nofollow\".\n                a: sanitize.simpleTransform('a', { rel: 'nofollow' }),\n                // Set the \"disabled\" attribute for <input> tags.\n                input: sanitize.simpleTransform('input', { disabled: 'disabled' })\n            },\n            allowedSchemes: [...sanitize.defaults.allowedSchemes],\n            allowedSchemesByTag: {\n                // Allow 'attachment:' img src (used for markdown cell attachments).\n                img: sanitize.defaults.allowedSchemes.concat(['attachment'])\n            },\n            // Override of the default option, so we can skip 'src' attribute validation.\n            // 'src' Attributes are validated to be URIs, which does not allow for embedded (image) data.\n            // Since embedded data is no longer deemed to be a threat, validation can be skipped.\n            // See https://github.com/jupyterlab/jupyterlab/issues/5183\n            allowedSchemesAppliedToAttributes: ['href', 'cite']\n        });\n        this._options = this._generateOptions();\n    }\n    /**\n     * Sanitize an HTML string.\n     *\n     * @param dirty - The dirty text.\n     *\n     * @param options - The optional sanitization options.\n     *\n     * @returns The sanitized string.\n     */\n    sanitize(dirty, options) {\n        return sanitize(dirty, { ...this._options, ...(options || {}) });\n    }\n    /**\n     * @returns Whether to replace URLs by HTML anchors.\n     */\n    getAutolink() {\n        return this._autolink;\n    }\n    /**\n     * Set the allowed schemes\n     *\n     * @param scheme Allowed schemes\n     */\n    setAllowedSchemes(scheme) {\n        // Force copy of `scheme`\n        this._options.allowedSchemes = [...scheme];\n    }\n    /**\n     * Set the URL replacement boolean.\n     *\n     * @param autolink URL replacement boolean.\n     */\n    setAutolink(autolink) {\n        this._autolink = autolink;\n    }\n    /**\n     * Set the whether to allow `name` and `id` attributes.\n     */\n    setAllowNamedProperties(allowNamedProperties) {\n        this._allowNamedProperties = allowNamedProperties;\n        this._options = this._generateOptions();\n    }\n}\n//# sourceMappingURL=sanitizer.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n/**\n * Semantic group of commands\n */\nexport class SemanticCommand {\n    constructor() {\n        this._commands = new Array();\n    }\n    /**\n     * The command IDs used by this semantic command.\n     */\n    get ids() {\n        return this._commands.map(c => c.id);\n    }\n    /**\n     * Add a command to the semantic group\n     *\n     * @param command Command to add\n     */\n    add(command) {\n        if (this._commands.map(c => c.id).includes(command.id)) {\n            throw Error(`Command ${command.id} is already defined.`);\n        }\n        this._commands.push({\n            isEnabled: () => true,\n            rank: SemanticCommand.DEFAULT_RANK,\n            ...command\n        });\n    }\n    /**\n     * Get the command id of the enabled command from this group\n     * for the given widget.\n     *\n     * @param widget Widget\n     * @returns Command id\n     */\n    getActiveCommandId(widget) {\n        var _a;\n        const commands = this._commands\n            .filter(c => c.isEnabled(widget))\n            .sort((a, b) => {\n            const rankDelta = a.rank - b.rank;\n            return rankDelta || (a.id < b.id ? -1 : 1);\n        });\n        const command = (_a = commands[0]) !== null && _a !== void 0 ? _a : { id: null };\n        return command.id;\n    }\n    /**\n     * Remove a command ID.\n     *\n     * @param id Command ID to remove\n     */\n    remove(id) {\n        const index = this._commands.findIndex(c => c.id === id);\n        if (index >= 0) {\n            this._commands.splice(index, 1);\n        }\n    }\n}\n/**\n * Default rank for semantic command\n */\nSemanticCommand.DEFAULT_RANK = 500;\n/**\n * The `args` key for a semantic command's current widget ID.\n */\nSemanticCommand.WIDGET = 'semanticWidget';\n//# sourceMappingURL=semanticCommand.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { URLExt } from '@jupyterlab/coreutils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Signal } from '@lumino/signaling';\nimport { Dialog, showDialog } from './dialog';\n/**\n * The number of milliseconds between theme loading attempts.\n */\nconst REQUEST_INTERVAL = 75;\n/**\n * The number of times to attempt to load a theme before giving up.\n */\nconst REQUEST_THRESHOLD = 20;\n/**\n * A class that provides theme management.\n */\nexport class ThemeManager {\n    /**\n     * Construct a new theme manager.\n     */\n    constructor(options) {\n        this._current = null;\n        this._links = [];\n        this._overrides = {};\n        this._overrideProps = {};\n        this._outstanding = null;\n        this._pending = 0;\n        this._requests = {};\n        this._themes = {};\n        this._themeChanged = new Signal(this);\n        const { host, key, splash, url } = options;\n        this.translator = options.translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        const registry = options.settings;\n        this._base = url;\n        this._host = host;\n        this._splash = splash || null;\n        void registry.load(key).then(settings => {\n            this._settings = settings;\n            // set up css overrides once we have a pointer to the settings schema\n            this._initOverrideProps();\n            this._settings.changed.connect(this._loadSettings, this);\n            this._loadSettings();\n        });\n    }\n    /**\n     * Get the name of the current theme.\n     */\n    get theme() {\n        return this._current;\n    }\n    /**\n     * Get the name of the preferred light theme.\n     */\n    get preferredLightTheme() {\n        return this._settings.composite['preferred-light-theme'];\n    }\n    /**\n     * Get the name of the preferred dark theme.\n     */\n    get preferredDarkTheme() {\n        return this._settings.composite['preferred-dark-theme'];\n    }\n    /**\n     * Get the name of the preferred theme\n     * When `adaptive-theme` is disabled, get current theme;\n     * Else, depending on the system settings, get preferred light or dark theme.\n     */\n    get preferredTheme() {\n        if (!this.isToggledAdaptiveTheme()) {\n            return this.theme;\n        }\n        if (this.isSystemColorSchemeDark()) {\n            return this.preferredDarkTheme;\n        }\n        return this.preferredLightTheme;\n    }\n    /**\n     * The names of the registered themes.\n     */\n    get themes() {\n        return Object.keys(this._themes);\n    }\n    /**\n     * Get the names of the light themes.\n     */\n    get lightThemes() {\n        return Object.entries(this._themes)\n            .filter(([_, theme]) => theme.isLight)\n            .map(([name, _]) => name);\n    }\n    /**\n     * Get the names of the dark themes.\n     */\n    get darkThemes() {\n        return Object.entries(this._themes)\n            .filter(([_, theme]) => !theme.isLight)\n            .map(([name, _]) => name);\n    }\n    /**\n     * A signal fired when the application theme changes.\n     */\n    get themeChanged() {\n        return this._themeChanged;\n    }\n    /**\n     * Test if the system's preferred color scheme is dark\n     */\n    isSystemColorSchemeDark() {\n        return (window.matchMedia &&\n            window.matchMedia('(prefers-color-scheme: dark)').matches);\n    }\n    /**\n     * Get the value of a CSS variable from its key.\n     *\n     * @param key - A Jupyterlab CSS variable, without the leading '--jp-'.\n     *\n     * @returns value - The current value of the Jupyterlab CSS variable\n     */\n    getCSS(key) {\n        var _a;\n        return ((_a = this._overrides[key]) !== null && _a !== void 0 ? _a : getComputedStyle(document.documentElement).getPropertyValue(`--jp-${key}`));\n    }\n    /**\n     * Load a theme CSS file by path.\n     *\n     * @param path - The path of the file to load.\n     */\n    loadCSS(path) {\n        const base = this._base;\n        const href = URLExt.isLocal(path) ? URLExt.join(base, path) : path;\n        const links = this._links;\n        return new Promise((resolve, reject) => {\n            const link = document.createElement('link');\n            link.setAttribute('rel', 'stylesheet');\n            link.setAttribute('type', 'text/css');\n            link.setAttribute('href', href);\n            link.addEventListener('load', () => {\n                resolve(undefined);\n            });\n            link.addEventListener('error', () => {\n                reject(`Stylesheet failed to load: ${href}`);\n            });\n            document.body.appendChild(link);\n            links.push(link);\n            // add any css overrides to document\n            this.loadCSSOverrides();\n        });\n    }\n    /**\n     * Loads all current CSS overrides from settings. If an override has been\n     * removed or is invalid, this function unloads it instead.\n     */\n    loadCSSOverrides() {\n        var _a;\n        const newOverrides = (_a = this._settings.user['overrides']) !== null && _a !== void 0 ? _a : {};\n        // iterate over the union of current and new CSS override keys\n        Object.keys({ ...this._overrides, ...newOverrides }).forEach(key => {\n            const val = newOverrides[key];\n            if (val && this.validateCSS(key, val)) {\n                // validation succeeded, set the override\n                document.documentElement.style.setProperty(`--jp-${key}`, val);\n            }\n            else {\n                // if key is not present or validation failed, the override will be removed\n                delete newOverrides[key];\n                document.documentElement.style.removeProperty(`--jp-${key}`);\n            }\n        });\n        // replace the current overrides with the new ones\n        this._overrides = newOverrides;\n    }\n    /**\n     * Validate a CSS value w.r.t. a key\n     *\n     * @param key - A Jupyterlab CSS variable, without the leading '--jp-'.\n     *\n     * @param val - A candidate CSS value\n     */\n    validateCSS(key, val) {\n        // determine the css property corresponding to the key\n        const prop = this._overrideProps[key];\n        if (!prop) {\n            console.warn('CSS validation failed: could not find property corresponding to key.\\n' +\n                `key: '${key}', val: '${val}'`);\n            return false;\n        }\n        // use built-in validation once we have the corresponding property\n        if (CSS.supports(prop, val)) {\n            return true;\n        }\n        else {\n            console.warn('CSS validation failed: invalid value.\\n' +\n                `key: '${key}', val: '${val}', prop: '${prop}'`);\n            return false;\n        }\n    }\n    /**\n     * Register a theme with the theme manager.\n     *\n     * @param theme - The theme to register.\n     *\n     * @returns A disposable that can be used to unregister the theme.\n     */\n    register(theme) {\n        const { name } = theme;\n        const themes = this._themes;\n        if (themes[name]) {\n            throw new Error(`Theme already registered for ${name}`);\n        }\n        themes[name] = theme;\n        return new DisposableDelegate(() => {\n            delete themes[name];\n        });\n    }\n    /**\n     * Add a CSS override to the settings.\n     */\n    setCSSOverride(key, value) {\n        return this._settings.set('overrides', {\n            ...this._overrides,\n            [key]: value\n        });\n    }\n    /**\n     * Set the current theme.\n     */\n    setTheme(name) {\n        return this._settings.set('theme', name);\n    }\n    /**\n     * Set the preferred light theme.\n     */\n    setPreferredLightTheme(name) {\n        return this._settings.set('preferred-light-theme', name);\n    }\n    /**\n     * Set the preferred dark theme.\n     */\n    setPreferredDarkTheme(name) {\n        return this._settings.set('preferred-dark-theme', name);\n    }\n    /**\n     * Test whether a given theme is light.\n     */\n    isLight(name) {\n        return this._themes[name].isLight;\n    }\n    /**\n     * Increase a font size w.r.t. its current setting or its value in the\n     * current theme.\n     *\n     * @param key - A Jupyterlab font size CSS variable, without the leading '--jp-'.\n     */\n    incrFontSize(key) {\n        return this._incrFontSize(key, true);\n    }\n    /**\n     * Decrease a font size w.r.t. its current setting or its value in the\n     * current theme.\n     *\n     * @param key - A Jupyterlab font size CSS variable, without the leading '--jp-'.\n     */\n    decrFontSize(key) {\n        return this._incrFontSize(key, false);\n    }\n    /**\n     * Test whether a given theme styles scrollbars,\n     * and if the user has scrollbar styling enabled.\n     */\n    themeScrollbars(name) {\n        return (!!this._settings.composite['theme-scrollbars'] &&\n            !!this._themes[name].themeScrollbars);\n    }\n    /**\n     * Test if the user has scrollbar styling enabled.\n     */\n    isToggledThemeScrollbars() {\n        return !!this._settings.composite['theme-scrollbars'];\n    }\n    /**\n     * Toggle the `theme-scrollbars` setting.\n     */\n    toggleThemeScrollbars() {\n        return this._settings.set('theme-scrollbars', !this._settings.composite['theme-scrollbars']);\n    }\n    /**\n     * Test if the user enables adaptive theme.\n     */\n    isToggledAdaptiveTheme() {\n        return !!this._settings.composite['adaptive-theme'];\n    }\n    /**\n     * Toggle the `adaptive-theme` setting.\n     */\n    toggleAdaptiveTheme() {\n        return this._settings.set('adaptive-theme', !this._settings.composite['adaptive-theme']);\n    }\n    /**\n     * Get the display name of the theme.\n     */\n    getDisplayName(name) {\n        var _a, _b;\n        return (_b = (_a = this._themes[name]) === null || _a === void 0 ? void 0 : _a.displayName) !== null && _b !== void 0 ? _b : name;\n    }\n    /**\n     * Change a font size by a positive or negative increment.\n     */\n    _incrFontSize(key, add = true) {\n        var _a;\n        // get the numeric and unit parts of the current font size\n        const parts = ((_a = this.getCSS(key)) !== null && _a !== void 0 ? _a : '13px').split(/([a-zA-Z]+)/);\n        // determine the increment\n        const incr = (add ? 1 : -1) * (parts[1] === 'em' ? 0.1 : 1);\n        // increment the font size and set it as an override\n        return this.setCSSOverride(key, `${Number(parts[0]) + incr}${parts[1]}`);\n    }\n    /**\n     * Initialize the key -> property dict for the overrides\n     */\n    _initOverrideProps() {\n        const definitions = this._settings.schema.definitions;\n        const overidesSchema = definitions.cssOverrides.properties;\n        Object.keys(overidesSchema).forEach(key => {\n            // override validation is against the CSS property in the description\n            // field. Example: for key ui-font-family, .description is font-family\n            let description;\n            switch (key) {\n                case 'code-font-size':\n                case 'content-font-size1':\n                case 'ui-font-size1':\n                    description = 'font-size';\n                    break;\n                default:\n                    description = overidesSchema[key].description;\n                    break;\n            }\n            this._overrideProps[key] = description;\n        });\n    }\n    /**\n     * Handle the current settings.\n     */\n    _loadSettings() {\n        const outstanding = this._outstanding;\n        const pending = this._pending;\n        const requests = this._requests;\n        // If another request is pending, cancel it.\n        if (pending) {\n            window.clearTimeout(pending);\n            this._pending = 0;\n        }\n        const settings = this._settings;\n        const themes = this._themes;\n        let theme = settings.composite['theme'];\n        if (this.isToggledAdaptiveTheme()) {\n            if (this.isSystemColorSchemeDark()) {\n                theme = this.preferredDarkTheme;\n            }\n            else {\n                theme = this.preferredLightTheme;\n            }\n        }\n        // If another promise is outstanding, wait until it finishes before\n        // attempting to load the settings. Because outstanding promises cannot\n        // be aborted, the order in which they occur must be enforced.\n        if (outstanding) {\n            outstanding\n                .then(() => {\n                this._loadSettings();\n            })\n                .catch(() => {\n                this._loadSettings();\n            });\n            this._outstanding = null;\n            return;\n        }\n        // Increment the request counter.\n        requests[theme] = requests[theme] ? requests[theme] + 1 : 1;\n        // If the theme exists, load it right away.\n        if (themes[theme]) {\n            this._outstanding = this._loadTheme(theme);\n            delete requests[theme];\n            return;\n        }\n        // If the request has taken too long, give up.\n        if (requests[theme] > REQUEST_THRESHOLD) {\n            const fallback = settings.default('theme');\n            // Stop tracking the requests for this theme.\n            delete requests[theme];\n            if (!themes[fallback]) {\n                this._onError(this._trans.__('Neither theme %1 nor default %2 loaded.', theme, fallback));\n                return;\n            }\n            console.warn(`Could not load theme ${theme}, using default ${fallback}.`);\n            this._outstanding = this._loadTheme(fallback);\n            return;\n        }\n        // If the theme does not yet exist, attempt to wait for it.\n        this._pending = window.setTimeout(() => {\n            this._loadSettings();\n        }, REQUEST_INTERVAL);\n    }\n    /**\n     * Load the theme.\n     *\n     * #### Notes\n     * This method assumes that the `theme` exists.\n     */\n    _loadTheme(theme) {\n        var _a;\n        const current = this._current;\n        const links = this._links;\n        const themes = this._themes;\n        const splash = this._splash\n            ? this._splash.show(themes[theme].isLight)\n            : new DisposableDelegate(() => undefined);\n        // Unload any CSS files that have been loaded.\n        links.forEach(link => {\n            if (link.parentElement) {\n                link.parentElement.removeChild(link);\n            }\n        });\n        links.length = 0;\n        const themeProps = (_a = this._settings.schema.properties) === null || _a === void 0 ? void 0 : _a.theme;\n        if (themeProps) {\n            themeProps.enum = Object.keys(themes).map(value => { var _a; return (_a = themes[value].displayName) !== null && _a !== void 0 ? _a : value; });\n        }\n        // Unload the previously loaded theme.\n        const old = current ? themes[current].unload() : Promise.resolve();\n        return Promise.all([old, themes[theme].load()])\n            .then(() => {\n            this._current = theme;\n            this._themeChanged.emit({\n                name: 'theme',\n                oldValue: current,\n                newValue: theme\n            });\n            // Need to force a redraw of the app here to avoid a Chrome rendering\n            // bug that can leave the scrollbars in an invalid state\n            this._host.hide();\n            // If we hide/show the widget too quickly, no redraw will happen.\n            // requestAnimationFrame delays until after the next frame render.\n            requestAnimationFrame(() => {\n                this._host.show();\n                Private.fitAll(this._host);\n                splash.dispose();\n            });\n        })\n            .catch(reason => {\n            this._onError(reason);\n            splash.dispose();\n        });\n    }\n    /**\n     * Handle a theme error.\n     */\n    _onError(reason) {\n        void showDialog({\n            title: this._trans.__('Error Loading Theme'),\n            body: String(reason),\n            buttons: [Dialog.okButton({ label: this._trans.__('OK') })]\n        });\n    }\n}\n/**\n * A namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Fit a widget and all of its children, recursively.\n     */\n    function fitAll(widget) {\n        for (const child of widget.children()) {\n            fitAll(child);\n        }\n        widget.fit();\n    }\n    Private.fitAll = fitAll;\n})(Private || (Private = {}));\n//# sourceMappingURL=thememanager.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The command palette token.\n */\nexport const ICommandPalette = new Token('@jupyterlab/apputils:ICommandPalette', `A service for the application command palette\n  in the left panel. Use this to add commands to the palette.`);\n/**\n * The kernel status indicator model.\n */\nexport const IKernelStatusModel = new Token('@jupyterlab/apputils:IKernelStatusModel', 'A service to register kernel session provider to the kernel status indicator.');\n/**\n * The license client for fetching licenses.\n */\nexport const ILicensesClient = new Token('@jupyterlab/apputils:ILicensesClient', 'A service for fetching licenses.');\n/**\n * The session context dialogs token.\n */\nexport const ISessionContextDialogs = new Token('@jupyterlab/apputils:ISessionContextDialogs', 'A service for handling the session dialogs.');\n/**\n * The theme manager token.\n */\nexport const IThemeManager = new Token('@jupyterlab/apputils:IThemeManager', 'A service for the theme manager for the application. This is used primarily in theme extensions to register new themes.');\n/**\n * The sanitizer token.\n */\nexport const ISanitizer = new Token('@jupyterlab/apputils:ISanitizer', 'A service for sanitizing HTML strings.');\n/**\n * The main menu token.\n */\nexport const ISplashScreen = new Token('@jupyterlab/apputils:ISplashScreen', `A service for the splash screen for the application.\n  Use this if you want to show the splash screen for your own purposes.`);\n/**\n * The default window resolver token.\n */\nexport const IWindowResolver = new Token('@jupyterlab/apputils:IWindowResolver', `A service for a window resolver for the\n  application. JupyterLab workspaces are given a name, which are determined using\n  the window resolver. Require this if you want to use the name of the current workspace.`);\n/**\n * The toolbar registry token.\n */\nexport const IToolbarWidgetRegistry = new Token('@jupyterlab/apputils:IToolbarWidgetRegistry', `A registry for toolbar widgets. Require this\n  if you want to build the toolbar dynamically from a data definition (stored in settings for example).`);\n//# sourceMappingURL=tokens.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { CommandToolbarButton, LabIcon, Toolbar } from '@jupyterlab/ui-components';\nimport { Widget } from '@lumino/widgets';\nimport { Signal } from '@lumino/signaling';\n/**\n * Concrete implementation of IToolbarWidgetRegistry interface\n */\nexport class ToolbarWidgetRegistry {\n    constructor(options) {\n        this._widgets = new Map();\n        this._factoryAdded = new Signal(this);\n        this._defaultFactory = options.defaultFactory;\n    }\n    /**\n     * Default toolbar item factory\n     */\n    get defaultFactory() {\n        return this._defaultFactory;\n    }\n    set defaultFactory(factory) {\n        this._defaultFactory = factory;\n    }\n    /**\n     * A signal emitted when a factory widget has been added.\n     */\n    get factoryAdded() {\n        return this._factoryAdded;\n    }\n    /**\n     * Create a toolbar item widget\n     *\n     * @param widgetFactory The widget factory name that creates the toolbar\n     * @param widget The newly widget containing the toolbar\n     * @param toolbarItem The toolbar item definition\n     * @returns The widget to be inserted in the toolbar.\n     */\n    createWidget(widgetFactory, widget, toolbarItem) {\n        var _a;\n        const factory = (_a = this._widgets.get(widgetFactory)) === null || _a === void 0 ? void 0 : _a.get(toolbarItem.name);\n        return factory\n            ? factory(widget)\n            : this._defaultFactory(widgetFactory, widget, toolbarItem);\n    }\n    /**\n     * Add a new toolbar item factory\n     *\n     * @param widgetFactory The widget factory name that creates the toolbar\n     * @param toolbarItemName The unique toolbar item\n     * @param factory The factory function that receives the widget containing the toolbar and returns the toolbar widget.\n     * @returns The previously defined factory\n     */\n    addFactory(widgetFactory, toolbarItemName, factory) {\n        let namespace = this._widgets.get(widgetFactory);\n        const oldFactory = namespace === null || namespace === void 0 ? void 0 : namespace.get(toolbarItemName);\n        if (!namespace) {\n            namespace = new Map();\n            this._widgets.set(widgetFactory, namespace);\n        }\n        namespace.set(toolbarItemName, factory);\n        this._factoryAdded.emit(toolbarItemName);\n        return oldFactory;\n    }\n    /**\n     * Register a new toolbar item factory\n     *\n     * @param widgetFactory The widget factory name that creates the toolbar\n     * @param toolbarItemName The unique toolbar item\n     * @param factory The factory function that receives the widget containing the toolbar and returns the toolbar widget.\n     * @returns The previously defined factory\n     *\n     * @deprecated since v4 use `addFactory` instead\n     */\n    registerFactory(widgetFactory, toolbarItemName, factory) {\n        return this.addFactory(widgetFactory, toolbarItemName, factory);\n    }\n}\n/**\n * Create the default toolbar item widget factory\n *\n * @param commands Application commands registry\n * @returns Default factory\n */\nexport function createDefaultFactory(commands) {\n    return (widgetFactory, widget, toolbarItem) => {\n        var _a, _b;\n        switch ((_a = toolbarItem.type) !== null && _a !== void 0 ? _a : 'command') {\n            case 'command': {\n                const { command: tId, args: tArgs, label: tLabel, caption: tCaption, icon: tIcon } = toolbarItem;\n                const id = tId !== null && tId !== void 0 ? tId : '';\n                const args = { toolbar: true, ...tArgs };\n                const icon = tIcon ? LabIcon.resolve({ icon: tIcon }) : undefined;\n                const toolbar = widget.toolbar;\n                // If there is an icon, undefined label will results in no label\n                // otherwise the label will be set using the setting or the command label\n                const label = (icon !== null && icon !== void 0 ? icon : commands.icon(id, args)) ? tLabel !== null && tLabel !== void 0 ? tLabel : '' : tLabel;\n                return new CommandToolbarButton({\n                    commands,\n                    id,\n                    args,\n                    icon,\n                    label,\n                    caption: tCaption,\n                    noFocusOnClick: (_b = toolbar === null || toolbar === void 0 ? void 0 : toolbar.noFocusOnClick) !== null && _b !== void 0 ? _b : false\n                });\n            }\n            case 'spacer':\n                return Toolbar.createSpacerItem();\n            default:\n                return new Widget();\n        }\n    };\n}\n//# sourceMappingURL=registry.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { ObservableList } from '@jupyterlab/observables';\nimport { SettingRegistry } from '@jupyterlab/settingregistry';\nimport { findIndex } from '@lumino/algorithm';\nimport { JSONExt } from '@lumino/coreutils';\nimport { Dialog, showDialog } from '../dialog';\n/**\n * Default toolbar item rank\n *\n * #### Notes\n * This will place item just before the white spacer item in the notebook toolbar.\n */\nconst DEFAULT_TOOLBAR_ITEM_RANK = 50;\nconst TOOLBAR_KEY = 'jupyter.lab.toolbars';\n/**\n * Display warning when the toolbar definition have been modified.\n *\n * @param trans Translation bundle\n */\nasync function displayInformation(trans) {\n    const result = await showDialog({\n        title: trans.__('Information'),\n        body: trans.__('Toolbar customization has changed. You will need to reload JupyterLab to see the changes.'),\n        buttons: [\n            Dialog.cancelButton(),\n            Dialog.okButton({ label: trans.__('Reload') })\n        ]\n    });\n    if (result.button.accept) {\n        location.reload();\n    }\n}\n/**\n * Set the toolbar definition by accumulating all settings definition.\n *\n * The list will be populated only with the enabled items.\n *\n * @param toolbarItems Observable list to populate\n * @param registry Application settings registry\n * @param factoryName Widget factory name that needs a toolbar\n * @param pluginId Settings plugin id\n * @param translator Translator object\n * @param propertyId Property holding the toolbar definition in the settings; default 'toolbar'\n * @returns List of toolbar items\n */\nasync function setToolbarItems(toolbarItems, registry, factoryName, pluginId, translator, propertyId = 'toolbar') {\n    var _a;\n    const trans = translator.load('jupyterlab');\n    let canonical = null;\n    let loaded = {};\n    let listenPlugin = true;\n    try {\n        /**\n         * Populate the plugin's schema defaults.\n         *\n         * We keep track of disabled entries in case the plugin is loaded\n         * after the toolbar initialization.\n         */\n        function populate(schema) {\n            var _a, _b;\n            loaded = {};\n            const pluginDefaults = Object.keys(registry.plugins)\n                // Filter out the current plugin (will be listed when reloading)\n                // because we control its addition after the mapping step\n                .filter(plugin => plugin !== pluginId)\n                .map(plugin => {\n                var _a, _b;\n                const items = (_b = ((_a = registry.plugins[plugin].schema[TOOLBAR_KEY]) !== null && _a !== void 0 ? _a : {})[factoryName]) !== null && _b !== void 0 ? _b : [];\n                loaded[plugin] = items;\n                return items;\n            })\n                .concat([(_b = ((_a = schema[TOOLBAR_KEY]) !== null && _a !== void 0 ? _a : {})[factoryName]) !== null && _b !== void 0 ? _b : []])\n                .reduceRight((acc, val) => SettingRegistry.reconcileToolbarItems(acc, val, true), []);\n            // Apply default value as last step to take into account overrides.json\n            // The standard toolbars default is [] as the plugin must use\n            // `jupyter.lab.toolbars.<factory>` to define its default value.\n            schema.properties[propertyId].default =\n                SettingRegistry.reconcileToolbarItems(pluginDefaults, schema.properties[propertyId].default, true).sort((a, b) => {\n                    var _a, _b;\n                    return ((_a = a.rank) !== null && _a !== void 0 ? _a : DEFAULT_TOOLBAR_ITEM_RANK) -\n                        ((_b = b.rank) !== null && _b !== void 0 ? _b : DEFAULT_TOOLBAR_ITEM_RANK);\n                });\n        }\n        // Transform the plugin object to return different schema than the default.\n        registry.transform(pluginId, {\n            compose: plugin => {\n                var _a, _b, _c, _d, _e;\n                // Only override the canonical schema the first time.\n                if (!canonical) {\n                    canonical = JSONExt.deepCopy(plugin.schema);\n                    populate(canonical);\n                }\n                const defaults = (_c = ((_b = ((_a = canonical.properties) !== null && _a !== void 0 ? _a : {})[propertyId]) !== null && _b !== void 0 ? _b : {}).default) !== null && _c !== void 0 ? _c : [];\n                // Initialize the settings\n                const user = plugin.data.user;\n                const composite = plugin.data.composite;\n                // Overrides the value with using the aggregated default for the toolbar property\n                user[propertyId] =\n                    (_d = plugin.data.user[propertyId]) !== null && _d !== void 0 ? _d : [];\n                composite[propertyId] = ((_e = SettingRegistry.reconcileToolbarItems(defaults, user[propertyId], false)) !== null && _e !== void 0 ? _e : []).sort((a, b) => {\n                    var _a, _b;\n                    return ((_a = a.rank) !== null && _a !== void 0 ? _a : DEFAULT_TOOLBAR_ITEM_RANK) -\n                        ((_b = b.rank) !== null && _b !== void 0 ? _b : DEFAULT_TOOLBAR_ITEM_RANK);\n                });\n                plugin.data = { composite, user };\n                return plugin;\n            },\n            fetch: plugin => {\n                // Only override the canonical schema the first time.\n                if (!canonical) {\n                    canonical = JSONExt.deepCopy(plugin.schema);\n                    populate(canonical);\n                }\n                return {\n                    data: plugin.data,\n                    id: plugin.id,\n                    raw: plugin.raw,\n                    schema: canonical,\n                    version: plugin.version\n                };\n            }\n        });\n    }\n    catch (error) {\n        if (error.name === 'TransformError') {\n            // Assume the existing transformer is the toolbar builder transformer\n            // from another factory set up.\n            listenPlugin = false;\n        }\n        else {\n            throw error;\n        }\n    }\n    // Repopulate the canonical variable after the setting registry has\n    // preloaded all initial plugins.\n    const settings = await registry.load(pluginId);\n    // React to customization by the user\n    settings.changed.connect(() => {\n        var _a;\n        const newItems = (_a = settings.composite[propertyId]) !== null && _a !== void 0 ? _a : [];\n        transferSettings(newItems);\n    });\n    const transferSettings = (newItems) => {\n        // This is not optimal but safer because a toolbar item with the same\n        // name cannot be inserted (it will be a no-op). But that could happen\n        // if the settings are changing the items order.\n        toolbarItems.clear();\n        toolbarItems.pushAll(newItems.filter(item => !item.disabled));\n    };\n    // Initialize the toolbar\n    transferSettings((_a = settings.composite[propertyId]) !== null && _a !== void 0 ? _a : []);\n    // React to plugin changes if no other transformer exists, otherwise bail.\n    if (!listenPlugin) {\n        return;\n    }\n    registry.pluginChanged.connect(async (sender, plugin) => {\n        var _a, _b, _c;\n        // Since the plugin storing the toolbar definition is transformed above,\n        // if it has changed, it means that a request to reload was triggered.\n        // Hence the toolbar definitions from the other plugins have been\n        // automatically reset during the transform step.\n        if (plugin === pluginId) {\n            return;\n        }\n        // If a plugin changed its toolbar items\n        const oldItems = (_a = loaded[plugin]) !== null && _a !== void 0 ? _a : [];\n        const newItems = (_c = ((_b = registry.plugins[plugin].schema[TOOLBAR_KEY]) !== null && _b !== void 0 ? _b : {})[factoryName]) !== null && _c !== void 0 ? _c : [];\n        if (!JSONExt.deepEqual(oldItems, newItems)) {\n            if (loaded[plugin]) {\n                // The plugin has changed, request the user to reload the UI\n                await displayInformation(trans);\n            }\n            else {\n                if (newItems.length > 0) {\n                    // Empty the default values to avoid toolbar settings collisions.\n                    canonical = null;\n                    const schema = registry.plugins[pluginId].schema;\n                    schema.properties.toolbar.default = [];\n                    // Run again the transformations.\n                    await registry.load(pluginId, true);\n                }\n            }\n        }\n    });\n}\n/**\n * Create the toolbar factory for a given container widget based\n * on a data description stored in settings\n *\n * @param toolbarRegistry Toolbar widgets registry\n * @param settingsRegistry Settings registry\n * @param factoryName Toolbar container factory name\n * @param pluginId Settings plugin id\n * @param translator Translator\n * @param propertyId Toolbar definition key in the settings plugin\n * @returns List of toolbar widgets factory\n */\nexport function createToolbarFactory(toolbarRegistry, settingsRegistry, factoryName, pluginId, translator, propertyId = 'toolbar') {\n    const items = new ObservableList({\n        itemCmp: (a, b) => JSONExt.deepEqual(a, b)\n    });\n    // Get toolbar definition from the settings\n    setToolbarItems(items, settingsRegistry, factoryName, pluginId, translator, propertyId).catch(reason => {\n        console.error(`Failed to load toolbar items for factory ${factoryName} from ${pluginId}`, reason);\n    });\n    return (widget) => {\n        const updateToolbar = (list, change) => {\n            switch (change.type) {\n                case 'move':\n                    toolbar.move(change.oldIndex, change.newIndex);\n                    break;\n                case 'add':\n                    change.newValues.forEach(item => toolbar.push({\n                        name: item.name,\n                        widget: toolbarRegistry.createWidget(factoryName, widget, item)\n                    }));\n                    break;\n                case 'remove':\n                    change.oldValues.forEach(() => toolbar.remove(change.oldIndex));\n                    break;\n                case 'set':\n                    change.newValues.forEach(item => toolbar.set(change.newIndex, {\n                        name: item.name,\n                        widget: toolbarRegistry.createWidget(factoryName, widget, item)\n                    }));\n                    break;\n            }\n        };\n        const updateWidget = (registry, itemName) => {\n            const itemIndex = Array.from(items).findIndex(item => item.name === itemName);\n            if (itemIndex >= 0) {\n                toolbar.set(itemIndex, {\n                    name: itemName,\n                    widget: toolbarRegistry.createWidget(factoryName, widget, items.get(itemIndex))\n                });\n            }\n        };\n        const toolbar = new ObservableList({\n            values: Array.from(items).map(item => {\n                return {\n                    name: item.name,\n                    widget: toolbarRegistry.createWidget(factoryName, widget, item)\n                };\n            })\n        });\n        // Re-render the widget if a new factory has been added.\n        toolbarRegistry.factoryAdded.connect(updateWidget);\n        items.changed.connect(updateToolbar);\n        widget.disposed.connect(() => {\n            items.changed.disconnect(updateToolbar);\n            toolbarRegistry.factoryAdded.disconnect(updateWidget);\n        });\n        return toolbar;\n    };\n}\n/**\n * Set the toolbar items of a widget from a factory\n *\n * @param widget Widget with the toolbar to set\n * @param factory Toolbar items factory\n * @param toolbar Separated toolbar if widget is a raw widget\n */\nexport function setToolbar(widget, factory, toolbar) {\n    var _a;\n    // @ts-expect-error Widget has no toolbar\n    if (!widget.toolbar && !toolbar) {\n        console.log(`Widget ${widget.id} has no 'toolbar' and no explicit toolbar was provided.`);\n        return;\n    }\n    // @ts-expect-error Widget has no toolbar\n    const toolbar_ = (_a = widget.toolbar) !== null && _a !== void 0 ? _a : toolbar;\n    const items = factory(widget);\n    if (Array.isArray(items)) {\n        items.forEach(({ name, widget: item }) => {\n            toolbar_.addItem(name, item);\n        });\n    }\n    else {\n        const updateToolbar = (list, changes) => {\n            switch (changes.type) {\n                case 'add':\n                    changes.newValues.forEach((item, index) => {\n                        toolbar_.insertItem(changes.newIndex + index, item.name, item.widget);\n                    });\n                    break;\n                case 'move':\n                    changes.oldValues.forEach(item => {\n                        item.widget.parent = null;\n                    });\n                    changes.newValues.forEach((item, index) => {\n                        toolbar_.insertItem(changes.newIndex + index, item.name, item.widget);\n                    });\n                    break;\n                case 'remove':\n                    changes.oldValues.forEach(item => {\n                        item.widget.parent = null;\n                    });\n                    break;\n                case 'set':\n                    changes.oldValues.forEach(item => {\n                        item.widget.parent = null;\n                    });\n                    changes.newValues.forEach((item, index) => {\n                        const existingIndex = findIndex(toolbar_.names(), name => item.name === name);\n                        if (existingIndex >= 0) {\n                            Array.from(toolbar_.children())[existingIndex].parent = null;\n                        }\n                        toolbar_.insertItem(changes.newIndex + index, item.name, item.widget);\n                    });\n                    break;\n            }\n        };\n        updateToolbar(items, {\n            newIndex: 0,\n            newValues: Array.from(items),\n            oldIndex: 0,\n            oldValues: [],\n            type: 'add'\n        });\n        items.changed.connect(updateToolbar);\n        widget.disposed.connect(() => {\n            items.changed.disconnect(updateToolbar);\n        });\n    }\n}\n//# sourceMappingURL=factory.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { PromiseDelegate } from '@lumino/coreutils';\n/**\n * A concrete implementation of a window name resolver.\n */\nexport class WindowResolver {\n    /**\n     * The resolved window name.\n     *\n     * #### Notes\n     * If the `resolve` promise has not resolved, the behavior is undefined.\n     */\n    get name() {\n        return this._name;\n    }\n    /**\n     * Resolve a window name to use as a handle among shared resources.\n     *\n     * @param candidate - The potential window name being resolved.\n     *\n     * #### Notes\n     * Typically, the name candidate should be a JupyterLab workspace name or\n     * an empty string if there is no workspace.\n     *\n     * If the returned promise rejects, a window name cannot be resolved without\n     * user intervention, which typically means navigation to a new URL.\n     */\n    resolve(candidate) {\n        return Private.resolve(candidate).then(name => {\n            this._name = name;\n        });\n    }\n}\n/*\n * A namespace for private module data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The internal prefix for private local storage keys.\n     */\n    const PREFIX = '@jupyterlab/statedb:StateDB';\n    /**\n     * The local storage beacon key.\n     */\n    const BEACON = `${PREFIX}:beacon`;\n    /**\n     * The timeout (in ms) to wait for beacon responders.\n     *\n     * #### Notes\n     * This value is a whole number between 200 and 500 in order to prevent\n     * perfect timeout collisions between multiple simultaneously opening windows\n     * that have the same URL. This is an edge case because multiple windows\n     * should not ordinarily share the same URL, but it can be contrived.\n     */\n    const TIMEOUT = Math.floor(200 + Math.random() * 300);\n    /**\n     * The local storage window key.\n     */\n    const WINDOW = `${PREFIX}:window`;\n    /**\n     * Current beacon request\n     *\n     * #### Notes\n     * We keep track of the current request so that we can ignore our own beacon\n     * requests. This is to work around a bug in Safari, where Safari sometimes\n     * triggers local storage events for changes made by the current tab. See\n     * https://github.com/jupyterlab/jupyterlab/issues/6921#issuecomment-540817283\n     * for more details.\n     */\n    let currentBeaconRequest = null;\n    /**\n     * A potential preferred default window name.\n     */\n    let candidate = null;\n    /**\n     * The window name promise.\n     */\n    const delegate = new PromiseDelegate();\n    /**\n     * The known window names.\n     */\n    const known = {};\n    /**\n     * The window name.\n     */\n    let name = null;\n    /**\n     * Whether the name resolution has completed.\n     */\n    let resolved = false;\n    /**\n     * Start the storage event handler.\n     */\n    function initialize() {\n        // Listen to all storage events for beacons and window names.\n        window.addEventListener('storage', (event) => {\n            const { key, newValue } = event;\n            // All the keys we care about have values.\n            if (newValue === null) {\n                return;\n            }\n            // If the beacon was fired, respond with a ping.\n            if (key === BEACON &&\n                newValue !== currentBeaconRequest &&\n                candidate !== null) {\n                ping(resolved ? name : candidate);\n                return;\n            }\n            // If the window name is resolved, bail.\n            if (resolved || key !== WINDOW) {\n                return;\n            }\n            const reported = newValue.replace(/\\-\\d+$/, '');\n            // Store the reported window name.\n            known[reported] = null;\n            // If a reported window name and candidate collide, reject the candidate.\n            if (!candidate || candidate in known) {\n                reject();\n            }\n        });\n    }\n    /**\n     * Ping peers with payload.\n     */\n    function ping(payload) {\n        if (payload === null) {\n            return;\n        }\n        const { localStorage } = window;\n        localStorage.setItem(WINDOW, `${payload}-${new Date().getTime()}`);\n    }\n    /**\n     * Reject the candidate.\n     */\n    function reject() {\n        resolved = true;\n        currentBeaconRequest = null;\n        delegate.reject(`Window name candidate \"${candidate}\" already exists`);\n    }\n    /**\n     * Returns a promise that resolves with the window name used for restoration.\n     */\n    function resolve(potential) {\n        if (resolved) {\n            return delegate.promise;\n        }\n        // Set the local candidate.\n        candidate = potential;\n        if (candidate in known) {\n            reject();\n            return delegate.promise;\n        }\n        const { localStorage, setTimeout } = window;\n        // Wait until other windows have reported before claiming the candidate.\n        setTimeout(() => {\n            if (resolved) {\n                return;\n            }\n            // If the window name has not already been resolved, check one last time\n            // to confirm it is not a duplicate before resolving.\n            if (!candidate || candidate in known) {\n                return reject();\n            }\n            resolved = true;\n            currentBeaconRequest = null;\n            delegate.resolve((name = candidate));\n            ping(name);\n        }, TIMEOUT);\n        // Fire the beacon to collect other windows' names.\n        currentBeaconRequest = `${Math.random()}-${new Date().getTime()}`;\n        localStorage.setItem(BEACON, currentBeaconRequest);\n        return delegate.promise;\n    }\n    Private.resolve = resolve;\n    // Initialize the storage listener at runtime.\n    (() => {\n        initialize();\n    })();\n})(Private || (Private = {}));\n//# sourceMappingURL=windowresolver.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module apputils\n */\nimport { Toolbar as UIToolbar } from '@jupyterlab/ui-components';\nimport { Toolbar as ApputilsToolbar } from './toolbar';\n/**\n * @deprecated since v4\n * These widgets are now in @jupyterlab/ui-components\n */\nexport { addCommandToolbarButtonClass, addToolbarButtonClass, Collapser as Collapse, CommandToolbarButton, CommandToolbarButtonComponent, IFrame, HoverBox, ReactWidget, Spinner, Styling, ToolbarButton, ToolbarButtonComponent, UseSignal, VDomModel, VDomRenderer } from '@jupyterlab/ui-components';\nexport * from './clipboard';\nexport * from './commandlinker';\nexport * from './commandpalette';\nexport * from './dialog';\nexport * from './domutils';\nexport * from './inputdialog';\nexport * from './kernelstatuses';\nexport * from './licenses';\nexport * from './mainareawidget';\nexport * from './menufactory';\nexport * from './notification';\nexport * from './printing';\nexport * from './runningSessions';\nexport * from './sanitizer';\nexport * from './semanticCommand';\nexport * from './sessioncontext';\nexport * from './thememanager';\nexport * from './tokens';\nexport { ToolbarWidgetRegistry, createDefaultFactory, createToolbarFactory, setToolbar } from './toolbar';\nexport * from './widgettracker';\nexport * from './windowresolver';\n// Merge Toolbar namespace to preserve API\n/**\n * @deprecated since v4\n * This class is in @jupyterlab/ui-components\n */\nexport class Toolbar extends UIToolbar {\n}\n(function (Toolbar) {\n    Toolbar.createInterruptButton = ApputilsToolbar.createInterruptButton;\n    Toolbar.createKernelNameItem = ApputilsToolbar.createKernelNameItem;\n    Toolbar.createKernelStatusItem = ApputilsToolbar.createKernelStatusItem;\n    Toolbar.createRestartButton = ApputilsToolbar.createRestartButton;\n    /**\n     * @deprecated since v4\n     * This helper function is in @jupyterlab/ui-components\n     */\n    Toolbar.createSpacerItem = UIToolbar.createSpacerItem;\n})(Toolbar || (Toolbar = {}));\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/statusbar/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ObservableMap } from '@jupyterlab/observables';\nimport { AttachmentModel, imageRendererFactory } from '@jupyterlab/rendermime';\nimport { Signal } from '@lumino/signaling';\n/**\n * The default implementation of the IAttachmentsModel.\n */\nexport class AttachmentsModel {\n    /**\n     * Construct a new observable outputs instance.\n     */\n    constructor(options) {\n        var _a;\n        this._map = new ObservableMap();\n        this._isDisposed = false;\n        this._stateChanged = new Signal(this);\n        this._changed = new Signal(this);\n        this._serialized = null;\n        this._changeGuard = false;\n        this.contentFactory =\n            (_a = options.contentFactory) !== null && _a !== void 0 ? _a : AttachmentsModel.defaultContentFactory;\n        if (options.values) {\n            for (const key of Object.keys(options.values)) {\n                if (options.values[key] !== undefined) {\n                    this.set(key, options.values[key]);\n                }\n            }\n        }\n        this._map.changed.connect(this._onMapChanged, this);\n    }\n    /**\n     * A signal emitted when the model state changes.\n     */\n    get stateChanged() {\n        return this._stateChanged;\n    }\n    /**\n     * A signal emitted when the model changes.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * The keys of the attachments in the model.\n     */\n    get keys() {\n        return this._map.keys();\n    }\n    /**\n     * Get the length of the items in the model.\n     */\n    get length() {\n        return this._map.keys().length;\n    }\n    /**\n     * Test whether the model is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources used by the model.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._map.dispose();\n        Signal.clearData(this);\n    }\n    /**\n     * Whether the specified key is set.\n     */\n    has(key) {\n        return this._map.has(key);\n    }\n    /**\n     * Get an item at the specified key.\n     */\n    get(key) {\n        return this._map.get(key);\n    }\n    /**\n     * Set the value at the specified key.\n     */\n    set(key, value) {\n        // Normalize stream data.\n        const item = this._createItem({ value });\n        this._map.set(key, item);\n    }\n    /**\n     * Remove the attachment whose name is the specified key\n     */\n    remove(key) {\n        this._map.delete(key);\n    }\n    /**\n     * Clear all of the attachments.\n     */\n    clear() {\n        this._map.values().forEach((item) => {\n            item.dispose();\n        });\n        this._map.clear();\n    }\n    /**\n     * Deserialize the model from JSON.\n     *\n     * #### Notes\n     * This will clear any existing data.\n     */\n    fromJSON(values) {\n        this.clear();\n        Object.keys(values).forEach(key => {\n            if (values[key] !== undefined) {\n                this.set(key, values[key]);\n            }\n        });\n    }\n    /**\n     * Serialize the model to JSON.\n     */\n    toJSON() {\n        const ret = {};\n        for (const key of this._map.keys()) {\n            ret[key] = this._map.get(key).toJSON();\n        }\n        return ret;\n    }\n    /**\n     * Create an attachment item and hook up its signals.\n     */\n    _createItem(options) {\n        const factory = this.contentFactory;\n        const item = factory.createAttachmentModel(options);\n        item.changed.connect(this._onGenericChange, this);\n        return item;\n    }\n    /**\n     * Handle a change to the list.\n     */\n    _onMapChanged(sender, args) {\n        if (this._serialized && !this._changeGuard) {\n            this._changeGuard = true;\n            this._serialized.set(this.toJSON());\n            this._changeGuard = false;\n        }\n        this._changed.emit(args);\n        this._stateChanged.emit(void 0);\n    }\n    /**\n     * Handle a change to an item.\n     */\n    _onGenericChange() {\n        this._stateChanged.emit(void 0);\n    }\n}\n/**\n * The namespace for AttachmentsModel class statics.\n */\n(function (AttachmentsModel) {\n    /**\n     * The default implementation of a `IAttachmentsModel.IContentFactory`.\n     */\n    class ContentFactory {\n        /**\n         * Create an attachment model.\n         */\n        createAttachmentModel(options) {\n            return new AttachmentModel(options);\n        }\n    }\n    AttachmentsModel.ContentFactory = ContentFactory;\n    /**\n     * The default attachment model factory.\n     */\n    AttachmentsModel.defaultContentFactory = new ContentFactory();\n})(AttachmentsModel || (AttachmentsModel = {}));\n/**\n * A resolver for cell attachments 'attachment:filename'.\n *\n * Will resolve to a data: url.\n */\nexport class AttachmentsResolver {\n    /**\n     * Create an attachments resolver object.\n     */\n    constructor(options) {\n        this._parent = options.parent || null;\n        this._model = options.model;\n    }\n    /**\n     * Resolve a relative url to a correct server path.\n     */\n    async resolveUrl(url) {\n        if (this._parent && !url.startsWith('attachment:')) {\n            return this._parent.resolveUrl(url);\n        }\n        return url;\n    }\n    /**\n     * Get the download url of a given absolute server path.\n     *\n     * #### Notes\n     * The returned URL may include a query parameter.\n     */\n    async getDownloadUrl(path) {\n        if (this._parent && !path.startsWith('attachment:')) {\n            return this._parent.getDownloadUrl(path);\n        }\n        // Return a data URL with the data of the url\n        const key = path.slice('attachment:'.length);\n        const attachment = this._model.get(key);\n        if (attachment === undefined) {\n            // Resolve with unprocessed path, to show as broken image\n            return path;\n        }\n        const { data } = attachment;\n        const mimeType = Object.keys(data)[0];\n        // Only support known safe types:\n        if (mimeType === undefined ||\n            imageRendererFactory.mimeTypes.indexOf(mimeType) === -1) {\n            throw new Error(`Cannot render unknown image mime type \"${mimeType}\".`);\n        }\n        const dataUrl = `data:${mimeType};base64,${data[mimeType]}`;\n        return dataUrl;\n    }\n    /**\n     * Whether the URL should be handled by the resolver\n     * or not.\n     */\n    isLocal(url) {\n        var _a, _b, _c;\n        if (this._parent && !url.startsWith('attachment:')) {\n            return (_c = (_b = (_a = this._parent).isLocal) === null || _b === void 0 ? void 0 : _b.call(_a, url)) !== null && _c !== void 0 ? _c : true;\n        }\n        return true;\n    }\n}\n//# sourceMappingURL=model.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module attachments\n */\nexport * from './model';\n//# sourceMappingURL=index.js.map","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n|\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n#jp-MainLogo {\n  width: calc(var(--jp-private-sidebar-tab-width) + var(--jp-border-width));\n}\n\n#jp-top-bar {\n  --jp-private-toolbar-height: var(--jp-private-menu-panel-height);\n\n  flex: 1 1 auto;\n  padding: 0 2px;\n  box-shadow: none;\n  border: none;\n  align-items: center;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/application-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;;8EAI8E;;AAE9E;EACE,yEAAyE;AAC3E;;AAEA;EACE,gEAAgE;;EAEhE,cAAc;EACd,cAAc;EACd,gBAAgB;EAChB,YAAY;EACZ,mBAAmB;AACrB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n|\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n#jp-MainLogo {\\n  width: calc(var(--jp-private-sidebar-tab-width) + var(--jp-border-width));\\n}\\n\\n#jp-top-bar {\\n  --jp-private-toolbar-height: var(--jp-private-menu-panel-height);\\n\\n  flex: 1 1 auto;\\n  padding: 0 2px;\\n  box-shadow: none;\\n  border: none;\\n  align-items: center;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./core.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./datagrid.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./dockpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./menus.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./scrollbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./tabs.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_6___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./buttons.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_7___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./sidepanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_8___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./titlepanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_9___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./skiplink.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_6___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_7___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_8___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_9___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* Sibling imports */\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/application/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E,oBAAoB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/* Sibling imports */\\n@import './core.css';\\n@import './datagrid.css';\\n@import './dockpanel.css';\\n@import './menus.css';\\n@import './scrollbar.css';\\n@import './tabs.css';\\n@import './buttons.css';\\n@import './sidepanel.css';\\n@import './titlepanel.css';\\n@import './skiplink.css';\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Variables\n|----------------------------------------------------------------------------*/\n\n:root {\n  --jp-flat-button-height: 24px;\n  --jp-flat-button-padding: 8px 12px;\n}\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-ThemedContainer button {\n  border-radius: var(--jp-border-radius);\n}\n\n.jp-ThemedContainer button:focus-visible {\n  outline: 1px solid var(--jp-accept-color-active, var(--jp-brand-color1));\n  outline-offset: -1px;\n}\n\nbutton.jp-mod-styled.jp-mod-accept {\n  background: var(--jp-accept-color-normal, var(--md-blue-500, #2196f3));\n  border: 0;\n  color: white;\n}\n\nbutton.jp-mod-styled.jp-mod-accept:hover {\n  background: var(--jp-accept-color-hover, var(--md-blue-600, #1e88e5));\n}\n\nbutton.jp-mod-styled.jp-mod-accept:active {\n  background: var(--jp-accept-color-active, var(--md-blue-700, #1976d2));\n}\n\nbutton.jp-mod-styled.jp-mod-accept:focus-visible {\n  outline: 1px solid var(--jp-accept-color-active, var(--jp-brand-color1));\n}\n\nbutton.jp-mod-styled.jp-mod-reject {\n  background: var(--jp-reject-color-normal, var(--md-grey-500, #9e9e9e));\n  border: 0;\n  color: white;\n}\n\nbutton.jp-mod-styled.jp-mod-reject:hover {\n  background: var(--jp-reject-color-hover, var(--md-grey-600, #757575));\n}\n\nbutton.jp-mod-styled.jp-mod-reject:active {\n  background: var(--jp-reject-color-active, var(--md-grey-700, #616161));\n}\n\nbutton.jp-mod-styled.jp-mod-reject:focus-visible {\n  outline: 1px solid var(--jp-reject-color-active, var(--md-grey-700, #616161));\n}\n\nbutton.jp-mod-styled.jp-mod-warn {\n  background: var(--jp-warn-color-normal, var(--jp-error-color1));\n  border: 0;\n  color: white;\n}\n\nbutton.jp-mod-styled.jp-mod-warn:hover {\n  background: var(--jp-warn-color-hover, var(--md-red-600, #e53935));\n}\n\nbutton.jp-mod-styled.jp-mod-warn:active {\n  background: var(--jp-warn-color-active, var(--md-red-700, #d32f2f));\n}\n\nbutton.jp-mod-styled.jp-mod-warn:focus-visible {\n  outline: 1px solid var(--jp-warn-color-active, var(--md-red-700, #d32f2f));\n}\n\n.jp-Button-flat {\n  text-decoration: none;\n  padding: var(--jp-flat-button-padding);\n  font-weight: 500;\n  background-color: transparent;\n  height: var(--jp-private-running-shutdown-button-height);\n  line-height: var(--jp-private-running-shutdown-button-height);\n  transition: background-color 0.1s ease;\n  border-radius: 2px;\n}\n\n.jp-Button-flat:focus {\n  border: none;\n  box-shadow: none;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/application/style/buttons.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;8EAE8E;;AAE9E;EACE,6BAA6B;EAC7B,kCAAkC;AACpC;;AAEA;;;8EAG8E;;AAE9E;EACE,sCAAsC;AACxC;;AAEA;EACE,wEAAwE;EACxE,oBAAoB;AACtB;;AAEA;EACE,sEAAsE;EACtE,SAAS;EACT,YAAY;AACd;;AAEA;EACE,qEAAqE;AACvE;;AAEA;EACE,sEAAsE;AACxE;;AAEA;EACE,wEAAwE;AAC1E;;AAEA;EACE,sEAAsE;EACtE,SAAS;EACT,YAAY;AACd;;AAEA;EACE,qEAAqE;AACvE;;AAEA;EACE,sEAAsE;AACxE;;AAEA;EACE,6EAA6E;AAC/E;;AAEA;EACE,+DAA+D;EAC/D,SAAS;EACT,YAAY;AACd;;AAEA;EACE,kEAAkE;AACpE;;AAEA;EACE,mEAAmE;AACrE;;AAEA;EACE,0EAA0E;AAC5E;;AAEA;EACE,qBAAqB;EACrB,sCAAsC;EACtC,gBAAgB;EAChB,6BAA6B;EAC7B,wDAAwD;EACxD,6DAA6D;EAC7D,sCAAsC;EACtC,kBAAkB;AACpB;;AAEA;EACE,YAAY;EACZ,gBAAgB;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Variables\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  --jp-flat-button-height: 24px;\\n  --jp-flat-button-padding: 8px 12px;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-ThemedContainer button {\\n  border-radius: var(--jp-border-radius);\\n}\\n\\n.jp-ThemedContainer button:focus-visible {\\n  outline: 1px solid var(--jp-accept-color-active, var(--jp-brand-color1));\\n  outline-offset: -1px;\\n}\\n\\nbutton.jp-mod-styled.jp-mod-accept {\\n  background: var(--jp-accept-color-normal, var(--md-blue-500, #2196f3));\\n  border: 0;\\n  color: white;\\n}\\n\\nbutton.jp-mod-styled.jp-mod-accept:hover {\\n  background: var(--jp-accept-color-hover, var(--md-blue-600, #1e88e5));\\n}\\n\\nbutton.jp-mod-styled.jp-mod-accept:active {\\n  background: var(--jp-accept-color-active, var(--md-blue-700, #1976d2));\\n}\\n\\nbutton.jp-mod-styled.jp-mod-accept:focus-visible {\\n  outline: 1px solid var(--jp-accept-color-active, var(--jp-brand-color1));\\n}\\n\\nbutton.jp-mod-styled.jp-mod-reject {\\n  background: var(--jp-reject-color-normal, var(--md-grey-500, #9e9e9e));\\n  border: 0;\\n  color: white;\\n}\\n\\nbutton.jp-mod-styled.jp-mod-reject:hover {\\n  background: var(--jp-reject-color-hover, var(--md-grey-600, #757575));\\n}\\n\\nbutton.jp-mod-styled.jp-mod-reject:active {\\n  background: var(--jp-reject-color-active, var(--md-grey-700, #616161));\\n}\\n\\nbutton.jp-mod-styled.jp-mod-reject:focus-visible {\\n  outline: 1px solid var(--jp-reject-color-active, var(--md-grey-700, #616161));\\n}\\n\\nbutton.jp-mod-styled.jp-mod-warn {\\n  background: var(--jp-warn-color-normal, var(--jp-error-color1));\\n  border: 0;\\n  color: white;\\n}\\n\\nbutton.jp-mod-styled.jp-mod-warn:hover {\\n  background: var(--jp-warn-color-hover, var(--md-red-600, #e53935));\\n}\\n\\nbutton.jp-mod-styled.jp-mod-warn:active {\\n  background: var(--jp-warn-color-active, var(--md-red-700, #d32f2f));\\n}\\n\\nbutton.jp-mod-styled.jp-mod-warn:focus-visible {\\n  outline: 1px solid var(--jp-warn-color-active, var(--md-red-700, #d32f2f));\\n}\\n\\n.jp-Button-flat {\\n  text-decoration: none;\\n  padding: var(--jp-flat-button-padding);\\n  font-weight: 500;\\n  background-color: transparent;\\n  height: var(--jp-private-running-shutdown-button-height);\\n  line-height: var(--jp-private-running-shutdown-button-height);\\n  transition: background-color 0.1s ease;\\n  border-radius: 2px;\\n}\\n\\n.jp-Button-flat:focus {\\n  border: none;\\n  box-shadow: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n:root {\n  --jp-private-menu-panel-height: 27px;\n}\n\n.lm-Widget.lm-mod-hidden {\n  display: none !important;\n}\n\n.jp-ThemedContainer {\n  font-family: var(--jp-ui-font-family);\n  background: var(--jp-layout-color3);\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n}\n\n.jp-LabShell {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.jp-LabShell.jp-mod-devMode {\n  border-top: 4px solid red;\n}\n\n#jp-main-dock-panel {\n  padding: 5px;\n}\n\n#jp-main-dock-panel[data-mode='single-document'] {\n  padding: 0;\n}\n\n#jp-main-dock-panel[data-mode='single-document'] .jp-MainAreaWidget {\n  border: none;\n}\n\n#jp-top-panel {\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color0);\n  background: var(--jp-layout-color1);\n  display: flex;\n  min-height: var(--jp-private-menubar-height);\n  overflow: visible;\n\n  /* relax lumino strict CSS contaiment to allow painting the menu bar item\n  over the menu in order to create an illusion of partial border */\n  contain: style size !important;\n}\n\n#jp-menu-panel {\n  min-height: var(--jp-private-menu-panel-height);\n  background: var(--jp-layout-color1);\n}\n\n#jp-down-stack {\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color1);\n}\n\n.jp-LabShell[data-shell-mode='single-document'] #jp-top-panel {\n  border-bottom: none;\n}\n\n.jp-LabShell[data-shell-mode='single-document'] #jp-menu-panel {\n  padding-left: calc(\n    var(--jp-private-sidebar-tab-width) + var(--jp-border-width)\n  );\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color0);\n\n  /* Adjust min-height so open menus show up in the right place */\n  min-height: calc(\n    var(--jp-private-menu-panel-height) + var(--jp-border-width)\n  );\n}\n\n#jp-bottom-panel {\n  background: var(--jp-layout-color1);\n  display: flex;\n}\n\n#jp-single-document-mode {\n  margin: 0 8px;\n  display: flex;\n  align-items: center;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/application/style/core.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,oCAAoC;AACtC;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,qCAAqC;EACrC,mCAAmC;EACnC,SAAS;EACT,UAAU;EACV,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;AACX;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,mEAAmE;EACnE,mCAAmC;EACnC,aAAa;EACb,4CAA4C;EAC5C,iBAAiB;;EAEjB;kEACgE;EAChE,8BAA8B;AAChC;;AAEA;EACE,+CAA+C;EAC/C,mCAAmC;AACrC;;AAEA;EACE,mEAAmE;AACrE;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE;;GAEC;EACD,mEAAmE;;EAEnE,+DAA+D;EAC/D;;GAEC;AACH;;AAEA;EACE,mCAAmC;EACnC,aAAa;AACf;;AAEA;EACE,aAAa;EACb,aAAa;EACb,mBAAmB;AACrB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  --jp-private-menu-panel-height: 27px;\\n}\\n\\n.lm-Widget.lm-mod-hidden {\\n  display: none !important;\\n}\\n\\n.jp-ThemedContainer {\\n  font-family: var(--jp-ui-font-family);\\n  background: var(--jp-layout-color3);\\n  margin: 0;\\n  padding: 0;\\n  overflow: hidden;\\n}\\n\\n.jp-LabShell {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  right: 0;\\n  bottom: 0;\\n}\\n\\n.jp-LabShell.jp-mod-devMode {\\n  border-top: 4px solid red;\\n}\\n\\n#jp-main-dock-panel {\\n  padding: 5px;\\n}\\n\\n#jp-main-dock-panel[data-mode='single-document'] {\\n  padding: 0;\\n}\\n\\n#jp-main-dock-panel[data-mode='single-document'] .jp-MainAreaWidget {\\n  border: none;\\n}\\n\\n#jp-top-panel {\\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color0);\\n  background: var(--jp-layout-color1);\\n  display: flex;\\n  min-height: var(--jp-private-menubar-height);\\n  overflow: visible;\\n\\n  /* relax lumino strict CSS contaiment to allow painting the menu bar item\\n  over the menu in order to create an illusion of partial border */\\n  contain: style size !important;\\n}\\n\\n#jp-menu-panel {\\n  min-height: var(--jp-private-menu-panel-height);\\n  background: var(--jp-layout-color1);\\n}\\n\\n#jp-down-stack {\\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color1);\\n}\\n\\n.jp-LabShell[data-shell-mode='single-document'] #jp-top-panel {\\n  border-bottom: none;\\n}\\n\\n.jp-LabShell[data-shell-mode='single-document'] #jp-menu-panel {\\n  padding-left: calc(\\n    var(--jp-private-sidebar-tab-width) + var(--jp-border-width)\\n  );\\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color0);\\n\\n  /* Adjust min-height so open menus show up in the right place */\\n  min-height: calc(\\n    var(--jp-private-menu-panel-height) + var(--jp-border-width)\\n  );\\n}\\n\\n#jp-bottom-panel {\\n  background: var(--jp-layout-color1);\\n  display: flex;\\n}\\n\\n#jp-single-document-mode {\\n  margin: 0 8px;\\n  display: flex;\\n  align-items: center;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.lm-DataGrid {\n  min-width: 64px;\n  min-height: 64px;\n  border: 1px solid #a0a0a0;\n}\n\n.lm-DataGrid-scrollCorner {\n  background-color: #f0f0f0;\n}\n\n.lm-DataGrid-scrollCorner::after {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 1px;\n  height: 1px;\n  background-color: #a0a0a0;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/application/style/datagrid.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,eAAe;EACf,gBAAgB;EAChB,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,UAAU;EACV,WAAW;EACX,yBAAyB;AAC3B\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DataGrid {\\n  min-width: 64px;\\n  min-height: 64px;\\n  border: 1px solid #a0a0a0;\\n}\\n\\n.lm-DataGrid-scrollCorner {\\n  background-color: #f0f0f0;\\n}\\n\\n.lm-DataGrid-scrollCorner::after {\\n  content: '';\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  width: 1px;\\n  height: 1px;\\n  background-color: #a0a0a0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Variables\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| DockPanel\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel-widget,\n.lm-TabPanel-stackedPanel {\n  background: var(--jp-layout-color0);\n  border-left: var(--jp-border-width) solid var(--jp-border-color1);\n  border-right: var(--jp-border-width) solid var(--jp-border-color1);\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color1);\n}\n\n.lm-DockPanel-overlay {\n  background: rgba(33, 150, 243, 0.1);\n  border: var(--jp-border-width) dashed var(--jp-brand-color1);\n  transition-property: top, left, right, bottom;\n  transition-duration: 150ms;\n  transition-timing-function: ease;\n}\n\n.lm-DockPanel-overlay.lm-mod-root-top,\n.lm-DockPanel-overlay.lm-mod-root-left,\n.lm-DockPanel-overlay.lm-mod-root-right,\n.lm-DockPanel-overlay.lm-mod-root-bottom,\n.lm-DockPanel-overlay.lm-mod-root-center {\n  border-width: 2px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/application/style/dockpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E;;8EAE8E;;AAE9E;;EAEE,mCAAmC;EACnC,iEAAiE;EACjE,kEAAkE;EAClE,mEAAmE;AACrE;;AAEA;EACE,mCAAmC;EACnC,4DAA4D;EAC5D,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC;;AAEA;;;;;EAKE,iBAAiB;AACnB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Variables\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| DockPanel\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DockPanel-widget,\\n.lm-TabPanel-stackedPanel {\\n  background: var(--jp-layout-color0);\\n  border-left: var(--jp-border-width) solid var(--jp-border-color1);\\n  border-right: var(--jp-border-width) solid var(--jp-border-color1);\\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color1);\\n}\\n\\n.lm-DockPanel-overlay {\\n  background: rgba(33, 150, 243, 0.1);\\n  border: var(--jp-border-width) dashed var(--jp-brand-color1);\\n  transition-property: top, left, right, bottom;\\n  transition-duration: 150ms;\\n  transition-timing-function: ease;\\n}\\n\\n.lm-DockPanel-overlay.lm-mod-root-top,\\n.lm-DockPanel-overlay.lm-mod-root-left,\\n.lm-DockPanel-overlay.lm-mod-root-right,\\n.lm-DockPanel-overlay.lm-mod-root-bottom,\\n.lm-DockPanel-overlay.lm-mod-root-center {\\n  border-width: 2px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Variables\n|----------------------------------------------------------------------------*/\n\n:root {\n  --jp-private-menubar-height: 28px;\n  --jp-private-menu-item-height: 24px;\n}\n\n/*-----------------------------------------------------------------------------\n| MenuBar\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n  background: var(--jp-layout-color1);\n  color: var(--jp-ui-font-color1);\n  font-size: var(--jp-ui-font-size1);\n  overflow: hidden;\n}\n\n.lm-MenuBar:hover {\n  overflow-x: auto;\n}\n\n.lm-MenuBar-menu.jp-ThemedContainer {\n  top: calc(-2 * var(--jp-border-width));\n  scrollbar-width: none;\n  -ms-overflow-style: none;\n  overflow: auto;\n  background:\n    linear-gradient(var(--jp-layout-color0) 30%, rgba(0, 0, 0, 0)) center top,\n    linear-gradient(rgba(0, 0, 0, 0), var(--jp-layout-color0) 70%) center bottom,\n    radial-gradient(\n        farthest-side at 50% 0,\n        color-mix(\n          in hsl,\n          var(--jp-layout-color0) 50%,\n          var(--jp-inverse-layout-color0) 30%\n        ),\n        rgba(0, 0, 0, 0)\n      )\n      center top,\n    radial-gradient(\n        farthest-side at 50% 100%,\n        color-mix(\n          in hsl,\n          var(--jp-layout-color0) 50%,\n          var(--jp-inverse-layout-color0) 30%\n        ),\n        rgba(0, 0, 0, 0)\n      )\n      center bottom;\n  background-color: var(--jp-layout-color0);\n  background-repeat: no-repeat;\n  background-size:\n    100% 40px,\n    100% 40px,\n    100% 14px,\n    100% 14px;\n  background-attachment: local, local, scroll, scroll;\n}\n\n.lm-MenuBar-menu.jp-ThemedContainer::-webkit-scrollbar {\n  display: none;\n}\n\n.lm-MenuBar-item {\n  padding: 0 8px;\n  border-left: var(--jp-border-width) solid transparent;\n  border-right: var(--jp-border-width) solid transparent;\n  border-top: var(--jp-border-width) solid transparent;\n  line-height: calc(\n    var(--jp-private-menubar-height) - var(--jp-border-width) * 2\n  );\n}\n\n.lm-MenuBar-content:focus-visible {\n  outline-offset: -3px; /* this value is a compromise between Firefox, Chrome,\n    and Safari over this outline's visibility and discretion */\n}\n\n.lm-MenuBar:focus-visible {\n  outline: 1px solid var(--jp-accept-color-active, var(--jp-brand-color1));\n  outline-offset: -1px;\n}\n\n.lm-MenuBar-menu:focus-visible,\n.lm-MenuBar-item:focus-visible,\n.lm-Menu-item:focus-visible {\n  outline: unset;\n  outline-offset: unset;\n  -moz-outline-radius: unset;\n}\n\n.lm-MenuBar-item.lm-mod-active {\n  background: var(--jp-layout-color2);\n}\n\n.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active {\n  z-index: 10001;\n  background: var(--jp-layout-color0);\n  color: var(--jp-ui-font-color0);\n  border-left: var(--jp-border-width) solid var(--jp-border-color1);\n  border-right: var(--jp-border-width) solid var(--jp-border-color1);\n  box-shadow: var(--jp-elevation-z6);\n}\n\n/* stylelint-disable-next-line selector-max-class */\n.jp-LabShell[data-shell-mode='single-document']\n  .lm-MenuBar.lm-mod-active\n  .lm-MenuBar-item.lm-mod-active {\n  border-top: var(--jp-border-width) solid var(--jp-border-color1);\n}\n\n.lm-MenuBar-item.lm-mod-disabled {\n  color: var(--jp-ui-font-color3);\n}\n\n.lm-MenuBar-item.lm-type-separator {\n  margin: 2px;\n  padding: 0;\n  border: none;\n  border-left: var(--jp-border-width) solid var(--jp-border-color2);\n}\n\n.lm-MenuBar-itemMnemonic {\n  text-decoration: underline;\n}\n\n/*-----------------------------------------------------------------------------\n| Menu\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n  z-index: 10000;\n  padding: 4px 0;\n  background: var(--jp-layout-color0);\n  color: var(--jp-ui-font-color0);\n  border: var(--jp-border-width) solid var(--jp-border-color1);\n  font-size: var(--jp-ui-font-size1);\n  box-shadow: var(--jp-elevation-z6);\n}\n\n.lm-Menu-item {\n  min-height: var(--jp-private-menu-item-height);\n  max-height: var(--jp-private-menu-item-height);\n  padding: 0;\n  line-height: var(--jp-private-menu-item-height);\n}\n\n.lm-Menu-item.lm-mod-active {\n  background: var(--jp-layout-color2);\n}\n\n.lm-Menu-item.lm-mod-disabled {\n  color: var(--jp-ui-font-color3);\n}\n\n.lm-Menu-itemIcon {\n  width: 21px;\n  padding: 0 2px 0 4px;\n  margin-top: -2px;\n}\n\n.lm-Menu-itemLabel {\n  padding: 0 32px 0 2px;\n}\n\n.lm-Menu-itemMnemonic {\n  text-decoration: underline;\n}\n\n.lm-Menu-itemShortcut {\n  padding: 0;\n}\n\n.lm-Menu-itemSubmenuIcon {\n  width: 18px;\n  padding: 0 4px 0 0;\n}\n\n.lm-Menu-item[data-type='separator'] > div {\n  padding: 0;\n  height: 9px;\n}\n\n.lm-Menu-item[data-type='separator'] > div::after {\n  content: '';\n  display: block;\n  position: relative;\n  top: 4px;\n  border-top: var(--jp-border-width) solid var(--jp-layout-color2);\n  mix-blend-mode: multiply;\n}\n\n/* gray out icon/caret for disabled menu items */\n.lm-Menu-item.lm-mod-disabled > .lm-Menu-itemIcon,\n.lm-Menu-item[data-type='submenu'].lm-mod-disabled > .lm-Menu-itemSubmenuIcon {\n  opacity: 0.4;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/application/style/menus.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E;EACE,iCAAiC;EACjC,mCAAmC;AACrC;;AAEA;;8EAE8E;;AAE9E;EACE,mCAAmC;EACnC,+BAA+B;EAC/B,kCAAkC;EAClC,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,sCAAsC;EACtC,qBAAqB;EACrB,wBAAwB;EACxB,cAAc;EACd;;;;;;;;;;;;;;;;;;;;;;mBAsBiB;EACjB,yCAAyC;EACzC,4BAA4B;EAC5B;;;;aAIW;EACX,mDAAmD;AACrD;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,cAAc;EACd,qDAAqD;EACrD,sDAAsD;EACtD,oDAAoD;EACpD;;GAEC;AACH;;AAEA;EACE,oBAAoB,EAAE;8DACsC;AAC9D;;AAEA;EACE,wEAAwE;EACxE,oBAAoB;AACtB;;AAEA;;;EAGE,cAAc;EACd,qBAAqB;EACrB,0BAA0B;AAC5B;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,cAAc;EACd,mCAAmC;EACnC,+BAA+B;EAC/B,iEAAiE;EACjE,kEAAkE;EAClE,kCAAkC;AACpC;;AAEA,mDAAmD;AACnD;;;EAGE,gEAAgE;AAClE;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,WAAW;EACX,UAAU;EACV,YAAY;EACZ,iEAAiE;AACnE;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;;8EAE8E;;AAE9E;EACE,cAAc;EACd,cAAc;EACd,mCAAmC;EACnC,+BAA+B;EAC/B,4DAA4D;EAC5D,kCAAkC;EAClC,kCAAkC;AACpC;;AAEA;EACE,8CAA8C;EAC9C,8CAA8C;EAC9C,UAAU;EACV,+CAA+C;AACjD;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,WAAW;EACX,oBAAoB;EACpB,gBAAgB;AAClB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,WAAW;EACX,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,WAAW;AACb;;AAEA;EACE,WAAW;EACX,cAAc;EACd,kBAAkB;EAClB,QAAQ;EACR,gEAAgE;EAChE,wBAAwB;AAC1B;;AAEA,gDAAgD;AAChD;;EAEE,YAAY;AACd\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Variables\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  --jp-private-menubar-height: 28px;\\n  --jp-private-menu-item-height: 24px;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| MenuBar\\n|----------------------------------------------------------------------------*/\\n\\n.lm-MenuBar {\\n  background: var(--jp-layout-color1);\\n  color: var(--jp-ui-font-color1);\\n  font-size: var(--jp-ui-font-size1);\\n  overflow: hidden;\\n}\\n\\n.lm-MenuBar:hover {\\n  overflow-x: auto;\\n}\\n\\n.lm-MenuBar-menu.jp-ThemedContainer {\\n  top: calc(-2 * var(--jp-border-width));\\n  scrollbar-width: none;\\n  -ms-overflow-style: none;\\n  overflow: auto;\\n  background:\\n    linear-gradient(var(--jp-layout-color0) 30%, rgba(0, 0, 0, 0)) center top,\\n    linear-gradient(rgba(0, 0, 0, 0), var(--jp-layout-color0) 70%) center bottom,\\n    radial-gradient(\\n        farthest-side at 50% 0,\\n        color-mix(\\n          in hsl,\\n          var(--jp-layout-color0) 50%,\\n          var(--jp-inverse-layout-color0) 30%\\n        ),\\n        rgba(0, 0, 0, 0)\\n      )\\n      center top,\\n    radial-gradient(\\n        farthest-side at 50% 100%,\\n        color-mix(\\n          in hsl,\\n          var(--jp-layout-color0) 50%,\\n          var(--jp-inverse-layout-color0) 30%\\n        ),\\n        rgba(0, 0, 0, 0)\\n      )\\n      center bottom;\\n  background-color: var(--jp-layout-color0);\\n  background-repeat: no-repeat;\\n  background-size:\\n    100% 40px,\\n    100% 40px,\\n    100% 14px,\\n    100% 14px;\\n  background-attachment: local, local, scroll, scroll;\\n}\\n\\n.lm-MenuBar-menu.jp-ThemedContainer::-webkit-scrollbar {\\n  display: none;\\n}\\n\\n.lm-MenuBar-item {\\n  padding: 0 8px;\\n  border-left: var(--jp-border-width) solid transparent;\\n  border-right: var(--jp-border-width) solid transparent;\\n  border-top: var(--jp-border-width) solid transparent;\\n  line-height: calc(\\n    var(--jp-private-menubar-height) - var(--jp-border-width) * 2\\n  );\\n}\\n\\n.lm-MenuBar-content:focus-visible {\\n  outline-offset: -3px; /* this value is a compromise between Firefox, Chrome,\\n    and Safari over this outline's visibility and discretion */\\n}\\n\\n.lm-MenuBar:focus-visible {\\n  outline: 1px solid var(--jp-accept-color-active, var(--jp-brand-color1));\\n  outline-offset: -1px;\\n}\\n\\n.lm-MenuBar-menu:focus-visible,\\n.lm-MenuBar-item:focus-visible,\\n.lm-Menu-item:focus-visible {\\n  outline: unset;\\n  outline-offset: unset;\\n  -moz-outline-radius: unset;\\n}\\n\\n.lm-MenuBar-item.lm-mod-active {\\n  background: var(--jp-layout-color2);\\n}\\n\\n.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active {\\n  z-index: 10001;\\n  background: var(--jp-layout-color0);\\n  color: var(--jp-ui-font-color0);\\n  border-left: var(--jp-border-width) solid var(--jp-border-color1);\\n  border-right: var(--jp-border-width) solid var(--jp-border-color1);\\n  box-shadow: var(--jp-elevation-z6);\\n}\\n\\n/* stylelint-disable-next-line selector-max-class */\\n.jp-LabShell[data-shell-mode='single-document']\\n  .lm-MenuBar.lm-mod-active\\n  .lm-MenuBar-item.lm-mod-active {\\n  border-top: var(--jp-border-width) solid var(--jp-border-color1);\\n}\\n\\n.lm-MenuBar-item.lm-mod-disabled {\\n  color: var(--jp-ui-font-color3);\\n}\\n\\n.lm-MenuBar-item.lm-type-separator {\\n  margin: 2px;\\n  padding: 0;\\n  border: none;\\n  border-left: var(--jp-border-width) solid var(--jp-border-color2);\\n}\\n\\n.lm-MenuBar-itemMnemonic {\\n  text-decoration: underline;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Menu\\n|----------------------------------------------------------------------------*/\\n\\n.lm-Menu {\\n  z-index: 10000;\\n  padding: 4px 0;\\n  background: var(--jp-layout-color0);\\n  color: var(--jp-ui-font-color0);\\n  border: var(--jp-border-width) solid var(--jp-border-color1);\\n  font-size: var(--jp-ui-font-size1);\\n  box-shadow: var(--jp-elevation-z6);\\n}\\n\\n.lm-Menu-item {\\n  min-height: var(--jp-private-menu-item-height);\\n  max-height: var(--jp-private-menu-item-height);\\n  padding: 0;\\n  line-height: var(--jp-private-menu-item-height);\\n}\\n\\n.lm-Menu-item.lm-mod-active {\\n  background: var(--jp-layout-color2);\\n}\\n\\n.lm-Menu-item.lm-mod-disabled {\\n  color: var(--jp-ui-font-color3);\\n}\\n\\n.lm-Menu-itemIcon {\\n  width: 21px;\\n  padding: 0 2px 0 4px;\\n  margin-top: -2px;\\n}\\n\\n.lm-Menu-itemLabel {\\n  padding: 0 32px 0 2px;\\n}\\n\\n.lm-Menu-itemMnemonic {\\n  text-decoration: underline;\\n}\\n\\n.lm-Menu-itemShortcut {\\n  padding: 0;\\n}\\n\\n.lm-Menu-itemSubmenuIcon {\\n  width: 18px;\\n  padding: 0 4px 0 0;\\n}\\n\\n.lm-Menu-item[data-type='separator'] > div {\\n  padding: 0;\\n  height: 9px;\\n}\\n\\n.lm-Menu-item[data-type='separator'] > div::after {\\n  content: '';\\n  display: block;\\n  position: relative;\\n  top: 4px;\\n  border-top: var(--jp-border-width) solid var(--jp-layout-color2);\\n  mix-blend-mode: multiply;\\n}\\n\\n/* gray out icon/caret for disabled menu items */\\n.lm-Menu-item.lm-mod-disabled > .lm-Menu-itemIcon,\\n.lm-Menu-item[data-type='submenu'].lm-mod-disabled > .lm-Menu-itemSubmenuIcon {\\n  opacity: 0.4;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*\n * Mozilla scrollbar styling\n */\n\n/* use standard opaque scrollbars for most nodes */\n[data-jp-theme-scrollbars='true'] {\n  scrollbar-color: rgb(var(--jp-scrollbar-thumb-color))\n    var(--jp-scrollbar-background-color);\n}\n\n/* for code nodes, use a transparent style of scrollbar. These selectors\n * will match lower in the tree, and so will override the above */\n[data-jp-theme-scrollbars='true'] .CodeMirror-hscrollbar,\n[data-jp-theme-scrollbars='true'] .CodeMirror-vscrollbar {\n  scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent;\n}\n\n/* tiny scrollbar */\n\n.jp-scrollbar-tiny {\n  scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent;\n  scrollbar-width: thin;\n}\n\n/* tiny scrollbar */\n\n.jp-scrollbar-tiny::-webkit-scrollbar,\n.jp-scrollbar-tiny::-webkit-scrollbar-corner {\n  background-color: transparent;\n  height: 4px;\n  width: 4px;\n}\n\n.jp-scrollbar-tiny::-webkit-scrollbar-thumb {\n  background: rgba(var(--jp-scrollbar-thumb-color), 0.5);\n}\n\n.jp-scrollbar-tiny::-webkit-scrollbar-track:horizontal {\n  border-left: 0 solid transparent;\n  border-right: 0 solid transparent;\n}\n\n.jp-scrollbar-tiny::-webkit-scrollbar-track:vertical {\n  border-top: 0 solid transparent;\n  border-bottom: 0 solid transparent;\n}\n\n/*\n * Lumino\n */\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n  min-height: 16px;\n  max-height: 16px;\n  min-width: 45px;\n  border-top: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n  min-width: 16px;\n  max-width: 16px;\n  min-height: 45px;\n  border-left: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar-button {\n  background-color: #f0f0f0;\n  background-position: center center;\n  min-height: 15px;\n  max-height: 15px;\n  min-width: 15px;\n  max-width: 15px;\n}\n\n.lm-ScrollBar-button:hover {\n  background-color: #dadada;\n}\n\n.lm-ScrollBar-button.lm-mod-active {\n  background-color: #cdcdcd;\n}\n\n.lm-ScrollBar-track {\n  background: #f0f0f0;\n}\n\n.lm-ScrollBar-thumb {\n  background: #cdcdcd;\n}\n\n.lm-ScrollBar-thumb:hover {\n  background: #bababa;\n}\n\n.lm-ScrollBar-thumb.lm-mod-active {\n  background: #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {\n  height: 100%;\n  min-width: 15px;\n  border-left: 1px solid #a0a0a0;\n  border-right: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {\n  width: 100%;\n  min-height: 15px;\n  border-top: 1px solid #a0a0a0;\n  border-bottom: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n  .lm-ScrollBar-button[data-action='decrement'] {\n  background-image: var(--jp-icon-caret-left);\n  background-size: 17px;\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n  .lm-ScrollBar-button[data-action='increment'] {\n  background-image: var(--jp-icon-caret-right);\n  background-size: 17px;\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n  .lm-ScrollBar-button[data-action='decrement'] {\n  background-image: var(--jp-icon-caret-up);\n  background-size: 17px;\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n  .lm-ScrollBar-button[data-action='increment'] {\n  background-image: var(--jp-icon-caret-down);\n  background-size: 17px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/application/style/scrollbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;EAEE;;AAEF,kDAAkD;AAClD;EACE;wCACsC;AACxC;;AAEA;iEACiE;AACjE;;EAEE,uEAAuE;AACzE;;AAEA,mBAAmB;;AAEnB;EACE,uEAAuE;EACvE,qBAAqB;AACvB;;AAEA,mBAAmB;;AAEnB;;EAEE,6BAA6B;EAC7B,WAAW;EACX,UAAU;AACZ;;AAEA;EACE,sDAAsD;AACxD;;AAEA;EACE,gCAAgC;EAChC,iCAAiC;AACnC;;AAEA;EACE,+BAA+B;EAC/B,kCAAkC;AACpC;;AAEA;;EAEE;;AAEF;EACE,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,8BAA8B;AAChC;;AAEA;EACE,yBAAyB;EACzB,kCAAkC;EAClC,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,8BAA8B;EAC9B,+BAA+B;AACjC;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,6BAA6B;EAC7B,gCAAgC;AAClC;;AAEA;;EAEE,2CAA2C;EAC3C,qBAAqB;AACvB;;AAEA;;EAEE,4CAA4C;EAC5C,qBAAqB;AACvB;;AAEA;;EAEE,yCAAyC;EACzC,qBAAqB;AACvB;;AAEA;;EAEE,2CAA2C;EAC3C,qBAAqB;AACvB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*\\n * Mozilla scrollbar styling\\n */\\n\\n/* use standard opaque scrollbars for most nodes */\\n[data-jp-theme-scrollbars='true'] {\\n  scrollbar-color: rgb(var(--jp-scrollbar-thumb-color))\\n    var(--jp-scrollbar-background-color);\\n}\\n\\n/* for code nodes, use a transparent style of scrollbar. These selectors\\n * will match lower in the tree, and so will override the above */\\n[data-jp-theme-scrollbars='true'] .CodeMirror-hscrollbar,\\n[data-jp-theme-scrollbars='true'] .CodeMirror-vscrollbar {\\n  scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent;\\n}\\n\\n/* tiny scrollbar */\\n\\n.jp-scrollbar-tiny {\\n  scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent;\\n  scrollbar-width: thin;\\n}\\n\\n/* tiny scrollbar */\\n\\n.jp-scrollbar-tiny::-webkit-scrollbar,\\n.jp-scrollbar-tiny::-webkit-scrollbar-corner {\\n  background-color: transparent;\\n  height: 4px;\\n  width: 4px;\\n}\\n\\n.jp-scrollbar-tiny::-webkit-scrollbar-thumb {\\n  background: rgba(var(--jp-scrollbar-thumb-color), 0.5);\\n}\\n\\n.jp-scrollbar-tiny::-webkit-scrollbar-track:horizontal {\\n  border-left: 0 solid transparent;\\n  border-right: 0 solid transparent;\\n}\\n\\n.jp-scrollbar-tiny::-webkit-scrollbar-track:vertical {\\n  border-top: 0 solid transparent;\\n  border-bottom: 0 solid transparent;\\n}\\n\\n/*\\n * Lumino\\n */\\n\\n.lm-ScrollBar[data-orientation='horizontal'] {\\n  min-height: 16px;\\n  max-height: 16px;\\n  min-width: 45px;\\n  border-top: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical'] {\\n  min-width: 16px;\\n  max-width: 16px;\\n  min-height: 45px;\\n  border-left: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar-button {\\n  background-color: #f0f0f0;\\n  background-position: center center;\\n  min-height: 15px;\\n  max-height: 15px;\\n  min-width: 15px;\\n  max-width: 15px;\\n}\\n\\n.lm-ScrollBar-button:hover {\\n  background-color: #dadada;\\n}\\n\\n.lm-ScrollBar-button.lm-mod-active {\\n  background-color: #cdcdcd;\\n}\\n\\n.lm-ScrollBar-track {\\n  background: #f0f0f0;\\n}\\n\\n.lm-ScrollBar-thumb {\\n  background: #cdcdcd;\\n}\\n\\n.lm-ScrollBar-thumb:hover {\\n  background: #bababa;\\n}\\n\\n.lm-ScrollBar-thumb.lm-mod-active {\\n  background: #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {\\n  height: 100%;\\n  min-width: 15px;\\n  border-left: 1px solid #a0a0a0;\\n  border-right: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {\\n  width: 100%;\\n  min-height: 15px;\\n  border-top: 1px solid #a0a0a0;\\n  border-bottom: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal']\\n  .lm-ScrollBar-button[data-action='decrement'] {\\n  background-image: var(--jp-icon-caret-left);\\n  background-size: 17px;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal']\\n  .lm-ScrollBar-button[data-action='increment'] {\\n  background-image: var(--jp-icon-caret-right);\\n  background-size: 17px;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical']\\n  .lm-ScrollBar-button[data-action='decrement'] {\\n  background-image: var(--jp-icon-caret-up);\\n  background-size: 17px;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical']\\n  .lm-ScrollBar-button[data-action='increment'] {\\n  background-image: var(--jp-icon-caret-down);\\n  background-size: 17px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Variables\n|----------------------------------------------------------------------------*/\n\n:root {\n  --jp-private-sidebar-tab-width: 32px;\n}\n\n/*-----------------------------------------------------------------------------\n| SideBar\n|----------------------------------------------------------------------------*/\n\n.jp-SideBar {\n  /* This is needed so that all font sizing of children done in ems is\n   * relative to this base size */\n  font-size: var(--jp-ui-font-size1);\n}\n\n.jp-SideBar.lm-TabBar,\n#jp-down-stack .lm-TabBar {\n  color: var(--jp-ui-font-color2);\n  background: var(--jp-layout-color2);\n  font-size: var(--jp-ui-font-size1);\n  overflow: visible;\n}\n\n.jp-SideBar.lm-TabBar {\n  min-width: calc(var(--jp-private-sidebar-tab-width) + var(--jp-border-width));\n  max-width: calc(var(--jp-private-sidebar-tab-width) + var(--jp-border-width));\n  display: block;\n}\n\n.jp-SideBar .lm-TabBar-content {\n  margin: 0;\n  padding: 0;\n  display: flex;\n  align-items: stretch;\n  list-style-type: none;\n  height: var(--jp-private-sidebar-tab-width);\n}\n\n.jp-SideBar .lm-TabBar-tab {\n  padding: 16px 0;\n  border: none;\n  overflow: visible;\n  flex-direction: column;\n  position: relative;\n}\n\n.jp-SideBar .lm-TabBar-tab:focus-visible {\n  /* --accent-fill-focus is computed by the jp toolkit to ensure accessibility */\n  outline: 2px solid var(--accent-fill-focus, var(--jp-brand-color1));\n  outline-offset: -3px;\n}\n\n.jp-SideBar .lm-TabBar-tab.lm-mod-current::after {\n  /* Internal border override pseudo-element */\n  position: absolute;\n  content: '';\n  bottom: 0;\n  right: 0;\n  top: 0;\n  left: 0;\n  border: var(--jp-border-width) solid var(--jp-layout-color1);\n}\n\n.jp-SideBar .lm-TabBar-tab:not(.lm-mod-current),\n#jp-down-stack .lm-TabBar-tab:not(.lm-mod-current) {\n  background: var(--jp-layout-color2);\n}\n\n.jp-SideBar .lm-TabBar-tabIcon.jp-SideBar-tabIcon {\n  min-width: 20px;\n  min-height: 20px;\n  background-size: 20px;\n  display: inline-block;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n}\n\n.jp-SideBar .lm-TabBar-tabLabel {\n  line-height: var(--jp-private-sidebar-tab-width);\n}\n\n.jp-SideBar .lm-TabBar-tab:hover:not(.lm-mod-current),\n#jp-down-stack .lm-TabBar-tab:hover:not(.lm-mod-current) {\n  background: var(--jp-layout-color1);\n}\n\n.jp-SideBar.lm-TabBar::after {\n  /* Internal border pseudo-element */\n  position: absolute;\n  content: '';\n  bottom: 0;\n  right: 0;\n  top: 0;\n  left: 0;\n  pointer-events: none;\n}\n\n/* Borders */\n\n/* stylelint-disable selector-max-class */\n\n.jp-SideBar.lm-TabBar .lm-TabBar-tab + .lm-TabBar-tab {\n  border-top: var(--jp-border-width) solid var(--jp-layout-color2);\n}\n\n.jp-SideBar.lm-TabBar .lm-TabBar-tab.lm-mod-current + .lm-TabBar-tab {\n  border-top: var(--jp-border-width) solid var(--jp-border-color0);\n}\n\n.jp-SideBar.lm-TabBar .lm-TabBar-tab + .lm-TabBar-tab.lm-mod-current {\n  border-top: var(--jp-border-width) solid var(--jp-border-color0);\n}\n\n.jp-SideBar.lm-TabBar .lm-TabBar-tab.lm-mod-current:last-child {\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color0);\n}\n\n.jp-SideBar.lm-TabBar .lm-TabBar-tabLabel {\n  writing-mode: vertical-rl;\n}\n\n/* Left */\n\n/* Borders */\n\n.jp-SideBar.lm-TabBar.jp-mod-left .lm-TabBar-content {\n  /* Internal border spacing */\n  margin-right: var(--jp-border-width);\n}\n\n.jp-SideBar.lm-TabBar.jp-mod-left .lm-TabBar-tab.lm-mod-current::after {\n  /* Internal border override */\n  right: calc(-1 * var(--jp-border-width));\n}\n\n.jp-SideBar.lm-TabBar.jp-mod-left::after {\n  /* Internal border */\n  border-right: var(--jp-border-width) solid var(--jp-border-color0);\n}\n\n/* Transforms */\n\n.jp-SideBar.lm-TabBar.jp-mod-left .lm-TabBar-tabLabel {\n  transform: rotate(180deg);\n}\n\n/* Right */\n\n/* Borders */\n\n.jp-SideBar.lm-TabBar.jp-mod-right .lm-TabBar-content {\n  /* Internal border spacing */\n  margin-left: var(--jp-border-width);\n}\n\n.jp-SideBar.lm-TabBar.jp-mod-right .lm-TabBar-tab.lm-mod-current::after {\n  /* Internal border override */\n  left: calc(-1 * var(--jp-border-width));\n}\n\n.jp-SideBar.lm-TabBar.jp-mod-right::after {\n  /* Internal border */\n  border-left: var(--jp-border-width) solid var(--jp-border-color0);\n}\n\n/* Down */\n\n/* Borders */\n\n#jp-down-stack > .lm-TabBar {\n  border-top: var(--jp-border-width) solid var(--jp-border-color0);\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color0);\n}\n\n#jp-down-stack > .lm-TabBar .lm-TabBar-tab {\n  border-left: none;\n  border-right: none;\n}\n\n#jp-down-stack > .lm-TabBar .lm-TabBar-tab.lm-mod-current {\n  border: var(--jp-border-width) solid var(--jp-border-color1);\n  border-bottom: none;\n  transform: translateY(var(--jp-border-width));\n}\n\n#jp-down-stack > .lm-TabBar .lm-TabBar-tab.lm-mod-current:first-child {\n  border: none;\n  border-right: var(--jp-border-width) solid var(--jp-border-color1);\n}\n\n/* stylelint-enable selector-max-class */\n\n/* Stack panels */\n\n#jp-left-stack > .lm-Widget,\n#jp-right-stack > .lm-Widget {\n  min-width: var(--jp-sidebar-min-width);\n  background-color: var(--jp-layout-color1);\n}\n\n#jp-right-stack {\n  border-left: var(--jp-border-width) solid var(--jp-border-color1);\n}\n\n#jp-left-stack {\n  border-right: var(--jp-border-width) solid var(--jp-border-color1);\n}\n\n#jp-down-stack > .lm-TabPanel-stackedPanel {\n  border: none;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/application/style/sidepanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E;EACE,oCAAoC;AACtC;;AAEA;;8EAE8E;;AAE9E;EACE;iCAC+B;EAC/B,kCAAkC;AACpC;;AAEA;;EAEE,+BAA+B;EAC/B,mCAAmC;EACnC,kCAAkC;EAClC,iBAAiB;AACnB;;AAEA;EACE,6EAA6E;EAC7E,6EAA6E;EAC7E,cAAc;AAChB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,oBAAoB;EACpB,qBAAqB;EACrB,2CAA2C;AAC7C;;AAEA;EACE,eAAe;EACf,YAAY;EACZ,iBAAiB;EACjB,sBAAsB;EACtB,kBAAkB;AACpB;;AAEA;EACE,8EAA8E;EAC9E,mEAAmE;EACnE,oBAAoB;AACtB;;AAEA;EACE,4CAA4C;EAC5C,kBAAkB;EAClB,WAAW;EACX,SAAS;EACT,QAAQ;EACR,MAAM;EACN,OAAO;EACP,4DAA4D;AAC9D;;AAEA;;EAEE,mCAAmC;AACrC;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,qBAAqB;EACrB,qBAAqB;EACrB,sBAAsB;EACtB,4BAA4B;EAC5B,2BAA2B;AAC7B;;AAEA;EACE,gDAAgD;AAClD;;AAEA;;EAEE,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;EACnC,kBAAkB;EAClB,WAAW;EACX,SAAS;EACT,QAAQ;EACR,MAAM;EACN,OAAO;EACP,oBAAoB;AACtB;;AAEA,YAAY;;AAEZ,yCAAyC;;AAEzC;EACE,gEAAgE;AAClE;;AAEA;EACE,gEAAgE;AAClE;;AAEA;EACE,gEAAgE;AAClE;;AAEA;EACE,mEAAmE;AACrE;;AAEA;EACE,yBAAyB;AAC3B;;AAEA,SAAS;;AAET,YAAY;;AAEZ;EACE,4BAA4B;EAC5B,oCAAoC;AACtC;;AAEA;EACE,6BAA6B;EAC7B,wCAAwC;AAC1C;;AAEA;EACE,oBAAoB;EACpB,kEAAkE;AACpE;;AAEA,eAAe;;AAEf;EACE,yBAAyB;AAC3B;;AAEA,UAAU;;AAEV,YAAY;;AAEZ;EACE,4BAA4B;EAC5B,mCAAmC;AACrC;;AAEA;EACE,6BAA6B;EAC7B,uCAAuC;AACzC;;AAEA;EACE,oBAAoB;EACpB,iEAAiE;AACnE;;AAEA,SAAS;;AAET,YAAY;;AAEZ;EACE,gEAAgE;EAChE,mEAAmE;AACrE;;AAEA;EACE,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,4DAA4D;EAC5D,mBAAmB;EACnB,6CAA6C;AAC/C;;AAEA;EACE,YAAY;EACZ,kEAAkE;AACpE;;AAEA,wCAAwC;;AAExC,iBAAiB;;AAEjB;;EAEE,sCAAsC;EACtC,yCAAyC;AAC3C;;AAEA;EACE,iEAAiE;AACnE;;AAEA;EACE,kEAAkE;AACpE;;AAEA;EACE,YAAY;AACd\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Variables\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  --jp-private-sidebar-tab-width: 32px;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| SideBar\\n|----------------------------------------------------------------------------*/\\n\\n.jp-SideBar {\\n  /* This is needed so that all font sizing of children done in ems is\\n   * relative to this base size */\\n  font-size: var(--jp-ui-font-size1);\\n}\\n\\n.jp-SideBar.lm-TabBar,\\n#jp-down-stack .lm-TabBar {\\n  color: var(--jp-ui-font-color2);\\n  background: var(--jp-layout-color2);\\n  font-size: var(--jp-ui-font-size1);\\n  overflow: visible;\\n}\\n\\n.jp-SideBar.lm-TabBar {\\n  min-width: calc(var(--jp-private-sidebar-tab-width) + var(--jp-border-width));\\n  max-width: calc(var(--jp-private-sidebar-tab-width) + var(--jp-border-width));\\n  display: block;\\n}\\n\\n.jp-SideBar .lm-TabBar-content {\\n  margin: 0;\\n  padding: 0;\\n  display: flex;\\n  align-items: stretch;\\n  list-style-type: none;\\n  height: var(--jp-private-sidebar-tab-width);\\n}\\n\\n.jp-SideBar .lm-TabBar-tab {\\n  padding: 16px 0;\\n  border: none;\\n  overflow: visible;\\n  flex-direction: column;\\n  position: relative;\\n}\\n\\n.jp-SideBar .lm-TabBar-tab:focus-visible {\\n  /* --accent-fill-focus is computed by the jp toolkit to ensure accessibility */\\n  outline: 2px solid var(--accent-fill-focus, var(--jp-brand-color1));\\n  outline-offset: -3px;\\n}\\n\\n.jp-SideBar .lm-TabBar-tab.lm-mod-current::after {\\n  /* Internal border override pseudo-element */\\n  position: absolute;\\n  content: '';\\n  bottom: 0;\\n  right: 0;\\n  top: 0;\\n  left: 0;\\n  border: var(--jp-border-width) solid var(--jp-layout-color1);\\n}\\n\\n.jp-SideBar .lm-TabBar-tab:not(.lm-mod-current),\\n#jp-down-stack .lm-TabBar-tab:not(.lm-mod-current) {\\n  background: var(--jp-layout-color2);\\n}\\n\\n.jp-SideBar .lm-TabBar-tabIcon.jp-SideBar-tabIcon {\\n  min-width: 20px;\\n  min-height: 20px;\\n  background-size: 20px;\\n  display: inline-block;\\n  vertical-align: middle;\\n  background-repeat: no-repeat;\\n  background-position: center;\\n}\\n\\n.jp-SideBar .lm-TabBar-tabLabel {\\n  line-height: var(--jp-private-sidebar-tab-width);\\n}\\n\\n.jp-SideBar .lm-TabBar-tab:hover:not(.lm-mod-current),\\n#jp-down-stack .lm-TabBar-tab:hover:not(.lm-mod-current) {\\n  background: var(--jp-layout-color1);\\n}\\n\\n.jp-SideBar.lm-TabBar::after {\\n  /* Internal border pseudo-element */\\n  position: absolute;\\n  content: '';\\n  bottom: 0;\\n  right: 0;\\n  top: 0;\\n  left: 0;\\n  pointer-events: none;\\n}\\n\\n/* Borders */\\n\\n/* stylelint-disable selector-max-class */\\n\\n.jp-SideBar.lm-TabBar .lm-TabBar-tab + .lm-TabBar-tab {\\n  border-top: var(--jp-border-width) solid var(--jp-layout-color2);\\n}\\n\\n.jp-SideBar.lm-TabBar .lm-TabBar-tab.lm-mod-current + .lm-TabBar-tab {\\n  border-top: var(--jp-border-width) solid var(--jp-border-color0);\\n}\\n\\n.jp-SideBar.lm-TabBar .lm-TabBar-tab + .lm-TabBar-tab.lm-mod-current {\\n  border-top: var(--jp-border-width) solid var(--jp-border-color0);\\n}\\n\\n.jp-SideBar.lm-TabBar .lm-TabBar-tab.lm-mod-current:last-child {\\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color0);\\n}\\n\\n.jp-SideBar.lm-TabBar .lm-TabBar-tabLabel {\\n  writing-mode: vertical-rl;\\n}\\n\\n/* Left */\\n\\n/* Borders */\\n\\n.jp-SideBar.lm-TabBar.jp-mod-left .lm-TabBar-content {\\n  /* Internal border spacing */\\n  margin-right: var(--jp-border-width);\\n}\\n\\n.jp-SideBar.lm-TabBar.jp-mod-left .lm-TabBar-tab.lm-mod-current::after {\\n  /* Internal border override */\\n  right: calc(-1 * var(--jp-border-width));\\n}\\n\\n.jp-SideBar.lm-TabBar.jp-mod-left::after {\\n  /* Internal border */\\n  border-right: var(--jp-border-width) solid var(--jp-border-color0);\\n}\\n\\n/* Transforms */\\n\\n.jp-SideBar.lm-TabBar.jp-mod-left .lm-TabBar-tabLabel {\\n  transform: rotate(180deg);\\n}\\n\\n/* Right */\\n\\n/* Borders */\\n\\n.jp-SideBar.lm-TabBar.jp-mod-right .lm-TabBar-content {\\n  /* Internal border spacing */\\n  margin-left: var(--jp-border-width);\\n}\\n\\n.jp-SideBar.lm-TabBar.jp-mod-right .lm-TabBar-tab.lm-mod-current::after {\\n  /* Internal border override */\\n  left: calc(-1 * var(--jp-border-width));\\n}\\n\\n.jp-SideBar.lm-TabBar.jp-mod-right::after {\\n  /* Internal border */\\n  border-left: var(--jp-border-width) solid var(--jp-border-color0);\\n}\\n\\n/* Down */\\n\\n/* Borders */\\n\\n#jp-down-stack > .lm-TabBar {\\n  border-top: var(--jp-border-width) solid var(--jp-border-color0);\\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color0);\\n}\\n\\n#jp-down-stack > .lm-TabBar .lm-TabBar-tab {\\n  border-left: none;\\n  border-right: none;\\n}\\n\\n#jp-down-stack > .lm-TabBar .lm-TabBar-tab.lm-mod-current {\\n  border: var(--jp-border-width) solid var(--jp-border-color1);\\n  border-bottom: none;\\n  transform: translateY(var(--jp-border-width));\\n}\\n\\n#jp-down-stack > .lm-TabBar .lm-TabBar-tab.lm-mod-current:first-child {\\n  border: none;\\n  border-right: var(--jp-border-width) solid var(--jp-border-color1);\\n}\\n\\n/* stylelint-enable selector-max-class */\\n\\n/* Stack panels */\\n\\n#jp-left-stack > .lm-Widget,\\n#jp-right-stack > .lm-Widget {\\n  min-width: var(--jp-sidebar-min-width);\\n  background-color: var(--jp-layout-color1);\\n}\\n\\n#jp-right-stack {\\n  border-left: var(--jp-border-width) solid var(--jp-border-color1);\\n}\\n\\n#jp-left-stack {\\n  border-right: var(--jp-border-width) solid var(--jp-border-color1);\\n}\\n\\n#jp-down-stack > .lm-TabPanel-stackedPanel {\\n  border: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n|\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-skiplink-wrapper {\n  overflow: visible;\n\n  /* override strict containment added via Lumino PR\n   [#506](https://github.com/jupyterlab/lumino/pull/506) */\n  contain: size style !important;\n}\n\n.jp-skiplink {\n  position: absolute;\n  top: -100em;\n}\n\n.jp-skiplink:focus-within {\n  position: absolute;\n  z-index: 10000;\n  top: 0;\n  left: 46%;\n  margin: 0 auto;\n  padding: 1em;\n  width: 15%;\n  box-shadow: var(--jp-elevation-z4);\n  border-radius: 4px;\n  background: var(--jp-layout-color0);\n  text-align: center;\n}\n\n.jp-skiplink:focus-within a {\n  text-decoration: underline;\n  color: var(--jp-content-link-color);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/application/style/skiplink.css\"],\"names\":[],\"mappings\":\"AAAA;;;;8EAI8E;;AAE9E;EACE,iBAAiB;;EAEjB;0DACwD;EACxD,8BAA8B;AAChC;;AAEA;EACE,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,kBAAkB;EAClB,cAAc;EACd,MAAM;EACN,SAAS;EACT,cAAc;EACd,YAAY;EACZ,UAAU;EACV,kCAAkC;EAClC,kBAAkB;EAClB,mCAAmC;EACnC,kBAAkB;AACpB;;AAEA;EACE,0BAA0B;EAC1B,mCAAmC;AACrC\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n|\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-skiplink-wrapper {\\n  overflow: visible;\\n\\n  /* override strict containment added via Lumino PR\\n   [#506](https://github.com/jupyterlab/lumino/pull/506) */\\n  contain: size style !important;\\n}\\n\\n.jp-skiplink {\\n  position: absolute;\\n  top: -100em;\\n}\\n\\n.jp-skiplink:focus-within {\\n  position: absolute;\\n  z-index: 10000;\\n  top: 0;\\n  left: 46%;\\n  margin: 0 auto;\\n  padding: 1em;\\n  width: 15%;\\n  box-shadow: var(--jp-elevation-z4);\\n  border-radius: 4px;\\n  background: var(--jp-layout-color0);\\n  text-align: center;\\n}\\n\\n.jp-skiplink:focus-within a {\\n  text-decoration: underline;\\n  color: var(--jp-content-link-color);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Variables\n|----------------------------------------------------------------------------*/\n\n:root {\n  /* These need to be root because tabs get attached to the body during dragging. */\n  --jp-private-horizontal-tab-height: 24px;\n  --jp-private-horizontal-tab-width: 216px;\n  --jp-private-horizontal-tab-active-top-border: 2px;\n}\n\n/*-----------------------------------------------------------------------------\n| Tabs in the dock panel\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel-tabBar,\n.lm-TabPanel-tabBar {\n  overflow: visible;\n  color: var(--jp-ui-font-color1);\n  font-size: var(--jp-ui-font-size1);\n}\n\n.lm-DockPanel-tabBar[data-orientation='horizontal'],\n.lm-TabPanel-tabBar[data-orientation='horizontal'] {\n  min-height: calc(\n    var(--jp-private-horizontal-tab-height) + 2 * var(--jp-border-width)\n  );\n}\n\n.lm-DockPanel-tabBar[data-orientation='vertical'] {\n  min-width: 80px;\n}\n\n.lm-DockPanel-tabBar > .lm-TabBar-content,\n.lm-TabPanel-tabBar > .lm-TabBar-content {\n  align-items: flex-end;\n  min-width: 0;\n  min-height: 0;\n}\n\n.lm-DockPanel-tabBar .lm-TabBar-tab,\n.lm-TabPanel-tabBar .lm-TabBar-tab {\n  flex: 0 1 var(--jp-private-horizontal-tab-width);\n  align-items: center;\n  min-height: calc(\n    var(--jp-private-horizontal-tab-height) + 2 * var(--jp-border-width)\n  );\n  min-width: 0;\n  margin-left: calc(-1 * var(--jp-border-width));\n  line-height: var(--jp-private-horizontal-tab-height);\n  padding: 0 8px;\n  background: var(--jp-layout-color2);\n  border: var(--jp-border-width) solid var(--jp-border-color1);\n  border-bottom: none;\n  position: relative;\n}\n\n.lm-DockPanel-tabBar .lm-TabBar-tab:focus-visible,\n.lm-DockPanel-tabBar .lm-TabBar-addButton:focus-visible,\n.lm-TabPanel-tabBar .lm-TabBar-tab:focus-visible {\n  border: 1px solid var(--accent-fill-focus);\n  border-bottom: none;\n\n  /* Thicken the border by 1px within the element border */\n  box-shadow: 0 0 0 1px inset var(--accent-fill-focus);\n  outline: none;\n}\n\n.lm-DockPanel-tabBar .lm-TabBar-tab:not(.lm-mod-current):focus-visible::after,\n.lm-TabPanel-tabBar .lm-TabBar-tab:not(.lm-mod-current):focus-visible::after {\n  border-bottom-color: var(--accent-fill-focus);\n}\n\n.lm-DockPanel-tabBar .lm-TabBar-tab:hover:not(.lm-mod-current),\n.lm-TabPanel-tabBar .lm-TabBar-tab:hover:not(.lm-mod-current) {\n  background: var(--jp-layout-color1);\n  color: var(--jp-ui-font-color1);\n}\n\n.lm-DockPanel-tabBar .lm-TabBar-tab:not(.lm-mod-current)::after,\n.lm-DockPanel-tabBar .lm-TabBar-addButton::after {\n  position: absolute;\n  content: '';\n  bottom: 0;\n  left: calc(-1 * var(--jp-border-width));\n  width: calc(100% + 2 * var(--jp-border-width));\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color1);\n}\n\n.lm-DockPanel-tabBar .lm-TabBar-tab:first-child,\n.lm-TabPanel-tabBar .lm-TabBar-tab:first-child {\n  margin-left: 0;\n}\n\n/* This is a current tab of a tab bar in the dock panel: each tab bar has 1. */\n.lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-current {\n  background: var(--jp-layout-color1);\n  color: var(--jp-ui-font-color1);\n}\n\n.lm-TabPanel-tabBar .lm-TabBar-tab.lm-mod-current {\n  background: var(--jp-layout-color1);\n  color: var(--jp-ui-font-color1);\n}\n\n/* This is the main application level current tab: only 1 exists. */\n.lm-DockPanel-tabBar .lm-TabBar-tab.jp-mod-current::before {\n  position: absolute;\n  top: calc(-1 * var(--jp-border-width) + 1px);\n  left: calc(-1 * var(--jp-border-width));\n  content: '';\n  height: var(--jp-private-horizontal-tab-active-top-border);\n  width: calc(100% + 2 * var(--jp-border-width));\n  background: var(--jp-brand-color1);\n}\n\n/* This is the left tab bar current tab: only 1 exists. */\n.lm-TabBar-tab.lm-mod-current {\n  background: var(--jp-layout-color1);\n  color: var(--jp-ui-font-color1);\n}\n\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-left .lm-TabBar-tab,\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-right .lm-TabBar-tab {\n  flex: 0 1 40px;\n  margin-top: -1px;\n  line-height: 40px;\n}\n\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-left .lm-TabBar-tab {\n  border-right: none;\n}\n\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-right .lm-TabBar-tab {\n  border-left: none;\n}\n\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-left .lm-TabBar-tab:first-child,\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-right .lm-TabBar-tab:first-child {\n  margin-top: 0;\n}\n\n/* stylelint-disable selector-max-class */\n\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-left .lm-TabBar-tab.lm-mod-current,\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-right .lm-TabBar-tab.lm-mod-current {\n  min-width: 80px;\n  max-width: 80px;\n}\n\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-right .lm-TabBar-tab.lm-mod-current {\n  transform: translateX(-1px);\n}\n\n.lm-DockPanel-tabBar .lm-TabBar-tab .lm-TabBar-tabIcon,\n.lm-TabBar-tab.lm-mod-drag-image .lm-TabBar-tabIcon,\n.lm-TabPanel-tabBar .lm-TabBar-tab .lm-TabBar-tabIcon {\n  width: 14px;\n  background-position: left center;\n  background-repeat: no-repeat;\n  background-size: 14px;\n  margin-right: 4px;\n}\n\n/* stylelint-enable selector-max-class */\n\n.lm-TabBar-tab.lm-mod-drag-image {\n  background: var(--jp-layout-color1);\n  color: var(--jp-ui-font-color1);\n  border: var(--jp-border-width) solid var(--jp-border-color1);\n  border-top: var(--jp-border-width) solid var(--jp-brand-color1);\n  box-shadow: var(--jp-elevation-z4);\n  font-size: var(--jp-ui-font-size1);\n  line-height: var(--jp-private-horizontal-tab-height);\n  min-height: var(--jp-private-horizontal-tab-height);\n  min-width: var(--jp-private-horizontal-tab-width);\n  padding: 0 10px;\n  transform: translateX(-40%) translateY(-58%);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/application/style/tabs.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E;EACE,iFAAiF;EACjF,wCAAwC;EACxC,wCAAwC;EACxC,kDAAkD;AACpD;;AAEA;;8EAE8E;;AAE9E;;EAEE,iBAAiB;EACjB,+BAA+B;EAC/B,kCAAkC;AACpC;;AAEA;;EAEE;;GAEC;AACH;;AAEA;EACE,eAAe;AACjB;;AAEA;;EAEE,qBAAqB;EACrB,YAAY;EACZ,aAAa;AACf;;AAEA;;EAEE,gDAAgD;EAChD,mBAAmB;EACnB;;GAEC;EACD,YAAY;EACZ,8CAA8C;EAC9C,oDAAoD;EACpD,cAAc;EACd,mCAAmC;EACnC,4DAA4D;EAC5D,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;;;EAGE,0CAA0C;EAC1C,mBAAmB;;EAEnB,wDAAwD;EACxD,oDAAoD;EACpD,aAAa;AACf;;AAEA;;EAEE,6CAA6C;AAC/C;;AAEA;;EAEE,mCAAmC;EACnC,+BAA+B;AACjC;;AAEA;;EAEE,kBAAkB;EAClB,WAAW;EACX,SAAS;EACT,uCAAuC;EACvC,8CAA8C;EAC9C,mEAAmE;AACrE;;AAEA;;EAEE,cAAc;AAChB;;AAEA,8EAA8E;AAC9E;EACE,mCAAmC;EACnC,+BAA+B;AACjC;;AAEA;EACE,mCAAmC;EACnC,+BAA+B;AACjC;;AAEA,mEAAmE;AACnE;EACE,kBAAkB;EAClB,4CAA4C;EAC5C,uCAAuC;EACvC,WAAW;EACX,0DAA0D;EAC1D,8CAA8C;EAC9C,kCAAkC;AACpC;;AAEA,yDAAyD;AACzD;EACE,mCAAmC;EACnC,+BAA+B;AACjC;;AAEA;;EAEE,cAAc;EACd,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;EAEE,aAAa;AACf;;AAEA,yCAAyC;;AAEzC;;EAEE,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;;;EAGE,WAAW;EACX,gCAAgC;EAChC,4BAA4B;EAC5B,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA,wCAAwC;;AAExC;EACE,mCAAmC;EACnC,+BAA+B;EAC/B,4DAA4D;EAC5D,+DAA+D;EAC/D,kCAAkC;EAClC,kCAAkC;EAClC,oDAAoD;EACpD,mDAAmD;EACnD,iDAAiD;EACjD,eAAe;EACf,4CAA4C;AAC9C\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Variables\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  /* These need to be root because tabs get attached to the body during dragging. */\\n  --jp-private-horizontal-tab-height: 24px;\\n  --jp-private-horizontal-tab-width: 216px;\\n  --jp-private-horizontal-tab-active-top-border: 2px;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Tabs in the dock panel\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DockPanel-tabBar,\\n.lm-TabPanel-tabBar {\\n  overflow: visible;\\n  color: var(--jp-ui-font-color1);\\n  font-size: var(--jp-ui-font-size1);\\n}\\n\\n.lm-DockPanel-tabBar[data-orientation='horizontal'],\\n.lm-TabPanel-tabBar[data-orientation='horizontal'] {\\n  min-height: calc(\\n    var(--jp-private-horizontal-tab-height) + 2 * var(--jp-border-width)\\n  );\\n}\\n\\n.lm-DockPanel-tabBar[data-orientation='vertical'] {\\n  min-width: 80px;\\n}\\n\\n.lm-DockPanel-tabBar > .lm-TabBar-content,\\n.lm-TabPanel-tabBar > .lm-TabBar-content {\\n  align-items: flex-end;\\n  min-width: 0;\\n  min-height: 0;\\n}\\n\\n.lm-DockPanel-tabBar .lm-TabBar-tab,\\n.lm-TabPanel-tabBar .lm-TabBar-tab {\\n  flex: 0 1 var(--jp-private-horizontal-tab-width);\\n  align-items: center;\\n  min-height: calc(\\n    var(--jp-private-horizontal-tab-height) + 2 * var(--jp-border-width)\\n  );\\n  min-width: 0;\\n  margin-left: calc(-1 * var(--jp-border-width));\\n  line-height: var(--jp-private-horizontal-tab-height);\\n  padding: 0 8px;\\n  background: var(--jp-layout-color2);\\n  border: var(--jp-border-width) solid var(--jp-border-color1);\\n  border-bottom: none;\\n  position: relative;\\n}\\n\\n.lm-DockPanel-tabBar .lm-TabBar-tab:focus-visible,\\n.lm-DockPanel-tabBar .lm-TabBar-addButton:focus-visible,\\n.lm-TabPanel-tabBar .lm-TabBar-tab:focus-visible {\\n  border: 1px solid var(--accent-fill-focus);\\n  border-bottom: none;\\n\\n  /* Thicken the border by 1px within the element border */\\n  box-shadow: 0 0 0 1px inset var(--accent-fill-focus);\\n  outline: none;\\n}\\n\\n.lm-DockPanel-tabBar .lm-TabBar-tab:not(.lm-mod-current):focus-visible::after,\\n.lm-TabPanel-tabBar .lm-TabBar-tab:not(.lm-mod-current):focus-visible::after {\\n  border-bottom-color: var(--accent-fill-focus);\\n}\\n\\n.lm-DockPanel-tabBar .lm-TabBar-tab:hover:not(.lm-mod-current),\\n.lm-TabPanel-tabBar .lm-TabBar-tab:hover:not(.lm-mod-current) {\\n  background: var(--jp-layout-color1);\\n  color: var(--jp-ui-font-color1);\\n}\\n\\n.lm-DockPanel-tabBar .lm-TabBar-tab:not(.lm-mod-current)::after,\\n.lm-DockPanel-tabBar .lm-TabBar-addButton::after {\\n  position: absolute;\\n  content: '';\\n  bottom: 0;\\n  left: calc(-1 * var(--jp-border-width));\\n  width: calc(100% + 2 * var(--jp-border-width));\\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color1);\\n}\\n\\n.lm-DockPanel-tabBar .lm-TabBar-tab:first-child,\\n.lm-TabPanel-tabBar .lm-TabBar-tab:first-child {\\n  margin-left: 0;\\n}\\n\\n/* This is a current tab of a tab bar in the dock panel: each tab bar has 1. */\\n.lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-current {\\n  background: var(--jp-layout-color1);\\n  color: var(--jp-ui-font-color1);\\n}\\n\\n.lm-TabPanel-tabBar .lm-TabBar-tab.lm-mod-current {\\n  background: var(--jp-layout-color1);\\n  color: var(--jp-ui-font-color1);\\n}\\n\\n/* This is the main application level current tab: only 1 exists. */\\n.lm-DockPanel-tabBar .lm-TabBar-tab.jp-mod-current::before {\\n  position: absolute;\\n  top: calc(-1 * var(--jp-border-width) + 1px);\\n  left: calc(-1 * var(--jp-border-width));\\n  content: '';\\n  height: var(--jp-private-horizontal-tab-active-top-border);\\n  width: calc(100% + 2 * var(--jp-border-width));\\n  background: var(--jp-brand-color1);\\n}\\n\\n/* This is the left tab bar current tab: only 1 exists. */\\n.lm-TabBar-tab.lm-mod-current {\\n  background: var(--jp-layout-color1);\\n  color: var(--jp-ui-font-color1);\\n}\\n\\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-left .lm-TabBar-tab,\\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-right .lm-TabBar-tab {\\n  flex: 0 1 40px;\\n  margin-top: -1px;\\n  line-height: 40px;\\n}\\n\\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-left .lm-TabBar-tab {\\n  border-right: none;\\n}\\n\\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-right .lm-TabBar-tab {\\n  border-left: none;\\n}\\n\\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-left .lm-TabBar-tab:first-child,\\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-right .lm-TabBar-tab:first-child {\\n  margin-top: 0;\\n}\\n\\n/* stylelint-disable selector-max-class */\\n\\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-left .lm-TabBar-tab.lm-mod-current,\\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-right .lm-TabBar-tab.lm-mod-current {\\n  min-width: 80px;\\n  max-width: 80px;\\n}\\n\\n.lm-DockPanel-tabBar .lm-TabBar.lm-mod-right .lm-TabBar-tab.lm-mod-current {\\n  transform: translateX(-1px);\\n}\\n\\n.lm-DockPanel-tabBar .lm-TabBar-tab .lm-TabBar-tabIcon,\\n.lm-TabBar-tab.lm-mod-drag-image .lm-TabBar-tabIcon,\\n.lm-TabPanel-tabBar .lm-TabBar-tab .lm-TabBar-tabIcon {\\n  width: 14px;\\n  background-position: left center;\\n  background-repeat: no-repeat;\\n  background-size: 14px;\\n  margin-right: 4px;\\n}\\n\\n/* stylelint-enable selector-max-class */\\n\\n.lm-TabBar-tab.lm-mod-drag-image {\\n  background: var(--jp-layout-color1);\\n  color: var(--jp-ui-font-color1);\\n  border: var(--jp-border-width) solid var(--jp-border-color1);\\n  border-top: var(--jp-border-width) solid var(--jp-brand-color1);\\n  box-shadow: var(--jp-elevation-z4);\\n  font-size: var(--jp-ui-font-size1);\\n  line-height: var(--jp-private-horizontal-tab-height);\\n  min-height: var(--jp-private-horizontal-tab-height);\\n  min-width: var(--jp-private-horizontal-tab-width);\\n  padding: 0 10px;\\n  transform: translateX(-40%) translateY(-58%);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n:root {\n  --jp-private-title-panel-height: 28px;\n}\n\n#jp-title-panel {\n  min-height: var(--jp-private-title-panel-height);\n  width: 100%;\n  display: flex;\n  background: var(--jp-layout-color1);\n}\n\n#jp-title-panel-title {\n  flex: 1 1 auto;\n  margin-left: 8px;\n}\n\n#jp-title-panel-title input {\n  background: transparent;\n  margin: 0;\n  height: 28px;\n  width: 100%;\n  box-sizing: border-box;\n  border: none;\n  font-size: 18px;\n  font-weight: normal;\n  font-family: var(--jp-ui-font-family);\n  line-height: var(--jp-private-title-panel-height);\n  color: var(--jp-ui-font-color0);\n  outline: none;\n  appearance: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/application/style/titlepanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,qCAAqC;AACvC;;AAEA;EACE,gDAAgD;EAChD,WAAW;EACX,aAAa;EACb,mCAAmC;AACrC;;AAEA;EACE,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,uBAAuB;EACvB,SAAS;EACT,YAAY;EACZ,WAAW;EACX,sBAAsB;EACtB,YAAY;EACZ,eAAe;EACf,mBAAmB;EACnB,qCAAqC;EACrC,iDAAiD;EACjD,+BAA+B;EAC/B,aAAa;EACb,gBAAgB;EAChB,wBAAwB;EACxB,qBAAqB;AACvB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  --jp-private-title-panel-height: 28px;\\n}\\n\\n#jp-title-panel {\\n  min-height: var(--jp-private-title-panel-height);\\n  width: 100%;\\n  display: flex;\\n  background: var(--jp-layout-color1);\\n}\\n\\n#jp-title-panel-title {\\n  flex: 1 1 auto;\\n  margin-left: 8px;\\n}\\n\\n#jp-title-panel-title input {\\n  background: transparent;\\n  margin: 0;\\n  height: 28px;\\n  width: 100%;\\n  box-sizing: border-box;\\n  border: none;\\n  font-size: 18px;\\n  font-weight: normal;\\n  font-family: var(--jp-ui-font-family);\\n  line-height: var(--jp-private-title-panel-height);\\n  color: var(--jp-ui-font-color0);\\n  outline: none;\\n  appearance: none;\\n  -webkit-appearance: none;\\n  -moz-appearance: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./notification.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./splash.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./contextualhelp.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/apputils-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n@import './notification.css';\\n@import './splash.css';\\n@import './contextualhelp.css';\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n:root {\n  --jp-private-shortcuts-key-padding-horizontal: 0.47em;\n  --jp-private-shortcuts-key-padding-vertical: 0.28em;\n  --jp-private-shortcuts-label-padding-horizontal: 0.47em;\n}\n\n.jp-ContextualShortcut-TableRow {\n  font-size: var(--jp-ui-font-size1);\n  font-family: var(--jp-ui-font-family);\n}\n\n.jp-ContextualShortcut-TableItem {\n  margin-left: auto;\n  margin-right: auto;\n  color: var(--jp-inverse-layout-color0);\n  font-size: var(--jp-ui-font-size1);\n  line-height: 2em;\n  padding-right: var(--jp-private-shortcuts-label-padding-horizontal);\n}\n\n.jp-ContextualShortcut-TableLastRow {\n  height: 2em;\n}\n\n.jp-ContextualShortcut-Key {\n  font-family: var(--jp-code-font-family);\n  border-width: var(--jp-border-width);\n  border-radius: var(--jp-border-radius);\n  border-style: solid;\n  border-color: var(--jp-border-color1);\n  color: var(--jp-ui-font-color1);\n  background: var(--jp-layout-color1);\n  padding-left: var(--jp-private-shortcuts-key-padding-horizontal);\n  padding-right: var(--jp-private-shortcuts-key-padding-horizontal);\n  padding-top: var(--jp-private-shortcuts-key-padding-vertical);\n  padding-bottom: var(--jp-private-shortcuts-key-padding-vertical);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/apputils-extension/style/contextualhelp.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,qDAAqD;EACrD,mDAAmD;EACnD,uDAAuD;AACzD;;AAEA;EACE,kCAAkC;EAClC,qCAAqC;AACvC;;AAEA;EACE,iBAAiB;EACjB,kBAAkB;EAClB,sCAAsC;EACtC,kCAAkC;EAClC,gBAAgB;EAChB,mEAAmE;AACrE;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,uCAAuC;EACvC,oCAAoC;EACpC,sCAAsC;EACtC,mBAAmB;EACnB,qCAAqC;EACrC,+BAA+B;EAC/B,mCAAmC;EACnC,gEAAgE;EAChE,iEAAiE;EACjE,6DAA6D;EAC7D,gEAAgE;AAClE\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n:root {\\n  --jp-private-shortcuts-key-padding-horizontal: 0.47em;\\n  --jp-private-shortcuts-key-padding-vertical: 0.28em;\\n  --jp-private-shortcuts-label-padding-horizontal: 0.47em;\\n}\\n\\n.jp-ContextualShortcut-TableRow {\\n  font-size: var(--jp-ui-font-size1);\\n  font-family: var(--jp-ui-font-family);\\n}\\n\\n.jp-ContextualShortcut-TableItem {\\n  margin-left: auto;\\n  margin-right: auto;\\n  color: var(--jp-inverse-layout-color0);\\n  font-size: var(--jp-ui-font-size1);\\n  line-height: 2em;\\n  padding-right: var(--jp-private-shortcuts-label-padding-horizontal);\\n}\\n\\n.jp-ContextualShortcut-TableLastRow {\\n  height: 2em;\\n}\\n\\n.jp-ContextualShortcut-Key {\\n  font-family: var(--jp-code-font-family);\\n  border-width: var(--jp-border-width);\\n  border-radius: var(--jp-border-radius);\\n  border-style: solid;\\n  border-color: var(--jp-border-color1);\\n  color: var(--jp-ui-font-color1);\\n  background: var(--jp-layout-color1);\\n  padding-left: var(--jp-private-shortcuts-key-padding-horizontal);\\n  padding-right: var(--jp-private-shortcuts-key-padding-horizontal);\\n  padding-top: var(--jp-private-shortcuts-key-padding-vertical);\\n  padding-bottom: var(--jp-private-shortcuts-key-padding-vertical);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!../../../react-toastify/dist/ReactToastify.min.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n:root {\n  --toastify-color-light: var(--jp-layout-color1);\n  --toastify-color-dark: var(--jp-layout-color1);\n  --toastify-color-info: var(--jp-info-color1);\n  --toastify-color-success: var(--jp-success-color1);\n  --toastify-color-warning: var(--jp-warn-color1);\n  --toastify-color-error: var(--jp-error-color1);\n  --toastify-color-transparent: rgba(255, 255, 255, 0.7);\n  --toastify-icon-color-info: var(--toastify-color-info);\n  --toastify-icon-color-success: var(--toastify-color-success);\n  --toastify-icon-color-warning: var(--toastify-color-warning);\n  --toastify-icon-color-error: var(--toastify-color-error);\n  --toastify-toast-width: 25em;\n  --toastify-toast-background: var(--jp-layout-color1);\n  --toastify-toast-min-height: 64px;\n  --toastify-toast-max-height: 800px;\n  --toastify-font-family: var(--jp-ui-font-family);\n  --toastify-z-index: 9999;\n  --toastify-text-color-light: var(--jp-ui-font-color1);\n  --toastify-text-color-dark: var(--jp-ui-font-color1);\n  --toastify-text-color-info: var(--jp-ui-font-color1);\n  --toastify-text-color-success: var(--jp-ui-font-color1);\n  --toastify-text-color-warning: var(--jp-ui-font-color1);\n  --toastify-text-color-error: var(--jp-ui-font-color1);\n  --toastify-spinner-color: #616161;\n  --toastify-spinner-color-empty-area: #e0e0e0;\n  --toastify-color-progress-light: linear-gradient(\n    to right,\n    #4cd964,\n    #5ac8fa,\n    #007aff,\n    #34aadc,\n    #5856d6,\n    #ff2d55\n  );\n  --toastify-color-progress-dark: #bb86fc;\n  --toastify-color-progress-info: var(--toastify-color-info);\n  --toastify-color-progress-success: var(--toastify-color-success);\n  --toastify-color-progress-warning: var(--toastify-color-warning);\n  --toastify-color-progress-error: var(--toastify-color-error);\n}\n\n.jp-Notification-List {\n  list-style: none;\n  margin: 0;\n  padding: 4px;\n  width: var(--toastify-toast-width);\n  overflow-y: auto;\n  max-height: 55vh;\n  box-sizing: border-box;\n  background-color: var(--jp-layout-color2);\n}\n\n.jp-Notification-Header {\n  display: flex;\n  font-size: var(--jp-ui-font-size1);\n  padding-left: 8px;\n  padding-right: 4px;\n  margin: 0;\n  align-items: center;\n  user-select: none;\n}\n\n.jp-Notification-List-Item {\n  padding: 2px 0;\n}\n\n.jp-Notification-List .Toastify__toast {\n  margin: 0;\n}\n\n.jp-Notification-Status.jp-mod-selected {\n  background-color: var(--jp-brand-color1);\n}\n\n.jp-Notification-Status.jp-mod-selected .jp-Notification-Status-Text {\n  color: var(--jp-ui-inverse-font-color1);\n}\n\n.Toastify__toast {\n  min-height: unset;\n  padding: 4px;\n  font-size: var(--jp-ui-font-size1);\n  border-width: var(--jp-border-width);\n  border-radius: var(--jp-border-radius);\n  border-color: var(--jp-border-color1);\n  box-shadow: var(--jp-elevation-z4);\n  cursor: default;\n}\n\n.Toastify__toast-body {\n  display: flex;\n  flex-grow: 1;\n}\n\n.jp-Notification-Toast-Close {\n  padding: 0;\n  position: absolute;\n  right: 0.1px;\n  cursor: pointer;\n}\n\n.jp-Notification-Toast-Close-Margin {\n  margin-right: 4px;\n}\n\n.jp-toastContainer .jp-Notification-Toast-Close:hover {\n  /* The close button has its own hover style */\n  background: none;\n}\n\n.Toastify__toast.jp-Notification-Toast-error {\n  border-top: 5px solid var(--jp-error-color1);\n}\n\n.Toastify__toast.jp-Notification-Toast-warning {\n  border-top: 5px solid var(--jp-warn-color1);\n}\n\n.Toastify__toast.jp-Notification-Toast-info {\n  border-top: 5px solid var(--jp-info-color1);\n}\n\n.Toastify__toast.jp-Notification-Toast-success {\n  border-top: 5px solid var(--jp-success-color1);\n}\n\n.Toastify__toast.jp-Notification-Toast-in-progress {\n  border-top: 5px solid var(--jp-layout-color1);\n}\n\n.Toastify__toast-body a {\n  color: var(--jp-content-link-color);\n}\n\n.Toastify__toast-body a:hover {\n  color: var(--jp-content-link-color);\n  text-decoration: underline;\n}\n\n.jp-toast-message {\n  padding-inline-end: 16px;\n}\n\n/* p elements are added by the markdown rendering.\n * Removing its default margin allows to reduce toast size.\n */\n.Toastify__toast-body p:first-child,\n.Toastify__toast-body h1:first-child,\n.Toastify__toast-body h2:first-child,\n.Toastify__toast-body h3:first-child,\n.Toastify__toast-body h4:first-child,\n.Toastify__toast-body h5:first-child,\n.Toastify__toast-body h6:first-child,\n.Toastify__toast-body ol:first-child,\n.Toastify__toast-body ul:first-child {\n  margin-top: 0;\n}\n\n.Toastify__toast-body p:last-child,\n.Toastify__toast-body h1:last-child,\n.Toastify__toast-body h2:last-child,\n.Toastify__toast-body h3:last-child,\n.Toastify__toast-body h4:last-child,\n.Toastify__toast-body h5:last-child,\n.Toastify__toast-body h6:last-child,\n.Toastify__toast-body ol:last-child,\n.Toastify__toast-body ul:last-child {\n  margin-bottom: 0;\n}\n\n.jp-toast-buttonBar {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  flex: 0 0 auto;\n  padding-block-start: 8px;\n}\n\n.jp-toast-spacer {\n  flex-grow: 1;\n  flex-shrink: 1;\n}\n\n.jp-toast-button {\n  margin-top: 1px;\n  margin-bottom: 1px;\n  margin-right: 0;\n  margin-left: 3px;\n  color: var(--jp-ui-font-color1);\n  background-color: var(--jp-layout-color2);\n  border: none;\n}\n\n.jp-toast-button:focus {\n  outline: 1px solid var(--jp-reject-color-normal, var(--jp-layout-color2));\n  outline-offset: 1px;\n  -moz-outline-radius: 0;\n}\n\n.jp-toast-button:focus-visible {\n  border: none;\n}\n\n.jp-toast-button:hover {\n  background-color: var(--jp-layout-color3);\n}\n\n.jp-toast-button.jp-mod-accept {\n  background: var(--jp-accept-color-normal, var(--jp-brand-color1));\n  color: var(--jp-ui-inverse-font-color1);\n}\n\n.jp-toast-button.jp-mod-accept:focus {\n  outline-color: var(--jp-accept-color-normal, var(--jp-brand-color1));\n}\n\n.jp-toast-button.jp-mod-accept:hover {\n  background: var(--jp-accept-color-hover, var(--jp-brand-color0));\n}\n\n.jp-toast-button.jp-mod-warn {\n  background: var(--jp-warn-color-normal, var(--jp-warn-color1));\n  color: var(--jp-ui-inverse-font-color1);\n}\n\n.jp-toast-button.jp-mod-warn:focus {\n  outline-color: var(--jp-warn-color-normal, var(--jp-warn-color1));\n}\n\n.jp-toast-button.jp-mod-warn:hover {\n  background: var(--jp-warn-color-hover, var(--jp-warn-color0));\n}\n\n.jp-toast-button.jp-mod-link {\n  color: var(--jp-content-link-color);\n  text-decoration: underline;\n  text-decoration-color: var(--jp-content-link-color);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/apputils-extension/style/notification.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAIF;EACE,+CAA+C;EAC/C,8CAA8C;EAC9C,4CAA4C;EAC5C,kDAAkD;EAClD,+CAA+C;EAC/C,8CAA8C;EAC9C,sDAAsD;EACtD,sDAAsD;EACtD,4DAA4D;EAC5D,4DAA4D;EAC5D,wDAAwD;EACxD,4BAA4B;EAC5B,oDAAoD;EACpD,iCAAiC;EACjC,kCAAkC;EAClC,gDAAgD;EAChD,wBAAwB;EACxB,qDAAqD;EACrD,oDAAoD;EACpD,oDAAoD;EACpD,uDAAuD;EACvD,uDAAuD;EACvD,qDAAqD;EACrD,iCAAiC;EACjC,4CAA4C;EAC5C;;;;;;;;GAQC;EACD,uCAAuC;EACvC,0DAA0D;EAC1D,gEAAgE;EAChE,gEAAgE;EAChE,4DAA4D;AAC9D;;AAEA;EACE,gBAAgB;EAChB,SAAS;EACT,YAAY;EACZ,kCAAkC;EAClC,gBAAgB;EAChB,gBAAgB;EAChB,sBAAsB;EACtB,yCAAyC;AAC3C;;AAEA;EACE,aAAa;EACb,kCAAkC;EAClC,iBAAiB;EACjB,kBAAkB;EAClB,SAAS;EACT,mBAAmB;EACnB,iBAAiB;AACnB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,iBAAiB;EACjB,YAAY;EACZ,kCAAkC;EAClC,oCAAoC;EACpC,sCAAsC;EACtC,qCAAqC;EACrC,kCAAkC;EAClC,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,YAAY;AACd;;AAEA;EACE,UAAU;EACV,kBAAkB;EAClB,YAAY;EACZ,eAAe;AACjB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,6CAA6C;EAC7C,gBAAgB;AAClB;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;EACE,2CAA2C;AAC7C;;AAEA;EACE,2CAA2C;AAC7C;;AAEA;EACE,8CAA8C;AAChD;;AAEA;EACE,6CAA6C;AAC/C;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;EACnC,0BAA0B;AAC5B;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;;EAEE;AACF;;;;;;;;;EASE,aAAa;AACf;;AAEA;;;;;;;;;EASE,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,iBAAiB;EACjB,cAAc;EACd,wBAAwB;AAC1B;;AAEA;EACE,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,eAAe;EACf,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,+BAA+B;EAC/B,yCAAyC;EACzC,YAAY;AACd;;AAEA;EACE,yEAAyE;EACzE,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,iEAAiE;EACjE,uCAAuC;AACzC;;AAEA;EACE,oEAAoE;AACtE;;AAEA;EACE,gEAAgE;AAClE;;AAEA;EACE,8DAA8D;EAC9D,uCAAuC;AACzC;;AAEA;EACE,iEAAiE;AACnE;;AAEA;EACE,6DAA6D;AAC/D;;AAEA;EACE,mCAAmC;EACnC,0BAA0B;EAC1B,mDAAmD;AACrD\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n@import '~react-toastify/dist/ReactToastify.min.css';\\n\\n:root {\\n  --toastify-color-light: var(--jp-layout-color1);\\n  --toastify-color-dark: var(--jp-layout-color1);\\n  --toastify-color-info: var(--jp-info-color1);\\n  --toastify-color-success: var(--jp-success-color1);\\n  --toastify-color-warning: var(--jp-warn-color1);\\n  --toastify-color-error: var(--jp-error-color1);\\n  --toastify-color-transparent: rgba(255, 255, 255, 0.7);\\n  --toastify-icon-color-info: var(--toastify-color-info);\\n  --toastify-icon-color-success: var(--toastify-color-success);\\n  --toastify-icon-color-warning: var(--toastify-color-warning);\\n  --toastify-icon-color-error: var(--toastify-color-error);\\n  --toastify-toast-width: 25em;\\n  --toastify-toast-background: var(--jp-layout-color1);\\n  --toastify-toast-min-height: 64px;\\n  --toastify-toast-max-height: 800px;\\n  --toastify-font-family: var(--jp-ui-font-family);\\n  --toastify-z-index: 9999;\\n  --toastify-text-color-light: var(--jp-ui-font-color1);\\n  --toastify-text-color-dark: var(--jp-ui-font-color1);\\n  --toastify-text-color-info: var(--jp-ui-font-color1);\\n  --toastify-text-color-success: var(--jp-ui-font-color1);\\n  --toastify-text-color-warning: var(--jp-ui-font-color1);\\n  --toastify-text-color-error: var(--jp-ui-font-color1);\\n  --toastify-spinner-color: #616161;\\n  --toastify-spinner-color-empty-area: #e0e0e0;\\n  --toastify-color-progress-light: linear-gradient(\\n    to right,\\n    #4cd964,\\n    #5ac8fa,\\n    #007aff,\\n    #34aadc,\\n    #5856d6,\\n    #ff2d55\\n  );\\n  --toastify-color-progress-dark: #bb86fc;\\n  --toastify-color-progress-info: var(--toastify-color-info);\\n  --toastify-color-progress-success: var(--toastify-color-success);\\n  --toastify-color-progress-warning: var(--toastify-color-warning);\\n  --toastify-color-progress-error: var(--toastify-color-error);\\n}\\n\\n.jp-Notification-List {\\n  list-style: none;\\n  margin: 0;\\n  padding: 4px;\\n  width: var(--toastify-toast-width);\\n  overflow-y: auto;\\n  max-height: 55vh;\\n  box-sizing: border-box;\\n  background-color: var(--jp-layout-color2);\\n}\\n\\n.jp-Notification-Header {\\n  display: flex;\\n  font-size: var(--jp-ui-font-size1);\\n  padding-left: 8px;\\n  padding-right: 4px;\\n  margin: 0;\\n  align-items: center;\\n  user-select: none;\\n}\\n\\n.jp-Notification-List-Item {\\n  padding: 2px 0;\\n}\\n\\n.jp-Notification-List .Toastify__toast {\\n  margin: 0;\\n}\\n\\n.jp-Notification-Status.jp-mod-selected {\\n  background-color: var(--jp-brand-color1);\\n}\\n\\n.jp-Notification-Status.jp-mod-selected .jp-Notification-Status-Text {\\n  color: var(--jp-ui-inverse-font-color1);\\n}\\n\\n.Toastify__toast {\\n  min-height: unset;\\n  padding: 4px;\\n  font-size: var(--jp-ui-font-size1);\\n  border-width: var(--jp-border-width);\\n  border-radius: var(--jp-border-radius);\\n  border-color: var(--jp-border-color1);\\n  box-shadow: var(--jp-elevation-z4);\\n  cursor: default;\\n}\\n\\n.Toastify__toast-body {\\n  display: flex;\\n  flex-grow: 1;\\n}\\n\\n.jp-Notification-Toast-Close {\\n  padding: 0;\\n  position: absolute;\\n  right: 0.1px;\\n  cursor: pointer;\\n}\\n\\n.jp-Notification-Toast-Close-Margin {\\n  margin-right: 4px;\\n}\\n\\n.jp-toastContainer .jp-Notification-Toast-Close:hover {\\n  /* The close button has its own hover style */\\n  background: none;\\n}\\n\\n.Toastify__toast.jp-Notification-Toast-error {\\n  border-top: 5px solid var(--jp-error-color1);\\n}\\n\\n.Toastify__toast.jp-Notification-Toast-warning {\\n  border-top: 5px solid var(--jp-warn-color1);\\n}\\n\\n.Toastify__toast.jp-Notification-Toast-info {\\n  border-top: 5px solid var(--jp-info-color1);\\n}\\n\\n.Toastify__toast.jp-Notification-Toast-success {\\n  border-top: 5px solid var(--jp-success-color1);\\n}\\n\\n.Toastify__toast.jp-Notification-Toast-in-progress {\\n  border-top: 5px solid var(--jp-layout-color1);\\n}\\n\\n.Toastify__toast-body a {\\n  color: var(--jp-content-link-color);\\n}\\n\\n.Toastify__toast-body a:hover {\\n  color: var(--jp-content-link-color);\\n  text-decoration: underline;\\n}\\n\\n.jp-toast-message {\\n  padding-inline-end: 16px;\\n}\\n\\n/* p elements are added by the markdown rendering.\\n * Removing its default margin allows to reduce toast size.\\n */\\n.Toastify__toast-body p:first-child,\\n.Toastify__toast-body h1:first-child,\\n.Toastify__toast-body h2:first-child,\\n.Toastify__toast-body h3:first-child,\\n.Toastify__toast-body h4:first-child,\\n.Toastify__toast-body h5:first-child,\\n.Toastify__toast-body h6:first-child,\\n.Toastify__toast-body ol:first-child,\\n.Toastify__toast-body ul:first-child {\\n  margin-top: 0;\\n}\\n\\n.Toastify__toast-body p:last-child,\\n.Toastify__toast-body h1:last-child,\\n.Toastify__toast-body h2:last-child,\\n.Toastify__toast-body h3:last-child,\\n.Toastify__toast-body h4:last-child,\\n.Toastify__toast-body h5:last-child,\\n.Toastify__toast-body h6:last-child,\\n.Toastify__toast-body ol:last-child,\\n.Toastify__toast-body ul:last-child {\\n  margin-bottom: 0;\\n}\\n\\n.jp-toast-buttonBar {\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: nowrap;\\n  flex: 0 0 auto;\\n  padding-block-start: 8px;\\n}\\n\\n.jp-toast-spacer {\\n  flex-grow: 1;\\n  flex-shrink: 1;\\n}\\n\\n.jp-toast-button {\\n  margin-top: 1px;\\n  margin-bottom: 1px;\\n  margin-right: 0;\\n  margin-left: 3px;\\n  color: var(--jp-ui-font-color1);\\n  background-color: var(--jp-layout-color2);\\n  border: none;\\n}\\n\\n.jp-toast-button:focus {\\n  outline: 1px solid var(--jp-reject-color-normal, var(--jp-layout-color2));\\n  outline-offset: 1px;\\n  -moz-outline-radius: 0;\\n}\\n\\n.jp-toast-button:focus-visible {\\n  border: none;\\n}\\n\\n.jp-toast-button:hover {\\n  background-color: var(--jp-layout-color3);\\n}\\n\\n.jp-toast-button.jp-mod-accept {\\n  background: var(--jp-accept-color-normal, var(--jp-brand-color1));\\n  color: var(--jp-ui-inverse-font-color1);\\n}\\n\\n.jp-toast-button.jp-mod-accept:focus {\\n  outline-color: var(--jp-accept-color-normal, var(--jp-brand-color1));\\n}\\n\\n.jp-toast-button.jp-mod-accept:hover {\\n  background: var(--jp-accept-color-hover, var(--jp-brand-color0));\\n}\\n\\n.jp-toast-button.jp-mod-warn {\\n  background: var(--jp-warn-color-normal, var(--jp-warn-color1));\\n  color: var(--jp-ui-inverse-font-color1);\\n}\\n\\n.jp-toast-button.jp-mod-warn:focus {\\n  outline-color: var(--jp-warn-color-normal, var(--jp-warn-color1));\\n}\\n\\n.jp-toast-button.jp-mod-warn:hover {\\n  background: var(--jp-warn-color-hover, var(--jp-warn-color0));\\n}\\n\\n.jp-toast-button.jp-mod-link {\\n  color: var(--jp-content-link-color);\\n  text-decoration: underline;\\n  text-decoration-color: var(--jp-content-link-color);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n#jupyterlab-splash {\n  z-index: 10;\n  position: absolute;\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n  background-position: center 40%;\n  background-repeat: no-repeat;\n  background-size: cover;\n}\n\n#jupyterlab-splash.light {\n  background-color: white;\n}\n\n#jupyterlab-splash.dark {\n  background-color: var(--md-grey-900, #212121);\n}\n\n.splash-fade {\n  animation: 0.5s fade-out forwards;\n}\n\n#galaxy {\n  position: relative;\n  width: 100%;\n  height: 100%;\n}\n\n.planet {\n  background-repeat: no-repeat;\n  background-size: cover;\n  animation-iteration-count: infinite;\n  animation-name: orbit;\n}\n\n#moon1.orbit {\n  opacity: 1;\n  animation: orbit 2s ease;\n  width: 200px;\n  height: 140px;\n  margin-top: -53px;\n  margin-left: -54px;\n}\n\n#moon2.orbit {\n  opacity: 1;\n  animation: orbit 2s ease;\n  width: 132px;\n  height: 180px;\n  margin-top: -66px;\n  margin-left: -85px;\n}\n\n#moon3.orbit {\n  opacity: 1;\n  display: flex;\n  align-items: flex-end;\n  animation: orbit 2s ease;\n  width: 220px;\n  height: 166px;\n  margin-top: -96px;\n  margin-left: -50px;\n}\n\n#moon1 .planet {\n  height: 12px;\n  width: 12px;\n  border-radius: 50%;\n}\n\n#moon2 .planet {\n  height: 16px;\n  width: 16px;\n  border-radius: 50%;\n  float: right;\n}\n\n#moon3 .planet {\n  height: 20px;\n  width: 20px;\n  border-radius: 50%;\n}\n\n#jupyterlab-splash.light #moon1 .planet {\n  background-color: #6f7070;\n}\n\n#jupyterlab-splash.light #moon2 .planet {\n  background-color: #767677;\n}\n\n#jupyterlab-splash.light #moon3 .planet {\n  background-color: #989798;\n}\n\n#jupyterlab-splash.dark #moon1 .planet,\n#jupyterlab-splash.dark #moon2 .planet,\n#jupyterlab-splash.dark #moon3 .planet {\n  background-color: white;\n}\n\n.orbit {\n  animation-iteration-count: 1;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  border-radius: 50%;\n}\n\n@keyframes orbit {\n  0% {\n    transform: rotateZ(0deg);\n  }\n\n  100% {\n    transform: rotateZ(-720deg);\n  }\n}\n\n@keyframes orbit2 {\n  0% {\n    transform: rotateZ(0deg);\n  }\n\n  100% {\n    transform: rotateZ(720deg);\n  }\n}\n\n@keyframes fade-in {\n  0% {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n@keyframes fade-out {\n  0% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/apputils-extension/style/splash.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,WAAW;EACX,kBAAkB;EAClB,gBAAgB;EAChB,WAAW;EACX,YAAY;EACZ,+BAA+B;EAC/B,4BAA4B;EAC5B,sBAAsB;AACxB;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,6CAA6C;AAC/C;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,YAAY;AACd;;AAEA;EACE,4BAA4B;EAC5B,sBAAsB;EACtB,mCAAmC;EACnC,qBAAqB;AACvB;;AAEA;EACE,UAAU;EACV,wBAAwB;EACxB,YAAY;EACZ,aAAa;EACb,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,wBAAwB;EACxB,YAAY;EACZ,aAAa;EACb,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,aAAa;EACb,qBAAqB;EACrB,wBAAwB;EACxB,YAAY;EACZ,aAAa;EACb,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,YAAY;EACZ,WAAW;EACX,kBAAkB;AACpB;;AAEA;EACE,YAAY;EACZ,WAAW;EACX,kBAAkB;EAClB,YAAY;AACd;;AAEA;EACE,YAAY;EACZ,WAAW;EACX,kBAAkB;AACpB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;;;EAGE,uBAAuB;AACzB;;AAEA;EACE,4BAA4B;EAC5B,kBAAkB;EAClB,QAAQ;EACR,SAAS;EACT,kBAAkB;AACpB;;AAEA;EACE;IACE,wBAAwB;EAC1B;;EAEA;IACE,2BAA2B;EAC7B;AACF;;AAEA;EACE;IACE,wBAAwB;EAC1B;;EAEA;IACE,0BAA0B;EAC5B;AACF;;AAEA;EACE;IACE,UAAU;EACZ;;EAEA;IACE,UAAU;EACZ;AACF;;AAEA;EACE;IACE,UAAU;EACZ;;EAEA;IACE,UAAU;EACZ;AACF\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n#jupyterlab-splash {\\n  z-index: 10;\\n  position: absolute;\\n  overflow: hidden;\\n  width: 100%;\\n  height: 100%;\\n  background-position: center 40%;\\n  background-repeat: no-repeat;\\n  background-size: cover;\\n}\\n\\n#jupyterlab-splash.light {\\n  background-color: white;\\n}\\n\\n#jupyterlab-splash.dark {\\n  background-color: var(--md-grey-900, #212121);\\n}\\n\\n.splash-fade {\\n  animation: 0.5s fade-out forwards;\\n}\\n\\n#galaxy {\\n  position: relative;\\n  width: 100%;\\n  height: 100%;\\n}\\n\\n.planet {\\n  background-repeat: no-repeat;\\n  background-size: cover;\\n  animation-iteration-count: infinite;\\n  animation-name: orbit;\\n}\\n\\n#moon1.orbit {\\n  opacity: 1;\\n  animation: orbit 2s ease;\\n  width: 200px;\\n  height: 140px;\\n  margin-top: -53px;\\n  margin-left: -54px;\\n}\\n\\n#moon2.orbit {\\n  opacity: 1;\\n  animation: orbit 2s ease;\\n  width: 132px;\\n  height: 180px;\\n  margin-top: -66px;\\n  margin-left: -85px;\\n}\\n\\n#moon3.orbit {\\n  opacity: 1;\\n  display: flex;\\n  align-items: flex-end;\\n  animation: orbit 2s ease;\\n  width: 220px;\\n  height: 166px;\\n  margin-top: -96px;\\n  margin-left: -50px;\\n}\\n\\n#moon1 .planet {\\n  height: 12px;\\n  width: 12px;\\n  border-radius: 50%;\\n}\\n\\n#moon2 .planet {\\n  height: 16px;\\n  width: 16px;\\n  border-radius: 50%;\\n  float: right;\\n}\\n\\n#moon3 .planet {\\n  height: 20px;\\n  width: 20px;\\n  border-radius: 50%;\\n}\\n\\n#jupyterlab-splash.light #moon1 .planet {\\n  background-color: #6f7070;\\n}\\n\\n#jupyterlab-splash.light #moon2 .planet {\\n  background-color: #767677;\\n}\\n\\n#jupyterlab-splash.light #moon3 .planet {\\n  background-color: #989798;\\n}\\n\\n#jupyterlab-splash.dark #moon1 .planet,\\n#jupyterlab-splash.dark #moon2 .planet,\\n#jupyterlab-splash.dark #moon3 .planet {\\n  background-color: white;\\n}\\n\\n.orbit {\\n  animation-iteration-count: 1;\\n  position: absolute;\\n  top: 50%;\\n  left: 50%;\\n  border-radius: 50%;\\n}\\n\\n@keyframes orbit {\\n  0% {\\n    transform: rotateZ(0deg);\\n  }\\n\\n  100% {\\n    transform: rotateZ(-720deg);\\n  }\\n}\\n\\n@keyframes orbit2 {\\n  0% {\\n    transform: rotateZ(0deg);\\n  }\\n\\n  100% {\\n    transform: rotateZ(720deg);\\n  }\\n}\\n\\n@keyframes fade-in {\\n  0% {\\n    opacity: 0;\\n  }\\n\\n  100% {\\n    opacity: 1;\\n  }\\n}\\n\\n@keyframes fade-out {\\n  0% {\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    opacity: 0;\\n  }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./commandpalette.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./dialog.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./inputdialog.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./licenses.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./mainareawidget.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./materialcolors.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_6___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./toolbar.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_6___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/apputils/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n@import './commandpalette.css';\\n@import './dialog.css';\\n@import './inputdialog.css';\\n@import './licenses.css';\\n@import './mainareawidget.css';\\n@import './materialcolors.css';\\n@import './toolbar.css';\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Variables\n|----------------------------------------------------------------------------*/\n\n:root {\n  --jp-private-commandpalette-search-height: 28px;\n}\n\n/*-----------------------------------------------------------------------------\n| Overall styles\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n  padding-bottom: 0;\n  color: var(--jp-ui-font-color1);\n  background: var(--jp-layout-color1);\n\n  /* This is needed so that all font sizing of children done in ems is\n   * relative to this base size */\n  font-size: var(--jp-ui-font-size1);\n}\n\n/*-----------------------------------------------------------------------------\n| Modal variant\n|----------------------------------------------------------------------------*/\n\n.jp-ModalCommandPalette.jp-ThemedContainer {\n  position: absolute;\n  z-index: 10000;\n  top: 38px;\n  left: 30%;\n  margin: 0;\n  padding: 4px;\n  width: 40%;\n  box-shadow: var(--jp-elevation-z4);\n  border-radius: 4px;\n  background: var(--jp-layout-color0);\n}\n\n.jp-ModalCommandPalette .lm-CommandPalette {\n  max-height: 40vh;\n}\n\n.jp-ModalCommandPalette .lm-CommandPalette .lm-close-icon::after {\n  display: none;\n}\n\n.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-header {\n  display: none;\n}\n\n.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-item {\n  margin-left: 4px;\n  margin-right: 4px;\n}\n\n.jp-ModalCommandPalette\n  .lm-CommandPalette\n  .lm-CommandPalette-item.lm-mod-disabled {\n  display: none;\n}\n\n/*-----------------------------------------------------------------------------\n| Search\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette-search {\n  padding: 4px;\n  background-color: var(--jp-layout-color1);\n  z-index: 2;\n}\n\n.lm-CommandPalette-wrapper {\n  /* stylelint-disable-next-line csstree/validator */\n  overflow: overlay;\n  padding: 0 9px;\n  background-color: var(--jp-input-active-background);\n  height: 30px;\n  box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color);\n}\n\n.lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper {\n  box-shadow:\n    inset 0 0 0 1px var(--jp-input-active-box-shadow-color),\n    inset 0 0 0 3px var(--jp-input-active-box-shadow-color);\n}\n\n.jp-SearchIconGroup {\n  color: white;\n  background-color: var(--jp-brand-color1);\n  position: absolute;\n  top: 4px;\n  right: 4px;\n  padding: 5px 5px 1px;\n}\n\n.jp-SearchIconGroup svg {\n  height: 20px;\n  width: 20px;\n}\n\n.jp-SearchIconGroup .jp-icon3[fill] {\n  fill: var(--jp-layout-color0);\n}\n\n.lm-CommandPalette-input {\n  background: transparent;\n  width: calc(100% - 18px);\n  float: left;\n  border: none;\n  outline: none;\n  font-size: var(--jp-ui-font-size1);\n  color: var(--jp-ui-font-color0);\n  line-height: var(--jp-private-commandpalette-search-height);\n}\n\n.lm-CommandPalette-input::-webkit-input-placeholder,\n.lm-CommandPalette-input::-moz-placeholder,\n.lm-CommandPalette-input:-ms-input-placeholder {\n  color: var(--jp-ui-font-color2);\n  font-size: var(--jp-ui-font-size1);\n}\n\n/*-----------------------------------------------------------------------------\n| Results\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette-header:first-child {\n  margin-top: 0;\n}\n\n.lm-CommandPalette-header {\n  border-bottom: solid var(--jp-border-width) var(--jp-border-color2);\n  color: var(--jp-ui-font-color1);\n  cursor: pointer;\n  display: flex;\n  font-size: var(--jp-ui-font-size0);\n  font-weight: 600;\n  letter-spacing: 1px;\n  margin-top: 8px;\n  padding: 8px 0 8px 12px;\n  text-transform: uppercase;\n}\n\n.lm-CommandPalette-header.lm-mod-active {\n  background: var(--jp-layout-color2);\n}\n\n.lm-CommandPalette-header > mark {\n  background-color: transparent;\n  font-weight: bold;\n  color: var(--jp-ui-font-color1);\n}\n\n.lm-CommandPalette-item {\n  padding: 4px 12px 4px 4px;\n  color: var(--jp-ui-font-color1);\n  font-size: var(--jp-ui-font-size1);\n  font-weight: 400;\n  display: flex;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled {\n  color: var(--jp-ui-font-color2);\n}\n\n.lm-CommandPalette-item.lm-mod-active {\n  color: var(--jp-ui-inverse-font-color1);\n  background: var(--jp-brand-color1);\n}\n\n.lm-CommandPalette-item.lm-mod-active .lm-CommandPalette-itemLabel > mark {\n  color: var(--jp-ui-inverse-font-color0);\n}\n\n.lm-CommandPalette-item.lm-mod-active .jp-icon-selectable[fill] {\n  fill: var(--jp-layout-color0);\n}\n\n.lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled) {\n  color: var(--jp-ui-inverse-font-color1);\n  background: var(--jp-brand-color1);\n}\n\n.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {\n  background: var(--jp-layout-color2);\n}\n\n.lm-CommandPalette-itemContent {\n  overflow: hidden;\n}\n\n.lm-CommandPalette-itemLabel > mark {\n  color: var(--jp-ui-font-color0);\n  background-color: transparent;\n  font-weight: bold;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled mark {\n  color: var(--jp-ui-font-color2);\n}\n\n.lm-CommandPalette-item .lm-CommandPalette-itemIcon {\n  margin: 0 4px 0 0;\n  position: relative;\n  width: 16px;\n  top: 2px;\n  flex: 0 0 auto;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon {\n  opacity: 0.6;\n}\n\n.lm-CommandPalette-item .lm-CommandPalette-itemShortcut {\n  flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemCaption {\n  display: none;\n}\n\n.lm-CommandPalette-content {\n  background-color: var(--jp-layout-color1);\n}\n\n.lm-CommandPalette-content:empty::after {\n  content: 'No results';\n  margin: auto;\n  margin-top: 20px;\n  width: 100px;\n  display: block;\n  font-size: var(--jp-ui-font-size2);\n  font-family: var(--jp-ui-font-family);\n  font-weight: lighter;\n}\n\n.lm-CommandPalette-emptyMessage {\n  text-align: center;\n  margin-top: 24px;\n  line-height: 1.32;\n  padding: 0 8px;\n  color: var(--jp-content-font-color3);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/apputils/style/commandpalette.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E;EACE,+CAA+C;AACjD;;AAEA;;8EAE8E;;AAE9E;EACE,iBAAiB;EACjB,+BAA+B;EAC/B,mCAAmC;;EAEnC;iCAC+B;EAC/B,kCAAkC;AACpC;;AAEA;;8EAE8E;;AAE9E;EACE,kBAAkB;EAClB,cAAc;EACd,SAAS;EACT,SAAS;EACT,SAAS;EACT,YAAY;EACZ,UAAU;EACV,kCAAkC;EAClC,kBAAkB;EAClB,mCAAmC;AACrC;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;;;EAGE,aAAa;AACf;;AAEA;;8EAE8E;;AAE9E;EACE,YAAY;EACZ,yCAAyC;EACzC,UAAU;AACZ;;AAEA;EACE,kDAAkD;EAClD,iBAAiB;EACjB,cAAc;EACd,mDAAmD;EACnD,YAAY;EACZ,2EAA2E;AAC7E;;AAEA;EACE;;2DAEyD;AAC3D;;AAEA;EACE,YAAY;EACZ,wCAAwC;EACxC,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,oBAAoB;AACtB;;AAEA;EACE,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,uBAAuB;EACvB,wBAAwB;EACxB,WAAW;EACX,YAAY;EACZ,aAAa;EACb,kCAAkC;EAClC,+BAA+B;EAC/B,2DAA2D;AAC7D;;AAEA;;;EAGE,+BAA+B;EAC/B,kCAAkC;AACpC;;AAEA;;8EAE8E;;AAE9E;EACE,aAAa;AACf;;AAEA;EACE,mEAAmE;EACnE,+BAA+B;EAC/B,eAAe;EACf,aAAa;EACb,kCAAkC;EAClC,gBAAgB;EAChB,mBAAmB;EACnB,eAAe;EACf,uBAAuB;EACvB,yBAAyB;AAC3B;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;EACjB,+BAA+B;AACjC;;AAEA;EACE,yBAAyB;EACzB,+BAA+B;EAC/B,kCAAkC;EAClC,gBAAgB;EAChB,aAAa;AACf;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,uCAAuC;EACvC,kCAAkC;AACpC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,uCAAuC;EACvC,kCAAkC;AACpC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,+BAA+B;EAC/B,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,iBAAiB;EACjB,kBAAkB;EAClB,WAAW;EACX,QAAQ;EACR,cAAc;AAChB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,qBAAqB;EACrB,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACZ,cAAc;EACd,kCAAkC;EAClC,qCAAqC;EACrC,oBAAoB;AACtB;;AAEA;EACE,kBAAkB;EAClB,gBAAgB;EAChB,iBAAiB;EACjB,cAAc;EACd,oCAAoC;AACtC\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Variables\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  --jp-private-commandpalette-search-height: 28px;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Overall styles\\n|----------------------------------------------------------------------------*/\\n\\n.lm-CommandPalette {\\n  padding-bottom: 0;\\n  color: var(--jp-ui-font-color1);\\n  background: var(--jp-layout-color1);\\n\\n  /* This is needed so that all font sizing of children done in ems is\\n   * relative to this base size */\\n  font-size: var(--jp-ui-font-size1);\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Modal variant\\n|----------------------------------------------------------------------------*/\\n\\n.jp-ModalCommandPalette.jp-ThemedContainer {\\n  position: absolute;\\n  z-index: 10000;\\n  top: 38px;\\n  left: 30%;\\n  margin: 0;\\n  padding: 4px;\\n  width: 40%;\\n  box-shadow: var(--jp-elevation-z4);\\n  border-radius: 4px;\\n  background: var(--jp-layout-color0);\\n}\\n\\n.jp-ModalCommandPalette .lm-CommandPalette {\\n  max-height: 40vh;\\n}\\n\\n.jp-ModalCommandPalette .lm-CommandPalette .lm-close-icon::after {\\n  display: none;\\n}\\n\\n.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-header {\\n  display: none;\\n}\\n\\n.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-item {\\n  margin-left: 4px;\\n  margin-right: 4px;\\n}\\n\\n.jp-ModalCommandPalette\\n  .lm-CommandPalette\\n  .lm-CommandPalette-item.lm-mod-disabled {\\n  display: none;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Search\\n|----------------------------------------------------------------------------*/\\n\\n.lm-CommandPalette-search {\\n  padding: 4px;\\n  background-color: var(--jp-layout-color1);\\n  z-index: 2;\\n}\\n\\n.lm-CommandPalette-wrapper {\\n  /* stylelint-disable-next-line csstree/validator */\\n  overflow: overlay;\\n  padding: 0 9px;\\n  background-color: var(--jp-input-active-background);\\n  height: 30px;\\n  box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color);\\n}\\n\\n.lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper {\\n  box-shadow:\\n    inset 0 0 0 1px var(--jp-input-active-box-shadow-color),\\n    inset 0 0 0 3px var(--jp-input-active-box-shadow-color);\\n}\\n\\n.jp-SearchIconGroup {\\n  color: white;\\n  background-color: var(--jp-brand-color1);\\n  position: absolute;\\n  top: 4px;\\n  right: 4px;\\n  padding: 5px 5px 1px;\\n}\\n\\n.jp-SearchIconGroup svg {\\n  height: 20px;\\n  width: 20px;\\n}\\n\\n.jp-SearchIconGroup .jp-icon3[fill] {\\n  fill: var(--jp-layout-color0);\\n}\\n\\n.lm-CommandPalette-input {\\n  background: transparent;\\n  width: calc(100% - 18px);\\n  float: left;\\n  border: none;\\n  outline: none;\\n  font-size: var(--jp-ui-font-size1);\\n  color: var(--jp-ui-font-color0);\\n  line-height: var(--jp-private-commandpalette-search-height);\\n}\\n\\n.lm-CommandPalette-input::-webkit-input-placeholder,\\n.lm-CommandPalette-input::-moz-placeholder,\\n.lm-CommandPalette-input:-ms-input-placeholder {\\n  color: var(--jp-ui-font-color2);\\n  font-size: var(--jp-ui-font-size1);\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Results\\n|----------------------------------------------------------------------------*/\\n\\n.lm-CommandPalette-header:first-child {\\n  margin-top: 0;\\n}\\n\\n.lm-CommandPalette-header {\\n  border-bottom: solid var(--jp-border-width) var(--jp-border-color2);\\n  color: var(--jp-ui-font-color1);\\n  cursor: pointer;\\n  display: flex;\\n  font-size: var(--jp-ui-font-size0);\\n  font-weight: 600;\\n  letter-spacing: 1px;\\n  margin-top: 8px;\\n  padding: 8px 0 8px 12px;\\n  text-transform: uppercase;\\n}\\n\\n.lm-CommandPalette-header.lm-mod-active {\\n  background: var(--jp-layout-color2);\\n}\\n\\n.lm-CommandPalette-header > mark {\\n  background-color: transparent;\\n  font-weight: bold;\\n  color: var(--jp-ui-font-color1);\\n}\\n\\n.lm-CommandPalette-item {\\n  padding: 4px 12px 4px 4px;\\n  color: var(--jp-ui-font-color1);\\n  font-size: var(--jp-ui-font-size1);\\n  font-weight: 400;\\n  display: flex;\\n}\\n\\n.lm-CommandPalette-item.lm-mod-disabled {\\n  color: var(--jp-ui-font-color2);\\n}\\n\\n.lm-CommandPalette-item.lm-mod-active {\\n  color: var(--jp-ui-inverse-font-color1);\\n  background: var(--jp-brand-color1);\\n}\\n\\n.lm-CommandPalette-item.lm-mod-active .lm-CommandPalette-itemLabel > mark {\\n  color: var(--jp-ui-inverse-font-color0);\\n}\\n\\n.lm-CommandPalette-item.lm-mod-active .jp-icon-selectable[fill] {\\n  fill: var(--jp-layout-color0);\\n}\\n\\n.lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled) {\\n  color: var(--jp-ui-inverse-font-color1);\\n  background: var(--jp-brand-color1);\\n}\\n\\n.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {\\n  background: var(--jp-layout-color2);\\n}\\n\\n.lm-CommandPalette-itemContent {\\n  overflow: hidden;\\n}\\n\\n.lm-CommandPalette-itemLabel > mark {\\n  color: var(--jp-ui-font-color0);\\n  background-color: transparent;\\n  font-weight: bold;\\n}\\n\\n.lm-CommandPalette-item.lm-mod-disabled mark {\\n  color: var(--jp-ui-font-color2);\\n}\\n\\n.lm-CommandPalette-item .lm-CommandPalette-itemIcon {\\n  margin: 0 4px 0 0;\\n  position: relative;\\n  width: 16px;\\n  top: 2px;\\n  flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon {\\n  opacity: 0.6;\\n}\\n\\n.lm-CommandPalette-item .lm-CommandPalette-itemShortcut {\\n  flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-itemCaption {\\n  display: none;\\n}\\n\\n.lm-CommandPalette-content {\\n  background-color: var(--jp-layout-color1);\\n}\\n\\n.lm-CommandPalette-content:empty::after {\\n  content: 'No results';\\n  margin: auto;\\n  margin-top: 20px;\\n  width: 100px;\\n  display: block;\\n  font-size: var(--jp-ui-font-size2);\\n  font-family: var(--jp-ui-font-family);\\n  font-weight: lighter;\\n}\\n\\n.lm-CommandPalette-emptyMessage {\\n  text-align: center;\\n  margin-top: 24px;\\n  line-height: 1.32;\\n  padding: 0 8px;\\n  color: var(--jp-content-font-color3);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-Dialog.jp-ThemedContainer {\n  position: absolute;\n  z-index: 10000;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  top: 0;\n  left: 0;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  height: 100%;\n  background: var(--jp-dialog-background);\n  /* stylelint-disable */\n  container-type: inline-size;\n  /* stylelint-enable */\n}\n\n.jp-Dialog-content {\n  display: flex;\n  flex-direction: column;\n  margin-left: auto;\n  margin-right: auto;\n  background: var(--jp-layout-color1);\n  padding: 24px 24px 12px;\n  min-width: 300px;\n  min-height: 150px;\n  max-width: 1000px;\n  max-height: 500px;\n  box-sizing: border-box;\n  box-shadow: var(--jp-elevation-z20);\n  word-wrap: break-word;\n  border-radius: var(--jp-border-radius);\n\n  /* This is needed so that all font sizing of children done in ems is\n   * relative to this base size */\n  font-size: var(--jp-ui-font-size1);\n  color: var(--jp-ui-font-color1);\n  resize: both;\n  overflow: hidden;\n}\n\n.jp-Dialog-content.jp-Dialog-content-small {\n  max-width: 500px;\n}\n\n.jp-Dialog-button {\n  overflow: visible;\n}\n\nbutton.jp-Dialog-button:disabled {\n  opacity: 0.6;\n}\n\nbutton.jp-Dialog-button:focus {\n  outline: 1px solid var(--jp-brand-color1);\n  outline-offset: 4px;\n  -moz-outline-radius: 0;\n}\n\nbutton.jp-Dialog-button:focus::-moz-focus-inner {\n  border: 0;\n}\n\nbutton.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus,\nbutton.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus,\nbutton.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus {\n  outline-offset: 4px;\n  -moz-outline-radius: 0;\n}\n\nbutton.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus {\n  outline: 1px solid var(--jp-accept-color-normal, var(--jp-brand-color1));\n}\n\nbutton.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus {\n  outline: 1px solid var(--jp-warn-color-normal, var(--jp-error-color1));\n}\n\nbutton.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus {\n  outline: 1px solid var(--jp-reject-color-normal, var(--md-grey-600, #757575));\n}\n\nbutton.jp-Dialog-close-button {\n  padding: 0;\n  height: 100%;\n  min-width: unset;\n  min-height: unset;\n}\n\n.jp-Dialog-header {\n  display: flex;\n  justify-content: space-between;\n  flex: 0 0 auto;\n  padding-bottom: 12px;\n  font-size: var(--jp-ui-font-size3);\n  font-weight: 400;\n  color: var(--jp-ui-font-color1);\n}\n\n.jp-Dialog-body {\n  display: flex;\n  flex-direction: column;\n  flex: 1 1 auto;\n  font-size: var(--jp-ui-font-size1);\n  background: var(--jp-layout-color1);\n  color: var(--jp-ui-font-color1);\n  overflow: auto;\n}\n\n.jp-Dialog-footer {\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-end;\n  align-items: center;\n  flex: 0 0 auto;\n  margin-left: -12px;\n  margin-right: -12px;\n  padding: 12px;\n}\n\n.jp-Dialog-checkbox {\n  padding-right: 5px;\n  display: flex;\n  align-items: center;\n}\n\n.jp-Dialog-spacer {\n  flex: 1 1 auto;\n}\n\n.jp-Dialog-title {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.jp-Dialog-body > .jp-select-wrapper {\n  width: 100%;\n}\n\n.jp-Dialog-body > button {\n  padding: 0 16px;\n}\n\n.jp-Dialog-body > label {\n  line-height: 1.4;\n  color: var(--jp-ui-font-color0);\n}\n\n.jp-Dialog-button.jp-mod-styled:not(:last-child) {\n  margin-right: 12px;\n}\n\n/* stylelint-disable */\n@container (max-width: 560px) {\n  /* stylelint-enable */\n  .jp-Dialog-footer {\n    flex-direction: column;\n    align-items: center;\n    gap: 7px;\n  }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/apputils/style/dialog.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,kBAAkB;EAClB,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,mBAAmB;EACnB,uBAAuB;EACvB,MAAM;EACN,OAAO;EACP,SAAS;EACT,UAAU;EACV,WAAW;EACX,YAAY;EACZ,uCAAuC;EACvC,sBAAsB;EACtB,2BAA2B;EAC3B,qBAAqB;AACvB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,iBAAiB;EACjB,kBAAkB;EAClB,mCAAmC;EACnC,uBAAuB;EACvB,gBAAgB;EAChB,iBAAiB;EACjB,iBAAiB;EACjB,iBAAiB;EACjB,sBAAsB;EACtB,mCAAmC;EACnC,qBAAqB;EACrB,sCAAsC;;EAEtC;iCAC+B;EAC/B,kCAAkC;EAClC,+BAA+B;EAC/B,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,yCAAyC;EACzC,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA;EACE,SAAS;AACX;;AAEA;;;EAGE,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA;EACE,wEAAwE;AAC1E;;AAEA;EACE,sEAAsE;AACxE;;AAEA;EACE,6EAA6E;AAC/E;;AAEA;EACE,UAAU;EACV,YAAY;EACZ,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,cAAc;EACd,oBAAoB;EACpB,kCAAkC;EAClC,gBAAgB;EAChB,+BAA+B;AACjC;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,cAAc;EACd,kCAAkC;EAClC,mCAAmC;EACnC,+BAA+B;EAC/B,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,aAAa;AACf;;AAEA;EACE,kBAAkB;EAClB,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,gBAAgB;EAChB,+BAA+B;AACjC;;AAEA;EACE,kBAAkB;AACpB;;AAEA,sBAAsB;AACtB;EACE,qBAAqB;EACrB;IACE,sBAAsB;IACtB,mBAAmB;IACnB,QAAQ;EACV;AACF\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Dialog.jp-ThemedContainer {\\n  position: absolute;\\n  z-index: 10000;\\n  display: flex;\\n  flex-direction: column;\\n  align-items: center;\\n  justify-content: center;\\n  top: 0;\\n  left: 0;\\n  margin: 0;\\n  padding: 0;\\n  width: 100%;\\n  height: 100%;\\n  background: var(--jp-dialog-background);\\n  /* stylelint-disable */\\n  container-type: inline-size;\\n  /* stylelint-enable */\\n}\\n\\n.jp-Dialog-content {\\n  display: flex;\\n  flex-direction: column;\\n  margin-left: auto;\\n  margin-right: auto;\\n  background: var(--jp-layout-color1);\\n  padding: 24px 24px 12px;\\n  min-width: 300px;\\n  min-height: 150px;\\n  max-width: 1000px;\\n  max-height: 500px;\\n  box-sizing: border-box;\\n  box-shadow: var(--jp-elevation-z20);\\n  word-wrap: break-word;\\n  border-radius: var(--jp-border-radius);\\n\\n  /* This is needed so that all font sizing of children done in ems is\\n   * relative to this base size */\\n  font-size: var(--jp-ui-font-size1);\\n  color: var(--jp-ui-font-color1);\\n  resize: both;\\n  overflow: hidden;\\n}\\n\\n.jp-Dialog-content.jp-Dialog-content-small {\\n  max-width: 500px;\\n}\\n\\n.jp-Dialog-button {\\n  overflow: visible;\\n}\\n\\nbutton.jp-Dialog-button:disabled {\\n  opacity: 0.6;\\n}\\n\\nbutton.jp-Dialog-button:focus {\\n  outline: 1px solid var(--jp-brand-color1);\\n  outline-offset: 4px;\\n  -moz-outline-radius: 0;\\n}\\n\\nbutton.jp-Dialog-button:focus::-moz-focus-inner {\\n  border: 0;\\n}\\n\\nbutton.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus,\\nbutton.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus,\\nbutton.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus {\\n  outline-offset: 4px;\\n  -moz-outline-radius: 0;\\n}\\n\\nbutton.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus {\\n  outline: 1px solid var(--jp-accept-color-normal, var(--jp-brand-color1));\\n}\\n\\nbutton.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus {\\n  outline: 1px solid var(--jp-warn-color-normal, var(--jp-error-color1));\\n}\\n\\nbutton.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus {\\n  outline: 1px solid var(--jp-reject-color-normal, var(--md-grey-600, #757575));\\n}\\n\\nbutton.jp-Dialog-close-button {\\n  padding: 0;\\n  height: 100%;\\n  min-width: unset;\\n  min-height: unset;\\n}\\n\\n.jp-Dialog-header {\\n  display: flex;\\n  justify-content: space-between;\\n  flex: 0 0 auto;\\n  padding-bottom: 12px;\\n  font-size: var(--jp-ui-font-size3);\\n  font-weight: 400;\\n  color: var(--jp-ui-font-color1);\\n}\\n\\n.jp-Dialog-body {\\n  display: flex;\\n  flex-direction: column;\\n  flex: 1 1 auto;\\n  font-size: var(--jp-ui-font-size1);\\n  background: var(--jp-layout-color1);\\n  color: var(--jp-ui-font-color1);\\n  overflow: auto;\\n}\\n\\n.jp-Dialog-footer {\\n  display: flex;\\n  flex-direction: row;\\n  justify-content: flex-end;\\n  align-items: center;\\n  flex: 0 0 auto;\\n  margin-left: -12px;\\n  margin-right: -12px;\\n  padding: 12px;\\n}\\n\\n.jp-Dialog-checkbox {\\n  padding-right: 5px;\\n  display: flex;\\n  align-items: center;\\n}\\n\\n.jp-Dialog-spacer {\\n  flex: 1 1 auto;\\n}\\n\\n.jp-Dialog-title {\\n  overflow: hidden;\\n  white-space: nowrap;\\n  text-overflow: ellipsis;\\n}\\n\\n.jp-Dialog-body > .jp-select-wrapper {\\n  width: 100%;\\n}\\n\\n.jp-Dialog-body > button {\\n  padding: 0 16px;\\n}\\n\\n.jp-Dialog-body > label {\\n  line-height: 1.4;\\n  color: var(--jp-ui-font-color0);\\n}\\n\\n.jp-Dialog-button.jp-mod-styled:not(:last-child) {\\n  margin-right: 12px;\\n}\\n\\n/* stylelint-disable */\\n@container (max-width: 560px) {\\n  /* stylelint-enable */\\n  .jp-Dialog-footer {\\n    flex-direction: column;\\n    align-items: center;\\n    gap: 7px;\\n  }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.jp-Input-Boolean-Dialog {\n  flex-direction: row-reverse;\n  align-items: end;\n  width: 100%;\n}\n\n.jp-Input-Boolean-Dialog > label {\n  flex: 1 1 auto;\n}\n\n.jp-InputDialog-inputWrapper {\n  display: flex;\n  align-items: baseline;\n}\n\n.jp-InputDialog-inputWrapper > input.jp-mod-styled:invalid {\n  border-color: var(--jp-error-color0);\n  background: var(--jp-error-color3);\n}\n\n.jp-InputDialog-inputWrapper\n  > input[required].jp-mod-styled:invalid:placeholder-shown {\n  /* Do not show invalid style when placeholder is shown */\n  border-color: unset;\n  background: unset;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/apputils/style/inputdialog.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,2BAA2B;EAC3B,gBAAgB;EAChB,WAAW;AACb;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,qBAAqB;AACvB;;AAEA;EACE,oCAAoC;EACpC,kCAAkC;AACpC;;AAEA;;EAEE,wDAAwD;EACxD,mBAAmB;EACnB,iBAAiB;AACnB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.jp-Input-Boolean-Dialog {\\n  flex-direction: row-reverse;\\n  align-items: end;\\n  width: 100%;\\n}\\n\\n.jp-Input-Boolean-Dialog > label {\\n  flex: 1 1 auto;\\n}\\n\\n.jp-InputDialog-inputWrapper {\\n  display: flex;\\n  align-items: baseline;\\n}\\n\\n.jp-InputDialog-inputWrapper > input.jp-mod-styled:invalid {\\n  border-color: var(--jp-error-color0);\\n  background: var(--jp-error-color3);\\n}\\n\\n.jp-InputDialog-inputWrapper\\n  > input[required].jp-mod-styled:invalid:placeholder-shown {\\n  /* Do not show invalid style when placeholder is shown */\\n  border-color: unset;\\n  background: unset;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* licenses */\n.jp-Licenses {\n  display: flex;\n  flex-direction: row;\n  align-items: stretch;\n  background-color: var(--jp-layout-color0);\n}\n\n.jp-Licenses-FormArea {\n  display: flex;\n  flex-direction: column;\n  min-width: calc(10 * var(--jp-ui-font-size1));\n  width: calc(18 * var(--jp-ui-font-size1));\n}\n\n.jp-Licenses .lm-SplitPanel-handle:hover {\n  background-color: var(--jp-brand-color2);\n}\n\n/* filters */\n.jp-Licenses-Filters {\n  padding: var(--jp-ui-font-size1) calc(var(--jp-ui-font-size1) / 2) 0\n    var(--jp-ui-font-size1);\n}\n\n.jp-Licenses-Filters label {\n  display: block;\n}\n\n.jp-Licenses-Filters-title {\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  font-size: var(--jp-ui-font-size0);\n  color: var(--jp-ui-font-color0);\n}\n\n.jp-RenderedHTMLCommon.jp-Licenses-Filters ul,\n.jp-RenderedHTMLCommon.jp-Licenses-Filters li {\n  list-style: none;\n  color: var(--jp-ui-font-color0);\n}\n\n.jp-Licenses-Filters input {\n  width: 100%;\n}\n\n.jp-RenderedHTMLCommon.jp-Licenses-Filters ul {\n  padding: 0 0 var(--jp-ui-font-size1) 0;\n  margin: 0;\n  padding-bottom: var(--jp-ui-font-size1);\n}\n\n/* bundles */\n.jp-Licenses-Bundles {\n  background-color: var(--jp-layout-color2);\n  overflow-y: auto;\n  flex: 1;\n}\n\n.jp-Licenses-Bundles .lm-TabBar-content {\n  width: 100%;\n}\n\n.jp-Licenses-Bundles .lm-TabBar-tab {\n  padding: calc(var(--jp-ui-font-size1) / 2);\n  background-color: var(--jp-layout-color1);\n  color: var(--jp-ui-font-color1);\n}\n\n.jp-Licenses-Bundles .lm-TabBar-tabLabel {\n  text-overflow: ellipsis;\n}\n\n.jp-Licenses-Bundles .lm-TabBar-tab label {\n  background-color: var(--jp-layout-color2);\n  border-radius: var(--jp-ui-font-size1);\n  width: calc(2.5 * var(--jp-ui-font-size1));\n  padding: 0 calc(var(--jp-ui-font-size1) / 2);\n  text-align: center;\n  margin-left: calc(var(--jp-ui-font-size1) / 2);\n}\n\n.jp-Licenses-Bundles .lm-TabBar-tab.lm-mod-current {\n  background-color: var(--jp-brand-color1);\n  color: #fff;\n}\n\n.jp-Licenses-Bundles .lm-TabBar-tab.lm-mod-current label {\n  background-color: #fff;\n  color: var(--jp-brand-color1);\n}\n\n/* license grid */\n.jp-Licenses-Grid.jp-RenderedHTMLCommon {\n  min-width: calc(var(--jp-ui-font-size1) * 10);\n  display: flex;\n  flex-direction: column;\n  padding: 0;\n}\n\n.jp-Licenses-Grid.jp-RenderedHTMLCommon form {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  overflow-y: scroll;\n  margin: 0;\n  padding: 0;\n}\n\n.jp-RenderedHTMLCommon.jp-Licenses-Grid table {\n  flex: 1;\n  max-width: 100%;\n  border: solid var(--jp-border-width) var(--jp-border-color2);\n  border-top: 0;\n  border-bottom: 0;\n  margin: 0;\n}\n\n.jp-Licenses-Grid.jp-RenderedHTMLCommon td,\n.jp-Licenses-Grid.jp-RenderedHTMLCommon th {\n  text-align: left;\n}\n\n.jp-Licenses-Grid td:nth-child(1) {\n  max-width: calc(2 * var(--jp-ui-font-size1));\n}\n\n.jp-Licenses-Grid label {\n  width: 100%;\n}\n\n.jp-Licenses .jp-Licenses-Grid.jp-RenderedHTMLCommon code {\n  background-color: transparent;\n  padding: 0;\n}\n\n.jp-Licenses-Grid.jp-RenderedHTMLCommon tr.jp-mod-selected {\n  background-color: var(--jp-brand-color1);\n  color: #fff;\n}\n\n.jp-Licenses-Grid.jp-RenderedHTMLCommon .jp-mod-selected code {\n  color: #fff;\n}\n\n/* license text */\n.jp-Licenses-Text {\n  min-width: calc(10 * var(--jp-ui-font-size1));\n  padding: 0 0 0 var(--jp-ui-font-size1);\n  display: flex;\n  flex-direction: column;\n}\n\n.jp-Licenses-Text h1 {\n  flex: initial;\n  margin-bottom: 0;\n}\n\n.jp-Licenses-Text h1:empty {\n  display: none;\n}\n\n.jp-Licenses-Text blockquote {\n  flex: initial;\n}\n\n.jp-Licenses-Text.jp-RenderedHTMLCommon code {\n  overflow-wrap: anywhere;\n  overflow-y: auto;\n  flex: 1;\n  padding-right: var(--jp-ui-font-size1);\n  margin-bottom: 0;\n  padding-bottom: var(--jp-ui-font-size1);\n}\n\n.jp-Licenses-Text code:empty {\n  display: none;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/apputils/style/licenses.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E,aAAa;AACb;EACE,aAAa;EACb,mBAAmB;EACnB,oBAAoB;EACpB,yCAAyC;AAC3C;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,6CAA6C;EAC7C,yCAAyC;AAC3C;;AAEA;EACE,wCAAwC;AAC1C;;AAEA,YAAY;AACZ;EACE;2BACyB;AAC3B;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,yBAAyB;EACzB,mBAAmB;EACnB,kCAAkC;EAClC,+BAA+B;AACjC;;AAEA;;EAEE,gBAAgB;EAChB,+BAA+B;AACjC;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,sCAAsC;EACtC,SAAS;EACT,uCAAuC;AACzC;;AAEA,YAAY;AACZ;EACE,yCAAyC;EACzC,gBAAgB;EAChB,OAAO;AACT;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,0CAA0C;EAC1C,yCAAyC;EACzC,+BAA+B;AACjC;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,yCAAyC;EACzC,sCAAsC;EACtC,0CAA0C;EAC1C,4CAA4C;EAC5C,kBAAkB;EAClB,8CAA8C;AAChD;;AAEA;EACE,wCAAwC;EACxC,WAAW;AACb;;AAEA;EACE,sBAAsB;EACtB,6BAA6B;AAC/B;;AAEA,iBAAiB;AACjB;EACE,6CAA6C;EAC7C,aAAa;EACb,sBAAsB;EACtB,UAAU;AACZ;;AAEA;EACE,OAAO;EACP,aAAa;EACb,sBAAsB;EACtB,kBAAkB;EAClB,SAAS;EACT,UAAU;AACZ;;AAEA;EACE,OAAO;EACP,eAAe;EACf,4DAA4D;EAC5D,aAAa;EACb,gBAAgB;EAChB,SAAS;AACX;;AAEA;;EAEE,gBAAgB;AAClB;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,6BAA6B;EAC7B,UAAU;AACZ;;AAEA;EACE,wCAAwC;EACxC,WAAW;AACb;;AAEA;EACE,WAAW;AACb;;AAEA,iBAAiB;AACjB;EACE,6CAA6C;EAC7C,sCAAsC;EACtC,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,gBAAgB;AAClB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,uBAAuB;EACvB,gBAAgB;EAChB,OAAO;EACP,sCAAsC;EACtC,gBAAgB;EAChB,uCAAuC;AACzC;;AAEA;EACE,aAAa;AACf\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/* licenses */\\n.jp-Licenses {\\n  display: flex;\\n  flex-direction: row;\\n  align-items: stretch;\\n  background-color: var(--jp-layout-color0);\\n}\\n\\n.jp-Licenses-FormArea {\\n  display: flex;\\n  flex-direction: column;\\n  min-width: calc(10 * var(--jp-ui-font-size1));\\n  width: calc(18 * var(--jp-ui-font-size1));\\n}\\n\\n.jp-Licenses .lm-SplitPanel-handle:hover {\\n  background-color: var(--jp-brand-color2);\\n}\\n\\n/* filters */\\n.jp-Licenses-Filters {\\n  padding: var(--jp-ui-font-size1) calc(var(--jp-ui-font-size1) / 2) 0\\n    var(--jp-ui-font-size1);\\n}\\n\\n.jp-Licenses-Filters label {\\n  display: block;\\n}\\n\\n.jp-Licenses-Filters-title {\\n  font-weight: 600;\\n  text-transform: uppercase;\\n  letter-spacing: 1px;\\n  font-size: var(--jp-ui-font-size0);\\n  color: var(--jp-ui-font-color0);\\n}\\n\\n.jp-RenderedHTMLCommon.jp-Licenses-Filters ul,\\n.jp-RenderedHTMLCommon.jp-Licenses-Filters li {\\n  list-style: none;\\n  color: var(--jp-ui-font-color0);\\n}\\n\\n.jp-Licenses-Filters input {\\n  width: 100%;\\n}\\n\\n.jp-RenderedHTMLCommon.jp-Licenses-Filters ul {\\n  padding: 0 0 var(--jp-ui-font-size1) 0;\\n  margin: 0;\\n  padding-bottom: var(--jp-ui-font-size1);\\n}\\n\\n/* bundles */\\n.jp-Licenses-Bundles {\\n  background-color: var(--jp-layout-color2);\\n  overflow-y: auto;\\n  flex: 1;\\n}\\n\\n.jp-Licenses-Bundles .lm-TabBar-content {\\n  width: 100%;\\n}\\n\\n.jp-Licenses-Bundles .lm-TabBar-tab {\\n  padding: calc(var(--jp-ui-font-size1) / 2);\\n  background-color: var(--jp-layout-color1);\\n  color: var(--jp-ui-font-color1);\\n}\\n\\n.jp-Licenses-Bundles .lm-TabBar-tabLabel {\\n  text-overflow: ellipsis;\\n}\\n\\n.jp-Licenses-Bundles .lm-TabBar-tab label {\\n  background-color: var(--jp-layout-color2);\\n  border-radius: var(--jp-ui-font-size1);\\n  width: calc(2.5 * var(--jp-ui-font-size1));\\n  padding: 0 calc(var(--jp-ui-font-size1) / 2);\\n  text-align: center;\\n  margin-left: calc(var(--jp-ui-font-size1) / 2);\\n}\\n\\n.jp-Licenses-Bundles .lm-TabBar-tab.lm-mod-current {\\n  background-color: var(--jp-brand-color1);\\n  color: #fff;\\n}\\n\\n.jp-Licenses-Bundles .lm-TabBar-tab.lm-mod-current label {\\n  background-color: #fff;\\n  color: var(--jp-brand-color1);\\n}\\n\\n/* license grid */\\n.jp-Licenses-Grid.jp-RenderedHTMLCommon {\\n  min-width: calc(var(--jp-ui-font-size1) * 10);\\n  display: flex;\\n  flex-direction: column;\\n  padding: 0;\\n}\\n\\n.jp-Licenses-Grid.jp-RenderedHTMLCommon form {\\n  flex: 1;\\n  display: flex;\\n  flex-direction: column;\\n  overflow-y: scroll;\\n  margin: 0;\\n  padding: 0;\\n}\\n\\n.jp-RenderedHTMLCommon.jp-Licenses-Grid table {\\n  flex: 1;\\n  max-width: 100%;\\n  border: solid var(--jp-border-width) var(--jp-border-color2);\\n  border-top: 0;\\n  border-bottom: 0;\\n  margin: 0;\\n}\\n\\n.jp-Licenses-Grid.jp-RenderedHTMLCommon td,\\n.jp-Licenses-Grid.jp-RenderedHTMLCommon th {\\n  text-align: left;\\n}\\n\\n.jp-Licenses-Grid td:nth-child(1) {\\n  max-width: calc(2 * var(--jp-ui-font-size1));\\n}\\n\\n.jp-Licenses-Grid label {\\n  width: 100%;\\n}\\n\\n.jp-Licenses .jp-Licenses-Grid.jp-RenderedHTMLCommon code {\\n  background-color: transparent;\\n  padding: 0;\\n}\\n\\n.jp-Licenses-Grid.jp-RenderedHTMLCommon tr.jp-mod-selected {\\n  background-color: var(--jp-brand-color1);\\n  color: #fff;\\n}\\n\\n.jp-Licenses-Grid.jp-RenderedHTMLCommon .jp-mod-selected code {\\n  color: #fff;\\n}\\n\\n/* license text */\\n.jp-Licenses-Text {\\n  min-width: calc(10 * var(--jp-ui-font-size1));\\n  padding: 0 0 0 var(--jp-ui-font-size1);\\n  display: flex;\\n  flex-direction: column;\\n}\\n\\n.jp-Licenses-Text h1 {\\n  flex: initial;\\n  margin-bottom: 0;\\n}\\n\\n.jp-Licenses-Text h1:empty {\\n  display: none;\\n}\\n\\n.jp-Licenses-Text blockquote {\\n  flex: initial;\\n}\\n\\n.jp-Licenses-Text.jp-RenderedHTMLCommon code {\\n  overflow-wrap: anywhere;\\n  overflow-y: auto;\\n  flex: 1;\\n  padding-right: var(--jp-ui-font-size1);\\n  margin-bottom: 0;\\n  padding-bottom: var(--jp-ui-font-size1);\\n}\\n\\n.jp-Licenses-Text code:empty {\\n  display: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-MainAreaWidget > :focus {\n  outline: none;\n}\n\n.jp-MainAreaWidget .jp-MainAreaWidget-error {\n  padding: 6px;\n}\n\n.jp-MainAreaWidget .jp-MainAreaWidget-error > pre {\n  width: auto;\n  padding: 10px;\n  background: var(--jp-error-color3);\n  border: var(--jp-border-width) solid var(--jp-error-color1);\n  border-radius: var(--jp-border-radius);\n  color: var(--jp-ui-font-color1);\n  font-size: var(--jp-ui-font-size1);\n  white-space: pre-wrap;\n  word-wrap: break-word;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/apputils/style/mainareawidget.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,aAAa;AACf;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,WAAW;EACX,aAAa;EACb,kCAAkC;EAClC,2DAA2D;EAC3D,sCAAsC;EACtC,+BAA+B;EAC/B,kCAAkC;EAClC,qBAAqB;EACrB,qBAAqB;AACvB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-MainAreaWidget > :focus {\\n  outline: none;\\n}\\n\\n.jp-MainAreaWidget .jp-MainAreaWidget-error {\\n  padding: 6px;\\n}\\n\\n.jp-MainAreaWidget .jp-MainAreaWidget-error > pre {\\n  width: auto;\\n  padding: 10px;\\n  background: var(--jp-error-color3);\\n  border: var(--jp-border-width) solid var(--jp-error-color1);\\n  border-radius: var(--jp-border-radius);\\n  color: var(--jp-ui-font-color1);\\n  font-size: var(--jp-ui-font-size1);\\n  white-space: pre-wrap;\\n  word-wrap: break-word;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/**\n * google-material-color v1.2.6\n * https://github.com/danlevan/google-material-color\n */\n:root {\n  --md-red-50: #ffebee;\n  --md-red-100: #ffcdd2;\n  --md-red-200: #ef9a9a;\n  --md-red-300: #e57373;\n  --md-red-400: #ef5350;\n  --md-red-500: #f44336;\n  --md-red-600: #e53935;\n  --md-red-700: #d32f2f;\n  --md-red-800: #c62828;\n  --md-red-900: #b71c1c;\n  --md-red-A100: #ff8a80;\n  --md-red-A200: #ff5252;\n  --md-red-A400: #ff1744;\n  --md-red-A700: #d50000;\n  --md-pink-50: #fce4ec;\n  --md-pink-100: #f8bbd0;\n  --md-pink-200: #f48fb1;\n  --md-pink-300: #f06292;\n  --md-pink-400: #ec407a;\n  --md-pink-500: #e91e63;\n  --md-pink-600: #d81b60;\n  --md-pink-700: #c2185b;\n  --md-pink-800: #ad1457;\n  --md-pink-900: #880e4f;\n  --md-pink-A100: #ff80ab;\n  --md-pink-A200: #ff4081;\n  --md-pink-A400: #f50057;\n  --md-pink-A700: #c51162;\n  --md-purple-50: #f3e5f5;\n  --md-purple-100: #e1bee7;\n  --md-purple-200: #ce93d8;\n  --md-purple-300: #ba68c8;\n  --md-purple-400: #ab47bc;\n  --md-purple-500: #9c27b0;\n  --md-purple-600: #8e24aa;\n  --md-purple-700: #7b1fa2;\n  --md-purple-800: #6a1b9a;\n  --md-purple-900: #4a148c;\n  --md-purple-A100: #ea80fc;\n  --md-purple-A200: #e040fb;\n  --md-purple-A400: #d500f9;\n  --md-purple-A700: #a0f;\n  --md-deep-purple-50: #ede7f6;\n  --md-deep-purple-100: #d1c4e9;\n  --md-deep-purple-200: #b39ddb;\n  --md-deep-purple-300: #9575cd;\n  --md-deep-purple-400: #7e57c2;\n  --md-deep-purple-500: #673ab7;\n  --md-deep-purple-600: #5e35b1;\n  --md-deep-purple-700: #512da8;\n  --md-deep-purple-800: #4527a0;\n  --md-deep-purple-900: #311b92;\n  --md-deep-purple-A100: #b388ff;\n  --md-deep-purple-A200: #7c4dff;\n  --md-deep-purple-A400: #651fff;\n  --md-deep-purple-A700: #6200ea;\n  --md-indigo-50: #e8eaf6;\n  --md-indigo-100: #c5cae9;\n  --md-indigo-200: #9fa8da;\n  --md-indigo-300: #7986cb;\n  --md-indigo-400: #5c6bc0;\n  --md-indigo-500: #3f51b5;\n  --md-indigo-600: #3949ab;\n  --md-indigo-700: #303f9f;\n  --md-indigo-800: #283593;\n  --md-indigo-900: #1a237e;\n  --md-indigo-A100: #8c9eff;\n  --md-indigo-A200: #536dfe;\n  --md-indigo-A400: #3d5afe;\n  --md-indigo-A700: #304ffe;\n  --md-blue-50: #e3f2fd;\n  --md-blue-100: #bbdefb;\n  --md-blue-200: #90caf9;\n  --md-blue-300: #64b5f6;\n  --md-blue-400: #42a5f5;\n  --md-blue-500: #2196f3;\n  --md-blue-600: #1e88e5;\n  --md-blue-700: #1976d2;\n  --md-blue-800: #1565c0;\n  --md-blue-900: #0d47a1;\n  --md-blue-A100: #82b1ff;\n  --md-blue-A200: #448aff;\n  --md-blue-A400: #2979ff;\n  --md-blue-A700: #2962ff;\n  --md-light-blue-50: #e1f5fe;\n  --md-light-blue-100: #b3e5fc;\n  --md-light-blue-200: #81d4fa;\n  --md-light-blue-300: #4fc3f7;\n  --md-light-blue-400: #29b6f6;\n  --md-light-blue-500: #03a9f4;\n  --md-light-blue-600: #039be5;\n  --md-light-blue-700: #0288d1;\n  --md-light-blue-800: #0277bd;\n  --md-light-blue-900: #01579b;\n  --md-light-blue-A100: #80d8ff;\n  --md-light-blue-A200: #40c4ff;\n  --md-light-blue-A400: #00b0ff;\n  --md-light-blue-A700: #0091ea;\n  --md-cyan-50: #e0f7fa;\n  --md-cyan-100: #b2ebf2;\n  --md-cyan-200: #80deea;\n  --md-cyan-300: #4dd0e1;\n  --md-cyan-400: #26c6da;\n  --md-cyan-500: #00bcd4;\n  --md-cyan-600: #00acc1;\n  --md-cyan-700: #0097a7;\n  --md-cyan-800: #00838f;\n  --md-cyan-900: #006064;\n  --md-cyan-A100: #84ffff;\n  --md-cyan-A200: #18ffff;\n  --md-cyan-A400: #00e5ff;\n  --md-cyan-A700: #00b8d4;\n  --md-teal-50: #e0f2f1;\n  --md-teal-100: #b2dfdb;\n  --md-teal-200: #80cbc4;\n  --md-teal-300: #4db6ac;\n  --md-teal-400: #26a69a;\n  --md-teal-500: #009688;\n  --md-teal-600: #00897b;\n  --md-teal-700: #00796b;\n  --md-teal-800: #00695c;\n  --md-teal-900: #004d40;\n  --md-teal-A100: #a7ffeb;\n  --md-teal-A200: #64ffda;\n  --md-teal-A400: #1de9b6;\n  --md-teal-A700: #00bfa5;\n  --md-green-50: #e8f5e9;\n  --md-green-100: #c8e6c9;\n  --md-green-200: #a5d6a7;\n  --md-green-300: #81c784;\n  --md-green-400: #66bb6a;\n  --md-green-500: #4caf50;\n  --md-green-600: #43a047;\n  --md-green-700: #388e3c;\n  --md-green-800: #2e7d32;\n  --md-green-900: #1b5e20;\n  --md-green-A100: #b9f6ca;\n  --md-green-A200: #69f0ae;\n  --md-green-A400: #00e676;\n  --md-green-A700: #00c853;\n  --md-light-green-50: #f1f8e9;\n  --md-light-green-100: #dcedc8;\n  --md-light-green-200: #c5e1a5;\n  --md-light-green-300: #aed581;\n  --md-light-green-400: #9ccc65;\n  --md-light-green-500: #8bc34a;\n  --md-light-green-600: #7cb342;\n  --md-light-green-700: #689f38;\n  --md-light-green-800: #558b2f;\n  --md-light-green-900: #33691e;\n  --md-light-green-A100: #ccff90;\n  --md-light-green-A200: #b2ff59;\n  --md-light-green-A400: #76ff03;\n  --md-light-green-A700: #64dd17;\n  --md-lime-50: #f9fbe7;\n  --md-lime-100: #f0f4c3;\n  --md-lime-200: #e6ee9c;\n  --md-lime-300: #dce775;\n  --md-lime-400: #d4e157;\n  --md-lime-500: #cddc39;\n  --md-lime-600: #c0ca33;\n  --md-lime-700: #afb42b;\n  --md-lime-800: #9e9d24;\n  --md-lime-900: #827717;\n  --md-lime-A100: #f4ff81;\n  --md-lime-A200: #eeff41;\n  --md-lime-A400: #c6ff00;\n  --md-lime-A700: #aeea00;\n  --md-yellow-50: #fffde7;\n  --md-yellow-100: #fff9c4;\n  --md-yellow-200: #fff59d;\n  --md-yellow-300: #fff176;\n  --md-yellow-400: #ffee58;\n  --md-yellow-500: #ffeb3b;\n  --md-yellow-600: #fdd835;\n  --md-yellow-700: #fbc02d;\n  --md-yellow-800: #f9a825;\n  --md-yellow-900: #f57f17;\n  --md-yellow-A100: #ffff8d;\n  --md-yellow-A200: #ff0;\n  --md-yellow-A400: #ffea00;\n  --md-yellow-A700: #ffd600;\n  --md-amber-50: #fff8e1;\n  --md-amber-100: #ffecb3;\n  --md-amber-200: #ffe082;\n  --md-amber-300: #ffd54f;\n  --md-amber-400: #ffca28;\n  --md-amber-500: #ffc107;\n  --md-amber-600: #ffb300;\n  --md-amber-700: #ffa000;\n  --md-amber-800: #ff8f00;\n  --md-amber-900: #ff6f00;\n  --md-amber-A100: #ffe57f;\n  --md-amber-A200: #ffd740;\n  --md-amber-A400: #ffc400;\n  --md-amber-A700: #ffab00;\n  --md-orange-50: #fff3e0;\n  --md-orange-100: #ffe0b2;\n  --md-orange-200: #ffcc80;\n  --md-orange-300: #ffb74d;\n  --md-orange-400: #ffa726;\n  --md-orange-500: #ff9800;\n  --md-orange-600: #fb8c00;\n  --md-orange-700: #f57c00;\n  --md-orange-800: #ef6c00;\n  --md-orange-900: #e65100;\n  --md-orange-A100: #ffd180;\n  --md-orange-A200: #ffab40;\n  --md-orange-A400: #ff9100;\n  --md-orange-A700: #ff6d00;\n  --md-deep-orange-50: #fbe9e7;\n  --md-deep-orange-100: #ffccbc;\n  --md-deep-orange-200: #ffab91;\n  --md-deep-orange-300: #ff8a65;\n  --md-deep-orange-400: #ff7043;\n  --md-deep-orange-500: #ff5722;\n  --md-deep-orange-600: #f4511e;\n  --md-deep-orange-700: #e64a19;\n  --md-deep-orange-800: #d84315;\n  --md-deep-orange-900: #bf360c;\n  --md-deep-orange-A100: #ff9e80;\n  --md-deep-orange-A200: #ff6e40;\n  --md-deep-orange-A400: #ff3d00;\n  --md-deep-orange-A700: #dd2c00;\n  --md-brown-50: #efebe9;\n  --md-brown-100: #d7ccc8;\n  --md-brown-200: #bcaaa4;\n  --md-brown-300: #a1887f;\n  --md-brown-400: #8d6e63;\n  --md-brown-500: #795548;\n  --md-brown-600: #6d4c41;\n  --md-brown-700: #5d4037;\n  --md-brown-800: #4e342e;\n  --md-brown-900: #3e2723;\n  --md-grey-50: #fafafa;\n  --md-grey-100: #f5f5f5;\n  --md-grey-200: #eee;\n  --md-grey-300: #e0e0e0;\n  --md-grey-400: #bdbdbd;\n  --md-grey-500: #9e9e9e;\n  --md-grey-600: #757575;\n  --md-grey-700: #616161;\n  --md-grey-800: #424242;\n  --md-grey-900: #212121;\n  --md-blue-grey-50: #eceff1;\n  --md-blue-grey-100: #cfd8dc;\n  --md-blue-grey-200: #b0bec5;\n  --md-blue-grey-300: #90a4ae;\n  --md-blue-grey-400: #78909c;\n  --md-blue-grey-500: #607d8b;\n  --md-blue-grey-600: #546e7a;\n  --md-blue-grey-700: #455a64;\n  --md-blue-grey-800: #37474f;\n  --md-blue-grey-900: #263238;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/apputils/style/materialcolors.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;EAGE;AACF;EACE,oBAAoB;EACpB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,qBAAqB;EACrB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,sBAAsB;EACtB,4BAA4B;EAC5B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,uBAAuB;EACvB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,qBAAqB;EACrB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,2BAA2B;EAC3B,4BAA4B;EAC5B,4BAA4B;EAC5B,4BAA4B;EAC5B,4BAA4B;EAC5B,4BAA4B;EAC5B,4BAA4B;EAC5B,4BAA4B;EAC5B,4BAA4B;EAC5B,4BAA4B;EAC5B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,qBAAqB;EACrB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,qBAAqB;EACrB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,sBAAsB;EACtB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,4BAA4B;EAC5B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,qBAAqB;EACrB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,yBAAyB;EACzB,sBAAsB;EACtB,yBAAyB;EACzB,yBAAyB;EACzB,sBAAsB;EACtB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,uBAAuB;EACvB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,wBAAwB;EACxB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,yBAAyB;EACzB,4BAA4B;EAC5B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,6BAA6B;EAC7B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,8BAA8B;EAC9B,sBAAsB;EACtB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;EACvB,qBAAqB;EACrB,sBAAsB;EACtB,mBAAmB;EACnB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,sBAAsB;EACtB,0BAA0B;EAC1B,2BAA2B;EAC3B,2BAA2B;EAC3B,2BAA2B;EAC3B,2BAA2B;EAC3B,2BAA2B;EAC3B,2BAA2B;EAC3B,2BAA2B;EAC3B,2BAA2B;EAC3B,2BAA2B;AAC7B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/**\\n * google-material-color v1.2.6\\n * https://github.com/danlevan/google-material-color\\n */\\n:root {\\n  --md-red-50: #ffebee;\\n  --md-red-100: #ffcdd2;\\n  --md-red-200: #ef9a9a;\\n  --md-red-300: #e57373;\\n  --md-red-400: #ef5350;\\n  --md-red-500: #f44336;\\n  --md-red-600: #e53935;\\n  --md-red-700: #d32f2f;\\n  --md-red-800: #c62828;\\n  --md-red-900: #b71c1c;\\n  --md-red-A100: #ff8a80;\\n  --md-red-A200: #ff5252;\\n  --md-red-A400: #ff1744;\\n  --md-red-A700: #d50000;\\n  --md-pink-50: #fce4ec;\\n  --md-pink-100: #f8bbd0;\\n  --md-pink-200: #f48fb1;\\n  --md-pink-300: #f06292;\\n  --md-pink-400: #ec407a;\\n  --md-pink-500: #e91e63;\\n  --md-pink-600: #d81b60;\\n  --md-pink-700: #c2185b;\\n  --md-pink-800: #ad1457;\\n  --md-pink-900: #880e4f;\\n  --md-pink-A100: #ff80ab;\\n  --md-pink-A200: #ff4081;\\n  --md-pink-A400: #f50057;\\n  --md-pink-A700: #c51162;\\n  --md-purple-50: #f3e5f5;\\n  --md-purple-100: #e1bee7;\\n  --md-purple-200: #ce93d8;\\n  --md-purple-300: #ba68c8;\\n  --md-purple-400: #ab47bc;\\n  --md-purple-500: #9c27b0;\\n  --md-purple-600: #8e24aa;\\n  --md-purple-700: #7b1fa2;\\n  --md-purple-800: #6a1b9a;\\n  --md-purple-900: #4a148c;\\n  --md-purple-A100: #ea80fc;\\n  --md-purple-A200: #e040fb;\\n  --md-purple-A400: #d500f9;\\n  --md-purple-A700: #a0f;\\n  --md-deep-purple-50: #ede7f6;\\n  --md-deep-purple-100: #d1c4e9;\\n  --md-deep-purple-200: #b39ddb;\\n  --md-deep-purple-300: #9575cd;\\n  --md-deep-purple-400: #7e57c2;\\n  --md-deep-purple-500: #673ab7;\\n  --md-deep-purple-600: #5e35b1;\\n  --md-deep-purple-700: #512da8;\\n  --md-deep-purple-800: #4527a0;\\n  --md-deep-purple-900: #311b92;\\n  --md-deep-purple-A100: #b388ff;\\n  --md-deep-purple-A200: #7c4dff;\\n  --md-deep-purple-A400: #651fff;\\n  --md-deep-purple-A700: #6200ea;\\n  --md-indigo-50: #e8eaf6;\\n  --md-indigo-100: #c5cae9;\\n  --md-indigo-200: #9fa8da;\\n  --md-indigo-300: #7986cb;\\n  --md-indigo-400: #5c6bc0;\\n  --md-indigo-500: #3f51b5;\\n  --md-indigo-600: #3949ab;\\n  --md-indigo-700: #303f9f;\\n  --md-indigo-800: #283593;\\n  --md-indigo-900: #1a237e;\\n  --md-indigo-A100: #8c9eff;\\n  --md-indigo-A200: #536dfe;\\n  --md-indigo-A400: #3d5afe;\\n  --md-indigo-A700: #304ffe;\\n  --md-blue-50: #e3f2fd;\\n  --md-blue-100: #bbdefb;\\n  --md-blue-200: #90caf9;\\n  --md-blue-300: #64b5f6;\\n  --md-blue-400: #42a5f5;\\n  --md-blue-500: #2196f3;\\n  --md-blue-600: #1e88e5;\\n  --md-blue-700: #1976d2;\\n  --md-blue-800: #1565c0;\\n  --md-blue-900: #0d47a1;\\n  --md-blue-A100: #82b1ff;\\n  --md-blue-A200: #448aff;\\n  --md-blue-A400: #2979ff;\\n  --md-blue-A700: #2962ff;\\n  --md-light-blue-50: #e1f5fe;\\n  --md-light-blue-100: #b3e5fc;\\n  --md-light-blue-200: #81d4fa;\\n  --md-light-blue-300: #4fc3f7;\\n  --md-light-blue-400: #29b6f6;\\n  --md-light-blue-500: #03a9f4;\\n  --md-light-blue-600: #039be5;\\n  --md-light-blue-700: #0288d1;\\n  --md-light-blue-800: #0277bd;\\n  --md-light-blue-900: #01579b;\\n  --md-light-blue-A100: #80d8ff;\\n  --md-light-blue-A200: #40c4ff;\\n  --md-light-blue-A400: #00b0ff;\\n  --md-light-blue-A700: #0091ea;\\n  --md-cyan-50: #e0f7fa;\\n  --md-cyan-100: #b2ebf2;\\n  --md-cyan-200: #80deea;\\n  --md-cyan-300: #4dd0e1;\\n  --md-cyan-400: #26c6da;\\n  --md-cyan-500: #00bcd4;\\n  --md-cyan-600: #00acc1;\\n  --md-cyan-700: #0097a7;\\n  --md-cyan-800: #00838f;\\n  --md-cyan-900: #006064;\\n  --md-cyan-A100: #84ffff;\\n  --md-cyan-A200: #18ffff;\\n  --md-cyan-A400: #00e5ff;\\n  --md-cyan-A700: #00b8d4;\\n  --md-teal-50: #e0f2f1;\\n  --md-teal-100: #b2dfdb;\\n  --md-teal-200: #80cbc4;\\n  --md-teal-300: #4db6ac;\\n  --md-teal-400: #26a69a;\\n  --md-teal-500: #009688;\\n  --md-teal-600: #00897b;\\n  --md-teal-700: #00796b;\\n  --md-teal-800: #00695c;\\n  --md-teal-900: #004d40;\\n  --md-teal-A100: #a7ffeb;\\n  --md-teal-A200: #64ffda;\\n  --md-teal-A400: #1de9b6;\\n  --md-teal-A700: #00bfa5;\\n  --md-green-50: #e8f5e9;\\n  --md-green-100: #c8e6c9;\\n  --md-green-200: #a5d6a7;\\n  --md-green-300: #81c784;\\n  --md-green-400: #66bb6a;\\n  --md-green-500: #4caf50;\\n  --md-green-600: #43a047;\\n  --md-green-700: #388e3c;\\n  --md-green-800: #2e7d32;\\n  --md-green-900: #1b5e20;\\n  --md-green-A100: #b9f6ca;\\n  --md-green-A200: #69f0ae;\\n  --md-green-A400: #00e676;\\n  --md-green-A700: #00c853;\\n  --md-light-green-50: #f1f8e9;\\n  --md-light-green-100: #dcedc8;\\n  --md-light-green-200: #c5e1a5;\\n  --md-light-green-300: #aed581;\\n  --md-light-green-400: #9ccc65;\\n  --md-light-green-500: #8bc34a;\\n  --md-light-green-600: #7cb342;\\n  --md-light-green-700: #689f38;\\n  --md-light-green-800: #558b2f;\\n  --md-light-green-900: #33691e;\\n  --md-light-green-A100: #ccff90;\\n  --md-light-green-A200: #b2ff59;\\n  --md-light-green-A400: #76ff03;\\n  --md-light-green-A700: #64dd17;\\n  --md-lime-50: #f9fbe7;\\n  --md-lime-100: #f0f4c3;\\n  --md-lime-200: #e6ee9c;\\n  --md-lime-300: #dce775;\\n  --md-lime-400: #d4e157;\\n  --md-lime-500: #cddc39;\\n  --md-lime-600: #c0ca33;\\n  --md-lime-700: #afb42b;\\n  --md-lime-800: #9e9d24;\\n  --md-lime-900: #827717;\\n  --md-lime-A100: #f4ff81;\\n  --md-lime-A200: #eeff41;\\n  --md-lime-A400: #c6ff00;\\n  --md-lime-A700: #aeea00;\\n  --md-yellow-50: #fffde7;\\n  --md-yellow-100: #fff9c4;\\n  --md-yellow-200: #fff59d;\\n  --md-yellow-300: #fff176;\\n  --md-yellow-400: #ffee58;\\n  --md-yellow-500: #ffeb3b;\\n  --md-yellow-600: #fdd835;\\n  --md-yellow-700: #fbc02d;\\n  --md-yellow-800: #f9a825;\\n  --md-yellow-900: #f57f17;\\n  --md-yellow-A100: #ffff8d;\\n  --md-yellow-A200: #ff0;\\n  --md-yellow-A400: #ffea00;\\n  --md-yellow-A700: #ffd600;\\n  --md-amber-50: #fff8e1;\\n  --md-amber-100: #ffecb3;\\n  --md-amber-200: #ffe082;\\n  --md-amber-300: #ffd54f;\\n  --md-amber-400: #ffca28;\\n  --md-amber-500: #ffc107;\\n  --md-amber-600: #ffb300;\\n  --md-amber-700: #ffa000;\\n  --md-amber-800: #ff8f00;\\n  --md-amber-900: #ff6f00;\\n  --md-amber-A100: #ffe57f;\\n  --md-amber-A200: #ffd740;\\n  --md-amber-A400: #ffc400;\\n  --md-amber-A700: #ffab00;\\n  --md-orange-50: #fff3e0;\\n  --md-orange-100: #ffe0b2;\\n  --md-orange-200: #ffcc80;\\n  --md-orange-300: #ffb74d;\\n  --md-orange-400: #ffa726;\\n  --md-orange-500: #ff9800;\\n  --md-orange-600: #fb8c00;\\n  --md-orange-700: #f57c00;\\n  --md-orange-800: #ef6c00;\\n  --md-orange-900: #e65100;\\n  --md-orange-A100: #ffd180;\\n  --md-orange-A200: #ffab40;\\n  --md-orange-A400: #ff9100;\\n  --md-orange-A700: #ff6d00;\\n  --md-deep-orange-50: #fbe9e7;\\n  --md-deep-orange-100: #ffccbc;\\n  --md-deep-orange-200: #ffab91;\\n  --md-deep-orange-300: #ff8a65;\\n  --md-deep-orange-400: #ff7043;\\n  --md-deep-orange-500: #ff5722;\\n  --md-deep-orange-600: #f4511e;\\n  --md-deep-orange-700: #e64a19;\\n  --md-deep-orange-800: #d84315;\\n  --md-deep-orange-900: #bf360c;\\n  --md-deep-orange-A100: #ff9e80;\\n  --md-deep-orange-A200: #ff6e40;\\n  --md-deep-orange-A400: #ff3d00;\\n  --md-deep-orange-A700: #dd2c00;\\n  --md-brown-50: #efebe9;\\n  --md-brown-100: #d7ccc8;\\n  --md-brown-200: #bcaaa4;\\n  --md-brown-300: #a1887f;\\n  --md-brown-400: #8d6e63;\\n  --md-brown-500: #795548;\\n  --md-brown-600: #6d4c41;\\n  --md-brown-700: #5d4037;\\n  --md-brown-800: #4e342e;\\n  --md-brown-900: #3e2723;\\n  --md-grey-50: #fafafa;\\n  --md-grey-100: #f5f5f5;\\n  --md-grey-200: #eee;\\n  --md-grey-300: #e0e0e0;\\n  --md-grey-400: #bdbdbd;\\n  --md-grey-500: #9e9e9e;\\n  --md-grey-600: #757575;\\n  --md-grey-700: #616161;\\n  --md-grey-800: #424242;\\n  --md-grey-900: #212121;\\n  --md-blue-grey-50: #eceff1;\\n  --md-blue-grey-100: #cfd8dc;\\n  --md-blue-grey-200: #b0bec5;\\n  --md-blue-grey-300: #90a4ae;\\n  --md-blue-grey-400: #78909c;\\n  --md-blue-grey-500: #607d8b;\\n  --md-blue-grey-600: #546e7a;\\n  --md-blue-grey-700: #455a64;\\n  --md-blue-grey-800: #37474f;\\n  --md-blue-grey-900: #263238;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/* @deprecated dead code to be removed in JupyterLab 5 */\n.jp-Toolbar-item.jp-Toolbar-kernelStatus {\n  display: inline-block;\n  width: 32px;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 16px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/apputils/style/toolbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF,wDAAwD;AACxD;EACE,qBAAqB;EACrB,WAAW;EACX,4BAA4B;EAC5B,2BAA2B;EAC3B,qBAAqB;AACvB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/* @deprecated dead code to be removed in JupyterLab 5 */\\n.jp-Toolbar-item.jp-Toolbar-kernelStatus {\\n  display: inline-block;\\n  width: 32px;\\n  background-repeat: no-repeat;\\n  background-position: center;\\n  background-size: 16px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.jp-cell-button .jp-icon3[fill] {\n  fill: var(--jp-inverse-layout-color4);\n}\n\n.jp-cell-button:hover .jp-icon3[fill] {\n  fill: var(--jp-inverse-layout-color2);\n}\n\n.jp-toolbar-overlap .jp-cell-toolbar {\n  display: none;\n}\n\n.jp-cell-toolbar {\n  display: flex;\n  flex-direction: row;\n  padding: 0;\n  min-height: 25px;\n  z-index: 6;\n  position: absolute;\n  right: 3px;\n\n  /* Override .jp-Toolbar */\n  background-color: transparent;\n  border-bottom: inherit;\n  box-shadow: none;\n}\n\n/* Overrides for mobile view hiding cell toolbar */\n@media only screen and (width <= 760px) {\n  .jp-cell-toolbar {\n    display: none;\n  }\n}\n\n.jp-cell-toolbar button.jp-ToolbarButtonComponent {\n  cursor: pointer;\n}\n\n.jp-cell-toolbar .jp-ToolbarButton button {\n  display: none;\n}\n\n.jp-cell-toolbar .jp-ToolbarButton .jp-cell-all,\n.jp-CodeCell .jp-ToolbarButton .jp-cell-code,\n.jp-MarkdownCell .jp-ToolbarButton .jp-cell-markdown,\n.jp-RawCell .jp-ToolbarButton .jp-cell-raw {\n  display: block;\n}\n\n.jp-cell-toolbar .jp-Toolbar-spacer {\n  flex: 1 1 auto;\n}\n\n.jp-cell-mod-click {\n  cursor: pointer;\n}\n\n/* Custom styling for rendered markdown cells so that cell toolbar is visible */\n.jp-MarkdownOutput {\n  border-width: var(--jp-border-width);\n  border-color: transparent;\n  border-style: solid;\n}\n\n.jp-mod-active .jp-MarkdownOutput {\n  border-color: var(--jp-cell-editor-border-color);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/cell-toolbar/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,UAAU;EACV,gBAAgB;EAChB,UAAU;EACV,kBAAkB;EAClB,UAAU;;EAEV,yBAAyB;EACzB,6BAA6B;EAC7B,sBAAsB;EACtB,gBAAgB;AAClB;;AAEA,kDAAkD;AAClD;EACE;IACE,aAAa;EACf;AACF;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,aAAa;AACf;;AAEA;;;;EAIE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,eAAe;AACjB;;AAEA,+EAA+E;AAC/E;EACE,oCAAoC;EACpC,yBAAyB;EACzB,mBAAmB;AACrB;;AAEA;EACE,gDAAgD;AAClD\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.jp-cell-button .jp-icon3[fill] {\\n  fill: var(--jp-inverse-layout-color4);\\n}\\n\\n.jp-cell-button:hover .jp-icon3[fill] {\\n  fill: var(--jp-inverse-layout-color2);\\n}\\n\\n.jp-toolbar-overlap .jp-cell-toolbar {\\n  display: none;\\n}\\n\\n.jp-cell-toolbar {\\n  display: flex;\\n  flex-direction: row;\\n  padding: 0;\\n  min-height: 25px;\\n  z-index: 6;\\n  position: absolute;\\n  right: 3px;\\n\\n  /* Override .jp-Toolbar */\\n  background-color: transparent;\\n  border-bottom: inherit;\\n  box-shadow: none;\\n}\\n\\n/* Overrides for mobile view hiding cell toolbar */\\n@media only screen and (width <= 760px) {\\n  .jp-cell-toolbar {\\n    display: none;\\n  }\\n}\\n\\n.jp-cell-toolbar button.jp-ToolbarButtonComponent {\\n  cursor: pointer;\\n}\\n\\n.jp-cell-toolbar .jp-ToolbarButton button {\\n  display: none;\\n}\\n\\n.jp-cell-toolbar .jp-ToolbarButton .jp-cell-all,\\n.jp-CodeCell .jp-ToolbarButton .jp-cell-code,\\n.jp-MarkdownCell .jp-ToolbarButton .jp-cell-markdown,\\n.jp-RawCell .jp-ToolbarButton .jp-cell-raw {\\n  display: block;\\n}\\n\\n.jp-cell-toolbar .jp-Toolbar-spacer {\\n  flex: 1 1 auto;\\n}\\n\\n.jp-cell-mod-click {\\n  cursor: pointer;\\n}\\n\\n/* Custom styling for rendered markdown cells so that cell toolbar is visible */\\n.jp-MarkdownOutput {\\n  border-width: var(--jp-border-width);\\n  border-color: transparent;\\n  border-style: solid;\\n}\\n\\n.jp-mod-active .jp-MarkdownOutput {\\n  border-color: var(--jp-cell-editor-border-color);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./collapser.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./headerfooter.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./inputarea.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./placeholder.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./widget.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/cells/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n@import './collapser.css';\\n@import './headerfooter.css';\\n@import './inputarea.css';\\n@import './placeholder.css';\\n@import './widget.css';\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-Collapser {\n  flex: 0 0 var(--jp-cell-collapser-width);\n  padding: 0;\n  margin: 0;\n  border: none;\n  outline: none;\n  background: transparent;\n  border-radius: var(--jp-border-radius);\n  opacity: 1;\n}\n\n.jp-Collapser-child {\n  display: block;\n  width: 100%;\n  box-sizing: border-box;\n\n  /* height: 100% doesn't work because the height of its parent is computed from content */\n  position: absolute;\n  top: 0;\n  bottom: 0;\n}\n\n/*-----------------------------------------------------------------------------\n| Printing\n|----------------------------------------------------------------------------*/\n\n/*\nHiding collapsers in print mode.\n\nNote: input and output wrappers have \"display: block\" property in print mode.\n*/\n\n@media print {\n  .jp-Collapser {\n    display: none;\n  }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/cells/style/collapser.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,wCAAwC;EACxC,UAAU;EACV,SAAS;EACT,YAAY;EACZ,aAAa;EACb,uBAAuB;EACvB,sCAAsC;EACtC,UAAU;AACZ;;AAEA;EACE,cAAc;EACd,WAAW;EACX,sBAAsB;;EAEtB,wFAAwF;EACxF,kBAAkB;EAClB,MAAM;EACN,SAAS;AACX;;AAEA;;8EAE8E;;AAE9E;;;;CAIC;;AAED;EACE;IACE,aAAa;EACf;AACF\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Collapser {\\n  flex: 0 0 var(--jp-cell-collapser-width);\\n  padding: 0;\\n  margin: 0;\\n  border: none;\\n  outline: none;\\n  background: transparent;\\n  border-radius: var(--jp-border-radius);\\n  opacity: 1;\\n}\\n\\n.jp-Collapser-child {\\n  display: block;\\n  width: 100%;\\n  box-sizing: border-box;\\n\\n  /* height: 100% doesn't work because the height of its parent is computed from content */\\n  position: absolute;\\n  top: 0;\\n  bottom: 0;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Printing\\n|----------------------------------------------------------------------------*/\\n\\n/*\\nHiding collapsers in print mode.\\n\\nNote: input and output wrappers have \\\"display: block\\\" property in print mode.\\n*/\\n\\n@media print {\\n  .jp-Collapser {\\n    display: none;\\n  }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Header/Footer\n|----------------------------------------------------------------------------*/\n\n/* Hidden by zero height by default */\n.jp-CellHeader,\n.jp-CellFooter {\n  height: 0;\n  width: 100%;\n  padding: 0;\n  margin: 0;\n  border: none;\n  outline: none;\n  background: transparent;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/cells/style/headerfooter.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E,qCAAqC;AACrC;;EAEE,SAAS;EACT,WAAW;EACX,UAAU;EACV,SAAS;EACT,YAAY;EACZ,aAAa;EACb,uBAAuB;AACzB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Header/Footer\\n|----------------------------------------------------------------------------*/\\n\\n/* Hidden by zero height by default */\\n.jp-CellHeader,\\n.jp-CellFooter {\\n  height: 0;\\n  width: 100%;\\n  padding: 0;\\n  margin: 0;\\n  border: none;\\n  outline: none;\\n  background: transparent;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Input\n|----------------------------------------------------------------------------*/\n\n/* All input areas */\n.jp-InputArea {\n  display: flex;\n  flex-direction: row;\n  width: 100%;\n  overflow: hidden;\n}\n\n.jp-InputArea-editor {\n  flex: 1 1 auto;\n  overflow: hidden;\n\n  /* This is the non-active, default styling */\n  border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);\n  border-radius: 0;\n  background: var(--jp-cell-editor-background);\n}\n\n.jp-InputPrompt {\n  flex: 0 0 var(--jp-cell-prompt-width);\n  width: var(--jp-cell-prompt-width);\n  color: var(--jp-cell-inprompt-font-color);\n  font-family: var(--jp-cell-prompt-font-family);\n  padding: var(--jp-code-padding);\n  letter-spacing: var(--jp-cell-prompt-letter-spacing);\n  opacity: var(--jp-cell-prompt-opacity);\n  line-height: var(--jp-code-line-height);\n  font-size: var(--jp-code-font-size);\n  border: var(--jp-border-width) solid transparent;\n\n  /* Right align prompt text, don't wrap to handle large prompt numbers */\n  text-align: right;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n\n  /* Disable text selection */\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n/*-----------------------------------------------------------------------------\n| Print\n|----------------------------------------------------------------------------*/\n@media print {\n  .jp-InputArea {\n    display: table;\n    table-layout: fixed;\n  }\n\n  .jp-InputArea-editor {\n    display: table-cell;\n    vertical-align: top;\n  }\n\n  .jp-InputPrompt {\n    display: table-cell;\n    vertical-align: top;\n  }\n}\n\n/*-----------------------------------------------------------------------------\n| Mobile\n|----------------------------------------------------------------------------*/\n@media only screen and (width <= 760px) {\n  .jp-InputArea {\n    flex-direction: column;\n  }\n\n  .jp-InputArea-editor {\n    margin-left: var(--jp-code-padding);\n  }\n\n  .jp-InputPrompt {\n    flex: 0 0 auto;\n    text-align: left;\n  }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/cells/style/inputarea.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E,oBAAoB;AACpB;EACE,aAAa;EACb,mBAAmB;EACnB,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,cAAc;EACd,gBAAgB;;EAEhB,4CAA4C;EAC5C,uEAAuE;EACvE,gBAAgB;EAChB,4CAA4C;AAC9C;;AAEA;EACE,qCAAqC;EACrC,kCAAkC;EAClC,yCAAyC;EACzC,8CAA8C;EAC9C,+BAA+B;EAC/B,oDAAoD;EACpD,sCAAsC;EACtC,uCAAuC;EACvC,mCAAmC;EACnC,gDAAgD;;EAEhD,uEAAuE;EACvE,iBAAiB;EACjB,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;;EAEvB,2BAA2B;EAC3B,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;;8EAE8E;AAC9E;EACE;IACE,cAAc;IACd,mBAAmB;EACrB;;EAEA;IACE,mBAAmB;IACnB,mBAAmB;EACrB;;EAEA;IACE,mBAAmB;IACnB,mBAAmB;EACrB;AACF;;AAEA;;8EAE8E;AAC9E;EACE;IACE,sBAAsB;EACxB;;EAEA;IACE,mCAAmC;EACrC;;EAEA;IACE,cAAc;IACd,gBAAgB;EAClB;AACF\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Input\\n|----------------------------------------------------------------------------*/\\n\\n/* All input areas */\\n.jp-InputArea {\\n  display: flex;\\n  flex-direction: row;\\n  width: 100%;\\n  overflow: hidden;\\n}\\n\\n.jp-InputArea-editor {\\n  flex: 1 1 auto;\\n  overflow: hidden;\\n\\n  /* This is the non-active, default styling */\\n  border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);\\n  border-radius: 0;\\n  background: var(--jp-cell-editor-background);\\n}\\n\\n.jp-InputPrompt {\\n  flex: 0 0 var(--jp-cell-prompt-width);\\n  width: var(--jp-cell-prompt-width);\\n  color: var(--jp-cell-inprompt-font-color);\\n  font-family: var(--jp-cell-prompt-font-family);\\n  padding: var(--jp-code-padding);\\n  letter-spacing: var(--jp-cell-prompt-letter-spacing);\\n  opacity: var(--jp-cell-prompt-opacity);\\n  line-height: var(--jp-code-line-height);\\n  font-size: var(--jp-code-font-size);\\n  border: var(--jp-border-width) solid transparent;\\n\\n  /* Right align prompt text, don't wrap to handle large prompt numbers */\\n  text-align: right;\\n  white-space: nowrap;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n\\n  /* Disable text selection */\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Print\\n|----------------------------------------------------------------------------*/\\n@media print {\\n  .jp-InputArea {\\n    display: table;\\n    table-layout: fixed;\\n  }\\n\\n  .jp-InputArea-editor {\\n    display: table-cell;\\n    vertical-align: top;\\n  }\\n\\n  .jp-InputPrompt {\\n    display: table-cell;\\n    vertical-align: top;\\n  }\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Mobile\\n|----------------------------------------------------------------------------*/\\n@media only screen and (width <= 760px) {\\n  .jp-InputArea {\\n    flex-direction: column;\\n  }\\n\\n  .jp-InputArea-editor {\\n    margin-left: var(--jp-code-padding);\\n  }\\n\\n  .jp-InputPrompt {\\n    flex: 0 0 auto;\\n    text-align: left;\\n  }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Placeholder\n|----------------------------------------------------------------------------*/\n\n.jp-Placeholder {\n  display: flex;\n  flex-direction: row;\n  width: 100%;\n}\n\n.jp-Placeholder-prompt {\n  flex: 0 0 var(--jp-cell-prompt-width);\n  box-sizing: border-box;\n}\n\n.jp-Placeholder-content {\n  flex: 1 1 auto;\n  padding: 4px 6px;\n  border: 1px solid transparent;\n  border-radius: 0;\n  background: none;\n  box-sizing: border-box;\n  cursor: pointer;\n}\n\n.jp-Placeholder-contentContainer {\n  display: flex;\n}\n\n.jp-Placeholder-content:hover,\n.jp-InputPlaceholder > .jp-Placeholder-content:hover {\n  border-color: var(--jp-layout-color3);\n}\n\n.jp-Placeholder-content .jp-MoreHorizIcon {\n  width: 32px;\n  height: 16px;\n  border: 1px solid transparent;\n  border-radius: var(--jp-border-radius);\n}\n\n.jp-Placeholder-content .jp-MoreHorizIcon:hover {\n  border: 1px solid var(--jp-border-color1);\n  box-shadow: var(--jp-toolbar-box-shadow);\n  background-color: var(--jp-layout-color0);\n}\n\n.jp-PlaceholderText {\n  white-space: nowrap;\n  overflow-x: hidden;\n  color: var(--jp-inverse-layout-color3);\n  font-family: var(--jp-code-font-family);\n}\n\n.jp-InputPlaceholder > .jp-Placeholder-content {\n  border-color: var(--jp-cell-editor-border-color);\n  background: var(--jp-cell-editor-background);\n}\n\n/*-----------------------------------------------------------------------------\n| Print\n|----------------------------------------------------------------------------*/\n@media print {\n  .jp-Placeholder {\n    display: table;\n    table-layout: fixed;\n  }\n\n  .jp-Placeholder-content {\n    display: table-cell;\n  }\n\n  .jp-Placeholder-prompt {\n    display: table-cell;\n  }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/cells/style/placeholder.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E;EACE,aAAa;EACb,mBAAmB;EACnB,WAAW;AACb;;AAEA;EACE,qCAAqC;EACrC,sBAAsB;AACxB;;AAEA;EACE,cAAc;EACd,gBAAgB;EAChB,6BAA6B;EAC7B,gBAAgB;EAChB,gBAAgB;EAChB,sBAAsB;EACtB,eAAe;AACjB;;AAEA;EACE,aAAa;AACf;;AAEA;;EAEE,qCAAqC;AACvC;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,6BAA6B;EAC7B,sCAAsC;AACxC;;AAEA;EACE,yCAAyC;EACzC,wCAAwC;EACxC,yCAAyC;AAC3C;;AAEA;EACE,mBAAmB;EACnB,kBAAkB;EAClB,sCAAsC;EACtC,uCAAuC;AACzC;;AAEA;EACE,gDAAgD;EAChD,4CAA4C;AAC9C;;AAEA;;8EAE8E;AAC9E;EACE;IACE,cAAc;IACd,mBAAmB;EACrB;;EAEA;IACE,mBAAmB;EACrB;;EAEA;IACE,mBAAmB;EACrB;AACF\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Placeholder\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Placeholder {\\n  display: flex;\\n  flex-direction: row;\\n  width: 100%;\\n}\\n\\n.jp-Placeholder-prompt {\\n  flex: 0 0 var(--jp-cell-prompt-width);\\n  box-sizing: border-box;\\n}\\n\\n.jp-Placeholder-content {\\n  flex: 1 1 auto;\\n  padding: 4px 6px;\\n  border: 1px solid transparent;\\n  border-radius: 0;\\n  background: none;\\n  box-sizing: border-box;\\n  cursor: pointer;\\n}\\n\\n.jp-Placeholder-contentContainer {\\n  display: flex;\\n}\\n\\n.jp-Placeholder-content:hover,\\n.jp-InputPlaceholder > .jp-Placeholder-content:hover {\\n  border-color: var(--jp-layout-color3);\\n}\\n\\n.jp-Placeholder-content .jp-MoreHorizIcon {\\n  width: 32px;\\n  height: 16px;\\n  border: 1px solid transparent;\\n  border-radius: var(--jp-border-radius);\\n}\\n\\n.jp-Placeholder-content .jp-MoreHorizIcon:hover {\\n  border: 1px solid var(--jp-border-color1);\\n  box-shadow: var(--jp-toolbar-box-shadow);\\n  background-color: var(--jp-layout-color0);\\n}\\n\\n.jp-PlaceholderText {\\n  white-space: nowrap;\\n  overflow-x: hidden;\\n  color: var(--jp-inverse-layout-color3);\\n  font-family: var(--jp-code-font-family);\\n}\\n\\n.jp-InputPlaceholder > .jp-Placeholder-content {\\n  border-color: var(--jp-cell-editor-border-color);\\n  background: var(--jp-cell-editor-background);\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Print\\n|----------------------------------------------------------------------------*/\\n@media print {\\n  .jp-Placeholder {\\n    display: table;\\n    table-layout: fixed;\\n  }\\n\\n  .jp-Placeholder-content {\\n    display: table-cell;\\n  }\\n\\n  .jp-Placeholder-prompt {\\n    display: table-cell;\\n  }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Private CSS variables\n|----------------------------------------------------------------------------*/\n\n:root {\n  --jp-private-cell-scrolling-output-offset: 5px;\n}\n\n/*-----------------------------------------------------------------------------\n| Cell\n|----------------------------------------------------------------------------*/\n\n.jp-Cell {\n  padding: var(--jp-cell-padding);\n  margin: 0;\n  border: none;\n  outline: none;\n  background: transparent;\n}\n\n/*-----------------------------------------------------------------------------\n| Common input/output\n|----------------------------------------------------------------------------*/\n\n.jp-Cell-inputWrapper,\n.jp-Cell-outputWrapper {\n  display: flex;\n  flex-direction: row;\n  padding: 0;\n  margin: 0;\n\n  /* Added to reveal the box-shadow on the input and output collapsers. */\n  overflow: visible;\n}\n\n/* Only input/output areas inside cells */\n.jp-Cell-inputArea,\n.jp-Cell-outputArea {\n  flex: 1 1 auto;\n}\n\n/*-----------------------------------------------------------------------------\n| Collapser\n|----------------------------------------------------------------------------*/\n\n/* Make the output collapser disappear when there is not output, but do so\n * in a manner that leaves it in the layout and preserves its width.\n */\n.jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser {\n  border: none !important;\n  background: transparent !important;\n}\n\n.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser {\n  min-height: var(--jp-cell-collapser-min-height);\n}\n\n/*-----------------------------------------------------------------------------\n| Output\n|----------------------------------------------------------------------------*/\n\n/* Put a space between input and output when there IS output */\n.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper {\n  margin-top: 5px;\n}\n\n.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea {\n  overflow-y: auto;\n  max-height: 24em;\n  margin-left: var(--jp-private-cell-scrolling-output-offset);\n  resize: vertical;\n}\n\n.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea[style*='height'] {\n  max-height: unset;\n}\n\n.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea::after {\n  content: ' ';\n  box-shadow: inset 0 0 6px 2px rgb(0 0 0 / 30%);\n  width: 100%;\n  height: 100%;\n  position: sticky;\n  bottom: 0;\n  top: 0;\n  margin-top: -50%;\n  float: left;\n  display: block;\n  pointer-events: none;\n}\n\n.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-child {\n  padding-top: 6px;\n}\n\n.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt {\n  width: calc(\n    var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset)\n  );\n  flex: 0 0\n    calc(\n      var(--jp-cell-prompt-width) -\n        var(--jp-private-cell-scrolling-output-offset)\n    );\n}\n\n.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-promptOverlay {\n  left: calc(-1 * var(--jp-private-cell-scrolling-output-offset));\n}\n\n/*-----------------------------------------------------------------------------\n| CodeCell\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| MarkdownCell\n|----------------------------------------------------------------------------*/\n\n.jp-MarkdownOutput {\n  flex: 1 1 auto;\n  width: 100%;\n  margin-top: 0;\n  margin-bottom: 0;\n  padding-left: var(--jp-code-padding);\n}\n\n.jp-MarkdownOutput.jp-RenderedHTMLCommon {\n  overflow: auto;\n}\n\n/* collapseHeadingButton (show always if hiddenCellsButton is _not_ shown) */\n.jp-collapseHeadingButton {\n  display: flex;\n  min-height: var(--jp-cell-collapser-min-height);\n  font-size: var(--jp-code-font-size);\n  position: absolute;\n  background-color: transparent;\n  background-size: 25px;\n  background-repeat: no-repeat;\n  background-position-x: center;\n  background-position-y: top;\n  background-image: var(--jp-icon-caret-down);\n  right: 0;\n  top: 0;\n  bottom: 0;\n}\n\n.jp-collapseHeadingButton.jp-mod-collapsed {\n  background-image: var(--jp-icon-caret-right);\n}\n\n/*\n set the container font size to match that of content\n so that the nested collapse buttons have the right size\n*/\n.jp-MarkdownCell .jp-InputPrompt {\n  font-size: var(--jp-content-font-size1);\n}\n\n/*\n  Align collapseHeadingButton with cell top header\n  The font sizes are identical to the ones in packages/rendermime/style/base.css\n*/\n.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='1'] {\n  font-size: var(--jp-content-font-size5);\n  background-position-y: calc(0.3 * var(--jp-content-font-size5));\n}\n\n.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='2'] {\n  font-size: var(--jp-content-font-size4);\n  background-position-y: calc(0.3 * var(--jp-content-font-size4));\n}\n\n.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='3'] {\n  font-size: var(--jp-content-font-size3);\n  background-position-y: calc(0.3 * var(--jp-content-font-size3));\n}\n\n.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='4'] {\n  font-size: var(--jp-content-font-size2);\n  background-position-y: calc(0.3 * var(--jp-content-font-size2));\n}\n\n.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='5'] {\n  font-size: var(--jp-content-font-size1);\n  background-position-y: top;\n}\n\n.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='6'] {\n  font-size: var(--jp-content-font-size0);\n  background-position-y: top;\n}\n\n/* collapseHeadingButton (show only on (hover,active) if hiddenCellsButton is shown) */\n.jp-Notebook.jp-mod-showHiddenCellsButton .jp-collapseHeadingButton {\n  display: none;\n}\n\n.jp-Notebook.jp-mod-showHiddenCellsButton\n  :is(.jp-MarkdownCell:hover, .jp-mod-active)\n  .jp-collapseHeadingButton {\n  display: flex;\n}\n\n/* showHiddenCellsButton (only show if jp-mod-showHiddenCellsButton is set, which\nis a consequence of the showHiddenCellsButton option in Notebook Settings)*/\n.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton {\n  margin-left: calc(var(--jp-cell-prompt-width) + 2 * var(--jp-code-padding));\n  margin-top: var(--jp-code-padding);\n  border: 1px solid var(--jp-border-color2);\n  background-color: var(--jp-border-color3) !important;\n  color: var(--jp-content-font-color0) !important;\n  display: flex;\n}\n\n.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton:hover {\n  background-color: var(--jp-border-color2) !important;\n}\n\n.jp-showHiddenCellsButton {\n  display: none;\n}\n\n/*-----------------------------------------------------------------------------\n| Printing\n|----------------------------------------------------------------------------*/\n\n/*\nUsing block instead of flex to allow the use of the break-inside CSS property for\ncell outputs.\n*/\n\n@media print {\n  .jp-Cell-inputWrapper,\n  .jp-Cell-outputWrapper {\n    display: block;\n  }\n\n  .jp-MarkdownOutput {\n    display: table-cell;\n  }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/cells/style/widget.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E;EACE,8CAA8C;AAChD;;AAEA;;8EAE8E;;AAE9E;EACE,+BAA+B;EAC/B,SAAS;EACT,YAAY;EACZ,aAAa;EACb,uBAAuB;AACzB;;AAEA;;8EAE8E;;AAE9E;;EAEE,aAAa;EACb,mBAAmB;EACnB,UAAU;EACV,SAAS;;EAET,uEAAuE;EACvE,iBAAiB;AACnB;;AAEA,yCAAyC;AACzC;;EAEE,cAAc;AAChB;;AAEA;;8EAE8E;;AAE9E;;EAEE;AACF;EACE,uBAAuB;EACvB,kCAAkC;AACpC;;AAEA;EACE,+CAA+C;AACjD;;AAEA;;8EAE8E;;AAE9E,8DAA8D;AAC9D;EACE,eAAe;AACjB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,2DAA2D;EAC3D,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,8CAA8C;EAC9C,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,SAAS;EACT,MAAM;EACN,gBAAgB;EAChB,WAAW;EACX,cAAc;EACd,oBAAoB;AACtB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE;;GAEC;EACD;;;;KAIG;AACL;;AAEA;EACE,+DAA+D;AACjE;;AAEA;;8EAE8E;;AAE9E;;8EAE8E;;AAE9E;EACE,cAAc;EACd,WAAW;EACX,aAAa;EACb,gBAAgB;EAChB,oCAAoC;AACtC;;AAEA;EACE,cAAc;AAChB;;AAEA,4EAA4E;AAC5E;EACE,aAAa;EACb,+CAA+C;EAC/C,mCAAmC;EACnC,kBAAkB;EAClB,6BAA6B;EAC7B,qBAAqB;EACrB,4BAA4B;EAC5B,6BAA6B;EAC7B,0BAA0B;EAC1B,2CAA2C;EAC3C,QAAQ;EACR,MAAM;EACN,SAAS;AACX;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;;;CAGC;AACD;EACE,uCAAuC;AACzC;;AAEA;;;CAGC;AACD;EACE,uCAAuC;EACvC,+DAA+D;AACjE;;AAEA;EACE,uCAAuC;EACvC,+DAA+D;AACjE;;AAEA;EACE,uCAAuC;EACvC,+DAA+D;AACjE;;AAEA;EACE,uCAAuC;EACvC,+DAA+D;AACjE;;AAEA;EACE,uCAAuC;EACvC,0BAA0B;AAC5B;;AAEA;EACE,uCAAuC;EACvC,0BAA0B;AAC5B;;AAEA,sFAAsF;AACtF;EACE,aAAa;AACf;;AAEA;;;EAGE,aAAa;AACf;;AAEA;2EAC2E;AAC3E;EACE,2EAA2E;EAC3E,kCAAkC;EAClC,yCAAyC;EACzC,oDAAoD;EACpD,+CAA+C;EAC/C,aAAa;AACf;;AAEA;EACE,oDAAoD;AACtD;;AAEA;EACE,aAAa;AACf;;AAEA;;8EAE8E;;AAE9E;;;CAGC;;AAED;EACE;;IAEE,cAAc;EAChB;;EAEA;IACE,mBAAmB;EACrB;AACF\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Private CSS variables\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  --jp-private-cell-scrolling-output-offset: 5px;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Cell\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Cell {\\n  padding: var(--jp-cell-padding);\\n  margin: 0;\\n  border: none;\\n  outline: none;\\n  background: transparent;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Common input/output\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Cell-inputWrapper,\\n.jp-Cell-outputWrapper {\\n  display: flex;\\n  flex-direction: row;\\n  padding: 0;\\n  margin: 0;\\n\\n  /* Added to reveal the box-shadow on the input and output collapsers. */\\n  overflow: visible;\\n}\\n\\n/* Only input/output areas inside cells */\\n.jp-Cell-inputArea,\\n.jp-Cell-outputArea {\\n  flex: 1 1 auto;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Collapser\\n|----------------------------------------------------------------------------*/\\n\\n/* Make the output collapser disappear when there is not output, but do so\\n * in a manner that leaves it in the layout and preserves its width.\\n */\\n.jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser {\\n  border: none !important;\\n  background: transparent !important;\\n}\\n\\n.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser {\\n  min-height: var(--jp-cell-collapser-min-height);\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Output\\n|----------------------------------------------------------------------------*/\\n\\n/* Put a space between input and output when there IS output */\\n.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper {\\n  margin-top: 5px;\\n}\\n\\n.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea {\\n  overflow-y: auto;\\n  max-height: 24em;\\n  margin-left: var(--jp-private-cell-scrolling-output-offset);\\n  resize: vertical;\\n}\\n\\n.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea[style*='height'] {\\n  max-height: unset;\\n}\\n\\n.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea::after {\\n  content: ' ';\\n  box-shadow: inset 0 0 6px 2px rgb(0 0 0 / 30%);\\n  width: 100%;\\n  height: 100%;\\n  position: sticky;\\n  bottom: 0;\\n  top: 0;\\n  margin-top: -50%;\\n  float: left;\\n  display: block;\\n  pointer-events: none;\\n}\\n\\n.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-child {\\n  padding-top: 6px;\\n}\\n\\n.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt {\\n  width: calc(\\n    var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset)\\n  );\\n  flex: 0 0\\n    calc(\\n      var(--jp-cell-prompt-width) -\\n        var(--jp-private-cell-scrolling-output-offset)\\n    );\\n}\\n\\n.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-promptOverlay {\\n  left: calc(-1 * var(--jp-private-cell-scrolling-output-offset));\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| CodeCell\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| MarkdownCell\\n|----------------------------------------------------------------------------*/\\n\\n.jp-MarkdownOutput {\\n  flex: 1 1 auto;\\n  width: 100%;\\n  margin-top: 0;\\n  margin-bottom: 0;\\n  padding-left: var(--jp-code-padding);\\n}\\n\\n.jp-MarkdownOutput.jp-RenderedHTMLCommon {\\n  overflow: auto;\\n}\\n\\n/* collapseHeadingButton (show always if hiddenCellsButton is _not_ shown) */\\n.jp-collapseHeadingButton {\\n  display: flex;\\n  min-height: var(--jp-cell-collapser-min-height);\\n  font-size: var(--jp-code-font-size);\\n  position: absolute;\\n  background-color: transparent;\\n  background-size: 25px;\\n  background-repeat: no-repeat;\\n  background-position-x: center;\\n  background-position-y: top;\\n  background-image: var(--jp-icon-caret-down);\\n  right: 0;\\n  top: 0;\\n  bottom: 0;\\n}\\n\\n.jp-collapseHeadingButton.jp-mod-collapsed {\\n  background-image: var(--jp-icon-caret-right);\\n}\\n\\n/*\\n set the container font size to match that of content\\n so that the nested collapse buttons have the right size\\n*/\\n.jp-MarkdownCell .jp-InputPrompt {\\n  font-size: var(--jp-content-font-size1);\\n}\\n\\n/*\\n  Align collapseHeadingButton with cell top header\\n  The font sizes are identical to the ones in packages/rendermime/style/base.css\\n*/\\n.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='1'] {\\n  font-size: var(--jp-content-font-size5);\\n  background-position-y: calc(0.3 * var(--jp-content-font-size5));\\n}\\n\\n.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='2'] {\\n  font-size: var(--jp-content-font-size4);\\n  background-position-y: calc(0.3 * var(--jp-content-font-size4));\\n}\\n\\n.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='3'] {\\n  font-size: var(--jp-content-font-size3);\\n  background-position-y: calc(0.3 * var(--jp-content-font-size3));\\n}\\n\\n.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='4'] {\\n  font-size: var(--jp-content-font-size2);\\n  background-position-y: calc(0.3 * var(--jp-content-font-size2));\\n}\\n\\n.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='5'] {\\n  font-size: var(--jp-content-font-size1);\\n  background-position-y: top;\\n}\\n\\n.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='6'] {\\n  font-size: var(--jp-content-font-size0);\\n  background-position-y: top;\\n}\\n\\n/* collapseHeadingButton (show only on (hover,active) if hiddenCellsButton is shown) */\\n.jp-Notebook.jp-mod-showHiddenCellsButton .jp-collapseHeadingButton {\\n  display: none;\\n}\\n\\n.jp-Notebook.jp-mod-showHiddenCellsButton\\n  :is(.jp-MarkdownCell:hover, .jp-mod-active)\\n  .jp-collapseHeadingButton {\\n  display: flex;\\n}\\n\\n/* showHiddenCellsButton (only show if jp-mod-showHiddenCellsButton is set, which\\nis a consequence of the showHiddenCellsButton option in Notebook Settings)*/\\n.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton {\\n  margin-left: calc(var(--jp-cell-prompt-width) + 2 * var(--jp-code-padding));\\n  margin-top: var(--jp-code-padding);\\n  border: 1px solid var(--jp-border-color2);\\n  background-color: var(--jp-border-color3) !important;\\n  color: var(--jp-content-font-color0) !important;\\n  display: flex;\\n}\\n\\n.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton:hover {\\n  background-color: var(--jp-border-color2) !important;\\n}\\n\\n.jp-showHiddenCellsButton {\\n  display: none;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Printing\\n|----------------------------------------------------------------------------*/\\n\\n/*\\nUsing block instead of flex to allow the use of the break-inside CSS property for\\ncell outputs.\\n*/\\n\\n@media print {\\n  .jp-Cell-inputWrapper,\\n  .jp-Cell-outputWrapper {\\n    display: block;\\n  }\\n\\n  .jp-MarkdownOutput {\\n    display: table-cell;\\n  }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n:root {\n  --jp-add-tag-extra-width: 8px;\n}\n\n.jp-CellTags-Tag {\n  height: 20px;\n  border-radius: 10px;\n  margin-right: 5px;\n  margin-bottom: 10px;\n  padding: 0 8px;\n  font-size: var(--jp-ui-font-size1);\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  max-width: calc(100% - 25px);\n  border: 1px solid var(--jp-border-color1);\n  color: var(--jp-ui-font-color1);\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.jp-CellTags-Unapplied {\n  background-color: var(--jp-layout-color2);\n}\n\n.jp-CellTags-Applied {\n  background-color: var(--jp-layout-color3);\n}\n\n.jp-CellTags-Add {\n  white-space: nowrap;\n  overflow: hidden;\n  border: none;\n  outline: none;\n  resize: horizontal;\n  font-size: var(--jp-ui-font-size1);\n  color: var(--jp-ui-font-color1);\n  background: var(--jp-layout-color2);\n}\n\n.jp-CellTags-Holder {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n.jp-CellTags-Empty {\n  width: 4em;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/celltags-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,6BAA6B;AAC/B;;AAEA;EACE,YAAY;EACZ,mBAAmB;EACnB,iBAAiB;EACjB,mBAAmB;EACnB,cAAc;EACd,kCAAkC;EAClC,oBAAoB;EACpB,uBAAuB;EACvB,mBAAmB;EACnB,4BAA4B;EAC5B,yCAAyC;EACzC,+BAA+B;EAC/B,2BAA2B;EAC3B,yBAAyB;EACzB,wBAAwB;EACxB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,mBAAmB;EACnB,gBAAgB;EAChB,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,kCAAkC;EAClC,+BAA+B;EAC/B,mCAAmC;AACrC;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,UAAU;AACZ\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n:root {\\n  --jp-add-tag-extra-width: 8px;\\n}\\n\\n.jp-CellTags-Tag {\\n  height: 20px;\\n  border-radius: 10px;\\n  margin-right: 5px;\\n  margin-bottom: 10px;\\n  padding: 0 8px;\\n  font-size: var(--jp-ui-font-size1);\\n  display: inline-flex;\\n  justify-content: center;\\n  align-items: center;\\n  max-width: calc(100% - 25px);\\n  border: 1px solid var(--jp-border-color1);\\n  color: var(--jp-ui-font-color1);\\n  -webkit-touch-callout: none;\\n  -webkit-user-select: none;\\n  -khtml-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n}\\n\\n.jp-CellTags-Unapplied {\\n  background-color: var(--jp-layout-color2);\\n}\\n\\n.jp-CellTags-Applied {\\n  background-color: var(--jp-layout-color3);\\n}\\n\\n.jp-CellTags-Add {\\n  white-space: nowrap;\\n  overflow: hidden;\\n  border: none;\\n  outline: none;\\n  resize: horizontal;\\n  font-size: var(--jp-ui-font-size1);\\n  color: var(--jp-ui-font-color1);\\n  background: var(--jp-layout-color2);\\n}\\n\\n.jp-CellTags-Holder {\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n}\\n\\n.jp-CellTags-Empty {\\n  width: 4em;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./linecol.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-JSONEditor {\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n}\n\n.jp-JSONEditor-host {\n  flex: 1 1 auto;\n  border: var(--jp-border-width) solid var(--jp-input-border-color);\n  border-radius: 0;\n  background: var(--jp-layout-color0);\n  min-height: 50px;\n  padding: 1px;\n}\n\n.jp-JSONEditor.jp-mod-error .jp-JSONEditor-host {\n  border-color: red;\n  outline-color: red;\n}\n\n.jp-JSONEditor-header {\n  display: flex;\n  flex: 1 0 auto;\n  padding: 0 0 0 12px;\n}\n\n.jp-JSONEditor-header label {\n  flex: 0 0 auto;\n}\n\n.jp-JSONEditor-commitButton {\n  height: 16px;\n  width: 16px;\n  background-size: 18px;\n  background-repeat: no-repeat;\n  background-position: center;\n}\n\n.jp-JSONEditor-host.jp-mod-focused {\n  background-color: var(--jp-input-active-background);\n  border: 1px solid var(--jp-input-active-border-color);\n  box-shadow: var(--jp-input-box-shadow);\n}\n\n.jp-Editor.jp-mod-dropTarget {\n  border: var(--jp-border-width) solid var(--jp-input-active-border-color);\n  box-shadow: var(--jp-input-box-shadow);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/codeeditor/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAG9E;EACE,aAAa;EACb,sBAAsB;EACtB,WAAW;AACb;;AAEA;EACE,cAAc;EACd,iEAAiE;EACjE,gBAAgB;EAChB,mCAAmC;EACnC,gBAAgB;EAChB,YAAY;AACd;;AAEA;EACE,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,cAAc;EACd,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,YAAY;EACZ,WAAW;EACX,qBAAqB;EACrB,4BAA4B;EAC5B,2BAA2B;AAC7B;;AAEA;EACE,mDAAmD;EACnD,qDAAqD;EACrD,sCAAsC;AACxC;;AAEA;EACE,wEAAwE;EACxE,sCAAsC;AACxC\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n@import url('./linecol.css');\\n\\n.jp-JSONEditor {\\n  display: flex;\\n  flex-direction: column;\\n  width: 100%;\\n}\\n\\n.jp-JSONEditor-host {\\n  flex: 1 1 auto;\\n  border: var(--jp-border-width) solid var(--jp-input-border-color);\\n  border-radius: 0;\\n  background: var(--jp-layout-color0);\\n  min-height: 50px;\\n  padding: 1px;\\n}\\n\\n.jp-JSONEditor.jp-mod-error .jp-JSONEditor-host {\\n  border-color: red;\\n  outline-color: red;\\n}\\n\\n.jp-JSONEditor-header {\\n  display: flex;\\n  flex: 1 0 auto;\\n  padding: 0 0 0 12px;\\n}\\n\\n.jp-JSONEditor-header label {\\n  flex: 0 0 auto;\\n}\\n\\n.jp-JSONEditor-commitButton {\\n  height: 16px;\\n  width: 16px;\\n  background-size: 18px;\\n  background-repeat: no-repeat;\\n  background-position: center;\\n}\\n\\n.jp-JSONEditor-host.jp-mod-focused {\\n  background-color: var(--jp-input-active-background);\\n  border: 1px solid var(--jp-input-active-border-color);\\n  box-shadow: var(--jp-input-box-shadow);\\n}\\n\\n.jp-Editor.jp-mod-dropTarget {\\n  border: var(--jp-border-width) solid var(--jp-input-active-border-color);\\n  box-shadow: var(--jp-input-box-shadow);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.jp-lineFormSearch {\n  padding: 4px 12px;\n  background-color: var(--jp-layout-color2);\n  box-shadow: var(--jp-toolbar-box-shadow);\n  z-index: 2;\n  font-size: var(--jp-ui-font-size1);\n}\n\n.jp-lineFormCaption {\n  font-size: var(--jp-ui-font-size0);\n  line-height: var(--jp-ui-font-size1);\n  margin-top: 4px;\n  color: var(--jp-ui-font-color0);\n}\n\n.jp-baseLineForm {\n  border: none;\n  border-top-right-radius: var(--jp-border-radius);\n  border-bottom-right-radius: var(--jp-border-radius);\n  position: absolute;\n  background-size: 16px;\n  background-repeat: no-repeat;\n  background-position: center;\n  outline: none;\n}\n\n.jp-lineFormButtonContainer {\n  top: 4px;\n  right: 8px;\n  height: 24px;\n  padding: 0 12px;\n  width: 12px;\n}\n\n.jp-lineFormButtonIcon {\n  top: 0;\n  right: 0;\n  background-color: var(--jp-brand-color1);\n  height: 100%;\n  width: 100%;\n  box-sizing: border-box;\n  padding: 4px 6px;\n}\n\n.jp-lineFormButton {\n  top: 0;\n  right: 0;\n  background-color: transparent;\n  height: 100%;\n  width: 100%;\n  box-sizing: border-box;\n}\n\n.jp-lineFormWrapper {\n  overflow: hidden;\n  padding: 0 8px;\n  border: 1px solid var(--jp-border-color0);\n  border-top-left-radius: var(--jp-border-radius);\n  border-bottom-left-radius: var(--jp-border-radius);\n  background-color: var(--jp-input-active-background);\n  height: 22px;\n}\n\n.jp-lineFormWrapperFocusWithin {\n  border: var(--jp-border-width) solid var(--jp-input-active-border-color);\n  box-shadow: var(--jp-input-box-shadow);\n}\n\n.jp-lineFormInput {\n  background: transparent;\n  width: 200px;\n  height: 100%;\n  border: none;\n  outline: none;\n  color: var(--jp-ui-font-color0);\n  padding: 0;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/codeeditor/style/linecol.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,iBAAiB;EACjB,yCAAyC;EACzC,wCAAwC;EACxC,UAAU;EACV,kCAAkC;AACpC;;AAEA;EACE,kCAAkC;EAClC,oCAAoC;EACpC,eAAe;EACf,+BAA+B;AACjC;;AAEA;EACE,YAAY;EACZ,gDAAgD;EAChD,mDAAmD;EACnD,kBAAkB;EAClB,qBAAqB;EACrB,4BAA4B;EAC5B,2BAA2B;EAC3B,aAAa;AACf;;AAEA;EACE,QAAQ;EACR,UAAU;EACV,YAAY;EACZ,eAAe;EACf,WAAW;AACb;;AAEA;EACE,MAAM;EACN,QAAQ;EACR,wCAAwC;EACxC,YAAY;EACZ,WAAW;EACX,sBAAsB;EACtB,gBAAgB;AAClB;;AAEA;EACE,MAAM;EACN,QAAQ;EACR,6BAA6B;EAC7B,YAAY;EACZ,WAAW;EACX,sBAAsB;AACxB;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,yCAAyC;EACzC,+CAA+C;EAC/C,kDAAkD;EAClD,mDAAmD;EACnD,YAAY;AACd;;AAEA;EACE,wEAAwE;EACxE,sCAAsC;AACxC;;AAEA;EACE,uBAAuB;EACvB,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,aAAa;EACb,+BAA+B;EAC/B,UAAU;AACZ\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.jp-lineFormSearch {\\n  padding: 4px 12px;\\n  background-color: var(--jp-layout-color2);\\n  box-shadow: var(--jp-toolbar-box-shadow);\\n  z-index: 2;\\n  font-size: var(--jp-ui-font-size1);\\n}\\n\\n.jp-lineFormCaption {\\n  font-size: var(--jp-ui-font-size0);\\n  line-height: var(--jp-ui-font-size1);\\n  margin-top: 4px;\\n  color: var(--jp-ui-font-color0);\\n}\\n\\n.jp-baseLineForm {\\n  border: none;\\n  border-top-right-radius: var(--jp-border-radius);\\n  border-bottom-right-radius: var(--jp-border-radius);\\n  position: absolute;\\n  background-size: 16px;\\n  background-repeat: no-repeat;\\n  background-position: center;\\n  outline: none;\\n}\\n\\n.jp-lineFormButtonContainer {\\n  top: 4px;\\n  right: 8px;\\n  height: 24px;\\n  padding: 0 12px;\\n  width: 12px;\\n}\\n\\n.jp-lineFormButtonIcon {\\n  top: 0;\\n  right: 0;\\n  background-color: var(--jp-brand-color1);\\n  height: 100%;\\n  width: 100%;\\n  box-sizing: border-box;\\n  padding: 4px 6px;\\n}\\n\\n.jp-lineFormButton {\\n  top: 0;\\n  right: 0;\\n  background-color: transparent;\\n  height: 100%;\\n  width: 100%;\\n  box-sizing: border-box;\\n}\\n\\n.jp-lineFormWrapper {\\n  overflow: hidden;\\n  padding: 0 8px;\\n  border: 1px solid var(--jp-border-color0);\\n  border-top-left-radius: var(--jp-border-radius);\\n  border-bottom-left-radius: var(--jp-border-radius);\\n  background-color: var(--jp-input-active-background);\\n  height: 22px;\\n}\\n\\n.jp-lineFormWrapperFocusWithin {\\n  border: var(--jp-border-width) solid var(--jp-input-active-border-color);\\n  box-shadow: var(--jp-input-box-shadow);\\n}\\n\\n.jp-lineFormInput {\\n  background: transparent;\\n  width: 200px;\\n  height: 100%;\\n  border: none;\\n  outline: none;\\n  color: var(--jp-ui-font-color0);\\n  padding: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAsElEQVQIHQGlAFr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7+r3zKmT0/+pk9P/7+r3zAAAAAAAAAAABAAAAAAAAAAA6OPzM+/q9wAAAAAA6OPzMwAAAAAAAAAAAgAAAAAAAAAAGR8NiRQaCgAZIA0AGR8NiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQyoYJ/SY80UAAAAASUVORK5CYII=\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.cm-editor {\n  line-height: var(--jp-code-line-height);\n  font-size: var(--jp-code-font-size);\n  font-family: var(--jp-code-font-family);\n  border: 0;\n  border-radius: 0;\n  height: auto;\n\n  /* Changed to auto to autogrow */\n}\n\n/* Suppress automatic focus indicator outline */\n.cm-editor.cm-focused {\n  outline: unset;\n}\n\n.cm-editor pre {\n  padding: 0 var(--jp-code-padding);\n}\n\n.jp-CodeMirrorEditor[data-type='inline'] .cm-dialog {\n  background-color: var(--jp-layout-color0);\n  color: var(--jp-content-font-color1);\n}\n\n.jp-CodeMirrorEditor {\n  cursor: text;\n}\n\n/* When zoomed out 67% and 33% on a screen of 1440 width x 900 height */\n@media screen and (width >= 2138px) and (width <= 4319px) {\n  .jp-CodeMirrorEditor[data-type='inline'] .cm-cursor {\n    border-left: var(--jp-code-cursor-width1) solid\n      var(--jp-editor-cursor-color);\n  }\n}\n\n/* When zoomed out less than 33% */\n@media screen and (width >= 4320px) {\n  .jp-CodeMirrorEditor[data-type='inline'] .cm-cursor {\n    border-left: var(--jp-code-cursor-width2) solid\n      var(--jp-editor-cursor-color);\n  }\n}\n\n/* stylelint-disable selector-max-class */\n\n/* We need all this classes for higher specificity to override CodeMirror's rule */\n.cm-editor.jp-mod-readOnly > .cm-scroller > .cm-cursorLayer .cm-cursor {\n  display: none;\n}\n\n/* stylelint-enable selector-max-class */\n\n.jp-CollaboratorCursor {\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-top: none;\n  border-bottom: 3px solid;\n  background-clip: content-box;\n  margin-left: -5px;\n  margin-right: -5px;\n}\n\n.cm-builtin {\n  color: var(--jp-mirror-editor-builtin-color);\n}\n\n.cm-searching,\n.cm-searching span {\n  /* \\`.cm-searching span\\`: we need to override syntax highlighting */\n  background-color: var(--jp-search-unselected-match-background-color);\n  color: var(--jp-search-unselected-match-color);\n}\n\n.cm-searching::selection,\n.cm-searching span::selection {\n  background-color: var(--jp-search-unselected-match-background-color);\n  color: var(--jp-search-unselected-match-color);\n}\n\n.jp-current-match > .cm-searching,\n.jp-current-match > .cm-searching span,\n.cm-searching > .jp-current-match,\n.cm-searching > .jp-current-match span {\n  background-color: var(--jp-search-selected-match-background-color);\n  color: var(--jp-search-selected-match-color);\n}\n\n.jp-current-match > .cm-searching::selection,\n.jp-current-match > .cm-searching span::selection,\n.cm-searching > .jp-current-match::selection,\n.cm-searching > .jp-current-match span::selection {\n  background-color: var(--jp-search-selected-match-background-color);\n  color: var(--jp-search-selected-match-color);\n}\n\n.cm-trailingspace {\n  background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___});\n  background-position: center left;\n  background-repeat: repeat-x;\n}\n\n.jp-CollaboratorCursor-hover {\n  position: absolute;\n  z-index: 1;\n  transform: translateX(-50%);\n  color: white;\n  border-radius: 3px;\n  padding-left: 4px;\n  padding-right: 4px;\n  padding-top: 1px;\n  padding-bottom: 1px;\n  text-align: center;\n  font-size: var(--jp-ui-font-size1);\n  white-space: nowrap;\n}\n\n.jp-CodeMirror-ruler {\n  border-left: 1px dashed var(--jp-border-color2);\n}\n\n/* Styles for shared cursors (remote cursor locations and selected ranges) */\n.jp-CodeMirrorEditor .cm-ySelectionCaret {\n  position: relative;\n  border-left: 1px solid black;\n  margin-left: -1px;\n  margin-right: -1px;\n  box-sizing: border-box;\n}\n\n.jp-CodeMirrorEditor .cm-ySelectionCaret > .cm-ySelectionInfo {\n  white-space: nowrap;\n  position: absolute;\n  top: -1.15em;\n  padding-bottom: 0.05em;\n  left: -1px;\n  font-size: 0.95em;\n  font-family: var(--jp-ui-font-family);\n  font-weight: bold;\n  line-height: normal;\n  user-select: none;\n  color: white;\n  padding-left: 2px;\n  padding-right: 2px;\n  z-index: 101;\n  transition: opacity 0.3s ease-in-out;\n}\n\n.jp-CodeMirrorEditor .cm-ySelectionInfo {\n  transition-delay: 0.7s;\n  opacity: 0;\n}\n\n.jp-CodeMirrorEditor .cm-ySelectionCaret:hover > .cm-ySelectionInfo {\n  opacity: 1;\n  transition-delay: 0s;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/codemirror/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,uCAAuC;EACvC,mCAAmC;EACnC,uCAAuC;EACvC,SAAS;EACT,gBAAgB;EAChB,YAAY;;EAEZ,gCAAgC;AAClC;;AAEA,+CAA+C;AAC/C;EACE,cAAc;AAChB;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,yCAAyC;EACzC,oCAAoC;AACtC;;AAEA;EACE,YAAY;AACd;;AAEA,uEAAuE;AACvE;EACE;IACE;mCAC+B;EACjC;AACF;;AAEA,kCAAkC;AAClC;EACE;IACE;mCAC+B;EACjC;AACF;;AAEA,yCAAyC;;AAEzC,kFAAkF;AAClF;EACE,aAAa;AACf;;AAEA,wCAAwC;;AAExC;EACE,kCAAkC;EAClC,mCAAmC;EACnC,gBAAgB;EAChB,wBAAwB;EACxB,4BAA4B;EAC5B,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;;EAEE,kEAAkE;EAClE,oEAAoE;EACpE,8CAA8C;AAChD;;AAEA;;EAEE,oEAAoE;EACpE,8CAA8C;AAChD;;AAEA;;;;EAIE,kEAAkE;EAClE,4CAA4C;AAC9C;;AAEA;;;;EAIE,kEAAkE;EAClE,4CAA4C;AAC9C;;AAEA;EACE,yDAAqW;EACrW,gCAAgC;EAChC,2BAA2B;AAC7B;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,2BAA2B;EAC3B,YAAY;EACZ,kBAAkB;EAClB,iBAAiB;EACjB,kBAAkB;EAClB,gBAAgB;EAChB,mBAAmB;EACnB,kBAAkB;EAClB,kCAAkC;EAClC,mBAAmB;AACrB;;AAEA;EACE,+CAA+C;AACjD;;AAEA,4EAA4E;AAC5E;EACE,kBAAkB;EAClB,4BAA4B;EAC5B,iBAAiB;EACjB,kBAAkB;EAClB,sBAAsB;AACxB;;AAEA;EACE,mBAAmB;EACnB,kBAAkB;EAClB,YAAY;EACZ,sBAAsB;EACtB,UAAU;EACV,iBAAiB;EACjB,qCAAqC;EACrC,iBAAiB;EACjB,mBAAmB;EACnB,iBAAiB;EACjB,YAAY;EACZ,iBAAiB;EACjB,kBAAkB;EAClB,YAAY;EACZ,oCAAoC;AACtC;;AAEA;EACE,sBAAsB;EACtB,UAAU;AACZ;;AAEA;EACE,UAAU;EACV,oBAAoB;AACtB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.cm-editor {\\n  line-height: var(--jp-code-line-height);\\n  font-size: var(--jp-code-font-size);\\n  font-family: var(--jp-code-font-family);\\n  border: 0;\\n  border-radius: 0;\\n  height: auto;\\n\\n  /* Changed to auto to autogrow */\\n}\\n\\n/* Suppress automatic focus indicator outline */\\n.cm-editor.cm-focused {\\n  outline: unset;\\n}\\n\\n.cm-editor pre {\\n  padding: 0 var(--jp-code-padding);\\n}\\n\\n.jp-CodeMirrorEditor[data-type='inline'] .cm-dialog {\\n  background-color: var(--jp-layout-color0);\\n  color: var(--jp-content-font-color1);\\n}\\n\\n.jp-CodeMirrorEditor {\\n  cursor: text;\\n}\\n\\n/* When zoomed out 67% and 33% on a screen of 1440 width x 900 height */\\n@media screen and (width >= 2138px) and (width <= 4319px) {\\n  .jp-CodeMirrorEditor[data-type='inline'] .cm-cursor {\\n    border-left: var(--jp-code-cursor-width1) solid\\n      var(--jp-editor-cursor-color);\\n  }\\n}\\n\\n/* When zoomed out less than 33% */\\n@media screen and (width >= 4320px) {\\n  .jp-CodeMirrorEditor[data-type='inline'] .cm-cursor {\\n    border-left: var(--jp-code-cursor-width2) solid\\n      var(--jp-editor-cursor-color);\\n  }\\n}\\n\\n/* stylelint-disable selector-max-class */\\n\\n/* We need all this classes for higher specificity to override CodeMirror's rule */\\n.cm-editor.jp-mod-readOnly > .cm-scroller > .cm-cursorLayer .cm-cursor {\\n  display: none;\\n}\\n\\n/* stylelint-enable selector-max-class */\\n\\n.jp-CollaboratorCursor {\\n  border-left: 5px solid transparent;\\n  border-right: 5px solid transparent;\\n  border-top: none;\\n  border-bottom: 3px solid;\\n  background-clip: content-box;\\n  margin-left: -5px;\\n  margin-right: -5px;\\n}\\n\\n.cm-builtin {\\n  color: var(--jp-mirror-editor-builtin-color);\\n}\\n\\n.cm-searching,\\n.cm-searching span {\\n  /* `.cm-searching span`: we need to override syntax highlighting */\\n  background-color: var(--jp-search-unselected-match-background-color);\\n  color: var(--jp-search-unselected-match-color);\\n}\\n\\n.cm-searching::selection,\\n.cm-searching span::selection {\\n  background-color: var(--jp-search-unselected-match-background-color);\\n  color: var(--jp-search-unselected-match-color);\\n}\\n\\n.jp-current-match > .cm-searching,\\n.jp-current-match > .cm-searching span,\\n.cm-searching > .jp-current-match,\\n.cm-searching > .jp-current-match span {\\n  background-color: var(--jp-search-selected-match-background-color);\\n  color: var(--jp-search-selected-match-color);\\n}\\n\\n.jp-current-match > .cm-searching::selection,\\n.jp-current-match > .cm-searching span::selection,\\n.cm-searching > .jp-current-match::selection,\\n.cm-searching > .jp-current-match span::selection {\\n  background-color: var(--jp-search-selected-match-background-color);\\n  color: var(--jp-search-selected-match-color);\\n}\\n\\n.cm-trailingspace {\\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAsElEQVQIHQGlAFr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7+r3zKmT0/+pk9P/7+r3zAAAAAAAAAAABAAAAAAAAAAA6OPzM+/q9wAAAAAA6OPzMwAAAAAAAAAAAgAAAAAAAAAAGR8NiRQaCgAZIA0AGR8NiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQyoYJ/SY80UAAAAASUVORK5CYII=);\\n  background-position: center left;\\n  background-repeat: repeat-x;\\n}\\n\\n.jp-CollaboratorCursor-hover {\\n  position: absolute;\\n  z-index: 1;\\n  transform: translateX(-50%);\\n  color: white;\\n  border-radius: 3px;\\n  padding-left: 4px;\\n  padding-right: 4px;\\n  padding-top: 1px;\\n  padding-bottom: 1px;\\n  text-align: center;\\n  font-size: var(--jp-ui-font-size1);\\n  white-space: nowrap;\\n}\\n\\n.jp-CodeMirror-ruler {\\n  border-left: 1px dashed var(--jp-border-color2);\\n}\\n\\n/* Styles for shared cursors (remote cursor locations and selected ranges) */\\n.jp-CodeMirrorEditor .cm-ySelectionCaret {\\n  position: relative;\\n  border-left: 1px solid black;\\n  margin-left: -1px;\\n  margin-right: -1px;\\n  box-sizing: border-box;\\n}\\n\\n.jp-CodeMirrorEditor .cm-ySelectionCaret > .cm-ySelectionInfo {\\n  white-space: nowrap;\\n  position: absolute;\\n  top: -1.15em;\\n  padding-bottom: 0.05em;\\n  left: -1px;\\n  font-size: 0.95em;\\n  font-family: var(--jp-ui-font-family);\\n  font-weight: bold;\\n  line-height: normal;\\n  user-select: none;\\n  color: white;\\n  padding-left: 2px;\\n  padding-right: 2px;\\n  z-index: 101;\\n  transition: opacity 0.3s ease-in-out;\\n}\\n\\n.jp-CodeMirrorEditor .cm-ySelectionInfo {\\n  transition-delay: 0.7s;\\n  opacity: 0;\\n}\\n\\n.jp-CodeMirrorEditor .cm-ySelectionCaret:hover > .cm-ySelectionInfo {\\n  opacity: 1;\\n  transition-delay: 0s;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n:root {\n  --jp-private-completer-item-height: 24px;\n\n  /* Shift the baseline of the type character to align with the match text */\n  --jp-private-completer-type-offset: 2px;\n}\n\n.jp-Completer {\n  box-shadow: var(--jp-elevation-z6);\n  background: var(--jp-layout-color1);\n  color: var(--jp-content-font-color1);\n  border: var(--jp-border-width) solid var(--jp-border-color1);\n  padding: 0;\n  display: flex;\n  flex-direction: row;\n\n  /* Needed to avoid scrollbar issues when using cached width. */\n  box-sizing: content-box;\n\n  /* Position the completer relative to the text editor, align the '.' */\n  margin: 4px 0 0 -30px;\n  z-index: 10001;\n}\n\n.jp-Completer-docpanel {\n  border-left: var(--jp-border-width) solid var(--jp-border-color1);\n  width: 400px;\n  flex-shrink: 0;\n  overflow-y: scroll;\n  overflow-x: auto;\n  padding: 8px;\n  max-height: calc((10 * var(--jp-private-completer-item-height)) - 16px);\n}\n\n.jp-Completer-docpanel pre {\n  border: none;\n  margin: 0;\n  padding: 0;\n  white-space: pre-wrap;\n}\n\n.jp-Completer-list {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n  overflow-y: scroll;\n  overflow-x: hidden;\n  max-height: calc((10 * var(--jp-private-completer-item-height)));\n  min-height: calc(var(--jp-private-completer-item-height));\n  width: 100%;\n}\n\n.jp-Completer-item {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  height: var(--jp-private-completer-item-height);\n  min-width: 150px;\n  display: grid;\n  grid-template-columns: min-content 1fr min-content;\n  position: relative;\n}\n\n.jp-Completer-item .jp-Completer-match {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0 8px 0 6px;\n  height: var(--jp-private-completer-item-height);\n  font-family: var(--jp-code-font-family);\n  font-size: var(--jp-code-font-size);\n  line-height: var(--jp-private-completer-item-height);\n  white-space: nowrap;\n}\n\n.jp-Completer-deprecated .jp-Completer-match {\n  text-decoration: line-through;\n  color: var(--jp-content-font-color2);\n}\n\n.jp-Completer-item .jp-Completer-type {\n  box-sizing: border-box;\n  height: var(--jp-private-completer-item-height);\n  background: transparent;\n  width: var(--jp-private-completer-item-height);\n}\n\n.jp-Completer-item .jp-Completer-icon {\n  /* Normal element size from LabIconStyle.ISheetOptions */\n  height: 16px;\n  width: 16px;\n}\n\n.jp-Completer-item .jp-Completer-monogram {\n  text-align: center;\n  color: white;\n  width: var(--jp-private-completer-item-height);\n  font-family: var(--jp-ui-font-family);\n  font-size: var(--jp-ui-font-size1);\n  line-height: calc(\n    var(--jp-private-completer-item-height) -\n      var(--jp-private-completer-type-offset)\n  );\n  padding-bottom: var(--jp-private-completer-type-offset);\n}\n\n.jp-Completer-item .jp-Completer-typeExtended {\n  box-sizing: border-box;\n  height: var(--jp-private-completer-item-height);\n  text-align: right;\n  background: transparent;\n  color: var(--jp-ui-font-color2);\n  font-family: var(--jp-code-font-family);\n  font-size: var(--jp-code-font-size);\n  line-height: var(--jp-private-completer-item-height);\n  padding-right: 8px;\n}\n\n.jp-Completer-item:hover {\n  background: var(--jp-layout-color2);\n  opacity: 0.8;\n}\n\n.jp-Completer-item.jp-mod-active {\n  background: var(--jp-brand-color1);\n  color: white;\n}\n\n.jp-Completer-item .jp-Completer-match mark {\n  font-weight: bold;\n  background: inherit;\n  color: inherit;\n}\n\n.jp-Completer-type[data-color-index='0'] {\n  background: var(--jp-completer-type-background0, transparent);\n}\n\n.jp-Completer-type[data-color-index='1'] {\n  background: var(--jp-completer-type-background1, #1f77b4);\n}\n\n.jp-Completer-type[data-color-index='2'] {\n  background: var(--jp-completer-type-background2, #ff7f0e);\n}\n\n.jp-Completer-type[data-color-index='3'] {\n  background: var(--jp-completer-type-background3, #2ca02c);\n}\n\n.jp-Completer-type[data-color-index='4'] {\n  background: var(--jp-completer-type-background4, #d62728);\n}\n\n.jp-Completer-type[data-color-index='5'] {\n  background: var(--jp-completer-type-background5, #9467bd);\n}\n\n.jp-Completer-type[data-color-index='6'] {\n  background: var(--jp-completer-type-background6, #8c564b);\n}\n\n.jp-Completer-type[data-color-index='7'] {\n  background: var(--jp-completer-type-background7, #e377c2);\n}\n\n.jp-Completer-type[data-color-index='8'] {\n  background: var(--jp-completer-type-background8, #7f7f7f);\n}\n\n.jp-Completer-type[data-color-index='9'] {\n  background: var(--jp-completer-type-background9, #bcbd22);\n}\n\n.jp-Completer-type[data-color-index='10'] {\n  background: var(--jp-completer-type-background10, #17becf);\n}\n\n.jp-Completer-loading-bar-container {\n  height: 2px;\n  width: calc(100% - var(--jp-private-completer-item-height));\n  left: var(--jp-private-completer-item-height);\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n\n.jp-Completer-loading-bar {\n  height: 100%;\n  width: 50%;\n  background-color: var(--jp-accent-color2);\n  position: absolute;\n  left: -50%;\n  animation: jp-Completer-loading 2s ease-in 0.5s infinite;\n}\n\n@keyframes jp-Completer-loading {\n  0% {\n    transform: translateX(0);\n  }\n\n  100% {\n    transform: translateX(400%);\n  }\n}\n\n.jp-GhostText {\n  color: var(--jp-ui-font-color3);\n  white-space: pre-wrap;\n}\n\n.jp-GhostText-lineSpacer,\n.jp-GhostText-letterSpacer {\n  opacity: 0;\n  display: inline-block;\n  vertical-align: top;\n  /* stylelint-disable-next-line csstree/validator */\n  text-wrap: none;\n}\n\n.jp-GhostText-letterSpacer {\n  max-width: 0;\n}\n\n.jp-GhostText-lineSpacer {\n  /* duration and delay are overwritten by inline styles */\n  animation: jp-GhostText-hide 300ms 700ms ease-out forwards;\n}\n\n@keyframes jp-GhostText-hide {\n  0% {\n    font-size: unset;\n  }\n\n  100% {\n    font-size: 0;\n  }\n}\n\n.jp-GhostText-expandHidden {\n  border: 1px solid var(--jp-border-color0);\n  border-radius: var(--jp-border-radius);\n  background: var(--jp-layout-color0);\n  color: var(--jp-content-font-color3);\n  padding: 0 4px;\n  margin: 0 4px;\n  cursor: default;\n}\n\n.jp-GhostText-hiddenWrapper:hover > .jp-GhostText-hiddenLines {\n  display: inline;\n}\n\n.jp-GhostText-hiddenLines {\n  display: none;\n}\n\n.jp-GhostText[data-animation='uncover'] {\n  position: relative;\n}\n\n.jp-GhostText-streamedToken {\n  white-space: pre;\n}\n\n.jp-GhostText[data-animation='uncover'] > .jp-GhostText-streamedToken {\n  animation: jp-GhostText-typing 2s forwards;\n  display: inline-flex;\n  overflow: hidden;\n}\n\n@keyframes jp-GhostText-typing {\n  from {\n    max-width: 0;\n  }\n\n  to {\n    max-width: 100%;\n  }\n}\n\n.jp-GhostText-streamingIndicator::after {\n  animation: jp-GhostText-streaming 2s infinite;\n  animation-delay: 400ms;\n  content: ' ';\n  background: var(--jp-layout-color4);\n  opacity: 0.2;\n}\n\n@keyframes jp-GhostText-streaming {\n  0% {\n    opacity: 0.2;\n  }\n\n  20% {\n    opacity: 0.4;\n  }\n\n  40% {\n    opacity: 0.2;\n  }\n}\n\n.jp-GhostText-errorIndicator::after {\n  animation: jp-GhostText-error 500ms 1;\n  animation-delay: 3500ms;\n  color: var(--jp-error-color1);\n  font-size: 150%;\n  line-height: 10px;\n  margin-left: 2px;\n  padding: 0 4px;\n  content: '⚠';\n  cursor: help;\n  position: relative;\n  top: 2px;\n}\n\n@keyframes jp-GhostText-error {\n  0% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n.jp-InlineCompleter {\n  box-shadow: var(--jp-elevation-z2);\n  background: var(--jp-layout-color1);\n  color: var(--jp-content-font-color1);\n  border: var(--jp-border-width) solid var(--jp-border-color1);\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  padding: 0 8px;\n}\n\n.jp-InlineCompleter-progressBar {\n  height: 2px;\n  position: absolute;\n  top: 0;\n  left: 0;\n  background-color: var(--jp-accent-color2);\n}\n\n.jp-InlineCompleter[data-display='onHover'] {\n  opacity: 0;\n  transition:\n    visibility 0s linear 0.1s,\n    opacity 0.1s linear;\n  visibility: hidden;\n}\n\n.jp-InlineCompleter[data-display='onHover']:hover,\n.jp-InlineCompleter-hover[data-display='onHover'] {\n  opacity: 1;\n  visibility: visible;\n  transition-delay: 0s;\n}\n\n.jp-InlineCompleter[data-display='never'] {\n  display: none;\n}\n\n.jp-InlineCompleter > .jp-Toolbar {\n  box-shadow: none;\n  border-bottom: none;\n  background: none;\n}\n\n.jp-InlineCompleter[data-show-shortcuts='false']\n  .jp-ToolbarButtonComponent-label {\n  display: none;\n}\n\n.jp-InlineCompleter [data-command='inline-completer:next'] > svg,\n.jp-InlineCompleter [data-command='inline-completer:previous'] > svg {\n  scale: 1.5;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/completer/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,wCAAwC;;EAExC,0EAA0E;EAC1E,uCAAuC;AACzC;;AAEA;EACE,kCAAkC;EAClC,mCAAmC;EACnC,oCAAoC;EACpC,4DAA4D;EAC5D,UAAU;EACV,aAAa;EACb,mBAAmB;;EAEnB,8DAA8D;EAC9D,uBAAuB;;EAEvB,sEAAsE;EACtE,qBAAqB;EACrB,cAAc;AAChB;;AAEA;EACE,iEAAiE;EACjE,YAAY;EACZ,cAAc;EACd,kBAAkB;EAClB,gBAAgB;EAChB,YAAY;EACZ,uEAAuE;AACzE;;AAEA;EACE,YAAY;EACZ,SAAS;EACT,UAAU;EACV,qBAAqB;AACvB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,qBAAqB;EACrB,kBAAkB;EAClB,kBAAkB;EAClB,gEAAgE;EAChE,yDAAyD;EACzD,WAAW;AACb;;AAEA;EACE,sBAAsB;EACtB,SAAS;EACT,UAAU;EACV,+CAA+C;EAC/C,gBAAgB;EAChB,aAAa;EACb,kDAAkD;EAClD,kBAAkB;AACpB;;AAEA;EACE,sBAAsB;EACtB,SAAS;EACT,oBAAoB;EACpB,+CAA+C;EAC/C,uCAAuC;EACvC,mCAAmC;EACnC,oDAAoD;EACpD,mBAAmB;AACrB;;AAEA;EACE,6BAA6B;EAC7B,oCAAoC;AACtC;;AAEA;EACE,sBAAsB;EACtB,+CAA+C;EAC/C,uBAAuB;EACvB,8CAA8C;AAChD;;AAEA;EACE,wDAAwD;EACxD,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,kBAAkB;EAClB,YAAY;EACZ,8CAA8C;EAC9C,qCAAqC;EACrC,kCAAkC;EAClC;;;GAGC;EACD,uDAAuD;AACzD;;AAEA;EACE,sBAAsB;EACtB,+CAA+C;EAC/C,iBAAiB;EACjB,uBAAuB;EACvB,+BAA+B;EAC/B,uCAAuC;EACvC,mCAAmC;EACnC,oDAAoD;EACpD,kBAAkB;AACpB;;AAEA;EACE,mCAAmC;EACnC,YAAY;AACd;;AAEA;EACE,kCAAkC;EAClC,YAAY;AACd;;AAEA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,cAAc;AAChB;;AAEA;EACE,6DAA6D;AAC/D;;AAEA;EACE,yDAAyD;AAC3D;;AAEA;EACE,yDAAyD;AAC3D;;AAEA;EACE,yDAAyD;AAC3D;;AAEA;EACE,yDAAyD;AAC3D;;AAEA;EACE,yDAAyD;AAC3D;;AAEA;EACE,yDAAyD;AAC3D;;AAEA;EACE,yDAAyD;AAC3D;;AAEA;EACE,yDAAyD;AAC3D;;AAEA;EACE,yDAAyD;AAC3D;;AAEA;EACE,0DAA0D;AAC5D;;AAEA;EACE,WAAW;EACX,2DAA2D;EAC3D,6CAA6C;EAC7C,kBAAkB;EAClB,gBAAgB;EAChB,MAAM;AACR;;AAEA;EACE,YAAY;EACZ,UAAU;EACV,yCAAyC;EACzC,kBAAkB;EAClB,UAAU;EACV,wDAAwD;AAC1D;;AAEA;EACE;IACE,wBAAwB;EAC1B;;EAEA;IACE,2BAA2B;EAC7B;AACF;;AAEA;EACE,+BAA+B;EAC/B,qBAAqB;AACvB;;AAEA;;EAEE,UAAU;EACV,qBAAqB;EACrB,mBAAmB;EACnB,kDAAkD;EAClD,eAAe;AACjB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,wDAAwD;EACxD,0DAA0D;AAC5D;;AAEA;EACE;IACE,gBAAgB;EAClB;;EAEA;IACE,YAAY;EACd;AACF;;AAEA;EACE,yCAAyC;EACzC,sCAAsC;EACtC,mCAAmC;EACnC,oCAAoC;EACpC,cAAc;EACd,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,0CAA0C;EAC1C,oBAAoB;EACpB,gBAAgB;AAClB;;AAEA;EACE;IACE,YAAY;EACd;;EAEA;IACE,eAAe;EACjB;AACF;;AAEA;EACE,6CAA6C;EAC7C,sBAAsB;EACtB,YAAY;EACZ,mCAAmC;EACnC,YAAY;AACd;;AAEA;EACE;IACE,YAAY;EACd;;EAEA;IACE,YAAY;EACd;;EAEA;IACE,YAAY;EACd;AACF;;AAEA;EACE,qCAAqC;EACrC,uBAAuB;EACvB,6BAA6B;EAC7B,eAAe;EACf,iBAAiB;EACjB,gBAAgB;EAChB,cAAc;EACd,YAAY;EACZ,YAAY;EACZ,kBAAkB;EAClB,QAAQ;AACV;;AAEA;EACE;IACE,UAAU;EACZ;;EAEA;IACE,UAAU;EACZ;AACF;;AAEA;EACE,kCAAkC;EAClC,mCAAmC;EACnC,oCAAoC;EACpC,4DAA4D;EAC5D,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,cAAc;AAChB;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,yCAAyC;AAC3C;;AAEA;EACE,UAAU;EACV;;uBAEqB;EACrB,kBAAkB;AACpB;;AAEA;;EAEE,UAAU;EACV,mBAAmB;EACnB,oBAAoB;AACtB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;;EAEE,aAAa;AACf;;AAEA;;EAEE,UAAU;AACZ\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  --jp-private-completer-item-height: 24px;\\n\\n  /* Shift the baseline of the type character to align with the match text */\\n  --jp-private-completer-type-offset: 2px;\\n}\\n\\n.jp-Completer {\\n  box-shadow: var(--jp-elevation-z6);\\n  background: var(--jp-layout-color1);\\n  color: var(--jp-content-font-color1);\\n  border: var(--jp-border-width) solid var(--jp-border-color1);\\n  padding: 0;\\n  display: flex;\\n  flex-direction: row;\\n\\n  /* Needed to avoid scrollbar issues when using cached width. */\\n  box-sizing: content-box;\\n\\n  /* Position the completer relative to the text editor, align the '.' */\\n  margin: 4px 0 0 -30px;\\n  z-index: 10001;\\n}\\n\\n.jp-Completer-docpanel {\\n  border-left: var(--jp-border-width) solid var(--jp-border-color1);\\n  width: 400px;\\n  flex-shrink: 0;\\n  overflow-y: scroll;\\n  overflow-x: auto;\\n  padding: 8px;\\n  max-height: calc((10 * var(--jp-private-completer-item-height)) - 16px);\\n}\\n\\n.jp-Completer-docpanel pre {\\n  border: none;\\n  margin: 0;\\n  padding: 0;\\n  white-space: pre-wrap;\\n}\\n\\n.jp-Completer-list {\\n  margin: 0;\\n  padding: 0;\\n  list-style-type: none;\\n  overflow-y: scroll;\\n  overflow-x: hidden;\\n  max-height: calc((10 * var(--jp-private-completer-item-height)));\\n  min-height: calc(var(--jp-private-completer-item-height));\\n  width: 100%;\\n}\\n\\n.jp-Completer-item {\\n  box-sizing: border-box;\\n  margin: 0;\\n  padding: 0;\\n  height: var(--jp-private-completer-item-height);\\n  min-width: 150px;\\n  display: grid;\\n  grid-template-columns: min-content 1fr min-content;\\n  position: relative;\\n}\\n\\n.jp-Completer-item .jp-Completer-match {\\n  box-sizing: border-box;\\n  margin: 0;\\n  padding: 0 8px 0 6px;\\n  height: var(--jp-private-completer-item-height);\\n  font-family: var(--jp-code-font-family);\\n  font-size: var(--jp-code-font-size);\\n  line-height: var(--jp-private-completer-item-height);\\n  white-space: nowrap;\\n}\\n\\n.jp-Completer-deprecated .jp-Completer-match {\\n  text-decoration: line-through;\\n  color: var(--jp-content-font-color2);\\n}\\n\\n.jp-Completer-item .jp-Completer-type {\\n  box-sizing: border-box;\\n  height: var(--jp-private-completer-item-height);\\n  background: transparent;\\n  width: var(--jp-private-completer-item-height);\\n}\\n\\n.jp-Completer-item .jp-Completer-icon {\\n  /* Normal element size from LabIconStyle.ISheetOptions */\\n  height: 16px;\\n  width: 16px;\\n}\\n\\n.jp-Completer-item .jp-Completer-monogram {\\n  text-align: center;\\n  color: white;\\n  width: var(--jp-private-completer-item-height);\\n  font-family: var(--jp-ui-font-family);\\n  font-size: var(--jp-ui-font-size1);\\n  line-height: calc(\\n    var(--jp-private-completer-item-height) -\\n      var(--jp-private-completer-type-offset)\\n  );\\n  padding-bottom: var(--jp-private-completer-type-offset);\\n}\\n\\n.jp-Completer-item .jp-Completer-typeExtended {\\n  box-sizing: border-box;\\n  height: var(--jp-private-completer-item-height);\\n  text-align: right;\\n  background: transparent;\\n  color: var(--jp-ui-font-color2);\\n  font-family: var(--jp-code-font-family);\\n  font-size: var(--jp-code-font-size);\\n  line-height: var(--jp-private-completer-item-height);\\n  padding-right: 8px;\\n}\\n\\n.jp-Completer-item:hover {\\n  background: var(--jp-layout-color2);\\n  opacity: 0.8;\\n}\\n\\n.jp-Completer-item.jp-mod-active {\\n  background: var(--jp-brand-color1);\\n  color: white;\\n}\\n\\n.jp-Completer-item .jp-Completer-match mark {\\n  font-weight: bold;\\n  background: inherit;\\n  color: inherit;\\n}\\n\\n.jp-Completer-type[data-color-index='0'] {\\n  background: var(--jp-completer-type-background0, transparent);\\n}\\n\\n.jp-Completer-type[data-color-index='1'] {\\n  background: var(--jp-completer-type-background1, #1f77b4);\\n}\\n\\n.jp-Completer-type[data-color-index='2'] {\\n  background: var(--jp-completer-type-background2, #ff7f0e);\\n}\\n\\n.jp-Completer-type[data-color-index='3'] {\\n  background: var(--jp-completer-type-background3, #2ca02c);\\n}\\n\\n.jp-Completer-type[data-color-index='4'] {\\n  background: var(--jp-completer-type-background4, #d62728);\\n}\\n\\n.jp-Completer-type[data-color-index='5'] {\\n  background: var(--jp-completer-type-background5, #9467bd);\\n}\\n\\n.jp-Completer-type[data-color-index='6'] {\\n  background: var(--jp-completer-type-background6, #8c564b);\\n}\\n\\n.jp-Completer-type[data-color-index='7'] {\\n  background: var(--jp-completer-type-background7, #e377c2);\\n}\\n\\n.jp-Completer-type[data-color-index='8'] {\\n  background: var(--jp-completer-type-background8, #7f7f7f);\\n}\\n\\n.jp-Completer-type[data-color-index='9'] {\\n  background: var(--jp-completer-type-background9, #bcbd22);\\n}\\n\\n.jp-Completer-type[data-color-index='10'] {\\n  background: var(--jp-completer-type-background10, #17becf);\\n}\\n\\n.jp-Completer-loading-bar-container {\\n  height: 2px;\\n  width: calc(100% - var(--jp-private-completer-item-height));\\n  left: var(--jp-private-completer-item-height);\\n  position: absolute;\\n  overflow: hidden;\\n  top: 0;\\n}\\n\\n.jp-Completer-loading-bar {\\n  height: 100%;\\n  width: 50%;\\n  background-color: var(--jp-accent-color2);\\n  position: absolute;\\n  left: -50%;\\n  animation: jp-Completer-loading 2s ease-in 0.5s infinite;\\n}\\n\\n@keyframes jp-Completer-loading {\\n  0% {\\n    transform: translateX(0);\\n  }\\n\\n  100% {\\n    transform: translateX(400%);\\n  }\\n}\\n\\n.jp-GhostText {\\n  color: var(--jp-ui-font-color3);\\n  white-space: pre-wrap;\\n}\\n\\n.jp-GhostText-lineSpacer,\\n.jp-GhostText-letterSpacer {\\n  opacity: 0;\\n  display: inline-block;\\n  vertical-align: top;\\n  /* stylelint-disable-next-line csstree/validator */\\n  text-wrap: none;\\n}\\n\\n.jp-GhostText-letterSpacer {\\n  max-width: 0;\\n}\\n\\n.jp-GhostText-lineSpacer {\\n  /* duration and delay are overwritten by inline styles */\\n  animation: jp-GhostText-hide 300ms 700ms ease-out forwards;\\n}\\n\\n@keyframes jp-GhostText-hide {\\n  0% {\\n    font-size: unset;\\n  }\\n\\n  100% {\\n    font-size: 0;\\n  }\\n}\\n\\n.jp-GhostText-expandHidden {\\n  border: 1px solid var(--jp-border-color0);\\n  border-radius: var(--jp-border-radius);\\n  background: var(--jp-layout-color0);\\n  color: var(--jp-content-font-color3);\\n  padding: 0 4px;\\n  margin: 0 4px;\\n  cursor: default;\\n}\\n\\n.jp-GhostText-hiddenWrapper:hover > .jp-GhostText-hiddenLines {\\n  display: inline;\\n}\\n\\n.jp-GhostText-hiddenLines {\\n  display: none;\\n}\\n\\n.jp-GhostText[data-animation='uncover'] {\\n  position: relative;\\n}\\n\\n.jp-GhostText-streamedToken {\\n  white-space: pre;\\n}\\n\\n.jp-GhostText[data-animation='uncover'] > .jp-GhostText-streamedToken {\\n  animation: jp-GhostText-typing 2s forwards;\\n  display: inline-flex;\\n  overflow: hidden;\\n}\\n\\n@keyframes jp-GhostText-typing {\\n  from {\\n    max-width: 0;\\n  }\\n\\n  to {\\n    max-width: 100%;\\n  }\\n}\\n\\n.jp-GhostText-streamingIndicator::after {\\n  animation: jp-GhostText-streaming 2s infinite;\\n  animation-delay: 400ms;\\n  content: ' ';\\n  background: var(--jp-layout-color4);\\n  opacity: 0.2;\\n}\\n\\n@keyframes jp-GhostText-streaming {\\n  0% {\\n    opacity: 0.2;\\n  }\\n\\n  20% {\\n    opacity: 0.4;\\n  }\\n\\n  40% {\\n    opacity: 0.2;\\n  }\\n}\\n\\n.jp-GhostText-errorIndicator::after {\\n  animation: jp-GhostText-error 500ms 1;\\n  animation-delay: 3500ms;\\n  color: var(--jp-error-color1);\\n  font-size: 150%;\\n  line-height: 10px;\\n  margin-left: 2px;\\n  padding: 0 4px;\\n  content: '⚠';\\n  cursor: help;\\n  position: relative;\\n  top: 2px;\\n}\\n\\n@keyframes jp-GhostText-error {\\n  0% {\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    opacity: 0;\\n  }\\n}\\n\\n.jp-InlineCompleter {\\n  box-shadow: var(--jp-elevation-z2);\\n  background: var(--jp-layout-color1);\\n  color: var(--jp-content-font-color1);\\n  border: var(--jp-border-width) solid var(--jp-border-color1);\\n  display: flex;\\n  flex-direction: row;\\n  align-items: center;\\n  padding: 0 8px;\\n}\\n\\n.jp-InlineCompleter-progressBar {\\n  height: 2px;\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  background-color: var(--jp-accent-color2);\\n}\\n\\n.jp-InlineCompleter[data-display='onHover'] {\\n  opacity: 0;\\n  transition:\\n    visibility 0s linear 0.1s,\\n    opacity 0.1s linear;\\n  visibility: hidden;\\n}\\n\\n.jp-InlineCompleter[data-display='onHover']:hover,\\n.jp-InlineCompleter-hover[data-display='onHover'] {\\n  opacity: 1;\\n  visibility: visible;\\n  transition-delay: 0s;\\n}\\n\\n.jp-InlineCompleter[data-display='never'] {\\n  display: none;\\n}\\n\\n.jp-InlineCompleter > .jp-Toolbar {\\n  box-shadow: none;\\n  border-bottom: none;\\n  background: none;\\n}\\n\\n.jp-InlineCompleter[data-show-shortcuts='false']\\n  .jp-ToolbarButtonComponent-label {\\n  display: none;\\n}\\n\\n.jp-InlineCompleter [data-command='inline-completer:next'] > svg,\\n.jp-InlineCompleter [data-command='inline-completer:previous'] > svg {\\n  scale: 1.5;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* Toolbar menu to select the prompt cell position */\n.jp-CodeConsolePromptMenu {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n}\n\n.jp-CodeConsolePromptMenu .lm-Menu-itemIcon > svg {\n  vertical-align: sub;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/console-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E,oDAAoD;AACpD;EACE,aAAa;EACb,sBAAsB;EACtB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,mBAAmB;AACrB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/* Toolbar menu to select the prompt cell position */\\n.jp-CodeConsolePromptMenu {\\n  display: flex;\\n  flex-direction: column;\\n  align-items: center;\\n  justify-content: center;\\n}\\n\\n.jp-CodeConsolePromptMenu .lm-Menu-itemIcon > svg {\\n  vertical-align: sub;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-ConsolePanel {\n  display: flex;\n  margin-top: -1px;\n  min-width: 240px;\n  min-height: 120px;\n}\n\n.jp-CodeConsole {\n  height: 100%;\n  padding: 0;\n  display: flex;\n}\n\n.jp-CodeConsole .jp-Cell {\n  padding: var(--jp-cell-padding);\n}\n\n/*-----------------------------------------------------------------------------\n| Content (already run cells)\n|----------------------------------------------------------------------------*/\n\n.jp-CodeConsole-content {\n  background: var(--jp-layout-color0);\n  overflow: auto;\n  padding: 0 var(--jp-console-padding);\n  min-width: calc(10 * var(--jp-ui-font-size1));\n  min-height: calc(5 * var(--jp-ui-font-size1));\n}\n\n.jp-CodeConsole-content .jp-Cell:not(.jp-mod-active) .jp-InputPrompt {\n  opacity: var(--jp-cell-prompt-not-active-opacity);\n  color: var(--jp-cell-inprompt-font-color);\n  cursor: move;\n}\n\n.jp-CodeConsole-content .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt {\n  opacity: var(--jp-cell-prompt-not-active-opacity);\n  color: var(--jp-cell-outprompt-font-color);\n}\n\n/* This rule is for styling cell run by another activity in this console */\n\n/* .jp-CodeConsole-content .jp-Cell.jp-CodeConsole-foreignCell {\n} */\n\n.jp-CodeConsole-content .jp-InputArea-editor.jp-InputArea-editor {\n  background: transparent;\n  border: 1px solid transparent;\n}\n\n.jp-CodeConsole-content .jp-CodeConsole-banner .jp-InputPrompt {\n  display: none;\n}\n\n/* collapser is hovered */\n.jp-CodeConsole-content .jp-Cell .jp-Collapser:hover {\n  box-shadow: var(--jp-elevation-z2);\n  background: var(--jp-brand-color1);\n  opacity: var(--jp-cell-collapser-not-active-hover-opacity);\n}\n\n/*-----------------------------------------------------------------------------\n| Input/prompt cell\n|----------------------------------------------------------------------------*/\n\n.jp-CodeConsole-input {\n  overflow: auto;\n  padding: var(--jp-cell-padding) var(--jp-console-padding);\n\n  /* This matches the box shadow on the notebook toolbar, eventually we should create\n   * CSS variables for this */\n  box-shadow: 0 0.4px 6px 0 rgba(0, 0, 0, 0.1);\n  background: var(--jp-layout-color0);\n  min-width: calc(10 * var(--jp-ui-font-size1));\n  min-height: calc(4 * var(--jp-ui-font-size1));\n}\n\n.jp-CodeConsole-input .jp-CodeConsole-prompt .jp-InputArea {\n  height: 100%;\n  min-height: 100%;\n}\n\n.jp-CodeConsole-promptCell .jp-InputArea-editor.jp-mod-focused {\n  border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);\n  box-shadow: var(--jp-input-box-shadow);\n  background-color: var(--jp-cell-editor-active-background);\n}\n\n/*-----------------------------------------------------------------------------\n| Presentation Mode (.jp-mod-presentationMode)\n|----------------------------------------------------------------------------*/\n\n.jp-mod-presentationMode .jp-CodeConsole {\n  --jp-content-font-size1: var(--jp-content-presentation-font-size1);\n  --jp-code-font-size: var(--jp-code-presentation-font-size);\n}\n\n.jp-mod-presentationMode .jp-CodeConsole .jp-Cell .jp-InputPrompt,\n.jp-mod-presentationMode .jp-CodeConsole .jp-Cell .jp-OutputPrompt {\n  flex: 0 0 110px;\n}\n\n/*-----------------------------------------------------------------------------\n| Split Panel Container\n|----------------------------------------------------------------------------*/\n.jp-CodeConsole-split {\n  display: flex;\n  height: 100%;\n  width: 100%;\n  overflow: hidden;\n}\n\n.jp-CodeConsole-split.lm-SplitPanel .lm-SplitPanel-handle::after {\n  background-color: var(--jp-border-color2);\n  min-height: calc(2 * var(--jp-border-width));\n  min-width: calc(2 * var(--jp-border-width));\n}\n\n/*-----------------------------------------------------------------------------\n| Mobile\n|----------------------------------------------------------------------------*/\n@media only screen and (width <= 760px) {\n  .jp-CodeConsole-input {\n    min-height: calc(6 * var(--jp-ui-font-size1));\n  }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/console/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,aAAa;EACb,gBAAgB;EAChB,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,UAAU;EACV,aAAa;AACf;;AAEA;EACE,+BAA+B;AACjC;;AAEA;;8EAE8E;;AAE9E;EACE,mCAAmC;EACnC,cAAc;EACd,oCAAoC;EACpC,6CAA6C;EAC7C,6CAA6C;AAC/C;;AAEA;EACE,iDAAiD;EACjD,yCAAyC;EACzC,YAAY;AACd;;AAEA;EACE,iDAAiD;EACjD,0CAA0C;AAC5C;;AAEA,0EAA0E;;AAE1E;GACG;;AAEH;EACE,uBAAuB;EACvB,6BAA6B;AAC/B;;AAEA;EACE,aAAa;AACf;;AAEA,yBAAyB;AACzB;EACE,kCAAkC;EAClC,kCAAkC;EAClC,0DAA0D;AAC5D;;AAEA;;8EAE8E;;AAE9E;EACE,cAAc;EACd,yDAAyD;;EAEzD;6BAC2B;EAC3B,4CAA4C;EAC5C,mCAAmC;EACnC,6CAA6C;EAC7C,6CAA6C;AAC/C;;AAEA;EACE,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,8EAA8E;EAC9E,sCAAsC;EACtC,yDAAyD;AAC3D;;AAEA;;8EAE8E;;AAE9E;EACE,kEAAkE;EAClE,0DAA0D;AAC5D;;AAEA;;EAEE,eAAe;AACjB;;AAEA;;8EAE8E;AAC9E;EACE,aAAa;EACb,YAAY;EACZ,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,yCAAyC;EACzC,4CAA4C;EAC5C,2CAA2C;AAC7C;;AAEA;;8EAE8E;AAC9E;EACE;IACE,6CAA6C;EAC/C;AACF\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-ConsolePanel {\\n  display: flex;\\n  margin-top: -1px;\\n  min-width: 240px;\\n  min-height: 120px;\\n}\\n\\n.jp-CodeConsole {\\n  height: 100%;\\n  padding: 0;\\n  display: flex;\\n}\\n\\n.jp-CodeConsole .jp-Cell {\\n  padding: var(--jp-cell-padding);\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Content (already run cells)\\n|----------------------------------------------------------------------------*/\\n\\n.jp-CodeConsole-content {\\n  background: var(--jp-layout-color0);\\n  overflow: auto;\\n  padding: 0 var(--jp-console-padding);\\n  min-width: calc(10 * var(--jp-ui-font-size1));\\n  min-height: calc(5 * var(--jp-ui-font-size1));\\n}\\n\\n.jp-CodeConsole-content .jp-Cell:not(.jp-mod-active) .jp-InputPrompt {\\n  opacity: var(--jp-cell-prompt-not-active-opacity);\\n  color: var(--jp-cell-inprompt-font-color);\\n  cursor: move;\\n}\\n\\n.jp-CodeConsole-content .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt {\\n  opacity: var(--jp-cell-prompt-not-active-opacity);\\n  color: var(--jp-cell-outprompt-font-color);\\n}\\n\\n/* This rule is for styling cell run by another activity in this console */\\n\\n/* .jp-CodeConsole-content .jp-Cell.jp-CodeConsole-foreignCell {\\n} */\\n\\n.jp-CodeConsole-content .jp-InputArea-editor.jp-InputArea-editor {\\n  background: transparent;\\n  border: 1px solid transparent;\\n}\\n\\n.jp-CodeConsole-content .jp-CodeConsole-banner .jp-InputPrompt {\\n  display: none;\\n}\\n\\n/* collapser is hovered */\\n.jp-CodeConsole-content .jp-Cell .jp-Collapser:hover {\\n  box-shadow: var(--jp-elevation-z2);\\n  background: var(--jp-brand-color1);\\n  opacity: var(--jp-cell-collapser-not-active-hover-opacity);\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Input/prompt cell\\n|----------------------------------------------------------------------------*/\\n\\n.jp-CodeConsole-input {\\n  overflow: auto;\\n  padding: var(--jp-cell-padding) var(--jp-console-padding);\\n\\n  /* This matches the box shadow on the notebook toolbar, eventually we should create\\n   * CSS variables for this */\\n  box-shadow: 0 0.4px 6px 0 rgba(0, 0, 0, 0.1);\\n  background: var(--jp-layout-color0);\\n  min-width: calc(10 * var(--jp-ui-font-size1));\\n  min-height: calc(4 * var(--jp-ui-font-size1));\\n}\\n\\n.jp-CodeConsole-input .jp-CodeConsole-prompt .jp-InputArea {\\n  height: 100%;\\n  min-height: 100%;\\n}\\n\\n.jp-CodeConsole-promptCell .jp-InputArea-editor.jp-mod-focused {\\n  border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);\\n  box-shadow: var(--jp-input-box-shadow);\\n  background-color: var(--jp-cell-editor-active-background);\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Presentation Mode (.jp-mod-presentationMode)\\n|----------------------------------------------------------------------------*/\\n\\n.jp-mod-presentationMode .jp-CodeConsole {\\n  --jp-content-font-size1: var(--jp-content-presentation-font-size1);\\n  --jp-code-font-size: var(--jp-code-presentation-font-size);\\n}\\n\\n.jp-mod-presentationMode .jp-CodeConsole .jp-Cell .jp-InputPrompt,\\n.jp-mod-presentationMode .jp-CodeConsole .jp-Cell .jp-OutputPrompt {\\n  flex: 0 0 110px;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Split Panel Container\\n|----------------------------------------------------------------------------*/\\n.jp-CodeConsole-split {\\n  display: flex;\\n  height: 100%;\\n  width: 100%;\\n  overflow: hidden;\\n}\\n\\n.jp-CodeConsole-split.lm-SplitPanel .lm-SplitPanel-handle::after {\\n  background-color: var(--jp-border-color2);\\n  min-height: calc(2 * var(--jp-border-width));\\n  min-width: calc(2 * var(--jp-border-width));\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Mobile\\n|----------------------------------------------------------------------------*/\\n@media only screen and (width <= 760px) {\\n  .jp-CodeConsole-input {\\n    min-height: calc(6 * var(--jp-ui-font-size1));\\n  }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-CSVViewer {\n  display: flex;\n  flex-direction: column;\n  outline: none;\n\n  /* This is needed so that all font sizing of children done in ems is\n   * relative to this base size */\n  font-size: var(--jp-ui-font-size1);\n}\n\n.jp-CSVDelimiter {\n  display: flex;\n  flex: 0 0 auto;\n  flex-direction: row;\n  border: none;\n  min-height: 24px;\n  background: var(--jp-toolbar-background);\n  z-index: 1;\n}\n\n.jp-CSVDelimiter .jp-CSVDelimiter-label {\n  color: var(--jp-ui-font-color1);\n  font-size: var(--jp-ui-font-size1);\n  padding-left: 8px;\n  padding-right: 8px;\n}\n\n.jp-CSVDelimiter .jp-CSVDelimiter-dropdown {\n  flex: 0 0 auto;\n  vertical-align: middle;\n  border-radius: 0;\n  outline: none;\n  height: 20px;\n  margin-top: 2px;\n  margin-bottom: 2px;\n}\n\n.jp-CSVDelimiter .jp-CSVDelimiter-dropdown select.jp-mod-styled {\n  color: var(--jp-ui-font-color1);\n  background: var(--jp-layout-color1);\n  font-size: var(--jp-ui-font-size1);\n  height: 20px;\n  padding-right: 20px;\n}\n\n.jp-CSVViewer-grid {\n  flex: 1 1 auto;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/csvviewer/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,aAAa;EACb,sBAAsB;EACtB,aAAa;;EAEb;iCAC+B;EAC/B,kCAAkC;AACpC;;AAEA;EACE,aAAa;EACb,cAAc;EACd,mBAAmB;EACnB,YAAY;EACZ,gBAAgB;EAChB,wCAAwC;EACxC,UAAU;AACZ;;AAEA;EACE,+BAA+B;EAC/B,kCAAkC;EAClC,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,cAAc;EACd,sBAAsB;EACtB,gBAAgB;EAChB,aAAa;EACb,YAAY;EACZ,eAAe;EACf,kBAAkB;AACpB;;AAEA;EACE,+BAA+B;EAC/B,mCAAmC;EACnC,kCAAkC;EAClC,YAAY;EACZ,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-CSVViewer {\\n  display: flex;\\n  flex-direction: column;\\n  outline: none;\\n\\n  /* This is needed so that all font sizing of children done in ems is\\n   * relative to this base size */\\n  font-size: var(--jp-ui-font-size1);\\n}\\n\\n.jp-CSVDelimiter {\\n  display: flex;\\n  flex: 0 0 auto;\\n  flex-direction: row;\\n  border: none;\\n  min-height: 24px;\\n  background: var(--jp-toolbar-background);\\n  z-index: 1;\\n}\\n\\n.jp-CSVDelimiter .jp-CSVDelimiter-label {\\n  color: var(--jp-ui-font-color1);\\n  font-size: var(--jp-ui-font-size1);\\n  padding-left: 8px;\\n  padding-right: 8px;\\n}\\n\\n.jp-CSVDelimiter .jp-CSVDelimiter-dropdown {\\n  flex: 0 0 auto;\\n  vertical-align: middle;\\n  border-radius: 0;\\n  outline: none;\\n  height: 20px;\\n  margin-top: 2px;\\n  margin-bottom: 2px;\\n}\\n\\n.jp-CSVDelimiter .jp-CSVDelimiter-dropdown select.jp-mod-styled {\\n  color: var(--jp-ui-font-color1);\\n  background: var(--jp-layout-color1);\\n  font-size: var(--jp-ui-font-size1);\\n  height: 20px;\\n  padding-right: 20px;\\n}\\n\\n.jp-CSVViewer-grid {\\n  flex: 1 1 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./breakpoints.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./callstack.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./editor.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./kernelSources.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./sidebar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./sources.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_6___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./variables.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_6___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-left-truncated {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  direction: rtl;\n}\n\n#jp-debugger .jp-switch-label {\n  margin-right: 0;\n}\n\n.jp-DebuggerBugButton[aria-pressed='true'] {\n  /* Undo default toolkit style */\n  box-shadow: none;\n}\n\n.jp-DebuggerBugButton[aria-pressed='true'] path {\n  fill: var(--jp-warn-color0);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/debugger/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAU9E;EACE,gBAAgB;EAChB,uBAAuB;EACvB,cAAc;AAChB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,+BAA+B;EAC/B,gBAAgB;AAClB;;AAEA;EACE,2BAA2B;AAC7B\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n@import './breakpoints.css';\\n@import './callstack.css';\\n@import './editor.css';\\n@import './kernelSources.css';\\n@import './sidebar.css';\\n@import './sources.css';\\n@import './variables.css';\\n\\n.jp-left-truncated {\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  direction: rtl;\\n}\\n\\n#jp-debugger .jp-switch-label {\\n  margin-right: 0;\\n}\\n\\n.jp-DebuggerBugButton[aria-pressed='true'] {\\n  /* Undo default toolkit style */\\n  box-shadow: none;\\n}\\n\\n.jp-DebuggerBugButton[aria-pressed='true'] path {\\n  fill: var(--jp-warn-color0);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-DebuggerBreakpoints {\n  display: flex;\n  flex-direction: column;\n  min-height: 50px;\n  padding-top: 3px;\n}\n\n.jp-DebuggerBreakpoints-body {\n  padding: 10px;\n  overflow: auto;\n}\n\n.jp-DebuggerBreakpoint {\n  display: flex;\n  align-items: center;\n}\n\n.jp-DebuggerBreakpoint:hover {\n  background: var(--jp-layout-color2);\n  cursor: pointer;\n}\n\n.jp-DebuggerBreakpoint-marker {\n  font-size: 20px;\n  padding-right: 5px;\n  content: '●';\n  color: var(--jp-error-color1);\n}\n\n.jp-DebuggerBreakpoint-source {\n  white-space: nowrap;\n  margin-right: 5px;\n}\n\n.jp-DebuggerBreakpoint-line {\n  margin-left: auto;\n}\n\n.jp-DebuggerCallstackFrame {\n  display: flex;\n  align-items: center;\n}\n\n.jp-DebuggerCallstackFrame-name {\n  white-space: nowrap;\n  margin-right: 5px;\n}\n\n.jp-DebuggerCallstackFrame-location {\n  margin-left: auto;\n}\n\n[data-jp-debugger='true'] .cm-breakpoint-gutter .cm-gutterElement:empty::after {\n  content: '●';\n  color: var(--jp-error-color1);\n  opacity: 0;\n}\n\n.cm-gutter {\n  cursor: default;\n}\n\n.cm-breakpoint-gutter .cm-gutterElement {\n  color: var(--jp-error-color1);\n  padding-left: 5px;\n  font-size: 20px;\n  position: relative;\n  top: -5px;\n}\n\n[data-jp-debugger='true'].jp-Editor\n  .cm-breakpoint-gutter\n  .cm-gutterElement:empty:hover::after,\n[data-jp-debugger='true']\n  .jp-Notebook\n  .jp-CodeCell.jp-mod-selected\n  .cm-breakpoint-gutter:empty:hover::after,\n[data-jp-debugger='true']\n  .jp-Editor\n  .cm-breakpoint-gutter\n  .cm-gutterElement:empty:hover::after {\n  opacity: 0.5;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/debugger/style/breakpoints.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,aAAa;EACb,sBAAsB;EACtB,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,mCAAmC;EACnC,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,kBAAkB;EAClB,YAAY;EACZ,6BAA6B;AAC/B;;AAEA;EACE,mBAAmB;EACnB,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;EACnB,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,6BAA6B;EAC7B,UAAU;AACZ;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;EACjB,eAAe;EACf,kBAAkB;EAClB,SAAS;AACX;;AAEA;;;;;;;;;;;EAWE,YAAY;AACd\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-DebuggerBreakpoints {\\n  display: flex;\\n  flex-direction: column;\\n  min-height: 50px;\\n  padding-top: 3px;\\n}\\n\\n.jp-DebuggerBreakpoints-body {\\n  padding: 10px;\\n  overflow: auto;\\n}\\n\\n.jp-DebuggerBreakpoint {\\n  display: flex;\\n  align-items: center;\\n}\\n\\n.jp-DebuggerBreakpoint:hover {\\n  background: var(--jp-layout-color2);\\n  cursor: pointer;\\n}\\n\\n.jp-DebuggerBreakpoint-marker {\\n  font-size: 20px;\\n  padding-right: 5px;\\n  content: '●';\\n  color: var(--jp-error-color1);\\n}\\n\\n.jp-DebuggerBreakpoint-source {\\n  white-space: nowrap;\\n  margin-right: 5px;\\n}\\n\\n.jp-DebuggerBreakpoint-line {\\n  margin-left: auto;\\n}\\n\\n.jp-DebuggerCallstackFrame {\\n  display: flex;\\n  align-items: center;\\n}\\n\\n.jp-DebuggerCallstackFrame-name {\\n  white-space: nowrap;\\n  margin-right: 5px;\\n}\\n\\n.jp-DebuggerCallstackFrame-location {\\n  margin-left: auto;\\n}\\n\\n[data-jp-debugger='true'] .cm-breakpoint-gutter .cm-gutterElement:empty::after {\\n  content: '●';\\n  color: var(--jp-error-color1);\\n  opacity: 0;\\n}\\n\\n.cm-gutter {\\n  cursor: default;\\n}\\n\\n.cm-breakpoint-gutter .cm-gutterElement {\\n  color: var(--jp-error-color1);\\n  padding-left: 5px;\\n  font-size: 20px;\\n  position: relative;\\n  top: -5px;\\n}\\n\\n[data-jp-debugger='true'].jp-Editor\\n  .cm-breakpoint-gutter\\n  .cm-gutterElement:empty:hover::after,\\n[data-jp-debugger='true']\\n  .jp-Notebook\\n  .jp-CodeCell.jp-mod-selected\\n  .cm-breakpoint-gutter:empty:hover::after,\\n[data-jp-debugger='true']\\n  .jp-Editor\\n  .cm-breakpoint-gutter\\n  .cm-gutterElement:empty:hover::after {\\n  opacity: 0.5;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-DebuggerCallstack {\n  display: flex;\n  flex-direction: column;\n  min-height: 50px;\n  padding-top: 3px;\n}\n\n.jp-DebuggerCallstack-body {\n  overflow: auto;\n}\n\n.jp-DebuggerCallstack-body ul {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  background: var(--jp-layout-color1);\n  color: var(--jp-ui-font-color1);\n  font-size: var(--jp-ui-font-size1);\n}\n\n.jp-DebuggerCallstack-body li {\n  padding: 5px;\n  padding-left: 8px;\n}\n\n.jp-DebuggerCallstack-body li.selected {\n  color: white;\n  background: var(--jp-brand-color1);\n}\n\n.jp-DebuggerCallstack .jp-ToolbarButtonComponent-label {\n  display: none;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/debugger/style/callstack.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,aAAa;EACb,sBAAsB;EACtB,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,SAAS;EACT,UAAU;EACV,mCAAmC;EACnC,+BAA+B;EAC/B,kCAAkC;AACpC;;AAEA;EACE,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,kCAAkC;AACpC;;AAEA;EACE,aAAa;AACf\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-DebuggerCallstack {\\n  display: flex;\\n  flex-direction: column;\\n  min-height: 50px;\\n  padding-top: 3px;\\n}\\n\\n.jp-DebuggerCallstack-body {\\n  overflow: auto;\\n}\\n\\n.jp-DebuggerCallstack-body ul {\\n  list-style: none;\\n  margin: 0;\\n  padding: 0;\\n  background: var(--jp-layout-color1);\\n  color: var(--jp-ui-font-color1);\\n  font-size: var(--jp-ui-font-size1);\\n}\\n\\n.jp-DebuggerCallstack-body li {\\n  padding: 5px;\\n  padding-left: 8px;\\n}\\n\\n.jp-DebuggerCallstack-body li.selected {\\n  color: white;\\n  background: var(--jp-brand-color1);\\n}\\n\\n.jp-DebuggerCallstack .jp-ToolbarButtonComponent-label {\\n  display: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-DebuggerEditor-highlight {\n  text-shadow: 0 0 1px var(--jp-layout-color0);\n  outline: 1px solid;\n}\n\nbody[data-jp-theme-light='false'] .jp-DebuggerEditor-highlight {\n  background-color: var(--md-brown-800, #4e342e);\n  outline-color: var(--md-brown-600, #6d4c41);\n}\n\nbody[data-jp-theme-light='true'] .jp-DebuggerEditor-highlight {\n  background-color: var(--md-brown-100, #d7ccc8);\n  outline-color: var(--md-brown-300, #a1887f);\n}\n\n.jp-DebuggerEditor-marker {\n  position: absolute;\n  left: -34px;\n  top: -1px;\n  color: var(--jp-error-color1);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/debugger/style/editor.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,4CAA4C;EAC5C,kBAAkB;AACpB;;AAEA;EACE,8CAA8C;EAC9C,2CAA2C;AAC7C;;AAEA;EACE,8CAA8C;EAC9C,2CAA2C;AAC7C;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,SAAS;EACT,6BAA6B;AAC/B\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-DebuggerEditor-highlight {\\n  text-shadow: 0 0 1px var(--jp-layout-color0);\\n  outline: 1px solid;\\n}\\n\\nbody[data-jp-theme-light='false'] .jp-DebuggerEditor-highlight {\\n  background-color: var(--md-brown-800, #4e342e);\\n  outline-color: var(--md-brown-600, #6d4c41);\\n}\\n\\nbody[data-jp-theme-light='true'] .jp-DebuggerEditor-highlight {\\n  background-color: var(--md-brown-100, #d7ccc8);\\n  outline-color: var(--md-brown-300, #a1887f);\\n}\\n\\n.jp-DebuggerEditor-marker {\\n  position: absolute;\\n  left: -34px;\\n  top: -1px;\\n  color: var(--jp-error-color1);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-DebuggerKernelSources {\n  min-height: 50px;\n  margin-top: 3px;\n}\n\n[data-jp-debugger='true'].jp-Editor .jp-mod-readOnly {\n  background: var(--jp-layout-color2);\n  height: 100%;\n}\n\n.jp-DebuggerKernelSources-body [data-jp-debugger='true'].jp-Editor {\n  height: 100%;\n}\n\n.jp-DebuggerKernelSources-body {\n  height: 100%;\n  overflow-y: auto;\n}\n\n.jp-DebuggerKernelSource-filterBox {\n  padding: 0;\n  flex: 0 0 auto;\n  margin: 0;\n  position: sticky;\n  top: 0;\n  background-color: var(--jp-layout-color1);\n}\n\n.jp-DebuggerKernelSource-filterBox-hidden {\n  display: none;\n}\n\n.jp-DebuggerKernelSource-source {\n  display: flex;\n  align-items: center;\n  padding: 4px;\n  cursor: pointer;\n}\n\n.jp-DebuggerKernelSource-source:hover {\n  background-color: var(--jp-layout-color2);\n}\n\n.jp-DebuggerKernelSource-source > svg {\n  height: 16px;\n  width: 16px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/debugger/style/kernelSources.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,gBAAgB;EAChB,eAAe;AACjB;;AAEA;EACE,mCAAmC;EACnC,YAAY;AACd;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,cAAc;EACd,SAAS;EACT,gBAAgB;EAChB,MAAM;EACN,yCAAyC;AAC3C;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,YAAY;EACZ,eAAe;AACjB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,YAAY;EACZ,WAAW;AACb\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-DebuggerKernelSources {\\n  min-height: 50px;\\n  margin-top: 3px;\\n}\\n\\n[data-jp-debugger='true'].jp-Editor .jp-mod-readOnly {\\n  background: var(--jp-layout-color2);\\n  height: 100%;\\n}\\n\\n.jp-DebuggerKernelSources-body [data-jp-debugger='true'].jp-Editor {\\n  height: 100%;\\n}\\n\\n.jp-DebuggerKernelSources-body {\\n  height: 100%;\\n  overflow-y: auto;\\n}\\n\\n.jp-DebuggerKernelSource-filterBox {\\n  padding: 0;\\n  flex: 0 0 auto;\\n  margin: 0;\\n  position: sticky;\\n  top: 0;\\n  background-color: var(--jp-layout-color1);\\n}\\n\\n.jp-DebuggerKernelSource-filterBox-hidden {\\n  display: none;\\n}\\n\\n.jp-DebuggerKernelSource-source {\\n  display: flex;\\n  align-items: center;\\n  padding: 4px;\\n  cursor: pointer;\\n}\\n\\n.jp-DebuggerKernelSource-source:hover {\\n  background-color: var(--jp-layout-color2);\\n}\\n\\n.jp-DebuggerKernelSource-source > svg {\\n  height: 16px;\\n  width: 16px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-SidePanel-header > h2 {\n  /* Set font-size to override default h2 sizing but keeping default --jp-ui-font-size0 */\n  font-size: 100%;\n  font-weight: 600;\n  margin: 0 auto 0 0;\n  padding: 4px 10px;\n}\n\n.jp-DebuggerSidebar-body\n  .jp-AccordionPanel-title\n  jp-toolbar::part(positioning-region) {\n  flex-wrap: nowrap;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/debugger/style/sidebar.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,uFAAuF;EACvF,eAAe;EACf,gBAAgB;EAChB,kBAAkB;EAClB,iBAAiB;AACnB;;AAEA;;;EAGE,iBAAiB;AACnB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-SidePanel-header > h2 {\\n  /* Set font-size to override default h2 sizing but keeping default --jp-ui-font-size0 */\\n  font-size: 100%;\\n  font-weight: 600;\\n  margin: 0 auto 0 0;\\n  padding: 4px 10px;\\n}\\n\\n.jp-DebuggerSidebar-body\\n  .jp-AccordionPanel-title\\n  jp-toolbar::part(positioning-region) {\\n  flex-wrap: nowrap;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-DebuggerSources {\n  min-height: 50px;\n  margin-top: 3px;\n}\n\n[data-jp-debugger='true'].jp-Editor .jp-mod-readOnly {\n  background: var(--jp-layout-color2);\n  height: 100%;\n}\n\n.jp-DebuggerSources-body [data-jp-debugger='true'].jp-Editor {\n  height: 100%;\n}\n\n.jp-DebuggerSources-body {\n  height: 100%;\n}\n\n.jp-DebuggerSources-header-path {\n  overflow: hidden;\n  cursor: pointer;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  font-size: var(--jp-ui-font-size0);\n  color: var(--jp-ui-font-color1);\n  user-select: text;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/debugger/style/sources.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,gBAAgB;EAChB,eAAe;AACjB;;AAEA;EACE,mCAAmC;EACnC,YAAY;AACd;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,eAAe;EACf,uBAAuB;EACvB,mBAAmB;EACnB,kCAAkC;EAClC,+BAA+B;EAC/B,iBAAiB;AACnB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-DebuggerSources {\\n  min-height: 50px;\\n  margin-top: 3px;\\n}\\n\\n[data-jp-debugger='true'].jp-Editor .jp-mod-readOnly {\\n  background: var(--jp-layout-color2);\\n  height: 100%;\\n}\\n\\n.jp-DebuggerSources-body [data-jp-debugger='true'].jp-Editor {\\n  height: 100%;\\n}\\n\\n.jp-DebuggerSources-body {\\n  height: 100%;\\n}\\n\\n.jp-DebuggerSources-header-path {\\n  overflow: hidden;\\n  cursor: pointer;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n  font-size: var(--jp-ui-font-size0);\\n  color: var(--jp-ui-font-color1);\\n  user-select: text;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-DebuggerVariables {\n  display: flex;\n  flex-direction: column;\n  min-height: 50px;\n  padding-top: 3px;\n}\n\n.jp-DebuggerVariables-body {\n  display: flex;\n  flex-direction: column;\n  flex: 1 1 auto;\n  min-height: 24px;\n  overflow: auto;\n\n  /* For absolute positioning of jp-DebuggerVariables-buttons. */\n  position: relative;\n}\n\n.jp-DebuggerVariables-name {\n  color: var(--jp-mirror-editor-attribute-color);\n  grid-area: name;\n}\n\n.jp-DebuggerVariables-name:last-of-type {\n  flex: 1 1 auto;\n}\n\n.jp-DebuggerVariables-name::after {\n  content: ':';\n  margin-right: 5px;\n}\n\n.jp-DebuggerVariables-detail {\n  /* detail contains value for primitive types or name of the type otherwise */\n  color: var(--jp-mirror-editor-string-color);\n  flex: 1 1 auto;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.jp-DebuggerVariables-grid {\n  flex: 1 1 auto;\n}\n\n.jp-DebuggerVariables-grid .lm-DataGrid {\n  border: none;\n}\n\n.jp-DebuggerVariables-colorPalette {\n  visibility: hidden;\n  z-index: -999;\n  position: absolute;\n  left: -999px;\n  top: -999px;\n}\n\n.jp-DebuggerVariables-colorPalette .jp-mod-void {\n  color: var(--jp-layout-color1);\n}\n\n.jp-DebuggerVariables-colorPalette .jp-mod-background {\n  color: var(--jp-rendermime-table-row-background);\n}\n\n.jp-DebuggerVariables-colorPalette .jp-mod-header-background {\n  color: var(--jp-layout-color2);\n}\n\n.jp-DebuggerVariables-colorPalette .jp-mod-grid-line {\n  color: var(--jp-border-color3);\n}\n\n.jp-DebuggerVariables-colorPalette .jp-mod-header-grid-line {\n  color: var(--jp-border-color3);\n}\n\n.jp-DebuggerVariables-colorPalette .jp-mod-selection {\n  /* TODO: Fix JupyterLab light theme (alpha) so this can be a variable. */\n  color: rgba(3, 169, 244, 0.2);\n}\n\n.jp-DebuggerVariables-colorPalette .jp-mod-text {\n  color: var(--jp-content-font-color0);\n}\n\n.jp-VariableRendererPanel {\n  overflow: auto;\n}\n\n.jp-VariableRendererPanel-renderer {\n  overflow: auto;\n  height: 100%;\n}\n\n.jp-VariableRenderer-TrustButton[aria-pressed='true'] {\n  box-shadow: inset 0 var(--jp-border-width) 4px\n    rgba(\n      var(--jp-shadow-base-lightness),\n      var(--jp-shadow-base-lightness),\n      var(--jp-shadow-base-lightness),\n      0.6\n    );\n}\n\n.jp-DebuggerRichVariable div[data-mime-type='text/plain'] > pre {\n  white-space: normal;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/debugger/style/variables.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,aAAa;EACb,sBAAsB;EACtB,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,cAAc;EACd,gBAAgB;EAChB,cAAc;;EAEd,8DAA8D;EAC9D,kBAAkB;AACpB;;AAEA;EACE,8CAA8C;EAC9C,eAAe;AACjB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,4EAA4E;EAC5E,2CAA2C;EAC3C,cAAc;EACd,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,aAAa;EACb,kBAAkB;EAClB,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,gDAAgD;AAClD;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,wEAAwE;EACxE,6BAA6B;AAC/B;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,YAAY;AACd;;AAEA;EACE;;;;;;KAMG;AACL;;AAEA;EACE,mBAAmB;AACrB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-DebuggerVariables {\\n  display: flex;\\n  flex-direction: column;\\n  min-height: 50px;\\n  padding-top: 3px;\\n}\\n\\n.jp-DebuggerVariables-body {\\n  display: flex;\\n  flex-direction: column;\\n  flex: 1 1 auto;\\n  min-height: 24px;\\n  overflow: auto;\\n\\n  /* For absolute positioning of jp-DebuggerVariables-buttons. */\\n  position: relative;\\n}\\n\\n.jp-DebuggerVariables-name {\\n  color: var(--jp-mirror-editor-attribute-color);\\n  grid-area: name;\\n}\\n\\n.jp-DebuggerVariables-name:last-of-type {\\n  flex: 1 1 auto;\\n}\\n\\n.jp-DebuggerVariables-name::after {\\n  content: ':';\\n  margin-right: 5px;\\n}\\n\\n.jp-DebuggerVariables-detail {\\n  /* detail contains value for primitive types or name of the type otherwise */\\n  color: var(--jp-mirror-editor-string-color);\\n  flex: 1 1 auto;\\n  overflow: hidden;\\n  white-space: nowrap;\\n  text-overflow: ellipsis;\\n}\\n\\n.jp-DebuggerVariables-grid {\\n  flex: 1 1 auto;\\n}\\n\\n.jp-DebuggerVariables-grid .lm-DataGrid {\\n  border: none;\\n}\\n\\n.jp-DebuggerVariables-colorPalette {\\n  visibility: hidden;\\n  z-index: -999;\\n  position: absolute;\\n  left: -999px;\\n  top: -999px;\\n}\\n\\n.jp-DebuggerVariables-colorPalette .jp-mod-void {\\n  color: var(--jp-layout-color1);\\n}\\n\\n.jp-DebuggerVariables-colorPalette .jp-mod-background {\\n  color: var(--jp-rendermime-table-row-background);\\n}\\n\\n.jp-DebuggerVariables-colorPalette .jp-mod-header-background {\\n  color: var(--jp-layout-color2);\\n}\\n\\n.jp-DebuggerVariables-colorPalette .jp-mod-grid-line {\\n  color: var(--jp-border-color3);\\n}\\n\\n.jp-DebuggerVariables-colorPalette .jp-mod-header-grid-line {\\n  color: var(--jp-border-color3);\\n}\\n\\n.jp-DebuggerVariables-colorPalette .jp-mod-selection {\\n  /* TODO: Fix JupyterLab light theme (alpha) so this can be a variable. */\\n  color: rgba(3, 169, 244, 0.2);\\n}\\n\\n.jp-DebuggerVariables-colorPalette .jp-mod-text {\\n  color: var(--jp-content-font-color0);\\n}\\n\\n.jp-VariableRendererPanel {\\n  overflow: auto;\\n}\\n\\n.jp-VariableRendererPanel-renderer {\\n  overflow: auto;\\n  height: 100%;\\n}\\n\\n.jp-VariableRenderer-TrustButton[aria-pressed='true'] {\\n  box-shadow: inset 0 var(--jp-border-width) 4px\\n    rgba(\\n      var(--jp-shadow-base-lightness),\\n      var(--jp-shadow-base-lightness),\\n      var(--jp-shadow-base-lightness),\\n      0.6\\n    );\\n}\\n\\n.jp-DebuggerRichVariable div[data-mime-type='text/plain'] > pre {\\n  white-space: normal;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-MimeDocument {\n  outline: none;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/docregistry/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,aAAa;AACf\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-MimeDocument {\\n  outline: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n.jp-DocumentSearch-input {\n  border: none;\n  outline: none;\n  color: var(--jp-ui-font-color0);\n  font-size: var(--jp-ui-font-size1);\n  background-color: var(--jp-layout-color0);\n  font-family: var(--jp-ui-font-family);\n  padding: 2px 1px;\n  resize: none;\n  white-space: pre;\n}\n\n.jp-DocumentSearch-overlay {\n  position: absolute;\n  background-color: var(--jp-toolbar-background);\n  border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);\n  border-left: var(--jp-border-width) solid var(--jp-toolbar-border-color);\n  top: 0;\n  right: 0;\n  z-index: 7;\n  min-width: 405px;\n  padding: 2px;\n  font-size: var(--jp-ui-font-size1);\n\n  --jp-private-document-search-button-height: 20px;\n}\n\n.jp-DocumentSearch-overlay button {\n  background-color: var(--jp-toolbar-background);\n  outline: 0;\n}\n\n.jp-DocumentSearch-button-wrapper:disabled > .jp-DocumentSearch-button-content {\n  opacity: 0.6;\n  cursor: not-allowed;\n}\n\n.jp-DocumentSearch-overlay button:not(:disabled):hover {\n  background-color: var(--jp-layout-color2);\n}\n\n.jp-DocumentSearch-overlay button:not(:disabled):active {\n  background-color: var(--jp-layout-color3);\n}\n\n.jp-DocumentSearch-overlay-row {\n  display: flex;\n  align-items: center;\n  margin-bottom: 2px;\n}\n\n.jp-DocumentSearch-button-content {\n  display: inline-block;\n  cursor: pointer;\n  box-sizing: border-box;\n  width: 100%;\n  height: 100%;\n}\n\n.jp-DocumentSearch-button-content svg {\n  width: 100%;\n  height: 100%;\n}\n\n.jp-DocumentSearch-input-wrapper {\n  border: var(--jp-border-width) solid var(--jp-border-color0);\n  display: flex;\n  background-color: var(--jp-layout-color0);\n  margin: 2px;\n}\n\n.jp-DocumentSearch-input-wrapper:focus-within {\n  border-color: var(--jp-cell-editor-active-border-color);\n}\n\n.jp-DocumentSearch-toggle-wrapper,\n.jp-DocumentSearch-button-wrapper {\n  all: initial;\n  overflow: hidden;\n  display: inline-block;\n  border: none;\n  box-sizing: border-box;\n}\n\n.jp-DocumentSearch-toggle-wrapper {\n  flex-shrink: 0;\n  width: 14px;\n  height: 14px;\n}\n\n.jp-DocumentSearch-button-wrapper {\n  flex-shrink: 0;\n  width: var(--jp-private-document-search-button-height);\n  height: var(--jp-private-document-search-button-height);\n}\n\n.jp-DocumentSearch-toggle-wrapper:focus,\n.jp-DocumentSearch-button-wrapper:focus {\n  outline: var(--jp-border-width) solid\n    var(--jp-cell-editor-active-border-color);\n  outline-offset: -1px;\n}\n\n.jp-DocumentSearch-toggle-wrapper,\n.jp-DocumentSearch-button-wrapper,\n.jp-DocumentSearch-button-content:focus {\n  outline: none;\n}\n\n.jp-DocumentSearch-toggle-placeholder {\n  width: 5px;\n}\n\n.jp-DocumentSearch-input-button::before {\n  display: block;\n  padding-top: 100%;\n}\n\n.jp-DocumentSearch-input-button-off {\n  opacity: var(--jp-search-toggle-off-opacity);\n}\n\n.jp-DocumentSearch-input-button-off:hover {\n  opacity: var(--jp-search-toggle-hover-opacity);\n}\n\n.jp-DocumentSearch-input-button-on {\n  opacity: var(--jp-search-toggle-on-opacity);\n}\n\n.jp-DocumentSearch-index-counter {\n  padding-left: 10px;\n  padding-right: 10px;\n  user-select: none;\n  min-width: 35px;\n  display: inline-block;\n}\n\n.jp-DocumentSearch-up-down-wrapper {\n  display: inline-block;\n  padding-right: 2px;\n  margin-left: auto;\n  white-space: nowrap;\n}\n\n.jp-DocumentSearch-spacer {\n  margin-left: auto;\n}\n\n.jp-DocumentSearch-up-down-wrapper button {\n  outline: 0;\n  border: none;\n  width: var(--jp-private-document-search-button-height);\n  height: var(--jp-private-document-search-button-height);\n  vertical-align: middle;\n  margin: 1px 5px 2px;\n}\n\nbutton:not(:disabled) > .jp-DocumentSearch-up-down-button:hover {\n  background-color: var(--jp-layout-color2);\n}\n\nbutton:not(:disabled) > .jp-DocumentSearch-up-down-button:active {\n  background-color: var(--jp-layout-color3);\n}\n\n.jp-DocumentSearch-filter-button {\n  border-radius: var(--jp-border-radius);\n}\n\n.jp-DocumentSearch-filter-button:hover {\n  background-color: var(--jp-layout-color2);\n}\n\n.jp-DocumentSearch-filter-button-enabled {\n  background-color: var(--jp-layout-color2);\n}\n\n.jp-DocumentSearch-filter-button-enabled:hover {\n  background-color: var(--jp-layout-color3);\n}\n\n.jp-DocumentSearch-search-options {\n  padding: 0 8px;\n  margin-left: 3px;\n  width: 100%;\n  display: grid;\n  justify-content: start;\n  grid-template-columns: 1fr 1fr;\n  align-items: center;\n  justify-items: stretch;\n}\n\n.jp-DocumentSearch-search-filter-disabled {\n  color: var(--jp-ui-font-color2);\n}\n\n.jp-DocumentSearch-search-filter {\n  display: flex;\n  align-items: center;\n  user-select: none;\n}\n\n.jp-DocumentSearch-regex-error {\n  color: var(--jp-error-color0);\n}\n\n.jp-DocumentSearch-replace-button-wrapper {\n  overflow: hidden;\n  display: inline-block;\n  box-sizing: border-box;\n  border: var(--jp-border-width) solid var(--jp-border-color0);\n  margin: auto 2px;\n  padding: 1px 4px;\n  height: calc(var(--jp-private-document-search-button-height) + 2px);\n  flex-shrink: 0;\n}\n\n.jp-DocumentSearch-replace-button-wrapper:focus {\n  border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);\n}\n\n.jp-DocumentSearch-replace-button {\n  display: inline-block;\n  text-align: center;\n  cursor: pointer;\n  box-sizing: border-box;\n  color: var(--jp-ui-font-color1);\n\n  /* height - 2 * (padding of wrapper) */\n  line-height: calc(var(--jp-private-document-search-button-height) - 2px);\n  width: 100%;\n  height: 100%;\n}\n\n.jp-DocumentSearch-replace-button:focus {\n  outline: none;\n}\n\n.jp-DocumentSearch-replace-wrapper-class {\n  margin-left: 14px;\n  display: flex;\n}\n\n.jp-DocumentSearch-replace-toggle {\n  border: none;\n  background-color: var(--jp-toolbar-background);\n  border-radius: var(--jp-border-radius);\n}\n\n.jp-DocumentSearch-replace-toggle:hover {\n  background-color: var(--jp-layout-color2);\n}\n\n/*\n  The following few rules allow the search box to expand horizontally,\n  as the text within it grows. This is done by using putting\n  the text within a wrapper element and using that wrapper for sizing,\n  as <textarea> and <input> tags do not grow automatically.\n  This is the underlying technique:\n  https://til.simonwillison.net/css/resizing-textarea\n*/\n.jp-DocumentSearch-input-label::after {\n  content: attr(data-value) ' ';\n  visibility: hidden;\n  white-space: pre;\n}\n\n.jp-DocumentSearch-input-label {\n  display: inline-grid;\n  align-items: stretch;\n}\n\n.jp-DocumentSearch-input-label::after,\n.jp-DocumentSearch-input-label > .jp-DocumentSearch-input {\n  width: auto;\n  min-width: 1em;\n  grid-area: 1/2;\n  font: inherit;\n  padding: 2px 3px;\n  margin: 0;\n  resize: none;\n  background: none;\n  appearance: none;\n  border: none;\n  overflow: hidden;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/documentsearch/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;AAC9E;EACE,YAAY;EACZ,aAAa;EACb,+BAA+B;EAC/B,kCAAkC;EAClC,yCAAyC;EACzC,qCAAqC;EACrC,gBAAgB;EAChB,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,8CAA8C;EAC9C,0EAA0E;EAC1E,wEAAwE;EACxE,MAAM;EACN,QAAQ;EACR,UAAU;EACV,gBAAgB;EAChB,YAAY;EACZ,kCAAkC;;EAElC,gDAAgD;AAClD;;AAEA;EACE,8CAA8C;EAC9C,UAAU;AACZ;;AAEA;EACE,YAAY;EACZ,mBAAmB;AACrB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,qBAAqB;EACrB,eAAe;EACf,sBAAsB;EACtB,WAAW;EACX,YAAY;AACd;;AAEA;EACE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,4DAA4D;EAC5D,aAAa;EACb,yCAAyC;EACzC,WAAW;AACb;;AAEA;EACE,uDAAuD;AACzD;;AAEA;;EAEE,YAAY;EACZ,gBAAgB;EAChB,qBAAqB;EACrB,YAAY;EACZ,sBAAsB;AACxB;;AAEA;EACE,cAAc;EACd,WAAW;EACX,YAAY;AACd;;AAEA;EACE,cAAc;EACd,sDAAsD;EACtD,uDAAuD;AACzD;;AAEA;;EAEE;6CAC2C;EAC3C,oBAAoB;AACtB;;AAEA;;;EAGE,aAAa;AACf;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,cAAc;EACd,iBAAiB;AACnB;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;EACE,8CAA8C;AAChD;;AAEA;EACE,2CAA2C;AAC7C;;AAEA;EACE,kBAAkB;EAClB,mBAAmB;EACnB,iBAAiB;EACjB,eAAe;EACf,qBAAqB;AACvB;;AAEA;EACE,qBAAqB;EACrB,kBAAkB;EAClB,iBAAiB;EACjB,mBAAmB;AACrB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,UAAU;EACV,YAAY;EACZ,sDAAsD;EACtD,uDAAuD;EACvD,sBAAsB;EACtB,mBAAmB;AACrB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,cAAc;EACd,gBAAgB;EAChB,WAAW;EACX,aAAa;EACb,sBAAsB;EACtB,8BAA8B;EAC9B,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,iBAAiB;AACnB;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,gBAAgB;EAChB,qBAAqB;EACrB,sBAAsB;EACtB,4DAA4D;EAC5D,gBAAgB;EAChB,gBAAgB;EAChB,mEAAmE;EACnE,cAAc;AAChB;;AAEA;EACE,8EAA8E;AAChF;;AAEA;EACE,qBAAqB;EACrB,kBAAkB;EAClB,eAAe;EACf,sBAAsB;EACtB,+BAA+B;;EAE/B,sCAAsC;EACtC,wEAAwE;EACxE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,iBAAiB;EACjB,aAAa;AACf;;AAEA;EACE,YAAY;EACZ,8CAA8C;EAC9C,sCAAsC;AACxC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;;;;;;;CAOC;AACD;EACE,6BAA6B;EAC7B,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,oBAAoB;AACtB;;AAEA;;EAEE,WAAW;EACX,cAAc;EACd,cAAc;EACd,aAAa;EACb,gBAAgB;EAChB,SAAS;EACT,YAAY;EACZ,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,gBAAgB;AAClB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n.jp-DocumentSearch-input {\\n  border: none;\\n  outline: none;\\n  color: var(--jp-ui-font-color0);\\n  font-size: var(--jp-ui-font-size1);\\n  background-color: var(--jp-layout-color0);\\n  font-family: var(--jp-ui-font-family);\\n  padding: 2px 1px;\\n  resize: none;\\n  white-space: pre;\\n}\\n\\n.jp-DocumentSearch-overlay {\\n  position: absolute;\\n  background-color: var(--jp-toolbar-background);\\n  border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);\\n  border-left: var(--jp-border-width) solid var(--jp-toolbar-border-color);\\n  top: 0;\\n  right: 0;\\n  z-index: 7;\\n  min-width: 405px;\\n  padding: 2px;\\n  font-size: var(--jp-ui-font-size1);\\n\\n  --jp-private-document-search-button-height: 20px;\\n}\\n\\n.jp-DocumentSearch-overlay button {\\n  background-color: var(--jp-toolbar-background);\\n  outline: 0;\\n}\\n\\n.jp-DocumentSearch-button-wrapper:disabled > .jp-DocumentSearch-button-content {\\n  opacity: 0.6;\\n  cursor: not-allowed;\\n}\\n\\n.jp-DocumentSearch-overlay button:not(:disabled):hover {\\n  background-color: var(--jp-layout-color2);\\n}\\n\\n.jp-DocumentSearch-overlay button:not(:disabled):active {\\n  background-color: var(--jp-layout-color3);\\n}\\n\\n.jp-DocumentSearch-overlay-row {\\n  display: flex;\\n  align-items: center;\\n  margin-bottom: 2px;\\n}\\n\\n.jp-DocumentSearch-button-content {\\n  display: inline-block;\\n  cursor: pointer;\\n  box-sizing: border-box;\\n  width: 100%;\\n  height: 100%;\\n}\\n\\n.jp-DocumentSearch-button-content svg {\\n  width: 100%;\\n  height: 100%;\\n}\\n\\n.jp-DocumentSearch-input-wrapper {\\n  border: var(--jp-border-width) solid var(--jp-border-color0);\\n  display: flex;\\n  background-color: var(--jp-layout-color0);\\n  margin: 2px;\\n}\\n\\n.jp-DocumentSearch-input-wrapper:focus-within {\\n  border-color: var(--jp-cell-editor-active-border-color);\\n}\\n\\n.jp-DocumentSearch-toggle-wrapper,\\n.jp-DocumentSearch-button-wrapper {\\n  all: initial;\\n  overflow: hidden;\\n  display: inline-block;\\n  border: none;\\n  box-sizing: border-box;\\n}\\n\\n.jp-DocumentSearch-toggle-wrapper {\\n  flex-shrink: 0;\\n  width: 14px;\\n  height: 14px;\\n}\\n\\n.jp-DocumentSearch-button-wrapper {\\n  flex-shrink: 0;\\n  width: var(--jp-private-document-search-button-height);\\n  height: var(--jp-private-document-search-button-height);\\n}\\n\\n.jp-DocumentSearch-toggle-wrapper:focus,\\n.jp-DocumentSearch-button-wrapper:focus {\\n  outline: var(--jp-border-width) solid\\n    var(--jp-cell-editor-active-border-color);\\n  outline-offset: -1px;\\n}\\n\\n.jp-DocumentSearch-toggle-wrapper,\\n.jp-DocumentSearch-button-wrapper,\\n.jp-DocumentSearch-button-content:focus {\\n  outline: none;\\n}\\n\\n.jp-DocumentSearch-toggle-placeholder {\\n  width: 5px;\\n}\\n\\n.jp-DocumentSearch-input-button::before {\\n  display: block;\\n  padding-top: 100%;\\n}\\n\\n.jp-DocumentSearch-input-button-off {\\n  opacity: var(--jp-search-toggle-off-opacity);\\n}\\n\\n.jp-DocumentSearch-input-button-off:hover {\\n  opacity: var(--jp-search-toggle-hover-opacity);\\n}\\n\\n.jp-DocumentSearch-input-button-on {\\n  opacity: var(--jp-search-toggle-on-opacity);\\n}\\n\\n.jp-DocumentSearch-index-counter {\\n  padding-left: 10px;\\n  padding-right: 10px;\\n  user-select: none;\\n  min-width: 35px;\\n  display: inline-block;\\n}\\n\\n.jp-DocumentSearch-up-down-wrapper {\\n  display: inline-block;\\n  padding-right: 2px;\\n  margin-left: auto;\\n  white-space: nowrap;\\n}\\n\\n.jp-DocumentSearch-spacer {\\n  margin-left: auto;\\n}\\n\\n.jp-DocumentSearch-up-down-wrapper button {\\n  outline: 0;\\n  border: none;\\n  width: var(--jp-private-document-search-button-height);\\n  height: var(--jp-private-document-search-button-height);\\n  vertical-align: middle;\\n  margin: 1px 5px 2px;\\n}\\n\\nbutton:not(:disabled) > .jp-DocumentSearch-up-down-button:hover {\\n  background-color: var(--jp-layout-color2);\\n}\\n\\nbutton:not(:disabled) > .jp-DocumentSearch-up-down-button:active {\\n  background-color: var(--jp-layout-color3);\\n}\\n\\n.jp-DocumentSearch-filter-button {\\n  border-radius: var(--jp-border-radius);\\n}\\n\\n.jp-DocumentSearch-filter-button:hover {\\n  background-color: var(--jp-layout-color2);\\n}\\n\\n.jp-DocumentSearch-filter-button-enabled {\\n  background-color: var(--jp-layout-color2);\\n}\\n\\n.jp-DocumentSearch-filter-button-enabled:hover {\\n  background-color: var(--jp-layout-color3);\\n}\\n\\n.jp-DocumentSearch-search-options {\\n  padding: 0 8px;\\n  margin-left: 3px;\\n  width: 100%;\\n  display: grid;\\n  justify-content: start;\\n  grid-template-columns: 1fr 1fr;\\n  align-items: center;\\n  justify-items: stretch;\\n}\\n\\n.jp-DocumentSearch-search-filter-disabled {\\n  color: var(--jp-ui-font-color2);\\n}\\n\\n.jp-DocumentSearch-search-filter {\\n  display: flex;\\n  align-items: center;\\n  user-select: none;\\n}\\n\\n.jp-DocumentSearch-regex-error {\\n  color: var(--jp-error-color0);\\n}\\n\\n.jp-DocumentSearch-replace-button-wrapper {\\n  overflow: hidden;\\n  display: inline-block;\\n  box-sizing: border-box;\\n  border: var(--jp-border-width) solid var(--jp-border-color0);\\n  margin: auto 2px;\\n  padding: 1px 4px;\\n  height: calc(var(--jp-private-document-search-button-height) + 2px);\\n  flex-shrink: 0;\\n}\\n\\n.jp-DocumentSearch-replace-button-wrapper:focus {\\n  border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);\\n}\\n\\n.jp-DocumentSearch-replace-button {\\n  display: inline-block;\\n  text-align: center;\\n  cursor: pointer;\\n  box-sizing: border-box;\\n  color: var(--jp-ui-font-color1);\\n\\n  /* height - 2 * (padding of wrapper) */\\n  line-height: calc(var(--jp-private-document-search-button-height) - 2px);\\n  width: 100%;\\n  height: 100%;\\n}\\n\\n.jp-DocumentSearch-replace-button:focus {\\n  outline: none;\\n}\\n\\n.jp-DocumentSearch-replace-wrapper-class {\\n  margin-left: 14px;\\n  display: flex;\\n}\\n\\n.jp-DocumentSearch-replace-toggle {\\n  border: none;\\n  background-color: var(--jp-toolbar-background);\\n  border-radius: var(--jp-border-radius);\\n}\\n\\n.jp-DocumentSearch-replace-toggle:hover {\\n  background-color: var(--jp-layout-color2);\\n}\\n\\n/*\\n  The following few rules allow the search box to expand horizontally,\\n  as the text within it grows. This is done by using putting\\n  the text within a wrapper element and using that wrapper for sizing,\\n  as <textarea> and <input> tags do not grow automatically.\\n  This is the underlying technique:\\n  https://til.simonwillison.net/css/resizing-textarea\\n*/\\n.jp-DocumentSearch-input-label::after {\\n  content: attr(data-value) ' ';\\n  visibility: hidden;\\n  white-space: pre;\\n}\\n\\n.jp-DocumentSearch-input-label {\\n  display: inline-grid;\\n  align-items: stretch;\\n}\\n\\n.jp-DocumentSearch-input-label::after,\\n.jp-DocumentSearch-input-label > .jp-DocumentSearch-input {\\n  width: auto;\\n  min-width: 1em;\\n  grid-area: 1/2;\\n  font: inherit;\\n  padding: 2px 3px;\\n  margin: 0;\\n  resize: none;\\n  background: none;\\n  appearance: none;\\n  border: none;\\n  overflow: hidden;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*\n  Main widget layout and styling\n*/\n\n.jp-extensionmanager-view .lm-SplitPanel-child {\n  overflow-y: auto;\n}\n\n.jp-extensionmanager-header {\n  width: 100%;\n}\n\n.jp-extensionmanager-title {\n  display: flex;\n  margin: 4px 10px 0;\n}\n\n.jp-extensionmanager-title svg {\n  width: 14px;\n}\n\n.jp-extensionmanager-title .jp-icon3[fill] {\n  fill: currentcolor;\n}\n\n.jp-extensionmanager-path {\n  display: inline flex;\n  padding-left: 4px;\n}\n\n.jp-extensionmanager-header .jp-FilterBox {\n  margin: 4px 10px 0;\n  width: calc(100% - 20px);\n  font-weight: normal;\n}\n\n.jp-extensionmanager-disclaimer {\n  padding: 0 8px;\n  min-height: 160px;\n}\n\n.jp-extensionmanager-disclaimer a {\n  color: var(--jp-content-link-color);\n  text-decoration: none;\n}\n\n.jp-extensionmanager-disclaimer a:hover {\n  color: var(--jp-content-link-hover-color, var(--jp-content-link-color));\n  text-decoration: underline;\n}\n\n.jp-extensionmanager-disclaimer .jp-Button {\n  margin: 0 5px;\n}\n\n/*\n  List view layout and styling\n*/\n\n.jp-extensionmanager-listview-wrapper {\n  margin: 0;\n  padding: 0;\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n}\n\n.jp-extensionmanager-listview {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n  min-height: 0;\n  flex: 1 1 auto;\n  overflow: auto;\n}\n\n/*\n  Section headers\n*/\n\n.jp-extensionmanager-view .jp-SidePanel-header .jp-extensionmanager-error {\n  text-transform: none;\n  font-size: var(--jp-ui-font-size1);\n  font-weight: 400;\n}\n\n/*\n  Error messages\n*/\n\n.jp-extensionmanager-view .jp-extensionmanager-error pre {\n  white-space: pre-wrap;\n}\n\n/*\n  List view pagination styling\n*/\n\n.jp-extensionmanager-view ul.pagination {\n  display: flex;\n  justify-content: center;\n  padding-left: 0;\n  padding-right: 0;\n}\n\n.jp-extensionmanager-pagination li {\n  display: inline-block;\n}\n\n/* stylelint-disable selector-max-type */\n.jp-extensionmanager-pagination li > a {\n  padding: 0 5px;\n  cursor: pointer;\n}\n/* stylelint-enable selector-max-type */\n\n.jp-extensionmanager-pagination li.active > a {\n  background: var(--jp-brand-color1);\n  color: var(--jp-layout-color1);\n}\n\n.jp-extensionmanager-pagination li > a:hover {\n  background-color: var(--jp-layout-color2);\n}\n\n.jp-extensionmanager-pagination .break > a {\n  cursor: default;\n}\n\n.jp-extensionmanager-installedlist,\n.jp-extensionmanager-searchresults {\n  min-height: 100px;\n}\n\n/*\n  Entry layout and styling\n*/\n\n.jp-extensionmanager-entry {\n  padding: 8px;\n  border-bottom: solid var(--jp-border-width) var(--jp-border-color2);\n}\n\n.jp-extensionmanager-entry-description {\n  min-width: 0;\n  flex-grow: 1;\n  font-size: var(--jp-ui-font-size1);\n  color: var(--jp-ui-font-color2);\n  font-weight: 400;\n}\n\n.jp-extensionmanager-entry-title {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n}\n\n.jp-extensionmanager-entry.jp-extensionmanager-entry-should-be-uninstalled {\n  background-color: var(--jp-error-color3);\n}\n\n/* Precedence order update/error/warning matters! */\n\n.jp-extensionmanager-entry.jp-extensionmanager-entry-update {\n  border-left: solid 8px var(--jp-brand-color2);\n  padding-left: 4px;\n}\n\n.jp-extensionmanager-entry.jp-extensionmanager-entry-error {\n  border-left: solid 8px var(--jp-error-color2);\n  padding-left: 4px;\n}\n\n.jp-extensionmanager-entry-name {\n  font-size: var(--jp-ui-font-size1);\n  font-weight: 600;\n  padding: 0 8px 0 0;\n  margin-bottom: 4px;\n  overflow-wrap: anywhere;\n}\n\n.jp-extensionmanager-entry-name a:link {\n  color: var(--jp-content-link-color);\n  text-decoration: none;\n}\n\n.jp-extensionmanager-entry-name a:visited {\n  color: var(--jp-content-link-visited-color, var(--jp-content-link-color));\n  text-decoration: none;\n}\n\n.jp-extensionmanager-entry-name a:hover {\n  color: var(--jp-content-link-hover-color, var(--jp-content-link-color));\n  text-decoration: underline;\n}\n\n.jp-extensionmanager-loader,\n.jp-extensionmanager-error,\n.jp-extensionmanager-listview-message {\n  padding: 4px 12px;\n}\n\n.jp-extensionmanager-listview-message {\n  font-size: var(--jp-ui-font-size1);\n}\n\n.jp-extensionmanager-entry-content {\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n}\n\n/*\n  Pending entry progress indicator\n*/\n\n.jp-extensionmanager-pending {\n  height: 4px;\n  width: 100%;\n  position: relative;\n  overflow: hidden;\n  flex: 0 0 auto;\n  background-color: var(--jp-layout-color1);\n}\n\n.jp-extensionmanager-pending.jp-mod-hasPending::before {\n  display: block;\n  position: absolute;\n  content: '';\n  left: -200px;\n  width: 200px;\n  height: 4px;\n  border-radius: 4px;\n  background-color: var(--jp-brand-color1);\n  animation: loading 2s linear infinite;\n}\n\n@keyframes loading {\n  0% {\n    left: -200px;\n    width: 30%;\n  }\n\n  50% {\n    width: 30%;\n  }\n\n  70% {\n    width: 70%;\n  }\n\n  80% {\n    left: 50%;\n  }\n\n  95% {\n    left: 120%;\n  }\n\n  100% {\n    left: 100%;\n  }\n}\n\n/*\n  Disclaimer buttons\n*/\n\n.jp-extensionmanager-disclaimer-disable {\n  background-color: var(--jp-reject-color-normal) !important;\n  color: white !important;\n  border: 0;\n  background-image: none !important;\n}\n\n.jp-extensionmanager-disclaimer-enable {\n  background-color: var(--jp-error-color1) !important;\n  color: white !important;\n  border: 0;\n  background-image: none !important;\n}\n\n/*\n  Entry buttons layout and styling\n*/\n\n.jp-extensionmanager-entry-buttons {\n  display: flex;\n  flex-direction: row;\n  padding-block-start: 4px;\n  justify-content: flex-end;\n}\n\n/*\n  Rebuild prompt dialog\n*/\n\n.jp-extensionmanager-buildprompt {\n  background-color: var(--jp-brand-color1);\n  color: var(--jp-ui-inverse-font-color1);\n  padding: 4px 8px;\n  font-size: var(--jp-ui-font-size1);\n  font-weight: 400;\n}\n\n.jp-extensionmanager-buildprompt button {\n  border: none;\n  background-color: transparent;\n  color: var(--jp-ui-inverse-font-color1);\n  font-size: var(--jp-ui-font-size1);\n  font-weight: 600;\n  float: right;\n  margin: 4px;\n}\n\n/*\n  Generic dialog\n*/\n\n.jp-extensionmanager-dialog .jp-extensionmanager-dialog-subheader {\n  font-size: var(--jp-ui-font-size1);\n  font-weight: 600;\n  color: var(--jp-ui-font-color0);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/extensionmanager/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;CAEC;;AAED;EACE,gBAAgB;AAClB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;EACpB,iBAAiB;AACnB;;AAEA;EACE,kBAAkB;EAClB,wBAAwB;EACxB,mBAAmB;AACrB;;AAEA;EACE,cAAc;EACd,iBAAiB;AACnB;;AAEA;EACE,mCAAmC;EACnC,qBAAqB;AACvB;;AAEA;EACE,uEAAuE;EACvE,0BAA0B;AAC5B;;AAEA;EACE,aAAa;AACf;;AAEA;;CAEC;;AAED;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,sBAAsB;EACtB,YAAY;AACd;;AAEA;EACE,qBAAqB;EACrB,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,cAAc;AAChB;;AAEA;;CAEC;;AAED;EACE,oBAAoB;EACpB,kCAAkC;EAClC,gBAAgB;AAClB;;AAEA;;CAEC;;AAED;EACE,qBAAqB;AACvB;;AAEA;;CAEC;;AAED;EACE,aAAa;EACb,uBAAuB;EACvB,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,qBAAqB;AACvB;;AAEA,wCAAwC;AACxC;EACE,cAAc;EACd,eAAe;AACjB;AACA,uCAAuC;;AAEvC;EACE,kCAAkC;EAClC,8BAA8B;AAChC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,eAAe;AACjB;;AAEA;;EAEE,iBAAiB;AACnB;;AAEA;;CAEC;;AAED;EACE,YAAY;EACZ,mEAAmE;AACrE;;AAEA;EACE,YAAY;EACZ,YAAY;EACZ,kCAAkC;EAClC,+BAA+B;EAC/B,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,mBAAmB;AACrB;;AAEA;EACE,wCAAwC;AAC1C;;AAEA,mDAAmD;;AAEnD;EACE,6CAA6C;EAC7C,iBAAiB;AACnB;;AAEA;EACE,6CAA6C;EAC7C,iBAAiB;AACnB;;AAEA;EACE,kCAAkC;EAClC,gBAAgB;EAChB,kBAAkB;EAClB,kBAAkB;EAClB,uBAAuB;AACzB;;AAEA;EACE,mCAAmC;EACnC,qBAAqB;AACvB;;AAEA;EACE,yEAAyE;EACzE,qBAAqB;AACvB;;AAEA;EACE,uEAAuE;EACvE,0BAA0B;AAC5B;;AAEA;;;EAGE,iBAAiB;AACnB;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,8BAA8B;AAChC;;AAEA;;CAEC;;AAED;EACE,WAAW;EACX,WAAW;EACX,kBAAkB;EAClB,gBAAgB;EAChB,cAAc;EACd,yCAAyC;AAC3C;;AAEA;EACE,cAAc;EACd,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,YAAY;EACZ,WAAW;EACX,kBAAkB;EAClB,wCAAwC;EACxC,qCAAqC;AACvC;;AAEA;EACE;IACE,YAAY;IACZ,UAAU;EACZ;;EAEA;IACE,UAAU;EACZ;;EAEA;IACE,UAAU;EACZ;;EAEA;IACE,SAAS;EACX;;EAEA;IACE,UAAU;EACZ;;EAEA;IACE,UAAU;EACZ;AACF;;AAEA;;CAEC;;AAED;EACE,0DAA0D;EAC1D,uBAAuB;EACvB,SAAS;EACT,iCAAiC;AACnC;;AAEA;EACE,mDAAmD;EACnD,uBAAuB;EACvB,SAAS;EACT,iCAAiC;AACnC;;AAEA;;CAEC;;AAED;EACE,aAAa;EACb,mBAAmB;EACnB,wBAAwB;EACxB,yBAAyB;AAC3B;;AAEA;;CAEC;;AAED;EACE,wCAAwC;EACxC,uCAAuC;EACvC,gBAAgB;EAChB,kCAAkC;EAClC,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,6BAA6B;EAC7B,uCAAuC;EACvC,kCAAkC;EAClC,gBAAgB;EAChB,YAAY;EACZ,WAAW;AACb;;AAEA;;CAEC;;AAED;EACE,kCAAkC;EAClC,gBAAgB;EAChB,+BAA+B;AACjC\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*\\n  Main widget layout and styling\\n*/\\n\\n.jp-extensionmanager-view .lm-SplitPanel-child {\\n  overflow-y: auto;\\n}\\n\\n.jp-extensionmanager-header {\\n  width: 100%;\\n}\\n\\n.jp-extensionmanager-title {\\n  display: flex;\\n  margin: 4px 10px 0;\\n}\\n\\n.jp-extensionmanager-title svg {\\n  width: 14px;\\n}\\n\\n.jp-extensionmanager-title .jp-icon3[fill] {\\n  fill: currentcolor;\\n}\\n\\n.jp-extensionmanager-path {\\n  display: inline flex;\\n  padding-left: 4px;\\n}\\n\\n.jp-extensionmanager-header .jp-FilterBox {\\n  margin: 4px 10px 0;\\n  width: calc(100% - 20px);\\n  font-weight: normal;\\n}\\n\\n.jp-extensionmanager-disclaimer {\\n  padding: 0 8px;\\n  min-height: 160px;\\n}\\n\\n.jp-extensionmanager-disclaimer a {\\n  color: var(--jp-content-link-color);\\n  text-decoration: none;\\n}\\n\\n.jp-extensionmanager-disclaimer a:hover {\\n  color: var(--jp-content-link-hover-color, var(--jp-content-link-color));\\n  text-decoration: underline;\\n}\\n\\n.jp-extensionmanager-disclaimer .jp-Button {\\n  margin: 0 5px;\\n}\\n\\n/*\\n  List view layout and styling\\n*/\\n\\n.jp-extensionmanager-listview-wrapper {\\n  margin: 0;\\n  padding: 0;\\n  display: flex;\\n  flex-direction: column;\\n  height: 100%;\\n}\\n\\n.jp-extensionmanager-listview {\\n  list-style-type: none;\\n  margin: 0;\\n  padding: 0;\\n  min-height: 0;\\n  flex: 1 1 auto;\\n  overflow: auto;\\n}\\n\\n/*\\n  Section headers\\n*/\\n\\n.jp-extensionmanager-view .jp-SidePanel-header .jp-extensionmanager-error {\\n  text-transform: none;\\n  font-size: var(--jp-ui-font-size1);\\n  font-weight: 400;\\n}\\n\\n/*\\n  Error messages\\n*/\\n\\n.jp-extensionmanager-view .jp-extensionmanager-error pre {\\n  white-space: pre-wrap;\\n}\\n\\n/*\\n  List view pagination styling\\n*/\\n\\n.jp-extensionmanager-view ul.pagination {\\n  display: flex;\\n  justify-content: center;\\n  padding-left: 0;\\n  padding-right: 0;\\n}\\n\\n.jp-extensionmanager-pagination li {\\n  display: inline-block;\\n}\\n\\n/* stylelint-disable selector-max-type */\\n.jp-extensionmanager-pagination li > a {\\n  padding: 0 5px;\\n  cursor: pointer;\\n}\\n/* stylelint-enable selector-max-type */\\n\\n.jp-extensionmanager-pagination li.active > a {\\n  background: var(--jp-brand-color1);\\n  color: var(--jp-layout-color1);\\n}\\n\\n.jp-extensionmanager-pagination li > a:hover {\\n  background-color: var(--jp-layout-color2);\\n}\\n\\n.jp-extensionmanager-pagination .break > a {\\n  cursor: default;\\n}\\n\\n.jp-extensionmanager-installedlist,\\n.jp-extensionmanager-searchresults {\\n  min-height: 100px;\\n}\\n\\n/*\\n  Entry layout and styling\\n*/\\n\\n.jp-extensionmanager-entry {\\n  padding: 8px;\\n  border-bottom: solid var(--jp-border-width) var(--jp-border-color2);\\n}\\n\\n.jp-extensionmanager-entry-description {\\n  min-width: 0;\\n  flex-grow: 1;\\n  font-size: var(--jp-ui-font-size1);\\n  color: var(--jp-ui-font-color2);\\n  font-weight: 400;\\n}\\n\\n.jp-extensionmanager-entry-title {\\n  display: flex;\\n  flex-direction: row;\\n  justify-content: space-between;\\n  align-items: center;\\n}\\n\\n.jp-extensionmanager-entry.jp-extensionmanager-entry-should-be-uninstalled {\\n  background-color: var(--jp-error-color3);\\n}\\n\\n/* Precedence order update/error/warning matters! */\\n\\n.jp-extensionmanager-entry.jp-extensionmanager-entry-update {\\n  border-left: solid 8px var(--jp-brand-color2);\\n  padding-left: 4px;\\n}\\n\\n.jp-extensionmanager-entry.jp-extensionmanager-entry-error {\\n  border-left: solid 8px var(--jp-error-color2);\\n  padding-left: 4px;\\n}\\n\\n.jp-extensionmanager-entry-name {\\n  font-size: var(--jp-ui-font-size1);\\n  font-weight: 600;\\n  padding: 0 8px 0 0;\\n  margin-bottom: 4px;\\n  overflow-wrap: anywhere;\\n}\\n\\n.jp-extensionmanager-entry-name a:link {\\n  color: var(--jp-content-link-color);\\n  text-decoration: none;\\n}\\n\\n.jp-extensionmanager-entry-name a:visited {\\n  color: var(--jp-content-link-visited-color, var(--jp-content-link-color));\\n  text-decoration: none;\\n}\\n\\n.jp-extensionmanager-entry-name a:hover {\\n  color: var(--jp-content-link-hover-color, var(--jp-content-link-color));\\n  text-decoration: underline;\\n}\\n\\n.jp-extensionmanager-loader,\\n.jp-extensionmanager-error,\\n.jp-extensionmanager-listview-message {\\n  padding: 4px 12px;\\n}\\n\\n.jp-extensionmanager-listview-message {\\n  font-size: var(--jp-ui-font-size1);\\n}\\n\\n.jp-extensionmanager-entry-content {\\n  display: flex;\\n  flex-direction: column;\\n  justify-content: space-between;\\n}\\n\\n/*\\n  Pending entry progress indicator\\n*/\\n\\n.jp-extensionmanager-pending {\\n  height: 4px;\\n  width: 100%;\\n  position: relative;\\n  overflow: hidden;\\n  flex: 0 0 auto;\\n  background-color: var(--jp-layout-color1);\\n}\\n\\n.jp-extensionmanager-pending.jp-mod-hasPending::before {\\n  display: block;\\n  position: absolute;\\n  content: '';\\n  left: -200px;\\n  width: 200px;\\n  height: 4px;\\n  border-radius: 4px;\\n  background-color: var(--jp-brand-color1);\\n  animation: loading 2s linear infinite;\\n}\\n\\n@keyframes loading {\\n  0% {\\n    left: -200px;\\n    width: 30%;\\n  }\\n\\n  50% {\\n    width: 30%;\\n  }\\n\\n  70% {\\n    width: 70%;\\n  }\\n\\n  80% {\\n    left: 50%;\\n  }\\n\\n  95% {\\n    left: 120%;\\n  }\\n\\n  100% {\\n    left: 100%;\\n  }\\n}\\n\\n/*\\n  Disclaimer buttons\\n*/\\n\\n.jp-extensionmanager-disclaimer-disable {\\n  background-color: var(--jp-reject-color-normal) !important;\\n  color: white !important;\\n  border: 0;\\n  background-image: none !important;\\n}\\n\\n.jp-extensionmanager-disclaimer-enable {\\n  background-color: var(--jp-error-color1) !important;\\n  color: white !important;\\n  border: 0;\\n  background-image: none !important;\\n}\\n\\n/*\\n  Entry buttons layout and styling\\n*/\\n\\n.jp-extensionmanager-entry-buttons {\\n  display: flex;\\n  flex-direction: row;\\n  padding-block-start: 4px;\\n  justify-content: flex-end;\\n}\\n\\n/*\\n  Rebuild prompt dialog\\n*/\\n\\n.jp-extensionmanager-buildprompt {\\n  background-color: var(--jp-brand-color1);\\n  color: var(--jp-ui-inverse-font-color1);\\n  padding: 4px 8px;\\n  font-size: var(--jp-ui-font-size1);\\n  font-weight: 400;\\n}\\n\\n.jp-extensionmanager-buildprompt button {\\n  border: none;\\n  background-color: transparent;\\n  color: var(--jp-ui-inverse-font-color1);\\n  font-size: var(--jp-ui-font-size1);\\n  font-weight: 600;\\n  float: right;\\n  margin: 4px;\\n}\\n\\n/*\\n  Generic dialog\\n*/\\n\\n.jp-extensionmanager-dialog .jp-extensionmanager-dialog-subheader {\\n  font-size: var(--jp-ui-font-size1);\\n  font-weight: 600;\\n  color: var(--jp-ui-font-color0);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n#filebrowser.jp-mod-restoring .jp-DirListing-content {\n  display: none;\n}\n\n.jp-FileBrowser-filterBox {\n  padding: 0;\n  flex: 0 0 auto;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/filebrowser-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,aAAa;AACf;;AAEA;EACE,UAAU;EACV,cAAc;AAChB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n#filebrowser.jp-mod-restoring .jp-DirListing-content {\\n  display: none;\\n}\\n\\n.jp-FileBrowser-filterBox {\\n  padding: 0;\\n  flex: 0 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Variables\n|----------------------------------------------------------------------------*/\n\n:root {\n  --jp-private-filebrowser-button-height: 28px;\n  --jp-private-filebrowser-button-width: 48px;\n}\n\n.jp-FileBrowser .jp-SidePanel-content {\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n}\n\n.jp-FileBrowser-toolbar.jp-Toolbar {\n  border-bottom: none;\n  height: auto;\n  margin: 8px 12px 0;\n  box-shadow: none;\n  padding: 0;\n}\n\n.jp-FileBrowser-toolbar.jp-Toolbar::part(positioning-region) {\n  row-gap: 12px;\n}\n\n.jp-FileBrowser-filterToolbar {\n  display: flex;\n  flex: 0 0 auto;\n  flex-direction: column;\n}\n\n.jp-FileBrowser-filterToolbar.jp-Toolbar {\n  border-bottom: none;\n  height: auto;\n  margin: 0 12px 6px;\n  box-shadow: none;\n  padding: 0;\n}\n\n.jp-FileBrowser-Panel {\n  flex: 1 1 auto;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n}\n\n.jp-BreadCrumbs {\n  flex: 0 0 auto;\n  margin: 8px 12px;\n}\n\n.jp-BreadCrumbs-item {\n  margin: 0 2px;\n  padding: 0 2px;\n  border-radius: var(--jp-border-radius);\n  cursor: pointer;\n}\n\n.jp-BreadCrumbs-item:hover {\n  background-color: var(--jp-layout-color2);\n}\n\n.jp-BreadCrumbs-item:first-child {\n  margin-left: 0;\n}\n\n.jp-BreadCrumbs-item.jp-mod-dropTarget {\n  background-color: var(--jp-brand-color2);\n  opacity: 0.7;\n}\n\n/*-----------------------------------------------------------------------------\n| Buttons\n|----------------------------------------------------------------------------*/\n\n.jp-FileBrowser-toolbar > .jp-Toolbar-item,\n.jp-FileBrowser-filterToolbar > .jp-Toolbar-item {\n  flex: 0 0 auto;\n  padding-left: 0;\n  align-items: center;\n  height: unset;\n}\n\n.jp-FileBrowser-toolbar > .jp-Toolbar-item .jp-ToolbarButtonComponent {\n  width: 28px;\n}\n\n/*-----------------------------------------------------------------------------\n| Other styles\n|----------------------------------------------------------------------------*/\n\n.jp-FileDialog.jp-mod-conflict input {\n  color: var(--jp-error-color1);\n}\n\n.jp-FileDialog .jp-new-name-title {\n  margin-top: 12px;\n}\n\n.jp-FileBrowser .lm-AccordionPanel > h3:first-child {\n  display: none;\n}\n\n.jp-FileBrowser-filterToolbar > .jp-FileBrowser-filterBox {\n  width: 100%;\n}\n\n.jp-FileBrowser-filterBox > .jp-FilterBox {\n  width: 100%;\n}\n\n.jp-Open-Dialog > .jp-FileBrowser {\n  min-height: 200px;\n}\n\n.jp-Open-Dialog-label {\n  overflow: visible;\n}\n\n/*-----------------------------------------------------------------------------\n| DirListing\n|----------------------------------------------------------------------------*/\n\n.jp-DirListing {\n  flex: 1 1 auto;\n  display: flex;\n  flex-direction: column;\n  outline: 0;\n  overflow: hidden;\n\n  --jp-dirlisting-padding-width: 12px;\n}\n\n.jp-DirListing-header {\n  flex: 0 0 auto;\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  overflow: hidden;\n  border-top: var(--jp-border-width) solid var(--jp-border-color2);\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color1);\n  box-shadow: var(--jp-toolbar-box-shadow);\n  z-index: 2;\n  user-select: none;\n}\n\n.jp-DirListing-headerItem {\n  padding: 4px 12px 2px;\n  font-weight: 500;\n  overflow: hidden;\n  white-space: nowrap;\n  box-sizing: border-box;\n  display: flex;\n}\n\n.jp-DirListing-headerItemText {\n  flex-grow: 1;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n\n.jp-DirListing-headerItem:hover {\n  background: var(--jp-layout-color2);\n}\n\n.jp-DirListing-headerItem.jp-id-name:not([style*='width']) {\n  /* default width before user resizes this column */\n  flex: 1 1 126px;\n}\n\n.jp-DirListing-headerItem.jp-id-modified:not([style*='width']) {\n  /* default width before user resizes this column */\n  flex: 1 0 70px;\n}\n\n.jp-DirListing-headerItem.jp-id-filesize:not([style*='width']) {\n  /* default width before user resizes this column */\n  flex: 0 0 75px;\n}\n\n.jp-DirListing-headerItem.jp-id-modified,\n.jp-DirListing-headerItem.jp-id-filesize {\n  text-align: right;\n  /* stylelint-disable */\n  container-type: inline-size;\n  /* stylelint-enable */\n}\n\n/**\n * Use container queries (not yet supported by our version of stylelint)\n * to display either a small or large header for the last-modified column.\n */\n/* stylelint-disable */\n@container (max-width: 300px) {\n  /* stylelint-enable */\n  .jp-DirListing-headerItem.jp-id-modified\n    > .jp-DirListing-headerItemText-small,\n  .jp-DirListing-headerItem.jp-id-filesize\n    > .jp-DirListing-headerItemText-small {\n    display: inline;\n  }\n\n  .jp-DirListing-headerItem.jp-id-modified\n    > .jp-DirListing-headerItemText-large,\n  .jp-DirListing-headerItem.jp-id-filesize\n    > .jp-DirListing-headerItemText-large {\n    display: none;\n  }\n}\n\n/* stylelint-disable */\n@container (min-width: 300px) {\n  /* stylelint-enable */\n  .jp-DirListing-headerItem.jp-id-modified\n    > .jp-DirListing-headerItemText-small {\n    display: none;\n  }\n\n  .jp-DirListing-headerItem.jp-id-modified\n    > .jp-DirListing-headerItemText-large {\n    display: inline;\n  }\n}\n\n/* stylelint-disable */\n@container (max-width: 100px) {\n  /* stylelint-enable */\n  .jp-DirListing-headerItem.jp-id-filesize\n    > .jp-DirListing-headerItemText-small {\n    display: inline;\n  }\n\n  .jp-DirListing-headerItem.jp-id-filesize\n    > .jp-DirListing-headerItemText-large {\n    display: none;\n  }\n}\n\n/* stylelint-disable */\n@container (min-width: 100px) {\n  /* stylelint-enable */\n  .jp-DirListing-headerItem.jp-id-filesize\n    > .jp-DirListing-headerItemText-small {\n    display: none;\n  }\n\n  .jp-DirListing-headerItem.jp-id-filesize\n    > .jp-DirListing-headerItemText-large {\n    display: inline;\n  }\n}\n\n.jp-DirListing-headerItem.jp-mod-selected {\n  font-weight: 600;\n}\n\n/* increase specificity to override bundled default */\n.jp-DirListing-content {\n  flex: 1 1 auto;\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n  overflow: auto;\n  background-color: var(--jp-layout-color1);\n  overflow-x: hidden;\n}\n\n.jp-DirListing-content mark {\n  color: var(--jp-ui-font-color0);\n  background-color: transparent;\n  font-weight: bold;\n}\n\n.jp-DirListing-content .jp-DirListing-item.jp-mod-selected mark {\n  color: var(--jp-ui-inverse-font-color0);\n}\n\n/* Style the directory listing content when a user drops a file to upload */\n.jp-DirListing.jp-mod-native-drop .jp-DirListing-content {\n  outline: 5px dashed rgba(128, 128, 128, 0.5);\n  outline-offset: -10px;\n  cursor: copy;\n}\n\n.jp-DirListing-item {\n  align-items: center;\n  padding: 4px var(--jp-dirlisting-padding-width);\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  display: inline-grid;\n  grid-auto-columns: max-content;\n  width: 100%;\n  box-sizing: border-box;\n  grid-auto-flow: column;\n}\n\n.jp-DirListing-checkboxWrapper {\n  /* Increases hit area of checkbox. */\n  padding: 4px;\n}\n\n.jp-DirListing-content .jp-DirListing-checkboxWrapper {\n  position: relative;\n  left: -4px;\n  margin: -4px 0 -4px -8px;\n}\n\n.jp-DirListing-checkboxWrapper.jp-mod-visible {\n  visibility: visible;\n}\n\n/* For devices that support hovering, hide checkboxes until hovered, selected...\n*/\n@media (hover: hover) {\n  .jp-DirListing-checkboxWrapper {\n    visibility: hidden;\n  }\n\n  .jp-DirListing-item:hover .jp-DirListing-checkboxWrapper,\n  .jp-DirListing-item.jp-mod-selected .jp-DirListing-checkboxWrapper {\n    visibility: visible;\n  }\n}\n\n.jp-DirListing-resizeHandle {\n  min-width: var(--jp-border-width);\n  background: var(--jp-border-color2);\n  height: calc(100% - 4px);\n\n  /* border increases the area where handle can be grabbed */\n  border: 2px solid var(--jp-layout-color1);\n}\n\n.jp-DirListing-resizeHandle.jp-mod-active {\n  background: var(--jp-brand-color1);\n  border-color: var(--jp-brand-color1);\n}\n\n.jp-DirListing-resizeHandle.jp-mod-active:hover {\n  border-color: var(--jp-brand-color1);\n}\n\n.jp-DirListing-resizeHandle:hover {\n  cursor: col-resize;\n  border-color: var(--jp-border-color2);\n}\n\n.jp-DirListing-itemName {\n  display: flex;\n}\n\n.jp-DirListing-item[data-is-dot] {\n  opacity: 75%;\n}\n\n.jp-DirListing-item.jp-mod-selected {\n  color: var(--jp-ui-inverse-font-color1);\n  background: var(--jp-brand-color1);\n}\n\n.jp-DirListing-item.jp-mod-dropTarget {\n  background: var(--jp-brand-color3);\n}\n\n.jp-DirListing-item:hover:not(.jp-mod-selected) {\n  background: var(--jp-layout-color2);\n}\n\n.jp-DirListing-itemIcon {\n  flex: 0 0 20px;\n  margin-right: 4px;\n}\n\n.jp-DirListing-itemText,\n.jp-DirListing-itemModified,\n.jp-DirListing-itemFileSize {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.jp-DirListing-itemName:not([style*='width']) > .jp-DirListing-itemText {\n  flex: 1 1 106px;\n}\n\n.jp-DirListing-item:has(.jp-DirListing-itemText:focus-visible) {\n  /* Targeting \\`.jp-DirListing-itemText\\` specifically to avoid an extra outline\n  when it gets replaced with \\`jp-DirListing-editor\\` when editing the file name */\n  outline-width: 2px;\n  outline-color: var(--jp-inverse-layout-color1);\n  outline-style: solid;\n  outline-offset: -4px;\n}\n\n.jp-DirListing-item.jp-mod-selected:focus-within {\n  outline-color: var(--jp-layout-color1);\n}\n\n.jp-DirListing-item > .jp-DirListing-itemName > .jp-DirListing-itemText:focus {\n  outline: 0;\n}\n\n.jp-DirListing-itemModified {\n  text-align: right;\n}\n\n.jp-DirListing-itemFileSize {\n  text-align: right;\n}\n\n.jp-DirListing-editor {\n  flex: 1 0 64px;\n  outline: none;\n  border: none;\n  color: var(--jp-ui-font-color1);\n  background-color: var(--jp-layout-color1);\n}\n\n.jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon::before {\n  color: var(--jp-success-color1);\n  content: '\\\\25CF';\n  font-size: 8px;\n  position: absolute;\n  left: -8px;\n}\n\n.jp-DirListing-item.jp-mod-running.jp-mod-selected\n  .jp-DirListing-itemIcon::before {\n  color: var(--jp-ui-inverse-font-color1);\n}\n\n.jp-DirListing-item.lm-mod-drag-image,\n.jp-DirListing-item.jp-mod-selected.lm-mod-drag-image {\n  font-size: var(--jp-ui-font-size1);\n  padding-left: 4px;\n  margin-left: 4px;\n  width: 160px;\n  background-color: var(--jp-ui-inverse-font-color2);\n  box-shadow: var(--jp-elevation-z2);\n  border-radius: 0;\n  color: var(--jp-ui-font-color1);\n  transform: translateX(-40%) translateY(-58%);\n}\n\n.jp-Document {\n  min-width: 120px;\n  min-height: 120px;\n  outline: none;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/filebrowser/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E;EACE,4CAA4C;EAC5C,2CAA2C;AAC7C;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;EACnB,YAAY;EACZ,kBAAkB;EAClB,gBAAgB;EAChB,UAAU;AACZ;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,aAAa;EACb,cAAc;EACd,sBAAsB;AACxB;;AAEA;EACE,mBAAmB;EACnB,YAAY;EACZ,kBAAkB;EAClB,gBAAgB;EAChB,UAAU;AACZ;;AAEA;EACE,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,gBAAgB;AAClB;;AAEA;EACE,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,cAAc;EACd,sCAAsC;EACtC,eAAe;AACjB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,wCAAwC;EACxC,YAAY;AACd;;AAEA;;8EAE8E;;AAE9E;;EAEE,cAAc;EACd,eAAe;EACf,mBAAmB;EACnB,aAAa;AACf;;AAEA;EACE,WAAW;AACb;;AAEA;;8EAE8E;;AAE9E;EACE,6BAA6B;AAC/B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;8EAE8E;;AAE9E;EACE,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,UAAU;EACV,gBAAgB;;EAEhB,mCAAmC;AACrC;;AAEA;EACE,cAAc;EACd,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,gBAAgB;EAChB,gEAAgE;EAChE,mEAAmE;EACnE,wCAAwC;EACxC,UAAU;EACV,iBAAiB;AACnB;;AAEA;EACE,qBAAqB;EACrB,gBAAgB;EAChB,gBAAgB;EAChB,mBAAmB;EACnB,sBAAsB;EACtB,aAAa;AACf;;AAEA;EACE,YAAY;EACZ,uBAAuB;EACvB,gBAAgB;AAClB;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,kDAAkD;EAClD,eAAe;AACjB;;AAEA;EACE,kDAAkD;EAClD,cAAc;AAChB;;AAEA;EACE,kDAAkD;EAClD,cAAc;AAChB;;AAEA;;EAEE,iBAAiB;EACjB,sBAAsB;EACtB,2BAA2B;EAC3B,qBAAqB;AACvB;;AAEA;;;EAGE;AACF,sBAAsB;AACtB;EACE,qBAAqB;EACrB;;;;IAIE,eAAe;EACjB;;EAEA;;;;IAIE,aAAa;EACf;AACF;;AAEA,sBAAsB;AACtB;EACE,qBAAqB;EACrB;;IAEE,aAAa;EACf;;EAEA;;IAEE,eAAe;EACjB;AACF;;AAEA,sBAAsB;AACtB;EACE,qBAAqB;EACrB;;IAEE,eAAe;EACjB;;EAEA;;IAEE,aAAa;EACf;AACF;;AAEA,sBAAsB;AACtB;EACE,qBAAqB;EACrB;;IAEE,aAAa;EACf;;EAEA;;IAEE,eAAe;EACjB;AACF;;AAEA;EACE,gBAAgB;AAClB;;AAEA,qDAAqD;AACrD;EACE,cAAc;EACd,SAAS;EACT,UAAU;EACV,qBAAqB;EACrB,cAAc;EACd,yCAAyC;EACzC,kBAAkB;AACpB;;AAEA;EACE,+BAA+B;EAC/B,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,uCAAuC;AACzC;;AAEA,2EAA2E;AAC3E;EACE,4CAA4C;EAC5C,qBAAqB;EACrB,YAAY;AACd;;AAEA;EACE,mBAAmB;EACnB,+CAA+C;EAC/C,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;EACjB,oBAAoB;EACpB,8BAA8B;EAC9B,WAAW;EACX,sBAAsB;EACtB,sBAAsB;AACxB;;AAEA;EACE,oCAAoC;EACpC,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,wBAAwB;AAC1B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;CACC;AACD;EACE;IACE,kBAAkB;EACpB;;EAEA;;IAEE,mBAAmB;EACrB;AACF;;AAEA;EACE,iCAAiC;EACjC,mCAAmC;EACnC,wBAAwB;;EAExB,0DAA0D;EAC1D,yCAAyC;AAC3C;;AAEA;EACE,kCAAkC;EAClC,oCAAoC;AACtC;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,kBAAkB;EAClB,qCAAqC;AACvC;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,uCAAuC;EACvC,kCAAkC;AACpC;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,cAAc;EACd,iBAAiB;AACnB;;AAEA;;;EAGE,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE;gFAC8E;EAC9E,kBAAkB;EAClB,8CAA8C;EAC9C,oBAAoB;EACpB,oBAAoB;AACtB;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,cAAc;EACd,aAAa;EACb,YAAY;EACZ,+BAA+B;EAC/B,yCAAyC;AAC3C;;AAEA;EACE,+BAA+B;EAC/B,gBAAgB;EAChB,cAAc;EACd,kBAAkB;EAClB,UAAU;AACZ;;AAEA;;EAEE,uCAAuC;AACzC;;AAEA;;EAEE,kCAAkC;EAClC,iBAAiB;EACjB,gBAAgB;EAChB,YAAY;EACZ,kDAAkD;EAClD,kCAAkC;EAClC,gBAAgB;EAChB,+BAA+B;EAC/B,4CAA4C;AAC9C;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,aAAa;AACf\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Variables\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  --jp-private-filebrowser-button-height: 28px;\\n  --jp-private-filebrowser-button-width: 48px;\\n}\\n\\n.jp-FileBrowser .jp-SidePanel-content {\\n  display: flex;\\n  flex-direction: column;\\n  overflow: hidden;\\n}\\n\\n.jp-FileBrowser-toolbar.jp-Toolbar {\\n  border-bottom: none;\\n  height: auto;\\n  margin: 8px 12px 0;\\n  box-shadow: none;\\n  padding: 0;\\n}\\n\\n.jp-FileBrowser-toolbar.jp-Toolbar::part(positioning-region) {\\n  row-gap: 12px;\\n}\\n\\n.jp-FileBrowser-filterToolbar {\\n  display: flex;\\n  flex: 0 0 auto;\\n  flex-direction: column;\\n}\\n\\n.jp-FileBrowser-filterToolbar.jp-Toolbar {\\n  border-bottom: none;\\n  height: auto;\\n  margin: 0 12px 6px;\\n  box-shadow: none;\\n  padding: 0;\\n}\\n\\n.jp-FileBrowser-Panel {\\n  flex: 1 1 auto;\\n  display: flex;\\n  flex-direction: column;\\n  overflow: hidden;\\n}\\n\\n.jp-BreadCrumbs {\\n  flex: 0 0 auto;\\n  margin: 8px 12px;\\n}\\n\\n.jp-BreadCrumbs-item {\\n  margin: 0 2px;\\n  padding: 0 2px;\\n  border-radius: var(--jp-border-radius);\\n  cursor: pointer;\\n}\\n\\n.jp-BreadCrumbs-item:hover {\\n  background-color: var(--jp-layout-color2);\\n}\\n\\n.jp-BreadCrumbs-item:first-child {\\n  margin-left: 0;\\n}\\n\\n.jp-BreadCrumbs-item.jp-mod-dropTarget {\\n  background-color: var(--jp-brand-color2);\\n  opacity: 0.7;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Buttons\\n|----------------------------------------------------------------------------*/\\n\\n.jp-FileBrowser-toolbar > .jp-Toolbar-item,\\n.jp-FileBrowser-filterToolbar > .jp-Toolbar-item {\\n  flex: 0 0 auto;\\n  padding-left: 0;\\n  align-items: center;\\n  height: unset;\\n}\\n\\n.jp-FileBrowser-toolbar > .jp-Toolbar-item .jp-ToolbarButtonComponent {\\n  width: 28px;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Other styles\\n|----------------------------------------------------------------------------*/\\n\\n.jp-FileDialog.jp-mod-conflict input {\\n  color: var(--jp-error-color1);\\n}\\n\\n.jp-FileDialog .jp-new-name-title {\\n  margin-top: 12px;\\n}\\n\\n.jp-FileBrowser .lm-AccordionPanel > h3:first-child {\\n  display: none;\\n}\\n\\n.jp-FileBrowser-filterToolbar > .jp-FileBrowser-filterBox {\\n  width: 100%;\\n}\\n\\n.jp-FileBrowser-filterBox > .jp-FilterBox {\\n  width: 100%;\\n}\\n\\n.jp-Open-Dialog > .jp-FileBrowser {\\n  min-height: 200px;\\n}\\n\\n.jp-Open-Dialog-label {\\n  overflow: visible;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| DirListing\\n|----------------------------------------------------------------------------*/\\n\\n.jp-DirListing {\\n  flex: 1 1 auto;\\n  display: flex;\\n  flex-direction: column;\\n  outline: 0;\\n  overflow: hidden;\\n\\n  --jp-dirlisting-padding-width: 12px;\\n}\\n\\n.jp-DirListing-header {\\n  flex: 0 0 auto;\\n  display: flex;\\n  flex-direction: row;\\n  align-items: center;\\n  overflow: hidden;\\n  border-top: var(--jp-border-width) solid var(--jp-border-color2);\\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color1);\\n  box-shadow: var(--jp-toolbar-box-shadow);\\n  z-index: 2;\\n  user-select: none;\\n}\\n\\n.jp-DirListing-headerItem {\\n  padding: 4px 12px 2px;\\n  font-weight: 500;\\n  overflow: hidden;\\n  white-space: nowrap;\\n  box-sizing: border-box;\\n  display: flex;\\n}\\n\\n.jp-DirListing-headerItemText {\\n  flex-grow: 1;\\n  text-overflow: ellipsis;\\n  overflow: hidden;\\n}\\n\\n.jp-DirListing-headerItem:hover {\\n  background: var(--jp-layout-color2);\\n}\\n\\n.jp-DirListing-headerItem.jp-id-name:not([style*='width']) {\\n  /* default width before user resizes this column */\\n  flex: 1 1 126px;\\n}\\n\\n.jp-DirListing-headerItem.jp-id-modified:not([style*='width']) {\\n  /* default width before user resizes this column */\\n  flex: 1 0 70px;\\n}\\n\\n.jp-DirListing-headerItem.jp-id-filesize:not([style*='width']) {\\n  /* default width before user resizes this column */\\n  flex: 0 0 75px;\\n}\\n\\n.jp-DirListing-headerItem.jp-id-modified,\\n.jp-DirListing-headerItem.jp-id-filesize {\\n  text-align: right;\\n  /* stylelint-disable */\\n  container-type: inline-size;\\n  /* stylelint-enable */\\n}\\n\\n/**\\n * Use container queries (not yet supported by our version of stylelint)\\n * to display either a small or large header for the last-modified column.\\n */\\n/* stylelint-disable */\\n@container (max-width: 300px) {\\n  /* stylelint-enable */\\n  .jp-DirListing-headerItem.jp-id-modified\\n    > .jp-DirListing-headerItemText-small,\\n  .jp-DirListing-headerItem.jp-id-filesize\\n    > .jp-DirListing-headerItemText-small {\\n    display: inline;\\n  }\\n\\n  .jp-DirListing-headerItem.jp-id-modified\\n    > .jp-DirListing-headerItemText-large,\\n  .jp-DirListing-headerItem.jp-id-filesize\\n    > .jp-DirListing-headerItemText-large {\\n    display: none;\\n  }\\n}\\n\\n/* stylelint-disable */\\n@container (min-width: 300px) {\\n  /* stylelint-enable */\\n  .jp-DirListing-headerItem.jp-id-modified\\n    > .jp-DirListing-headerItemText-small {\\n    display: none;\\n  }\\n\\n  .jp-DirListing-headerItem.jp-id-modified\\n    > .jp-DirListing-headerItemText-large {\\n    display: inline;\\n  }\\n}\\n\\n/* stylelint-disable */\\n@container (max-width: 100px) {\\n  /* stylelint-enable */\\n  .jp-DirListing-headerItem.jp-id-filesize\\n    > .jp-DirListing-headerItemText-small {\\n    display: inline;\\n  }\\n\\n  .jp-DirListing-headerItem.jp-id-filesize\\n    > .jp-DirListing-headerItemText-large {\\n    display: none;\\n  }\\n}\\n\\n/* stylelint-disable */\\n@container (min-width: 100px) {\\n  /* stylelint-enable */\\n  .jp-DirListing-headerItem.jp-id-filesize\\n    > .jp-DirListing-headerItemText-small {\\n    display: none;\\n  }\\n\\n  .jp-DirListing-headerItem.jp-id-filesize\\n    > .jp-DirListing-headerItemText-large {\\n    display: inline;\\n  }\\n}\\n\\n.jp-DirListing-headerItem.jp-mod-selected {\\n  font-weight: 600;\\n}\\n\\n/* increase specificity to override bundled default */\\n.jp-DirListing-content {\\n  flex: 1 1 auto;\\n  margin: 0;\\n  padding: 0;\\n  list-style-type: none;\\n  overflow: auto;\\n  background-color: var(--jp-layout-color1);\\n  overflow-x: hidden;\\n}\\n\\n.jp-DirListing-content mark {\\n  color: var(--jp-ui-font-color0);\\n  background-color: transparent;\\n  font-weight: bold;\\n}\\n\\n.jp-DirListing-content .jp-DirListing-item.jp-mod-selected mark {\\n  color: var(--jp-ui-inverse-font-color0);\\n}\\n\\n/* Style the directory listing content when a user drops a file to upload */\\n.jp-DirListing.jp-mod-native-drop .jp-DirListing-content {\\n  outline: 5px dashed rgba(128, 128, 128, 0.5);\\n  outline-offset: -10px;\\n  cursor: copy;\\n}\\n\\n.jp-DirListing-item {\\n  align-items: center;\\n  padding: 4px var(--jp-dirlisting-padding-width);\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n  display: inline-grid;\\n  grid-auto-columns: max-content;\\n  width: 100%;\\n  box-sizing: border-box;\\n  grid-auto-flow: column;\\n}\\n\\n.jp-DirListing-checkboxWrapper {\\n  /* Increases hit area of checkbox. */\\n  padding: 4px;\\n}\\n\\n.jp-DirListing-content .jp-DirListing-checkboxWrapper {\\n  position: relative;\\n  left: -4px;\\n  margin: -4px 0 -4px -8px;\\n}\\n\\n.jp-DirListing-checkboxWrapper.jp-mod-visible {\\n  visibility: visible;\\n}\\n\\n/* For devices that support hovering, hide checkboxes until hovered, selected...\\n*/\\n@media (hover: hover) {\\n  .jp-DirListing-checkboxWrapper {\\n    visibility: hidden;\\n  }\\n\\n  .jp-DirListing-item:hover .jp-DirListing-checkboxWrapper,\\n  .jp-DirListing-item.jp-mod-selected .jp-DirListing-checkboxWrapper {\\n    visibility: visible;\\n  }\\n}\\n\\n.jp-DirListing-resizeHandle {\\n  min-width: var(--jp-border-width);\\n  background: var(--jp-border-color2);\\n  height: calc(100% - 4px);\\n\\n  /* border increases the area where handle can be grabbed */\\n  border: 2px solid var(--jp-layout-color1);\\n}\\n\\n.jp-DirListing-resizeHandle.jp-mod-active {\\n  background: var(--jp-brand-color1);\\n  border-color: var(--jp-brand-color1);\\n}\\n\\n.jp-DirListing-resizeHandle.jp-mod-active:hover {\\n  border-color: var(--jp-brand-color1);\\n}\\n\\n.jp-DirListing-resizeHandle:hover {\\n  cursor: col-resize;\\n  border-color: var(--jp-border-color2);\\n}\\n\\n.jp-DirListing-itemName {\\n  display: flex;\\n}\\n\\n.jp-DirListing-item[data-is-dot] {\\n  opacity: 75%;\\n}\\n\\n.jp-DirListing-item.jp-mod-selected {\\n  color: var(--jp-ui-inverse-font-color1);\\n  background: var(--jp-brand-color1);\\n}\\n\\n.jp-DirListing-item.jp-mod-dropTarget {\\n  background: var(--jp-brand-color3);\\n}\\n\\n.jp-DirListing-item:hover:not(.jp-mod-selected) {\\n  background: var(--jp-layout-color2);\\n}\\n\\n.jp-DirListing-itemIcon {\\n  flex: 0 0 20px;\\n  margin-right: 4px;\\n}\\n\\n.jp-DirListing-itemText,\\n.jp-DirListing-itemModified,\\n.jp-DirListing-itemFileSize {\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n}\\n\\n.jp-DirListing-itemName:not([style*='width']) > .jp-DirListing-itemText {\\n  flex: 1 1 106px;\\n}\\n\\n.jp-DirListing-item:has(.jp-DirListing-itemText:focus-visible) {\\n  /* Targeting `.jp-DirListing-itemText` specifically to avoid an extra outline\\n  when it gets replaced with `jp-DirListing-editor` when editing the file name */\\n  outline-width: 2px;\\n  outline-color: var(--jp-inverse-layout-color1);\\n  outline-style: solid;\\n  outline-offset: -4px;\\n}\\n\\n.jp-DirListing-item.jp-mod-selected:focus-within {\\n  outline-color: var(--jp-layout-color1);\\n}\\n\\n.jp-DirListing-item > .jp-DirListing-itemName > .jp-DirListing-itemText:focus {\\n  outline: 0;\\n}\\n\\n.jp-DirListing-itemModified {\\n  text-align: right;\\n}\\n\\n.jp-DirListing-itemFileSize {\\n  text-align: right;\\n}\\n\\n.jp-DirListing-editor {\\n  flex: 1 0 64px;\\n  outline: none;\\n  border: none;\\n  color: var(--jp-ui-font-color1);\\n  background-color: var(--jp-layout-color1);\\n}\\n\\n.jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon::before {\\n  color: var(--jp-success-color1);\\n  content: '\\\\25CF';\\n  font-size: 8px;\\n  position: absolute;\\n  left: -8px;\\n}\\n\\n.jp-DirListing-item.jp-mod-running.jp-mod-selected\\n  .jp-DirListing-itemIcon::before {\\n  color: var(--jp-ui-inverse-font-color1);\\n}\\n\\n.jp-DirListing-item.lm-mod-drag-image,\\n.jp-DirListing-item.jp-mod-selected.lm-mod-drag-image {\\n  font-size: var(--jp-ui-font-size1);\\n  padding-left: 4px;\\n  margin-left: 4px;\\n  width: 160px;\\n  background-color: var(--jp-ui-inverse-font-color2);\\n  box-shadow: var(--jp-elevation-z2);\\n  border-radius: 0;\\n  color: var(--jp-ui-font-color1);\\n  transform: translateX(-40%) translateY(-58%);\\n}\\n\\n.jp-Document {\\n  min-width: 120px;\\n  min-height: 120px;\\n  outline: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Presentation Mode (.jp-mod-presentationMode)\n|----------------------------------------------------------------------------*/\n\n.jp-mod-presentationMode .jp-FileEditor {\n  --jp-code-font-size: var(--jp-code-presentation-font-size);\n}\n\n.jp-FileEditorCodeWrapper {\n  overflow: auto;\n}\n\n.jp-FileEditorCodeWrapper .cm-editor {\n  height: 100%;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/fileeditor/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E;EACE,0DAA0D;AAC5D;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,YAAY;AACd\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Presentation Mode (.jp-mod-presentationMode)\\n|----------------------------------------------------------------------------*/\\n\\n.jp-mod-presentationMode .jp-FileEditor {\\n  --jp-code-font-size: var(--jp-code-presentation-font-size);\\n}\\n\\n.jp-FileEditorCodeWrapper {\\n  overflow: auto;\\n}\\n\\n.jp-FileEditorCodeWrapper .cm-editor {\\n  height: 100%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-Help {\n  min-width: 240px;\n  min-height: 240px;\n  background: var(--jp-layout-color0);\n  outline: none;\n}\n\n.jp-Help > iframe {\n  border: none;\n\n  /* Forcing white color to avoid contrast issues see issue #11320 */\n  background: white;\n}\n\n.jp-About-body {\n  display: flex;\n  font-size: var(--jp-ui-font-size1);\n  color: var(--jp-ui-font-color1);\n  text-align: left;\n  flex-direction: column;\n  width: 100%;\n  min-width: 360px;\n  overflow: visible;\n}\n\n.jp-About-version-info {\n  color: var(--jp-ui-font-color1);\n\n  /* Dialog-header sets the font size to 3, we reset to 1 */\n  font-size: var(--jp-ui-font-size1);\n  width: 200px;\n  font-weight: 400;\n  letter-spacing: 0.4px;\n  text-align: left;\n  line-height: 1.12;\n}\n\n.jp-About-version {\n  display: block;\n  padding-top: 8px;\n}\n\n.jp-About-externalLinks {\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-start;\n  align-items: flex-start;\n  padding-top: 12px;\n}\n\n.jp-About-externalLinks > .jp-Button-flat {\n  text-decoration: none;\n}\n\n.jp-About-externalLinks > .jp-Button-flat:hover {\n  color: var(--jp-content-link-color);\n  text-decoration: underline;\n}\n\n.jp-About-copyright {\n  padding-top: 25px;\n}\n\n.jp-About-header {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n}\n\n.jp-About-body pre {\n  white-space: pre-wrap;\n}\n\n.jp-About-header-info {\n  display: flex;\n  flex-direction: column;\n  margin-left: 16px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/help-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,gBAAgB;EAChB,iBAAiB;EACjB,mCAAmC;EACnC,aAAa;AACf;;AAEA;EACE,YAAY;;EAEZ,kEAAkE;EAClE,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,kCAAkC;EAClC,+BAA+B;EAC/B,gBAAgB;EAChB,sBAAsB;EACtB,WAAW;EACX,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,+BAA+B;;EAE/B,yDAAyD;EACzD,kCAAkC;EAClC,YAAY;EACZ,gBAAgB;EAChB,qBAAqB;EACrB,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,2BAA2B;EAC3B,uBAAuB;EACvB,iBAAiB;AACnB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,mCAAmC;EACnC,0BAA0B;AAC5B;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,iBAAiB;AACnB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Help {\\n  min-width: 240px;\\n  min-height: 240px;\\n  background: var(--jp-layout-color0);\\n  outline: none;\\n}\\n\\n.jp-Help > iframe {\\n  border: none;\\n\\n  /* Forcing white color to avoid contrast issues see issue #11320 */\\n  background: white;\\n}\\n\\n.jp-About-body {\\n  display: flex;\\n  font-size: var(--jp-ui-font-size1);\\n  color: var(--jp-ui-font-color1);\\n  text-align: left;\\n  flex-direction: column;\\n  width: 100%;\\n  min-width: 360px;\\n  overflow: visible;\\n}\\n\\n.jp-About-version-info {\\n  color: var(--jp-ui-font-color1);\\n\\n  /* Dialog-header sets the font size to 3, we reset to 1 */\\n  font-size: var(--jp-ui-font-size1);\\n  width: 200px;\\n  font-weight: 400;\\n  letter-spacing: 0.4px;\\n  text-align: left;\\n  line-height: 1.12;\\n}\\n\\n.jp-About-version {\\n  display: block;\\n  padding-top: 8px;\\n}\\n\\n.jp-About-externalLinks {\\n  display: flex;\\n  flex-direction: column;\\n  justify-content: flex-start;\\n  align-items: flex-start;\\n  padding-top: 12px;\\n}\\n\\n.jp-About-externalLinks > .jp-Button-flat {\\n  text-decoration: none;\\n}\\n\\n.jp-About-externalLinks > .jp-Button-flat:hover {\\n  color: var(--jp-content-link-color);\\n  text-decoration: underline;\\n}\\n\\n.jp-About-copyright {\\n  padding-top: 25px;\\n}\\n\\n.jp-About-header {\\n  display: flex;\\n  flex-direction: row;\\n  align-items: center;\\n}\\n\\n.jp-About-body pre {\\n  white-space: pre-wrap;\\n}\\n\\n.jp-About-header-info {\\n  display: flex;\\n  flex-direction: column;\\n  margin-left: 16px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* Document styles */\n.jp-HTMLViewer {\n  overflow: hidden;\n  min-width: 100px;\n  min-height: 100px;\n  width: 100%;\n  height: 100%;\n}\n\n.jp-HTMLViewer > iframe {\n  border: none;\n}\n\n/*\nWhen drag events occur, \\`lm-mod-override-cursor\\` is added to the body.\nBecause iframes steal all cursor events, the following two rules are necessary\nto suppress pointer events while resize drags are occurring. There may be a\nbetter solution to this problem.\n*/\nbody.lm-mod-override-cursor .jp-HTMLViewer {\n  position: relative;\n}\n\nbody.lm-mod-override-cursor .jp-HTMLViewer::before {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: transparent;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/htmlviewer/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E,oBAAoB;AACpB;EACE,gBAAgB;EAChB,gBAAgB;EAChB,iBAAiB;EACjB,WAAW;EACX,YAAY;AACd;;AAEA;EACE,YAAY;AACd;;AAEA;;;;;CAKC;AACD;EACE,kBAAkB;AACpB;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,uBAAuB;AACzB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/* Document styles */\\n.jp-HTMLViewer {\\n  overflow: hidden;\\n  min-width: 100px;\\n  min-height: 100px;\\n  width: 100%;\\n  height: 100%;\\n}\\n\\n.jp-HTMLViewer > iframe {\\n  border: none;\\n}\\n\\n/*\\nWhen drag events occur, `lm-mod-override-cursor` is added to the body.\\nBecause iframes steal all cursor events, the following two rules are necessary\\nto suppress pointer events while resize drags are occurring. There may be a\\nbetter solution to this problem.\\n*/\\nbody.lm-mod-override-cursor .jp-HTMLViewer {\\n  position: relative;\\n}\\n\\nbody.lm-mod-override-cursor .jp-HTMLViewer::before {\\n  content: '';\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  right: 0;\\n  bottom: 0;\\n  background: transparent;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-ImageViewer {\n  overflow: auto;\n}\n\n.jp-ImageViewer > img {\n  box-sizing: border-box;\n  transform-origin: top left;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/imageviewer/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,0BAA0B;AAC5B\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-ImageViewer {\\n  overflow: auto;\\n}\\n\\n.jp-ImageViewer > img {\\n  box-sizing: border-box;\\n  transform-origin: top left;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Variables\n|----------------------------------------------------------------------------*/\n\n:root {\n  --jp-private-inspector-tab-height: 24px;\n  --jp-private-inspector-tab-width: 60px;\n}\n\n/*-----------------------------------------------------------------------------\n| Inspector\n|----------------------------------------------------------------------------*/\n\n.jp-Inspector {\n  outline: none;\n  min-width: 120px;\n  min-height: 120px;\n}\n\n.jp-Inspector-content {\n  background: var(--jp-layout-color1);\n  border: none;\n  padding: 8px;\n  width: 100%;\n  height: 100%;\n  overflow: auto;\n}\n\n.jp-ThemedContainer .jp-Inspector-content pre {\n  font-size: var(--jp-code-font-size);\n  line-height: var(--jp-code-line-height);\n  margin: 0;\n  white-space: pre-wrap;\n}\n\n.jp-Inspector-placeholderContent {\n  text-align: center;\n  color: var(--jp-content-font-color2);\n}\n\n.jp-Inspector-placeholderContent > h3 {\n  margin-bottom: var(--jp-content-heading-margin-bottom);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/inspector/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E;EACE,uCAAuC;EACvC,sCAAsC;AACxC;;AAEA;;8EAE8E;;AAE9E;EACE,aAAa;EACb,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,mCAAmC;EACnC,YAAY;EACZ,YAAY;EACZ,WAAW;EACX,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,mCAAmC;EACnC,uCAAuC;EACvC,SAAS;EACT,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;EAClB,oCAAoC;AACtC;;AAEA;EACE,sDAAsD;AACxD\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Variables\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  --jp-private-inspector-tab-height: 24px;\\n  --jp-private-inspector-tab-width: 60px;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Inspector\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Inspector {\\n  outline: none;\\n  min-width: 120px;\\n  min-height: 120px;\\n}\\n\\n.jp-Inspector-content {\\n  background: var(--jp-layout-color1);\\n  border: none;\\n  padding: 8px;\\n  width: 100%;\\n  height: 100%;\\n  overflow: auto;\\n}\\n\\n.jp-ThemedContainer .jp-Inspector-content pre {\\n  font-size: var(--jp-code-font-size);\\n  line-height: var(--jp-code-line-height);\\n  margin: 0;\\n  white-space: pre-wrap;\\n}\\n\\n.jp-Inspector-placeholderContent {\\n  text-align: center;\\n  color: var(--jp-content-font-color2);\\n}\\n\\n.jp-Inspector-placeholderContent > h3 {\\n  margin-bottom: var(--jp-content-heading-margin-bottom);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* Copyright (c) Jupyter Development Team.\nDistributed under the terms of the Modified BSD License. */\n\n.jp-RenderedJavaScript {\n  padding: var(--jp-code-padding);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/javascript-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;0DAC0D;;AAE1D;EACE,+BAA+B;AACjC\",\"sourcesContent\":[\"/* Copyright (c) Jupyter Development Team.\\nDistributed under the terms of the Modified BSD License. */\\n\\n.jp-RenderedJavaScript {\\n  padding: var(--jp-code-padding);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/**\n  Copyright (c) Jupyter Development Team.\n  Distributed under the terms of the Modified BSD License.\n*/\n\n/* Base styles */\n.jp-RenderedJSON {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  overflow: hidden;\n}\n\n/* Override react-json-tree inline styles */\n.jp-RenderedJSON *:not(mark) {\n  background-color: transparent !important;\n}\n\n.jp-RenderedJSON ul {\n  margin: 0 !important;\n}\n\n.jp-RenderedJSON .container {\n  position: relative;\n  width: 100%;\n  min-height: 30px;\n}\n\n.jp-RenderedJSON .filter {\n  position: absolute;\n  top: 0;\n  right: 0;\n  width: 33%;\n  max-width: 150px;\n  z-index: 10;\n}\n\n/* Document styles */\n.jp-MimeDocument .jp-RenderedJSON {\n  padding: 5px 5px 5px 20px;\n  overflow-y: auto;\n}\n\n.jp-RenderedJSON mark.jp-mod-selected {\n  background-color: var(--jp-search-unselected-match-background-color);\n  color: var(--jp-search-unselected-match-color);\n}\n\n/* Output styles */\n\n/* .jp-OutputArea .jp-RenderedJSON {\n\n} */\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/json-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;CAGC;;AAED,gBAAgB;AAChB;EACE,WAAW;EACX,YAAY;EACZ,UAAU;EACV,gBAAgB;AAClB;;AAEA,2CAA2C;AAC3C;EACE,wCAAwC;AAC1C;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,UAAU;EACV,gBAAgB;EAChB,WAAW;AACb;;AAEA,oBAAoB;AACpB;EACE,yBAAyB;EACzB,gBAAgB;AAClB;;AAEA;EACE,oEAAoE;EACpE,8CAA8C;AAChD;;AAEA,kBAAkB;;AAElB;;GAEG\",\"sourcesContent\":[\"/**\\n  Copyright (c) Jupyter Development Team.\\n  Distributed under the terms of the Modified BSD License.\\n*/\\n\\n/* Base styles */\\n.jp-RenderedJSON {\\n  width: 100%;\\n  height: 100%;\\n  padding: 0;\\n  overflow: hidden;\\n}\\n\\n/* Override react-json-tree inline styles */\\n.jp-RenderedJSON *:not(mark) {\\n  background-color: transparent !important;\\n}\\n\\n.jp-RenderedJSON ul {\\n  margin: 0 !important;\\n}\\n\\n.jp-RenderedJSON .container {\\n  position: relative;\\n  width: 100%;\\n  min-height: 30px;\\n}\\n\\n.jp-RenderedJSON .filter {\\n  position: absolute;\\n  top: 0;\\n  right: 0;\\n  width: 33%;\\n  max-width: 150px;\\n  z-index: 10;\\n}\\n\\n/* Document styles */\\n.jp-MimeDocument .jp-RenderedJSON {\\n  padding: 5px 5px 5px 20px;\\n  overflow-y: auto;\\n}\\n\\n.jp-RenderedJSON mark.jp-mod-selected {\\n  background-color: var(--jp-search-unselected-match-background-color);\\n  color: var(--jp-search-unselected-match-color);\\n}\\n\\n/* Output styles */\\n\\n/* .jp-OutputArea .jp-RenderedJSON {\\n\\n} */\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* Private CSS variables */\n\n:root {\n  --jp-private-launcher-top-padding: 1.231em;\n  --jp-private-launcher-side-padding: 2.462em;\n  --jp-private-launcher-card-size: 7.692em;\n  --jp-private-launcher-card-label-height: 2.462em;\n  --jp-private-launcher-card-icon-height: 5.231em;\n  --jp-private-launcher-large-icon-size: 4em;\n  --jp-private-launcher-small-icon-size: 2.462em;\n}\n\n/* Launcher */\n\n.jp-Launcher {\n  margin: 0;\n  padding: 0;\n  outline: none;\n  background: var(--jp-layout-color0);\n  box-sizing: border-box;\n  min-width: 120px;\n  min-height: 120px;\n\n  /* This is needed so that all font sizing of children done in ems is\n   * relative to this base size */\n  font-size: var(--jp-ui-font-size1);\n}\n\n.jp-Launcher-body {\n  width: 100%;\n  height: 100%;\n  box-sizing: border-box;\n  overflow: auto;\n  display: flex;\n  justify-content: center;\n}\n\n.jp-Launcher-cwd h3 {\n  font-size: var(--jp-ui-font-size2);\n  font-weight: normal;\n  color: var(--jp-ui-font-color1);\n  margin: 1em 0;\n}\n\n.jp-Launcher-content {\n  width: 85%;\n  height: 100%;\n  padding-top: var(--jp-private-launcher-top-padding);\n  padding-left: var(--jp-private-launcher-side-padding);\n  padding-right: var(--jp-private-launcher-side-padding);\n  box-sizing: border-box;\n}\n\n/* Launcher section */\n\n.jp-Launcher-section {\n  width: 100%;\n  box-sizing: border-box;\n  padding-bottom: 12px;\n}\n\n.jp-Launcher-sectionHeader {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  box-sizing: border-box;\n\n  /* This is custom tuned to get the section header to align with the cards */\n  margin-left: 5px;\n  border-bottom: 1px solid var(--jp-border-color2);\n  padding-bottom: 0;\n  margin-bottom: 8px;\n}\n\n.jp-Launcher-sectionTitle {\n  font-size: var(--jp-ui-font-size2);\n  font-weight: normal;\n  color: var(--jp-ui-font-color0);\n  box-sizing: border-box;\n}\n\n/* Launcher cards */\n\n.jp-Launcher-cardContainer {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n}\n\n.jp-LauncherCard {\n  display: flex;\n  flex-direction: column;\n  cursor: pointer;\n  width: var(--jp-private-launcher-card-size);\n  min-height: var(--jp-private-launcher-card-size);\n  margin: 8px;\n  padding: 0;\n  border: 1px solid var(--jp-border-color2);\n  background: var(--jp-layout-color0);\n  box-shadow: var(--jp-elevation-z2);\n  transition: 0.2s box-shadow;\n  border-radius: var(--jp-border-radius);\n}\n\n.jp-LauncherCard:focus:not(:active) {\n  border: 1px solid var(--jp-brand-color1);\n  box-shadow: var(--jp-elevation-z6);\n  outline: unset; /* if outline is not unset, then depending on which browser you use, the\n    border change is either hidden behind the outline or visually combined with it */\n}\n\n.jp-LauncherCard:hover {\n  box-shadow: var(--jp-elevation-z6);\n  background: var(--jp-layout-color1);\n}\n\n.jp-LauncherCard:active {\n  box-shadow: var(--jp-elevation-z4);\n}\n\n.jp-LauncherCard-icon {\n  width: 100%;\n  height: var(--jp-private-launcher-card-icon-height);\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n.jp-LauncherCard-noKernelIcon {\n  font-weight: normal;\n  font-size: var(--jp-private-launcher-large-icon-size);\n}\n\n.jp-LauncherCard[data-category='Notebook'] .jp-LauncherCard-noKernelIcon {\n  /* This color is copied from the notebook icon. */\n  color: var(--jp-jupyter-icon-color);\n}\n\n.jp-LauncherCard[data-category='Console'] .jp-LauncherCard-noKernelIcon {\n  /* This color is copied from the console icon. */\n  color: #0288d1;\n}\n\n.jp-LauncherCard-label {\n  width: 100%;\n  min-height: var(--jp-private-launcher-card-label-height);\n  padding: 0 4px 4px;\n  box-sizing: border-box;\n  overflow: hidden;\n}\n\n.jp-LauncherCard-label p {\n  min-height: 2.154em;\n  word-break: break-word;\n  text-align: center;\n  color: var(--jp-ui-font-color1);\n  line-height: 1.077em;\n  font-size: calc(var(--jp-ui-font-size1) * 0.923);\n  overflow: hidden;\n  margin: auto;\n}\n\n/* kernel icons */\n\n.jp-Launcher-kernelIcon {\n  width: var(--jp-private-launcher-large-icon-size);\n  height: var(--jp-private-launcher-large-icon-size);\n  margin: 0;\n  padding: 0;\n\n  /* Preserve image aspect ratio */\n  object-fit: contain;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/launcher/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E,0BAA0B;;AAE1B;EACE,0CAA0C;EAC1C,2CAA2C;EAC3C,wCAAwC;EACxC,gDAAgD;EAChD,+CAA+C;EAC/C,0CAA0C;EAC1C,8CAA8C;AAChD;;AAEA,aAAa;;AAEb;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,mCAAmC;EACnC,sBAAsB;EACtB,gBAAgB;EAChB,iBAAiB;;EAEjB;iCAC+B;EAC/B,kCAAkC;AACpC;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,sBAAsB;EACtB,cAAc;EACd,aAAa;EACb,uBAAuB;AACzB;;AAEA;EACE,kCAAkC;EAClC,mBAAmB;EACnB,+BAA+B;EAC/B,aAAa;AACf;;AAEA;EACE,UAAU;EACV,YAAY;EACZ,mDAAmD;EACnD,qDAAqD;EACrD,sDAAsD;EACtD,sBAAsB;AACxB;;AAEA,qBAAqB;;AAErB;EACE,WAAW;EACX,sBAAsB;EACtB,oBAAoB;AACtB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,sBAAsB;;EAEtB,2EAA2E;EAC3E,gBAAgB;EAChB,gDAAgD;EAChD,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,kCAAkC;EAClC,mBAAmB;EACnB,+BAA+B;EAC/B,sBAAsB;AACxB;;AAEA,mBAAmB;;AAEnB;EACE,SAAS;EACT,UAAU;EACV,sBAAsB;EACtB,aAAa;EACb,mBAAmB;EACnB,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,eAAe;EACf,2CAA2C;EAC3C,gDAAgD;EAChD,WAAW;EACX,UAAU;EACV,yCAAyC;EACzC,mCAAmC;EACnC,kCAAkC;EAClC,2BAA2B;EAC3B,sCAAsC;AACxC;;AAEA;EACE,wCAAwC;EACxC,kCAAkC;EAClC,cAAc,EAAE;oFACkE;AACpF;;AAEA;EACE,kCAAkC;EAClC,mCAAmC;AACrC;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,WAAW;EACX,mDAAmD;EACnD,sBAAsB;EACtB,SAAS;EACT,UAAU;EACV,aAAa;EACb,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;EACnB,qDAAqD;AACvD;;AAEA;EACE,iDAAiD;EACjD,mCAAmC;AACrC;;AAEA;EACE,gDAAgD;EAChD,cAAc;AAChB;;AAEA;EACE,WAAW;EACX,wDAAwD;EACxD,kBAAkB;EAClB,sBAAsB;EACtB,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;EACnB,sBAAsB;EACtB,kBAAkB;EAClB,+BAA+B;EAC/B,oBAAoB;EACpB,gDAAgD;EAChD,gBAAgB;EAChB,YAAY;AACd;;AAEA,iBAAiB;;AAEjB;EACE,iDAAiD;EACjD,kDAAkD;EAClD,SAAS;EACT,UAAU;;EAEV,gCAAgC;EAChC,mBAAmB;AACrB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/* Private CSS variables */\\n\\n:root {\\n  --jp-private-launcher-top-padding: 1.231em;\\n  --jp-private-launcher-side-padding: 2.462em;\\n  --jp-private-launcher-card-size: 7.692em;\\n  --jp-private-launcher-card-label-height: 2.462em;\\n  --jp-private-launcher-card-icon-height: 5.231em;\\n  --jp-private-launcher-large-icon-size: 4em;\\n  --jp-private-launcher-small-icon-size: 2.462em;\\n}\\n\\n/* Launcher */\\n\\n.jp-Launcher {\\n  margin: 0;\\n  padding: 0;\\n  outline: none;\\n  background: var(--jp-layout-color0);\\n  box-sizing: border-box;\\n  min-width: 120px;\\n  min-height: 120px;\\n\\n  /* This is needed so that all font sizing of children done in ems is\\n   * relative to this base size */\\n  font-size: var(--jp-ui-font-size1);\\n}\\n\\n.jp-Launcher-body {\\n  width: 100%;\\n  height: 100%;\\n  box-sizing: border-box;\\n  overflow: auto;\\n  display: flex;\\n  justify-content: center;\\n}\\n\\n.jp-Launcher-cwd h3 {\\n  font-size: var(--jp-ui-font-size2);\\n  font-weight: normal;\\n  color: var(--jp-ui-font-color1);\\n  margin: 1em 0;\\n}\\n\\n.jp-Launcher-content {\\n  width: 85%;\\n  height: 100%;\\n  padding-top: var(--jp-private-launcher-top-padding);\\n  padding-left: var(--jp-private-launcher-side-padding);\\n  padding-right: var(--jp-private-launcher-side-padding);\\n  box-sizing: border-box;\\n}\\n\\n/* Launcher section */\\n\\n.jp-Launcher-section {\\n  width: 100%;\\n  box-sizing: border-box;\\n  padding-bottom: 12px;\\n}\\n\\n.jp-Launcher-sectionHeader {\\n  display: flex;\\n  flex-direction: row;\\n  align-items: center;\\n  box-sizing: border-box;\\n\\n  /* This is custom tuned to get the section header to align with the cards */\\n  margin-left: 5px;\\n  border-bottom: 1px solid var(--jp-border-color2);\\n  padding-bottom: 0;\\n  margin-bottom: 8px;\\n}\\n\\n.jp-Launcher-sectionTitle {\\n  font-size: var(--jp-ui-font-size2);\\n  font-weight: normal;\\n  color: var(--jp-ui-font-color0);\\n  box-sizing: border-box;\\n}\\n\\n/* Launcher cards */\\n\\n.jp-Launcher-cardContainer {\\n  margin: 0;\\n  padding: 0;\\n  box-sizing: border-box;\\n  display: flex;\\n  flex-direction: row;\\n  flex-wrap: wrap;\\n}\\n\\n.jp-LauncherCard {\\n  display: flex;\\n  flex-direction: column;\\n  cursor: pointer;\\n  width: var(--jp-private-launcher-card-size);\\n  min-height: var(--jp-private-launcher-card-size);\\n  margin: 8px;\\n  padding: 0;\\n  border: 1px solid var(--jp-border-color2);\\n  background: var(--jp-layout-color0);\\n  box-shadow: var(--jp-elevation-z2);\\n  transition: 0.2s box-shadow;\\n  border-radius: var(--jp-border-radius);\\n}\\n\\n.jp-LauncherCard:focus:not(:active) {\\n  border: 1px solid var(--jp-brand-color1);\\n  box-shadow: var(--jp-elevation-z6);\\n  outline: unset; /* if outline is not unset, then depending on which browser you use, the\\n    border change is either hidden behind the outline or visually combined with it */\\n}\\n\\n.jp-LauncherCard:hover {\\n  box-shadow: var(--jp-elevation-z6);\\n  background: var(--jp-layout-color1);\\n}\\n\\n.jp-LauncherCard:active {\\n  box-shadow: var(--jp-elevation-z4);\\n}\\n\\n.jp-LauncherCard-icon {\\n  width: 100%;\\n  height: var(--jp-private-launcher-card-icon-height);\\n  box-sizing: border-box;\\n  margin: 0;\\n  padding: 0;\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n}\\n\\n.jp-LauncherCard-noKernelIcon {\\n  font-weight: normal;\\n  font-size: var(--jp-private-launcher-large-icon-size);\\n}\\n\\n.jp-LauncherCard[data-category='Notebook'] .jp-LauncherCard-noKernelIcon {\\n  /* This color is copied from the notebook icon. */\\n  color: var(--jp-jupyter-icon-color);\\n}\\n\\n.jp-LauncherCard[data-category='Console'] .jp-LauncherCard-noKernelIcon {\\n  /* This color is copied from the console icon. */\\n  color: #0288d1;\\n}\\n\\n.jp-LauncherCard-label {\\n  width: 100%;\\n  min-height: var(--jp-private-launcher-card-label-height);\\n  padding: 0 4px 4px;\\n  box-sizing: border-box;\\n  overflow: hidden;\\n}\\n\\n.jp-LauncherCard-label p {\\n  min-height: 2.154em;\\n  word-break: break-word;\\n  text-align: center;\\n  color: var(--jp-ui-font-color1);\\n  line-height: 1.077em;\\n  font-size: calc(var(--jp-ui-font-size1) * 0.923);\\n  overflow: hidden;\\n  margin: auto;\\n}\\n\\n/* kernel icons */\\n\\n.jp-Launcher-kernelIcon {\\n  width: var(--jp-private-launcher-large-icon-size);\\n  height: var(--jp-private-launcher-large-icon-size);\\n  margin: 0;\\n  padding: 0;\\n\\n  /* Preserve image aspect ratio */\\n  object-fit: contain;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n@keyframes flash {\n  0% {\n    background-color: var(--jp-brand-color1);\n  }\n\n  50% {\n    color: unset;\n    background-color: unset;\n  }\n\n  100% {\n    background-color: var(--jp-brand-color1);\n  }\n}\n\n.jp-LogConsoleStatusItem.jp-LogConsole-flash {\n  animation: flash 300ms both;\n}\n\n.jp-LogConsoleStatusItem.jp-mod-selected {\n  background-color: var(--jp-brand-color1);\n}\n\n/* Override semi-transparent white with opaque white for higher contrast */\n.jp-LogConsoleStatusItem.jp-mod-selected,\n.jp-LogConsoleStatusItem.jp-mod-selected .jp-StatusBar-TextItem {\n  color: white;\n}\n\n.jp-LogConsole .jp-ClearIcon {\n  transform: rotate(90deg);\n  margin-top: -1px;\n  padding: 0 8px;\n}\n\n.jp-Toolbar-item.jp-LogConsole-toolbarLogLevel {\n  align-items: center;\n  padding: 0 6px;\n}\n\n/* Matches the disabled style elsewhere in JupyterLab */\n.jp-LogConsole-toolbarLogLevel-disabled {\n  opacity: 0.4;\n  cursor: not-allowed;\n}\n\n/* Copied from the notebook cell type dropdown styling */\n.jp-LogConsole-toolbarLogLevelDropdown select {\n  height: 24px;\n  font-size: var(--jp-ui-font-size1);\n  line-height: 14px;\n  border-radius: 0;\n  display: block;\n}\n\n/* Copied from the notebook cell type dropdown styling */\n.jp-LogConsole-toolbarLogLevelDropdown span {\n  top: 5px !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/logconsole-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE;IACE,wCAAwC;EAC1C;;EAEA;IACE,YAAY;IACZ,uBAAuB;EACzB;;EAEA;IACE,wCAAwC;EAC1C;AACF;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,wCAAwC;AAC1C;;AAEA,0EAA0E;AAC1E;;EAEE,YAAY;AACd;;AAEA;EACE,wBAAwB;EACxB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,mBAAmB;EACnB,cAAc;AAChB;;AAEA,uDAAuD;AACvD;EACE,YAAY;EACZ,mBAAmB;AACrB;;AAEA,wDAAwD;AACxD;EACE,YAAY;EACZ,kCAAkC;EAClC,iBAAiB;EACjB,gBAAgB;EAChB,cAAc;AAChB;;AAEA,wDAAwD;AACxD;EACE,mBAAmB;AACrB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n@keyframes flash {\\n  0% {\\n    background-color: var(--jp-brand-color1);\\n  }\\n\\n  50% {\\n    color: unset;\\n    background-color: unset;\\n  }\\n\\n  100% {\\n    background-color: var(--jp-brand-color1);\\n  }\\n}\\n\\n.jp-LogConsoleStatusItem.jp-LogConsole-flash {\\n  animation: flash 300ms both;\\n}\\n\\n.jp-LogConsoleStatusItem.jp-mod-selected {\\n  background-color: var(--jp-brand-color1);\\n}\\n\\n/* Override semi-transparent white with opaque white for higher contrast */\\n.jp-LogConsoleStatusItem.jp-mod-selected,\\n.jp-LogConsoleStatusItem.jp-mod-selected .jp-StatusBar-TextItem {\\n  color: white;\\n}\\n\\n.jp-LogConsole .jp-ClearIcon {\\n  transform: rotate(90deg);\\n  margin-top: -1px;\\n  padding: 0 8px;\\n}\\n\\n.jp-Toolbar-item.jp-LogConsole-toolbarLogLevel {\\n  align-items: center;\\n  padding: 0 6px;\\n}\\n\\n/* Matches the disabled style elsewhere in JupyterLab */\\n.jp-LogConsole-toolbarLogLevel-disabled {\\n  opacity: 0.4;\\n  cursor: not-allowed;\\n}\\n\\n/* Copied from the notebook cell type dropdown styling */\\n.jp-LogConsole-toolbarLogLevelDropdown select {\\n  height: 24px;\\n  font-size: var(--jp-ui-font-size1);\\n  line-height: 14px;\\n  border-radius: 0;\\n  display: block;\\n}\\n\\n/* Copied from the notebook cell type dropdown styling */\\n.jp-LogConsole-toolbarLogLevelDropdown span {\\n  top: 5px !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-LogConsolePanel {\n  overflow-y: auto;\n}\n\n.jp-LogConsolePanel .jp-OutputArea-child {\n  border-bottom: 1px solid var(--jp-border-color3);\n}\n\n.jp-LogConsolePanel .jp-OutputArea-prompt {\n  width: 85px;\n  color: var(--jp-ui-font-color2);\n  font-size: 13px;\n  padding: 2px;\n}\n\n.jp-LogConsolePanel .jp-OutputArea-prompt[data-log-level='info'] {\n  background-color: var(--jp-info-color1);\n  color: var(--jp-ui-inverse-font-color1);\n}\n\n.jp-LogConsolePanel .jp-OutputArea-prompt[data-log-level='warning'] {\n  background-color: var(--jp-warn-color1);\n  color: var(--jp-ui-inverse-font-color1);\n}\n\n.jp-LogConsolePanel .jp-OutputArea-prompt[data-log-level='error'] {\n  background-color: var(--jp-error-color1);\n  color: var(--jp-ui-inverse-font-color1);\n}\n\n.jp-LogConsolePanel .jp-OutputArea-prompt[data-log-level='critical'] {\n  background-color: var(--jp-error-color0);\n  color: var(--jp-ui-inverse-font-color0);\n}\n\n.jp-LogConsoleListPlaceholder {\n  padding: 5px;\n  font-size: 13px;\n  color: var(--jp-ui-font-color3);\n}\n\n.jp-Scrolling {\n  overflow-y: auto;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/logconsole/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,gBAAgB;AAClB;;AAEA;EACE,gDAAgD;AAClD;;AAEA;EACE,WAAW;EACX,+BAA+B;EAC/B,eAAe;EACf,YAAY;AACd;;AAEA;EACE,uCAAuC;EACvC,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;EACvC,uCAAuC;AACzC;;AAEA;EACE,wCAAwC;EACxC,uCAAuC;AACzC;;AAEA;EACE,wCAAwC;EACxC,uCAAuC;AACzC;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,+BAA+B;AACjC;;AAEA;EACE,gBAAgB;AAClB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-LogConsolePanel {\\n  overflow-y: auto;\\n}\\n\\n.jp-LogConsolePanel .jp-OutputArea-child {\\n  border-bottom: 1px solid var(--jp-border-color3);\\n}\\n\\n.jp-LogConsolePanel .jp-OutputArea-prompt {\\n  width: 85px;\\n  color: var(--jp-ui-font-color2);\\n  font-size: 13px;\\n  padding: 2px;\\n}\\n\\n.jp-LogConsolePanel .jp-OutputArea-prompt[data-log-level='info'] {\\n  background-color: var(--jp-info-color1);\\n  color: var(--jp-ui-inverse-font-color1);\\n}\\n\\n.jp-LogConsolePanel .jp-OutputArea-prompt[data-log-level='warning'] {\\n  background-color: var(--jp-warn-color1);\\n  color: var(--jp-ui-inverse-font-color1);\\n}\\n\\n.jp-LogConsolePanel .jp-OutputArea-prompt[data-log-level='error'] {\\n  background-color: var(--jp-error-color1);\\n  color: var(--jp-ui-inverse-font-color1);\\n}\\n\\n.jp-LogConsolePanel .jp-OutputArea-prompt[data-log-level='critical'] {\\n  background-color: var(--jp-error-color0);\\n  color: var(--jp-ui-inverse-font-color0);\\n}\\n\\n.jp-LogConsoleListPlaceholder {\\n  padding: 5px;\\n  font-size: 13px;\\n  color: var(--jp-ui-font-color3);\\n}\\n\\n.jp-Scrolling {\\n  overflow-y: auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-LSPExtension-FormGroup-content > select {\n  margin: 0 12px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/lsp-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,cAAc;AAChB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-LSPExtension-FormGroup-content > select {\\n  margin: 0 12px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n:root {\n  --jp-private-markdownviewer-padding: 32px;\n}\n\n.jp-Document .jp-MarkdownViewer .jp-RenderedMarkdown {\n  padding-top: var(--jp-private-markdownviewer-padding);\n  padding-right: var(--jp-private-markdownviewer-padding);\n  padding-bottom: var(--jp-private-markdownviewer-padding);\n  padding-left: var(--jp-private-markdownviewer-padding);\n  overflow: auto;\n}\n\n/*-----------------------------------------------------------------------------\n| Presentation Mode (.jp-mod-presentationMode)\n|----------------------------------------------------------------------------*/\n\n.jp-mod-presentationMode .jp-MarkdownViewer .jp-RenderedHTMLCommon {\n  --jp-content-font-size1: var(--jp-content-presentation-font-size1);\n  --jp-code-font-size: var(--jp-code-presentation-font-size);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/markdownviewer/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,yCAAyC;AAC3C;;AAEA;EACE,qDAAqD;EACrD,uDAAuD;EACvD,wDAAwD;EACxD,sDAAsD;EACtD,cAAc;AAChB;;AAEA;;8EAE8E;;AAE9E;EACE,kEAAkE;EAClE,0DAA0D;AAC5D\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  --jp-private-markdownviewer-padding: 32px;\\n}\\n\\n.jp-Document .jp-MarkdownViewer .jp-RenderedMarkdown {\\n  padding-top: var(--jp-private-markdownviewer-padding);\\n  padding-right: var(--jp-private-markdownviewer-padding);\\n  padding-bottom: var(--jp-private-markdownviewer-padding);\\n  padding-left: var(--jp-private-markdownviewer-padding);\\n  overflow: auto;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Presentation Mode (.jp-mod-presentationMode)\\n|----------------------------------------------------------------------------*/\\n\\n.jp-mod-presentationMode .jp-MarkdownViewer .jp-RenderedHTMLCommon {\\n  --jp-content-font-size1: var(--jp-content-presentation-font-size1);\\n  --jp-code-font-size: var(--jp-code-presentation-font-size);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/markedparser-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./fonts.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This can be removed after upgrading to MathJax 4, as the issue will be fixed in the new version */\nmjx-assistive-mml {\n  bottom: 0;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/mathjax-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAI9E,oGAAoG;AACpG;EACE,SAAS;AACX\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n@import './fonts.css';\\n\\n/* This can be removed after upgrading to MathJax 4, as the issue will be fixed in the new version */\\nmjx-assistive-mml {\\n  bottom: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Zero.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Main-Regular.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Main-Bold.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_3___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Math-Italic.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_4___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Main-Italic.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_5___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Math-BoldItalic.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_6___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Size1-Regular.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_7___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Size2-Regular.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_8___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Size3-Regular.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_9___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Size4-Regular.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_10___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_AMS-Regular.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_11___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Calligraphic-Regular.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_12___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Calligraphic-Bold.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_13___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Fraktur-Regular.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_14___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Fraktur-Bold.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_15___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_SansSerif-Regular.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_16___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_SansSerif-Bold.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_17___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_SansSerif-Italic.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_18___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Script-Regular.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_19___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Typewriter-Regular.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_20___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Vector-Regular.woff\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_21___ = new URL(\"mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Vector-Bold.woff\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\nvar ___CSS_LOADER_URL_REPLACEMENT_5___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_5___);\nvar ___CSS_LOADER_URL_REPLACEMENT_6___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_6___);\nvar ___CSS_LOADER_URL_REPLACEMENT_7___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_7___);\nvar ___CSS_LOADER_URL_REPLACEMENT_8___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_8___);\nvar ___CSS_LOADER_URL_REPLACEMENT_9___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_9___);\nvar ___CSS_LOADER_URL_REPLACEMENT_10___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_10___);\nvar ___CSS_LOADER_URL_REPLACEMENT_11___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_11___);\nvar ___CSS_LOADER_URL_REPLACEMENT_12___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_12___);\nvar ___CSS_LOADER_URL_REPLACEMENT_13___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_13___);\nvar ___CSS_LOADER_URL_REPLACEMENT_14___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_14___);\nvar ___CSS_LOADER_URL_REPLACEMENT_15___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_15___);\nvar ___CSS_LOADER_URL_REPLACEMENT_16___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_16___);\nvar ___CSS_LOADER_URL_REPLACEMENT_17___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_17___);\nvar ___CSS_LOADER_URL_REPLACEMENT_18___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_18___);\nvar ___CSS_LOADER_URL_REPLACEMENT_19___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_19___);\nvar ___CSS_LOADER_URL_REPLACEMENT_20___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_20___);\nvar ___CSS_LOADER_URL_REPLACEMENT_21___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_21___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n@font-face /* 0 */ {\n  font-display: swap;\n  font-family: MJXZERO;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_0___})\n    format('woff');\n}\n\n@font-face /* 1 */ {\n  font-display: swap;\n  font-family: MJXTEX;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_1___})\n    format('woff');\n}\n\n@font-face /* 2 */ {\n  font-display: swap;\n  font-family: MJXTEX-B;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_2___})\n    format('woff');\n}\n\n@font-face /* 3 */ {\n  font-display: swap;\n  font-family: MJXTEX-I;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_3___})\n    format('woff');\n}\n\n@font-face /* 4 */ {\n  font-display: swap;\n  font-family: MJXTEX-MI;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_4___})\n    format('woff');\n}\n\n@font-face /* 5 */ {\n  font-display: swap;\n  font-family: MJXTEX-BI;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_5___})\n    format('woff');\n}\n\n@font-face /* 6 */ {\n  font-display: swap;\n  font-family: 'MJXTEX-S1';\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_6___})\n    format('woff');\n}\n\n@font-face /* 7 */ {\n  font-display: swap;\n  font-family: 'MJXTEX-S2';\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_7___})\n    format('woff');\n}\n\n@font-face /* 8 */ {\n  font-display: swap;\n  font-family: 'MJXTEX-S3';\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_8___})\n    format('woff');\n}\n\n@font-face /* 9 */ {\n  font-display: swap;\n  font-family: 'MJXTEX-S4';\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_9___})\n    format('woff');\n}\n\n@font-face /* 10 */ {\n  font-display: swap;\n  font-family: MJXTEX-A;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_10___})\n    format('woff');\n}\n\n@font-face /* 11 */ {\n  font-display: swap;\n  font-family: MJXTEX-C;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_11___})\n    format('woff');\n}\n\n@font-face /* 12 */ {\n  font-display: swap;\n  font-family: MJXTEX-CB;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_12___})\n    format('woff');\n}\n\n@font-face /* 13 */ {\n  font-display: swap;\n  font-family: MJXTEX-FR;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_13___})\n    format('woff');\n}\n\n@font-face /* 14 */ {\n  font-display: swap;\n  font-family: MJXTEX-FRB;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_14___})\n    format('woff');\n}\n\n@font-face /* 15 */ {\n  font-display: swap;\n  font-family: MJXTEX-SS;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_15___})\n    format('woff');\n}\n\n@font-face /* 16 */ {\n  font-display: swap;\n  font-family: MJXTEX-SSB;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_16___})\n    format('woff');\n}\n\n@font-face /* 17 */ {\n  font-family: MJXTEX-SSI;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_17___})\n    format('woff');\n}\n\n@font-face /* 18 */ {\n  font-display: swap;\n  font-family: MJXTEX-SC;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_18___})\n    format('woff');\n}\n\n@font-face /* 19 */ {\n  font-display: swap;\n  font-family: MJXTEX-T;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_19___})\n    format('woff');\n}\n\n@font-face /* 20 */ {\n  font-display: swap;\n  font-family: MJXTEX-V;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_20___})\n    format('woff');\n}\n\n@font-face /* 21 */ {\n  font-display: swap;\n  font-family: MJXTEX-VB;\n  src: url(${___CSS_LOADER_URL_REPLACEMENT_21___})\n    format('woff');\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/mathjax-extension/style/fonts.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,oBAAoB;EACpB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,mBAAmB;EACnB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,qBAAqB;EACrB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,qBAAqB;EACrB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,sBAAsB;EACtB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,sBAAsB;EACtB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,wBAAwB;EACxB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,wBAAwB;EACxB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,wBAAwB;EACxB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,wBAAwB;EACxB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,qBAAqB;EACrB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,qBAAqB;EACrB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,sBAAsB;EACtB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,sBAAsB;EACtB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,uBAAuB;EACvB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,sBAAsB;EACtB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,uBAAuB;EACvB;kBACgB;AAClB;;AAEA;EACE,uBAAuB;EACvB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,sBAAsB;EACtB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,qBAAqB;EACrB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,qBAAqB;EACrB;kBACgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,sBAAsB;EACtB;kBACgB;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n@font-face /* 0 */ {\\n  font-display: swap;\\n  font-family: MJXZERO;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Zero.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 1 */ {\\n  font-display: swap;\\n  font-family: MJXTEX;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Main-Regular.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 2 */ {\\n  font-display: swap;\\n  font-family: MJXTEX-B;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Main-Bold.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 3 */ {\\n  font-display: swap;\\n  font-family: MJXTEX-I;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Math-Italic.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 4 */ {\\n  font-display: swap;\\n  font-family: MJXTEX-MI;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Main-Italic.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 5 */ {\\n  font-display: swap;\\n  font-family: MJXTEX-BI;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Math-BoldItalic.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 6 */ {\\n  font-display: swap;\\n  font-family: 'MJXTEX-S1';\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Size1-Regular.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 7 */ {\\n  font-display: swap;\\n  font-family: 'MJXTEX-S2';\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Size2-Regular.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 8 */ {\\n  font-display: swap;\\n  font-family: 'MJXTEX-S3';\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Size3-Regular.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 9 */ {\\n  font-display: swap;\\n  font-family: 'MJXTEX-S4';\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Size4-Regular.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 10 */ {\\n  font-display: swap;\\n  font-family: MJXTEX-A;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_AMS-Regular.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 11 */ {\\n  font-display: swap;\\n  font-family: MJXTEX-C;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Calligraphic-Regular.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 12 */ {\\n  font-display: swap;\\n  font-family: MJXTEX-CB;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Calligraphic-Bold.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 13 */ {\\n  font-display: swap;\\n  font-family: MJXTEX-FR;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Fraktur-Regular.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 14 */ {\\n  font-display: swap;\\n  font-family: MJXTEX-FRB;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Fraktur-Bold.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 15 */ {\\n  font-display: swap;\\n  font-family: MJXTEX-SS;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_SansSerif-Regular.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 16 */ {\\n  font-display: swap;\\n  font-family: MJXTEX-SSB;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_SansSerif-Bold.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 17 */ {\\n  font-family: MJXTEX-SSI;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_SansSerif-Italic.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 18 */ {\\n  font-display: swap;\\n  font-family: MJXTEX-SC;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Script-Regular.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 19 */ {\\n  font-display: swap;\\n  font-family: MJXTEX-T;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Typewriter-Regular.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 20 */ {\\n  font-display: swap;\\n  font-family: MJXTEX-V;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Vector-Regular.woff')\\n    format('woff');\\n}\\n\\n@font-face /* 21 */ {\\n  font-display: swap;\\n  font-family: MJXTEX-VB;\\n  src: url('~mathjax-full/es5/output/chtml/fonts/woff-v2/MathJax_Vector-Bold.woff')\\n    format('woff');\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/mermaid-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n.jp-RenderedMermaid {\n  overflow: auto;\n  display: flex;\n}\n\n.jp-RenderedMermaid.jp-mod-warning {\n  width: auto;\n  padding: 0.5em;\n  margin-top: 0.5em;\n  border: var(--jp-border-width) solid var(--jp-warn-color2);\n  border-radius: var(--jp-border-radius);\n  color: var(--jp-ui-font-color1);\n  font-size: var(--jp-ui-font-size1);\n  white-space: pre-wrap;\n  word-wrap: break-word;\n}\n\n.jp-RenderedMermaid figure {\n  margin: 0;\n  overflow: auto;\n  max-width: 100%;\n}\n\n.jp-RenderedMermaid img {\n  max-width: 100%;\n}\n\n.jp-RenderedMermaid-Details > pre {\n  margin-top: 1em;\n}\n\n.jp-RenderedMermaid-Summary {\n  color: var(--jp-warn-color2);\n}\n\n.jp-RenderedMermaid:not(.jp-mod-warning) pre {\n  display: none;\n}\n\n.jp-RenderedMermaid-Summary > pre {\n  display: inline-block;\n  white-space: normal;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/mermaid/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;AACF;EACE,cAAc;EACd,aAAa;AACf;;AAEA;EACE,WAAW;EACX,cAAc;EACd,iBAAiB;EACjB,0DAA0D;EAC1D,sCAAsC;EACtC,+BAA+B;EAC/B,kCAAkC;EAClC,qBAAqB;EACrB,qBAAqB;AACvB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,eAAe;AACjB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,qBAAqB;EACrB,mBAAmB;AACrB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n.jp-RenderedMermaid {\\n  overflow: auto;\\n  display: flex;\\n}\\n\\n.jp-RenderedMermaid.jp-mod-warning {\\n  width: auto;\\n  padding: 0.5em;\\n  margin-top: 0.5em;\\n  border: var(--jp-border-width) solid var(--jp-warn-color2);\\n  border-radius: var(--jp-border-radius);\\n  color: var(--jp-ui-font-color1);\\n  font-size: var(--jp-ui-font-size1);\\n  white-space: pre-wrap;\\n  word-wrap: break-word;\\n}\\n\\n.jp-RenderedMermaid figure {\\n  margin: 0;\\n  overflow: auto;\\n  max-width: 100%;\\n}\\n\\n.jp-RenderedMermaid img {\\n  max-width: 100%;\\n}\\n\\n.jp-RenderedMermaid-Details > pre {\\n  margin-top: 1em;\\n}\\n\\n.jp-RenderedMermaid-Summary {\\n  color: var(--jp-warn-color2);\\n}\\n\\n.jp-RenderedMermaid:not(.jp-mod-warning) pre {\\n  display: none;\\n}\\n\\n.jp-RenderedMermaid-Summary > pre {\\n  display: inline-block;\\n  white-space: normal;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-MetadataForm {\n  width: 100%;\n  color: var(--jp-ui-font-color1);\n  background: var(--jp-layout-color1);\n}\n\n.jp-MetadataForm-placeholder {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.jp-MetadataForm-placeholderContent {\n  padding: 8px;\n}\n\n.jp-MetadataForm .panel-danger.errors {\n  display: none;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/metadataform/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,WAAW;EACX,+BAA+B;EAC/B,mCAAmC;AACrC;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,aAAa;AACf\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-MetadataForm {\\n  width: 100%;\\n  color: var(--jp-ui-font-color1);\\n  background: var(--jp-layout-color1);\\n}\\n\\n.jp-MetadataForm-placeholder {\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n}\\n\\n.jp-MetadataForm-placeholderContent {\\n  padding: 8px;\\n}\\n\\n.jp-MetadataForm .panel-danger.errors {\\n  display: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./toolbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./executionindicator.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./toc.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./notebookfooter.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Imports\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| CSS variables\n|----------------------------------------------------------------------------*/\n\n:root {\n  --jp-side-by-side-output-size: 1fr;\n  --jp-side-by-side-resized-cell: var(--jp-side-by-side-output-size);\n  --jp-private-notebook-dragImage-width: 304px;\n  --jp-private-notebook-dragImage-height: 36px;\n  --jp-private-notebook-selected-color: var(--md-blue-400, #42a5f5);\n  --jp-private-notebook-active-color: var(--md-green-400, #66bb6a);\n}\n\n/*-----------------------------------------------------------------------------\n| Notebook\n|----------------------------------------------------------------------------*/\n\n/* stylelint-disable selector-max-class */\n\n.jp-NotebookPanel {\n  display: block;\n  height: 100%;\n}\n\n.jp-NotebookPanel.jp-Document {\n  min-width: 240px;\n  min-height: 120px;\n}\n\n.jp-Notebook {\n  outline: none;\n  background: var(--jp-layout-color0);\n}\n\n.jp-Notebook .jp-WindowedPanel-viewport {\n  padding: var(--jp-notebook-padding);\n}\n\n.jp-Notebook.jp-mod-scrollPastEnd > .jp-WindowedPanel-outer::after {\n  display: block;\n  content: '';\n  min-height: var(--jp-notebook-scroll-padding);\n}\n\n.jp-MainAreaWidget-ContainStrict .jp-Notebook * {\n  contain: strict;\n}\n\n.jp-Notebook .jp-Cell {\n  overflow: visible;\n}\n\n.jp-Notebook .jp-Cell .jp-InputPrompt {\n  cursor: move;\n  float: left;\n}\n\n/*-----------------------------------------------------------------------------\n| Notebook state related styling\n|\n| The notebook and cells each have states, here are the possibilities:\n|\n| - Notebook\n|   - Command\n|   - Edit\n| - Cell\n|   - None\n|   - Active (only one can be active)\n|   - Selected (the cells actions are applied to)\n|   - Multiselected (when multiple selected, the cursor)\n|   - No outputs\n|----------------------------------------------------------------------------*/\n\n/* Command or edit modes */\n\n.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt {\n  opacity: var(--jp-cell-prompt-not-active-opacity);\n  color: var(--jp-cell-prompt-not-active-font-color);\n}\n\n.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt {\n  opacity: var(--jp-cell-prompt-not-active-opacity);\n  color: var(--jp-cell-prompt-not-active-font-color);\n}\n\n/* cell is active */\n.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser {\n  background: var(--jp-brand-color1);\n}\n\n/* cell is dirty */\n.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt {\n  color: var(--jp-warn-color1);\n}\n\n.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt::before {\n  color: var(--jp-warn-color1);\n  content: '•';\n}\n\n.jp-Notebook .jp-Cell.jp-mod-active.jp-mod-dirty .jp-Collapser {\n  background: var(--jp-warn-color1);\n}\n\n/* collapser is hovered */\n.jp-Notebook .jp-Cell .jp-Collapser:hover {\n  box-shadow: var(--jp-elevation-z2);\n  background: var(--jp-brand-color1);\n  opacity: var(--jp-cell-collapser-not-active-hover-opacity);\n}\n\n/* cell is active and collapser is hovered */\n.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover {\n  background: var(--jp-brand-color0);\n  opacity: 1;\n}\n\n/* Command mode */\n\n.jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected {\n  background: var(--jp-notebook-multiselected-color);\n}\n\n.jp-Notebook.jp-mod-commandMode\n  .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected) {\n  background: transparent;\n}\n\n.jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active:focus-visible {\n  outline: none;\n  border: none;\n  border-radius: 2px;\n  box-shadow: 0 0 0 1px var(--jp-brand-color1);\n  z-index: 1;\n}\n\n/* Edit mode */\n\n.jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor {\n  border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);\n  box-shadow: var(--jp-cell-editor-box-shadow);\n  background-color: var(--jp-cell-editor-active-background);\n}\n\n/*-----------------------------------------------------------------------------\n| Notebook drag and drop\n|----------------------------------------------------------------------------*/\n\n.jp-Notebook-cell.jp-mod-dropSource {\n  opacity: 0.5;\n}\n\n.jp-Notebook-cell.jp-mod-dropTarget,\n.jp-Notebook.jp-mod-commandMode\n  .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget {\n  border-top-color: var(--jp-private-notebook-selected-color);\n  border-top-style: solid;\n  border-top-width: 2px;\n}\n\n.jp-dragImage {\n  display: flex;\n  flex-direction: row;\n  width: var(--jp-private-notebook-dragImage-width);\n  height: var(--jp-private-notebook-dragImage-height);\n  border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);\n  background: var(--jp-cell-editor-background);\n  overflow: visible;\n}\n\n.jp-dragImage-singlePrompt {\n  box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12);\n}\n\n.jp-dragImage .jp-dragImage-content {\n  flex: 1 1 auto;\n  z-index: 2;\n  font-size: var(--jp-code-font-size);\n  font-family: var(--jp-code-font-family);\n  line-height: var(--jp-code-line-height);\n  padding: var(--jp-code-padding);\n  border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);\n  background: var(--jp-cell-editor-background-color);\n  color: var(--jp-content-font-color3);\n  text-align: left;\n  margin: 4px 4px 4px 0;\n}\n\n.jp-dragImage .jp-dragImage-prompt {\n  flex: 0 0 auto;\n  min-width: 36px;\n  color: var(--jp-cell-inprompt-font-color);\n  opacity: 0.5;\n  padding: var(--jp-code-padding);\n  padding-left: 12px;\n  font-family: var(--jp-cell-prompt-font-family);\n  letter-spacing: var(--jp-cell-prompt-letter-spacing);\n  line-height: 1.9;\n  font-size: var(--jp-code-font-size);\n  border: var(--jp-border-width) solid transparent;\n}\n\n.jp-dragImage-multipleBack {\n  z-index: -1;\n  position: absolute;\n  height: 32px;\n  width: 300px;\n  top: 8px;\n  left: 8px;\n  background: var(--jp-layout-color2);\n  border-width: var(--jp-border-width);\n  border-style: solid;\n  border-color: color-mix(\n    in srgb,\n    var(--jp-input-border-color) 20%,\n    transparent\n  );\n  box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12);\n}\n\n/*-----------------------------------------------------------------------------\n| Cell toolbar\n|----------------------------------------------------------------------------*/\n\n.jp-NotebookTools {\n  display: block;\n  min-width: var(--jp-sidebar-min-width);\n  color: var(--jp-ui-font-color1);\n  background: var(--jp-layout-color1);\n\n  /* This is needed so that all font sizing of children done in ems is\n    * relative to this base size */\n  font-size: var(--jp-ui-font-size1);\n  overflow: auto;\n}\n\n.jp-ActiveCellTool {\n  padding: 12px 0;\n  display: flex;\n}\n\n.jp-ActiveCellTool-Content {\n  flex: 1 1 auto;\n}\n\n.jp-ActiveCellTool .jp-ActiveCellTool-CellContent {\n  background: var(--jp-cell-editor-background);\n  border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);\n  border-radius: 0;\n  min-height: 29px;\n}\n\n.jp-ActiveCellTool .jp-InputPrompt {\n  min-width: calc(var(--jp-cell-prompt-width) * 0.75);\n}\n\n.jp-ActiveCellTool-CellContent > pre {\n  padding: 5px 4px;\n  margin: 0;\n  white-space: normal;\n}\n\n.jp-MetadataEditorTool {\n  flex-direction: column;\n  padding: 12px 0;\n}\n\n.jp-RankedPanel > :not(:first-child) {\n  margin-top: 12px;\n}\n\n.jp-KeySelector select.jp-mod-styled {\n  font-size: var(--jp-ui-font-size1);\n  color: var(--jp-ui-font-color0);\n  border: var(--jp-border-width) solid var(--jp-border-color1);\n}\n\n.jp-KeySelector label,\n.jp-MetadataEditorTool label,\n.jp-NumberSetter label {\n  line-height: 1.4;\n}\n\n.jp-NumberSetter input {\n  width: 100%;\n  margin-top: 4px;\n}\n\n.jp-NotebookTools .jp-Collapse {\n  margin-top: 16px;\n}\n\n/*-----------------------------------------------------------------------------\n| Presentation Mode (.jp-mod-presentationMode)\n|----------------------------------------------------------------------------*/\n\n.jp-mod-presentationMode .jp-Notebook {\n  --jp-content-font-size1: var(--jp-content-presentation-font-size1);\n  --jp-code-font-size: var(--jp-code-presentation-font-size);\n}\n\n.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,\n.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt {\n  flex: 0 0 110px;\n}\n\n/*-----------------------------------------------------------------------------\n| Side-by-side Mode (.jp-mod-sideBySide)\n|----------------------------------------------------------------------------*/\n.jp-mod-sideBySide.jp-Notebook .jp-Notebook-cell {\n  margin-top: 3em;\n  margin-bottom: 3em;\n  margin-left: 5%;\n  margin-right: 5%;\n}\n\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell {\n  display: grid;\n  grid-template-columns: minmax(70px, 1fr) min-content minmax(\n      70px,\n      var(--jp-side-by-side-output-size)\n    );\n  grid-template-rows: auto minmax(0, 1fr) auto;\n  grid-template-areas:\n    'header header header'\n    'input handle output'\n    'footer footer footer';\n}\n\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell.jp-mod-resizedCell {\n  grid-template-columns: minmax(70px, 1fr) min-content minmax(\n      70px,\n      var(--jp-side-by-side-resized-cell)\n    );\n}\n\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellHeader {\n  grid-area: header;\n}\n\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-inputWrapper {\n  grid-area: input;\n}\n\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-outputWrapper {\n  /* overwrite the default margin (no vertical separation needed in side by side move */\n  margin-top: 0;\n  grid-area: output;\n}\n\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellFooter {\n  grid-area: footer;\n}\n\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle {\n  grid-area: handle;\n  user-select: none;\n  display: block;\n  height: 100%;\n  cursor: ew-resize;\n  padding: 0 var(--jp-cell-padding);\n}\n\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle::after {\n  content: '';\n  display: block;\n  background: var(--jp-border-color2);\n  height: 100%;\n  width: 5px;\n}\n\n.jp-mod-sideBySide.jp-Notebook\n  .jp-CodeCell.jp-mod-resizedCell\n  .jp-CellResizeHandle::after {\n  background: var(--jp-border-color0);\n}\n\n.jp-CellResizeHandle {\n  display: none;\n}\n\n/*-----------------------------------------------------------------------------\n| Placeholder\n|----------------------------------------------------------------------------*/\n\n.jp-Cell-Placeholder {\n  padding-left: 55px;\n}\n\n.jp-Cell-Placeholder-wrapper {\n  background: #fff;\n  border: 1px solid;\n  border-color: #e5e6e9 #dfe0e4 #d0d1d5;\n  border-radius: 4px;\n  -webkit-border-radius: 4px;\n  margin: 10px 15px;\n}\n\n.jp-Cell-Placeholder-wrapper-inner {\n  padding: 15px;\n  position: relative;\n}\n\n.jp-Cell-Placeholder-wrapper-body {\n  background-repeat: repeat;\n  background-size: 50% auto;\n}\n\n.jp-Cell-Placeholder-wrapper-body div {\n  background: #f6f7f8;\n  background-image: -webkit-linear-gradient(\n    left,\n    #f6f7f8 0%,\n    #edeef1 20%,\n    #f6f7f8 40%,\n    #f6f7f8 100%\n  );\n  background-repeat: no-repeat;\n  background-size: 800px 104px;\n  height: 104px;\n  position: absolute;\n  right: 15px;\n  left: 15px;\n  top: 15px;\n}\n\ndiv.jp-Cell-Placeholder-h1 {\n  top: 20px;\n  height: 20px;\n  left: 15px;\n  width: 150px;\n}\n\ndiv.jp-Cell-Placeholder-h2 {\n  left: 15px;\n  top: 50px;\n  height: 10px;\n  width: 100px;\n}\n\ndiv.jp-Cell-Placeholder-content-1,\ndiv.jp-Cell-Placeholder-content-2,\ndiv.jp-Cell-Placeholder-content-3 {\n  left: 15px;\n  right: 15px;\n  height: 10px;\n}\n\ndiv.jp-Cell-Placeholder-content-1 {\n  top: 100px;\n}\n\ndiv.jp-Cell-Placeholder-content-2 {\n  top: 120px;\n}\n\ndiv.jp-Cell-Placeholder-content-3 {\n  top: 140px;\n}\n\n/*-----------------------------------------------------------------------------\n| Virtual scrollbar\n|----------------------------------------------------------------------------*/\n\n.jp-Notebook .jp-WindowedPanel-scrollbar-item[data-output='error'] {\n  background: var(--jp-error-color3);\n}\n\n.jp-Notebook .jp-WindowedPanel-scrollbar-item[data-output='error']:hover {\n  background: var(--jp-error-color2);\n}\n\n.jp-Notebook .jp-WindowedPanel-scrollbar-content > .jp-mod-dirty {\n  background: var(--jp-warn-color3);\n}\n\n.jp-Notebook .jp-WindowedPanel-scrollbar-content > .jp-mod-dirty:hover {\n  background: var(--jp-warn-color2);\n}\n\n.jp-Notebook .jp-WindowedPanel-scrollbar-content > .jp-mod-selected {\n  background: var(--jp-brand-color2);\n  color: var(--jp-ui-inverse-font-color2);\n}\n\n.jp-Notebook .jp-WindowedPanel-scrollbar-content > .jp-mod-selected:hover {\n  background: var(--jp-brand-color1);\n}\n\n.jp-Notebook .jp-WindowedPanel-scrollbar-content > .jp-mod-active {\n  background: var(--jp-brand-color1);\n  color: var(--jp-ui-inverse-font-color1);\n}\n\n.jp-Notebook .jp-WindowedPanel-scrollbar-content > .jp-mod-active:hover {\n  background: var(--jp-brand-color0);\n}\n\n.jp-Notebook .jp-WindowedPanel-scrollbar-item {\n  max-width: 60px;\n  display: flex;\n}\n\n.jp-Notebook .jp-scrollbarItem-executionIndicator {\n  display: inline-block;\n  font-family: monospace;\n  font-size: 80%;\n  line-height: 100%;\n  margin-left: -1px;\n  padding-right: 1px;\n  text-wrap: nowrap; /* stylelint-disable-line csstree/validator */\n}\n\n.jp-Notebook .jp-scrollbarItem-source {\n  display: inline-block;\n  font-size: 3px;\n  vertical-align: middle;\n  max-height: 10em;\n  overflow: hidden;\n}\n\n.jp-Notebook\n  .jp-WindowedPanel-scrollbar-item[data-type='code']\n  > .jp-scrollbarItem-source {\n  white-space: pre;\n}\n\n.jp-Notebook\n  .jp-WindowedPanel-scrollbar-item[data-type='markdown']\n  > .jp-scrollbarItem-source {\n  white-space: pre-line;\n}\n\n/*-----------------------------------------------------------------------------\n| Printing\n|----------------------------------------------------------------------------*/\n@media print {\n  .jp-Notebook .jp-Cell .jp-InputPrompt {\n    float: none;\n  }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/notebook/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAO9E;;8EAE8E;;AAE9E;EACE,kCAAkC;EAClC,kEAAkE;EAClE,4CAA4C;EAC5C,4CAA4C;EAC5C,iEAAiE;EACjE,gEAAgE;AAClE;;AAEA;;8EAE8E;;AAE9E,yCAAyC;;AAEzC;EACE,cAAc;EACd,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,cAAc;EACd,WAAW;EACX,6CAA6C;AAC/C;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,WAAW;AACb;;AAEA;;;;;;;;;;;;;;8EAc8E;;AAE9E,0BAA0B;;AAE1B;EACE,iDAAiD;EACjD,kDAAkD;AACpD;;AAEA;EACE,iDAAiD;EACjD,kDAAkD;AACpD;;AAEA,mBAAmB;AACnB;EACE,kCAAkC;AACpC;;AAEA,kBAAkB;AAClB;EACE,4BAA4B;AAC9B;;AAEA;EACE,4BAA4B;EAC5B,YAAY;AACd;;AAEA;EACE,iCAAiC;AACnC;;AAEA,yBAAyB;AACzB;EACE,kCAAkC;EAClC,kCAAkC;EAClC,0DAA0D;AAC5D;;AAEA,4CAA4C;AAC5C;EACE,kCAAkC;EAClC,UAAU;AACZ;;AAEA,iBAAiB;;AAEjB;EACE,kDAAkD;AACpD;;AAEA;;EAEE,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,YAAY;EACZ,kBAAkB;EAClB,4CAA4C;EAC5C,UAAU;AACZ;;AAEA,cAAc;;AAEd;EACE,8EAA8E;EAC9E,4CAA4C;EAC5C,yDAAyD;AAC3D;;AAEA;;8EAE8E;;AAE9E;EACE,YAAY;AACd;;AAEA;;;EAGE,2DAA2D;EAC3D,uBAAuB;EACvB,qBAAqB;AACvB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,iDAAiD;EACjD,mDAAmD;EACnD,uEAAuE;EACvE,4CAA4C;EAC5C,iBAAiB;AACnB;;AAEA;EACE,6CAA6C;AAC/C;;AAEA;EACE,cAAc;EACd,UAAU;EACV,mCAAmC;EACnC,uCAAuC;EACvC,uCAAuC;EACvC,+BAA+B;EAC/B,uEAAuE;EACvE,kDAAkD;EAClD,oCAAoC;EACpC,gBAAgB;EAChB,qBAAqB;AACvB;;AAEA;EACE,cAAc;EACd,eAAe;EACf,yCAAyC;EACzC,YAAY;EACZ,+BAA+B;EAC/B,kBAAkB;EAClB,8CAA8C;EAC9C,oDAAoD;EACpD,gBAAgB;EAChB,mCAAmC;EACnC,gDAAgD;AAClD;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,YAAY;EACZ,YAAY;EACZ,QAAQ;EACR,SAAS;EACT,mCAAmC;EACnC,oCAAoC;EACpC,mBAAmB;EACnB;;;;GAIC;EACD,6CAA6C;AAC/C;;AAEA;;8EAE8E;;AAE9E;EACE,cAAc;EACd,sCAAsC;EACtC,+BAA+B;EAC/B,mCAAmC;;EAEnC;kCACgC;EAChC,kCAAkC;EAClC,cAAc;AAChB;;AAEA;EACE,eAAe;EACf,aAAa;AACf;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,4CAA4C;EAC5C,uEAAuE;EACvE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,mDAAmD;AACrD;;AAEA;EACE,gBAAgB;EAChB,SAAS;EACT,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;EACtB,eAAe;AACjB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,kCAAkC;EAClC,+BAA+B;EAC/B,4DAA4D;AAC9D;;AAEA;;;EAGE,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,eAAe;AACjB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;;8EAE8E;;AAE9E;EACE,kEAAkE;EAClE,0DAA0D;AAC5D;;AAEA;;EAEE,eAAe;AACjB;;AAEA;;8EAE8E;AAC9E;EACE,eAAe;EACf,kBAAkB;EAClB,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb;;;KAGG;EACH,4CAA4C;EAC5C;;;0BAGwB;AAC1B;;AAEA;EACE;;;KAGG;AACL;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,qFAAqF;EACrF,aAAa;EACb,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,YAAY;EACZ,iBAAiB;EACjB,iCAAiC;AACnC;;AAEA;EACE,WAAW;EACX,cAAc;EACd,mCAAmC;EACnC,YAAY;EACZ,UAAU;AACZ;;AAEA;;;EAGE,mCAAmC;AACrC;;AAEA;EACE,aAAa;AACf;;AAEA;;8EAE8E;;AAE9E;EACE,kBAAkB;AACpB;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,qCAAqC;EACrC,kBAAkB;EAClB,0BAA0B;EAC1B,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,yBAAyB;EACzB,yBAAyB;AAC3B;;AAEA;EACE,mBAAmB;EACnB;;;;;;GAMC;EACD,4BAA4B;EAC5B,4BAA4B;EAC5B,aAAa;EACb,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,SAAS;AACX;;AAEA;EACE,SAAS;EACT,YAAY;EACZ,UAAU;EACV,YAAY;AACd;;AAEA;EACE,UAAU;EACV,SAAS;EACT,YAAY;EACZ,YAAY;AACd;;AAEA;;;EAGE,UAAU;EACV,WAAW;EACX,YAAY;AACd;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;;8EAE8E;;AAE9E;EACE,kCAAkC;AACpC;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,kCAAkC;EAClC,uCAAuC;AACzC;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,kCAAkC;EAClC,uCAAuC;AACzC;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,eAAe;EACf,aAAa;AACf;;AAEA;EACE,qBAAqB;EACrB,sBAAsB;EACtB,cAAc;EACd,iBAAiB;EACjB,iBAAiB;EACjB,kBAAkB;EAClB,iBAAiB,EAAE,6CAA6C;AAClE;;AAEA;EACE,qBAAqB;EACrB,cAAc;EACd,sBAAsB;EACtB,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;;;EAGE,gBAAgB;AAClB;;AAEA;;;EAGE,qBAAqB;AACvB;;AAEA;;8EAE8E;AAC9E;EACE;IACE,WAAW;EACb;AACF\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Imports\\n|----------------------------------------------------------------------------*/\\n\\n@import './toolbar.css';\\n@import './executionindicator.css';\\n@import './toc.css';\\n@import './notebookfooter.css';\\n\\n/*-----------------------------------------------------------------------------\\n| CSS variables\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  --jp-side-by-side-output-size: 1fr;\\n  --jp-side-by-side-resized-cell: var(--jp-side-by-side-output-size);\\n  --jp-private-notebook-dragImage-width: 304px;\\n  --jp-private-notebook-dragImage-height: 36px;\\n  --jp-private-notebook-selected-color: var(--md-blue-400, #42a5f5);\\n  --jp-private-notebook-active-color: var(--md-green-400, #66bb6a);\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Notebook\\n|----------------------------------------------------------------------------*/\\n\\n/* stylelint-disable selector-max-class */\\n\\n.jp-NotebookPanel {\\n  display: block;\\n  height: 100%;\\n}\\n\\n.jp-NotebookPanel.jp-Document {\\n  min-width: 240px;\\n  min-height: 120px;\\n}\\n\\n.jp-Notebook {\\n  outline: none;\\n  background: var(--jp-layout-color0);\\n}\\n\\n.jp-Notebook .jp-WindowedPanel-viewport {\\n  padding: var(--jp-notebook-padding);\\n}\\n\\n.jp-Notebook.jp-mod-scrollPastEnd > .jp-WindowedPanel-outer::after {\\n  display: block;\\n  content: '';\\n  min-height: var(--jp-notebook-scroll-padding);\\n}\\n\\n.jp-MainAreaWidget-ContainStrict .jp-Notebook * {\\n  contain: strict;\\n}\\n\\n.jp-Notebook .jp-Cell {\\n  overflow: visible;\\n}\\n\\n.jp-Notebook .jp-Cell .jp-InputPrompt {\\n  cursor: move;\\n  float: left;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Notebook state related styling\\n|\\n| The notebook and cells each have states, here are the possibilities:\\n|\\n| - Notebook\\n|   - Command\\n|   - Edit\\n| - Cell\\n|   - None\\n|   - Active (only one can be active)\\n|   - Selected (the cells actions are applied to)\\n|   - Multiselected (when multiple selected, the cursor)\\n|   - No outputs\\n|----------------------------------------------------------------------------*/\\n\\n/* Command or edit modes */\\n\\n.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt {\\n  opacity: var(--jp-cell-prompt-not-active-opacity);\\n  color: var(--jp-cell-prompt-not-active-font-color);\\n}\\n\\n.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt {\\n  opacity: var(--jp-cell-prompt-not-active-opacity);\\n  color: var(--jp-cell-prompt-not-active-font-color);\\n}\\n\\n/* cell is active */\\n.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser {\\n  background: var(--jp-brand-color1);\\n}\\n\\n/* cell is dirty */\\n.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt {\\n  color: var(--jp-warn-color1);\\n}\\n\\n.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt::before {\\n  color: var(--jp-warn-color1);\\n  content: '•';\\n}\\n\\n.jp-Notebook .jp-Cell.jp-mod-active.jp-mod-dirty .jp-Collapser {\\n  background: var(--jp-warn-color1);\\n}\\n\\n/* collapser is hovered */\\n.jp-Notebook .jp-Cell .jp-Collapser:hover {\\n  box-shadow: var(--jp-elevation-z2);\\n  background: var(--jp-brand-color1);\\n  opacity: var(--jp-cell-collapser-not-active-hover-opacity);\\n}\\n\\n/* cell is active and collapser is hovered */\\n.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover {\\n  background: var(--jp-brand-color0);\\n  opacity: 1;\\n}\\n\\n/* Command mode */\\n\\n.jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected {\\n  background: var(--jp-notebook-multiselected-color);\\n}\\n\\n.jp-Notebook.jp-mod-commandMode\\n  .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected) {\\n  background: transparent;\\n}\\n\\n.jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active:focus-visible {\\n  outline: none;\\n  border: none;\\n  border-radius: 2px;\\n  box-shadow: 0 0 0 1px var(--jp-brand-color1);\\n  z-index: 1;\\n}\\n\\n/* Edit mode */\\n\\n.jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor {\\n  border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);\\n  box-shadow: var(--jp-cell-editor-box-shadow);\\n  background-color: var(--jp-cell-editor-active-background);\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Notebook drag and drop\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Notebook-cell.jp-mod-dropSource {\\n  opacity: 0.5;\\n}\\n\\n.jp-Notebook-cell.jp-mod-dropTarget,\\n.jp-Notebook.jp-mod-commandMode\\n  .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget {\\n  border-top-color: var(--jp-private-notebook-selected-color);\\n  border-top-style: solid;\\n  border-top-width: 2px;\\n}\\n\\n.jp-dragImage {\\n  display: flex;\\n  flex-direction: row;\\n  width: var(--jp-private-notebook-dragImage-width);\\n  height: var(--jp-private-notebook-dragImage-height);\\n  border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);\\n  background: var(--jp-cell-editor-background);\\n  overflow: visible;\\n}\\n\\n.jp-dragImage-singlePrompt {\\n  box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12);\\n}\\n\\n.jp-dragImage .jp-dragImage-content {\\n  flex: 1 1 auto;\\n  z-index: 2;\\n  font-size: var(--jp-code-font-size);\\n  font-family: var(--jp-code-font-family);\\n  line-height: var(--jp-code-line-height);\\n  padding: var(--jp-code-padding);\\n  border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);\\n  background: var(--jp-cell-editor-background-color);\\n  color: var(--jp-content-font-color3);\\n  text-align: left;\\n  margin: 4px 4px 4px 0;\\n}\\n\\n.jp-dragImage .jp-dragImage-prompt {\\n  flex: 0 0 auto;\\n  min-width: 36px;\\n  color: var(--jp-cell-inprompt-font-color);\\n  opacity: 0.5;\\n  padding: var(--jp-code-padding);\\n  padding-left: 12px;\\n  font-family: var(--jp-cell-prompt-font-family);\\n  letter-spacing: var(--jp-cell-prompt-letter-spacing);\\n  line-height: 1.9;\\n  font-size: var(--jp-code-font-size);\\n  border: var(--jp-border-width) solid transparent;\\n}\\n\\n.jp-dragImage-multipleBack {\\n  z-index: -1;\\n  position: absolute;\\n  height: 32px;\\n  width: 300px;\\n  top: 8px;\\n  left: 8px;\\n  background: var(--jp-layout-color2);\\n  border-width: var(--jp-border-width);\\n  border-style: solid;\\n  border-color: color-mix(\\n    in srgb,\\n    var(--jp-input-border-color) 20%,\\n    transparent\\n  );\\n  box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12);\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Cell toolbar\\n|----------------------------------------------------------------------------*/\\n\\n.jp-NotebookTools {\\n  display: block;\\n  min-width: var(--jp-sidebar-min-width);\\n  color: var(--jp-ui-font-color1);\\n  background: var(--jp-layout-color1);\\n\\n  /* This is needed so that all font sizing of children done in ems is\\n    * relative to this base size */\\n  font-size: var(--jp-ui-font-size1);\\n  overflow: auto;\\n}\\n\\n.jp-ActiveCellTool {\\n  padding: 12px 0;\\n  display: flex;\\n}\\n\\n.jp-ActiveCellTool-Content {\\n  flex: 1 1 auto;\\n}\\n\\n.jp-ActiveCellTool .jp-ActiveCellTool-CellContent {\\n  background: var(--jp-cell-editor-background);\\n  border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);\\n  border-radius: 0;\\n  min-height: 29px;\\n}\\n\\n.jp-ActiveCellTool .jp-InputPrompt {\\n  min-width: calc(var(--jp-cell-prompt-width) * 0.75);\\n}\\n\\n.jp-ActiveCellTool-CellContent > pre {\\n  padding: 5px 4px;\\n  margin: 0;\\n  white-space: normal;\\n}\\n\\n.jp-MetadataEditorTool {\\n  flex-direction: column;\\n  padding: 12px 0;\\n}\\n\\n.jp-RankedPanel > :not(:first-child) {\\n  margin-top: 12px;\\n}\\n\\n.jp-KeySelector select.jp-mod-styled {\\n  font-size: var(--jp-ui-font-size1);\\n  color: var(--jp-ui-font-color0);\\n  border: var(--jp-border-width) solid var(--jp-border-color1);\\n}\\n\\n.jp-KeySelector label,\\n.jp-MetadataEditorTool label,\\n.jp-NumberSetter label {\\n  line-height: 1.4;\\n}\\n\\n.jp-NumberSetter input {\\n  width: 100%;\\n  margin-top: 4px;\\n}\\n\\n.jp-NotebookTools .jp-Collapse {\\n  margin-top: 16px;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Presentation Mode (.jp-mod-presentationMode)\\n|----------------------------------------------------------------------------*/\\n\\n.jp-mod-presentationMode .jp-Notebook {\\n  --jp-content-font-size1: var(--jp-content-presentation-font-size1);\\n  --jp-code-font-size: var(--jp-code-presentation-font-size);\\n}\\n\\n.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,\\n.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt {\\n  flex: 0 0 110px;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Side-by-side Mode (.jp-mod-sideBySide)\\n|----------------------------------------------------------------------------*/\\n.jp-mod-sideBySide.jp-Notebook .jp-Notebook-cell {\\n  margin-top: 3em;\\n  margin-bottom: 3em;\\n  margin-left: 5%;\\n  margin-right: 5%;\\n}\\n\\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell {\\n  display: grid;\\n  grid-template-columns: minmax(70px, 1fr) min-content minmax(\\n      70px,\\n      var(--jp-side-by-side-output-size)\\n    );\\n  grid-template-rows: auto minmax(0, 1fr) auto;\\n  grid-template-areas:\\n    'header header header'\\n    'input handle output'\\n    'footer footer footer';\\n}\\n\\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell.jp-mod-resizedCell {\\n  grid-template-columns: minmax(70px, 1fr) min-content minmax(\\n      70px,\\n      var(--jp-side-by-side-resized-cell)\\n    );\\n}\\n\\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellHeader {\\n  grid-area: header;\\n}\\n\\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-inputWrapper {\\n  grid-area: input;\\n}\\n\\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-outputWrapper {\\n  /* overwrite the default margin (no vertical separation needed in side by side move */\\n  margin-top: 0;\\n  grid-area: output;\\n}\\n\\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellFooter {\\n  grid-area: footer;\\n}\\n\\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle {\\n  grid-area: handle;\\n  user-select: none;\\n  display: block;\\n  height: 100%;\\n  cursor: ew-resize;\\n  padding: 0 var(--jp-cell-padding);\\n}\\n\\n.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle::after {\\n  content: '';\\n  display: block;\\n  background: var(--jp-border-color2);\\n  height: 100%;\\n  width: 5px;\\n}\\n\\n.jp-mod-sideBySide.jp-Notebook\\n  .jp-CodeCell.jp-mod-resizedCell\\n  .jp-CellResizeHandle::after {\\n  background: var(--jp-border-color0);\\n}\\n\\n.jp-CellResizeHandle {\\n  display: none;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Placeholder\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Cell-Placeholder {\\n  padding-left: 55px;\\n}\\n\\n.jp-Cell-Placeholder-wrapper {\\n  background: #fff;\\n  border: 1px solid;\\n  border-color: #e5e6e9 #dfe0e4 #d0d1d5;\\n  border-radius: 4px;\\n  -webkit-border-radius: 4px;\\n  margin: 10px 15px;\\n}\\n\\n.jp-Cell-Placeholder-wrapper-inner {\\n  padding: 15px;\\n  position: relative;\\n}\\n\\n.jp-Cell-Placeholder-wrapper-body {\\n  background-repeat: repeat;\\n  background-size: 50% auto;\\n}\\n\\n.jp-Cell-Placeholder-wrapper-body div {\\n  background: #f6f7f8;\\n  background-image: -webkit-linear-gradient(\\n    left,\\n    #f6f7f8 0%,\\n    #edeef1 20%,\\n    #f6f7f8 40%,\\n    #f6f7f8 100%\\n  );\\n  background-repeat: no-repeat;\\n  background-size: 800px 104px;\\n  height: 104px;\\n  position: absolute;\\n  right: 15px;\\n  left: 15px;\\n  top: 15px;\\n}\\n\\ndiv.jp-Cell-Placeholder-h1 {\\n  top: 20px;\\n  height: 20px;\\n  left: 15px;\\n  width: 150px;\\n}\\n\\ndiv.jp-Cell-Placeholder-h2 {\\n  left: 15px;\\n  top: 50px;\\n  height: 10px;\\n  width: 100px;\\n}\\n\\ndiv.jp-Cell-Placeholder-content-1,\\ndiv.jp-Cell-Placeholder-content-2,\\ndiv.jp-Cell-Placeholder-content-3 {\\n  left: 15px;\\n  right: 15px;\\n  height: 10px;\\n}\\n\\ndiv.jp-Cell-Placeholder-content-1 {\\n  top: 100px;\\n}\\n\\ndiv.jp-Cell-Placeholder-content-2 {\\n  top: 120px;\\n}\\n\\ndiv.jp-Cell-Placeholder-content-3 {\\n  top: 140px;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Virtual scrollbar\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Notebook .jp-WindowedPanel-scrollbar-item[data-output='error'] {\\n  background: var(--jp-error-color3);\\n}\\n\\n.jp-Notebook .jp-WindowedPanel-scrollbar-item[data-output='error']:hover {\\n  background: var(--jp-error-color2);\\n}\\n\\n.jp-Notebook .jp-WindowedPanel-scrollbar-content > .jp-mod-dirty {\\n  background: var(--jp-warn-color3);\\n}\\n\\n.jp-Notebook .jp-WindowedPanel-scrollbar-content > .jp-mod-dirty:hover {\\n  background: var(--jp-warn-color2);\\n}\\n\\n.jp-Notebook .jp-WindowedPanel-scrollbar-content > .jp-mod-selected {\\n  background: var(--jp-brand-color2);\\n  color: var(--jp-ui-inverse-font-color2);\\n}\\n\\n.jp-Notebook .jp-WindowedPanel-scrollbar-content > .jp-mod-selected:hover {\\n  background: var(--jp-brand-color1);\\n}\\n\\n.jp-Notebook .jp-WindowedPanel-scrollbar-content > .jp-mod-active {\\n  background: var(--jp-brand-color1);\\n  color: var(--jp-ui-inverse-font-color1);\\n}\\n\\n.jp-Notebook .jp-WindowedPanel-scrollbar-content > .jp-mod-active:hover {\\n  background: var(--jp-brand-color0);\\n}\\n\\n.jp-Notebook .jp-WindowedPanel-scrollbar-item {\\n  max-width: 60px;\\n  display: flex;\\n}\\n\\n.jp-Notebook .jp-scrollbarItem-executionIndicator {\\n  display: inline-block;\\n  font-family: monospace;\\n  font-size: 80%;\\n  line-height: 100%;\\n  margin-left: -1px;\\n  padding-right: 1px;\\n  text-wrap: nowrap; /* stylelint-disable-line csstree/validator */\\n}\\n\\n.jp-Notebook .jp-scrollbarItem-source {\\n  display: inline-block;\\n  font-size: 3px;\\n  vertical-align: middle;\\n  max-height: 10em;\\n  overflow: hidden;\\n}\\n\\n.jp-Notebook\\n  .jp-WindowedPanel-scrollbar-item[data-type='code']\\n  > .jp-scrollbarItem-source {\\n  white-space: pre;\\n}\\n\\n.jp-Notebook\\n  .jp-WindowedPanel-scrollbar-item[data-type='markdown']\\n  > .jp-scrollbarItem-source {\\n  white-space: pre-line;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Printing\\n|----------------------------------------------------------------------------*/\\n@media print {\\n  .jp-Notebook .jp-Cell .jp-InputPrompt {\\n    float: none;\\n  }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Variables\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n\n/*-----------------------------------------------------------------------------\n| Styles\n|----------------------------------------------------------------------------*/\n\n.jp-Notebook-ExecutionIndicator {\n  position: relative;\n  display: inline-block;\n  z-index: 9997;\n  padding-top: 1px;\n}\n\n.jp-Notebook-ExecutionIndicator-tooltip {\n  visibility: hidden;\n  height: auto;\n  width: max-content;\n  width: -moz-max-content;\n  background-color: var(--jp-layout-color2);\n  color: var(--jp-ui-font-color1);\n  text-align: justify;\n  border-radius: 6px;\n  padding: 0 5px;\n  position: fixed;\n  display: table;\n}\n\n.jp-Notebook-ExecutionIndicator-tooltip.up {\n  transform: translateX(-50%) translateY(-100%) translateY(-32px);\n}\n\n.jp-Notebook-ExecutionIndicator-tooltip.down {\n  transform: translateX(calc(-100% + 16px)) translateY(5px);\n}\n\n.jp-Notebook-ExecutionIndicator-tooltip.hidden {\n  display: none;\n}\n\n.jp-Notebook-ExecutionIndicator:hover .jp-Notebook-ExecutionIndicator-tooltip {\n  visibility: visible;\n}\n\n.jp-Notebook-ExecutionIndicator span {\n  font-size: var(--jp-ui-font-size1);\n  font-family: var(--jp-ui-font-family);\n  color: var(--jp-ui-font-color1);\n  line-height: 24px;\n  display: block;\n}\n\n.jp-Notebook-ExecutionIndicator-progress-bar {\n  display: flex;\n  justify-content: center;\n  height: 100%;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/notebook/style/executionindicator.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E;;;;8EAI8E;;AAE9E;EACE,kBAAkB;EAClB,qBAAqB;EACrB,aAAa;EACb,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,YAAY;EACZ,kBAAkB;EAClB,uBAAuB;EACvB,yCAAyC;EACzC,+BAA+B;EAC/B,mBAAmB;EACnB,kBAAkB;EAClB,cAAc;EACd,eAAe;EACf,cAAc;AAChB;;AAEA;EACE,+DAA+D;AACjE;;AAEA;EACE,yDAAyD;AAC3D;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,kCAAkC;EAClC,qCAAqC;EACrC,+BAA+B;EAC/B,iBAAiB;EACjB,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,YAAY;AACd\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Variables\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n\\n/*-----------------------------------------------------------------------------\\n| Styles\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Notebook-ExecutionIndicator {\\n  position: relative;\\n  display: inline-block;\\n  z-index: 9997;\\n  padding-top: 1px;\\n}\\n\\n.jp-Notebook-ExecutionIndicator-tooltip {\\n  visibility: hidden;\\n  height: auto;\\n  width: max-content;\\n  width: -moz-max-content;\\n  background-color: var(--jp-layout-color2);\\n  color: var(--jp-ui-font-color1);\\n  text-align: justify;\\n  border-radius: 6px;\\n  padding: 0 5px;\\n  position: fixed;\\n  display: table;\\n}\\n\\n.jp-Notebook-ExecutionIndicator-tooltip.up {\\n  transform: translateX(-50%) translateY(-100%) translateY(-32px);\\n}\\n\\n.jp-Notebook-ExecutionIndicator-tooltip.down {\\n  transform: translateX(calc(-100% + 16px)) translateY(5px);\\n}\\n\\n.jp-Notebook-ExecutionIndicator-tooltip.hidden {\\n  display: none;\\n}\\n\\n.jp-Notebook-ExecutionIndicator:hover .jp-Notebook-ExecutionIndicator-tooltip {\\n  visibility: visible;\\n}\\n\\n.jp-Notebook-ExecutionIndicator span {\\n  font-size: var(--jp-ui-font-size1);\\n  font-family: var(--jp-ui-font-family);\\n  color: var(--jp-ui-font-color1);\\n  line-height: 24px;\\n  display: block;\\n}\\n\\n.jp-Notebook-ExecutionIndicator-progress-bar {\\n  display: flex;\\n  justify-content: center;\\n  height: 100%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.jp-Notebook-footer {\n  height: 27px;\n  margin-left: calc(\n    var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) +\n      var(--jp-cell-padding) + var(--jp-notebook-padding)\n  );\n  width: calc(\n    100% -\n      (\n        var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) + 2 *\n          var(--jp-cell-padding) + 2 * var(--jp-notebook-padding)\n      )\n  );\n  border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);\n  color: var(--jp-ui-font-color3);\n  background: none;\n  cursor: pointer;\n}\n\n.jp-Notebook-footer:focus {\n  border-color: var(--jp-cell-editor-active-border-color);\n}\n\n/* For devices that support hovering, hide footer until hover */\n@media (hover: hover) {\n  .jp-Notebook-footer {\n    opacity: 0;\n  }\n\n  .jp-Notebook-footer:focus,\n  .jp-Notebook-footer:hover {\n    opacity: 1;\n  }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/notebook/style/notebookfooter.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,YAAY;EACZ;;;GAGC;EACD;;;;;;GAMC;EACD,uEAAuE;EACvE,+BAA+B;EAC/B,gBAAgB;EAChB,eAAe;AACjB;;AAEA;EACE,uDAAuD;AACzD;;AAEA,+DAA+D;AAC/D;EACE;IACE,UAAU;EACZ;;EAEA;;IAEE,UAAU;EACZ;AACF\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.jp-Notebook-footer {\\n  height: 27px;\\n  margin-left: calc(\\n    var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) +\\n      var(--jp-cell-padding) + var(--jp-notebook-padding)\\n  );\\n  width: calc(\\n    100% -\\n      (\\n        var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) + 2 *\\n          var(--jp-cell-padding) + 2 * var(--jp-notebook-padding)\\n      )\\n  );\\n  border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);\\n  color: var(--jp-ui-font-color3);\\n  background: none;\\n  cursor: pointer;\\n}\\n\\n.jp-Notebook-footer:focus {\\n  border-color: var(--jp-cell-editor-active-border-color);\\n}\\n\\n/* For devices that support hovering, hide footer until hover */\\n@media (hover: hover) {\\n  .jp-Notebook-footer {\\n    opacity: 0;\\n  }\\n\\n  .jp-Notebook-footer:focus,\\n  .jp-Notebook-footer:hover {\\n    opacity: 1;\\n  }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*\n * Execution indicator\n */\n.jp-tocItem-content::after {\n  content: '';\n\n  /* Must be identical to form a circle */\n  width: 12px;\n  height: 12px;\n  background: none;\n  border: none;\n  position: absolute;\n  right: 0;\n}\n\n.jp-tocItem-content[data-running='0']::after {\n  border-radius: 50%;\n  border: var(--jp-border-width) solid var(--jp-inverse-layout-color3);\n  background: none;\n}\n\n.jp-tocItem-content[data-running='1']::after {\n  border-radius: 50%;\n  border: var(--jp-border-width) solid var(--jp-inverse-layout-color3);\n  background-color: var(--jp-inverse-layout-color3);\n}\n\n.jp-tocItem-content[data-running='-0.5']::after {\n  /* \\\\FE0E forces the preceding unicode to be rendered as text */\n  content: '\\\\26A0 \\\\FE0E';\n  color: var(--jp-error-color1);\n}\n\n.jp-tocItem-content[data-running='0'],\n.jp-tocItem-content[data-running='1'],\n.jp-tocItem-content[data-running='-0.5'] {\n  margin-right: 12px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/notebook/style/toc.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;EAEE;AACF;EACE,WAAW;;EAEX,uCAAuC;EACvC,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,YAAY;EACZ,kBAAkB;EAClB,QAAQ;AACV;;AAEA;EACE,kBAAkB;EAClB,oEAAoE;EACpE,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,oEAAoE;EACpE,iDAAiD;AACnD;;AAEA;EACE,8DAA8D;EAC9D,sBAAsB;EACtB,6BAA6B;AAC/B;;AAEA;;;EAGE,kBAAkB;AACpB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*\\n * Execution indicator\\n */\\n.jp-tocItem-content::after {\\n  content: '';\\n\\n  /* Must be identical to form a circle */\\n  width: 12px;\\n  height: 12px;\\n  background: none;\\n  border: none;\\n  position: absolute;\\n  right: 0;\\n}\\n\\n.jp-tocItem-content[data-running='0']::after {\\n  border-radius: 50%;\\n  border: var(--jp-border-width) solid var(--jp-inverse-layout-color3);\\n  background: none;\\n}\\n\\n.jp-tocItem-content[data-running='1']::after {\\n  border-radius: 50%;\\n  border: var(--jp-border-width) solid var(--jp-inverse-layout-color3);\\n  background-color: var(--jp-inverse-layout-color3);\\n}\\n\\n.jp-tocItem-content[data-running='-0.5']::after {\\n  /* \\\\FE0E forces the preceding unicode to be rendered as text */\\n  content: '\\\\26A0 \\\\FE0E';\\n  color: var(--jp-error-color1);\\n}\\n\\n.jp-tocItem-content[data-running='0'],\\n.jp-tocItem-content[data-running='1'],\\n.jp-tocItem-content[data-running='-0.5'] {\\n  margin-right: 12px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Variables\n|----------------------------------------------------------------------------*/\n\n:root {\n  --jp-notebook-toolbar-padding: 0 5px 0 2px;\n}\n\n/*-----------------------------------------------------------------------------\n\n/*-----------------------------------------------------------------------------\n| Styles\n|----------------------------------------------------------------------------*/\n\n.jp-NotebookPanel-toolbar {\n  padding: var(--jp-notebook-toolbar-padding);\n\n  /* disable paint containment from lumino 2.0 default strict CSS containment */\n  contain: style size !important;\n}\n\n.jp-Toolbar > .jp-Toolbar-responsive-opener {\n  margin-left: auto;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/notebook/style/toolbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E;EACE,0CAA0C;AAC5C;;AAEA;;;;8EAI8E;;AAE9E;EACE,2CAA2C;;EAE3C,6EAA6E;EAC7E,8BAA8B;AAChC;;AAEA;EACE,iBAAiB;AACnB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Variables\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  --jp-notebook-toolbar-padding: 0 5px 0 2px;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n\\n/*-----------------------------------------------------------------------------\\n| Styles\\n|----------------------------------------------------------------------------*/\\n\\n.jp-NotebookPanel-toolbar {\\n  padding: var(--jp-notebook-toolbar-padding);\\n\\n  /* disable paint containment from lumino 2.0 default strict CSS containment */\\n  contain: style size !important;\\n}\\n\\n.jp-Toolbar > .jp-Toolbar-responsive-opener {\\n  margin-left: auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Main OutputArea\n| OutputArea has a list of Outputs\n|----------------------------------------------------------------------------*/\n\n.jp-OutputArea {\n  overflow-y: auto;\n}\n\n.jp-OutputArea-child {\n  display: flex;\n  flex-direction: row;\n  width: 100%;\n  overflow: hidden;\n}\n\n.jp-OutputPrompt {\n  width: var(--jp-cell-prompt-width);\n  flex: 0 0 var(--jp-cell-prompt-width);\n  color: var(--jp-cell-outprompt-font-color);\n  font-family: var(--jp-cell-prompt-font-family);\n  padding: var(--jp-code-padding);\n  letter-spacing: var(--jp-cell-prompt-letter-spacing);\n  line-height: var(--jp-code-line-height);\n  font-size: var(--jp-code-font-size);\n  border: var(--jp-border-width) solid transparent;\n  opacity: var(--jp-cell-prompt-opacity);\n\n  /* Right align prompt text, don't wrap to handle large prompt numbers */\n  text-align: right;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n\n  /* Disable text selection */\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.jp-OutputArea-output {\n  width: 100%;\n  height: auto;\n  overflow: auto;\n  user-select: text;\n  -moz-user-select: text;\n  -webkit-user-select: text;\n  -ms-user-select: text;\n}\n\n.jp-OutputArea .jp-RenderedText {\n  padding-left: 1ch;\n}\n\n/**\n * Prompt overlay.\n */\n\n.jp-OutputArea-promptOverlay {\n  position: absolute;\n  top: 0;\n  width: var(--jp-cell-prompt-width);\n  height: 100%;\n  opacity: 0.5;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.jp-OutputArea-promptOverlay .jp-icon-output {\n  display: none;\n}\n\n.jp-OutputArea-promptOverlay:hover .jp-icon-output {\n  display: initial;\n}\n\n.jp-OutputArea-promptOverlay:hover {\n  background: var(--jp-layout-color2);\n  box-shadow: inset 0 0 1px var(--jp-inverse-layout-color0);\n}\n\n.jp-OutputArea-child .jp-OutputArea-output {\n  flex-grow: 1;\n  flex-shrink: 1;\n}\n\n/**\n * Isolated output.\n */\n.jp-OutputArea-output.jp-mod-isolated {\n  width: 100%;\n  display: block;\n}\n\n/*\nWhen drag events occur, \\`lm-mod-override-cursor\\` is added to the body.\nBecause iframes steal all cursor events, the following two rules are necessary\nto suppress pointer events while resize drags are occurring. There may be a\nbetter solution to this problem.\n*/\nbody.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated {\n  position: relative;\n}\n\nbody.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated::before {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: transparent;\n}\n\n/* pre */\n\n.jp-OutputArea-output pre {\n  border: none;\n  margin: 0;\n  padding: 0;\n  overflow-x: auto;\n  overflow-y: auto;\n  word-break: break-all;\n  word-wrap: break-word;\n  white-space: pre-wrap;\n}\n\n/* tables */\n\n.jp-OutputArea-output.jp-RenderedHTMLCommon table {\n  margin-left: 0;\n  margin-right: 0;\n}\n\n/* description lists */\n\n.jp-OutputArea-output dl,\n.jp-OutputArea-output dt,\n.jp-OutputArea-output dd {\n  display: block;\n}\n\n.jp-OutputArea-output dl {\n  width: 100%;\n  overflow: hidden;\n  padding: 0;\n  margin: 0;\n}\n\n.jp-OutputArea-output dt {\n  font-weight: bold;\n  float: left;\n  width: 20%;\n  padding: 0;\n  margin: 0;\n}\n\n.jp-OutputArea-output dd {\n  float: left;\n  width: 80%;\n  padding: 0;\n  margin: 0;\n}\n\n.jp-ThemedContainer .jp-TrimmedOutputs pre {\n  background: var(--jp-layout-color3);\n  font-size: calc(var(--jp-code-font-size) * 1.4);\n  text-align: center;\n  text-transform: uppercase;\n}\n\n/* Hide the gutter in case of\n *  - nested output areas (e.g. in the case of output widgets)\n *  - mirrored output areas\n */\n.jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt {\n  display: none;\n}\n\n/* Hide empty lines in the output area, for instance due to cleared widgets */\n.jp-OutputArea-prompt:empty {\n  padding: 0;\n  border: 0;\n}\n\n/*-----------------------------------------------------------------------------\n| executeResult is added to any Output-result for the display of the object\n| returned by a cell\n|----------------------------------------------------------------------------*/\n\n.jp-OutputArea-output.jp-OutputArea-executeResult {\n  margin-left: 0;\n  width: 100%;\n  flex: 1 1 auto;\n}\n\n/* Text output with the Out[] prompt needs a top padding to match the\n * alignment of the Out[] prompt itself.\n */\n.jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output {\n  padding-top: var(--jp-code-padding);\n  border-top: var(--jp-border-width) solid transparent;\n}\n\n/*-----------------------------------------------------------------------------\n| The Stdin output\n|----------------------------------------------------------------------------*/\n\n.jp-Stdin-prompt {\n  color: var(--jp-content-font-color0);\n  padding-right: var(--jp-code-padding);\n  vertical-align: baseline;\n  flex: 0 0 auto;\n}\n\n.jp-Stdin-input {\n  font-family: var(--jp-code-font-family);\n  font-size: inherit;\n  color: inherit;\n  background-color: inherit;\n  width: 42%;\n  min-width: 200px;\n\n  /* make sure input baseline aligns with prompt */\n  vertical-align: baseline;\n\n  /* padding + margin = 0.5em between prompt and cursor */\n  padding: 0 0.25em;\n  margin: 0 0.25em;\n  flex: 0 0 70%;\n}\n\n.jp-Stdin-input::placeholder {\n  opacity: 0;\n}\n\n.jp-Stdin-input:focus {\n  box-shadow: none;\n}\n\n.jp-Stdin-input:focus::placeholder {\n  opacity: 1;\n}\n\n.jp-OutputArea-stdin-hiding {\n  /* soft-hide the output, preserving focus */\n  opacity: 0;\n  height: 0;\n}\n\n/*-----------------------------------------------------------------------------\n| Output Area View\n|----------------------------------------------------------------------------*/\n\n.jp-LinkedOutputView .jp-OutputArea {\n  height: 100%;\n  display: block;\n}\n\n.jp-LinkedOutputView .jp-OutputArea-output:only-child {\n  height: 100%;\n}\n\n/*-----------------------------------------------------------------------------\n| Printing\n|----------------------------------------------------------------------------*/\n\n@media print {\n  .jp-OutputArea-child {\n    display: table;\n    table-layout: fixed;\n    break-inside: avoid-page;\n  }\n\n  .jp-OutputArea-prompt {\n    display: table-cell;\n    vertical-align: top;\n  }\n\n  .jp-OutputArea-output {\n    display: table-cell;\n  }\n}\n\n/*-----------------------------------------------------------------------------\n| Mobile\n|----------------------------------------------------------------------------*/\n@media only screen and (width <= 760px) {\n  .jp-OutputArea-child {\n    flex-direction: column;\n  }\n\n  .jp-OutputPrompt {\n    flex: 0 0 auto;\n    text-align: left;\n  }\n\n  .jp-OutputArea-promptOverlay {\n    display: none;\n  }\n}\n\n/* Trimmed outputs warning */\n.jp-TrimmedOutputs > a {\n  margin: 10px;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.jp-TrimmedOutputs > a:hover {\n  text-decoration: none;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/outputarea/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;;8EAG8E;;AAE9E;EACE,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,kCAAkC;EAClC,qCAAqC;EACrC,0CAA0C;EAC1C,8CAA8C;EAC9C,+BAA+B;EAC/B,oDAAoD;EACpD,uCAAuC;EACvC,mCAAmC;EACnC,gDAAgD;EAChD,sCAAsC;;EAEtC,uEAAuE;EACvE,iBAAiB;EACjB,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;;EAEvB,2BAA2B;EAC3B,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,cAAc;EACd,iBAAiB;EACjB,sBAAsB;EACtB,yBAAyB;EACzB,qBAAqB;AACvB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;EAEE;;AAEF;EACE,kBAAkB;EAClB,MAAM;EACN,kCAAkC;EAClC,YAAY;EACZ,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,mCAAmC;EACnC,yDAAyD;AAC3D;;AAEA;EACE,YAAY;EACZ,cAAc;AAChB;;AAEA;;EAEE;AACF;EACE,WAAW;EACX,cAAc;AAChB;;AAEA;;;;;CAKC;AACD;EACE,kBAAkB;AACpB;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,uBAAuB;AACzB;;AAEA,QAAQ;;AAER;EACE,YAAY;EACZ,SAAS;EACT,UAAU;EACV,gBAAgB;EAChB,gBAAgB;EAChB,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;AACvB;;AAEA,WAAW;;AAEX;EACE,cAAc;EACd,eAAe;AACjB;;AAEA,sBAAsB;;AAEtB;;;EAGE,cAAc;AAChB;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,UAAU;EACV,SAAS;AACX;;AAEA;EACE,iBAAiB;EACjB,WAAW;EACX,UAAU;EACV,UAAU;EACV,SAAS;AACX;;AAEA;EACE,WAAW;EACX,UAAU;EACV,UAAU;EACV,SAAS;AACX;;AAEA;EACE,mCAAmC;EACnC,+CAA+C;EAC/C,kBAAkB;EAClB,yBAAyB;AAC3B;;AAEA;;;EAGE;AACF;EACE,aAAa;AACf;;AAEA,6EAA6E;AAC7E;EACE,UAAU;EACV,SAAS;AACX;;AAEA;;;8EAG8E;;AAE9E;EACE,cAAc;EACd,WAAW;EACX,cAAc;AAChB;;AAEA;;EAEE;AACF;EACE,mCAAmC;EACnC,oDAAoD;AACtD;;AAEA;;8EAE8E;;AAE9E;EACE,oCAAoC;EACpC,qCAAqC;EACrC,wBAAwB;EACxB,cAAc;AAChB;;AAEA;EACE,uCAAuC;EACvC,kBAAkB;EAClB,cAAc;EACd,yBAAyB;EACzB,UAAU;EACV,gBAAgB;;EAEhB,gDAAgD;EAChD,wBAAwB;;EAExB,uDAAuD;EACvD,iBAAiB;EACjB,gBAAgB;EAChB,aAAa;AACf;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,2CAA2C;EAC3C,UAAU;EACV,SAAS;AACX;;AAEA;;8EAE8E;;AAE9E;EACE,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,YAAY;AACd;;AAEA;;8EAE8E;;AAE9E;EACE;IACE,cAAc;IACd,mBAAmB;IACnB,wBAAwB;EAC1B;;EAEA;IACE,mBAAmB;IACnB,mBAAmB;EACrB;;EAEA;IACE,mBAAmB;EACrB;AACF;;AAEA;;8EAE8E;AAC9E;EACE;IACE,sBAAsB;EACxB;;EAEA;IACE,cAAc;IACd,gBAAgB;EAClB;;EAEA;IACE,aAAa;EACf;AACF;;AAEA,4BAA4B;AAC5B;EACE,YAAY;EACZ,qBAAqB;EACrB,eAAe;AACjB;;AAEA;EACE,qBAAqB;AACvB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Main OutputArea\\n| OutputArea has a list of Outputs\\n|----------------------------------------------------------------------------*/\\n\\n.jp-OutputArea {\\n  overflow-y: auto;\\n}\\n\\n.jp-OutputArea-child {\\n  display: flex;\\n  flex-direction: row;\\n  width: 100%;\\n  overflow: hidden;\\n}\\n\\n.jp-OutputPrompt {\\n  width: var(--jp-cell-prompt-width);\\n  flex: 0 0 var(--jp-cell-prompt-width);\\n  color: var(--jp-cell-outprompt-font-color);\\n  font-family: var(--jp-cell-prompt-font-family);\\n  padding: var(--jp-code-padding);\\n  letter-spacing: var(--jp-cell-prompt-letter-spacing);\\n  line-height: var(--jp-code-line-height);\\n  font-size: var(--jp-code-font-size);\\n  border: var(--jp-border-width) solid transparent;\\n  opacity: var(--jp-cell-prompt-opacity);\\n\\n  /* Right align prompt text, don't wrap to handle large prompt numbers */\\n  text-align: right;\\n  white-space: nowrap;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n\\n  /* Disable text selection */\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n}\\n\\n.jp-OutputArea-output {\\n  width: 100%;\\n  height: auto;\\n  overflow: auto;\\n  user-select: text;\\n  -moz-user-select: text;\\n  -webkit-user-select: text;\\n  -ms-user-select: text;\\n}\\n\\n.jp-OutputArea .jp-RenderedText {\\n  padding-left: 1ch;\\n}\\n\\n/**\\n * Prompt overlay.\\n */\\n\\n.jp-OutputArea-promptOverlay {\\n  position: absolute;\\n  top: 0;\\n  width: var(--jp-cell-prompt-width);\\n  height: 100%;\\n  opacity: 0.5;\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n}\\n\\n.jp-OutputArea-promptOverlay .jp-icon-output {\\n  display: none;\\n}\\n\\n.jp-OutputArea-promptOverlay:hover .jp-icon-output {\\n  display: initial;\\n}\\n\\n.jp-OutputArea-promptOverlay:hover {\\n  background: var(--jp-layout-color2);\\n  box-shadow: inset 0 0 1px var(--jp-inverse-layout-color0);\\n}\\n\\n.jp-OutputArea-child .jp-OutputArea-output {\\n  flex-grow: 1;\\n  flex-shrink: 1;\\n}\\n\\n/**\\n * Isolated output.\\n */\\n.jp-OutputArea-output.jp-mod-isolated {\\n  width: 100%;\\n  display: block;\\n}\\n\\n/*\\nWhen drag events occur, `lm-mod-override-cursor` is added to the body.\\nBecause iframes steal all cursor events, the following two rules are necessary\\nto suppress pointer events while resize drags are occurring. There may be a\\nbetter solution to this problem.\\n*/\\nbody.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated {\\n  position: relative;\\n}\\n\\nbody.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated::before {\\n  content: '';\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  right: 0;\\n  bottom: 0;\\n  background: transparent;\\n}\\n\\n/* pre */\\n\\n.jp-OutputArea-output pre {\\n  border: none;\\n  margin: 0;\\n  padding: 0;\\n  overflow-x: auto;\\n  overflow-y: auto;\\n  word-break: break-all;\\n  word-wrap: break-word;\\n  white-space: pre-wrap;\\n}\\n\\n/* tables */\\n\\n.jp-OutputArea-output.jp-RenderedHTMLCommon table {\\n  margin-left: 0;\\n  margin-right: 0;\\n}\\n\\n/* description lists */\\n\\n.jp-OutputArea-output dl,\\n.jp-OutputArea-output dt,\\n.jp-OutputArea-output dd {\\n  display: block;\\n}\\n\\n.jp-OutputArea-output dl {\\n  width: 100%;\\n  overflow: hidden;\\n  padding: 0;\\n  margin: 0;\\n}\\n\\n.jp-OutputArea-output dt {\\n  font-weight: bold;\\n  float: left;\\n  width: 20%;\\n  padding: 0;\\n  margin: 0;\\n}\\n\\n.jp-OutputArea-output dd {\\n  float: left;\\n  width: 80%;\\n  padding: 0;\\n  margin: 0;\\n}\\n\\n.jp-ThemedContainer .jp-TrimmedOutputs pre {\\n  background: var(--jp-layout-color3);\\n  font-size: calc(var(--jp-code-font-size) * 1.4);\\n  text-align: center;\\n  text-transform: uppercase;\\n}\\n\\n/* Hide the gutter in case of\\n *  - nested output areas (e.g. in the case of output widgets)\\n *  - mirrored output areas\\n */\\n.jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt {\\n  display: none;\\n}\\n\\n/* Hide empty lines in the output area, for instance due to cleared widgets */\\n.jp-OutputArea-prompt:empty {\\n  padding: 0;\\n  border: 0;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| executeResult is added to any Output-result for the display of the object\\n| returned by a cell\\n|----------------------------------------------------------------------------*/\\n\\n.jp-OutputArea-output.jp-OutputArea-executeResult {\\n  margin-left: 0;\\n  width: 100%;\\n  flex: 1 1 auto;\\n}\\n\\n/* Text output with the Out[] prompt needs a top padding to match the\\n * alignment of the Out[] prompt itself.\\n */\\n.jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output {\\n  padding-top: var(--jp-code-padding);\\n  border-top: var(--jp-border-width) solid transparent;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| The Stdin output\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Stdin-prompt {\\n  color: var(--jp-content-font-color0);\\n  padding-right: var(--jp-code-padding);\\n  vertical-align: baseline;\\n  flex: 0 0 auto;\\n}\\n\\n.jp-Stdin-input {\\n  font-family: var(--jp-code-font-family);\\n  font-size: inherit;\\n  color: inherit;\\n  background-color: inherit;\\n  width: 42%;\\n  min-width: 200px;\\n\\n  /* make sure input baseline aligns with prompt */\\n  vertical-align: baseline;\\n\\n  /* padding + margin = 0.5em between prompt and cursor */\\n  padding: 0 0.25em;\\n  margin: 0 0.25em;\\n  flex: 0 0 70%;\\n}\\n\\n.jp-Stdin-input::placeholder {\\n  opacity: 0;\\n}\\n\\n.jp-Stdin-input:focus {\\n  box-shadow: none;\\n}\\n\\n.jp-Stdin-input:focus::placeholder {\\n  opacity: 1;\\n}\\n\\n.jp-OutputArea-stdin-hiding {\\n  /* soft-hide the output, preserving focus */\\n  opacity: 0;\\n  height: 0;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Output Area View\\n|----------------------------------------------------------------------------*/\\n\\n.jp-LinkedOutputView .jp-OutputArea {\\n  height: 100%;\\n  display: block;\\n}\\n\\n.jp-LinkedOutputView .jp-OutputArea-output:only-child {\\n  height: 100%;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Printing\\n|----------------------------------------------------------------------------*/\\n\\n@media print {\\n  .jp-OutputArea-child {\\n    display: table;\\n    table-layout: fixed;\\n    break-inside: avoid-page;\\n  }\\n\\n  .jp-OutputArea-prompt {\\n    display: table-cell;\\n    vertical-align: top;\\n  }\\n\\n  .jp-OutputArea-output {\\n    display: table-cell;\\n  }\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| Mobile\\n|----------------------------------------------------------------------------*/\\n@media only screen and (width <= 760px) {\\n  .jp-OutputArea-child {\\n    flex-direction: column;\\n  }\\n\\n  .jp-OutputPrompt {\\n    flex: 0 0 auto;\\n    text-align: left;\\n  }\\n\\n  .jp-OutputArea-promptOverlay {\\n    display: none;\\n  }\\n}\\n\\n/* Trimmed outputs warning */\\n.jp-TrimmedOutputs > a {\\n  margin: 10px;\\n  text-decoration: none;\\n  cursor: pointer;\\n}\\n\\n.jp-TrimmedOutputs > a:hover {\\n  text-decoration: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-PDFContainer iframe {\n  position: absolute;\n  z-index: 0;\n  top: 0;\n  right: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.jp-OutputArea .jp-PDFContainer {\n  min-height: 512px;\n}\n\n/*\nWhen drag events occur, \\`lm-mod-override-cursor\\` is added to the body.\nThis reuses the same CSS selector logic as jp-IFrame to prevent embedded\nPDFs from swallowing cursor events.\n*/\nbody.lm-mod-override-cursor .jp-PDFContainer {\n  position: relative;\n}\n\nbody.lm-mod-override-cursor .jp-PDFContainer::before {\n  content: '';\n  position: absolute;\n  z-index: 10;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: transparent;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/pdf-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,kBAAkB;EAClB,UAAU;EACV,MAAM;EACN,QAAQ;EACR,WAAW;EACX,YAAY;AACd;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;;;CAIC;AACD;EACE,kBAAkB;AACpB;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,WAAW;EACX,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,uBAAuB;AACzB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-PDFContainer iframe {\\n  position: absolute;\\n  z-index: 0;\\n  top: 0;\\n  right: 0;\\n  width: 100%;\\n  height: 100%;\\n}\\n\\n.jp-OutputArea .jp-PDFContainer {\\n  min-height: 512px;\\n}\\n\\n/*\\nWhen drag events occur, `lm-mod-override-cursor` is added to the body.\\nThis reuses the same CSS selector logic as jp-IFrame to prevent embedded\\nPDFs from swallowing cursor events.\\n*/\\nbody.lm-mod-override-cursor .jp-PDFContainer {\\n  position: relative;\\n}\\n\\nbody.lm-mod-override-cursor .jp-PDFContainer::before {\\n  content: '';\\n  position: absolute;\\n  z-index: 10;\\n  top: 0;\\n  left: 0;\\n  right: 0;\\n  bottom: 0;\\n  background: transparent;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.jp-pluginmanager {\n  display: grid;\n  grid-template-rows: min-content min-content 1fr;\n}\n\n.jp-pluginmanager-Header,\n.jp-pluginmanager-Disclaimer {\n  padding: 8px;\n}\n\n.jp-pluginmanager-Disclaimer-checkbox {\n  position: relative;\n  top: 2px;\n}\n\n.jp-pluginmanager-AvailableList {\n  overflow: auto;\n}\n\n.jp-pluginmanager-AvailableList > .jp-sortable-table > thead {\n  position: sticky;\n}\n\n.jp-pluginmanager-PluginInUseMessage {\n  max-width: 550px;\n}\n\n.jp-pluginmanager-Header > .jp-FilterBox {\n  width: 100%;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/pluginmanager/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,+CAA+C;AACjD;;AAEA;;EAEE,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,QAAQ;AACV;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,WAAW;AACb\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.jp-pluginmanager {\\n  display: grid;\\n  grid-template-rows: min-content min-content 1fr;\\n}\\n\\n.jp-pluginmanager-Header,\\n.jp-pluginmanager-Disclaimer {\\n  padding: 8px;\\n}\\n\\n.jp-pluginmanager-Disclaimer-checkbox {\\n  position: relative;\\n  top: 2px;\\n}\\n\\n.jp-pluginmanager-AvailableList {\\n  overflow: auto;\\n}\\n\\n.jp-pluginmanager-AvailableList > .jp-sortable-table > thead {\\n  position: sticky;\\n}\\n\\n.jp-pluginmanager-PluginInUseMessage {\\n  max-width: 550px;\\n}\\n\\n.jp-pluginmanager-Header > .jp-FilterBox {\\n  width: 100%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-PropertyInspector {\n  display: flex;\n  color: var(--jp-ui-font-color1);\n  background: var(--jp-layout-color1);\n}\n\n.jp-PropertyInspector-content {\n  flex-grow: 1;\n}\n\n.jp-PropertyInspector-placeholder {\n  text-align: center;\n}\n\n.jp-PropertyInspector-placeholderContent {\n  color: var(--jp-content-font-color2);\n  padding: 8px;\n}\n\n.jp-PropertyInspector-placeholderContent > h3 {\n  margin-bottom: var(--jp-content-heading-margin-bottom);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/property-inspector/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,aAAa;EACb,+BAA+B;EAC/B,mCAAmC;AACrC;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,oCAAoC;EACpC,YAAY;AACd;;AAEA;EACE,sDAAsD;AACxD\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-PropertyInspector {\\n  display: flex;\\n  color: var(--jp-ui-font-color1);\\n  background: var(--jp-layout-color1);\\n}\\n\\n.jp-PropertyInspector-content {\\n  flex-grow: 1;\\n}\\n\\n.jp-PropertyInspector-placeholder {\\n  text-align: center;\\n}\\n\\n.jp-PropertyInspector-placeholderContent {\\n  color: var(--jp-content-font-color2);\\n  padding: 8px;\\n}\\n\\n.jp-PropertyInspector-placeholderContent > h3 {\\n  margin-bottom: var(--jp-content-heading-margin-bottom);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| RenderedText\n|----------------------------------------------------------------------------*/\n\n:root {\n  /* This is the padding value to fill the gaps between lines containing spans with background color. */\n  --jp-private-code-span-padding: calc(\n    (var(--jp-code-line-height) - 1) * var(--jp-code-font-size) / 2\n  );\n}\n\n.jp-RenderedText {\n  text-align: left;\n  padding-left: var(--jp-code-padding);\n  line-height: var(--jp-code-line-height);\n  font-family: var(--jp-code-font-family);\n}\n\n.jp-ThemedContainer .jp-RenderedText pre,\n.jp-ThemedContainer .jp-RenderedJavaScript pre,\n.jp-ThemedContainer .jp-RenderedHTMLCommon pre {\n  color: var(--jp-content-font-color1);\n  font-size: var(--jp-code-font-size);\n  border: none;\n  margin: 0;\n  padding: 0;\n}\n\n.jp-RenderedText pre a[href]:link {\n  text-decoration: none;\n  color: var(--jp-content-link-color);\n}\n\n.jp-RenderedText pre a[href]:hover {\n  text-decoration: underline;\n  color: var(--jp-content-link-hover-color, var(--jp-content-link-color));\n}\n\n.jp-RenderedText pre a[href]:visited {\n  text-decoration: none;\n  color: var(--jp-content-link-visited-color, var(--jp-content-link-color));\n}\n\n/* console foregrounds and backgrounds */\n.jp-RenderedText pre .ansi-black-fg {\n  color: #3e424d;\n}\n\n.jp-RenderedText pre .ansi-red-fg {\n  color: #e75c58;\n}\n\n.jp-RenderedText pre .ansi-green-fg {\n  color: #00a250;\n}\n\n.jp-RenderedText pre .ansi-yellow-fg {\n  color: #ddb62b;\n}\n\n.jp-RenderedText pre .ansi-blue-fg {\n  color: #208ffb;\n}\n\n.jp-RenderedText pre .ansi-magenta-fg {\n  color: #d160c4;\n}\n\n.jp-RenderedText pre .ansi-cyan-fg {\n  color: #60c6c8;\n}\n\n.jp-RenderedText pre .ansi-white-fg {\n  color: #c5c1b4;\n}\n\n.jp-RenderedText pre .ansi-black-bg {\n  background-color: #3e424d;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-red-bg {\n  background-color: #e75c58;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-green-bg {\n  background-color: #00a250;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-yellow-bg {\n  background-color: #ddb62b;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-blue-bg {\n  background-color: #208ffb;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-magenta-bg {\n  background-color: #d160c4;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-cyan-bg {\n  background-color: #60c6c8;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-white-bg {\n  background-color: #c5c1b4;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-black-intense-fg {\n  color: #282c36;\n}\n\n.jp-RenderedText pre .ansi-red-intense-fg {\n  color: #b22b31;\n}\n\n.jp-RenderedText pre .ansi-green-intense-fg {\n  color: #007427;\n}\n\n.jp-RenderedText pre .ansi-yellow-intense-fg {\n  color: #b27d12;\n}\n\n.jp-RenderedText pre .ansi-blue-intense-fg {\n  color: #0065ca;\n}\n\n.jp-RenderedText pre .ansi-magenta-intense-fg {\n  color: #a03196;\n}\n\n.jp-RenderedText pre .ansi-cyan-intense-fg {\n  color: #258f8f;\n}\n\n.jp-RenderedText pre .ansi-white-intense-fg {\n  color: #a1a6b2;\n}\n\n.jp-RenderedText pre .ansi-black-intense-bg {\n  background-color: #282c36;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-red-intense-bg {\n  background-color: #b22b31;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-green-intense-bg {\n  background-color: #007427;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-yellow-intense-bg {\n  background-color: #b27d12;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-blue-intense-bg {\n  background-color: #0065ca;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-magenta-intense-bg {\n  background-color: #a03196;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-cyan-intense-bg {\n  background-color: #258f8f;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-white-intense-bg {\n  background-color: #a1a6b2;\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-default-inverse-fg {\n  color: var(--jp-ui-inverse-font-color0);\n}\n\n.jp-RenderedText pre .ansi-default-inverse-bg {\n  background-color: var(--jp-inverse-layout-color0);\n  padding: var(--jp-private-code-span-padding) 0;\n}\n\n.jp-RenderedText pre .ansi-bold {\n  font-weight: bold;\n}\n\n.jp-RenderedText pre .ansi-underline {\n  text-decoration: underline;\n}\n\n.jp-RenderedText[data-mime-type='application/vnd.jupyter.stderr'] {\n  background: var(--jp-rendermime-error-background);\n  padding-top: var(--jp-code-padding);\n}\n\n/*-----------------------------------------------------------------------------\n| RenderedLatex\n|----------------------------------------------------------------------------*/\n\n.jp-RenderedLatex {\n  color: var(--jp-content-font-color1);\n  font-size: var(--jp-content-font-size1);\n  line-height: var(--jp-content-line-height);\n}\n\n/* Left-justify outputs.*/\n.jp-OutputArea-output.jp-RenderedLatex {\n  padding: var(--jp-code-padding);\n  text-align: left;\n}\n\n/*-----------------------------------------------------------------------------\n| RenderedHTML\n|----------------------------------------------------------------------------*/\n\n.jp-RenderedHTMLCommon {\n  color: var(--jp-content-font-color1);\n  font-family: var(--jp-content-font-family);\n  font-size: var(--jp-content-font-size1);\n  line-height: var(--jp-content-line-height);\n\n  /* Give a bit more R padding on Markdown text to keep line lengths reasonable */\n  padding-right: 20px;\n}\n\n.jp-RenderedHTMLCommon em {\n  font-style: italic;\n}\n\n.jp-RenderedHTMLCommon strong {\n  font-weight: bold;\n}\n\n.jp-RenderedHTMLCommon u {\n  text-decoration: underline;\n}\n\n.jp-RenderedHTMLCommon a:link {\n  text-decoration: none;\n  color: var(--jp-content-link-color);\n}\n\n.jp-RenderedHTMLCommon a:hover {\n  text-decoration: underline;\n  color: var(--jp-content-link-hover-color, var(--jp-content-link-color));\n}\n\n.jp-RenderedHTMLCommon a:visited {\n  text-decoration: none;\n  color: var(--jp-content-link-visited-color, var(--jp-content-link-color));\n}\n\n/* Headings */\n\n.jp-RenderedHTMLCommon h1,\n.jp-RenderedHTMLCommon h2,\n.jp-RenderedHTMLCommon h3,\n.jp-RenderedHTMLCommon h4,\n.jp-RenderedHTMLCommon h5,\n.jp-RenderedHTMLCommon h6 {\n  line-height: var(--jp-content-heading-line-height);\n  font-weight: var(--jp-content-heading-font-weight);\n  font-style: normal;\n  margin: var(--jp-content-heading-margin-top) 0\n    var(--jp-content-heading-margin-bottom) 0;\n  scroll-margin-top: var(--jp-content-heading-margin-top);\n}\n\n.jp-RenderedHTMLCommon h1:first-child,\n.jp-RenderedHTMLCommon h2:first-child,\n.jp-RenderedHTMLCommon h3:first-child,\n.jp-RenderedHTMLCommon h4:first-child,\n.jp-RenderedHTMLCommon h5:first-child,\n.jp-RenderedHTMLCommon h6:first-child {\n  margin-top: calc(0.5 * var(--jp-content-heading-margin-top));\n  scroll-margin-top: calc(0.5 * var(--jp-content-heading-margin-top));\n}\n\n.jp-RenderedHTMLCommon h1:last-child,\n.jp-RenderedHTMLCommon h2:last-child,\n.jp-RenderedHTMLCommon h3:last-child,\n.jp-RenderedHTMLCommon h4:last-child,\n.jp-RenderedHTMLCommon h5:last-child,\n.jp-RenderedHTMLCommon h6:last-child {\n  margin-bottom: calc(0.5 * var(--jp-content-heading-margin-bottom));\n}\n\n.jp-RenderedHTMLCommon h1 {\n  font-size: var(--jp-content-font-size5);\n}\n\n.jp-RenderedHTMLCommon h2 {\n  font-size: var(--jp-content-font-size4);\n}\n\n.jp-RenderedHTMLCommon h3 {\n  font-size: var(--jp-content-font-size3);\n}\n\n.jp-RenderedHTMLCommon h4 {\n  font-size: var(--jp-content-font-size2);\n}\n\n.jp-RenderedHTMLCommon h5 {\n  font-size: var(--jp-content-font-size1);\n}\n\n.jp-RenderedHTMLCommon h6 {\n  font-size: var(--jp-content-font-size0);\n}\n\n/* Lists */\n\n/* stylelint-disable selector-max-type, selector-max-compound-selectors */\n\n.jp-RenderedHTMLCommon ul:not(.list-inline),\n.jp-RenderedHTMLCommon ol:not(.list-inline) {\n  padding-left: 2em;\n}\n\n.jp-RenderedHTMLCommon ul {\n  list-style: disc;\n}\n\n.jp-RenderedHTMLCommon ul ul {\n  list-style: square;\n}\n\n.jp-RenderedHTMLCommon ul ul ul {\n  list-style: circle;\n}\n\n.jp-RenderedHTMLCommon ol {\n  list-style: decimal;\n}\n\n.jp-RenderedHTMLCommon ol ol {\n  list-style: upper-alpha;\n}\n\n.jp-RenderedHTMLCommon ol ol ol {\n  list-style: lower-alpha;\n}\n\n.jp-RenderedHTMLCommon ol ol ol ol {\n  list-style: lower-roman;\n}\n\n.jp-RenderedHTMLCommon ol ol ol ol ol {\n  list-style: decimal;\n}\n\n.jp-RenderedHTMLCommon ol,\n.jp-RenderedHTMLCommon ul {\n  margin-bottom: 1em;\n}\n\n.jp-RenderedHTMLCommon ul ul,\n.jp-RenderedHTMLCommon ul ol,\n.jp-RenderedHTMLCommon ol ul,\n.jp-RenderedHTMLCommon ol ol {\n  margin-bottom: 0;\n}\n\n/* stylelint-enable selector-max-type, selector-max-compound-selectors */\n\n.jp-RenderedHTMLCommon hr {\n  color: var(--jp-border-color2);\n  background-color: var(--jp-border-color1);\n  margin-top: 1em;\n  margin-bottom: 1em;\n}\n\n.jp-ThemedContainer .jp-RenderedHTMLCommon > pre {\n  margin: 1.5em 2em;\n}\n\n.jp-ThemedContainer .jp-RenderedHTMLCommon pre,\n.jp-ThemedContainer .jp-RenderedHTMLCommon code {\n  border: 0;\n  background-color: var(--jp-layout-color0);\n  color: var(--jp-content-font-color1);\n  font-family: var(--jp-code-font-family);\n  font-size: inherit;\n  line-height: var(--jp-code-line-height);\n  padding: 0;\n  white-space: pre-wrap;\n}\n\n.jp-ThemedContainer .jp-RenderedHTMLCommon :not(pre) > code {\n  background-color: var(--jp-layout-color2);\n  padding: 1px 5px;\n}\n\n/* Tables */\n\n.jp-RenderedHTMLCommon table {\n  border-collapse: collapse;\n  border-spacing: 0;\n  border: none;\n  color: var(--jp-ui-font-color1);\n  font-size: var(--jp-ui-font-size1);\n  table-layout: fixed;\n  margin-left: auto;\n  margin-bottom: 1em;\n  margin-right: auto;\n}\n\n.jp-RenderedHTMLCommon thead {\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color1);\n  vertical-align: bottom;\n}\n\n.jp-RenderedHTMLCommon td,\n.jp-RenderedHTMLCommon th,\n.jp-RenderedHTMLCommon tr {\n  vertical-align: middle;\n  padding: 0.5em;\n  line-height: normal;\n  white-space: normal;\n  max-width: none;\n  border: none;\n}\n\n.jp-RenderedMarkdown.jp-RenderedHTMLCommon td,\n.jp-RenderedMarkdown.jp-RenderedHTMLCommon th {\n  max-width: none;\n}\n\n:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon td,\n:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon th,\n:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon tr {\n  text-align: right;\n}\n\n.jp-RenderedHTMLCommon th {\n  font-weight: bold;\n}\n\n.jp-RenderedHTMLCommon tbody tr:nth-child(odd) {\n  background: var(--jp-layout-color0);\n}\n\n.jp-RenderedHTMLCommon tbody tr:nth-child(even) {\n  background: var(--jp-rendermime-table-row-background);\n}\n\n.jp-RenderedHTMLCommon tbody tr:hover {\n  background: var(--jp-rendermime-table-row-hover-background);\n}\n\n.jp-RenderedHTMLCommon p {\n  text-align: left;\n  margin: 0;\n  margin-bottom: 1em;\n}\n\n.jp-RenderedHTMLCommon img {\n  -moz-force-broken-image-icon: 1;\n}\n\n/* Restrict to direct children as other images could be nested in other content. */\n.jp-RenderedHTMLCommon > img {\n  display: block;\n  margin-left: 0;\n  margin-right: 0;\n  margin-bottom: 1em;\n}\n\n/* Change color behind transparent images if they need it... */\n[data-jp-theme-light='false'] .jp-RenderedImage img.jp-needs-light-background {\n  background-color: var(--jp-inverse-layout-color1);\n}\n\n[data-jp-theme-light='true'] .jp-RenderedImage img.jp-needs-dark-background {\n  background-color: var(--jp-inverse-layout-color1);\n}\n\n.jp-RenderedHTMLCommon img,\n.jp-RenderedImage img,\n.jp-RenderedHTMLCommon svg,\n.jp-RenderedSVG svg {\n  max-width: 100%;\n  height: auto;\n}\n\n.jp-RenderedHTMLCommon img.jp-mod-unconfined,\n.jp-RenderedImage img.jp-mod-unconfined,\n.jp-RenderedHTMLCommon svg.jp-mod-unconfined,\n.jp-RenderedSVG svg.jp-mod-unconfined {\n  max-width: none;\n}\n\n.jp-RenderedHTMLCommon .alert {\n  padding: var(--jp-notebook-padding);\n  border: var(--jp-border-width) solid transparent;\n  border-radius: var(--jp-border-radius);\n  margin-bottom: 1em;\n}\n\n.jp-RenderedHTMLCommon .alert-info {\n  color: var(--jp-info-color0);\n  background-color: var(--jp-info-color3);\n  border-color: var(--jp-info-color2);\n}\n\n.jp-RenderedHTMLCommon .alert-info hr {\n  border-color: var(--jp-info-color3);\n}\n\n.jp-RenderedHTMLCommon .alert-info > p:last-child,\n.jp-RenderedHTMLCommon .alert-info > ul:last-child {\n  margin-bottom: 0;\n}\n\n.jp-RenderedHTMLCommon .alert-warning {\n  color: var(--jp-warn-color0);\n  background-color: var(--jp-warn-color3);\n  border-color: var(--jp-warn-color2);\n}\n\n.jp-RenderedHTMLCommon .alert-warning hr {\n  border-color: var(--jp-warn-color3);\n}\n\n.jp-RenderedHTMLCommon .alert-warning > p:last-child,\n.jp-RenderedHTMLCommon .alert-warning > ul:last-child {\n  margin-bottom: 0;\n}\n\n.jp-RenderedHTMLCommon .alert-success {\n  color: var(--jp-success-color0);\n  background-color: var(--jp-success-color3);\n  border-color: var(--jp-success-color2);\n}\n\n.jp-RenderedHTMLCommon .alert-success hr {\n  border-color: var(--jp-success-color3);\n}\n\n.jp-RenderedHTMLCommon .alert-success > p:last-child,\n.jp-RenderedHTMLCommon .alert-success > ul:last-child {\n  margin-bottom: 0;\n}\n\n.jp-RenderedHTMLCommon .alert-danger {\n  color: var(--jp-error-color0);\n  background-color: var(--jp-error-color3);\n  border-color: var(--jp-error-color2);\n}\n\n.jp-RenderedHTMLCommon .alert-danger hr {\n  border-color: var(--jp-error-color3);\n}\n\n.jp-RenderedHTMLCommon .alert-danger > p:last-child,\n.jp-RenderedHTMLCommon .alert-danger > ul:last-child {\n  margin-bottom: 0;\n}\n\n.jp-RenderedHTMLCommon blockquote {\n  margin: 1em 2em;\n  padding: 0 1em;\n  border-left: 5px solid var(--jp-border-color2);\n}\n\na.jp-InternalAnchorLink {\n  visibility: hidden;\n  margin-left: 8px;\n  color: var(--md-blue-800, #1565c0);\n}\n\nh1:hover .jp-InternalAnchorLink,\nh2:hover .jp-InternalAnchorLink,\nh3:hover .jp-InternalAnchorLink,\nh4:hover .jp-InternalAnchorLink,\nh5:hover .jp-InternalAnchorLink,\nh6:hover .jp-InternalAnchorLink {\n  visibility: visible;\n}\n\n.jp-ThemedContainer .jp-RenderedHTMLCommon kbd {\n  background-color: var(--jp-rendermime-table-row-background);\n  border: 1px solid var(--jp-border-color0);\n  border-bottom-color: var(--jp-border-color2);\n  border-radius: 3px;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n  display: inline-block;\n  font-size: var(--jp-ui-font-size0);\n  line-height: 1em;\n  padding: 0.2em 0.5em;\n}\n\n/* Most direct children of .jp-RenderedHTMLCommon have a margin-bottom of 1.0.\n * At the bottom of cells this is a bit too much as there is also spacing\n * between cells. Going all the way to 0 gets too tight between markdown and\n * code cells.\n */\n.jp-RenderedHTMLCommon > *:last-child {\n  margin-bottom: 0.5em;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/rendermime/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E;EACE,qGAAqG;EACrG;;GAEC;AACH;;AAEA;EACE,gBAAgB;EAChB,oCAAoC;EACpC,uCAAuC;EACvC,uCAAuC;AACzC;;AAEA;;;EAGE,oCAAoC;EACpC,mCAAmC;EACnC,YAAY;EACZ,SAAS;EACT,UAAU;AACZ;;AAEA;EACE,qBAAqB;EACrB,mCAAmC;AACrC;;AAEA;EACE,0BAA0B;EAC1B,uEAAuE;AACzE;;AAEA;EACE,qBAAqB;EACrB,yEAAyE;AAC3E;;AAEA,wCAAwC;AACxC;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;AAChD;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,iDAAiD;EACjD,8CAA8C;AAChD;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,iDAAiD;EACjD,mCAAmC;AACrC;;AAEA;;8EAE8E;;AAE9E;EACE,oCAAoC;EACpC,uCAAuC;EACvC,0CAA0C;AAC5C;;AAEA,yBAAyB;AACzB;EACE,+BAA+B;EAC/B,gBAAgB;AAClB;;AAEA;;8EAE8E;;AAE9E;EACE,oCAAoC;EACpC,0CAA0C;EAC1C,uCAAuC;EACvC,0CAA0C;;EAE1C,+EAA+E;EAC/E,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,qBAAqB;EACrB,mCAAmC;AACrC;;AAEA;EACE,0BAA0B;EAC1B,uEAAuE;AACzE;;AAEA;EACE,qBAAqB;EACrB,yEAAyE;AAC3E;;AAEA,aAAa;;AAEb;;;;;;EAME,kDAAkD;EAClD,kDAAkD;EAClD,kBAAkB;EAClB;6CAC2C;EAC3C,uDAAuD;AACzD;;AAEA;;;;;;EAME,4DAA4D;EAC5D,mEAAmE;AACrE;;AAEA;;;;;;EAME,kEAAkE;AACpE;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA,UAAU;;AAEV,yEAAyE;;AAEzE;;EAEE,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;;EAEE,kBAAkB;AACpB;;AAEA;;;;EAIE,gBAAgB;AAClB;;AAEA,wEAAwE;;AAExE;EACE,8BAA8B;EAC9B,yCAAyC;EACzC,eAAe;EACf,kBAAkB;AACpB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;EAEE,SAAS;EACT,yCAAyC;EACzC,oCAAoC;EACpC,uCAAuC;EACvC,kBAAkB;EAClB,uCAAuC;EACvC,UAAU;EACV,qBAAqB;AACvB;;AAEA;EACE,yCAAyC;EACzC,gBAAgB;AAClB;;AAEA,WAAW;;AAEX;EACE,yBAAyB;EACzB,iBAAiB;EACjB,YAAY;EACZ,+BAA+B;EAC/B,kCAAkC;EAClC,mBAAmB;EACnB,iBAAiB;EACjB,kBAAkB;EAClB,kBAAkB;AACpB;;AAEA;EACE,mEAAmE;EACnE,sBAAsB;AACxB;;AAEA;;;EAGE,sBAAsB;EACtB,cAAc;EACd,mBAAmB;EACnB,mBAAmB;EACnB,eAAe;EACf,YAAY;AACd;;AAEA;;EAEE,eAAe;AACjB;;AAEA;;;EAGE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,qDAAqD;AACvD;;AAEA;EACE,2DAA2D;AAC7D;;AAEA;EACE,gBAAgB;EAChB,SAAS;EACT,kBAAkB;AACpB;;AAEA;EACE,+BAA+B;AACjC;;AAEA,kFAAkF;AAClF;EACE,cAAc;EACd,cAAc;EACd,eAAe;EACf,kBAAkB;AACpB;;AAEA,8DAA8D;AAC9D;EACE,iDAAiD;AACnD;;AAEA;EACE,iDAAiD;AACnD;;AAEA;;;;EAIE,eAAe;EACf,YAAY;AACd;;AAEA;;;;EAIE,eAAe;AACjB;;AAEA;EACE,mCAAmC;EACnC,gDAAgD;EAChD,sCAAsC;EACtC,kBAAkB;AACpB;;AAEA;EACE,4BAA4B;EAC5B,uCAAuC;EACvC,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;;EAEE,gBAAgB;AAClB;;AAEA;EACE,4BAA4B;EAC5B,uCAAuC;EACvC,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;;EAEE,gBAAgB;AAClB;;AAEA;EACE,+BAA+B;EAC/B,0CAA0C;EAC1C,sCAAsC;AACxC;;AAEA;EACE,sCAAsC;AACxC;;AAEA;;EAEE,gBAAgB;AAClB;;AAEA;EACE,6BAA6B;EAC7B,wCAAwC;EACxC,oCAAoC;AACtC;;AAEA;EACE,oCAAoC;AACtC;;AAEA;;EAEE,gBAAgB;AAClB;;AAEA;EACE,eAAe;EACf,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,kBAAkB;EAClB,gBAAgB;EAChB,kCAAkC;AACpC;;AAEA;;;;;;EAME,mBAAmB;AACrB;;AAEA;EACE,2DAA2D;EAC3D,yCAAyC;EACzC,4CAA4C;EAC5C,kBAAkB;EAClB,8CAA8C;EAC9C,qBAAqB;EACrB,kCAAkC;EAClC,gBAAgB;EAChB,oBAAoB;AACtB;;AAEA;;;;EAIE;AACF;EACE,oBAAoB;AACtB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| RenderedText\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  /* This is the padding value to fill the gaps between lines containing spans with background color. */\\n  --jp-private-code-span-padding: calc(\\n    (var(--jp-code-line-height) - 1) * var(--jp-code-font-size) / 2\\n  );\\n}\\n\\n.jp-RenderedText {\\n  text-align: left;\\n  padding-left: var(--jp-code-padding);\\n  line-height: var(--jp-code-line-height);\\n  font-family: var(--jp-code-font-family);\\n}\\n\\n.jp-ThemedContainer .jp-RenderedText pre,\\n.jp-ThemedContainer .jp-RenderedJavaScript pre,\\n.jp-ThemedContainer .jp-RenderedHTMLCommon pre {\\n  color: var(--jp-content-font-color1);\\n  font-size: var(--jp-code-font-size);\\n  border: none;\\n  margin: 0;\\n  padding: 0;\\n}\\n\\n.jp-RenderedText pre a[href]:link {\\n  text-decoration: none;\\n  color: var(--jp-content-link-color);\\n}\\n\\n.jp-RenderedText pre a[href]:hover {\\n  text-decoration: underline;\\n  color: var(--jp-content-link-hover-color, var(--jp-content-link-color));\\n}\\n\\n.jp-RenderedText pre a[href]:visited {\\n  text-decoration: none;\\n  color: var(--jp-content-link-visited-color, var(--jp-content-link-color));\\n}\\n\\n/* console foregrounds and backgrounds */\\n.jp-RenderedText pre .ansi-black-fg {\\n  color: #3e424d;\\n}\\n\\n.jp-RenderedText pre .ansi-red-fg {\\n  color: #e75c58;\\n}\\n\\n.jp-RenderedText pre .ansi-green-fg {\\n  color: #00a250;\\n}\\n\\n.jp-RenderedText pre .ansi-yellow-fg {\\n  color: #ddb62b;\\n}\\n\\n.jp-RenderedText pre .ansi-blue-fg {\\n  color: #208ffb;\\n}\\n\\n.jp-RenderedText pre .ansi-magenta-fg {\\n  color: #d160c4;\\n}\\n\\n.jp-RenderedText pre .ansi-cyan-fg {\\n  color: #60c6c8;\\n}\\n\\n.jp-RenderedText pre .ansi-white-fg {\\n  color: #c5c1b4;\\n}\\n\\n.jp-RenderedText pre .ansi-black-bg {\\n  background-color: #3e424d;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-red-bg {\\n  background-color: #e75c58;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-green-bg {\\n  background-color: #00a250;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-yellow-bg {\\n  background-color: #ddb62b;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-blue-bg {\\n  background-color: #208ffb;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-magenta-bg {\\n  background-color: #d160c4;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-cyan-bg {\\n  background-color: #60c6c8;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-white-bg {\\n  background-color: #c5c1b4;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-black-intense-fg {\\n  color: #282c36;\\n}\\n\\n.jp-RenderedText pre .ansi-red-intense-fg {\\n  color: #b22b31;\\n}\\n\\n.jp-RenderedText pre .ansi-green-intense-fg {\\n  color: #007427;\\n}\\n\\n.jp-RenderedText pre .ansi-yellow-intense-fg {\\n  color: #b27d12;\\n}\\n\\n.jp-RenderedText pre .ansi-blue-intense-fg {\\n  color: #0065ca;\\n}\\n\\n.jp-RenderedText pre .ansi-magenta-intense-fg {\\n  color: #a03196;\\n}\\n\\n.jp-RenderedText pre .ansi-cyan-intense-fg {\\n  color: #258f8f;\\n}\\n\\n.jp-RenderedText pre .ansi-white-intense-fg {\\n  color: #a1a6b2;\\n}\\n\\n.jp-RenderedText pre .ansi-black-intense-bg {\\n  background-color: #282c36;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-red-intense-bg {\\n  background-color: #b22b31;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-green-intense-bg {\\n  background-color: #007427;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-yellow-intense-bg {\\n  background-color: #b27d12;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-blue-intense-bg {\\n  background-color: #0065ca;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-magenta-intense-bg {\\n  background-color: #a03196;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-cyan-intense-bg {\\n  background-color: #258f8f;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-white-intense-bg {\\n  background-color: #a1a6b2;\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-default-inverse-fg {\\n  color: var(--jp-ui-inverse-font-color0);\\n}\\n\\n.jp-RenderedText pre .ansi-default-inverse-bg {\\n  background-color: var(--jp-inverse-layout-color0);\\n  padding: var(--jp-private-code-span-padding) 0;\\n}\\n\\n.jp-RenderedText pre .ansi-bold {\\n  font-weight: bold;\\n}\\n\\n.jp-RenderedText pre .ansi-underline {\\n  text-decoration: underline;\\n}\\n\\n.jp-RenderedText[data-mime-type='application/vnd.jupyter.stderr'] {\\n  background: var(--jp-rendermime-error-background);\\n  padding-top: var(--jp-code-padding);\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| RenderedLatex\\n|----------------------------------------------------------------------------*/\\n\\n.jp-RenderedLatex {\\n  color: var(--jp-content-font-color1);\\n  font-size: var(--jp-content-font-size1);\\n  line-height: var(--jp-content-line-height);\\n}\\n\\n/* Left-justify outputs.*/\\n.jp-OutputArea-output.jp-RenderedLatex {\\n  padding: var(--jp-code-padding);\\n  text-align: left;\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| RenderedHTML\\n|----------------------------------------------------------------------------*/\\n\\n.jp-RenderedHTMLCommon {\\n  color: var(--jp-content-font-color1);\\n  font-family: var(--jp-content-font-family);\\n  font-size: var(--jp-content-font-size1);\\n  line-height: var(--jp-content-line-height);\\n\\n  /* Give a bit more R padding on Markdown text to keep line lengths reasonable */\\n  padding-right: 20px;\\n}\\n\\n.jp-RenderedHTMLCommon em {\\n  font-style: italic;\\n}\\n\\n.jp-RenderedHTMLCommon strong {\\n  font-weight: bold;\\n}\\n\\n.jp-RenderedHTMLCommon u {\\n  text-decoration: underline;\\n}\\n\\n.jp-RenderedHTMLCommon a:link {\\n  text-decoration: none;\\n  color: var(--jp-content-link-color);\\n}\\n\\n.jp-RenderedHTMLCommon a:hover {\\n  text-decoration: underline;\\n  color: var(--jp-content-link-hover-color, var(--jp-content-link-color));\\n}\\n\\n.jp-RenderedHTMLCommon a:visited {\\n  text-decoration: none;\\n  color: var(--jp-content-link-visited-color, var(--jp-content-link-color));\\n}\\n\\n/* Headings */\\n\\n.jp-RenderedHTMLCommon h1,\\n.jp-RenderedHTMLCommon h2,\\n.jp-RenderedHTMLCommon h3,\\n.jp-RenderedHTMLCommon h4,\\n.jp-RenderedHTMLCommon h5,\\n.jp-RenderedHTMLCommon h6 {\\n  line-height: var(--jp-content-heading-line-height);\\n  font-weight: var(--jp-content-heading-font-weight);\\n  font-style: normal;\\n  margin: var(--jp-content-heading-margin-top) 0\\n    var(--jp-content-heading-margin-bottom) 0;\\n  scroll-margin-top: var(--jp-content-heading-margin-top);\\n}\\n\\n.jp-RenderedHTMLCommon h1:first-child,\\n.jp-RenderedHTMLCommon h2:first-child,\\n.jp-RenderedHTMLCommon h3:first-child,\\n.jp-RenderedHTMLCommon h4:first-child,\\n.jp-RenderedHTMLCommon h5:first-child,\\n.jp-RenderedHTMLCommon h6:first-child {\\n  margin-top: calc(0.5 * var(--jp-content-heading-margin-top));\\n  scroll-margin-top: calc(0.5 * var(--jp-content-heading-margin-top));\\n}\\n\\n.jp-RenderedHTMLCommon h1:last-child,\\n.jp-RenderedHTMLCommon h2:last-child,\\n.jp-RenderedHTMLCommon h3:last-child,\\n.jp-RenderedHTMLCommon h4:last-child,\\n.jp-RenderedHTMLCommon h5:last-child,\\n.jp-RenderedHTMLCommon h6:last-child {\\n  margin-bottom: calc(0.5 * var(--jp-content-heading-margin-bottom));\\n}\\n\\n.jp-RenderedHTMLCommon h1 {\\n  font-size: var(--jp-content-font-size5);\\n}\\n\\n.jp-RenderedHTMLCommon h2 {\\n  font-size: var(--jp-content-font-size4);\\n}\\n\\n.jp-RenderedHTMLCommon h3 {\\n  font-size: var(--jp-content-font-size3);\\n}\\n\\n.jp-RenderedHTMLCommon h4 {\\n  font-size: var(--jp-content-font-size2);\\n}\\n\\n.jp-RenderedHTMLCommon h5 {\\n  font-size: var(--jp-content-font-size1);\\n}\\n\\n.jp-RenderedHTMLCommon h6 {\\n  font-size: var(--jp-content-font-size0);\\n}\\n\\n/* Lists */\\n\\n/* stylelint-disable selector-max-type, selector-max-compound-selectors */\\n\\n.jp-RenderedHTMLCommon ul:not(.list-inline),\\n.jp-RenderedHTMLCommon ol:not(.list-inline) {\\n  padding-left: 2em;\\n}\\n\\n.jp-RenderedHTMLCommon ul {\\n  list-style: disc;\\n}\\n\\n.jp-RenderedHTMLCommon ul ul {\\n  list-style: square;\\n}\\n\\n.jp-RenderedHTMLCommon ul ul ul {\\n  list-style: circle;\\n}\\n\\n.jp-RenderedHTMLCommon ol {\\n  list-style: decimal;\\n}\\n\\n.jp-RenderedHTMLCommon ol ol {\\n  list-style: upper-alpha;\\n}\\n\\n.jp-RenderedHTMLCommon ol ol ol {\\n  list-style: lower-alpha;\\n}\\n\\n.jp-RenderedHTMLCommon ol ol ol ol {\\n  list-style: lower-roman;\\n}\\n\\n.jp-RenderedHTMLCommon ol ol ol ol ol {\\n  list-style: decimal;\\n}\\n\\n.jp-RenderedHTMLCommon ol,\\n.jp-RenderedHTMLCommon ul {\\n  margin-bottom: 1em;\\n}\\n\\n.jp-RenderedHTMLCommon ul ul,\\n.jp-RenderedHTMLCommon ul ol,\\n.jp-RenderedHTMLCommon ol ul,\\n.jp-RenderedHTMLCommon ol ol {\\n  margin-bottom: 0;\\n}\\n\\n/* stylelint-enable selector-max-type, selector-max-compound-selectors */\\n\\n.jp-RenderedHTMLCommon hr {\\n  color: var(--jp-border-color2);\\n  background-color: var(--jp-border-color1);\\n  margin-top: 1em;\\n  margin-bottom: 1em;\\n}\\n\\n.jp-ThemedContainer .jp-RenderedHTMLCommon > pre {\\n  margin: 1.5em 2em;\\n}\\n\\n.jp-ThemedContainer .jp-RenderedHTMLCommon pre,\\n.jp-ThemedContainer .jp-RenderedHTMLCommon code {\\n  border: 0;\\n  background-color: var(--jp-layout-color0);\\n  color: var(--jp-content-font-color1);\\n  font-family: var(--jp-code-font-family);\\n  font-size: inherit;\\n  line-height: var(--jp-code-line-height);\\n  padding: 0;\\n  white-space: pre-wrap;\\n}\\n\\n.jp-ThemedContainer .jp-RenderedHTMLCommon :not(pre) > code {\\n  background-color: var(--jp-layout-color2);\\n  padding: 1px 5px;\\n}\\n\\n/* Tables */\\n\\n.jp-RenderedHTMLCommon table {\\n  border-collapse: collapse;\\n  border-spacing: 0;\\n  border: none;\\n  color: var(--jp-ui-font-color1);\\n  font-size: var(--jp-ui-font-size1);\\n  table-layout: fixed;\\n  margin-left: auto;\\n  margin-bottom: 1em;\\n  margin-right: auto;\\n}\\n\\n.jp-RenderedHTMLCommon thead {\\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color1);\\n  vertical-align: bottom;\\n}\\n\\n.jp-RenderedHTMLCommon td,\\n.jp-RenderedHTMLCommon th,\\n.jp-RenderedHTMLCommon tr {\\n  vertical-align: middle;\\n  padding: 0.5em;\\n  line-height: normal;\\n  white-space: normal;\\n  max-width: none;\\n  border: none;\\n}\\n\\n.jp-RenderedMarkdown.jp-RenderedHTMLCommon td,\\n.jp-RenderedMarkdown.jp-RenderedHTMLCommon th {\\n  max-width: none;\\n}\\n\\n:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon td,\\n:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon th,\\n:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon tr {\\n  text-align: right;\\n}\\n\\n.jp-RenderedHTMLCommon th {\\n  font-weight: bold;\\n}\\n\\n.jp-RenderedHTMLCommon tbody tr:nth-child(odd) {\\n  background: var(--jp-layout-color0);\\n}\\n\\n.jp-RenderedHTMLCommon tbody tr:nth-child(even) {\\n  background: var(--jp-rendermime-table-row-background);\\n}\\n\\n.jp-RenderedHTMLCommon tbody tr:hover {\\n  background: var(--jp-rendermime-table-row-hover-background);\\n}\\n\\n.jp-RenderedHTMLCommon p {\\n  text-align: left;\\n  margin: 0;\\n  margin-bottom: 1em;\\n}\\n\\n.jp-RenderedHTMLCommon img {\\n  -moz-force-broken-image-icon: 1;\\n}\\n\\n/* Restrict to direct children as other images could be nested in other content. */\\n.jp-RenderedHTMLCommon > img {\\n  display: block;\\n  margin-left: 0;\\n  margin-right: 0;\\n  margin-bottom: 1em;\\n}\\n\\n/* Change color behind transparent images if they need it... */\\n[data-jp-theme-light='false'] .jp-RenderedImage img.jp-needs-light-background {\\n  background-color: var(--jp-inverse-layout-color1);\\n}\\n\\n[data-jp-theme-light='true'] .jp-RenderedImage img.jp-needs-dark-background {\\n  background-color: var(--jp-inverse-layout-color1);\\n}\\n\\n.jp-RenderedHTMLCommon img,\\n.jp-RenderedImage img,\\n.jp-RenderedHTMLCommon svg,\\n.jp-RenderedSVG svg {\\n  max-width: 100%;\\n  height: auto;\\n}\\n\\n.jp-RenderedHTMLCommon img.jp-mod-unconfined,\\n.jp-RenderedImage img.jp-mod-unconfined,\\n.jp-RenderedHTMLCommon svg.jp-mod-unconfined,\\n.jp-RenderedSVG svg.jp-mod-unconfined {\\n  max-width: none;\\n}\\n\\n.jp-RenderedHTMLCommon .alert {\\n  padding: var(--jp-notebook-padding);\\n  border: var(--jp-border-width) solid transparent;\\n  border-radius: var(--jp-border-radius);\\n  margin-bottom: 1em;\\n}\\n\\n.jp-RenderedHTMLCommon .alert-info {\\n  color: var(--jp-info-color0);\\n  background-color: var(--jp-info-color3);\\n  border-color: var(--jp-info-color2);\\n}\\n\\n.jp-RenderedHTMLCommon .alert-info hr {\\n  border-color: var(--jp-info-color3);\\n}\\n\\n.jp-RenderedHTMLCommon .alert-info > p:last-child,\\n.jp-RenderedHTMLCommon .alert-info > ul:last-child {\\n  margin-bottom: 0;\\n}\\n\\n.jp-RenderedHTMLCommon .alert-warning {\\n  color: var(--jp-warn-color0);\\n  background-color: var(--jp-warn-color3);\\n  border-color: var(--jp-warn-color2);\\n}\\n\\n.jp-RenderedHTMLCommon .alert-warning hr {\\n  border-color: var(--jp-warn-color3);\\n}\\n\\n.jp-RenderedHTMLCommon .alert-warning > p:last-child,\\n.jp-RenderedHTMLCommon .alert-warning > ul:last-child {\\n  margin-bottom: 0;\\n}\\n\\n.jp-RenderedHTMLCommon .alert-success {\\n  color: var(--jp-success-color0);\\n  background-color: var(--jp-success-color3);\\n  border-color: var(--jp-success-color2);\\n}\\n\\n.jp-RenderedHTMLCommon .alert-success hr {\\n  border-color: var(--jp-success-color3);\\n}\\n\\n.jp-RenderedHTMLCommon .alert-success > p:last-child,\\n.jp-RenderedHTMLCommon .alert-success > ul:last-child {\\n  margin-bottom: 0;\\n}\\n\\n.jp-RenderedHTMLCommon .alert-danger {\\n  color: var(--jp-error-color0);\\n  background-color: var(--jp-error-color3);\\n  border-color: var(--jp-error-color2);\\n}\\n\\n.jp-RenderedHTMLCommon .alert-danger hr {\\n  border-color: var(--jp-error-color3);\\n}\\n\\n.jp-RenderedHTMLCommon .alert-danger > p:last-child,\\n.jp-RenderedHTMLCommon .alert-danger > ul:last-child {\\n  margin-bottom: 0;\\n}\\n\\n.jp-RenderedHTMLCommon blockquote {\\n  margin: 1em 2em;\\n  padding: 0 1em;\\n  border-left: 5px solid var(--jp-border-color2);\\n}\\n\\na.jp-InternalAnchorLink {\\n  visibility: hidden;\\n  margin-left: 8px;\\n  color: var(--md-blue-800, #1565c0);\\n}\\n\\nh1:hover .jp-InternalAnchorLink,\\nh2:hover .jp-InternalAnchorLink,\\nh3:hover .jp-InternalAnchorLink,\\nh4:hover .jp-InternalAnchorLink,\\nh5:hover .jp-InternalAnchorLink,\\nh6:hover .jp-InternalAnchorLink {\\n  visibility: visible;\\n}\\n\\n.jp-ThemedContainer .jp-RenderedHTMLCommon kbd {\\n  background-color: var(--jp-rendermime-table-row-background);\\n  border: 1px solid var(--jp-border-color0);\\n  border-bottom-color: var(--jp-border-color2);\\n  border-radius: 3px;\\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\\n  display: inline-block;\\n  font-size: var(--jp-ui-font-size0);\\n  line-height: 1em;\\n  padding: 0.2em 0.5em;\\n}\\n\\n/* Most direct children of .jp-RenderedHTMLCommon have a margin-bottom of 1.0.\\n * At the bottom of cells this is a bit too much as there is also spacing\\n * between cells. Going all the way to 0 gets too tight between markdown and\\n * code cells.\\n */\\n.jp-RenderedHTMLCommon > *:last-child {\\n  margin-bottom: 0.5em;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.jp-RunningSessions {\n  display: flex;\n  flex-direction: column;\n  min-width: var(--jp-sidebar-min-width);\n  color: var(--jp-ui-font-color1);\n  background: var(--jp-layout-color1);\n\n  /* This is needed so that all font sizing of children done in ems is\n   * relative to this base size */\n  font-size: var(--jp-ui-font-size1);\n}\n\n.jp-RunningSessions > .jp-SidePanel-toolbar::part(positioning-region) {\n  justify-content: flex-end;\n}\n\n.jp-RunningSessions-section {\n  min-height: 50px;\n  overflow: auto;\n}\n\n.jp-RunningSessions-sectionContainer {\n  margin: 0;\n  padding: 0;\n}\n\n.jp-RunningSessions-sectionList {\n  display: block;\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n  padding-left: 14px;\n}\n\n.jp-RunningSessions-viewButton[aria-pressed='true'] {\n  box-shadow: none;\n}\n\n/* @deprecated For backward compatibility when sessions manager does not specify supportsMultipleViews */\n.jp-mod-running-list-view .jp-RunningSessions-sectionList {\n  padding-left: 0;\n}\n\n/* @deprecated For backward compatibility when sessions manager does not specify supportsMultipleViews */\n.jp-mod-running-list-view .jp-mod-running-leaf {\n  margin-left: 0;\n}\n\n/* @deprecated For backward compatibility when sessions manager does not specify supportsMultipleViews */\n.jp-mod-running-list-view\n  .jp-RunningSessions-item.jp-mod-kernelspec::part(positioning-region),\n.jp-mod-running-list-view\n  .jp-RunningSessions-item.jp-mod-kernel::part(positioning-region) {\n  display: none;\n}\n\n/* @deprecated For backward compatibility when sessions manager does not specify supportsMultipleViews */\n.jp-mod-running-list-view\n  .jp-RunningSessions-item.jp-mod-kernel-widget::part(content-region) {\n  margin-inline-start: -2.6em;\n}\n\n.jp-RunningSessions-item.jp-mod-kernelspec,\n.jp-RunningSessions-item.jp-mod-kernel {\n  user-select: none;\n}\n\n.jp-RunningSessions-item-label-kernel-id {\n  color: var(--jp-ui-font-color3);\n}\n\n.jp-RunningSessions-collapseButton[aria-pressed='true'] {\n  box-shadow: none;\n}\n\n.jp-RunningSessions-toolbar {\n  min-width: max-content;\n}\n\nimg.jp-RunningSessions-icon,\nspan.jp-RunningSessions-icon > svg {\n  width: 16px;\n  height: 16px;\n}\n\nimg.jp-RunningSessions-icon {\n  margin-top: 4px;\n  object-fit: contain;\n}\n\nspan.jp-RunningSessions-icon {\n  align-items: center;\n  display: flex;\n}\n\nspan.jp-RunningSessions-icon > svg {\n  display: block;\n  margin: 0 auto;\n}\n\n.jp-RunningSessions-itemLabel {\n  font-size: var(--jp-ui-font-size1);\n  flex: 1 1 55%;\n  text-overflow: ellipsis;\n  overflow: hidden;\n  white-space: nowrap;\n}\n\n.jp-RunningSessions-itemDetail {\n  font-size: var(--jp-ui-font-size1);\n  flex: 1 1 45%;\n  padding: 0 4px;\n  text-overflow: ellipsis;\n  overflow: hidden;\n  white-space: nowrap;\n}\n\n.jp-RunningSessions-itemShutdown {\n  visibility: hidden;\n}\n\n.jp-RunningSessions-item:focus-visible > .jp-RunningSessions-itemShutdown,\n.jp-RunningSessions-item:hover > .jp-RunningSessions-itemShutdown {\n  visibility: visible;\n}\n\n.jp-RunningSessions-shutdownAll.jp-ToolbarButtonComponent {\n  color: var(--jp-warn-color1);\n}\n\n.jp-RunningSessions-shutdownAll.jp-ToolbarButtonComponent[disabled] {\n  color: var(--jp-ui-font-color2);\n}\n\n/*-----------------------------------------------------------------------------\n| SearchableSessions\n|----------------------------------------------------------------------------*/\n\n.jp-RunningSessions-item.jp-mod-active {\n  background-color: var(--jp-layout-color2);\n  outline: 1px solid var(--jp-brand-color1);\n  outline-offset: -2px;\n}\n\n.jp-RunningSessions-item.jp-mod-active.jp-TreeItem::part(positioning-region) {\n  background-color: transparent;\n}\n\n.jp-SearchableSessions-list > .jp-RunningSessions-section {\n  min-height: auto;\n}\n\n.jp-SearchableSessions-title {\n  color: var(--jp-ui-font-color1);\n  font-size: var(--jp-ui-font-size0);\n  margin: 0;\n  padding: 4px 0;\n}\n\n.jp-SearchableSessions-titleLabel {\n  text-transform: uppercase;\n}\n\n.jp-SearchableSessions-acceptButton {\n  display: none;\n}\n\n.jp-SearchableSessions-list > .jp-RunningSessions-section.jp-mod-empty {\n  display: none;\n}\n\n.jp-SearchableSessions-filter {\n  overflow: visible;\n\n  /* Required to display correctly the filter box and its focus highlight */\n  padding: 0 2px;\n}\n\n.jp-SearchableSessions-filter > .jp-FilterBox {\n  width: 100%;\n}\n\n.jp-SearchableSessions-list {\n  overflow: auto;\n}\n\n.jp-SearchableSessions.jp-Dialog-body {\n  display: flex;\n}\n\n.jp-SearchableSessions-modal .jp-Dialog-content {\n  padding: 16px;\n  box-shadow: var(--jp-elevation-z4);\n  border-radius: 4px;\n  min-height: 100px;\n  max-height: 95%;\n}\n\n.jp-SearchableSessions-modal .jp-Dialog-footer {\n  display: none;\n}\n\n.jp-SearchableSessions-modal .jp-Dialog-header {\n  font-size: var(--jp-ui-font-size2);\n}\n\n.jp-SearchableSessions-modal.jp-Dialog {\n  background: transparent;\n  justify-content: start;\n  padding-top: 38px;\n  border: 0;\n}\n\n.jp-SearchableSessions-emptyIndicator {\n  color: var(--jp-ui-font-color2);\n  padding: 16px;\n  text-align: center;\n  padding-bottom: 8px;\n}\n\n.jp-RunningSessions-section:not(.jp-mod-empty)\n  ~ .jp-SearchableSessions-emptyIndicator {\n  display: none;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/running/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,sBAAsB;EACtB,sCAAsC;EACtC,+BAA+B;EAC/B,mCAAmC;;EAEnC;iCAC+B;EAC/B,kCAAkC;AACpC;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,SAAS;EACT,UAAU;AACZ;;AAEA;EACE,cAAc;EACd,SAAS;EACT,UAAU;EACV,qBAAqB;EACrB,kBAAkB;AACpB;;AAEA;EACE,gBAAgB;AAClB;;AAEA,wGAAwG;AACxG;EACE,eAAe;AACjB;;AAEA,wGAAwG;AACxG;EACE,cAAc;AAChB;;AAEA,wGAAwG;AACxG;;;;EAIE,aAAa;AACf;;AAEA,wGAAwG;AACxG;;EAEE,2BAA2B;AAC7B;;AAEA;;EAEE,iBAAiB;AACnB;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;;EAEE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,eAAe;EACf,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;EACnB,aAAa;AACf;;AAEA;EACE,cAAc;EACd,cAAc;AAChB;;AAEA;EACE,kCAAkC;EAClC,aAAa;EACb,uBAAuB;EACvB,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,kCAAkC;EAClC,aAAa;EACb,cAAc;EACd,uBAAuB;EACvB,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,+BAA+B;AACjC;;AAEA;;8EAE8E;;AAE9E;EACE,yCAAyC;EACzC,yCAAyC;EACzC,oBAAoB;AACtB;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,+BAA+B;EAC/B,kCAAkC;EAClC,SAAS;EACT,cAAc;AAChB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,iBAAiB;;EAEjB,yEAAyE;EACzE,cAAc;AAChB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,aAAa;EACb,kCAAkC;EAClC,kBAAkB;EAClB,iBAAiB;EACjB,eAAe;AACjB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,uBAAuB;EACvB,sBAAsB;EACtB,iBAAiB;EACjB,SAAS;AACX;;AAEA;EACE,+BAA+B;EAC/B,aAAa;EACb,kBAAkB;EAClB,mBAAmB;AACrB;;AAEA;;EAEE,aAAa;AACf\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.jp-RunningSessions {\\n  display: flex;\\n  flex-direction: column;\\n  min-width: var(--jp-sidebar-min-width);\\n  color: var(--jp-ui-font-color1);\\n  background: var(--jp-layout-color1);\\n\\n  /* This is needed so that all font sizing of children done in ems is\\n   * relative to this base size */\\n  font-size: var(--jp-ui-font-size1);\\n}\\n\\n.jp-RunningSessions > .jp-SidePanel-toolbar::part(positioning-region) {\\n  justify-content: flex-end;\\n}\\n\\n.jp-RunningSessions-section {\\n  min-height: 50px;\\n  overflow: auto;\\n}\\n\\n.jp-RunningSessions-sectionContainer {\\n  margin: 0;\\n  padding: 0;\\n}\\n\\n.jp-RunningSessions-sectionList {\\n  display: block;\\n  margin: 0;\\n  padding: 0;\\n  list-style-type: none;\\n  padding-left: 14px;\\n}\\n\\n.jp-RunningSessions-viewButton[aria-pressed='true'] {\\n  box-shadow: none;\\n}\\n\\n/* @deprecated For backward compatibility when sessions manager does not specify supportsMultipleViews */\\n.jp-mod-running-list-view .jp-RunningSessions-sectionList {\\n  padding-left: 0;\\n}\\n\\n/* @deprecated For backward compatibility when sessions manager does not specify supportsMultipleViews */\\n.jp-mod-running-list-view .jp-mod-running-leaf {\\n  margin-left: 0;\\n}\\n\\n/* @deprecated For backward compatibility when sessions manager does not specify supportsMultipleViews */\\n.jp-mod-running-list-view\\n  .jp-RunningSessions-item.jp-mod-kernelspec::part(positioning-region),\\n.jp-mod-running-list-view\\n  .jp-RunningSessions-item.jp-mod-kernel::part(positioning-region) {\\n  display: none;\\n}\\n\\n/* @deprecated For backward compatibility when sessions manager does not specify supportsMultipleViews */\\n.jp-mod-running-list-view\\n  .jp-RunningSessions-item.jp-mod-kernel-widget::part(content-region) {\\n  margin-inline-start: -2.6em;\\n}\\n\\n.jp-RunningSessions-item.jp-mod-kernelspec,\\n.jp-RunningSessions-item.jp-mod-kernel {\\n  user-select: none;\\n}\\n\\n.jp-RunningSessions-item-label-kernel-id {\\n  color: var(--jp-ui-font-color3);\\n}\\n\\n.jp-RunningSessions-collapseButton[aria-pressed='true'] {\\n  box-shadow: none;\\n}\\n\\n.jp-RunningSessions-toolbar {\\n  min-width: max-content;\\n}\\n\\nimg.jp-RunningSessions-icon,\\nspan.jp-RunningSessions-icon > svg {\\n  width: 16px;\\n  height: 16px;\\n}\\n\\nimg.jp-RunningSessions-icon {\\n  margin-top: 4px;\\n  object-fit: contain;\\n}\\n\\nspan.jp-RunningSessions-icon {\\n  align-items: center;\\n  display: flex;\\n}\\n\\nspan.jp-RunningSessions-icon > svg {\\n  display: block;\\n  margin: 0 auto;\\n}\\n\\n.jp-RunningSessions-itemLabel {\\n  font-size: var(--jp-ui-font-size1);\\n  flex: 1 1 55%;\\n  text-overflow: ellipsis;\\n  overflow: hidden;\\n  white-space: nowrap;\\n}\\n\\n.jp-RunningSessions-itemDetail {\\n  font-size: var(--jp-ui-font-size1);\\n  flex: 1 1 45%;\\n  padding: 0 4px;\\n  text-overflow: ellipsis;\\n  overflow: hidden;\\n  white-space: nowrap;\\n}\\n\\n.jp-RunningSessions-itemShutdown {\\n  visibility: hidden;\\n}\\n\\n.jp-RunningSessions-item:focus-visible > .jp-RunningSessions-itemShutdown,\\n.jp-RunningSessions-item:hover > .jp-RunningSessions-itemShutdown {\\n  visibility: visible;\\n}\\n\\n.jp-RunningSessions-shutdownAll.jp-ToolbarButtonComponent {\\n  color: var(--jp-warn-color1);\\n}\\n\\n.jp-RunningSessions-shutdownAll.jp-ToolbarButtonComponent[disabled] {\\n  color: var(--jp-ui-font-color2);\\n}\\n\\n/*-----------------------------------------------------------------------------\\n| SearchableSessions\\n|----------------------------------------------------------------------------*/\\n\\n.jp-RunningSessions-item.jp-mod-active {\\n  background-color: var(--jp-layout-color2);\\n  outline: 1px solid var(--jp-brand-color1);\\n  outline-offset: -2px;\\n}\\n\\n.jp-RunningSessions-item.jp-mod-active.jp-TreeItem::part(positioning-region) {\\n  background-color: transparent;\\n}\\n\\n.jp-SearchableSessions-list > .jp-RunningSessions-section {\\n  min-height: auto;\\n}\\n\\n.jp-SearchableSessions-title {\\n  color: var(--jp-ui-font-color1);\\n  font-size: var(--jp-ui-font-size0);\\n  margin: 0;\\n  padding: 4px 0;\\n}\\n\\n.jp-SearchableSessions-titleLabel {\\n  text-transform: uppercase;\\n}\\n\\n.jp-SearchableSessions-acceptButton {\\n  display: none;\\n}\\n\\n.jp-SearchableSessions-list > .jp-RunningSessions-section.jp-mod-empty {\\n  display: none;\\n}\\n\\n.jp-SearchableSessions-filter {\\n  overflow: visible;\\n\\n  /* Required to display correctly the filter box and its focus highlight */\\n  padding: 0 2px;\\n}\\n\\n.jp-SearchableSessions-filter > .jp-FilterBox {\\n  width: 100%;\\n}\\n\\n.jp-SearchableSessions-list {\\n  overflow: auto;\\n}\\n\\n.jp-SearchableSessions.jp-Dialog-body {\\n  display: flex;\\n}\\n\\n.jp-SearchableSessions-modal .jp-Dialog-content {\\n  padding: 16px;\\n  box-shadow: var(--jp-elevation-z4);\\n  border-radius: 4px;\\n  min-height: 100px;\\n  max-height: 95%;\\n}\\n\\n.jp-SearchableSessions-modal .jp-Dialog-footer {\\n  display: none;\\n}\\n\\n.jp-SearchableSessions-modal .jp-Dialog-header {\\n  font-size: var(--jp-ui-font-size2);\\n}\\n\\n.jp-SearchableSessions-modal.jp-Dialog {\\n  background: transparent;\\n  justify-content: start;\\n  padding-top: 38px;\\n  border: 0;\\n}\\n\\n.jp-SearchableSessions-emptyIndicator {\\n  color: var(--jp-ui-font-color2);\\n  padding: 16px;\\n  text-align: center;\\n  padding-bottom: 8px;\\n}\\n\\n.jp-RunningSessions-section:not(.jp-mod-empty)\\n  ~ .jp-SearchableSessions-emptyIndicator {\\n  display: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n:root {\n  --jp-private-settingeditor-debug-height: 28px;\n  --jp-private-settingeditor-key-width: 150px;\n  --jp-private-settingeditor-legend-height: 16px;\n  --jp-private-settingeditor-row-height: 16px;\n  --jp-private-settingeditor-toolbar-height: 28px;\n  --jp-private-settingeditor-type-width: 75px;\n  --jp-private-settingeditor-modifier-indent: 5px;\n  --jp-private-settingeditor-header-spacing: 8px;\n}\n\n.jp-SettingsPanel,\n#json-setting-editor {\n  min-width: 360px;\n  min-height: 240px;\n  background-color: var(--jp-layout-color0);\n  color: var(--jp-ui-font-color0);\n  margin-top: -1px;\n  outline: none;\n\n  /* This is needed so that all font sizing of children done in ems is\n   * relative to this base size */\n  font-size: var(--jp-ui-font-size1);\n}\n\n#setting-editor > .lm-Widget,\n#json-setting-editor > .lm-Widget {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n\n#setting-editor .lm-SplitPanel-handle,\n#json-setting-editor .lm-SplitPanel-handle {\n  background-color: var(--jp-border-color2);\n}\n\n/** Plugin list **/\n\n.jp-PluginList {\n  min-width: 175px;\n  max-width: 275px;\n}\n\n.jp-PluginList-wrapper {\n  overflow-y: auto;\n  height: 100%;\n}\n\n.jp-PluginList ul {\n  color: var(--jp-ui-font-color1);\n  font-size: var(--jp-ui-font-size1);\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n  overflow-y: auto;\n  position: relative;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n\n.jp-PluginList .jp-PluginList-header {\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color2);\n  border-top: var(--jp-border-width) solid var(--jp-border-color2);\n  color: var(--jp-ui-font-color1);\n}\n\n.jp-PluginList .jp-PluginList-noResults,\n.jp-PluginList .jp-PluginList-header {\n  flex: 0 0 auto;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  font-size: var(--jp-ui-font-size0);\n  padding: 8px 8px 8px 12px;\n  margin: 10px;\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color2);\n  border-top: var(--jp-border-width) solid var(--jp-border-color2);\n  color: var(--jp-ui-font-color1);\n}\n\n.jp-PluginList .jp-SelectedIndicator {\n  width: 3px;\n  background-color: var(--jp-brand-color1);\n  height: var(--jp-cell-collapser-min-height);\n  visibility: hidden;\n}\n\n.jp-PluginList .jp-mod-selected .jp-SelectedIndicator {\n  visibility: inherit;\n}\n\n.jp-PluginList .jp-ErrorPlugin .jp-SelectedIndicator {\n  background-color: var(--jp-error-color0);\n}\n\n.jp-PluginList-icon {\n  display: flex;\n  height: 20px;\n  width: 20px;\n  margin-right: 3px;\n  position: relative;\n}\n\n.jp-PluginList-wrapper > .jp-FilterBox {\n  margin: 8px 12px 0;\n}\n\n.jp-PluginList mark {\n  background-color: transparent;\n  font-weight: bold;\n  color: var(--jp-ui-font-color1);\n}\n\n.jp-PluginList-entry {\n  display: flex;\n  flex-direction: column;\n  border: 1px solid transparent;\n  background: transparent;\n  overflow: hidden;\n  padding: 4px 0 4px 4px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n\n.jp-PluginList-entry:hover {\n  background: var(--jp-layout-color2);\n}\n\n.jp-PluginList-entry li {\n  margin-left: 27px;\n  margin-top: 5px;\n  color: var(--jp-ui-font-color1);\n  overflow-x: hidden;\n  text-overflow: ellipsis;\n}\n\n.jp-PluginList-entry-label {\n  display: flex;\n}\n\n.jp-PluginList-entry-label-text {\n  text-overflow: ellipsis;\n  overflow-x: hidden;\n  white-space: nowrap;\n  color: var(--jp-ui-font-color1);\n  line-height: var(--jp-cell-collapser-min-height);\n}\n\n/** Raw editor **/\n\n.jp-SettingsRawEditor .jp-Toolbar {\n  color: var(--jp-ui-font-color0);\n  font-size: var(--jp-ui-font-size1);\n  height: var(--jp-private-settingeditor-toolbar-height);\n  max-height: var(--jp-private-settingeditor-toolbar-height);\n}\n\n.jp-SettingsRawEditor .jp-Toolbar .jp-ToolbarButtonComponent-label {\n  display: none;\n}\n\n.jp-SettingsRawEditor .jp-Toolbar-item {\n  margin-top: 1px;\n  align-items: center;\n}\n\n.jp-SettingsRawEditor .jp-Inspector {\n  border-top: 2px solid var(--jp-layout-color2);\n  min-height: var(--jp-private-settingeditor-debug-height);\n  max-height: var(--jp-private-settingeditor-debug-height);\n}\n\n.jp-SettingsRawEditor .jp-Inspector.jp-SettingsDebug .jp-RenderedHTMLCommon {\n  padding: 2px 5px 2px 0;\n  width: 100%;\n}\n\n.jp-SettingsRawEditor .jp-Inspector.jp-SettingsDebug .jp-RenderedHTMLCommon p {\n  text-align: right;\n}\n\n.jp-SettingsRawEditor .cm-editor {\n  height: 100%;\n}\n\n/** Panel **/\n\n.jp-SettingsPanel .checkbox p {\n  font-size: var(--jp-content-font-size1);\n}\n\n.jp-SettingsPanel .checkbox {\n  display: flex;\n  flex-direction: column-reverse;\n}\n\n.jp-SettingsPanel .form-group {\n  display: flex;\n  padding: 4px 8px 4px var(--jp-private-settingeditor-modifier-indent);\n  margin-top: 5px;\n}\n\n.jp-SettingsPanel .jp-SettingsEditor {\n  padding: 20px;\n}\n\n.jp-SettingsPanel {\n  overflow-y: auto;\n  height: 100%;\n}\n\n.jp-SettingsForm {\n  position: relative;\n}\n\n.jp-SettingsForm > .rjsf > .form-group {\n  padding-top: 0;\n  margin-top: 0;\n}\n\n/** Settings header **/\n\n.jp-SettingsHeader {\n  display: grid;\n  grid-template:\n    'title buttonbar'\n    'description buttonbar';\n  grid-template-columns: 1fr max-content;\n  padding: 0 var(--jp-private-settingeditor-header-spacing);\n  border-bottom: 1px solid var(--jp-border-color2);\n}\n\n.jp-SettingsHeader-title {\n  font-size: var(--jp-content-font-size3);\n  color: var(--jp-ui-font-color0);\n  font-weight: 400;\n  grid-area: title;\n  padding: 0;\n  margin-top: calc(var(--jp-private-settingeditor-header-spacing) * 2);\n  margin-bottom: calc(var(--jp-private-settingeditor-header-spacing) / 2);\n}\n\n.jp-SettingsHeader-description {\n  grid-area: description;\n  padding-bottom: var(--jp-private-settingeditor-header-spacing);\n  color: var(--jp-ui-font-color1);\n}\n\n.jp-SettingsHeader-buttonbar {\n  margin: auto var(--jp-private-settingeditor-header-spacing);\n  grid-row: span 2;\n}\n\n.jp-SettingsHeader-buttonbar > .jp-RestoreButton {\n  background-color: var(--jp-warn-color-normal);\n  border: 0;\n  color: var(--jp-ui-inverse-font-color0);\n}\n\n.jp-PluginEditor {\n  overflow: auto;\n}\n\n/** Placeholder **/\n\n.jp-SettingsEditor-placeholder {\n  text-align: center;\n}\n\n.jp-SettingsEditor-placeholderContent {\n  color: var(--jp-content-font-color2);\n  padding: 8px;\n}\n\n.jp-SettingsEditor-placeholderContent > h3 {\n  margin-bottom: var(--jp-content-heading-margin-bottom);\n}\n\n/** Import Settings Widget **/\n.jp-SettingsImport-container {\n  padding: 20px;\n}\n\n.jp-SettingsImport-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n.jp-SettingsImport-title {\n  font-size: 1rem;\n  font-weight: bold;\n  padding: 10px 15px;\n}\n\n.jp-SettingsImport-list {\n  margin-top: 30px;\n  max-height: 400px; /* Limit height for scrollable list */\n  overflow-y: auto;\n}\n\n.jp-SettingsImport-item {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 10px;\n  border-bottom: 1px solid var(--jp-border-color2);\n  padding: 10px 15px;\n  cursor: pointer;\n}\n\n.jp-SettingsImport-itemKey {\n  flex: 1;\n}\n\n.jp-SettingsImport-checkbox {\n  flex-shrink: 0;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/settingeditor/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,6CAA6C;EAC7C,2CAA2C;EAC3C,8CAA8C;EAC9C,2CAA2C;EAC3C,+CAA+C;EAC/C,2CAA2C;EAC3C,+CAA+C;EAC/C,8CAA8C;AAChD;;AAEA;;EAEE,gBAAgB;EAChB,iBAAiB;EACjB,yCAAyC;EACzC,+BAA+B;EAC/B,gBAAgB;EAChB,aAAa;;EAEb;iCAC+B;EAC/B,kCAAkC;AACpC;;AAEA;;EAEE,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,OAAO;EACP,QAAQ;AACV;;AAEA;;EAEE,yCAAyC;AAC3C;;AAEA,kBAAkB;;AAElB;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,YAAY;AACd;;AAEA;EACE,+BAA+B;EAC/B,kCAAkC;EAClC,qBAAqB;EACrB,SAAS;EACT,UAAU;EACV,gBAAgB;EAChB,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,OAAO;EACP,QAAQ;AACV;;AAEA;EACE,mEAAmE;EACnE,gEAAgE;EAChE,+BAA+B;AACjC;;AAEA;;EAEE,cAAc;EACd,gBAAgB;EAChB,yBAAyB;EACzB,mBAAmB;EACnB,kCAAkC;EAClC,yBAAyB;EACzB,YAAY;EACZ,mEAAmE;EACnE,gEAAgE;EAChE,+BAA+B;AACjC;;AAEA;EACE,UAAU;EACV,wCAAwC;EACxC,2CAA2C;EAC3C,kBAAkB;AACpB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,aAAa;EACb,YAAY;EACZ,WAAW;EACX,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;EACjB,+BAA+B;AACjC;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,6BAA6B;EAC7B,uBAAuB;EACvB,gBAAgB;EAChB,sBAAsB;EACtB,mBAAmB;EACnB,eAAe;AACjB;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,iBAAiB;EACjB,eAAe;EACf,+BAA+B;EAC/B,kBAAkB;EAClB,uBAAuB;AACzB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,uBAAuB;EACvB,kBAAkB;EAClB,mBAAmB;EACnB,+BAA+B;EAC/B,gDAAgD;AAClD;;AAEA,iBAAiB;;AAEjB;EACE,+BAA+B;EAC/B,kCAAkC;EAClC,sDAAsD;EACtD,0DAA0D;AAC5D;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,eAAe;EACf,mBAAmB;AACrB;;AAEA;EACE,6CAA6C;EAC7C,wDAAwD;EACxD,wDAAwD;AAC1D;;AAEA;EACE,sBAAsB;EACtB,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA,YAAY;;AAEZ;EACE,uCAAuC;AACzC;;AAEA;EACE,aAAa;EACb,8BAA8B;AAChC;;AAEA;EACE,aAAa;EACb,oEAAoE;EACpE,eAAe;AACjB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,gBAAgB;EAChB,YAAY;AACd;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,cAAc;EACd,aAAa;AACf;;AAEA,sBAAsB;;AAEtB;EACE,aAAa;EACb;;2BAEyB;EACzB,sCAAsC;EACtC,yDAAyD;EACzD,gDAAgD;AAClD;;AAEA;EACE,uCAAuC;EACvC,+BAA+B;EAC/B,gBAAgB;EAChB,gBAAgB;EAChB,UAAU;EACV,oEAAoE;EACpE,uEAAuE;AACzE;;AAEA;EACE,sBAAsB;EACtB,8DAA8D;EAC9D,+BAA+B;AACjC;;AAEA;EACE,2DAA2D;EAC3D,gBAAgB;AAClB;;AAEA;EACE,6CAA6C;EAC7C,SAAS;EACT,uCAAuC;AACzC;;AAEA;EACE,cAAc;AAChB;;AAEA,kBAAkB;;AAElB;EACE,kBAAkB;AACpB;;AAEA;EACE,oCAAoC;EACpC,YAAY;AACd;;AAEA;EACE,sDAAsD;AACxD;;AAEA,6BAA6B;AAC7B;EACE,aAAa;AACf;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;AACrB;;AAEA;EACE,eAAe;EACf,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,gBAAgB;EAChB,iBAAiB,EAAE,qCAAqC;EACxD,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;EACnB,mBAAmB;EACnB,gDAAgD;EAChD,kBAAkB;EAClB,eAAe;AACjB;;AAEA;EACE,OAAO;AACT;;AAEA;EACE,cAAc;AAChB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  --jp-private-settingeditor-debug-height: 28px;\\n  --jp-private-settingeditor-key-width: 150px;\\n  --jp-private-settingeditor-legend-height: 16px;\\n  --jp-private-settingeditor-row-height: 16px;\\n  --jp-private-settingeditor-toolbar-height: 28px;\\n  --jp-private-settingeditor-type-width: 75px;\\n  --jp-private-settingeditor-modifier-indent: 5px;\\n  --jp-private-settingeditor-header-spacing: 8px;\\n}\\n\\n.jp-SettingsPanel,\\n#json-setting-editor {\\n  min-width: 360px;\\n  min-height: 240px;\\n  background-color: var(--jp-layout-color0);\\n  color: var(--jp-ui-font-color0);\\n  margin-top: -1px;\\n  outline: none;\\n\\n  /* This is needed so that all font sizing of children done in ems is\\n   * relative to this base size */\\n  font-size: var(--jp-ui-font-size1);\\n}\\n\\n#setting-editor > .lm-Widget,\\n#json-setting-editor > .lm-Widget {\\n  position: absolute;\\n  top: 0;\\n  bottom: 0;\\n  left: 0;\\n  right: 0;\\n}\\n\\n#setting-editor .lm-SplitPanel-handle,\\n#json-setting-editor .lm-SplitPanel-handle {\\n  background-color: var(--jp-border-color2);\\n}\\n\\n/** Plugin list **/\\n\\n.jp-PluginList {\\n  min-width: 175px;\\n  max-width: 275px;\\n}\\n\\n.jp-PluginList-wrapper {\\n  overflow-y: auto;\\n  height: 100%;\\n}\\n\\n.jp-PluginList ul {\\n  color: var(--jp-ui-font-color1);\\n  font-size: var(--jp-ui-font-size1);\\n  list-style-type: none;\\n  margin: 0;\\n  padding: 0;\\n  overflow-y: auto;\\n  position: relative;\\n  top: 0;\\n  bottom: 0;\\n  left: 0;\\n  right: 0;\\n}\\n\\n.jp-PluginList .jp-PluginList-header {\\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color2);\\n  border-top: var(--jp-border-width) solid var(--jp-border-color2);\\n  color: var(--jp-ui-font-color1);\\n}\\n\\n.jp-PluginList .jp-PluginList-noResults,\\n.jp-PluginList .jp-PluginList-header {\\n  flex: 0 0 auto;\\n  font-weight: 600;\\n  text-transform: uppercase;\\n  letter-spacing: 1px;\\n  font-size: var(--jp-ui-font-size0);\\n  padding: 8px 8px 8px 12px;\\n  margin: 10px;\\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color2);\\n  border-top: var(--jp-border-width) solid var(--jp-border-color2);\\n  color: var(--jp-ui-font-color1);\\n}\\n\\n.jp-PluginList .jp-SelectedIndicator {\\n  width: 3px;\\n  background-color: var(--jp-brand-color1);\\n  height: var(--jp-cell-collapser-min-height);\\n  visibility: hidden;\\n}\\n\\n.jp-PluginList .jp-mod-selected .jp-SelectedIndicator {\\n  visibility: inherit;\\n}\\n\\n.jp-PluginList .jp-ErrorPlugin .jp-SelectedIndicator {\\n  background-color: var(--jp-error-color0);\\n}\\n\\n.jp-PluginList-icon {\\n  display: flex;\\n  height: 20px;\\n  width: 20px;\\n  margin-right: 3px;\\n  position: relative;\\n}\\n\\n.jp-PluginList-wrapper > .jp-FilterBox {\\n  margin: 8px 12px 0;\\n}\\n\\n.jp-PluginList mark {\\n  background-color: transparent;\\n  font-weight: bold;\\n  color: var(--jp-ui-font-color1);\\n}\\n\\n.jp-PluginList-entry {\\n  display: flex;\\n  flex-direction: column;\\n  border: 1px solid transparent;\\n  background: transparent;\\n  overflow: hidden;\\n  padding: 4px 0 4px 4px;\\n  white-space: nowrap;\\n  cursor: pointer;\\n}\\n\\n.jp-PluginList-entry:hover {\\n  background: var(--jp-layout-color2);\\n}\\n\\n.jp-PluginList-entry li {\\n  margin-left: 27px;\\n  margin-top: 5px;\\n  color: var(--jp-ui-font-color1);\\n  overflow-x: hidden;\\n  text-overflow: ellipsis;\\n}\\n\\n.jp-PluginList-entry-label {\\n  display: flex;\\n}\\n\\n.jp-PluginList-entry-label-text {\\n  text-overflow: ellipsis;\\n  overflow-x: hidden;\\n  white-space: nowrap;\\n  color: var(--jp-ui-font-color1);\\n  line-height: var(--jp-cell-collapser-min-height);\\n}\\n\\n/** Raw editor **/\\n\\n.jp-SettingsRawEditor .jp-Toolbar {\\n  color: var(--jp-ui-font-color0);\\n  font-size: var(--jp-ui-font-size1);\\n  height: var(--jp-private-settingeditor-toolbar-height);\\n  max-height: var(--jp-private-settingeditor-toolbar-height);\\n}\\n\\n.jp-SettingsRawEditor .jp-Toolbar .jp-ToolbarButtonComponent-label {\\n  display: none;\\n}\\n\\n.jp-SettingsRawEditor .jp-Toolbar-item {\\n  margin-top: 1px;\\n  align-items: center;\\n}\\n\\n.jp-SettingsRawEditor .jp-Inspector {\\n  border-top: 2px solid var(--jp-layout-color2);\\n  min-height: var(--jp-private-settingeditor-debug-height);\\n  max-height: var(--jp-private-settingeditor-debug-height);\\n}\\n\\n.jp-SettingsRawEditor .jp-Inspector.jp-SettingsDebug .jp-RenderedHTMLCommon {\\n  padding: 2px 5px 2px 0;\\n  width: 100%;\\n}\\n\\n.jp-SettingsRawEditor .jp-Inspector.jp-SettingsDebug .jp-RenderedHTMLCommon p {\\n  text-align: right;\\n}\\n\\n.jp-SettingsRawEditor .cm-editor {\\n  height: 100%;\\n}\\n\\n/** Panel **/\\n\\n.jp-SettingsPanel .checkbox p {\\n  font-size: var(--jp-content-font-size1);\\n}\\n\\n.jp-SettingsPanel .checkbox {\\n  display: flex;\\n  flex-direction: column-reverse;\\n}\\n\\n.jp-SettingsPanel .form-group {\\n  display: flex;\\n  padding: 4px 8px 4px var(--jp-private-settingeditor-modifier-indent);\\n  margin-top: 5px;\\n}\\n\\n.jp-SettingsPanel .jp-SettingsEditor {\\n  padding: 20px;\\n}\\n\\n.jp-SettingsPanel {\\n  overflow-y: auto;\\n  height: 100%;\\n}\\n\\n.jp-SettingsForm {\\n  position: relative;\\n}\\n\\n.jp-SettingsForm > .rjsf > .form-group {\\n  padding-top: 0;\\n  margin-top: 0;\\n}\\n\\n/** Settings header **/\\n\\n.jp-SettingsHeader {\\n  display: grid;\\n  grid-template:\\n    'title buttonbar'\\n    'description buttonbar';\\n  grid-template-columns: 1fr max-content;\\n  padding: 0 var(--jp-private-settingeditor-header-spacing);\\n  border-bottom: 1px solid var(--jp-border-color2);\\n}\\n\\n.jp-SettingsHeader-title {\\n  font-size: var(--jp-content-font-size3);\\n  color: var(--jp-ui-font-color0);\\n  font-weight: 400;\\n  grid-area: title;\\n  padding: 0;\\n  margin-top: calc(var(--jp-private-settingeditor-header-spacing) * 2);\\n  margin-bottom: calc(var(--jp-private-settingeditor-header-spacing) / 2);\\n}\\n\\n.jp-SettingsHeader-description {\\n  grid-area: description;\\n  padding-bottom: var(--jp-private-settingeditor-header-spacing);\\n  color: var(--jp-ui-font-color1);\\n}\\n\\n.jp-SettingsHeader-buttonbar {\\n  margin: auto var(--jp-private-settingeditor-header-spacing);\\n  grid-row: span 2;\\n}\\n\\n.jp-SettingsHeader-buttonbar > .jp-RestoreButton {\\n  background-color: var(--jp-warn-color-normal);\\n  border: 0;\\n  color: var(--jp-ui-inverse-font-color0);\\n}\\n\\n.jp-PluginEditor {\\n  overflow: auto;\\n}\\n\\n/** Placeholder **/\\n\\n.jp-SettingsEditor-placeholder {\\n  text-align: center;\\n}\\n\\n.jp-SettingsEditor-placeholderContent {\\n  color: var(--jp-content-font-color2);\\n  padding: 8px;\\n}\\n\\n.jp-SettingsEditor-placeholderContent > h3 {\\n  margin-bottom: var(--jp-content-heading-margin-bottom);\\n}\\n\\n/** Import Settings Widget **/\\n.jp-SettingsImport-container {\\n  padding: 20px;\\n}\\n\\n.jp-SettingsImport-header {\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center;\\n}\\n\\n.jp-SettingsImport-title {\\n  font-size: 1rem;\\n  font-weight: bold;\\n  padding: 10px 15px;\\n}\\n\\n.jp-SettingsImport-list {\\n  margin-top: 30px;\\n  max-height: 400px; /* Limit height for scrollable list */\\n  overflow-y: auto;\\n}\\n\\n.jp-SettingsImport-item {\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center;\\n  margin-bottom: 10px;\\n  border-bottom: 1px solid var(--jp-border-color2);\\n  padding: 10px 15px;\\n  cursor: pointer;\\n}\\n\\n.jp-SettingsImport-itemKey {\\n  flex: 1;\\n}\\n\\n.jp-SettingsImport-checkbox {\\n  flex-shrink: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* Shortcut Input Style */\n\n.jp-Shortcuts-InputBox {\n  display: inline-flex;\n  padding-top: 2px;\n}\n\n.jp-Shortcuts-InputBoxNew {\n  margin-left: 10px;\n}\n\n.jp-mod-hidden {\n  display: none;\n}\n\n@keyframes slide-animation {\n  from {\n    width: 0;\n    left: 0;\n  }\n\n  to {\n    width: 120px;\n    left: 0;\n  }\n}\n\n.jp-Shortcuts-Input {\n  animation-duration: 0.3s;\n  animation-timing-function: ease-out;\n  animation-name: slide-animation;\n  border-width: var(--jp-border-width);\n  border-color: var(--jp-border-color3);\n  border-style: solid;\n  background-color: var(--jp-layout-color0);\n  margin-left: auto;\n  padding-left: 10px;\n  width: 120px;\n  height: 25px;\n  line-height: 25px;\n  display: block;\n}\n\n.jp-Shortcuts-Input:focus {\n  outline: none;\n  color: var(--jp-content-font-color1);\n  border-color: var(--jp-brand-color2);\n}\n\n.jp-mod-unavailable-Input:focus {\n  border-color: var(--jp-error-color2);\n}\n\n.jp-Shortcuts-InputText {\n  overflow-x: hidden;\n  overflow-y: hidden;\n  margin: 0;\n  margin-top: 4px;\n  padding: 0 5px;\n  height: 17px;\n  line-height: 17px;\n  width: fit-content;\n}\n\n.jp-mod-selected-InputText {\n  background-color: var(--jp-shortcuts-button-background);\n  overflow: hidden;\n}\n\n.jp-mod-waiting-InputText {\n  color: var(--jp-content-font-color3);\n}\n\n.jp-Shortcuts-Submit {\n  background-color: var(--jp-brand-color2);\n  border-radius: 0;\n  border: none;\n  color: var(--jp-layout-color0);\n  font-family: var(--jp-ui-font-family);\n  display: block;\n  height: 27px;\n  width: 26px;\n  cursor: pointer;\n}\n\n.jp-Shortcuts-Submit:focus {\n  outline: none;\n}\n\n.jp-Shortcuts-Submit .jp-icon3[fill] {\n  fill: var(--jp-layout-color1);\n}\n\n.jp-Shortcuts-Submit.jp-mod-defunc-Submit {\n  background-color: var(--jp-layout-color3);\n}\n\n.jp-Shortcuts-Submit.jp-mod-defunc-Submit .jp-icon3[fill] {\n  fill: var(--jp-inverse-layout-color1);\n}\n\n.jp-Shortcuts-Submit.jp-mod-conflict-Submit {\n  background-color: var(--jp-error-color1);\n}\n\n/* Shortcut Item Style */\n.jp-Shortcuts-Cell {\n  padding: 6px 12px;\n  display: table-cell;\n  width: 20%;\n  vertical-align: middle;\n}\n\n.jp-Shortcuts-ShortcutCell {\n  display: flex;\n  min-width: max-content;\n  flex-wrap: wrap;\n}\n\n.jp-Shortcuts-EmptyCell {\n  height: 32px;\n}\n\n.jp-Shortcuts-Row {\n  padding: 10px;\n  width: 100%;\n  display: table-row;\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color1);\n  vertical-align: middle;\n  background-color: var(--jp-layout-color0);\n}\n\n.jp-Shortcuts-Row:hover .jp-Shortcuts-ShortcutKeys {\n  border-color: var(--jp-border-color1);\n  background: var(--jp-layout-color2);\n}\n\n.jp-Shortcuts-Row:hover .jp-Shortcuts-Plus,\n.jp-Shortcuts-Row:hover .jp-Shortcuts-Or {\n  opacity: 1;\n}\n\n.jp-Shortcuts-ErrorMessage {\n  color: var(--jp-error-color1);\n  align-self: center;\n}\n\n.jp-Shortcuts-RowWithConflict {\n  height: 45px;\n  position: relative;\n}\n\n.jp-Shortcuts-ErrorButton {\n  margin-left: 12px;\n  white-space: nowrap;\n}\n\n.jp-Shortcuts-ErrorButton > button {\n  margin-right: 12px;\n}\n\n.jp-Shortcuts-ShortcutContainer {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n.jp-Shortcuts-ShortcutContainer:hover .jp-Shortcuts-ShortcutKeys {\n  border-color: var(--jp-border-color3);\n  background: var(--jp-layout-color3);\n}\n\n.jp-Shortcuts-ShortcutKeysContainer {\n  font-size: var(--jp-code-font-size);\n  font-family: var(--jp-ui-font-family);\n  display: flex;\n}\n\n.jp-Shortcuts-ConflictContainer {\n  display: block;\n  padding: 6px 12px;\n  position: absolute;\n  height: 100%;\n  width: 100%;\n  box-sizing: border-box;\n  overflow: hidden;\n}\n\n.jp-Shortcuts-Conflict {\n  display: flex;\n  flex-wrap: nowrap;\n}\n\n.jp-Shortcuts-ShortcutKeys {\n  border-width: var(--jp-border-width);\n  border-color: var(--jp-layout-color0);\n  border-radius: var(--jp-border-radius);\n  padding: 5px 6px;\n  margin: 3px 0;\n  cursor: pointer;\n}\n\n.jp-Shortcuts-Or {\n  margin-right: 12px;\n  margin-left: 12px;\n  margin-top: 8px;\n  color: var(--jp-content-font-color3);\n  opacity: 0;\n}\n\n.jp-Shortcuts-Or:hover {\n  opacity: 1;\n}\n\n.jp-Shortcuts-Or-Forced {\n  opacity: 1;\n}\n\n.jp-Shortcuts-Comma {\n  margin-top: 10px;\n  margin-right: 2px;\n  margin-left: 2px;\n}\n\n.jp-Shortcuts-Plus {\n  opacity: 0;\n  background: var(--jp-shortcuts-button-background);\n  border-color: var(--jp-layout-color0);\n  border-radius: var(--jp-border-radius);\n  border-width: var(--jp-border-width);\n  margin: 3px 0;\n  padding: 5px 6px;\n  color: var(--jp-ui-inverse-font-color1);\n  cursor: pointer;\n}\n\n.jp-Shortcuts-Plus:hover {\n  background: var(--jp-shortcuts-button-hover-background);\n}\n\n.jp-Shortcuts-Plus:active {\n  background-color: var(--jp-brand-color2);\n}\n\n.jp-Shortcuts-Reset {\n  color: var(--jp-brand-color2);\n  padding-left: 10px;\n  cursor: pointer;\n}\n\n.jp-Shortcuts-Reset:hover {\n  color: var(--jp-brand-color1);\n}\n\n.jp-Shortcuts-SourceCell {\n  display: inline-block;\n}\n\n/* Shortcut List Style */\n.jp-Shortcuts-ShortcutList {\n  width: 100%;\n  display: table;\n  border-collapse: collapse;\n}\n\n.jp-Shortcuts-ShortcutListContainer {\n  overflow-y: scroll;\n  border: var(--jp-border-width) solid var(--jp-border-color1);\n}\n\n/* Shortcut Title Item Style */\n.jp-Shortcuts-Header {\n  display: flex;\n  cursor: pointer;\n}\n\n.jp-Shortcuts-Header:hover .jp-ShortcutTitleItem-sortButton .jp-icon3[fill],\n.jp-Shortcuts-Header:focus .jp-ShortcutTitleItem-sortButton .jp-icon3[fill] {\n  fill: var(--jp-ui-font-color0);\n}\n\n.jp-Shortcuts-Header:active .jp-ShortcutTitleItem-sortButton {\n  outline: none;\n}\n\n.jp-Shortcuts-CurrentHeader .jp-icon3[fill] {\n  fill: var(--jp-ui-font-color0);\n}\n\n/* Shortcut UI Style */\n\n.jp-Shortcuts-ShortcutUI {\n  display: flex;\n  flex-direction: column;\n  font-size: var(--jp-ui-font-size1);\n  font-family: var(--jp-ui-font-family);\n  color: var(--jp-content-font-color1);\n  min-width: 450px;\n  width: 100%;\n}\n\n/* TopNav Style */\n.jp-Shortcuts-Top {\n  display: block;\n}\n\n.jp-Shortcuts-TopNav {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  box-sizing: border-box;\n  font-size: var(--jp-ui-font-size1);\n  background-color: var(--jp-layout-color0);\n}\n\n.jp-Shortcuts-Symbols {\n  padding: 0 12px;\n}\n\n.jp-Shortcuts-Symbols td:nth-child(2) {\n  padding-right: 10px;\n}\n\n.jp-Shortcuts-AdvancedOptions {\n  padding-left: 12px;\n}\n\n.jp-Shortcuts-AdvancedOptionsLink {\n  color: var(--jp-content-link-color);\n  margin-right: 15px;\n  display: inline-block;\n  cursor: pointer;\n}\n\n.jp-Shortcuts-AdvancedOptionsLink:hover {\n  color: var(--jp-brand-color0);\n  text-decoration: underline;\n}\n\n.jp-Shortcuts-AdvancedOptionsLink:active {\n  color: var(--jp-brand-color0);\n  text-decoration: underline;\n}\n\n.jp-Shortcuts-HeaderRowContainer {\n  padding-right: 14px;\n}\n\n.jp-Shortcuts-HeaderRow {\n  font-weight: bold;\n  font-size: var(--jp-ui-font-size1);\n  background-color: var(--jp-layout-color0);\n  width: 100%;\n  z-index: 1;\n  display: table;\n  padding: 10px 0;\n}\n\n.jp-Shortcuts-commandIcon {\n  margin-right: 13px;\n}\n\n.jp-Shortcuts-altIcon {\n  margin-right: 14px;\n}\n\n.jp-Shortcuts-controlIcon {\n  margin-left: 8px;\n  margin-right: 16px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/shortcuts-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E,yBAAyB;;AAEzB;EACE,oBAAoB;EACpB,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE;IACE,QAAQ;IACR,OAAO;EACT;;EAEA;IACE,YAAY;IACZ,OAAO;EACT;AACF;;AAEA;EACE,wBAAwB;EACxB,mCAAmC;EACnC,+BAA+B;EAC/B,oCAAoC;EACpC,qCAAqC;EACrC,mBAAmB;EACnB,yCAAyC;EACzC,iBAAiB;EACjB,kBAAkB;EAClB,YAAY;EACZ,YAAY;EACZ,iBAAiB;EACjB,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,oCAAoC;EACpC,oCAAoC;AACtC;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,kBAAkB;EAClB,kBAAkB;EAClB,SAAS;EACT,eAAe;EACf,cAAc;EACd,YAAY;EACZ,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,uDAAuD;EACvD,gBAAgB;AAClB;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,wCAAwC;EACxC,gBAAgB;EAChB,YAAY;EACZ,8BAA8B;EAC9B,qCAAqC;EACrC,cAAc;EACd,YAAY;EACZ,WAAW;EACX,eAAe;AACjB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,wCAAwC;AAC1C;;AAEA,wBAAwB;AACxB;EACE,iBAAiB;EACjB,mBAAmB;EACnB,UAAU;EACV,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,eAAe;AACjB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,aAAa;EACb,WAAW;EACX,kBAAkB;EAClB,mEAAmE;EACnE,sBAAsB;EACtB,yCAAyC;AAC3C;;AAEA;EACE,qCAAqC;EACrC,mCAAmC;AACrC;;AAEA;;EAEE,UAAU;AACZ;;AAEA;EACE,6BAA6B;EAC7B,kBAAkB;AACpB;;AAEA;EACE,YAAY;EACZ,kBAAkB;AACpB;;AAEA;EACE,iBAAiB;EACjB,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,qCAAqC;EACrC,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;EACnC,qCAAqC;EACrC,aAAa;AACf;;AAEA;EACE,cAAc;EACd,iBAAiB;EACjB,kBAAkB;EAClB,YAAY;EACZ,WAAW;EACX,sBAAsB;EACtB,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,iBAAiB;AACnB;;AAEA;EACE,oCAAoC;EACpC,qCAAqC;EACrC,sCAAsC;EACtC,gBAAgB;EAChB,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,kBAAkB;EAClB,iBAAiB;EACjB,eAAe;EACf,oCAAoC;EACpC,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,iDAAiD;EACjD,qCAAqC;EACrC,sCAAsC;EACtC,oCAAoC;EACpC,aAAa;EACb,gBAAgB;EAChB,uCAAuC;EACvC,eAAe;AACjB;;AAEA;EACE,uDAAuD;AACzD;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,6BAA6B;EAC7B,kBAAkB;EAClB,eAAe;AACjB;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,qBAAqB;AACvB;;AAEA,wBAAwB;AACxB;EACE,WAAW;EACX,cAAc;EACd,yBAAyB;AAC3B;;AAEA;EACE,kBAAkB;EAClB,4DAA4D;AAC9D;;AAEA,8BAA8B;AAC9B;EACE,aAAa;EACb,eAAe;AACjB;;AAEA;;EAEE,8BAA8B;AAChC;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,8BAA8B;AAChC;;AAEA,sBAAsB;;AAEtB;EACE,aAAa;EACb,sBAAsB;EACtB,kCAAkC;EAClC,qCAAqC;EACrC,oCAAoC;EACpC,gBAAgB;EAChB,WAAW;AACb;;AAEA,iBAAiB;AACjB;EACE,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,sBAAsB;EACtB,kCAAkC;EAClC,yCAAyC;AAC3C;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,mCAAmC;EACnC,kBAAkB;EAClB,qBAAqB;EACrB,eAAe;AACjB;;AAEA;EACE,6BAA6B;EAC7B,0BAA0B;AAC5B;;AAEA;EACE,6BAA6B;EAC7B,0BAA0B;AAC5B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,iBAAiB;EACjB,kCAAkC;EAClC,yCAAyC;EACzC,WAAW;EACX,UAAU;EACV,cAAc;EACd,eAAe;AACjB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,gBAAgB;EAChB,kBAAkB;AACpB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/* Shortcut Input Style */\\n\\n.jp-Shortcuts-InputBox {\\n  display: inline-flex;\\n  padding-top: 2px;\\n}\\n\\n.jp-Shortcuts-InputBoxNew {\\n  margin-left: 10px;\\n}\\n\\n.jp-mod-hidden {\\n  display: none;\\n}\\n\\n@keyframes slide-animation {\\n  from {\\n    width: 0;\\n    left: 0;\\n  }\\n\\n  to {\\n    width: 120px;\\n    left: 0;\\n  }\\n}\\n\\n.jp-Shortcuts-Input {\\n  animation-duration: 0.3s;\\n  animation-timing-function: ease-out;\\n  animation-name: slide-animation;\\n  border-width: var(--jp-border-width);\\n  border-color: var(--jp-border-color3);\\n  border-style: solid;\\n  background-color: var(--jp-layout-color0);\\n  margin-left: auto;\\n  padding-left: 10px;\\n  width: 120px;\\n  height: 25px;\\n  line-height: 25px;\\n  display: block;\\n}\\n\\n.jp-Shortcuts-Input:focus {\\n  outline: none;\\n  color: var(--jp-content-font-color1);\\n  border-color: var(--jp-brand-color2);\\n}\\n\\n.jp-mod-unavailable-Input:focus {\\n  border-color: var(--jp-error-color2);\\n}\\n\\n.jp-Shortcuts-InputText {\\n  overflow-x: hidden;\\n  overflow-y: hidden;\\n  margin: 0;\\n  margin-top: 4px;\\n  padding: 0 5px;\\n  height: 17px;\\n  line-height: 17px;\\n  width: fit-content;\\n}\\n\\n.jp-mod-selected-InputText {\\n  background-color: var(--jp-shortcuts-button-background);\\n  overflow: hidden;\\n}\\n\\n.jp-mod-waiting-InputText {\\n  color: var(--jp-content-font-color3);\\n}\\n\\n.jp-Shortcuts-Submit {\\n  background-color: var(--jp-brand-color2);\\n  border-radius: 0;\\n  border: none;\\n  color: var(--jp-layout-color0);\\n  font-family: var(--jp-ui-font-family);\\n  display: block;\\n  height: 27px;\\n  width: 26px;\\n  cursor: pointer;\\n}\\n\\n.jp-Shortcuts-Submit:focus {\\n  outline: none;\\n}\\n\\n.jp-Shortcuts-Submit .jp-icon3[fill] {\\n  fill: var(--jp-layout-color1);\\n}\\n\\n.jp-Shortcuts-Submit.jp-mod-defunc-Submit {\\n  background-color: var(--jp-layout-color3);\\n}\\n\\n.jp-Shortcuts-Submit.jp-mod-defunc-Submit .jp-icon3[fill] {\\n  fill: var(--jp-inverse-layout-color1);\\n}\\n\\n.jp-Shortcuts-Submit.jp-mod-conflict-Submit {\\n  background-color: var(--jp-error-color1);\\n}\\n\\n/* Shortcut Item Style */\\n.jp-Shortcuts-Cell {\\n  padding: 6px 12px;\\n  display: table-cell;\\n  width: 20%;\\n  vertical-align: middle;\\n}\\n\\n.jp-Shortcuts-ShortcutCell {\\n  display: flex;\\n  min-width: max-content;\\n  flex-wrap: wrap;\\n}\\n\\n.jp-Shortcuts-EmptyCell {\\n  height: 32px;\\n}\\n\\n.jp-Shortcuts-Row {\\n  padding: 10px;\\n  width: 100%;\\n  display: table-row;\\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color1);\\n  vertical-align: middle;\\n  background-color: var(--jp-layout-color0);\\n}\\n\\n.jp-Shortcuts-Row:hover .jp-Shortcuts-ShortcutKeys {\\n  border-color: var(--jp-border-color1);\\n  background: var(--jp-layout-color2);\\n}\\n\\n.jp-Shortcuts-Row:hover .jp-Shortcuts-Plus,\\n.jp-Shortcuts-Row:hover .jp-Shortcuts-Or {\\n  opacity: 1;\\n}\\n\\n.jp-Shortcuts-ErrorMessage {\\n  color: var(--jp-error-color1);\\n  align-self: center;\\n}\\n\\n.jp-Shortcuts-RowWithConflict {\\n  height: 45px;\\n  position: relative;\\n}\\n\\n.jp-Shortcuts-ErrorButton {\\n  margin-left: 12px;\\n  white-space: nowrap;\\n}\\n\\n.jp-Shortcuts-ErrorButton > button {\\n  margin-right: 12px;\\n}\\n\\n.jp-Shortcuts-ShortcutContainer {\\n  display: flex;\\n  flex-wrap: wrap;\\n}\\n\\n.jp-Shortcuts-ShortcutContainer:hover .jp-Shortcuts-ShortcutKeys {\\n  border-color: var(--jp-border-color3);\\n  background: var(--jp-layout-color3);\\n}\\n\\n.jp-Shortcuts-ShortcutKeysContainer {\\n  font-size: var(--jp-code-font-size);\\n  font-family: var(--jp-ui-font-family);\\n  display: flex;\\n}\\n\\n.jp-Shortcuts-ConflictContainer {\\n  display: block;\\n  padding: 6px 12px;\\n  position: absolute;\\n  height: 100%;\\n  width: 100%;\\n  box-sizing: border-box;\\n  overflow: hidden;\\n}\\n\\n.jp-Shortcuts-Conflict {\\n  display: flex;\\n  flex-wrap: nowrap;\\n}\\n\\n.jp-Shortcuts-ShortcutKeys {\\n  border-width: var(--jp-border-width);\\n  border-color: var(--jp-layout-color0);\\n  border-radius: var(--jp-border-radius);\\n  padding: 5px 6px;\\n  margin: 3px 0;\\n  cursor: pointer;\\n}\\n\\n.jp-Shortcuts-Or {\\n  margin-right: 12px;\\n  margin-left: 12px;\\n  margin-top: 8px;\\n  color: var(--jp-content-font-color3);\\n  opacity: 0;\\n}\\n\\n.jp-Shortcuts-Or:hover {\\n  opacity: 1;\\n}\\n\\n.jp-Shortcuts-Or-Forced {\\n  opacity: 1;\\n}\\n\\n.jp-Shortcuts-Comma {\\n  margin-top: 10px;\\n  margin-right: 2px;\\n  margin-left: 2px;\\n}\\n\\n.jp-Shortcuts-Plus {\\n  opacity: 0;\\n  background: var(--jp-shortcuts-button-background);\\n  border-color: var(--jp-layout-color0);\\n  border-radius: var(--jp-border-radius);\\n  border-width: var(--jp-border-width);\\n  margin: 3px 0;\\n  padding: 5px 6px;\\n  color: var(--jp-ui-inverse-font-color1);\\n  cursor: pointer;\\n}\\n\\n.jp-Shortcuts-Plus:hover {\\n  background: var(--jp-shortcuts-button-hover-background);\\n}\\n\\n.jp-Shortcuts-Plus:active {\\n  background-color: var(--jp-brand-color2);\\n}\\n\\n.jp-Shortcuts-Reset {\\n  color: var(--jp-brand-color2);\\n  padding-left: 10px;\\n  cursor: pointer;\\n}\\n\\n.jp-Shortcuts-Reset:hover {\\n  color: var(--jp-brand-color1);\\n}\\n\\n.jp-Shortcuts-SourceCell {\\n  display: inline-block;\\n}\\n\\n/* Shortcut List Style */\\n.jp-Shortcuts-ShortcutList {\\n  width: 100%;\\n  display: table;\\n  border-collapse: collapse;\\n}\\n\\n.jp-Shortcuts-ShortcutListContainer {\\n  overflow-y: scroll;\\n  border: var(--jp-border-width) solid var(--jp-border-color1);\\n}\\n\\n/* Shortcut Title Item Style */\\n.jp-Shortcuts-Header {\\n  display: flex;\\n  cursor: pointer;\\n}\\n\\n.jp-Shortcuts-Header:hover .jp-ShortcutTitleItem-sortButton .jp-icon3[fill],\\n.jp-Shortcuts-Header:focus .jp-ShortcutTitleItem-sortButton .jp-icon3[fill] {\\n  fill: var(--jp-ui-font-color0);\\n}\\n\\n.jp-Shortcuts-Header:active .jp-ShortcutTitleItem-sortButton {\\n  outline: none;\\n}\\n\\n.jp-Shortcuts-CurrentHeader .jp-icon3[fill] {\\n  fill: var(--jp-ui-font-color0);\\n}\\n\\n/* Shortcut UI Style */\\n\\n.jp-Shortcuts-ShortcutUI {\\n  display: flex;\\n  flex-direction: column;\\n  font-size: var(--jp-ui-font-size1);\\n  font-family: var(--jp-ui-font-family);\\n  color: var(--jp-content-font-color1);\\n  min-width: 450px;\\n  width: 100%;\\n}\\n\\n/* TopNav Style */\\n.jp-Shortcuts-Top {\\n  display: block;\\n}\\n\\n.jp-Shortcuts-TopNav {\\n  display: flex;\\n  align-items: center;\\n  justify-content: space-between;\\n  box-sizing: border-box;\\n  font-size: var(--jp-ui-font-size1);\\n  background-color: var(--jp-layout-color0);\\n}\\n\\n.jp-Shortcuts-Symbols {\\n  padding: 0 12px;\\n}\\n\\n.jp-Shortcuts-Symbols td:nth-child(2) {\\n  padding-right: 10px;\\n}\\n\\n.jp-Shortcuts-AdvancedOptions {\\n  padding-left: 12px;\\n}\\n\\n.jp-Shortcuts-AdvancedOptionsLink {\\n  color: var(--jp-content-link-color);\\n  margin-right: 15px;\\n  display: inline-block;\\n  cursor: pointer;\\n}\\n\\n.jp-Shortcuts-AdvancedOptionsLink:hover {\\n  color: var(--jp-brand-color0);\\n  text-decoration: underline;\\n}\\n\\n.jp-Shortcuts-AdvancedOptionsLink:active {\\n  color: var(--jp-brand-color0);\\n  text-decoration: underline;\\n}\\n\\n.jp-Shortcuts-HeaderRowContainer {\\n  padding-right: 14px;\\n}\\n\\n.jp-Shortcuts-HeaderRow {\\n  font-weight: bold;\\n  font-size: var(--jp-ui-font-size1);\\n  background-color: var(--jp-layout-color0);\\n  width: 100%;\\n  z-index: 1;\\n  display: table;\\n  padding: 10px 0;\\n}\\n\\n.jp-Shortcuts-commandIcon {\\n  margin-right: 13px;\\n}\\n\\n.jp-Shortcuts-altIcon {\\n  margin-right: 14px;\\n}\\n\\n.jp-Shortcuts-controlIcon {\\n  margin-left: 8px;\\n  margin-right: 16px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Styles\n|----------------------------------------------------------------------------*/\n\n.jp-StatusBar-Widget {\n  display: flex;\n  align-items: center;\n  background: var(--jp-layout-color2);\n  min-height: var(--jp-statusbar-height);\n  justify-content: space-between;\n  padding: 0 10px;\n}\n\n.jp-StatusBar-Left {\n  display: flex;\n  align-items: center;\n  flex-direction: row;\n}\n\n.jp-StatusBar-Middle {\n  display: flex;\n  align-items: center;\n}\n\n.jp-StatusBar-Right {\n  display: flex;\n  align-items: center;\n  flex-direction: row-reverse;\n}\n\n.jp-StatusBar-Item {\n  max-height: var(--jp-statusbar-height);\n  margin: 0 2px;\n  height: var(--jp-statusbar-height);\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  color: var(--jp-ui-font-color1);\n  padding: 0 6px;\n}\n\n.jp-mod-highlighted:hover {\n  background-color: var(--jp-layout-color3);\n}\n\n.jp-mod-clicked {\n  background-color: var(--jp-brand-color1);\n}\n\n.jp-mod-clicked:hover {\n  background-color: var(--jp-brand-color0);\n}\n\n.jp-mod-clicked .jp-StatusBar-TextItem {\n  color: var(--jp-ui-inverse-font-color1);\n}\n\n.jp-StatusBar-HoverItem {\n  border: var(--jp-border-width) solid var(--jp-border-color1);\n  border-radius: var(--jp-border-radius);\n  box-shadow: 0 4px 4px rgba(0, 0, 0, 0.25);\n}\n\n.jp-StatusBar-TextItem {\n  font-size: var(--jp-ui-font-size1);\n  font-family: var(--jp-ui-font-family);\n  line-height: 24px;\n  color: var(--jp-ui-font-color1);\n}\n\n.jp-StatusBar-GroupItem {\n  display: flex;\n  align-items: center;\n  flex-direction: row;\n}\n\n.jp-Statusbar-ProgressCircle > svg {\n  display: block;\n  margin: 0 auto;\n  width: 16px;\n  align-self: normal;\n}\n\n.jp-Statusbar-ProgressCircle .jp-Statusbar-ProgressCirclePath {\n  fill: var(--jp-inverse-layout-color3);\n}\n\n.jp-Statusbar-ProgressBar-progress-bar {\n  height: 10px;\n  width: 100px;\n  border: solid 0.25px var(--jp-brand-color2);\n  border-radius: 3px;\n  overflow: hidden;\n  align-self: center;\n}\n\n.jp-Statusbar-ProgressBar-progress-bar > div {\n  background-color: var(--jp-brand-color2);\n  background-image: linear-gradient(\n    -45deg,\n    rgba(255, 255, 255, 0.2) 25%,\n    transparent 25%,\n    transparent 50%,\n    rgba(255, 255, 255, 0.2) 50%,\n    rgba(255, 255, 255, 0.2) 75%,\n    transparent 75%,\n    transparent\n  );\n  background-size: 40px 40px;\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: 12px;\n  line-height: 14px;\n  color: #fff;\n  text-align: center;\n  animation: jp-Statusbar-ExecutionTime-progress-bar 2s linear infinite;\n}\n\n.jp-Statusbar-ProgressBar-progress-bar p {\n  color: var(--jp-ui-font-color1);\n  font-family: var(--jp-ui-font-family);\n  font-size: var(--jp-ui-font-size1);\n  line-height: 10px;\n  width: 100px;\n}\n\n@keyframes jp-Statusbar-ExecutionTime-progress-bar {\n  0% {\n    background-position: 0 0;\n  }\n\n  100% {\n    background-position: 40px 40px;\n  }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/statusbar/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E;EACE,aAAa;EACb,mBAAmB;EACnB,mCAAmC;EACnC,sCAAsC;EACtC,8BAA8B;EAC9B,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,2BAA2B;AAC7B;;AAEA;EACE,sCAAsC;EACtC,aAAa;EACb,kCAAkC;EAClC,mBAAmB;EACnB,uBAAuB;EACvB,+BAA+B;EAC/B,cAAc;AAChB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,4DAA4D;EAC5D,sCAAsC;EACtC,yCAAyC;AAC3C;;AAEA;EACE,kCAAkC;EAClC,qCAAqC;EACrC,iBAAiB;EACjB,+BAA+B;AACjC;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;AACrB;;AAEA;EACE,cAAc;EACd,cAAc;EACd,WAAW;EACX,kBAAkB;AACpB;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,YAAY;EACZ,YAAY;EACZ,2CAA2C;EAC3C,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,wCAAwC;EACxC;;;;;;;;;GASC;EACD,0BAA0B;EAC1B,WAAW;EACX,SAAS;EACT,YAAY;EACZ,eAAe;EACf,iBAAiB;EACjB,WAAW;EACX,kBAAkB;EAClB,qEAAqE;AACvE;;AAEA;EACE,+BAA+B;EAC/B,qCAAqC;EACrC,kCAAkC;EAClC,iBAAiB;EACjB,YAAY;AACd;;AAEA;EACE;IACE,wBAAwB;EAC1B;;EAEA;IACE,8BAA8B;EAChC;AACF\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Styles\\n|----------------------------------------------------------------------------*/\\n\\n.jp-StatusBar-Widget {\\n  display: flex;\\n  align-items: center;\\n  background: var(--jp-layout-color2);\\n  min-height: var(--jp-statusbar-height);\\n  justify-content: space-between;\\n  padding: 0 10px;\\n}\\n\\n.jp-StatusBar-Left {\\n  display: flex;\\n  align-items: center;\\n  flex-direction: row;\\n}\\n\\n.jp-StatusBar-Middle {\\n  display: flex;\\n  align-items: center;\\n}\\n\\n.jp-StatusBar-Right {\\n  display: flex;\\n  align-items: center;\\n  flex-direction: row-reverse;\\n}\\n\\n.jp-StatusBar-Item {\\n  max-height: var(--jp-statusbar-height);\\n  margin: 0 2px;\\n  height: var(--jp-statusbar-height);\\n  white-space: nowrap;\\n  text-overflow: ellipsis;\\n  color: var(--jp-ui-font-color1);\\n  padding: 0 6px;\\n}\\n\\n.jp-mod-highlighted:hover {\\n  background-color: var(--jp-layout-color3);\\n}\\n\\n.jp-mod-clicked {\\n  background-color: var(--jp-brand-color1);\\n}\\n\\n.jp-mod-clicked:hover {\\n  background-color: var(--jp-brand-color0);\\n}\\n\\n.jp-mod-clicked .jp-StatusBar-TextItem {\\n  color: var(--jp-ui-inverse-font-color1);\\n}\\n\\n.jp-StatusBar-HoverItem {\\n  border: var(--jp-border-width) solid var(--jp-border-color1);\\n  border-radius: var(--jp-border-radius);\\n  box-shadow: 0 4px 4px rgba(0, 0, 0, 0.25);\\n}\\n\\n.jp-StatusBar-TextItem {\\n  font-size: var(--jp-ui-font-size1);\\n  font-family: var(--jp-ui-font-family);\\n  line-height: 24px;\\n  color: var(--jp-ui-font-color1);\\n}\\n\\n.jp-StatusBar-GroupItem {\\n  display: flex;\\n  align-items: center;\\n  flex-direction: row;\\n}\\n\\n.jp-Statusbar-ProgressCircle > svg {\\n  display: block;\\n  margin: 0 auto;\\n  width: 16px;\\n  align-self: normal;\\n}\\n\\n.jp-Statusbar-ProgressCircle .jp-Statusbar-ProgressCirclePath {\\n  fill: var(--jp-inverse-layout-color3);\\n}\\n\\n.jp-Statusbar-ProgressBar-progress-bar {\\n  height: 10px;\\n  width: 100px;\\n  border: solid 0.25px var(--jp-brand-color2);\\n  border-radius: 3px;\\n  overflow: hidden;\\n  align-self: center;\\n}\\n\\n.jp-Statusbar-ProgressBar-progress-bar > div {\\n  background-color: var(--jp-brand-color2);\\n  background-image: linear-gradient(\\n    -45deg,\\n    rgba(255, 255, 255, 0.2) 25%,\\n    transparent 25%,\\n    transparent 50%,\\n    rgba(255, 255, 255, 0.2) 50%,\\n    rgba(255, 255, 255, 0.2) 75%,\\n    transparent 75%,\\n    transparent\\n  );\\n  background-size: 40px 40px;\\n  float: left;\\n  width: 0%;\\n  height: 100%;\\n  font-size: 12px;\\n  line-height: 14px;\\n  color: #fff;\\n  text-align: center;\\n  animation: jp-Statusbar-ExecutionTime-progress-bar 2s linear infinite;\\n}\\n\\n.jp-Statusbar-ProgressBar-progress-bar p {\\n  color: var(--jp-ui-font-color1);\\n  font-family: var(--jp-ui-font-family);\\n  font-size: var(--jp-ui-font-size1);\\n  line-height: 10px;\\n  width: 100px;\\n}\\n\\n@keyframes jp-Statusbar-ExecutionTime-progress-bar {\\n  0% {\\n    background-position: 0 0;\\n  }\\n\\n  100% {\\n    background-position: 40px 40px;\\n  }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-Terminal {\n  min-width: 240px;\n  min-height: 120px;\n}\n\n.jp-Terminal-body {\n  padding: 8px;\n}\n\n[data-term-theme='inherit'] .xterm .xterm-screen canvas {\n  border: 1px solid var(--jp-layout-color0);\n}\n\n[data-term-theme='light'] .xterm .xterm-screen canvas {\n  border: 1px solid #fff;\n}\n\n[data-term-theme='dark'] .xterm .xterm-screen canvas {\n  border: 1px solid #000;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/terminal/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;AACxB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Terminal {\\n  min-width: 240px;\\n  min-height: 120px;\\n}\\n\\n.jp-Terminal-body {\\n  padding: 8px;\\n}\\n\\n[data-term-theme='inherit'] .xterm .xterm-screen canvas {\\n  border: 1px solid var(--jp-layout-color0);\\n}\\n\\n[data-term-theme='light'] .xterm .xterm-screen canvas {\\n  border: 1px solid #fff;\\n}\\n\\n[data-term-theme='dark'] .xterm .xterm-screen canvas {\\n  border: 1px solid #000;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/toc-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/*-----------------------------------------------------------------------------\n| Table of Contents\n|----------------------------------------------------------------------------*/\n\n.jp-TableOfContents {\n  display: flex;\n  flex-direction: column;\n  background: var(--jp-layout-color1);\n  color: var(--jp-ui-font-color1);\n  font-size: var(--jp-ui-font-size1);\n  height: 100%;\n}\n\n.jp-TableOfContents-placeholder {\n  text-align: center;\n}\n\n.jp-TableOfContents-placeholderContent {\n  color: var(--jp-content-font-color2);\n  padding: 8px;\n}\n\n.jp-TableOfContents-placeholderContent > h3 {\n  margin-bottom: var(--jp-content-heading-margin-bottom);\n}\n\n.jp-TableOfContents .jp-SidePanel-content {\n  overflow-y: auto;\n}\n\n.jp-TableOfContents-tree {\n  margin: 4px;\n}\n\n.jp-TableOfContents-content {\n  padding: 0;\n  background-color: var(--jp-layout-color1);\n}\n\n.jp-tocItem {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.jp-tocItem-heading {\n  display: flex;\n  cursor: pointer;\n  width: 100%;\n}\n\n.jp-tocItem-content {\n  display: block;\n  padding: 4px 0;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow-x: hidden;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/toc/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;8EAE8E;;AAE9E;EACE,aAAa;EACb,sBAAsB;EACtB,mCAAmC;EACnC,+BAA+B;EAC/B,kCAAkC;EAClC,YAAY;AACd;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,oCAAoC;EACpC,YAAY;AACd;;AAEA;EACE,sDAAsD;AACxD;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,UAAU;EACV,yCAAyC;AAC3C;;AAEA;EACE,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,eAAe;EACf,WAAW;AACb;;AAEA;EACE,cAAc;EACd,cAAc;EACd,mBAAmB;EACnB,uBAAuB;EACvB,kBAAkB;AACpB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/*-----------------------------------------------------------------------------\\n| Table of Contents\\n|----------------------------------------------------------------------------*/\\n\\n.jp-TableOfContents {\\n  display: flex;\\n  flex-direction: column;\\n  background: var(--jp-layout-color1);\\n  color: var(--jp-ui-font-color1);\\n  font-size: var(--jp-ui-font-size1);\\n  height: 100%;\\n}\\n\\n.jp-TableOfContents-placeholder {\\n  text-align: center;\\n}\\n\\n.jp-TableOfContents-placeholderContent {\\n  color: var(--jp-content-font-color2);\\n  padding: 8px;\\n}\\n\\n.jp-TableOfContents-placeholderContent > h3 {\\n  margin-bottom: var(--jp-content-heading-margin-bottom);\\n}\\n\\n.jp-TableOfContents .jp-SidePanel-content {\\n  overflow-y: auto;\\n}\\n\\n.jp-TableOfContents-tree {\\n  margin: 4px;\\n}\\n\\n.jp-TableOfContents-content {\\n  padding: 0;\\n  background-color: var(--jp-layout-color1);\\n}\\n\\n.jp-tocItem {\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n}\\n\\n.jp-tocItem-heading {\\n  display: flex;\\n  cursor: pointer;\\n  width: 100%;\\n}\\n\\n.jp-tocItem-content {\\n  display: block;\\n  padding: 4px 0;\\n  white-space: nowrap;\\n  text-overflow: ellipsis;\\n  overflow-x: hidden;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-Tooltip {\n  background: var(--jp-layout-color1);\n  border: var(--jp-border-width) solid var(--jp-border-color1);\n  font-size: var(--jp-ui-font-size0);\n  box-shadow: var(--jp-elevation-z6);\n  max-width: 750px;\n  max-height: 350px;\n  z-index: 10001;\n  padding: 4px;\n  display: flex;\n}\n\n.jp-Tooltip-content {\n  overflow: auto;\n}\n\n.jp-Tooltip:focus {\n  outline: 0;\n}\n\n.jp-Tooltip pre {\n  white-space: pre-wrap;\n  margin: 0;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/tooltip/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,mCAAmC;EACnC,4DAA4D;EAC5D,kCAAkC;EAClC,kCAAkC;EAClC,gBAAgB;EAChB,iBAAiB;EACjB,cAAc;EACd,YAAY;EACZ,aAAa;AACf;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,qBAAqB;EACrB,SAAS;AACX\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Tooltip {\\n  background: var(--jp-layout-color1);\\n  border: var(--jp-border-width) solid var(--jp-border-color1);\\n  font-size: var(--jp-ui-font-size0);\\n  box-shadow: var(--jp-elevation-z6);\\n  max-width: 750px;\\n  max-height: 350px;\\n  z-index: 10001;\\n  padding: 4px;\\n  display: flex;\\n}\\n\\n.jp-Tooltip-content {\\n  overflow: auto;\\n}\\n\\n.jp-Tooltip:focus {\\n  outline: 0;\\n}\\n\\n.jp-Tooltip pre {\\n  white-space: pre-wrap;\\n  margin: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./collapse.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./deprecated.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./deprecatedExtra.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./tabbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./icons.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./iconsalt.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_6___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./iconshover.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_7___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./iframe.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_8___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./hoverbox.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_9___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./rjsfTemplates.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_10___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./sidepanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_11___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./spinner.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_12___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./styling.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_13___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./switch.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_14___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./table.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_15___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./toolbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_16___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./toolkit.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_17___ from \"-!../../builder/node_modules/css-loader/dist/cjs.js!./windowedlist.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_6___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_7___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_8___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_9___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_10___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_11___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_12___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_13___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_14___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_15___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_16___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_17___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* Sibling imports */\n\n.jp-ThemedContainer {\n  color: var(--jp-ui-font-color1);\n  font-size: var(--jp-ui-font-size1);\n}\n\n/* Disable native link decoration styles everywhere outside of dialog boxes */\n.jp-ThemedContainer a {\n  text-decoration: unset;\n  color: unset;\n}\n\n.jp-ThemedContainer a:hover {\n  text-decoration: unset;\n  color: unset;\n}\n\n/* Accessibility for links inside dialog box text */\n.jp-Dialog-content a {\n  text-decoration: revert;\n  color: var(--jp-content-link-color);\n}\n\n.jp-Dialog-content a:hover {\n  text-decoration: revert;\n}\n\n/* Styles for ui-components */\n.jp-FilterBox {\n  --design-unit: 3;\n  --density: 0;\n}\n\n.jp-Button {\n  color: var(--jp-ui-font-color2);\n  border-radius: var(--jp-border-radius);\n  padding: 0 12px;\n  font-size: var(--jp-ui-font-size1);\n\n  /* Copy from blueprint 3 */\n  display: inline-flex;\n  flex-direction: row;\n  border: none;\n  cursor: pointer;\n  align-items: center;\n  justify-content: center;\n  text-align: left;\n  vertical-align: middle;\n  min-height: 30px;\n  min-width: 30px;\n}\n\n.jp-Button:disabled {\n  cursor: not-allowed;\n}\n\n.jp-Button:empty {\n  padding: 0 !important;\n}\n\n.jp-Button.jp-mod-small {\n  min-height: 24px;\n  min-width: 24px;\n  font-size: 12px;\n  padding: 0 7px;\n}\n\n/* Use our own theme for hover styles */\n.jp-Button.jp-mod-minimal:hover {\n  background-color: var(--jp-layout-color2);\n}\n\n.jp-Button.jp-mod-minimal {\n  background: none;\n}\n\n.jp-InputGroup {\n  display: block;\n  position: relative;\n}\n\n.jp-InputGroup input {\n  box-sizing: border-box;\n  border: none;\n  border-radius: var(--jp-border-radius);\n  background-color: transparent;\n  color: var(--jp-ui-font-color0);\n  box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color);\n  padding-bottom: 0;\n  padding-top: 0;\n  padding-left: 10px;\n  padding-right: 28px;\n  position: relative;\n  width: 100%;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  font-size: 14px;\n  font-weight: 400;\n  height: 30px;\n  line-height: 30px;\n  outline: none;\n  vertical-align: middle;\n}\n\n.jp-InputGroup input:focus {\n  box-shadow:\n    inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),\n    inset 0 0 0 3px var(--jp-input-active-box-shadow-color);\n}\n\n.jp-InputGroup input:disabled {\n  cursor: not-allowed;\n  resize: block;\n  background-color: var(--jp-layout-color2);\n  color: var(--jp-ui-font-color2);\n}\n\n.jp-InputGroup input:disabled ~ span {\n  cursor: not-allowed;\n  color: var(--jp-ui-font-color2);\n}\n\n.jp-InputGroup input::placeholder,\n.jp-ThemedContainer input::placeholder {\n  color: var(--jp-ui-font-color2);\n}\n\n.jp-InputGroupAction {\n  position: absolute;\n  bottom: 1px;\n  right: 0;\n  padding: 6px;\n}\n\n.jp-HTMLSelect.jp-DefaultStyle {\n  /* Leave space for the focus outline */\n  padding: 0 2px;\n}\n\n.jp-HTMLSelect.jp-DefaultStyle select {\n  background-color: initial;\n  border: none;\n  border-radius: 0;\n  box-shadow: none;\n  color: var(--jp-ui-font-color0);\n  display: block;\n  font-size: var(--jp-ui-font-size1);\n  font-family: var(--jp-ui-font-family);\n  height: 24px;\n  line-height: 14px;\n  padding: 0 25px 0 10px;\n  text-align: left;\n  -moz-appearance: none;\n  -webkit-appearance: none;\n}\n\n.jp-HTMLSelect.jp-DefaultStyle select:disabled {\n  background-color: var(--jp-layout-color2);\n  color: var(--jp-ui-font-color2);\n  cursor: not-allowed;\n  resize: block;\n}\n\n.jp-HTMLSelect.jp-DefaultStyle select:disabled ~ span {\n  cursor: not-allowed;\n}\n\n.jp-HTMLSelect.jp-DefaultStyle select:focus-visible {\n  outline: 2px solid var(--accent-fill-focus, var(--jp-brand-color1));\n}\n\n/* Use our own theme for hover and option styles */\n/* stylelint-disable-next-line selector-max-type */\n.jp-HTMLSelect.jp-DefaultStyle select:hover,\n.jp-HTMLSelect.jp-DefaultStyle select > option {\n  background-color: var(--jp-layout-color2);\n  color: var(--jp-ui-font-color0);\n}\n\n.jp-ThemedContainer select {\n  box-sizing: border-box;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E,oBAAoB;;AAoBpB;EACE,+BAA+B;EAC/B,kCAAkC;AACpC;;AAEA,6EAA6E;AAC7E;EACE,sBAAsB;EACtB,YAAY;AACd;;AAEA;EACE,sBAAsB;EACtB,YAAY;AACd;;AAEA,mDAAmD;AACnD;EACE,uBAAuB;EACvB,mCAAmC;AACrC;;AAEA;EACE,uBAAuB;AACzB;;AAEA,6BAA6B;AAC7B;EACE,gBAAgB;EAChB,YAAY;AACd;;AAEA;EACE,+BAA+B;EAC/B,sCAAsC;EACtC,eAAe;EACf,kCAAkC;;EAElC,0BAA0B;EAC1B,oBAAoB;EACpB,mBAAmB;EACnB,YAAY;EACZ,eAAe;EACf,mBAAmB;EACnB,uBAAuB;EACvB,gBAAgB;EAChB,sBAAsB;EACtB,gBAAgB;EAChB,eAAe;AACjB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;EAChB,eAAe;EACf,eAAe;EACf,cAAc;AAChB;;AAEA,uCAAuC;AACvC;EACE,yCAAyC;AAC3C;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,cAAc;EACd,kBAAkB;AACpB;;AAEA;EACE,sBAAsB;EACtB,YAAY;EACZ,sCAAsC;EACtC,6BAA6B;EAC7B,+BAA+B;EAC/B,2EAA2E;EAC3E,iBAAiB;EACjB,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,kBAAkB;EAClB,WAAW;EACX,wBAAwB;EACxB,qBAAqB;EACrB,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,YAAY;EACZ,iBAAiB;EACjB,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE;;2DAEyD;AAC3D;;AAEA;EACE,mBAAmB;EACnB,aAAa;EACb,yCAAyC;EACzC,+BAA+B;AACjC;;AAEA;EACE,mBAAmB;EACnB,+BAA+B;AACjC;;AAEA;;EAEE,+BAA+B;AACjC;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,QAAQ;EACR,YAAY;AACd;;AAEA;EACE,sCAAsC;EACtC,cAAc;AAChB;;AAEA;EACE,yBAAyB;EACzB,YAAY;EACZ,gBAAgB;EAChB,gBAAgB;EAChB,+BAA+B;EAC/B,cAAc;EACd,kCAAkC;EAClC,qCAAqC;EACrC,YAAY;EACZ,iBAAiB;EACjB,sBAAsB;EACtB,gBAAgB;EAChB,qBAAqB;EACrB,wBAAwB;AAC1B;;AAEA;EACE,yCAAyC;EACzC,+BAA+B;EAC/B,mBAAmB;EACnB,aAAa;AACf;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mEAAmE;AACrE;;AAEA,kDAAkD;AAClD,kDAAkD;AAClD;;EAEE,yCAAyC;EACzC,+BAA+B;AACjC;;AAEA;EACE,sBAAsB;AACxB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/* Sibling imports */\\n@import './collapse.css';\\n@import './deprecated.css';\\n@import './deprecatedExtra.css';\\n@import './tabbar.css';\\n@import './icons.css';\\n@import './iconsalt.css';\\n@import './iconshover.css';\\n@import './iframe.css';\\n@import './hoverbox.css';\\n@import './rjsfTemplates.css';\\n@import './sidepanel.css';\\n@import './spinner.css';\\n@import './styling.css';\\n@import './switch.css';\\n@import './table.css';\\n@import './toolbar.css';\\n@import './toolkit.css';\\n@import './windowedlist.css';\\n\\n.jp-ThemedContainer {\\n  color: var(--jp-ui-font-color1);\\n  font-size: var(--jp-ui-font-size1);\\n}\\n\\n/* Disable native link decoration styles everywhere outside of dialog boxes */\\n.jp-ThemedContainer a {\\n  text-decoration: unset;\\n  color: unset;\\n}\\n\\n.jp-ThemedContainer a:hover {\\n  text-decoration: unset;\\n  color: unset;\\n}\\n\\n/* Accessibility for links inside dialog box text */\\n.jp-Dialog-content a {\\n  text-decoration: revert;\\n  color: var(--jp-content-link-color);\\n}\\n\\n.jp-Dialog-content a:hover {\\n  text-decoration: revert;\\n}\\n\\n/* Styles for ui-components */\\n.jp-FilterBox {\\n  --design-unit: 3;\\n  --density: 0;\\n}\\n\\n.jp-Button {\\n  color: var(--jp-ui-font-color2);\\n  border-radius: var(--jp-border-radius);\\n  padding: 0 12px;\\n  font-size: var(--jp-ui-font-size1);\\n\\n  /* Copy from blueprint 3 */\\n  display: inline-flex;\\n  flex-direction: row;\\n  border: none;\\n  cursor: pointer;\\n  align-items: center;\\n  justify-content: center;\\n  text-align: left;\\n  vertical-align: middle;\\n  min-height: 30px;\\n  min-width: 30px;\\n}\\n\\n.jp-Button:disabled {\\n  cursor: not-allowed;\\n}\\n\\n.jp-Button:empty {\\n  padding: 0 !important;\\n}\\n\\n.jp-Button.jp-mod-small {\\n  min-height: 24px;\\n  min-width: 24px;\\n  font-size: 12px;\\n  padding: 0 7px;\\n}\\n\\n/* Use our own theme for hover styles */\\n.jp-Button.jp-mod-minimal:hover {\\n  background-color: var(--jp-layout-color2);\\n}\\n\\n.jp-Button.jp-mod-minimal {\\n  background: none;\\n}\\n\\n.jp-InputGroup {\\n  display: block;\\n  position: relative;\\n}\\n\\n.jp-InputGroup input {\\n  box-sizing: border-box;\\n  border: none;\\n  border-radius: var(--jp-border-radius);\\n  background-color: transparent;\\n  color: var(--jp-ui-font-color0);\\n  box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color);\\n  padding-bottom: 0;\\n  padding-top: 0;\\n  padding-left: 10px;\\n  padding-right: 28px;\\n  position: relative;\\n  width: 100%;\\n  -webkit-appearance: none;\\n  -moz-appearance: none;\\n  appearance: none;\\n  font-size: 14px;\\n  font-weight: 400;\\n  height: 30px;\\n  line-height: 30px;\\n  outline: none;\\n  vertical-align: middle;\\n}\\n\\n.jp-InputGroup input:focus {\\n  box-shadow:\\n    inset 0 0 0 var(--jp-border-width) var(--jp-input-active-box-shadow-color),\\n    inset 0 0 0 3px var(--jp-input-active-box-shadow-color);\\n}\\n\\n.jp-InputGroup input:disabled {\\n  cursor: not-allowed;\\n  resize: block;\\n  background-color: var(--jp-layout-color2);\\n  color: var(--jp-ui-font-color2);\\n}\\n\\n.jp-InputGroup input:disabled ~ span {\\n  cursor: not-allowed;\\n  color: var(--jp-ui-font-color2);\\n}\\n\\n.jp-InputGroup input::placeholder,\\n.jp-ThemedContainer input::placeholder {\\n  color: var(--jp-ui-font-color2);\\n}\\n\\n.jp-InputGroupAction {\\n  position: absolute;\\n  bottom: 1px;\\n  right: 0;\\n  padding: 6px;\\n}\\n\\n.jp-HTMLSelect.jp-DefaultStyle {\\n  /* Leave space for the focus outline */\\n  padding: 0 2px;\\n}\\n\\n.jp-HTMLSelect.jp-DefaultStyle select {\\n  background-color: initial;\\n  border: none;\\n  border-radius: 0;\\n  box-shadow: none;\\n  color: var(--jp-ui-font-color0);\\n  display: block;\\n  font-size: var(--jp-ui-font-size1);\\n  font-family: var(--jp-ui-font-family);\\n  height: 24px;\\n  line-height: 14px;\\n  padding: 0 25px 0 10px;\\n  text-align: left;\\n  -moz-appearance: none;\\n  -webkit-appearance: none;\\n}\\n\\n.jp-HTMLSelect.jp-DefaultStyle select:disabled {\\n  background-color: var(--jp-layout-color2);\\n  color: var(--jp-ui-font-color2);\\n  cursor: not-allowed;\\n  resize: block;\\n}\\n\\n.jp-HTMLSelect.jp-DefaultStyle select:disabled ~ span {\\n  cursor: not-allowed;\\n}\\n\\n.jp-HTMLSelect.jp-DefaultStyle select:focus-visible {\\n  outline: 2px solid var(--accent-fill-focus, var(--jp-brand-color1));\\n}\\n\\n/* Use our own theme for hover and option styles */\\n/* stylelint-disable-next-line selector-max-type */\\n.jp-HTMLSelect.jp-DefaultStyle select:hover,\\n.jp-HTMLSelect.jp-DefaultStyle select > option {\\n  background-color: var(--jp-layout-color2);\\n  color: var(--jp-ui-font-color0);\\n}\\n\\n.jp-ThemedContainer select {\\n  box-sizing: border-box;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-Collapse {\n  display: flex;\n  flex-direction: column;\n  align-items: stretch;\n}\n\n.jp-Collapse-header {\n  padding: 1px 12px;\n  background-color: var(--jp-layout-color1);\n  border-bottom: solid var(--jp-border-width) var(--jp-border-color2);\n  color: var(--jp-ui-font-color1);\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  font-size: var(--jp-ui-font-size0);\n  font-weight: 600;\n  text-transform: uppercase;\n  user-select: none;\n}\n\n.jp-Collapser-icon {\n  height: 16px;\n}\n\n.jp-Collapse-header-collapsed .jp-Collapser-icon {\n  transform: rotate(-90deg);\n  margin: auto 0;\n}\n\n.jp-Collapser-title {\n  line-height: 25px;\n}\n\n.jp-Collapse-contents {\n  padding: 0 12px;\n  background-color: var(--jp-layout-color1);\n  color: var(--jp-ui-font-color1);\n  overflow: auto;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/collapse.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,aAAa;EACb,sBAAsB;EACtB,oBAAoB;AACtB;;AAEA;EACE,iBAAiB;EACjB,yCAAyC;EACzC,mEAAmE;EACnE,+BAA+B;EAC/B,eAAe;EACf,aAAa;EACb,mBAAmB;EACnB,kCAAkC;EAClC,gBAAgB;EAChB,yBAAyB;EACzB,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,yBAAyB;EACzB,cAAc;AAChB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,yCAAyC;EACzC,+BAA+B;EAC/B,cAAc;AAChB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Collapse {\\n  display: flex;\\n  flex-direction: column;\\n  align-items: stretch;\\n}\\n\\n.jp-Collapse-header {\\n  padding: 1px 12px;\\n  background-color: var(--jp-layout-color1);\\n  border-bottom: solid var(--jp-border-width) var(--jp-border-color2);\\n  color: var(--jp-ui-font-color1);\\n  cursor: pointer;\\n  display: flex;\\n  align-items: center;\\n  font-size: var(--jp-ui-font-size0);\\n  font-weight: 600;\\n  text-transform: uppercase;\\n  user-select: none;\\n}\\n\\n.jp-Collapser-icon {\\n  height: 16px;\\n}\\n\\n.jp-Collapse-header-collapsed .jp-Collapser-icon {\\n  transform: rotate(-90deg);\\n  margin: auto 0;\\n}\\n\\n.jp-Collapser-title {\\n  line-height: 25px;\\n}\\n\\n.jp-Collapse-contents {\\n  padding: 0 12px;\\n  background-color: var(--jp-layout-color1);\\n  color: var(--jp-ui-font-color1);\\n  overflow: auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"icons/toolbar/add-above.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"icons/toolbar/add-below.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"icons/toolbar/add.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_3___ = new URL(\"icons/statusbar/bell.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_4___ = new URL(\"icons/toolbar/bug-dot.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_5___ = new URL(\"icons/toolbar/bug.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_6___ = new URL(\"icons/sidebar/build.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_7___ = new URL(\"icons/arrow/caret-down-empty-thin.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_8___ = new URL(\"icons/arrow/caret-down-empty.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_9___ = new URL(\"icons/arrow/caret-down.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_10___ = new URL(\"icons/arrow/caret-left.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_11___ = new URL(\"icons/arrow/caret-right.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_12___ = new URL(\"icons/arrow/caret-up-empty-thin.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_13___ = new URL(\"icons/arrow/caret-up.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_14___ = new URL(\"icons/search/case-sensitive.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_15___ = new URL(\"icons/toolbar/check.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_16___ = new URL(\"icons/toolbar/circle-empty.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_17___ = new URL(\"icons/toolbar/circle.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_18___ = new URL(\"icons/toolbar/cleaning.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_19___ = new URL(\"icons/toolbar/clear.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_20___ = new URL(\"icons/debugger/close-all.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_21___ = new URL(\"icons/toolbar/close.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_22___ = new URL(\"icons/lsp/code-check.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_23___ = new URL(\"icons/toolbar/code.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_24___ = new URL(\"icons/toolbar/collapse-all.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_25___ = new URL(\"icons/output/collapse.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_26___ = new URL(\"icons/filetype/console.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_27___ = new URL(\"icons/toolbar/copy.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_28___ = new URL(\"icons/licenses/copyright.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_29___ = new URL(\"icons/toolbar/cut.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_30___ = new URL(\"icons/toolbar/delete.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_31___ = new URL(\"icons/toolbar/dock-bottom.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_32___ = new URL(\"icons/toolbar/dock-left.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_33___ = new URL(\"icons/toolbar/dock-right.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_34___ = new URL(\"icons/toolbar/dock-top.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_35___ = new URL(\"icons/toolbar/dots.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_36___ = new URL(\"icons/toolbar/download.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_37___ = new URL(\"icons/toolbar/duplicate.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_38___ = new URL(\"icons/toolbar/edit.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_39___ = new URL(\"icons/toolbar/ellipses.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_40___ = new URL(\"icons/error.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_41___ = new URL(\"icons/debugger/exceptions.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_42___ = new URL(\"icons/toolbar/expand-all.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_43___ = new URL(\"icons/output/expand.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_44___ = new URL(\"icons/sidebar/extension.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_45___ = new URL(\"icons/toolbar/fast-forward.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_46___ = new URL(\"icons/toolbar/file-upload.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_47___ = new URL(\"icons/filetype/file.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_48___ = new URL(\"icons/search/filter-dot.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_49___ = new URL(\"icons/toolbar/filter-list.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_50___ = new URL(\"icons/search/filter.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_51___ = new URL(\"icons/filetype/folder-favorite.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_52___ = new URL(\"icons/filetype/folder.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_53___ = new URL(\"icons/history.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_54___ = new URL(\"icons/filetype/home.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_55___ = new URL(\"icons/filetype/html5.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_56___ = new URL(\"icons/filetype/image.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_57___ = new URL(\"icons/info.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_58___ = new URL(\"icons/filetype/inspector.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_59___ = new URL(\"icons/filetype/json.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_60___ = new URL(\"icons/filetype/julia.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_61___ = new URL(\"icons/jupyter/jupyter-favicon.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_62___ = new URL(\"icons/jupyter/jupyter.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_63___ = new URL(\"icons/jupyter/jupyterlab-wordmark.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_64___ = new URL(\"icons/statusbar/kernel.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_65___ = new URL(\"icons/filetype/keyboard.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_66___ = new URL(\"icons/toolbar/launch.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_67___ = new URL(\"icons/filetype/launcher.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_68___ = new URL(\"icons/statusbar/line-form.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_69___ = new URL(\"icons/toolbar/link.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_70___ = new URL(\"icons/statusbar/list.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_71___ = new URL(\"icons/lock.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_72___ = new URL(\"icons/filetype/markdown.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_73___ = new URL(\"icons/filetype/mermaid.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_74___ = new URL(\"icons/toolbar/move-down.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_75___ = new URL(\"icons/toolbar/move-up.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_76___ = new URL(\"icons/toolbar/new-folder.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_77___ = new URL(\"icons/statusbar/not-trusted.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_78___ = new URL(\"icons/filetype/notebook.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_79___ = new URL(\"icons/toolbar/numbering.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_80___ = new URL(\"icons/toolbar/offline-bolt.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_81___ = new URL(\"icons/debugger/open-kernel-source.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_82___ = new URL(\"icons/sidebar/palette.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_83___ = new URL(\"icons/toolbar/paste.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_84___ = new URL(\"icons/debugger/pause.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_85___ = new URL(\"icons/filetype/pdf.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_86___ = new URL(\"icons/filetype/python.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_87___ = new URL(\"icons/filetype/r-kernel.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_88___ = new URL(\"icons/filetype/react.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_89___ = new URL(\"icons/toolbar/redo.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_90___ = new URL(\"icons/toolbar/refresh.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_91___ = new URL(\"icons/search/regex.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_92___ = new URL(\"icons/toolbar/run.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_93___ = new URL(\"icons/sidebar/running.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_94___ = new URL(\"icons/toolbar/save.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_95___ = new URL(\"icons/toolbar/search.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_96___ = new URL(\"icons/filetype/settings.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_97___ = new URL(\"icons/sidebar/share.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_98___ = new URL(\"icons/filetype/spreadsheet.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_99___ = new URL(\"icons/debugger/step-into.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_100___ = new URL(\"icons/debugger/step-out.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_101___ = new URL(\"icons/debugger/step-over.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_102___ = new URL(\"icons/toolbar/stop.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_103___ = new URL(\"icons/sidebar/tab.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_104___ = new URL(\"icons/toolbar/table-rows.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_105___ = new URL(\"icons/toolbar/tag.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_106___ = new URL(\"icons/statusbar/terminal.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_107___ = new URL(\"icons/filetype/text-editor.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_108___ = new URL(\"icons/sidebar/toc.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_109___ = new URL(\"icons/toolbar/tree-view.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_110___ = new URL(\"icons/statusbar/trusted.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_111___ = new URL(\"icons/toolbar/undo.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_112___ = new URL(\"icons/sidebar/user.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_113___ = new URL(\"icons/sidebar/users.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_114___ = new URL(\"icons/debugger/variable.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_115___ = new URL(\"icons/filetype/vega.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_116___ = new URL(\"icons/debugger/view-breakpoint.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_117___ = new URL(\"icons/search/word.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_118___ = new URL(\"icons/filetype/yaml.svg\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\nvar ___CSS_LOADER_URL_REPLACEMENT_5___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_5___);\nvar ___CSS_LOADER_URL_REPLACEMENT_6___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_6___);\nvar ___CSS_LOADER_URL_REPLACEMENT_7___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_7___);\nvar ___CSS_LOADER_URL_REPLACEMENT_8___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_8___);\nvar ___CSS_LOADER_URL_REPLACEMENT_9___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_9___);\nvar ___CSS_LOADER_URL_REPLACEMENT_10___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_10___);\nvar ___CSS_LOADER_URL_REPLACEMENT_11___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_11___);\nvar ___CSS_LOADER_URL_REPLACEMENT_12___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_12___);\nvar ___CSS_LOADER_URL_REPLACEMENT_13___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_13___);\nvar ___CSS_LOADER_URL_REPLACEMENT_14___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_14___);\nvar ___CSS_LOADER_URL_REPLACEMENT_15___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_15___);\nvar ___CSS_LOADER_URL_REPLACEMENT_16___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_16___);\nvar ___CSS_LOADER_URL_REPLACEMENT_17___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_17___);\nvar ___CSS_LOADER_URL_REPLACEMENT_18___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_18___);\nvar ___CSS_LOADER_URL_REPLACEMENT_19___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_19___);\nvar ___CSS_LOADER_URL_REPLACEMENT_20___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_20___);\nvar ___CSS_LOADER_URL_REPLACEMENT_21___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_21___);\nvar ___CSS_LOADER_URL_REPLACEMENT_22___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_22___);\nvar ___CSS_LOADER_URL_REPLACEMENT_23___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_23___);\nvar ___CSS_LOADER_URL_REPLACEMENT_24___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_24___);\nvar ___CSS_LOADER_URL_REPLACEMENT_25___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_25___);\nvar ___CSS_LOADER_URL_REPLACEMENT_26___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_26___);\nvar ___CSS_LOADER_URL_REPLACEMENT_27___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_27___);\nvar ___CSS_LOADER_URL_REPLACEMENT_28___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_28___);\nvar ___CSS_LOADER_URL_REPLACEMENT_29___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_29___);\nvar ___CSS_LOADER_URL_REPLACEMENT_30___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_30___);\nvar ___CSS_LOADER_URL_REPLACEMENT_31___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_31___);\nvar ___CSS_LOADER_URL_REPLACEMENT_32___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_32___);\nvar ___CSS_LOADER_URL_REPLACEMENT_33___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_33___);\nvar ___CSS_LOADER_URL_REPLACEMENT_34___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_34___);\nvar ___CSS_LOADER_URL_REPLACEMENT_35___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_35___);\nvar ___CSS_LOADER_URL_REPLACEMENT_36___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_36___);\nvar ___CSS_LOADER_URL_REPLACEMENT_37___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_37___);\nvar ___CSS_LOADER_URL_REPLACEMENT_38___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_38___);\nvar ___CSS_LOADER_URL_REPLACEMENT_39___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_39___);\nvar ___CSS_LOADER_URL_REPLACEMENT_40___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_40___);\nvar ___CSS_LOADER_URL_REPLACEMENT_41___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_41___);\nvar ___CSS_LOADER_URL_REPLACEMENT_42___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_42___);\nvar ___CSS_LOADER_URL_REPLACEMENT_43___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_43___);\nvar ___CSS_LOADER_URL_REPLACEMENT_44___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_44___);\nvar ___CSS_LOADER_URL_REPLACEMENT_45___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_45___);\nvar ___CSS_LOADER_URL_REPLACEMENT_46___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_46___);\nvar ___CSS_LOADER_URL_REPLACEMENT_47___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_47___);\nvar ___CSS_LOADER_URL_REPLACEMENT_48___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_48___);\nvar ___CSS_LOADER_URL_REPLACEMENT_49___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_49___);\nvar ___CSS_LOADER_URL_REPLACEMENT_50___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_50___);\nvar ___CSS_LOADER_URL_REPLACEMENT_51___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_51___);\nvar ___CSS_LOADER_URL_REPLACEMENT_52___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_52___);\nvar ___CSS_LOADER_URL_REPLACEMENT_53___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_53___);\nvar ___CSS_LOADER_URL_REPLACEMENT_54___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_54___);\nvar ___CSS_LOADER_URL_REPLACEMENT_55___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_55___);\nvar ___CSS_LOADER_URL_REPLACEMENT_56___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_56___);\nvar ___CSS_LOADER_URL_REPLACEMENT_57___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_57___);\nvar ___CSS_LOADER_URL_REPLACEMENT_58___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_58___);\nvar ___CSS_LOADER_URL_REPLACEMENT_59___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_59___);\nvar ___CSS_LOADER_URL_REPLACEMENT_60___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_60___);\nvar ___CSS_LOADER_URL_REPLACEMENT_61___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_61___);\nvar ___CSS_LOADER_URL_REPLACEMENT_62___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_62___);\nvar ___CSS_LOADER_URL_REPLACEMENT_63___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_63___);\nvar ___CSS_LOADER_URL_REPLACEMENT_64___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_64___);\nvar ___CSS_LOADER_URL_REPLACEMENT_65___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_65___);\nvar ___CSS_LOADER_URL_REPLACEMENT_66___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_66___);\nvar ___CSS_LOADER_URL_REPLACEMENT_67___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_67___);\nvar ___CSS_LOADER_URL_REPLACEMENT_68___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_68___);\nvar ___CSS_LOADER_URL_REPLACEMENT_69___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_69___);\nvar ___CSS_LOADER_URL_REPLACEMENT_70___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_70___);\nvar ___CSS_LOADER_URL_REPLACEMENT_71___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_71___);\nvar ___CSS_LOADER_URL_REPLACEMENT_72___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_72___);\nvar ___CSS_LOADER_URL_REPLACEMENT_73___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_73___);\nvar ___CSS_LOADER_URL_REPLACEMENT_74___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_74___);\nvar ___CSS_LOADER_URL_REPLACEMENT_75___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_75___);\nvar ___CSS_LOADER_URL_REPLACEMENT_76___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_76___);\nvar ___CSS_LOADER_URL_REPLACEMENT_77___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_77___);\nvar ___CSS_LOADER_URL_REPLACEMENT_78___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_78___);\nvar ___CSS_LOADER_URL_REPLACEMENT_79___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_79___);\nvar ___CSS_LOADER_URL_REPLACEMENT_80___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_80___);\nvar ___CSS_LOADER_URL_REPLACEMENT_81___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_81___);\nvar ___CSS_LOADER_URL_REPLACEMENT_82___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_82___);\nvar ___CSS_LOADER_URL_REPLACEMENT_83___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_83___);\nvar ___CSS_LOADER_URL_REPLACEMENT_84___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_84___);\nvar ___CSS_LOADER_URL_REPLACEMENT_85___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_85___);\nvar ___CSS_LOADER_URL_REPLACEMENT_86___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_86___);\nvar ___CSS_LOADER_URL_REPLACEMENT_87___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_87___);\nvar ___CSS_LOADER_URL_REPLACEMENT_88___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_88___);\nvar ___CSS_LOADER_URL_REPLACEMENT_89___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_89___);\nvar ___CSS_LOADER_URL_REPLACEMENT_90___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_90___);\nvar ___CSS_LOADER_URL_REPLACEMENT_91___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_91___);\nvar ___CSS_LOADER_URL_REPLACEMENT_92___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_92___);\nvar ___CSS_LOADER_URL_REPLACEMENT_93___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_93___);\nvar ___CSS_LOADER_URL_REPLACEMENT_94___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_94___);\nvar ___CSS_LOADER_URL_REPLACEMENT_95___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_95___);\nvar ___CSS_LOADER_URL_REPLACEMENT_96___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_96___);\nvar ___CSS_LOADER_URL_REPLACEMENT_97___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_97___);\nvar ___CSS_LOADER_URL_REPLACEMENT_98___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_98___);\nvar ___CSS_LOADER_URL_REPLACEMENT_99___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_99___);\nvar ___CSS_LOADER_URL_REPLACEMENT_100___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_100___);\nvar ___CSS_LOADER_URL_REPLACEMENT_101___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_101___);\nvar ___CSS_LOADER_URL_REPLACEMENT_102___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_102___);\nvar ___CSS_LOADER_URL_REPLACEMENT_103___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_103___);\nvar ___CSS_LOADER_URL_REPLACEMENT_104___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_104___);\nvar ___CSS_LOADER_URL_REPLACEMENT_105___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_105___);\nvar ___CSS_LOADER_URL_REPLACEMENT_106___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_106___);\nvar ___CSS_LOADER_URL_REPLACEMENT_107___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_107___);\nvar ___CSS_LOADER_URL_REPLACEMENT_108___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_108___);\nvar ___CSS_LOADER_URL_REPLACEMENT_109___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_109___);\nvar ___CSS_LOADER_URL_REPLACEMENT_110___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_110___);\nvar ___CSS_LOADER_URL_REPLACEMENT_111___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_111___);\nvar ___CSS_LOADER_URL_REPLACEMENT_112___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_112___);\nvar ___CSS_LOADER_URL_REPLACEMENT_113___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_113___);\nvar ___CSS_LOADER_URL_REPLACEMENT_114___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_114___);\nvar ___CSS_LOADER_URL_REPLACEMENT_115___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_115___);\nvar ___CSS_LOADER_URL_REPLACEMENT_116___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_116___);\nvar ___CSS_LOADER_URL_REPLACEMENT_117___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_117___);\nvar ___CSS_LOADER_URL_REPLACEMENT_118___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_118___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensureUiComponents() in @jupyterlab/buildutils */\n\n/**\n * (DEPRECATED) Support for consuming icons as CSS background images\n */\n\n/* Icons urls */\n\n:root {\n  --jp-icon-add-above: url(${___CSS_LOADER_URL_REPLACEMENT_0___});\n  --jp-icon-add-below: url(${___CSS_LOADER_URL_REPLACEMENT_1___});\n  --jp-icon-add: url(${___CSS_LOADER_URL_REPLACEMENT_2___});\n  --jp-icon-bell: url(${___CSS_LOADER_URL_REPLACEMENT_3___});\n  --jp-icon-bug-dot: url(${___CSS_LOADER_URL_REPLACEMENT_4___});\n  --jp-icon-bug: url(${___CSS_LOADER_URL_REPLACEMENT_5___});\n  --jp-icon-build: url(${___CSS_LOADER_URL_REPLACEMENT_6___});\n  --jp-icon-caret-down-empty-thin: url(${___CSS_LOADER_URL_REPLACEMENT_7___});\n  --jp-icon-caret-down-empty: url(${___CSS_LOADER_URL_REPLACEMENT_8___});\n  --jp-icon-caret-down: url(${___CSS_LOADER_URL_REPLACEMENT_9___});\n  --jp-icon-caret-left: url(${___CSS_LOADER_URL_REPLACEMENT_10___});\n  --jp-icon-caret-right: url(${___CSS_LOADER_URL_REPLACEMENT_11___});\n  --jp-icon-caret-up-empty-thin: url(${___CSS_LOADER_URL_REPLACEMENT_12___});\n  --jp-icon-caret-up: url(${___CSS_LOADER_URL_REPLACEMENT_13___});\n  --jp-icon-case-sensitive: url(${___CSS_LOADER_URL_REPLACEMENT_14___});\n  --jp-icon-check: url(${___CSS_LOADER_URL_REPLACEMENT_15___});\n  --jp-icon-circle-empty: url(${___CSS_LOADER_URL_REPLACEMENT_16___});\n  --jp-icon-circle: url(${___CSS_LOADER_URL_REPLACEMENT_17___});\n  --jp-icon-cleaning: url(${___CSS_LOADER_URL_REPLACEMENT_18___});\n  --jp-icon-clear: url(${___CSS_LOADER_URL_REPLACEMENT_19___});\n  --jp-icon-close-all: url(${___CSS_LOADER_URL_REPLACEMENT_20___});\n  --jp-icon-close: url(${___CSS_LOADER_URL_REPLACEMENT_21___});\n  --jp-icon-code-check: url(${___CSS_LOADER_URL_REPLACEMENT_22___});\n  --jp-icon-code: url(${___CSS_LOADER_URL_REPLACEMENT_23___});\n  --jp-icon-collapse-all: url(${___CSS_LOADER_URL_REPLACEMENT_24___});\n  --jp-icon-collapse: url(${___CSS_LOADER_URL_REPLACEMENT_25___});\n  --jp-icon-console: url(${___CSS_LOADER_URL_REPLACEMENT_26___});\n  --jp-icon-copy: url(${___CSS_LOADER_URL_REPLACEMENT_27___});\n  --jp-icon-copyright: url(${___CSS_LOADER_URL_REPLACEMENT_28___});\n  --jp-icon-cut: url(${___CSS_LOADER_URL_REPLACEMENT_29___});\n  --jp-icon-delete: url(${___CSS_LOADER_URL_REPLACEMENT_30___});\n  --jp-icon-dock-bottom: url(${___CSS_LOADER_URL_REPLACEMENT_31___});\n  --jp-icon-dock-left: url(${___CSS_LOADER_URL_REPLACEMENT_32___});\n  --jp-icon-dock-right: url(${___CSS_LOADER_URL_REPLACEMENT_33___});\n  --jp-icon-dock-top: url(${___CSS_LOADER_URL_REPLACEMENT_34___});\n  --jp-icon-dots: url(${___CSS_LOADER_URL_REPLACEMENT_35___});\n  --jp-icon-download: url(${___CSS_LOADER_URL_REPLACEMENT_36___});\n  --jp-icon-duplicate: url(${___CSS_LOADER_URL_REPLACEMENT_37___});\n  --jp-icon-edit: url(${___CSS_LOADER_URL_REPLACEMENT_38___});\n  --jp-icon-ellipses: url(${___CSS_LOADER_URL_REPLACEMENT_39___});\n  --jp-icon-error: url(${___CSS_LOADER_URL_REPLACEMENT_40___});\n  --jp-icon-exceptions: url(${___CSS_LOADER_URL_REPLACEMENT_41___});\n  --jp-icon-expand-all: url(${___CSS_LOADER_URL_REPLACEMENT_42___});\n  --jp-icon-expand: url(${___CSS_LOADER_URL_REPLACEMENT_43___});\n  --jp-icon-extension: url(${___CSS_LOADER_URL_REPLACEMENT_44___});\n  --jp-icon-fast-forward: url(${___CSS_LOADER_URL_REPLACEMENT_45___});\n  --jp-icon-file-upload: url(${___CSS_LOADER_URL_REPLACEMENT_46___});\n  --jp-icon-file: url(${___CSS_LOADER_URL_REPLACEMENT_47___});\n  --jp-icon-filter-dot: url(${___CSS_LOADER_URL_REPLACEMENT_48___});\n  --jp-icon-filter-list: url(${___CSS_LOADER_URL_REPLACEMENT_49___});\n  --jp-icon-filter: url(${___CSS_LOADER_URL_REPLACEMENT_50___});\n  --jp-icon-folder-favorite: url(${___CSS_LOADER_URL_REPLACEMENT_51___});\n  --jp-icon-folder: url(${___CSS_LOADER_URL_REPLACEMENT_52___});\n  --jp-icon-history: url(${___CSS_LOADER_URL_REPLACEMENT_53___});\n  --jp-icon-home: url(${___CSS_LOADER_URL_REPLACEMENT_54___});\n  --jp-icon-html5: url(${___CSS_LOADER_URL_REPLACEMENT_55___});\n  --jp-icon-image: url(${___CSS_LOADER_URL_REPLACEMENT_56___});\n  --jp-icon-info: url(${___CSS_LOADER_URL_REPLACEMENT_57___});\n  --jp-icon-inspector: url(${___CSS_LOADER_URL_REPLACEMENT_58___});\n  --jp-icon-json: url(${___CSS_LOADER_URL_REPLACEMENT_59___});\n  --jp-icon-julia: url(${___CSS_LOADER_URL_REPLACEMENT_60___});\n  --jp-icon-jupyter-favicon: url(${___CSS_LOADER_URL_REPLACEMENT_61___});\n  --jp-icon-jupyter: url(${___CSS_LOADER_URL_REPLACEMENT_62___});\n  --jp-icon-jupyterlab-wordmark: url(${___CSS_LOADER_URL_REPLACEMENT_63___});\n  --jp-icon-kernel: url(${___CSS_LOADER_URL_REPLACEMENT_64___});\n  --jp-icon-keyboard: url(${___CSS_LOADER_URL_REPLACEMENT_65___});\n  --jp-icon-launch: url(${___CSS_LOADER_URL_REPLACEMENT_66___});\n  --jp-icon-launcher: url(${___CSS_LOADER_URL_REPLACEMENT_67___});\n  --jp-icon-line-form: url(${___CSS_LOADER_URL_REPLACEMENT_68___});\n  --jp-icon-link: url(${___CSS_LOADER_URL_REPLACEMENT_69___});\n  --jp-icon-list: url(${___CSS_LOADER_URL_REPLACEMENT_70___});\n  --jp-icon-lock: url(${___CSS_LOADER_URL_REPLACEMENT_71___});\n  --jp-icon-markdown: url(${___CSS_LOADER_URL_REPLACEMENT_72___});\n  --jp-icon-mermaid: url(${___CSS_LOADER_URL_REPLACEMENT_73___});\n  --jp-icon-move-down: url(${___CSS_LOADER_URL_REPLACEMENT_74___});\n  --jp-icon-move-up: url(${___CSS_LOADER_URL_REPLACEMENT_75___});\n  --jp-icon-new-folder: url(${___CSS_LOADER_URL_REPLACEMENT_76___});\n  --jp-icon-not-trusted: url(${___CSS_LOADER_URL_REPLACEMENT_77___});\n  --jp-icon-notebook: url(${___CSS_LOADER_URL_REPLACEMENT_78___});\n  --jp-icon-numbering: url(${___CSS_LOADER_URL_REPLACEMENT_79___});\n  --jp-icon-offline-bolt: url(${___CSS_LOADER_URL_REPLACEMENT_80___});\n  --jp-icon-open-kernel-source: url(${___CSS_LOADER_URL_REPLACEMENT_81___});\n  --jp-icon-palette: url(${___CSS_LOADER_URL_REPLACEMENT_82___});\n  --jp-icon-paste: url(${___CSS_LOADER_URL_REPLACEMENT_83___});\n  --jp-icon-pause: url(${___CSS_LOADER_URL_REPLACEMENT_84___});\n  --jp-icon-pdf: url(${___CSS_LOADER_URL_REPLACEMENT_85___});\n  --jp-icon-python: url(${___CSS_LOADER_URL_REPLACEMENT_86___});\n  --jp-icon-r-kernel: url(${___CSS_LOADER_URL_REPLACEMENT_87___});\n  --jp-icon-react: url(${___CSS_LOADER_URL_REPLACEMENT_88___});\n  --jp-icon-redo: url(${___CSS_LOADER_URL_REPLACEMENT_89___});\n  --jp-icon-refresh: url(${___CSS_LOADER_URL_REPLACEMENT_90___});\n  --jp-icon-regex: url(${___CSS_LOADER_URL_REPLACEMENT_91___});\n  --jp-icon-run: url(${___CSS_LOADER_URL_REPLACEMENT_92___});\n  --jp-icon-running: url(${___CSS_LOADER_URL_REPLACEMENT_93___});\n  --jp-icon-save: url(${___CSS_LOADER_URL_REPLACEMENT_94___});\n  --jp-icon-search: url(${___CSS_LOADER_URL_REPLACEMENT_95___});\n  --jp-icon-settings: url(${___CSS_LOADER_URL_REPLACEMENT_96___});\n  --jp-icon-share: url(${___CSS_LOADER_URL_REPLACEMENT_97___});\n  --jp-icon-spreadsheet: url(${___CSS_LOADER_URL_REPLACEMENT_98___});\n  --jp-icon-step-into: url(${___CSS_LOADER_URL_REPLACEMENT_99___});\n  --jp-icon-step-out: url(${___CSS_LOADER_URL_REPLACEMENT_100___});\n  --jp-icon-step-over: url(${___CSS_LOADER_URL_REPLACEMENT_101___});\n  --jp-icon-stop: url(${___CSS_LOADER_URL_REPLACEMENT_102___});\n  --jp-icon-tab: url(${___CSS_LOADER_URL_REPLACEMENT_103___});\n  --jp-icon-table-rows: url(${___CSS_LOADER_URL_REPLACEMENT_104___});\n  --jp-icon-tag: url(${___CSS_LOADER_URL_REPLACEMENT_105___});\n  --jp-icon-terminal: url(${___CSS_LOADER_URL_REPLACEMENT_106___});\n  --jp-icon-text-editor: url(${___CSS_LOADER_URL_REPLACEMENT_107___});\n  --jp-icon-toc: url(${___CSS_LOADER_URL_REPLACEMENT_108___});\n  --jp-icon-tree-view: url(${___CSS_LOADER_URL_REPLACEMENT_109___});\n  --jp-icon-trusted: url(${___CSS_LOADER_URL_REPLACEMENT_110___});\n  --jp-icon-undo: url(${___CSS_LOADER_URL_REPLACEMENT_111___});\n  --jp-icon-user: url(${___CSS_LOADER_URL_REPLACEMENT_112___});\n  --jp-icon-users: url(${___CSS_LOADER_URL_REPLACEMENT_113___});\n  --jp-icon-variable: url(${___CSS_LOADER_URL_REPLACEMENT_114___});\n  --jp-icon-vega: url(${___CSS_LOADER_URL_REPLACEMENT_115___});\n  --jp-icon-view-breakpoint: url(${___CSS_LOADER_URL_REPLACEMENT_116___});\n  --jp-icon-word: url(${___CSS_LOADER_URL_REPLACEMENT_117___});\n  --jp-icon-yaml: url(${___CSS_LOADER_URL_REPLACEMENT_118___});\n}\n\n/* Icon CSS class declarations */\n\n.jp-AddAboveIcon {\n  background-image: var(--jp-icon-add-above);\n}\n\n.jp-AddBelowIcon {\n  background-image: var(--jp-icon-add-below);\n}\n\n.jp-AddIcon {\n  background-image: var(--jp-icon-add);\n}\n\n.jp-BellIcon {\n  background-image: var(--jp-icon-bell);\n}\n\n.jp-BugDotIcon {\n  background-image: var(--jp-icon-bug-dot);\n}\n\n.jp-BugIcon {\n  background-image: var(--jp-icon-bug);\n}\n\n.jp-BuildIcon {\n  background-image: var(--jp-icon-build);\n}\n\n.jp-CaretDownEmptyIcon {\n  background-image: var(--jp-icon-caret-down-empty);\n}\n\n.jp-CaretDownEmptyThinIcon {\n  background-image: var(--jp-icon-caret-down-empty-thin);\n}\n\n.jp-CaretDownIcon {\n  background-image: var(--jp-icon-caret-down);\n}\n\n.jp-CaretLeftIcon {\n  background-image: var(--jp-icon-caret-left);\n}\n\n.jp-CaretRightIcon {\n  background-image: var(--jp-icon-caret-right);\n}\n\n.jp-CaretUpEmptyThinIcon {\n  background-image: var(--jp-icon-caret-up-empty-thin);\n}\n\n.jp-CaretUpIcon {\n  background-image: var(--jp-icon-caret-up);\n}\n\n.jp-CaseSensitiveIcon {\n  background-image: var(--jp-icon-case-sensitive);\n}\n\n.jp-CheckIcon {\n  background-image: var(--jp-icon-check);\n}\n\n.jp-CircleEmptyIcon {\n  background-image: var(--jp-icon-circle-empty);\n}\n\n.jp-CircleIcon {\n  background-image: var(--jp-icon-circle);\n}\n\n.jp-CleaningIcon {\n  background-image: var(--jp-icon-cleaning);\n}\n\n.jp-ClearIcon {\n  background-image: var(--jp-icon-clear);\n}\n\n.jp-CloseAllIcon {\n  background-image: var(--jp-icon-close-all);\n}\n\n.jp-CloseIcon {\n  background-image: var(--jp-icon-close);\n}\n\n.jp-CodeCheckIcon {\n  background-image: var(--jp-icon-code-check);\n}\n\n.jp-CodeIcon {\n  background-image: var(--jp-icon-code);\n}\n\n.jp-CollapseAllIcon {\n  background-image: var(--jp-icon-collapse-all);\n}\n\n.jp-CollapseIcon {\n  background-image: var(--jp-icon-collapse);\n}\n\n.jp-ConsoleIcon {\n  background-image: var(--jp-icon-console);\n}\n\n.jp-CopyIcon {\n  background-image: var(--jp-icon-copy);\n}\n\n.jp-CopyrightIcon {\n  background-image: var(--jp-icon-copyright);\n}\n\n.jp-CutIcon {\n  background-image: var(--jp-icon-cut);\n}\n\n.jp-DeleteIcon {\n  background-image: var(--jp-icon-delete);\n}\n\n.jp-DockBottomIcon {\n  background-image: var(--jp-icon-dock-bottom);\n}\n\n.jp-DockLeftIcon {\n  background-image: var(--jp-icon-dock-left);\n}\n\n.jp-DockRightIcon {\n  background-image: var(--jp-icon-dock-right);\n}\n\n.jp-DockTopIcon {\n  background-image: var(--jp-icon-dock-top);\n}\n\n.jp-DotsIcon {\n  background-image: var(--jp-icon-dots);\n}\n\n.jp-DownloadIcon {\n  background-image: var(--jp-icon-download);\n}\n\n.jp-DuplicateIcon {\n  background-image: var(--jp-icon-duplicate);\n}\n\n.jp-EditIcon {\n  background-image: var(--jp-icon-edit);\n}\n\n.jp-EllipsesIcon {\n  background-image: var(--jp-icon-ellipses);\n}\n\n.jp-ErrorIcon {\n  background-image: var(--jp-icon-error);\n}\n\n.jp-ExceptionsIcon {\n  background-image: var(--jp-icon-exceptions);\n}\n\n.jp-ExpandAllIcon {\n  background-image: var(--jp-icon-expand-all);\n}\n\n.jp-ExpandIcon {\n  background-image: var(--jp-icon-expand);\n}\n\n.jp-ExtensionIcon {\n  background-image: var(--jp-icon-extension);\n}\n\n.jp-FastForwardIcon {\n  background-image: var(--jp-icon-fast-forward);\n}\n\n.jp-FileIcon {\n  background-image: var(--jp-icon-file);\n}\n\n.jp-FileUploadIcon {\n  background-image: var(--jp-icon-file-upload);\n}\n\n.jp-FilterDotIcon {\n  background-image: var(--jp-icon-filter-dot);\n}\n\n.jp-FilterIcon {\n  background-image: var(--jp-icon-filter);\n}\n\n.jp-FilterListIcon {\n  background-image: var(--jp-icon-filter-list);\n}\n\n.jp-FolderFavoriteIcon {\n  background-image: var(--jp-icon-folder-favorite);\n}\n\n.jp-FolderIcon {\n  background-image: var(--jp-icon-folder);\n}\n\n.jp-HistoryIcon {\n  background-image: var(--jp-icon-history);\n}\n\n.jp-HomeIcon {\n  background-image: var(--jp-icon-home);\n}\n\n.jp-Html5Icon {\n  background-image: var(--jp-icon-html5);\n}\n\n.jp-ImageIcon {\n  background-image: var(--jp-icon-image);\n}\n\n.jp-InfoIcon {\n  background-image: var(--jp-icon-info);\n}\n\n.jp-InspectorIcon {\n  background-image: var(--jp-icon-inspector);\n}\n\n.jp-JsonIcon {\n  background-image: var(--jp-icon-json);\n}\n\n.jp-JuliaIcon {\n  background-image: var(--jp-icon-julia);\n}\n\n.jp-JupyterFaviconIcon {\n  background-image: var(--jp-icon-jupyter-favicon);\n}\n\n.jp-JupyterIcon {\n  background-image: var(--jp-icon-jupyter);\n}\n\n.jp-JupyterlabWordmarkIcon {\n  background-image: var(--jp-icon-jupyterlab-wordmark);\n}\n\n.jp-KernelIcon {\n  background-image: var(--jp-icon-kernel);\n}\n\n.jp-KeyboardIcon {\n  background-image: var(--jp-icon-keyboard);\n}\n\n.jp-LaunchIcon {\n  background-image: var(--jp-icon-launch);\n}\n\n.jp-LauncherIcon {\n  background-image: var(--jp-icon-launcher);\n}\n\n.jp-LineFormIcon {\n  background-image: var(--jp-icon-line-form);\n}\n\n.jp-LinkIcon {\n  background-image: var(--jp-icon-link);\n}\n\n.jp-ListIcon {\n  background-image: var(--jp-icon-list);\n}\n\n.jp-LockIcon {\n  background-image: var(--jp-icon-lock);\n}\n\n.jp-MarkdownIcon {\n  background-image: var(--jp-icon-markdown);\n}\n\n.jp-MermaidIcon {\n  background-image: var(--jp-icon-mermaid);\n}\n\n.jp-MoveDownIcon {\n  background-image: var(--jp-icon-move-down);\n}\n\n.jp-MoveUpIcon {\n  background-image: var(--jp-icon-move-up);\n}\n\n.jp-NewFolderIcon {\n  background-image: var(--jp-icon-new-folder);\n}\n\n.jp-NotTrustedIcon {\n  background-image: var(--jp-icon-not-trusted);\n}\n\n.jp-NotebookIcon {\n  background-image: var(--jp-icon-notebook);\n}\n\n.jp-NumberingIcon {\n  background-image: var(--jp-icon-numbering);\n}\n\n.jp-OfflineBoltIcon {\n  background-image: var(--jp-icon-offline-bolt);\n}\n\n.jp-OpenKernelSourceIcon {\n  background-image: var(--jp-icon-open-kernel-source);\n}\n\n.jp-PaletteIcon {\n  background-image: var(--jp-icon-palette);\n}\n\n.jp-PasteIcon {\n  background-image: var(--jp-icon-paste);\n}\n\n.jp-PauseIcon {\n  background-image: var(--jp-icon-pause);\n}\n\n.jp-PdfIcon {\n  background-image: var(--jp-icon-pdf);\n}\n\n.jp-PythonIcon {\n  background-image: var(--jp-icon-python);\n}\n\n.jp-RKernelIcon {\n  background-image: var(--jp-icon-r-kernel);\n}\n\n.jp-ReactIcon {\n  background-image: var(--jp-icon-react);\n}\n\n.jp-RedoIcon {\n  background-image: var(--jp-icon-redo);\n}\n\n.jp-RefreshIcon {\n  background-image: var(--jp-icon-refresh);\n}\n\n.jp-RegexIcon {\n  background-image: var(--jp-icon-regex);\n}\n\n.jp-RunIcon {\n  background-image: var(--jp-icon-run);\n}\n\n.jp-RunningIcon {\n  background-image: var(--jp-icon-running);\n}\n\n.jp-SaveIcon {\n  background-image: var(--jp-icon-save);\n}\n\n.jp-SearchIcon {\n  background-image: var(--jp-icon-search);\n}\n\n.jp-SettingsIcon {\n  background-image: var(--jp-icon-settings);\n}\n\n.jp-ShareIcon {\n  background-image: var(--jp-icon-share);\n}\n\n.jp-SpreadsheetIcon {\n  background-image: var(--jp-icon-spreadsheet);\n}\n\n.jp-StepIntoIcon {\n  background-image: var(--jp-icon-step-into);\n}\n\n.jp-StepOutIcon {\n  background-image: var(--jp-icon-step-out);\n}\n\n.jp-StepOverIcon {\n  background-image: var(--jp-icon-step-over);\n}\n\n.jp-StopIcon {\n  background-image: var(--jp-icon-stop);\n}\n\n.jp-TabIcon {\n  background-image: var(--jp-icon-tab);\n}\n\n.jp-TableRowsIcon {\n  background-image: var(--jp-icon-table-rows);\n}\n\n.jp-TagIcon {\n  background-image: var(--jp-icon-tag);\n}\n\n.jp-TerminalIcon {\n  background-image: var(--jp-icon-terminal);\n}\n\n.jp-TextEditorIcon {\n  background-image: var(--jp-icon-text-editor);\n}\n\n.jp-TocIcon {\n  background-image: var(--jp-icon-toc);\n}\n\n.jp-TreeViewIcon {\n  background-image: var(--jp-icon-tree-view);\n}\n\n.jp-TrustedIcon {\n  background-image: var(--jp-icon-trusted);\n}\n\n.jp-UndoIcon {\n  background-image: var(--jp-icon-undo);\n}\n\n.jp-UserIcon {\n  background-image: var(--jp-icon-user);\n}\n\n.jp-UsersIcon {\n  background-image: var(--jp-icon-users);\n}\n\n.jp-VariableIcon {\n  background-image: var(--jp-icon-variable);\n}\n\n.jp-VegaIcon {\n  background-image: var(--jp-icon-vega);\n}\n\n.jp-ViewBreakpointIcon {\n  background-image: var(--jp-icon-view-breakpoint);\n}\n\n.jp-WordIcon {\n  background-image: var(--jp-icon-word);\n}\n\n.jp-YamlIcon {\n  background-image: var(--jp-icon-yaml);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/deprecated.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E,mFAAmF;;AAEnF;;EAEE;;AAEF,eAAe;;AAEf;EACE,4DAAuD;EACvD,4DAAuD;EACvD,sDAA2C;EAC3C,uDAA+C;EAC/C,0DAAmD;EACnD,sDAA2C;EAC3C,wDAA+C;EAC/C,wEAA6E;EAC7E,mEAAmE;EACnE,6DAAuD;EACvD,8DAAuD;EACvD,+DAAyD;EACzD,uEAAyE;EACzE,4DAAmD;EACnD,kEAAgE;EAChE,yDAA+C;EAC/C,gEAA6D;EAC7D,0DAAiD;EACjD,4DAAqD;EACrD,yDAA+C;EAC/C,6DAAwD;EACxD,yDAA+C;EAC/C,8DAAqD;EACrD,wDAA6C;EAC7C,gEAA6D;EAC7D,4DAAoD;EACpD,2DAAoD;EACpD,wDAA6C;EAC7C,6DAAwD;EACxD,uDAA2C;EAC3C,0DAAiD;EACjD,+DAA2D;EAC3D,6DAAuD;EACvD,8DAAyD;EACzD,4DAAqD;EACrD,wDAA6C;EAC7C,4DAAqD;EACrD,6DAAuD;EACvD,wDAA6C;EAC7C,4DAAqD;EACrD,yDAAuC;EACvC,8DAA0D;EAC1D,8DAAyD;EACzD,0DAAgD;EAChD,6DAAuD;EACvD,gEAA6D;EAC7D,+DAA2D;EAC3D,wDAA8C;EAC9C,8DAAwD;EACxD,+DAA2D;EAC3D,0DAAgD;EAChD,mEAAoE;EACpE,0DAAkD;EAClD,2DAA2C;EAC3C,wDAA8C;EAC9C,yDAAgD;EAChD,yDAAgD;EAChD,wDAAqC;EACrC,6DAAwD;EACxD,wDAA8C;EAC9C,yDAAgD;EAChD,mEAAmE;EACnE,2DAAmD;EACnD,uEAA2E;EAC3E,0DAAmD;EACnD,4DAAsD;EACtD,0DAAiD;EACjD,4DAAsD;EACtD,6DAAyD;EACzD,wDAA6C;EAC7C,wDAA+C;EAC/C,wDAAqC;EACrC,4DAAsD;EACtD,2DAAoD;EACpD,6DAAuD;EACvD,2DAAmD;EACnD,8DAAyD;EACzD,+DAA6D;EAC7D,4DAAsD;EACtD,6DAAuD;EACvD,gEAA6D;EAC7D,sEAA0E;EAC1E,2DAAmD;EACnD,yDAA+C;EAC/C,yDAAgD;EAChD,uDAA4C;EAC5C,0DAAkD;EAClD,4DAAsD;EACtD,yDAAgD;EAChD,wDAA6C;EAC7C,2DAAmD;EACnD,yDAA8C;EAC9C,uDAA2C;EAC3C,2DAAmD;EACnD,wDAA6C;EAC7C,0DAAiD;EACjD,4DAAsD;EACtD,yDAA+C;EAC/C,+DAA4D;EAC5D,6DAAwD;EACxD,6DAAsD;EACtD,8DAAwD;EACxD,yDAA6C;EAC7C,wDAA2C;EAC3C,+DAAyD;EACzD,wDAA2C;EAC3C,6DAAuD;EACvD,gEAA4D;EAC5D,wDAA2C;EAC3C,8DAAuD;EACvD,4DAAqD;EACrD,yDAA6C;EAC7C,yDAA6C;EAC7C,0DAA+C;EAC/C,6DAAsD;EACtD,yDAA8C;EAC9C,oEAAoE;EACpE,yDAA4C;EAC5C,yDAA8C;AAChD;;AAEA,gCAAgC;;AAEhC;EACE,0CAA0C;AAC5C;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,iDAAiD;AACnD;;AAEA;EACE,sDAAsD;AACxD;;AAEA;EACE,2CAA2C;AAC7C;;AAEA;EACE,2CAA2C;AAC7C;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;EACE,oDAAoD;AACtD;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,+CAA+C;AACjD;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,6CAA6C;AAC/C;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,2CAA2C;AAC7C;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,6CAA6C;AAC/C;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,2CAA2C;AAC7C;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,2CAA2C;AAC7C;;AAEA;EACE,2CAA2C;AAC7C;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,6CAA6C;AAC/C;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;EACE,2CAA2C;AAC7C;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;EACE,gDAAgD;AAClD;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,gDAAgD;AAClD;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,oDAAoD;AACtD;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,2CAA2C;AAC7C;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,6CAA6C;AAC/C;;AAEA;EACE,mDAAmD;AACrD;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,2CAA2C;AAC7C;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,4CAA4C;AAC9C;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,wCAAwC;AAC1C;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,gDAAgD;AAClD;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/* This file was auto-generated by ensureUiComponents() in @jupyterlab/buildutils */\\n\\n/**\\n * (DEPRECATED) Support for consuming icons as CSS background images\\n */\\n\\n/* Icons urls */\\n\\n:root {\\n  --jp-icon-add-above: url('icons/toolbar/add-above.svg');\\n  --jp-icon-add-below: url('icons/toolbar/add-below.svg');\\n  --jp-icon-add: url('icons/toolbar/add.svg');\\n  --jp-icon-bell: url('icons/statusbar/bell.svg');\\n  --jp-icon-bug-dot: url('icons/toolbar/bug-dot.svg');\\n  --jp-icon-bug: url('icons/toolbar/bug.svg');\\n  --jp-icon-build: url('icons/sidebar/build.svg');\\n  --jp-icon-caret-down-empty-thin: url('icons/arrow/caret-down-empty-thin.svg');\\n  --jp-icon-caret-down-empty: url('icons/arrow/caret-down-empty.svg');\\n  --jp-icon-caret-down: url('icons/arrow/caret-down.svg');\\n  --jp-icon-caret-left: url('icons/arrow/caret-left.svg');\\n  --jp-icon-caret-right: url('icons/arrow/caret-right.svg');\\n  --jp-icon-caret-up-empty-thin: url('icons/arrow/caret-up-empty-thin.svg');\\n  --jp-icon-caret-up: url('icons/arrow/caret-up.svg');\\n  --jp-icon-case-sensitive: url('icons/search/case-sensitive.svg');\\n  --jp-icon-check: url('icons/toolbar/check.svg');\\n  --jp-icon-circle-empty: url('icons/toolbar/circle-empty.svg');\\n  --jp-icon-circle: url('icons/toolbar/circle.svg');\\n  --jp-icon-cleaning: url('icons/toolbar/cleaning.svg');\\n  --jp-icon-clear: url('icons/toolbar/clear.svg');\\n  --jp-icon-close-all: url('icons/debugger/close-all.svg');\\n  --jp-icon-close: url('icons/toolbar/close.svg');\\n  --jp-icon-code-check: url('icons/lsp/code-check.svg');\\n  --jp-icon-code: url('icons/toolbar/code.svg');\\n  --jp-icon-collapse-all: url('icons/toolbar/collapse-all.svg');\\n  --jp-icon-collapse: url('icons/output/collapse.svg');\\n  --jp-icon-console: url('icons/filetype/console.svg');\\n  --jp-icon-copy: url('icons/toolbar/copy.svg');\\n  --jp-icon-copyright: url('icons/licenses/copyright.svg');\\n  --jp-icon-cut: url('icons/toolbar/cut.svg');\\n  --jp-icon-delete: url('icons/toolbar/delete.svg');\\n  --jp-icon-dock-bottom: url('icons/toolbar/dock-bottom.svg');\\n  --jp-icon-dock-left: url('icons/toolbar/dock-left.svg');\\n  --jp-icon-dock-right: url('icons/toolbar/dock-right.svg');\\n  --jp-icon-dock-top: url('icons/toolbar/dock-top.svg');\\n  --jp-icon-dots: url('icons/toolbar/dots.svg');\\n  --jp-icon-download: url('icons/toolbar/download.svg');\\n  --jp-icon-duplicate: url('icons/toolbar/duplicate.svg');\\n  --jp-icon-edit: url('icons/toolbar/edit.svg');\\n  --jp-icon-ellipses: url('icons/toolbar/ellipses.svg');\\n  --jp-icon-error: url('icons/error.svg');\\n  --jp-icon-exceptions: url('icons/debugger/exceptions.svg');\\n  --jp-icon-expand-all: url('icons/toolbar/expand-all.svg');\\n  --jp-icon-expand: url('icons/output/expand.svg');\\n  --jp-icon-extension: url('icons/sidebar/extension.svg');\\n  --jp-icon-fast-forward: url('icons/toolbar/fast-forward.svg');\\n  --jp-icon-file-upload: url('icons/toolbar/file-upload.svg');\\n  --jp-icon-file: url('icons/filetype/file.svg');\\n  --jp-icon-filter-dot: url('icons/search/filter-dot.svg');\\n  --jp-icon-filter-list: url('icons/toolbar/filter-list.svg');\\n  --jp-icon-filter: url('icons/search/filter.svg');\\n  --jp-icon-folder-favorite: url('icons/filetype/folder-favorite.svg');\\n  --jp-icon-folder: url('icons/filetype/folder.svg');\\n  --jp-icon-history: url('icons/history.svg');\\n  --jp-icon-home: url('icons/filetype/home.svg');\\n  --jp-icon-html5: url('icons/filetype/html5.svg');\\n  --jp-icon-image: url('icons/filetype/image.svg');\\n  --jp-icon-info: url('icons/info.svg');\\n  --jp-icon-inspector: url('icons/filetype/inspector.svg');\\n  --jp-icon-json: url('icons/filetype/json.svg');\\n  --jp-icon-julia: url('icons/filetype/julia.svg');\\n  --jp-icon-jupyter-favicon: url('icons/jupyter/jupyter-favicon.svg');\\n  --jp-icon-jupyter: url('icons/jupyter/jupyter.svg');\\n  --jp-icon-jupyterlab-wordmark: url('icons/jupyter/jupyterlab-wordmark.svg');\\n  --jp-icon-kernel: url('icons/statusbar/kernel.svg');\\n  --jp-icon-keyboard: url('icons/filetype/keyboard.svg');\\n  --jp-icon-launch: url('icons/toolbar/launch.svg');\\n  --jp-icon-launcher: url('icons/filetype/launcher.svg');\\n  --jp-icon-line-form: url('icons/statusbar/line-form.svg');\\n  --jp-icon-link: url('icons/toolbar/link.svg');\\n  --jp-icon-list: url('icons/statusbar/list.svg');\\n  --jp-icon-lock: url('icons/lock.svg');\\n  --jp-icon-markdown: url('icons/filetype/markdown.svg');\\n  --jp-icon-mermaid: url('icons/filetype/mermaid.svg');\\n  --jp-icon-move-down: url('icons/toolbar/move-down.svg');\\n  --jp-icon-move-up: url('icons/toolbar/move-up.svg');\\n  --jp-icon-new-folder: url('icons/toolbar/new-folder.svg');\\n  --jp-icon-not-trusted: url('icons/statusbar/not-trusted.svg');\\n  --jp-icon-notebook: url('icons/filetype/notebook.svg');\\n  --jp-icon-numbering: url('icons/toolbar/numbering.svg');\\n  --jp-icon-offline-bolt: url('icons/toolbar/offline-bolt.svg');\\n  --jp-icon-open-kernel-source: url('icons/debugger/open-kernel-source.svg');\\n  --jp-icon-palette: url('icons/sidebar/palette.svg');\\n  --jp-icon-paste: url('icons/toolbar/paste.svg');\\n  --jp-icon-pause: url('icons/debugger/pause.svg');\\n  --jp-icon-pdf: url('icons/filetype/pdf.svg');\\n  --jp-icon-python: url('icons/filetype/python.svg');\\n  --jp-icon-r-kernel: url('icons/filetype/r-kernel.svg');\\n  --jp-icon-react: url('icons/filetype/react.svg');\\n  --jp-icon-redo: url('icons/toolbar/redo.svg');\\n  --jp-icon-refresh: url('icons/toolbar/refresh.svg');\\n  --jp-icon-regex: url('icons/search/regex.svg');\\n  --jp-icon-run: url('icons/toolbar/run.svg');\\n  --jp-icon-running: url('icons/sidebar/running.svg');\\n  --jp-icon-save: url('icons/toolbar/save.svg');\\n  --jp-icon-search: url('icons/toolbar/search.svg');\\n  --jp-icon-settings: url('icons/filetype/settings.svg');\\n  --jp-icon-share: url('icons/sidebar/share.svg');\\n  --jp-icon-spreadsheet: url('icons/filetype/spreadsheet.svg');\\n  --jp-icon-step-into: url('icons/debugger/step-into.svg');\\n  --jp-icon-step-out: url('icons/debugger/step-out.svg');\\n  --jp-icon-step-over: url('icons/debugger/step-over.svg');\\n  --jp-icon-stop: url('icons/toolbar/stop.svg');\\n  --jp-icon-tab: url('icons/sidebar/tab.svg');\\n  --jp-icon-table-rows: url('icons/toolbar/table-rows.svg');\\n  --jp-icon-tag: url('icons/toolbar/tag.svg');\\n  --jp-icon-terminal: url('icons/statusbar/terminal.svg');\\n  --jp-icon-text-editor: url('icons/filetype/text-editor.svg');\\n  --jp-icon-toc: url('icons/sidebar/toc.svg');\\n  --jp-icon-tree-view: url('icons/toolbar/tree-view.svg');\\n  --jp-icon-trusted: url('icons/statusbar/trusted.svg');\\n  --jp-icon-undo: url('icons/toolbar/undo.svg');\\n  --jp-icon-user: url('icons/sidebar/user.svg');\\n  --jp-icon-users: url('icons/sidebar/users.svg');\\n  --jp-icon-variable: url('icons/debugger/variable.svg');\\n  --jp-icon-vega: url('icons/filetype/vega.svg');\\n  --jp-icon-view-breakpoint: url('icons/debugger/view-breakpoint.svg');\\n  --jp-icon-word: url('icons/search/word.svg');\\n  --jp-icon-yaml: url('icons/filetype/yaml.svg');\\n}\\n\\n/* Icon CSS class declarations */\\n\\n.jp-AddAboveIcon {\\n  background-image: var(--jp-icon-add-above);\\n}\\n\\n.jp-AddBelowIcon {\\n  background-image: var(--jp-icon-add-below);\\n}\\n\\n.jp-AddIcon {\\n  background-image: var(--jp-icon-add);\\n}\\n\\n.jp-BellIcon {\\n  background-image: var(--jp-icon-bell);\\n}\\n\\n.jp-BugDotIcon {\\n  background-image: var(--jp-icon-bug-dot);\\n}\\n\\n.jp-BugIcon {\\n  background-image: var(--jp-icon-bug);\\n}\\n\\n.jp-BuildIcon {\\n  background-image: var(--jp-icon-build);\\n}\\n\\n.jp-CaretDownEmptyIcon {\\n  background-image: var(--jp-icon-caret-down-empty);\\n}\\n\\n.jp-CaretDownEmptyThinIcon {\\n  background-image: var(--jp-icon-caret-down-empty-thin);\\n}\\n\\n.jp-CaretDownIcon {\\n  background-image: var(--jp-icon-caret-down);\\n}\\n\\n.jp-CaretLeftIcon {\\n  background-image: var(--jp-icon-caret-left);\\n}\\n\\n.jp-CaretRightIcon {\\n  background-image: var(--jp-icon-caret-right);\\n}\\n\\n.jp-CaretUpEmptyThinIcon {\\n  background-image: var(--jp-icon-caret-up-empty-thin);\\n}\\n\\n.jp-CaretUpIcon {\\n  background-image: var(--jp-icon-caret-up);\\n}\\n\\n.jp-CaseSensitiveIcon {\\n  background-image: var(--jp-icon-case-sensitive);\\n}\\n\\n.jp-CheckIcon {\\n  background-image: var(--jp-icon-check);\\n}\\n\\n.jp-CircleEmptyIcon {\\n  background-image: var(--jp-icon-circle-empty);\\n}\\n\\n.jp-CircleIcon {\\n  background-image: var(--jp-icon-circle);\\n}\\n\\n.jp-CleaningIcon {\\n  background-image: var(--jp-icon-cleaning);\\n}\\n\\n.jp-ClearIcon {\\n  background-image: var(--jp-icon-clear);\\n}\\n\\n.jp-CloseAllIcon {\\n  background-image: var(--jp-icon-close-all);\\n}\\n\\n.jp-CloseIcon {\\n  background-image: var(--jp-icon-close);\\n}\\n\\n.jp-CodeCheckIcon {\\n  background-image: var(--jp-icon-code-check);\\n}\\n\\n.jp-CodeIcon {\\n  background-image: var(--jp-icon-code);\\n}\\n\\n.jp-CollapseAllIcon {\\n  background-image: var(--jp-icon-collapse-all);\\n}\\n\\n.jp-CollapseIcon {\\n  background-image: var(--jp-icon-collapse);\\n}\\n\\n.jp-ConsoleIcon {\\n  background-image: var(--jp-icon-console);\\n}\\n\\n.jp-CopyIcon {\\n  background-image: var(--jp-icon-copy);\\n}\\n\\n.jp-CopyrightIcon {\\n  background-image: var(--jp-icon-copyright);\\n}\\n\\n.jp-CutIcon {\\n  background-image: var(--jp-icon-cut);\\n}\\n\\n.jp-DeleteIcon {\\n  background-image: var(--jp-icon-delete);\\n}\\n\\n.jp-DockBottomIcon {\\n  background-image: var(--jp-icon-dock-bottom);\\n}\\n\\n.jp-DockLeftIcon {\\n  background-image: var(--jp-icon-dock-left);\\n}\\n\\n.jp-DockRightIcon {\\n  background-image: var(--jp-icon-dock-right);\\n}\\n\\n.jp-DockTopIcon {\\n  background-image: var(--jp-icon-dock-top);\\n}\\n\\n.jp-DotsIcon {\\n  background-image: var(--jp-icon-dots);\\n}\\n\\n.jp-DownloadIcon {\\n  background-image: var(--jp-icon-download);\\n}\\n\\n.jp-DuplicateIcon {\\n  background-image: var(--jp-icon-duplicate);\\n}\\n\\n.jp-EditIcon {\\n  background-image: var(--jp-icon-edit);\\n}\\n\\n.jp-EllipsesIcon {\\n  background-image: var(--jp-icon-ellipses);\\n}\\n\\n.jp-ErrorIcon {\\n  background-image: var(--jp-icon-error);\\n}\\n\\n.jp-ExceptionsIcon {\\n  background-image: var(--jp-icon-exceptions);\\n}\\n\\n.jp-ExpandAllIcon {\\n  background-image: var(--jp-icon-expand-all);\\n}\\n\\n.jp-ExpandIcon {\\n  background-image: var(--jp-icon-expand);\\n}\\n\\n.jp-ExtensionIcon {\\n  background-image: var(--jp-icon-extension);\\n}\\n\\n.jp-FastForwardIcon {\\n  background-image: var(--jp-icon-fast-forward);\\n}\\n\\n.jp-FileIcon {\\n  background-image: var(--jp-icon-file);\\n}\\n\\n.jp-FileUploadIcon {\\n  background-image: var(--jp-icon-file-upload);\\n}\\n\\n.jp-FilterDotIcon {\\n  background-image: var(--jp-icon-filter-dot);\\n}\\n\\n.jp-FilterIcon {\\n  background-image: var(--jp-icon-filter);\\n}\\n\\n.jp-FilterListIcon {\\n  background-image: var(--jp-icon-filter-list);\\n}\\n\\n.jp-FolderFavoriteIcon {\\n  background-image: var(--jp-icon-folder-favorite);\\n}\\n\\n.jp-FolderIcon {\\n  background-image: var(--jp-icon-folder);\\n}\\n\\n.jp-HistoryIcon {\\n  background-image: var(--jp-icon-history);\\n}\\n\\n.jp-HomeIcon {\\n  background-image: var(--jp-icon-home);\\n}\\n\\n.jp-Html5Icon {\\n  background-image: var(--jp-icon-html5);\\n}\\n\\n.jp-ImageIcon {\\n  background-image: var(--jp-icon-image);\\n}\\n\\n.jp-InfoIcon {\\n  background-image: var(--jp-icon-info);\\n}\\n\\n.jp-InspectorIcon {\\n  background-image: var(--jp-icon-inspector);\\n}\\n\\n.jp-JsonIcon {\\n  background-image: var(--jp-icon-json);\\n}\\n\\n.jp-JuliaIcon {\\n  background-image: var(--jp-icon-julia);\\n}\\n\\n.jp-JupyterFaviconIcon {\\n  background-image: var(--jp-icon-jupyter-favicon);\\n}\\n\\n.jp-JupyterIcon {\\n  background-image: var(--jp-icon-jupyter);\\n}\\n\\n.jp-JupyterlabWordmarkIcon {\\n  background-image: var(--jp-icon-jupyterlab-wordmark);\\n}\\n\\n.jp-KernelIcon {\\n  background-image: var(--jp-icon-kernel);\\n}\\n\\n.jp-KeyboardIcon {\\n  background-image: var(--jp-icon-keyboard);\\n}\\n\\n.jp-LaunchIcon {\\n  background-image: var(--jp-icon-launch);\\n}\\n\\n.jp-LauncherIcon {\\n  background-image: var(--jp-icon-launcher);\\n}\\n\\n.jp-LineFormIcon {\\n  background-image: var(--jp-icon-line-form);\\n}\\n\\n.jp-LinkIcon {\\n  background-image: var(--jp-icon-link);\\n}\\n\\n.jp-ListIcon {\\n  background-image: var(--jp-icon-list);\\n}\\n\\n.jp-LockIcon {\\n  background-image: var(--jp-icon-lock);\\n}\\n\\n.jp-MarkdownIcon {\\n  background-image: var(--jp-icon-markdown);\\n}\\n\\n.jp-MermaidIcon {\\n  background-image: var(--jp-icon-mermaid);\\n}\\n\\n.jp-MoveDownIcon {\\n  background-image: var(--jp-icon-move-down);\\n}\\n\\n.jp-MoveUpIcon {\\n  background-image: var(--jp-icon-move-up);\\n}\\n\\n.jp-NewFolderIcon {\\n  background-image: var(--jp-icon-new-folder);\\n}\\n\\n.jp-NotTrustedIcon {\\n  background-image: var(--jp-icon-not-trusted);\\n}\\n\\n.jp-NotebookIcon {\\n  background-image: var(--jp-icon-notebook);\\n}\\n\\n.jp-NumberingIcon {\\n  background-image: var(--jp-icon-numbering);\\n}\\n\\n.jp-OfflineBoltIcon {\\n  background-image: var(--jp-icon-offline-bolt);\\n}\\n\\n.jp-OpenKernelSourceIcon {\\n  background-image: var(--jp-icon-open-kernel-source);\\n}\\n\\n.jp-PaletteIcon {\\n  background-image: var(--jp-icon-palette);\\n}\\n\\n.jp-PasteIcon {\\n  background-image: var(--jp-icon-paste);\\n}\\n\\n.jp-PauseIcon {\\n  background-image: var(--jp-icon-pause);\\n}\\n\\n.jp-PdfIcon {\\n  background-image: var(--jp-icon-pdf);\\n}\\n\\n.jp-PythonIcon {\\n  background-image: var(--jp-icon-python);\\n}\\n\\n.jp-RKernelIcon {\\n  background-image: var(--jp-icon-r-kernel);\\n}\\n\\n.jp-ReactIcon {\\n  background-image: var(--jp-icon-react);\\n}\\n\\n.jp-RedoIcon {\\n  background-image: var(--jp-icon-redo);\\n}\\n\\n.jp-RefreshIcon {\\n  background-image: var(--jp-icon-refresh);\\n}\\n\\n.jp-RegexIcon {\\n  background-image: var(--jp-icon-regex);\\n}\\n\\n.jp-RunIcon {\\n  background-image: var(--jp-icon-run);\\n}\\n\\n.jp-RunningIcon {\\n  background-image: var(--jp-icon-running);\\n}\\n\\n.jp-SaveIcon {\\n  background-image: var(--jp-icon-save);\\n}\\n\\n.jp-SearchIcon {\\n  background-image: var(--jp-icon-search);\\n}\\n\\n.jp-SettingsIcon {\\n  background-image: var(--jp-icon-settings);\\n}\\n\\n.jp-ShareIcon {\\n  background-image: var(--jp-icon-share);\\n}\\n\\n.jp-SpreadsheetIcon {\\n  background-image: var(--jp-icon-spreadsheet);\\n}\\n\\n.jp-StepIntoIcon {\\n  background-image: var(--jp-icon-step-into);\\n}\\n\\n.jp-StepOutIcon {\\n  background-image: var(--jp-icon-step-out);\\n}\\n\\n.jp-StepOverIcon {\\n  background-image: var(--jp-icon-step-over);\\n}\\n\\n.jp-StopIcon {\\n  background-image: var(--jp-icon-stop);\\n}\\n\\n.jp-TabIcon {\\n  background-image: var(--jp-icon-tab);\\n}\\n\\n.jp-TableRowsIcon {\\n  background-image: var(--jp-icon-table-rows);\\n}\\n\\n.jp-TagIcon {\\n  background-image: var(--jp-icon-tag);\\n}\\n\\n.jp-TerminalIcon {\\n  background-image: var(--jp-icon-terminal);\\n}\\n\\n.jp-TextEditorIcon {\\n  background-image: var(--jp-icon-text-editor);\\n}\\n\\n.jp-TocIcon {\\n  background-image: var(--jp-icon-toc);\\n}\\n\\n.jp-TreeViewIcon {\\n  background-image: var(--jp-icon-tree-view);\\n}\\n\\n.jp-TrustedIcon {\\n  background-image: var(--jp-icon-trusted);\\n}\\n\\n.jp-UndoIcon {\\n  background-image: var(--jp-icon-undo);\\n}\\n\\n.jp-UserIcon {\\n  background-image: var(--jp-icon-user);\\n}\\n\\n.jp-UsersIcon {\\n  background-image: var(--jp-icon-users);\\n}\\n\\n.jp-VariableIcon {\\n  background-image: var(--jp-icon-variable);\\n}\\n\\n.jp-VegaIcon {\\n  background-image: var(--jp-icon-vega);\\n}\\n\\n.jp-ViewBreakpointIcon {\\n  background-image: var(--jp-icon-view-breakpoint);\\n}\\n\\n.jp-WordIcon {\\n  background-image: var(--jp-icon-word);\\n}\\n\\n.jp-YamlIcon {\\n  background-image: var(--jp-icon-yaml);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/**\n * (DEPRECATED) Support for consuming icons as CSS background images\n */\n\n.jp-Icon,\n.jp-MaterialIcon {\n  background-position: center;\n  background-repeat: no-repeat;\n  background-size: 16px;\n  min-width: 16px;\n  min-height: 16px;\n}\n\n.jp-Icon-cover {\n  background-position: center;\n  background-repeat: no-repeat;\n  background-size: cover;\n}\n\n/**\n * (DEPRECATED) Support for specific CSS icon sizes\n */\n\n.jp-Icon-16 {\n  background-size: 16px;\n  min-width: 16px;\n  min-height: 16px;\n}\n\n.jp-Icon-18 {\n  background-size: 18px;\n  min-width: 18px;\n  min-height: 18px;\n}\n\n.jp-Icon-20 {\n  background-size: 20px;\n  min-width: 20px;\n  min-height: 20px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/deprecatedExtra.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;EAEE;;AAEF;;EAEE,2BAA2B;EAC3B,4BAA4B;EAC5B,qBAAqB;EACrB,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,2BAA2B;EAC3B,4BAA4B;EAC5B,sBAAsB;AACxB;;AAEA;;EAEE;;AAEF;EACE,qBAAqB;EACrB,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,qBAAqB;EACrB,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,qBAAqB;EACrB,eAAe;EACf,gBAAgB;AAClB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/**\\n * (DEPRECATED) Support for consuming icons as CSS background images\\n */\\n\\n.jp-Icon,\\n.jp-MaterialIcon {\\n  background-position: center;\\n  background-repeat: no-repeat;\\n  background-size: 16px;\\n  min-width: 16px;\\n  min-height: 16px;\\n}\\n\\n.jp-Icon-cover {\\n  background-position: center;\\n  background-repeat: no-repeat;\\n  background-size: cover;\\n}\\n\\n/**\\n * (DEPRECATED) Support for specific CSS icon sizes\\n */\\n\\n.jp-Icon-16 {\\n  background-size: 16px;\\n  min-width: 16px;\\n  min-height: 16px;\\n}\\n\\n.jp-Icon-18 {\\n  background-size: 18px;\\n  min-width: 18px;\\n  min-height: 18px;\\n}\\n\\n.jp-Icon-20 {\\n  background-size: 20px;\\n  min-width: 20px;\\n  min-height: 20px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-HoverBox {\n  position: fixed;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/hoverbox.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,eAAe;AACjB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-HoverBox {\\n  position: fixed;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/**\n * Support for icons as inline SVG HTMLElements\n */\n\n/* recolor the primary elements of an icon */\n.jp-icon0[fill] {\n  fill: var(--jp-inverse-layout-color0);\n}\n\n.jp-icon1[fill] {\n  fill: var(--jp-inverse-layout-color1);\n}\n\n.jp-icon2[fill] {\n  fill: var(--jp-inverse-layout-color2);\n}\n\n.jp-icon3[fill] {\n  fill: var(--jp-inverse-layout-color3);\n}\n\n.jp-icon4[fill] {\n  fill: var(--jp-inverse-layout-color4);\n}\n\n.jp-icon0[stroke] {\n  stroke: var(--jp-inverse-layout-color0);\n}\n\n.jp-icon1[stroke] {\n  stroke: var(--jp-inverse-layout-color1);\n}\n\n.jp-icon2[stroke] {\n  stroke: var(--jp-inverse-layout-color2);\n}\n\n.jp-icon3[stroke] {\n  stroke: var(--jp-inverse-layout-color3);\n}\n\n.jp-icon4[stroke] {\n  stroke: var(--jp-inverse-layout-color4);\n}\n\n/* recolor the accent elements of an icon */\n.jp-icon-accent0[fill] {\n  fill: var(--jp-layout-color0);\n}\n\n.jp-icon-accent1[fill] {\n  fill: var(--jp-layout-color1);\n}\n\n.jp-icon-accent2[fill] {\n  fill: var(--jp-layout-color2);\n}\n\n.jp-icon-accent3[fill] {\n  fill: var(--jp-layout-color3);\n}\n\n.jp-icon-accent4[fill] {\n  fill: var(--jp-layout-color4);\n}\n\n.jp-icon-accent0[stroke] {\n  stroke: var(--jp-layout-color0);\n}\n\n.jp-icon-accent1[stroke] {\n  stroke: var(--jp-layout-color1);\n}\n\n.jp-icon-accent2[stroke] {\n  stroke: var(--jp-layout-color2);\n}\n\n.jp-icon-accent3[stroke] {\n  stroke: var(--jp-layout-color3);\n}\n\n.jp-icon-accent4[stroke] {\n  stroke: var(--jp-layout-color4);\n}\n\n/* set the color of an icon to transparent */\n.jp-icon-none[fill] {\n  fill: none;\n}\n\n.jp-icon-none[stroke] {\n  stroke: none;\n}\n\n/* brand icon colors. Same for light and dark */\n.jp-icon-brand0[fill] {\n  fill: var(--jp-brand-color0);\n}\n\n.jp-icon-brand1[fill] {\n  fill: var(--jp-brand-color1);\n}\n\n.jp-icon-brand2[fill] {\n  fill: var(--jp-brand-color2);\n}\n\n.jp-icon-brand3[fill] {\n  fill: var(--jp-brand-color3);\n}\n\n.jp-icon-brand4[fill] {\n  fill: var(--jp-brand-color4);\n}\n\n.jp-icon-brand0[stroke] {\n  stroke: var(--jp-brand-color0);\n}\n\n.jp-icon-brand1[stroke] {\n  stroke: var(--jp-brand-color1);\n}\n\n.jp-icon-brand2[stroke] {\n  stroke: var(--jp-brand-color2);\n}\n\n.jp-icon-brand3[stroke] {\n  stroke: var(--jp-brand-color3);\n}\n\n.jp-icon-brand4[stroke] {\n  stroke: var(--jp-brand-color4);\n}\n\n/* warn icon colors. Same for light and dark */\n.jp-icon-warn0[fill] {\n  fill: var(--jp-warn-color0);\n}\n\n.jp-icon-warn1[fill] {\n  fill: var(--jp-warn-color1);\n}\n\n.jp-icon-warn2[fill] {\n  fill: var(--jp-warn-color2);\n}\n\n.jp-icon-warn3[fill] {\n  fill: var(--jp-warn-color3);\n}\n\n.jp-icon-warn0[stroke] {\n  stroke: var(--jp-warn-color0);\n}\n\n.jp-icon-warn1[stroke] {\n  stroke: var(--jp-warn-color1);\n}\n\n.jp-icon-warn2[stroke] {\n  stroke: var(--jp-warn-color2);\n}\n\n.jp-icon-warn3[stroke] {\n  stroke: var(--jp-warn-color3);\n}\n\n/* icon colors that contrast well with each other and most backgrounds */\n.jp-icon-contrast0[fill] {\n  fill: var(--jp-icon-contrast-color0);\n}\n\n.jp-icon-contrast1[fill] {\n  fill: var(--jp-icon-contrast-color1);\n}\n\n.jp-icon-contrast2[fill] {\n  fill: var(--jp-icon-contrast-color2);\n}\n\n.jp-icon-contrast3[fill] {\n  fill: var(--jp-icon-contrast-color3);\n}\n\n.jp-icon-contrast0[stroke] {\n  stroke: var(--jp-icon-contrast-color0);\n}\n\n.jp-icon-contrast1[stroke] {\n  stroke: var(--jp-icon-contrast-color1);\n}\n\n.jp-icon-contrast2[stroke] {\n  stroke: var(--jp-icon-contrast-color2);\n}\n\n.jp-icon-contrast3[stroke] {\n  stroke: var(--jp-icon-contrast-color3);\n}\n\n.jp-icon-dot[fill] {\n  fill: var(--jp-warn-color0);\n}\n\n.jp-jupyter-icon-color[fill] {\n  fill: var(--jp-jupyter-icon-color, var(--jp-warn-color0));\n}\n\n.jp-notebook-icon-color[fill] {\n  fill: var(--jp-notebook-icon-color, var(--jp-warn-color0));\n}\n\n.jp-json-icon-color[fill] {\n  fill: var(--jp-json-icon-color, var(--jp-warn-color1));\n}\n\n.jp-console-icon-color[fill] {\n  fill: var(--jp-console-icon-color, white);\n}\n\n.jp-console-icon-background-color[fill] {\n  fill: var(--jp-console-icon-background-color, var(--jp-brand-color1));\n}\n\n.jp-terminal-icon-color[fill] {\n  fill: var(--jp-terminal-icon-color, var(--jp-layout-color2));\n}\n\n.jp-terminal-icon-background-color[fill] {\n  fill: var(\n    --jp-terminal-icon-background-color,\n    var(--jp-inverse-layout-color2)\n  );\n}\n\n.jp-text-editor-icon-color[fill] {\n  fill: var(--jp-text-editor-icon-color, var(--jp-inverse-layout-color3));\n}\n\n.jp-inspector-icon-color[fill] {\n  fill: var(--jp-inspector-icon-color, var(--jp-inverse-layout-color3));\n}\n\n/* CSS for icons in selected filebrowser listing items */\n.jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill] {\n  fill: #fff;\n}\n\n.jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill] {\n  fill: var(--jp-brand-color1);\n}\n\n/* stylelint-disable selector-max-class, selector-max-compound-selectors */\n\n/**\n* TODO: come up with non css-hack solution for showing the busy icon on top\n*  of the close icon\n* CSS for complex behavior of close icon of tabs in the main area tabbar\n*/\n.lm-DockPanel-tabBar\n  .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty\n  > .lm-TabBar-tabCloseIcon\n  > :not(:hover)\n  > .jp-icon3[fill] {\n  fill: none;\n}\n\n.lm-DockPanel-tabBar\n  .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty\n  > .lm-TabBar-tabCloseIcon\n  > :not(:hover)\n  > .jp-icon-busy[fill] {\n  fill: var(--jp-inverse-layout-color3);\n}\n\n/* stylelint-enable selector-max-class, selector-max-compound-selectors */\n\n/* CSS for icons in status bar */\n#jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill] {\n  fill: #fff;\n}\n\n#jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill] {\n  fill: var(--jp-brand-color1);\n}\n\n/* special handling for splash icon CSS. While the theme CSS reloads during\n   splash, the splash icon can loose theming. To prevent that, we set a\n   default for its color variable */\n:root {\n  --jp-warn-color0: var(--md-orange-700, #f57c00);\n}\n\n/* not sure what to do with this one, used in filebrowser listing */\n.jp-DragIcon {\n  margin-right: 4px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/icons.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;EAEE;;AAEF,4CAA4C;AAC5C;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA,2CAA2C;AAC3C;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA,4CAA4C;AAC5C;EACE,UAAU;AACZ;;AAEA;EACE,YAAY;AACd;;AAEA,+CAA+C;AAC/C;EACE,4BAA4B;AAC9B;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,8BAA8B;AAChC;;AAEA,8CAA8C;AAC9C;EACE,2BAA2B;AAC7B;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA,wEAAwE;AACxE;EACE,oCAAoC;AACtC;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,sCAAsC;AACxC;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,yDAAyD;AAC3D;;AAEA;EACE,0DAA0D;AAC5D;;AAEA;EACE,sDAAsD;AACxD;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,qEAAqE;AACvE;;AAEA;EACE,4DAA4D;AAC9D;;AAEA;EACE;;;GAGC;AACH;;AAEA;EACE,uEAAuE;AACzE;;AAEA;EACE,qEAAqE;AACvE;;AAEA,wDAAwD;AACxD;EACE,UAAU;AACZ;;AAEA;EACE,4BAA4B;AAC9B;;AAEA,0EAA0E;;AAE1E;;;;CAIC;AACD;;;;;EAKE,UAAU;AACZ;;AAEA;;;;;EAKE,qCAAqC;AACvC;;AAEA,yEAAyE;;AAEzE,gCAAgC;AAChC;EACE,UAAU;AACZ;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;;mCAEmC;AACnC;EACE,+CAA+C;AACjD;;AAEA,mEAAmE;AACnE;EACE,iBAAiB;AACnB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/**\\n * Support for icons as inline SVG HTMLElements\\n */\\n\\n/* recolor the primary elements of an icon */\\n.jp-icon0[fill] {\\n  fill: var(--jp-inverse-layout-color0);\\n}\\n\\n.jp-icon1[fill] {\\n  fill: var(--jp-inverse-layout-color1);\\n}\\n\\n.jp-icon2[fill] {\\n  fill: var(--jp-inverse-layout-color2);\\n}\\n\\n.jp-icon3[fill] {\\n  fill: var(--jp-inverse-layout-color3);\\n}\\n\\n.jp-icon4[fill] {\\n  fill: var(--jp-inverse-layout-color4);\\n}\\n\\n.jp-icon0[stroke] {\\n  stroke: var(--jp-inverse-layout-color0);\\n}\\n\\n.jp-icon1[stroke] {\\n  stroke: var(--jp-inverse-layout-color1);\\n}\\n\\n.jp-icon2[stroke] {\\n  stroke: var(--jp-inverse-layout-color2);\\n}\\n\\n.jp-icon3[stroke] {\\n  stroke: var(--jp-inverse-layout-color3);\\n}\\n\\n.jp-icon4[stroke] {\\n  stroke: var(--jp-inverse-layout-color4);\\n}\\n\\n/* recolor the accent elements of an icon */\\n.jp-icon-accent0[fill] {\\n  fill: var(--jp-layout-color0);\\n}\\n\\n.jp-icon-accent1[fill] {\\n  fill: var(--jp-layout-color1);\\n}\\n\\n.jp-icon-accent2[fill] {\\n  fill: var(--jp-layout-color2);\\n}\\n\\n.jp-icon-accent3[fill] {\\n  fill: var(--jp-layout-color3);\\n}\\n\\n.jp-icon-accent4[fill] {\\n  fill: var(--jp-layout-color4);\\n}\\n\\n.jp-icon-accent0[stroke] {\\n  stroke: var(--jp-layout-color0);\\n}\\n\\n.jp-icon-accent1[stroke] {\\n  stroke: var(--jp-layout-color1);\\n}\\n\\n.jp-icon-accent2[stroke] {\\n  stroke: var(--jp-layout-color2);\\n}\\n\\n.jp-icon-accent3[stroke] {\\n  stroke: var(--jp-layout-color3);\\n}\\n\\n.jp-icon-accent4[stroke] {\\n  stroke: var(--jp-layout-color4);\\n}\\n\\n/* set the color of an icon to transparent */\\n.jp-icon-none[fill] {\\n  fill: none;\\n}\\n\\n.jp-icon-none[stroke] {\\n  stroke: none;\\n}\\n\\n/* brand icon colors. Same for light and dark */\\n.jp-icon-brand0[fill] {\\n  fill: var(--jp-brand-color0);\\n}\\n\\n.jp-icon-brand1[fill] {\\n  fill: var(--jp-brand-color1);\\n}\\n\\n.jp-icon-brand2[fill] {\\n  fill: var(--jp-brand-color2);\\n}\\n\\n.jp-icon-brand3[fill] {\\n  fill: var(--jp-brand-color3);\\n}\\n\\n.jp-icon-brand4[fill] {\\n  fill: var(--jp-brand-color4);\\n}\\n\\n.jp-icon-brand0[stroke] {\\n  stroke: var(--jp-brand-color0);\\n}\\n\\n.jp-icon-brand1[stroke] {\\n  stroke: var(--jp-brand-color1);\\n}\\n\\n.jp-icon-brand2[stroke] {\\n  stroke: var(--jp-brand-color2);\\n}\\n\\n.jp-icon-brand3[stroke] {\\n  stroke: var(--jp-brand-color3);\\n}\\n\\n.jp-icon-brand4[stroke] {\\n  stroke: var(--jp-brand-color4);\\n}\\n\\n/* warn icon colors. Same for light and dark */\\n.jp-icon-warn0[fill] {\\n  fill: var(--jp-warn-color0);\\n}\\n\\n.jp-icon-warn1[fill] {\\n  fill: var(--jp-warn-color1);\\n}\\n\\n.jp-icon-warn2[fill] {\\n  fill: var(--jp-warn-color2);\\n}\\n\\n.jp-icon-warn3[fill] {\\n  fill: var(--jp-warn-color3);\\n}\\n\\n.jp-icon-warn0[stroke] {\\n  stroke: var(--jp-warn-color0);\\n}\\n\\n.jp-icon-warn1[stroke] {\\n  stroke: var(--jp-warn-color1);\\n}\\n\\n.jp-icon-warn2[stroke] {\\n  stroke: var(--jp-warn-color2);\\n}\\n\\n.jp-icon-warn3[stroke] {\\n  stroke: var(--jp-warn-color3);\\n}\\n\\n/* icon colors that contrast well with each other and most backgrounds */\\n.jp-icon-contrast0[fill] {\\n  fill: var(--jp-icon-contrast-color0);\\n}\\n\\n.jp-icon-contrast1[fill] {\\n  fill: var(--jp-icon-contrast-color1);\\n}\\n\\n.jp-icon-contrast2[fill] {\\n  fill: var(--jp-icon-contrast-color2);\\n}\\n\\n.jp-icon-contrast3[fill] {\\n  fill: var(--jp-icon-contrast-color3);\\n}\\n\\n.jp-icon-contrast0[stroke] {\\n  stroke: var(--jp-icon-contrast-color0);\\n}\\n\\n.jp-icon-contrast1[stroke] {\\n  stroke: var(--jp-icon-contrast-color1);\\n}\\n\\n.jp-icon-contrast2[stroke] {\\n  stroke: var(--jp-icon-contrast-color2);\\n}\\n\\n.jp-icon-contrast3[stroke] {\\n  stroke: var(--jp-icon-contrast-color3);\\n}\\n\\n.jp-icon-dot[fill] {\\n  fill: var(--jp-warn-color0);\\n}\\n\\n.jp-jupyter-icon-color[fill] {\\n  fill: var(--jp-jupyter-icon-color, var(--jp-warn-color0));\\n}\\n\\n.jp-notebook-icon-color[fill] {\\n  fill: var(--jp-notebook-icon-color, var(--jp-warn-color0));\\n}\\n\\n.jp-json-icon-color[fill] {\\n  fill: var(--jp-json-icon-color, var(--jp-warn-color1));\\n}\\n\\n.jp-console-icon-color[fill] {\\n  fill: var(--jp-console-icon-color, white);\\n}\\n\\n.jp-console-icon-background-color[fill] {\\n  fill: var(--jp-console-icon-background-color, var(--jp-brand-color1));\\n}\\n\\n.jp-terminal-icon-color[fill] {\\n  fill: var(--jp-terminal-icon-color, var(--jp-layout-color2));\\n}\\n\\n.jp-terminal-icon-background-color[fill] {\\n  fill: var(\\n    --jp-terminal-icon-background-color,\\n    var(--jp-inverse-layout-color2)\\n  );\\n}\\n\\n.jp-text-editor-icon-color[fill] {\\n  fill: var(--jp-text-editor-icon-color, var(--jp-inverse-layout-color3));\\n}\\n\\n.jp-inspector-icon-color[fill] {\\n  fill: var(--jp-inspector-icon-color, var(--jp-inverse-layout-color3));\\n}\\n\\n/* CSS for icons in selected filebrowser listing items */\\n.jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill] {\\n  fill: #fff;\\n}\\n\\n.jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill] {\\n  fill: var(--jp-brand-color1);\\n}\\n\\n/* stylelint-disable selector-max-class, selector-max-compound-selectors */\\n\\n/**\\n* TODO: come up with non css-hack solution for showing the busy icon on top\\n*  of the close icon\\n* CSS for complex behavior of close icon of tabs in the main area tabbar\\n*/\\n.lm-DockPanel-tabBar\\n  .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty\\n  > .lm-TabBar-tabCloseIcon\\n  > :not(:hover)\\n  > .jp-icon3[fill] {\\n  fill: none;\\n}\\n\\n.lm-DockPanel-tabBar\\n  .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty\\n  > .lm-TabBar-tabCloseIcon\\n  > :not(:hover)\\n  > .jp-icon-busy[fill] {\\n  fill: var(--jp-inverse-layout-color3);\\n}\\n\\n/* stylelint-enable selector-max-class, selector-max-compound-selectors */\\n\\n/* CSS for icons in status bar */\\n#jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill] {\\n  fill: #fff;\\n}\\n\\n#jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill] {\\n  fill: var(--jp-brand-color1);\\n}\\n\\n/* special handling for splash icon CSS. While the theme CSS reloads during\\n   splash, the splash icon can loose theming. To prevent that, we set a\\n   default for its color variable */\\n:root {\\n  --jp-warn-color0: var(--md-orange-700, #f57c00);\\n}\\n\\n/* not sure what to do with this one, used in filebrowser listing */\\n.jp-DragIcon {\\n  margin-right: 4px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/**\n * Support for alt colors for icons as inline SVG HTMLElements\n */\n\n/* alt recolor the primary elements of an icon */\n.jp-icon-alt .jp-icon0[fill] {\n  fill: var(--jp-layout-color0);\n}\n\n.jp-icon-alt .jp-icon1[fill] {\n  fill: var(--jp-layout-color1);\n}\n\n.jp-icon-alt .jp-icon2[fill] {\n  fill: var(--jp-layout-color2);\n}\n\n.jp-icon-alt .jp-icon3[fill] {\n  fill: var(--jp-layout-color3);\n}\n\n.jp-icon-alt .jp-icon4[fill] {\n  fill: var(--jp-layout-color4);\n}\n\n.jp-icon-alt .jp-icon0[stroke] {\n  stroke: var(--jp-layout-color0);\n}\n\n.jp-icon-alt .jp-icon1[stroke] {\n  stroke: var(--jp-layout-color1);\n}\n\n.jp-icon-alt .jp-icon2[stroke] {\n  stroke: var(--jp-layout-color2);\n}\n\n.jp-icon-alt .jp-icon3[stroke] {\n  stroke: var(--jp-layout-color3);\n}\n\n.jp-icon-alt .jp-icon4[stroke] {\n  stroke: var(--jp-layout-color4);\n}\n\n/* alt recolor the accent elements of an icon */\n.jp-icon-alt .jp-icon-accent0[fill] {\n  fill: var(--jp-inverse-layout-color0);\n}\n\n.jp-icon-alt .jp-icon-accent1[fill] {\n  fill: var(--jp-inverse-layout-color1);\n}\n\n.jp-icon-alt .jp-icon-accent2[fill] {\n  fill: var(--jp-inverse-layout-color2);\n}\n\n.jp-icon-alt .jp-icon-accent3[fill] {\n  fill: var(--jp-inverse-layout-color3);\n}\n\n.jp-icon-alt .jp-icon-accent4[fill] {\n  fill: var(--jp-inverse-layout-color4);\n}\n\n.jp-icon-alt .jp-icon-accent0[stroke] {\n  stroke: var(--jp-inverse-layout-color0);\n}\n\n.jp-icon-alt .jp-icon-accent1[stroke] {\n  stroke: var(--jp-inverse-layout-color1);\n}\n\n.jp-icon-alt .jp-icon-accent2[stroke] {\n  stroke: var(--jp-inverse-layout-color2);\n}\n\n.jp-icon-alt .jp-icon-accent3[stroke] {\n  stroke: var(--jp-inverse-layout-color3);\n}\n\n.jp-icon-alt .jp-icon-accent4[stroke] {\n  stroke: var(--jp-inverse-layout-color4);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/iconsalt.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;;EAEE;;AAEF,gDAAgD;AAChD;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA,+CAA+C;AAC/C;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n/**\\n * Support for alt colors for icons as inline SVG HTMLElements\\n */\\n\\n/* alt recolor the primary elements of an icon */\\n.jp-icon-alt .jp-icon0[fill] {\\n  fill: var(--jp-layout-color0);\\n}\\n\\n.jp-icon-alt .jp-icon1[fill] {\\n  fill: var(--jp-layout-color1);\\n}\\n\\n.jp-icon-alt .jp-icon2[fill] {\\n  fill: var(--jp-layout-color2);\\n}\\n\\n.jp-icon-alt .jp-icon3[fill] {\\n  fill: var(--jp-layout-color3);\\n}\\n\\n.jp-icon-alt .jp-icon4[fill] {\\n  fill: var(--jp-layout-color4);\\n}\\n\\n.jp-icon-alt .jp-icon0[stroke] {\\n  stroke: var(--jp-layout-color0);\\n}\\n\\n.jp-icon-alt .jp-icon1[stroke] {\\n  stroke: var(--jp-layout-color1);\\n}\\n\\n.jp-icon-alt .jp-icon2[stroke] {\\n  stroke: var(--jp-layout-color2);\\n}\\n\\n.jp-icon-alt .jp-icon3[stroke] {\\n  stroke: var(--jp-layout-color3);\\n}\\n\\n.jp-icon-alt .jp-icon4[stroke] {\\n  stroke: var(--jp-layout-color4);\\n}\\n\\n/* alt recolor the accent elements of an icon */\\n.jp-icon-alt .jp-icon-accent0[fill] {\\n  fill: var(--jp-inverse-layout-color0);\\n}\\n\\n.jp-icon-alt .jp-icon-accent1[fill] {\\n  fill: var(--jp-inverse-layout-color1);\\n}\\n\\n.jp-icon-alt .jp-icon-accent2[fill] {\\n  fill: var(--jp-inverse-layout-color2);\\n}\\n\\n.jp-icon-alt .jp-icon-accent3[fill] {\\n  fill: var(--jp-inverse-layout-color3);\\n}\\n\\n.jp-icon-alt .jp-icon-accent4[fill] {\\n  fill: var(--jp-inverse-layout-color4);\\n}\\n\\n.jp-icon-alt .jp-icon-accent0[stroke] {\\n  stroke: var(--jp-inverse-layout-color0);\\n}\\n\\n.jp-icon-alt .jp-icon-accent1[stroke] {\\n  stroke: var(--jp-inverse-layout-color1);\\n}\\n\\n.jp-icon-alt .jp-icon-accent2[stroke] {\\n  stroke: var(--jp-inverse-layout-color2);\\n}\\n\\n.jp-icon-alt .jp-icon-accent3[stroke] {\\n  stroke: var(--jp-inverse-layout-color3);\\n}\\n\\n.jp-icon-alt .jp-icon-accent4[stroke] {\\n  stroke: var(--jp-inverse-layout-color4);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-icon-hoverShow:not(:hover) .jp-icon-hoverShow-content {\n  display: none !important;\n}\n\n/**\n * Support for hover colors for icons as inline SVG HTMLElements\n */\n\n/**\n * regular colors\n */\n\n/* recolor the primary elements of an icon */\n.jp-icon-hover :hover .jp-icon0-hover[fill] {\n  fill: var(--jp-inverse-layout-color0);\n}\n\n.jp-icon-hover :hover .jp-icon1-hover[fill] {\n  fill: var(--jp-inverse-layout-color1);\n}\n\n.jp-icon-hover :hover .jp-icon2-hover[fill] {\n  fill: var(--jp-inverse-layout-color2);\n}\n\n.jp-icon-hover :hover .jp-icon3-hover[fill] {\n  fill: var(--jp-inverse-layout-color3);\n}\n\n.jp-icon-hover :hover .jp-icon4-hover[fill] {\n  fill: var(--jp-inverse-layout-color4);\n}\n\n.jp-icon-hover :hover .jp-icon0-hover[stroke] {\n  stroke: var(--jp-inverse-layout-color0);\n}\n\n.jp-icon-hover :hover .jp-icon1-hover[stroke] {\n  stroke: var(--jp-inverse-layout-color1);\n}\n\n.jp-icon-hover :hover .jp-icon2-hover[stroke] {\n  stroke: var(--jp-inverse-layout-color2);\n}\n\n.jp-icon-hover :hover .jp-icon3-hover[stroke] {\n  stroke: var(--jp-inverse-layout-color3);\n}\n\n.jp-icon-hover :hover .jp-icon4-hover[stroke] {\n  stroke: var(--jp-inverse-layout-color4);\n}\n\n/* recolor the accent elements of an icon */\n.jp-icon-hover :hover .jp-icon-accent0-hover[fill] {\n  fill: var(--jp-layout-color0);\n}\n\n.jp-icon-hover :hover .jp-icon-accent1-hover[fill] {\n  fill: var(--jp-layout-color1);\n}\n\n.jp-icon-hover :hover .jp-icon-accent2-hover[fill] {\n  fill: var(--jp-layout-color2);\n}\n\n.jp-icon-hover :hover .jp-icon-accent3-hover[fill] {\n  fill: var(--jp-layout-color3);\n}\n\n.jp-icon-hover :hover .jp-icon-accent4-hover[fill] {\n  fill: var(--jp-layout-color4);\n}\n\n.jp-icon-hover :hover .jp-icon-accent0-hover[stroke] {\n  stroke: var(--jp-layout-color0);\n}\n\n.jp-icon-hover :hover .jp-icon-accent1-hover[stroke] {\n  stroke: var(--jp-layout-color1);\n}\n\n.jp-icon-hover :hover .jp-icon-accent2-hover[stroke] {\n  stroke: var(--jp-layout-color2);\n}\n\n.jp-icon-hover :hover .jp-icon-accent3-hover[stroke] {\n  stroke: var(--jp-layout-color3);\n}\n\n.jp-icon-hover :hover .jp-icon-accent4-hover[stroke] {\n  stroke: var(--jp-layout-color4);\n}\n\n/* set the color of an icon to transparent */\n.jp-icon-hover :hover .jp-icon-none-hover[fill] {\n  fill: none;\n}\n\n.jp-icon-hover :hover .jp-icon-none-hover[stroke] {\n  stroke: none;\n}\n\n/**\n * inverse colors\n */\n\n/* inverse recolor the primary elements of an icon */\n.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill] {\n  fill: var(--jp-layout-color0);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill] {\n  fill: var(--jp-layout-color1);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill] {\n  fill: var(--jp-layout-color2);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill] {\n  fill: var(--jp-layout-color3);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill] {\n  fill: var(--jp-layout-color4);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke] {\n  stroke: var(--jp-layout-color0);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke] {\n  stroke: var(--jp-layout-color1);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke] {\n  stroke: var(--jp-layout-color2);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke] {\n  stroke: var(--jp-layout-color3);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke] {\n  stroke: var(--jp-layout-color4);\n}\n\n/* inverse recolor the accent elements of an icon */\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill] {\n  fill: var(--jp-inverse-layout-color0);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill] {\n  fill: var(--jp-inverse-layout-color1);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill] {\n  fill: var(--jp-inverse-layout-color2);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill] {\n  fill: var(--jp-inverse-layout-color3);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill] {\n  fill: var(--jp-inverse-layout-color4);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke] {\n  stroke: var(--jp-inverse-layout-color0);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke] {\n  stroke: var(--jp-inverse-layout-color1);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke] {\n  stroke: var(--jp-inverse-layout-color2);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke] {\n  stroke: var(--jp-inverse-layout-color3);\n}\n\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke] {\n  stroke: var(--jp-inverse-layout-color4);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/iconshover.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,wBAAwB;AAC1B;;AAEA;;EAEE;;AAEF;;EAEE;;AAEF,4CAA4C;AAC5C;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA,2CAA2C;AAC3C;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA,4CAA4C;AAC5C;EACE,UAAU;AACZ;;AAEA;EACE,YAAY;AACd;;AAEA;;EAEE;;AAEF,oDAAoD;AACpD;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA,mDAAmD;AACnD;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC;;AAEA;EACE,uCAAuC;AACzC\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-icon-hoverShow:not(:hover) .jp-icon-hoverShow-content {\\n  display: none !important;\\n}\\n\\n/**\\n * Support for hover colors for icons as inline SVG HTMLElements\\n */\\n\\n/**\\n * regular colors\\n */\\n\\n/* recolor the primary elements of an icon */\\n.jp-icon-hover :hover .jp-icon0-hover[fill] {\\n  fill: var(--jp-inverse-layout-color0);\\n}\\n\\n.jp-icon-hover :hover .jp-icon1-hover[fill] {\\n  fill: var(--jp-inverse-layout-color1);\\n}\\n\\n.jp-icon-hover :hover .jp-icon2-hover[fill] {\\n  fill: var(--jp-inverse-layout-color2);\\n}\\n\\n.jp-icon-hover :hover .jp-icon3-hover[fill] {\\n  fill: var(--jp-inverse-layout-color3);\\n}\\n\\n.jp-icon-hover :hover .jp-icon4-hover[fill] {\\n  fill: var(--jp-inverse-layout-color4);\\n}\\n\\n.jp-icon-hover :hover .jp-icon0-hover[stroke] {\\n  stroke: var(--jp-inverse-layout-color0);\\n}\\n\\n.jp-icon-hover :hover .jp-icon1-hover[stroke] {\\n  stroke: var(--jp-inverse-layout-color1);\\n}\\n\\n.jp-icon-hover :hover .jp-icon2-hover[stroke] {\\n  stroke: var(--jp-inverse-layout-color2);\\n}\\n\\n.jp-icon-hover :hover .jp-icon3-hover[stroke] {\\n  stroke: var(--jp-inverse-layout-color3);\\n}\\n\\n.jp-icon-hover :hover .jp-icon4-hover[stroke] {\\n  stroke: var(--jp-inverse-layout-color4);\\n}\\n\\n/* recolor the accent elements of an icon */\\n.jp-icon-hover :hover .jp-icon-accent0-hover[fill] {\\n  fill: var(--jp-layout-color0);\\n}\\n\\n.jp-icon-hover :hover .jp-icon-accent1-hover[fill] {\\n  fill: var(--jp-layout-color1);\\n}\\n\\n.jp-icon-hover :hover .jp-icon-accent2-hover[fill] {\\n  fill: var(--jp-layout-color2);\\n}\\n\\n.jp-icon-hover :hover .jp-icon-accent3-hover[fill] {\\n  fill: var(--jp-layout-color3);\\n}\\n\\n.jp-icon-hover :hover .jp-icon-accent4-hover[fill] {\\n  fill: var(--jp-layout-color4);\\n}\\n\\n.jp-icon-hover :hover .jp-icon-accent0-hover[stroke] {\\n  stroke: var(--jp-layout-color0);\\n}\\n\\n.jp-icon-hover :hover .jp-icon-accent1-hover[stroke] {\\n  stroke: var(--jp-layout-color1);\\n}\\n\\n.jp-icon-hover :hover .jp-icon-accent2-hover[stroke] {\\n  stroke: var(--jp-layout-color2);\\n}\\n\\n.jp-icon-hover :hover .jp-icon-accent3-hover[stroke] {\\n  stroke: var(--jp-layout-color3);\\n}\\n\\n.jp-icon-hover :hover .jp-icon-accent4-hover[stroke] {\\n  stroke: var(--jp-layout-color4);\\n}\\n\\n/* set the color of an icon to transparent */\\n.jp-icon-hover :hover .jp-icon-none-hover[fill] {\\n  fill: none;\\n}\\n\\n.jp-icon-hover :hover .jp-icon-none-hover[stroke] {\\n  stroke: none;\\n}\\n\\n/**\\n * inverse colors\\n */\\n\\n/* inverse recolor the primary elements of an icon */\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill] {\\n  fill: var(--jp-layout-color0);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill] {\\n  fill: var(--jp-layout-color1);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill] {\\n  fill: var(--jp-layout-color2);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill] {\\n  fill: var(--jp-layout-color3);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill] {\\n  fill: var(--jp-layout-color4);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke] {\\n  stroke: var(--jp-layout-color0);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke] {\\n  stroke: var(--jp-layout-color1);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke] {\\n  stroke: var(--jp-layout-color2);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke] {\\n  stroke: var(--jp-layout-color3);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke] {\\n  stroke: var(--jp-layout-color4);\\n}\\n\\n/* inverse recolor the accent elements of an icon */\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill] {\\n  fill: var(--jp-inverse-layout-color0);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill] {\\n  fill: var(--jp-inverse-layout-color1);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill] {\\n  fill: var(--jp-inverse-layout-color2);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill] {\\n  fill: var(--jp-inverse-layout-color3);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill] {\\n  fill: var(--jp-inverse-layout-color4);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke] {\\n  stroke: var(--jp-inverse-layout-color0);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke] {\\n  stroke: var(--jp-inverse-layout-color1);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke] {\\n  stroke: var(--jp-inverse-layout-color2);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke] {\\n  stroke: var(--jp-inverse-layout-color3);\\n}\\n\\n.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke] {\\n  stroke: var(--jp-inverse-layout-color4);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-IFrame {\n  width: 100%;\n  height: 100%;\n}\n\n.jp-IFrame > iframe {\n  border: none;\n}\n\n/*\nWhen drag events occur, \\`lm-mod-override-cursor\\` is added to the body.\nBecause iframes steal all cursor events, the following two rules are necessary\nto suppress pointer events while resize drags are occurring. There may be a\nbetter solution to this problem.\n*/\nbody.lm-mod-override-cursor .jp-IFrame {\n  position: relative;\n}\n\nbody.lm-mod-override-cursor .jp-IFrame::before {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: transparent;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/iframe.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,YAAY;AACd;;AAEA;;;;;CAKC;AACD;EACE,kBAAkB;AACpB;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,uBAAuB;AACzB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-IFrame {\\n  width: 100%;\\n  height: 100%;\\n}\\n\\n.jp-IFrame > iframe {\\n  border: none;\\n}\\n\\n/*\\nWhen drag events occur, `lm-mod-override-cursor` is added to the body.\\nBecause iframes steal all cursor events, the following two rules are necessary\\nto suppress pointer events while resize drags are occurring. There may be a\\nbetter solution to this problem.\\n*/\\nbody.lm-mod-override-cursor .jp-IFrame {\\n  position: relative;\\n}\\n\\nbody.lm-mod-override-cursor .jp-IFrame::before {\\n  content: '';\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  right: 0;\\n  bottom: 0;\\n  background: transparent;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-FormGroup-content fieldset {\n  border: none;\n  padding: 0;\n  min-width: 0;\n  width: 100%;\n}\n\n/* stylelint-disable selector-max-type */\n\n.jp-FormGroup-content fieldset .jp-inputFieldWrapper > input,\n.jp-FormGroup-content fieldset .jp-inputFieldWrapper > select,\n.jp-FormGroup-content fieldset .jp-inputFieldWrapper > textarea {\n  font-size: var(--jp-content-font-size2);\n  border-color: var(--jp-input-border-color);\n  border-style: solid;\n  border-radius: var(--jp-border-radius);\n  border-width: 1px;\n  padding: 6px 8px;\n  background: none;\n  color: var(--jp-ui-font-color0);\n  height: inherit;\n}\n\n.jp-FormGroup-content .jp-inputFieldWrapper > select > option {\n  background-color: var(--jp-layout-color1);\n}\n\n.jp-FormGroup-content fieldset input[type='checkbox'] {\n  position: relative;\n  top: 2px;\n  margin-left: 0;\n}\n\n.jp-FormGroup-content button.jp-mod-styled {\n  cursor: pointer;\n}\n\n.jp-FormGroup-content .checkbox label {\n  cursor: pointer;\n  font-size: var(--jp-content-font-size1);\n}\n\n.jp-FormGroup-content .jp-root > fieldset > legend {\n  display: none;\n}\n\n.jp-FormGroup-content .jp-root > fieldset > p {\n  display: none;\n}\n\n/** copy of \\`input.jp-mod-styled:focus\\` style */\n.jp-FormGroup-content fieldset input:focus,\n.jp-FormGroup-content fieldset select:focus {\n  -moz-outline-radius: unset;\n  outline: var(--jp-border-width) solid var(--jp-input-active-border-color);\n  outline-offset: -1px;\n  box-shadow: var(--jp-input-box-shadow);\n}\n\n.jp-FormGroup-content fieldset input:hover:not(:focus),\n.jp-FormGroup-content fieldset select:hover:not(:focus) {\n  background-color: var(--jp-border-color2);\n}\n\n/* stylelint-enable selector-max-type */\n\n.jp-FormGroup-content .checkbox .field-description {\n  /* Disable default description field for checkbox:\n   because other widgets do not have description fields,\n   we add descriptions to each widget on the field level.\n  */\n  display: none;\n}\n\n.jp-FormGroup-content #root__description {\n  display: none;\n}\n\n.jp-FormGroup-content .jp-modifiedIndicator {\n  width: 5px;\n  background-color: var(--jp-brand-color2);\n  margin-top: 0;\n  margin-left: calc(var(--jp-private-settingeditor-modifier-indent) * -1);\n  flex-shrink: 0;\n}\n\n.jp-FormGroup-content .jp-modifiedIndicator.jp-errorIndicator {\n  background-color: var(--jp-error-color0);\n  margin-right: 0.5em;\n}\n\n/* RJSF ARRAY style */\n\n.jp-arrayFieldWrapper legend {\n  font-size: var(--jp-content-font-size2);\n  color: var(--jp-ui-font-color0);\n  flex-basis: 100%;\n  padding: 4px 0;\n  font-weight: var(--jp-content-heading-font-weight);\n  border-bottom: 1px solid var(--jp-border-color2);\n}\n\n.jp-arrayFieldWrapper .field-description {\n  padding: 4px 0;\n  white-space: pre-wrap;\n}\n\n.jp-arrayFieldWrapper .array-item {\n  width: 100%;\n  border: 1px solid var(--jp-border-color2);\n  border-radius: 4px;\n  margin: 4px;\n}\n\n.jp-ArrayOperations {\n  display: flex;\n  margin-left: 8px;\n}\n\n.jp-ArrayOperationsButton {\n  margin: 2px;\n}\n\n.jp-ArrayOperationsButton .jp-icon3[fill] {\n  fill: var(--jp-ui-font-color0);\n}\n\nbutton.jp-ArrayOperationsButton.jp-mod-styled:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\n\n/* RJSF form validation error */\n\n.jp-FormGroup-content .validationErrors {\n  color: var(--jp-error-color0);\n}\n\n/* Hide panel level error as duplicated the field level error */\n.jp-FormGroup-content .panel.errors {\n  display: none;\n}\n\n/* RJSF normal content (settings-editor) */\n\n.jp-FormGroup-contentNormal {\n  display: flex;\n  align-items: center;\n  flex-wrap: wrap;\n}\n\n.jp-FormGroup-contentNormal .jp-FormGroup-contentItem {\n  margin-left: 7px;\n  color: var(--jp-ui-font-color0);\n}\n\n.jp-FormGroup-contentNormal .jp-FormGroup-description {\n  flex-basis: 100%;\n  padding: 4px 7px;\n}\n\n.jp-FormGroup-contentNormal .jp-FormGroup-default {\n  flex-basis: 100%;\n  padding: 4px 7px;\n}\n\n.jp-FormGroup-contentNormal .jp-FormGroup-fieldLabel {\n  font-size: var(--jp-content-font-size1);\n  font-weight: normal;\n  min-width: 120px;\n}\n\n.jp-FormGroup-contentNormal fieldset:not(:first-child) {\n  margin-left: 7px;\n}\n\n.jp-FormGroup-contentNormal .field-array-of-string .array-item {\n  /* Display \\`jp-ArrayOperations\\` buttons side-by-side with content except\n    for small screens where flex-wrap will place them one below the other.\n  */\n  display: flex;\n  align-items: center;\n  flex-wrap: wrap;\n}\n\n.jp-FormGroup-contentNormal .jp-objectFieldWrapper .form-group {\n  padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent);\n  margin-top: 2px;\n}\n\n/* RJSF compact content (metadata-form) */\n\n.jp-FormGroup-content.jp-FormGroup-contentCompact {\n  width: 100%;\n}\n\n.jp-FormGroup-contentCompact .form-group {\n  display: flex;\n  padding: 0.5em 0.2em 0.5em 0;\n}\n\n.jp-FormGroup-contentCompact\n  .jp-FormGroup-compactTitle\n  .jp-FormGroup-description {\n  font-size: var(--jp-ui-font-size1);\n  color: var(--jp-ui-font-color2);\n}\n\n.jp-FormGroup-contentCompact .jp-FormGroup-fieldLabel {\n  padding-bottom: 0.3em;\n}\n\n.jp-FormGroup-contentCompact .jp-inputFieldWrapper .form-control {\n  width: 100%;\n  box-sizing: border-box;\n}\n\n.jp-FormGroup-contentCompact .jp-arrayFieldWrapper .jp-FormGroup-compactTitle {\n  padding-bottom: 7px;\n}\n\n.jp-FormGroup-contentCompact\n  .jp-objectFieldWrapper\n  .jp-objectFieldWrapper\n  .form-group {\n  padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent);\n  margin-top: 2px;\n}\n\n.jp-FormGroup-contentCompact ul.error-detail {\n  margin-block-start: 0.5em;\n  margin-block-end: 0.5em;\n  padding-inline-start: 1em;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/rjsfTemplates.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,YAAY;EACZ,UAAU;EACV,YAAY;EACZ,WAAW;AACb;;AAEA,wCAAwC;;AAExC;;;EAGE,uCAAuC;EACvC,0CAA0C;EAC1C,mBAAmB;EACnB,sCAAsC;EACtC,iBAAiB;EACjB,gBAAgB;EAChB,gBAAgB;EAChB,+BAA+B;EAC/B,eAAe;AACjB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,kBAAkB;EAClB,QAAQ;EACR,cAAc;AAChB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,uCAAuC;AACzC;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,aAAa;AACf;;AAEA,+CAA+C;AAC/C;;EAEE,0BAA0B;EAC1B,yEAAyE;EACzE,oBAAoB;EACpB,sCAAsC;AACxC;;AAEA;;EAEE,yCAAyC;AAC3C;;AAEA,uCAAuC;;AAEvC;EACE;;;GAGC;EACD,aAAa;AACf;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,UAAU;EACV,wCAAwC;EACxC,aAAa;EACb,uEAAuE;EACvE,cAAc;AAChB;;AAEA;EACE,wCAAwC;EACxC,mBAAmB;AACrB;;AAEA,qBAAqB;;AAErB;EACE,uCAAuC;EACvC,+BAA+B;EAC/B,gBAAgB;EAChB,cAAc;EACd,kDAAkD;EAClD,gDAAgD;AAClD;;AAEA;EACE,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,WAAW;EACX,yCAAyC;EACzC,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,aAAa;EACb,gBAAgB;AAClB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,mBAAmB;EACnB,YAAY;AACd;;AAEA,+BAA+B;;AAE/B;EACE,6BAA6B;AAC/B;;AAEA,+DAA+D;AAC/D;EACE,aAAa;AACf;;AAEA,0CAA0C;;AAE1C;EACE,aAAa;EACb,mBAAmB;EACnB,eAAe;AACjB;;AAEA;EACE,gBAAgB;EAChB,+BAA+B;AACjC;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,uCAAuC;EACvC,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE;;GAEC;EACD,aAAa;EACb,mBAAmB;EACnB,eAAe;AACjB;;AAEA;EACE,oEAAoE;EACpE,eAAe;AACjB;;AAEA,yCAAyC;;AAEzC;EACE,WAAW;AACb;;AAEA;EACE,aAAa;EACb,4BAA4B;AAC9B;;AAEA;;;EAGE,kCAAkC;EAClC,+BAA+B;AACjC;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,WAAW;EACX,sBAAsB;AACxB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;;;;EAIE,oEAAoE;EACpE,eAAe;AACjB;;AAEA;EACE,yBAAyB;EACzB,uBAAuB;EACvB,yBAAyB;AAC3B\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-FormGroup-content fieldset {\\n  border: none;\\n  padding: 0;\\n  min-width: 0;\\n  width: 100%;\\n}\\n\\n/* stylelint-disable selector-max-type */\\n\\n.jp-FormGroup-content fieldset .jp-inputFieldWrapper > input,\\n.jp-FormGroup-content fieldset .jp-inputFieldWrapper > select,\\n.jp-FormGroup-content fieldset .jp-inputFieldWrapper > textarea {\\n  font-size: var(--jp-content-font-size2);\\n  border-color: var(--jp-input-border-color);\\n  border-style: solid;\\n  border-radius: var(--jp-border-radius);\\n  border-width: 1px;\\n  padding: 6px 8px;\\n  background: none;\\n  color: var(--jp-ui-font-color0);\\n  height: inherit;\\n}\\n\\n.jp-FormGroup-content .jp-inputFieldWrapper > select > option {\\n  background-color: var(--jp-layout-color1);\\n}\\n\\n.jp-FormGroup-content fieldset input[type='checkbox'] {\\n  position: relative;\\n  top: 2px;\\n  margin-left: 0;\\n}\\n\\n.jp-FormGroup-content button.jp-mod-styled {\\n  cursor: pointer;\\n}\\n\\n.jp-FormGroup-content .checkbox label {\\n  cursor: pointer;\\n  font-size: var(--jp-content-font-size1);\\n}\\n\\n.jp-FormGroup-content .jp-root > fieldset > legend {\\n  display: none;\\n}\\n\\n.jp-FormGroup-content .jp-root > fieldset > p {\\n  display: none;\\n}\\n\\n/** copy of `input.jp-mod-styled:focus` style */\\n.jp-FormGroup-content fieldset input:focus,\\n.jp-FormGroup-content fieldset select:focus {\\n  -moz-outline-radius: unset;\\n  outline: var(--jp-border-width) solid var(--jp-input-active-border-color);\\n  outline-offset: -1px;\\n  box-shadow: var(--jp-input-box-shadow);\\n}\\n\\n.jp-FormGroup-content fieldset input:hover:not(:focus),\\n.jp-FormGroup-content fieldset select:hover:not(:focus) {\\n  background-color: var(--jp-border-color2);\\n}\\n\\n/* stylelint-enable selector-max-type */\\n\\n.jp-FormGroup-content .checkbox .field-description {\\n  /* Disable default description field for checkbox:\\n   because other widgets do not have description fields,\\n   we add descriptions to each widget on the field level.\\n  */\\n  display: none;\\n}\\n\\n.jp-FormGroup-content #root__description {\\n  display: none;\\n}\\n\\n.jp-FormGroup-content .jp-modifiedIndicator {\\n  width: 5px;\\n  background-color: var(--jp-brand-color2);\\n  margin-top: 0;\\n  margin-left: calc(var(--jp-private-settingeditor-modifier-indent) * -1);\\n  flex-shrink: 0;\\n}\\n\\n.jp-FormGroup-content .jp-modifiedIndicator.jp-errorIndicator {\\n  background-color: var(--jp-error-color0);\\n  margin-right: 0.5em;\\n}\\n\\n/* RJSF ARRAY style */\\n\\n.jp-arrayFieldWrapper legend {\\n  font-size: var(--jp-content-font-size2);\\n  color: var(--jp-ui-font-color0);\\n  flex-basis: 100%;\\n  padding: 4px 0;\\n  font-weight: var(--jp-content-heading-font-weight);\\n  border-bottom: 1px solid var(--jp-border-color2);\\n}\\n\\n.jp-arrayFieldWrapper .field-description {\\n  padding: 4px 0;\\n  white-space: pre-wrap;\\n}\\n\\n.jp-arrayFieldWrapper .array-item {\\n  width: 100%;\\n  border: 1px solid var(--jp-border-color2);\\n  border-radius: 4px;\\n  margin: 4px;\\n}\\n\\n.jp-ArrayOperations {\\n  display: flex;\\n  margin-left: 8px;\\n}\\n\\n.jp-ArrayOperationsButton {\\n  margin: 2px;\\n}\\n\\n.jp-ArrayOperationsButton .jp-icon3[fill] {\\n  fill: var(--jp-ui-font-color0);\\n}\\n\\nbutton.jp-ArrayOperationsButton.jp-mod-styled:disabled {\\n  cursor: not-allowed;\\n  opacity: 0.5;\\n}\\n\\n/* RJSF form validation error */\\n\\n.jp-FormGroup-content .validationErrors {\\n  color: var(--jp-error-color0);\\n}\\n\\n/* Hide panel level error as duplicated the field level error */\\n.jp-FormGroup-content .panel.errors {\\n  display: none;\\n}\\n\\n/* RJSF normal content (settings-editor) */\\n\\n.jp-FormGroup-contentNormal {\\n  display: flex;\\n  align-items: center;\\n  flex-wrap: wrap;\\n}\\n\\n.jp-FormGroup-contentNormal .jp-FormGroup-contentItem {\\n  margin-left: 7px;\\n  color: var(--jp-ui-font-color0);\\n}\\n\\n.jp-FormGroup-contentNormal .jp-FormGroup-description {\\n  flex-basis: 100%;\\n  padding: 4px 7px;\\n}\\n\\n.jp-FormGroup-contentNormal .jp-FormGroup-default {\\n  flex-basis: 100%;\\n  padding: 4px 7px;\\n}\\n\\n.jp-FormGroup-contentNormal .jp-FormGroup-fieldLabel {\\n  font-size: var(--jp-content-font-size1);\\n  font-weight: normal;\\n  min-width: 120px;\\n}\\n\\n.jp-FormGroup-contentNormal fieldset:not(:first-child) {\\n  margin-left: 7px;\\n}\\n\\n.jp-FormGroup-contentNormal .field-array-of-string .array-item {\\n  /* Display `jp-ArrayOperations` buttons side-by-side with content except\\n    for small screens where flex-wrap will place them one below the other.\\n  */\\n  display: flex;\\n  align-items: center;\\n  flex-wrap: wrap;\\n}\\n\\n.jp-FormGroup-contentNormal .jp-objectFieldWrapper .form-group {\\n  padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent);\\n  margin-top: 2px;\\n}\\n\\n/* RJSF compact content (metadata-form) */\\n\\n.jp-FormGroup-content.jp-FormGroup-contentCompact {\\n  width: 100%;\\n}\\n\\n.jp-FormGroup-contentCompact .form-group {\\n  display: flex;\\n  padding: 0.5em 0.2em 0.5em 0;\\n}\\n\\n.jp-FormGroup-contentCompact\\n  .jp-FormGroup-compactTitle\\n  .jp-FormGroup-description {\\n  font-size: var(--jp-ui-font-size1);\\n  color: var(--jp-ui-font-color2);\\n}\\n\\n.jp-FormGroup-contentCompact .jp-FormGroup-fieldLabel {\\n  padding-bottom: 0.3em;\\n}\\n\\n.jp-FormGroup-contentCompact .jp-inputFieldWrapper .form-control {\\n  width: 100%;\\n  box-sizing: border-box;\\n}\\n\\n.jp-FormGroup-contentCompact .jp-arrayFieldWrapper .jp-FormGroup-compactTitle {\\n  padding-bottom: 7px;\\n}\\n\\n.jp-FormGroup-contentCompact\\n  .jp-objectFieldWrapper\\n  .jp-objectFieldWrapper\\n  .form-group {\\n  padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent);\\n  margin-top: 2px;\\n}\\n\\n.jp-FormGroup-contentCompact ul.error-detail {\\n  margin-block-start: 0.5em;\\n  margin-block-end: 0.5em;\\n  padding-inline-start: 1em;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.jp-SidePanel {\n  display: flex;\n  flex-direction: column;\n  min-width: var(--jp-sidebar-min-width);\n  color: var(--jp-ui-font-color1);\n  background: var(--jp-layout-color1);\n  font-size: var(--jp-ui-font-size1);\n}\n\n.jp-SidePanel-header {\n  flex: 0 0 auto;\n  display: flex;\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color2);\n  font-size: var(--jp-ui-font-size0);\n  font-weight: 600;\n  letter-spacing: 1px;\n  margin: 0;\n  padding: 2px;\n  text-transform: uppercase;\n}\n\n.jp-SidePanel-toolbar {\n  flex: 0 0 auto;\n}\n\n.jp-SidePanel-content {\n  flex: 1 1 auto;\n}\n\n.jp-SidePanel-toolbar,\n.jp-AccordionPanel-toolbar {\n  height: var(--jp-private-toolbar-height);\n}\n\n.jp-SidePanel-toolbar.jp-Toolbar-micro {\n  display: none;\n}\n\n.lm-AccordionPanel .jp-AccordionPanel-title {\n  box-sizing: border-box;\n  line-height: 25px;\n  margin: 0;\n\n  /* padding to allow for focus outline */\n  padding: 2px;\n  display: flex;\n  align-items: center;\n  background: var(--jp-layout-color1);\n  color: var(--jp-ui-font-color1);\n  border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);\n  box-shadow: var(--jp-toolbar-box-shadow);\n  font-size: var(--jp-ui-font-size0);\n}\n\n.lm-AccordionPanel .jp-AccordionPanel-title:focus-visible {\n  /* --accent-fill-focus is computed by the jp toolkit to ensure accessibility */\n  outline: 2px solid var(--accent-fill-focus, var(--jp-brand-color1));\n  outline-offset: -2px;\n}\n\n.jp-AccordionPanel-title {\n  cursor: pointer;\n  user-select: none;\n  -moz-user-select: none;\n  -webkit-user-select: none;\n  text-transform: uppercase;\n}\n\n.lm-AccordionPanel[data-orientation='horizontal'] > .jp-AccordionPanel-title {\n  /* Title is rotated for horizontal accordion panel using CSS */\n  display: block;\n  transform-origin: top left;\n  transform: rotate(-90deg) translate(-100%);\n}\n\n.jp-AccordionPanel-title .lm-AccordionPanel-titleLabel {\n  user-select: none;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  overflow: hidden;\n}\n\n.jp-AccordionPanel-title .lm-AccordionPanel-titleCollapser {\n  transform: rotate(-90deg);\n  margin: auto 0;\n  height: 16px;\n}\n\n.jp-AccordionPanel-title.lm-mod-expanded .lm-AccordionPanel-titleCollapser {\n  transform: rotate(0deg);\n}\n\n.lm-AccordionPanel .jp-AccordionPanel-toolbar {\n  background: none;\n  box-shadow: none;\n  border: none;\n  margin-left: auto;\n}\n\n.lm-AccordionPanel .lm-SplitPanel-handle:hover {\n  background: var(--jp-layout-color3);\n}\n\n.jp-text-truncated {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/sidepanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,sBAAsB;EACtB,sCAAsC;EACtC,+BAA+B;EAC/B,mCAAmC;EACnC,kCAAkC;AACpC;;AAEA;EACE,cAAc;EACd,aAAa;EACb,mEAAmE;EACnE,kCAAkC;EAClC,gBAAgB;EAChB,mBAAmB;EACnB,SAAS;EACT,YAAY;EACZ,yBAAyB;AAC3B;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;;EAEE,wCAAwC;AAC1C;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,sBAAsB;EACtB,iBAAiB;EACjB,SAAS;;EAET,uCAAuC;EACvC,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,mCAAmC;EACnC,+BAA+B;EAC/B,0EAA0E;EAC1E,wCAAwC;EACxC,kCAAkC;AACpC;;AAEA;EACE,8EAA8E;EAC9E,mEAAmE;EACnE,oBAAoB;AACtB;;AAEA;EACE,eAAe;EACf,iBAAiB;EACjB,sBAAsB;EACtB,yBAAyB;EACzB,yBAAyB;AAC3B;;AAEA;EACE,8DAA8D;EAC9D,cAAc;EACd,0BAA0B;EAC1B,0CAA0C;AAC5C;;AAEA;EACE,iBAAiB;EACjB,uBAAuB;EACvB,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,yBAAyB;EACzB,cAAc;EACd,YAAY;AACd;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;AACrB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.jp-SidePanel {\\n  display: flex;\\n  flex-direction: column;\\n  min-width: var(--jp-sidebar-min-width);\\n  color: var(--jp-ui-font-color1);\\n  background: var(--jp-layout-color1);\\n  font-size: var(--jp-ui-font-size1);\\n}\\n\\n.jp-SidePanel-header {\\n  flex: 0 0 auto;\\n  display: flex;\\n  border-bottom: var(--jp-border-width) solid var(--jp-border-color2);\\n  font-size: var(--jp-ui-font-size0);\\n  font-weight: 600;\\n  letter-spacing: 1px;\\n  margin: 0;\\n  padding: 2px;\\n  text-transform: uppercase;\\n}\\n\\n.jp-SidePanel-toolbar {\\n  flex: 0 0 auto;\\n}\\n\\n.jp-SidePanel-content {\\n  flex: 1 1 auto;\\n}\\n\\n.jp-SidePanel-toolbar,\\n.jp-AccordionPanel-toolbar {\\n  height: var(--jp-private-toolbar-height);\\n}\\n\\n.jp-SidePanel-toolbar.jp-Toolbar-micro {\\n  display: none;\\n}\\n\\n.lm-AccordionPanel .jp-AccordionPanel-title {\\n  box-sizing: border-box;\\n  line-height: 25px;\\n  margin: 0;\\n\\n  /* padding to allow for focus outline */\\n  padding: 2px;\\n  display: flex;\\n  align-items: center;\\n  background: var(--jp-layout-color1);\\n  color: var(--jp-ui-font-color1);\\n  border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);\\n  box-shadow: var(--jp-toolbar-box-shadow);\\n  font-size: var(--jp-ui-font-size0);\\n}\\n\\n.lm-AccordionPanel .jp-AccordionPanel-title:focus-visible {\\n  /* --accent-fill-focus is computed by the jp toolkit to ensure accessibility */\\n  outline: 2px solid var(--accent-fill-focus, var(--jp-brand-color1));\\n  outline-offset: -2px;\\n}\\n\\n.jp-AccordionPanel-title {\\n  cursor: pointer;\\n  user-select: none;\\n  -moz-user-select: none;\\n  -webkit-user-select: none;\\n  text-transform: uppercase;\\n}\\n\\n.lm-AccordionPanel[data-orientation='horizontal'] > .jp-AccordionPanel-title {\\n  /* Title is rotated for horizontal accordion panel using CSS */\\n  display: block;\\n  transform-origin: top left;\\n  transform: rotate(-90deg) translate(-100%);\\n}\\n\\n.jp-AccordionPanel-title .lm-AccordionPanel-titleLabel {\\n  user-select: none;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n  overflow: hidden;\\n}\\n\\n.jp-AccordionPanel-title .lm-AccordionPanel-titleCollapser {\\n  transform: rotate(-90deg);\\n  margin: auto 0;\\n  height: 16px;\\n}\\n\\n.jp-AccordionPanel-title.lm-mod-expanded .lm-AccordionPanel-titleCollapser {\\n  transform: rotate(0deg);\\n}\\n\\n.lm-AccordionPanel .jp-AccordionPanel-toolbar {\\n  background: none;\\n  box-shadow: none;\\n  border: none;\\n  margin-left: auto;\\n}\\n\\n.lm-AccordionPanel .lm-SplitPanel-handle:hover {\\n  background: var(--jp-layout-color3);\\n}\\n\\n.jp-text-truncated {\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-Spinner {\n  position: absolute;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  z-index: 10;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: var(--jp-layout-color0);\n  outline: none;\n}\n\n.jp-SpinnerContent {\n  font-size: 10px;\n  margin: 50px auto;\n  text-indent: -9999em;\n  width: 3em;\n  height: 3em;\n  border-radius: 50%;\n  background: var(--jp-brand-color3);\n  background: linear-gradient(\n    to right,\n    #f37626 10%,\n    rgba(255, 255, 255, 0) 42%\n  );\n  position: relative;\n  animation:\n    load3 1s infinite linear,\n    fadeIn 1s;\n}\n\n.jp-SpinnerContent::before {\n  width: 50%;\n  height: 50%;\n  background: #f37626;\n  border-radius: 100% 0 0;\n  position: absolute;\n  top: 0;\n  left: 0;\n  content: '';\n}\n\n.jp-SpinnerContent::after {\n  background: var(--jp-layout-color0);\n  width: 75%;\n  height: 75%;\n  border-radius: 50%;\n  content: '';\n  margin: auto;\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n}\n\n@keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n@keyframes load3 {\n  0% {\n    transform: rotate(0deg);\n  }\n\n  100% {\n    transform: rotate(360deg);\n  }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/spinner.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,kBAAkB;EAClB,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB,WAAW;EACX,OAAO;EACP,MAAM;EACN,WAAW;EACX,YAAY;EACZ,mCAAmC;EACnC,aAAa;AACf;;AAEA;EACE,eAAe;EACf,iBAAiB;EACjB,oBAAoB;EACpB,UAAU;EACV,WAAW;EACX,kBAAkB;EAClB,kCAAkC;EAClC;;;;GAIC;EACD,kBAAkB;EAClB;;aAEW;AACb;;AAEA;EACE,UAAU;EACV,WAAW;EACX,mBAAmB;EACnB,uBAAuB;EACvB,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;AACb;;AAEA;EACE,mCAAmC;EACnC,UAAU;EACV,WAAW;EACX,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,SAAS;EACT,QAAQ;AACV;;AAEA;EACE;IACE,UAAU;EACZ;;EAEA;IACE,UAAU;EACZ;AACF;;AAEA;EACE;IACE,uBAAuB;EACzB;;EAEA;IACE,yBAAyB;EAC3B;AACF\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-Spinner {\\n  position: absolute;\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n  z-index: 10;\\n  left: 0;\\n  top: 0;\\n  width: 100%;\\n  height: 100%;\\n  background: var(--jp-layout-color0);\\n  outline: none;\\n}\\n\\n.jp-SpinnerContent {\\n  font-size: 10px;\\n  margin: 50px auto;\\n  text-indent: -9999em;\\n  width: 3em;\\n  height: 3em;\\n  border-radius: 50%;\\n  background: var(--jp-brand-color3);\\n  background: linear-gradient(\\n    to right,\\n    #f37626 10%,\\n    rgba(255, 255, 255, 0) 42%\\n  );\\n  position: relative;\\n  animation:\\n    load3 1s infinite linear,\\n    fadeIn 1s;\\n}\\n\\n.jp-SpinnerContent::before {\\n  width: 50%;\\n  height: 50%;\\n  background: #f37626;\\n  border-radius: 100% 0 0;\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  content: '';\\n}\\n\\n.jp-SpinnerContent::after {\\n  background: var(--jp-layout-color0);\\n  width: 75%;\\n  height: 75%;\\n  border-radius: 50%;\\n  content: '';\\n  margin: auto;\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  bottom: 0;\\n  right: 0;\\n}\\n\\n@keyframes fadeIn {\\n  0% {\\n    opacity: 0;\\n  }\\n\\n  100% {\\n    opacity: 1;\\n  }\\n}\\n\\n@keyframes load3 {\\n  0% {\\n    transform: rotate(0deg);\\n  }\\n\\n  100% {\\n    transform: rotate(360deg);\\n  }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\nbutton.jp-mod-styled {\n  font-size: var(--jp-ui-font-size1);\n  color: var(--jp-ui-font-color0);\n  border: none;\n  box-sizing: border-box;\n  text-align: center;\n  line-height: 32px;\n  height: 32px;\n  padding: 0 12px;\n  letter-spacing: 0.8px;\n  outline: none;\n  appearance: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n}\n\ninput.jp-mod-styled {\n  background: var(--jp-input-background);\n  height: 28px;\n  box-sizing: border-box;\n  border: var(--jp-border-width) solid var(--jp-border-color1);\n  border-radius: var(--jp-border-radius);\n  padding-left: 7px;\n  padding-right: 7px;\n  font-size: var(--jp-ui-font-size2);\n  color: var(--jp-ui-font-color0);\n  outline: none;\n  appearance: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n}\n\ninput[type='checkbox'].jp-mod-styled {\n  appearance: checkbox;\n  -webkit-appearance: checkbox;\n  -moz-appearance: checkbox;\n  height: auto;\n}\n\ninput.jp-mod-styled:focus {\n  border: var(--jp-border-width) solid var(--jp-input-active-border-color);\n  box-shadow: var(--jp-input-box-shadow);\n}\n\ninput[type='checkbox'].jp-mod-styled:focus-visible {\n  outline: var(--jp-border-width) solid var(--jp-input-active-border-color);\n  outline-offset: 1px;\n}\n\n.jp-select-wrapper {\n  display: flex;\n  position: relative;\n  flex-direction: column;\n  padding: 1px;\n  background-color: var(--jp-layout-color1);\n  box-sizing: border-box;\n  margin-bottom: 12px;\n}\n\n.jp-select-wrapper:not(.multiple) {\n  height: 28px;\n}\n\n.jp-select-wrapper.jp-mod-focused select.jp-mod-styled {\n  border: var(--jp-border-width) solid var(--jp-input-active-border-color);\n  box-shadow: var(--jp-input-box-shadow);\n  background-color: var(--jp-input-active-background);\n}\n\nselect.jp-mod-styled:hover {\n  cursor: pointer;\n  color: var(--jp-ui-font-color0);\n  background-color: var(--jp-input-hover-background);\n  box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.5);\n}\n\nselect.jp-mod-styled {\n  flex: 1 1 auto;\n  width: 100%;\n  font-size: var(--jp-ui-font-size2);\n  background: var(--jp-input-background);\n  color: var(--jp-ui-font-color0);\n  padding: 0 25px 0 8px;\n  border: var(--jp-border-width) solid var(--jp-input-border-color);\n  border-radius: var(--jp-border-radius);\n  outline: none;\n  appearance: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n}\n\nselect.jp-mod-styled:not([multiple]) {\n  height: 32px;\n}\n\nselect.jp-mod-styled[multiple] {\n  max-height: 200px;\n  overflow-y: auto;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/styling.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,kCAAkC;EAClC,+BAA+B;EAC/B,YAAY;EACZ,sBAAsB;EACtB,kBAAkB;EAClB,iBAAiB;EACjB,YAAY;EACZ,eAAe;EACf,qBAAqB;EACrB,aAAa;EACb,gBAAgB;EAChB,wBAAwB;EACxB,qBAAqB;AACvB;;AAEA;EACE,sCAAsC;EACtC,YAAY;EACZ,sBAAsB;EACtB,4DAA4D;EAC5D,sCAAsC;EACtC,iBAAiB;EACjB,kBAAkB;EAClB,kCAAkC;EAClC,+BAA+B;EAC/B,aAAa;EACb,gBAAgB;EAChB,wBAAwB;EACxB,qBAAqB;AACvB;;AAEA;EACE,oBAAoB;EACpB,4BAA4B;EAC5B,yBAAyB;EACzB,YAAY;AACd;;AAEA;EACE,wEAAwE;EACxE,sCAAsC;AACxC;;AAEA;EACE,yEAAyE;EACzE,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,kBAAkB;EAClB,sBAAsB;EACtB,YAAY;EACZ,yCAAyC;EACzC,sBAAsB;EACtB,mBAAmB;AACrB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,wEAAwE;EACxE,sCAAsC;EACtC,mDAAmD;AACrD;;AAEA;EACE,eAAe;EACf,+BAA+B;EAC/B,kDAAkD;EAClD,4CAA4C;AAC9C;;AAEA;EACE,cAAc;EACd,WAAW;EACX,kCAAkC;EAClC,sCAAsC;EACtC,+BAA+B;EAC/B,qBAAqB;EACrB,iEAAiE;EACjE,sCAAsC;EACtC,aAAa;EACb,gBAAgB;EAChB,wBAAwB;EACxB,qBAAqB;AACvB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,iBAAiB;EACjB,gBAAgB;AAClB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\nbutton.jp-mod-styled {\\n  font-size: var(--jp-ui-font-size1);\\n  color: var(--jp-ui-font-color0);\\n  border: none;\\n  box-sizing: border-box;\\n  text-align: center;\\n  line-height: 32px;\\n  height: 32px;\\n  padding: 0 12px;\\n  letter-spacing: 0.8px;\\n  outline: none;\\n  appearance: none;\\n  -webkit-appearance: none;\\n  -moz-appearance: none;\\n}\\n\\ninput.jp-mod-styled {\\n  background: var(--jp-input-background);\\n  height: 28px;\\n  box-sizing: border-box;\\n  border: var(--jp-border-width) solid var(--jp-border-color1);\\n  border-radius: var(--jp-border-radius);\\n  padding-left: 7px;\\n  padding-right: 7px;\\n  font-size: var(--jp-ui-font-size2);\\n  color: var(--jp-ui-font-color0);\\n  outline: none;\\n  appearance: none;\\n  -webkit-appearance: none;\\n  -moz-appearance: none;\\n}\\n\\ninput[type='checkbox'].jp-mod-styled {\\n  appearance: checkbox;\\n  -webkit-appearance: checkbox;\\n  -moz-appearance: checkbox;\\n  height: auto;\\n}\\n\\ninput.jp-mod-styled:focus {\\n  border: var(--jp-border-width) solid var(--jp-input-active-border-color);\\n  box-shadow: var(--jp-input-box-shadow);\\n}\\n\\ninput[type='checkbox'].jp-mod-styled:focus-visible {\\n  outline: var(--jp-border-width) solid var(--jp-input-active-border-color);\\n  outline-offset: 1px;\\n}\\n\\n.jp-select-wrapper {\\n  display: flex;\\n  position: relative;\\n  flex-direction: column;\\n  padding: 1px;\\n  background-color: var(--jp-layout-color1);\\n  box-sizing: border-box;\\n  margin-bottom: 12px;\\n}\\n\\n.jp-select-wrapper:not(.multiple) {\\n  height: 28px;\\n}\\n\\n.jp-select-wrapper.jp-mod-focused select.jp-mod-styled {\\n  border: var(--jp-border-width) solid var(--jp-input-active-border-color);\\n  box-shadow: var(--jp-input-box-shadow);\\n  background-color: var(--jp-input-active-background);\\n}\\n\\nselect.jp-mod-styled:hover {\\n  cursor: pointer;\\n  color: var(--jp-ui-font-color0);\\n  background-color: var(--jp-input-hover-background);\\n  box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.5);\\n}\\n\\nselect.jp-mod-styled {\\n  flex: 1 1 auto;\\n  width: 100%;\\n  font-size: var(--jp-ui-font-size2);\\n  background: var(--jp-input-background);\\n  color: var(--jp-ui-font-color0);\\n  padding: 0 25px 0 8px;\\n  border: var(--jp-border-width) solid var(--jp-input-border-color);\\n  border-radius: var(--jp-border-radius);\\n  outline: none;\\n  appearance: none;\\n  -webkit-appearance: none;\\n  -moz-appearance: none;\\n}\\n\\nselect.jp-mod-styled:not([multiple]) {\\n  height: 32px;\\n}\\n\\nselect.jp-mod-styled[multiple] {\\n  max-height: 200px;\\n  overflow-y: auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-switch {\n  display: flex;\n  align-items: center;\n  padding-left: 4px;\n  padding-right: 4px;\n  font-size: var(--jp-ui-font-size1);\n  background-color: transparent;\n  color: var(--jp-ui-font-color1);\n  border: none;\n  height: 20px;\n}\n\n.jp-switch:hover {\n  background-color: var(--jp-layout-color2);\n}\n\n.jp-switch-label {\n  margin-right: 5px;\n  font-family: var(--jp-ui-font-family);\n}\n\n.jp-switch-track {\n  cursor: pointer;\n  background-color: var(--jp-switch-color, var(--jp-border-color1));\n  -webkit-transition: 0.4s;\n  transition: 0.4s;\n  border-radius: 34px;\n  height: 16px;\n  width: 35px;\n  position: relative;\n}\n\n.jp-switch-track::before {\n  content: '';\n  position: absolute;\n  height: 10px;\n  width: 10px;\n  margin: 3px;\n  left: 0;\n  background-color: var(--jp-ui-inverse-font-color1);\n  -webkit-transition: 0.4s;\n  transition: 0.4s;\n  border-radius: 50%;\n}\n\n.jp-switch[aria-checked='true'] .jp-switch-track {\n  background-color: var(--jp-switch-true-position-color, var(--jp-warn-color0));\n}\n\n.jp-switch[aria-checked='true'] .jp-switch-track::before {\n  /* track width (35) - margins (3 + 3) - thumb width (10) */\n  left: 19px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/switch.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,aAAa;EACb,mBAAmB;EACnB,iBAAiB;EACjB,kBAAkB;EAClB,kCAAkC;EAClC,6BAA6B;EAC7B,+BAA+B;EAC/B,YAAY;EACZ,YAAY;AACd;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,iBAAiB;EACjB,qCAAqC;AACvC;;AAEA;EACE,eAAe;EACf,iEAAiE;EACjE,wBAAwB;EACxB,gBAAgB;EAChB,mBAAmB;EACnB,YAAY;EACZ,WAAW;EACX,kBAAkB;AACpB;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,YAAY;EACZ,WAAW;EACX,WAAW;EACX,OAAO;EACP,kDAAkD;EAClD,wBAAwB;EACxB,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,6EAA6E;AAC/E;;AAEA;EACE,0DAA0D;EAC1D,UAAU;AACZ\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-switch {\\n  display: flex;\\n  align-items: center;\\n  padding-left: 4px;\\n  padding-right: 4px;\\n  font-size: var(--jp-ui-font-size1);\\n  background-color: transparent;\\n  color: var(--jp-ui-font-color1);\\n  border: none;\\n  height: 20px;\\n}\\n\\n.jp-switch:hover {\\n  background-color: var(--jp-layout-color2);\\n}\\n\\n.jp-switch-label {\\n  margin-right: 5px;\\n  font-family: var(--jp-ui-font-family);\\n}\\n\\n.jp-switch-track {\\n  cursor: pointer;\\n  background-color: var(--jp-switch-color, var(--jp-border-color1));\\n  -webkit-transition: 0.4s;\\n  transition: 0.4s;\\n  border-radius: 34px;\\n  height: 16px;\\n  width: 35px;\\n  position: relative;\\n}\\n\\n.jp-switch-track::before {\\n  content: '';\\n  position: absolute;\\n  height: 10px;\\n  width: 10px;\\n  margin: 3px;\\n  left: 0;\\n  background-color: var(--jp-ui-inverse-font-color1);\\n  -webkit-transition: 0.4s;\\n  transition: 0.4s;\\n  border-radius: 50%;\\n}\\n\\n.jp-switch[aria-checked='true'] .jp-switch-track {\\n  background-color: var(--jp-switch-true-position-color, var(--jp-warn-color0));\\n}\\n\\n.jp-switch[aria-checked='true'] .jp-switch-track::before {\\n  /* track width (35) - margins (3 + 3) - thumb width (10) */\\n  left: 19px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar .lm-TabBar-addButton {\n  align-items: center;\n  display: flex;\n  padding: 4px;\n  padding-bottom: 5px;\n  margin-right: 1px;\n  background-color: var(--jp-layout-color2);\n}\n\n.lm-TabBar .lm-TabBar-addButton:hover {\n  background-color: var(--jp-layout-color1);\n}\n\n.lm-DockPanel-tabBar .lm-TabBar-tab {\n  width: var(--jp-private-horizontal-tab-width);\n}\n\n.lm-DockPanel-tabBar .lm-TabBar-content {\n  flex: unset;\n}\n\n.lm-DockPanel-tabBar[data-orientation='horizontal'] {\n  flex: 1 1 auto;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/tabbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,mBAAmB;EACnB,aAAa;EACb,YAAY;EACZ,mBAAmB;EACnB,iBAAiB;EACjB,yCAAyC;AAC3C;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,6CAA6C;AAC/C;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,cAAc;AAChB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-TabBar .lm-TabBar-addButton {\\n  align-items: center;\\n  display: flex;\\n  padding: 4px;\\n  padding-bottom: 5px;\\n  margin-right: 1px;\\n  background-color: var(--jp-layout-color2);\\n}\\n\\n.lm-TabBar .lm-TabBar-addButton:hover {\\n  background-color: var(--jp-layout-color1);\\n}\\n\\n.lm-DockPanel-tabBar .lm-TabBar-tab {\\n  width: var(--jp-private-horizontal-tab-width);\\n}\\n\\n.lm-DockPanel-tabBar .lm-TabBar-content {\\n  flex: unset;\\n}\\n\\n.lm-DockPanel-tabBar[data-orientation='horizontal'] {\\n  flex: 1 1 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-sortable-table {\n  color: var(--jp-ui-font-color1);\n  background: var(--jp-layout-color1);\n  font-size: var(--jp-ui-font-size1);\n  border-spacing: 0;\n\n  /* required to preserve borders of \\`<th>\\` when using position:sticky */\n  border-collapse: separate;\n  width: 100%;\n  overflow-wrap: break-word;\n}\n\n.jp-sortable-table > thead {\n  box-shadow: var(--jp-toolbar-box-shadow);\n\n  /* move to a new stacking context to exclude from \\`mix-blend-mode\\` */\n  z-index: 1;\n}\n\n.jp-sortable-table > tbody {\n  overflow-y: auto;\n  overflow-x: hidden;\n}\n\n.jp-sortable-table-tr > th,\n.jp-sortable-table-tr > td {\n  position: relative;\n  padding: 4px 12px 2px;\n  height: 18px;\n}\n\n.jp-sortable-table-tr > td::before,\n.jp-sortable-table-tr > th::before {\n  border-left: var(--jp-border-width) solid var(--jp-border-color3);\n\n  /* border is implemented via pseudo-element to enable selective blending */\n  content: '';\n  display: block;\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n\n  /* this serves to boost border color when background changes on hover */\n  mix-blend-mode: multiply;\n}\n\n.jp-sortable-table-tr > th {\n  font-weight: 500;\n  text-align: left;\n  border-width: var(--jp-border-width) 0;\n  margin-top: calc(var(--jp-border-width) * -1);\n  border-style: solid;\n  border-color: var(--jp-border-color1);\n  background: var(--jp-layout-color1);\n  position: sticky;\n  top: 0;\n  z-index: 2;\n  white-space: nowrap;\n  user-select: none;\n}\n\n.jp-sortable-table-tr > th:not(:first-child) {\n  border-left-color: var(--jp-border-color2);\n}\n\n.jp-sortable-table-tr > th:hover {\n  background: var(--jp-layout-color2);\n}\n\n.jp-sortable-table-tr:hover {\n  background: var(--jp-layout-color2);\n}\n\n.jp-sortable-table-th-wrapper {\n  flex-direction: row;\n  display: flex;\n}\n\n.jp-sortable-table-th-wrapper > label {\n  flex: 1;\n  text-overflow: ellipsis;\n}\n\n.jp-sort-icon {\n  flex: 0;\n  height: var(--jp-ui-font-size1);\n  width: var(--jp-ui-font-size1);\n}\n\n.jp-sort-icon > svg {\n  display: inline;\n  height: auto;\n}\n\n.jp-sortable-table-tr > th:not(.jp-sorted-header) .jp-sort-icon {\n  opacity: 0;\n}\n\n.jp-sortable-table-tr > th:not(.jp-sorted-header):hover .jp-sort-icon {\n  opacity: 0.5;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/table.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,+BAA+B;EAC/B,mCAAmC;EACnC,kCAAkC;EAClC,iBAAiB;;EAEjB,sEAAsE;EACtE,yBAAyB;EACzB,WAAW;EACX,yBAAyB;AAC3B;;AAEA;EACE,wCAAwC;;EAExC,oEAAoE;EACpE,UAAU;AACZ;;AAEA;EACE,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;;EAEE,kBAAkB;EAClB,qBAAqB;EACrB,YAAY;AACd;;AAEA;;EAEE,iEAAiE;;EAEjE,0EAA0E;EAC1E,WAAW;EACX,cAAc;EACd,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,OAAO;;EAEP,uEAAuE;EACvE,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,sCAAsC;EACtC,6CAA6C;EAC7C,mBAAmB;EACnB,qCAAqC;EACrC,mCAAmC;EACnC,gBAAgB;EAChB,MAAM;EACN,UAAU;EACV,mBAAmB;EACnB,iBAAiB;AACnB;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,mBAAmB;EACnB,aAAa;AACf;;AAEA;EACE,OAAO;EACP,uBAAuB;AACzB;;AAEA;EACE,OAAO;EACP,+BAA+B;EAC/B,8BAA8B;AAChC;;AAEA;EACE,eAAe;EACf,YAAY;AACd;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,YAAY;AACd\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-sortable-table {\\n  color: var(--jp-ui-font-color1);\\n  background: var(--jp-layout-color1);\\n  font-size: var(--jp-ui-font-size1);\\n  border-spacing: 0;\\n\\n  /* required to preserve borders of `<th>` when using position:sticky */\\n  border-collapse: separate;\\n  width: 100%;\\n  overflow-wrap: break-word;\\n}\\n\\n.jp-sortable-table > thead {\\n  box-shadow: var(--jp-toolbar-box-shadow);\\n\\n  /* move to a new stacking context to exclude from `mix-blend-mode` */\\n  z-index: 1;\\n}\\n\\n.jp-sortable-table > tbody {\\n  overflow-y: auto;\\n  overflow-x: hidden;\\n}\\n\\n.jp-sortable-table-tr > th,\\n.jp-sortable-table-tr > td {\\n  position: relative;\\n  padding: 4px 12px 2px;\\n  height: 18px;\\n}\\n\\n.jp-sortable-table-tr > td::before,\\n.jp-sortable-table-tr > th::before {\\n  border-left: var(--jp-border-width) solid var(--jp-border-color3);\\n\\n  /* border is implemented via pseudo-element to enable selective blending */\\n  content: '';\\n  display: block;\\n  position: absolute;\\n  top: 0;\\n  bottom: 0;\\n  left: 0;\\n\\n  /* this serves to boost border color when background changes on hover */\\n  mix-blend-mode: multiply;\\n}\\n\\n.jp-sortable-table-tr > th {\\n  font-weight: 500;\\n  text-align: left;\\n  border-width: var(--jp-border-width) 0;\\n  margin-top: calc(var(--jp-border-width) * -1);\\n  border-style: solid;\\n  border-color: var(--jp-border-color1);\\n  background: var(--jp-layout-color1);\\n  position: sticky;\\n  top: 0;\\n  z-index: 2;\\n  white-space: nowrap;\\n  user-select: none;\\n}\\n\\n.jp-sortable-table-tr > th:not(:first-child) {\\n  border-left-color: var(--jp-border-color2);\\n}\\n\\n.jp-sortable-table-tr > th:hover {\\n  background: var(--jp-layout-color2);\\n}\\n\\n.jp-sortable-table-tr:hover {\\n  background: var(--jp-layout-color2);\\n}\\n\\n.jp-sortable-table-th-wrapper {\\n  flex-direction: row;\\n  display: flex;\\n}\\n\\n.jp-sortable-table-th-wrapper > label {\\n  flex: 1;\\n  text-overflow: ellipsis;\\n}\\n\\n.jp-sort-icon {\\n  flex: 0;\\n  height: var(--jp-ui-font-size1);\\n  width: var(--jp-ui-font-size1);\\n}\\n\\n.jp-sort-icon > svg {\\n  display: inline;\\n  height: auto;\\n}\\n\\n.jp-sortable-table-tr > th:not(.jp-sorted-header) .jp-sort-icon {\\n  opacity: 0;\\n}\\n\\n.jp-sortable-table-tr > th:not(.jp-sorted-header):hover .jp-sort-icon {\\n  opacity: 0.5;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n:root {\n  --jp-private-toolbar-height: calc(\n    31px + var(--jp-border-width)\n  ); /* leave 28px for content */\n}\n\n.jp-MainAreaWidget > .jp-Toolbar {\n  border-radius: 0;\n}\n\n.jp-Toolbar {\n  /* Increase density for toolbar */\n  --design-unit: 3.5;\n  --toolbar-item-gap: 0;\n\n  color: var(--jp-ui-font-color1);\n  border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);\n  box-shadow: var(--jp-toolbar-box-shadow);\n  background: var(--jp-toolbar-background);\n  min-height: var(--jp-toolbar-micro-height);\n  padding: 0 2px;\n  z-index: 8;\n}\n\n/* Toolbar items */\n\n.jp-Toolbar > .jp-Toolbar-item {\n  /* Center the items in toolbar */\n  height: 100%;\n  display: flex;\n  align-items: center;\n}\n\n.jp-Toolbar::part(positioning-region) {\n  align-items: center;\n}\n\n.jp-ToolbarLabelComponent {\n  background: var(--jp-layout-color1);\n  background-color: var(--jp-brand-color1);\n  color: var(--jp-ui-inverse-font-color1);\n  border: none;\n  box-sizing: border-box;\n  outline: none;\n  appearance: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  padding: 0 6px;\n  margin: 0;\n  height: 24px;\n  border-radius: var(--jp-border-radius);\n  display: flex;\n  align-items: center;\n  text-align: center;\n  font-size: var(--jp-ui-font-size0);\n  min-width: unset;\n  min-height: unset;\n  user-select: none;\n}\n\nbutton.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label {\n  font-size: var(--jp-ui-font-size1);\n  line-height: 100%;\n  padding-left: 2px;\n  color: var(--jp-ui-font-color1);\n  font-family: var(--jp-ui-font-family);\n}\n\n.jp-Toolbar .jp-ToolbarButtonComponent {\n  color: var(--jp-ui-font-color1);\n}\n\n.jp-ToolbarButtonComponent::part(content) {\n  display: flex;\n  align-items: center;\n}\n\n.jp-Toolbar > .jp-Toolbar-item.jp-Toolbar-spacer {\n  flex-grow: 1;\n  flex-shrink: 1;\n}\n\n.jp-Toolbar-responsive-popup.jp-ThemedContainer {\n  position: absolute;\n  height: fit-content;\n  border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);\n  box-shadow: var(--jp-toolbar-box-shadow);\n  background: var(--jp-toolbar-background);\n  z-index: 1;\n  right: 0;\n  top: 0;\n}\n\n#jp-main-dock-panel[data-mode='single-document']\n  .jp-MainAreaWidget\n  > .jp-Toolbar.jp-Toolbar-micro {\n  padding: 0;\n  min-height: 0;\n}\n\n#jp-main-dock-panel[data-mode='single-document']\n  .jp-MainAreaWidget\n  > .jp-Toolbar {\n  border: none;\n  box-shadow: none;\n}\n\n/* @deprecated dead code to be removed in JupyterLab 5\n  Button in toolbar should use the ui-toolkit\n  https://github.com/jupyterlab-contrib/jupyter-ui-toolkit.\n*/\nbutton.jp-ToolbarButtonComponent {\n  background: var(--jp-layout-color1);\n  border: none;\n  box-sizing: border-box;\n  outline: none;\n  appearance: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  padding: 0 6px;\n  margin: 0;\n  height: 24px;\n  border-radius: var(--jp-border-radius);\n  display: flex;\n  align-items: center;\n  text-align: center;\n  font-size: var(--jp-ui-font-size0);\n  min-width: unset;\n  min-height: unset;\n}\n\nbutton.jp-ToolbarButtonComponent:disabled {\n  opacity: 0.4;\n}\n\nbutton.jp-ToolbarButtonComponent > span {\n  padding: 0;\n  flex: 0 0 auto;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/toolbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE;;GAEC,EAAE,2BAA2B;AAChC;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,iCAAiC;EACjC,kBAAkB;EAClB,qBAAqB;;EAErB,+BAA+B;EAC/B,0EAA0E;EAC1E,wCAAwC;EACxC,wCAAwC;EACxC,0CAA0C;EAC1C,cAAc;EACd,UAAU;AACZ;;AAEA,kBAAkB;;AAElB;EACE,gCAAgC;EAChC,YAAY;EACZ,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mCAAmC;EACnC,wCAAwC;EACxC,uCAAuC;EACvC,YAAY;EACZ,sBAAsB;EACtB,aAAa;EACb,gBAAgB;EAChB,wBAAwB;EACxB,qBAAqB;EACrB,cAAc;EACd,SAAS;EACT,YAAY;EACZ,sCAAsC;EACtC,aAAa;EACb,mBAAmB;EACnB,kBAAkB;EAClB,kCAAkC;EAClC,gBAAgB;EAChB,iBAAiB;EACjB,iBAAiB;AACnB;;AAEA;EACE,kCAAkC;EAClC,iBAAiB;EACjB,iBAAiB;EACjB,+BAA+B;EAC/B,qCAAqC;AACvC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,kBAAkB;EAClB,mBAAmB;EACnB,0EAA0E;EAC1E,wCAAwC;EACxC,wCAAwC;EACxC,UAAU;EACV,QAAQ;EACR,MAAM;AACR;;AAEA;;;EAGE,UAAU;EACV,aAAa;AACf;;AAEA;;;EAGE,YAAY;EACZ,gBAAgB;AAClB;;AAEA;;;CAGC;AACD;EACE,mCAAmC;EACnC,YAAY;EACZ,sBAAsB;EACtB,aAAa;EACb,gBAAgB;EAChB,wBAAwB;EACxB,qBAAqB;EACrB,cAAc;EACd,SAAS;EACT,YAAY;EACZ,sCAAsC;EACtC,aAAa;EACb,mBAAmB;EACnB,kBAAkB;EAClB,kCAAkC;EAClC,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,UAAU;EACV,cAAc;AAChB\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n:root {\\n  --jp-private-toolbar-height: calc(\\n    31px + var(--jp-border-width)\\n  ); /* leave 28px for content */\\n}\\n\\n.jp-MainAreaWidget > .jp-Toolbar {\\n  border-radius: 0;\\n}\\n\\n.jp-Toolbar {\\n  /* Increase density for toolbar */\\n  --design-unit: 3.5;\\n  --toolbar-item-gap: 0;\\n\\n  color: var(--jp-ui-font-color1);\\n  border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);\\n  box-shadow: var(--jp-toolbar-box-shadow);\\n  background: var(--jp-toolbar-background);\\n  min-height: var(--jp-toolbar-micro-height);\\n  padding: 0 2px;\\n  z-index: 8;\\n}\\n\\n/* Toolbar items */\\n\\n.jp-Toolbar > .jp-Toolbar-item {\\n  /* Center the items in toolbar */\\n  height: 100%;\\n  display: flex;\\n  align-items: center;\\n}\\n\\n.jp-Toolbar::part(positioning-region) {\\n  align-items: center;\\n}\\n\\n.jp-ToolbarLabelComponent {\\n  background: var(--jp-layout-color1);\\n  background-color: var(--jp-brand-color1);\\n  color: var(--jp-ui-inverse-font-color1);\\n  border: none;\\n  box-sizing: border-box;\\n  outline: none;\\n  appearance: none;\\n  -webkit-appearance: none;\\n  -moz-appearance: none;\\n  padding: 0 6px;\\n  margin: 0;\\n  height: 24px;\\n  border-radius: var(--jp-border-radius);\\n  display: flex;\\n  align-items: center;\\n  text-align: center;\\n  font-size: var(--jp-ui-font-size0);\\n  min-width: unset;\\n  min-height: unset;\\n  user-select: none;\\n}\\n\\nbutton.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label {\\n  font-size: var(--jp-ui-font-size1);\\n  line-height: 100%;\\n  padding-left: 2px;\\n  color: var(--jp-ui-font-color1);\\n  font-family: var(--jp-ui-font-family);\\n}\\n\\n.jp-Toolbar .jp-ToolbarButtonComponent {\\n  color: var(--jp-ui-font-color1);\\n}\\n\\n.jp-ToolbarButtonComponent::part(content) {\\n  display: flex;\\n  align-items: center;\\n}\\n\\n.jp-Toolbar > .jp-Toolbar-item.jp-Toolbar-spacer {\\n  flex-grow: 1;\\n  flex-shrink: 1;\\n}\\n\\n.jp-Toolbar-responsive-popup.jp-ThemedContainer {\\n  position: absolute;\\n  height: fit-content;\\n  border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);\\n  box-shadow: var(--jp-toolbar-box-shadow);\\n  background: var(--jp-toolbar-background);\\n  z-index: 1;\\n  right: 0;\\n  top: 0;\\n}\\n\\n#jp-main-dock-panel[data-mode='single-document']\\n  .jp-MainAreaWidget\\n  > .jp-Toolbar.jp-Toolbar-micro {\\n  padding: 0;\\n  min-height: 0;\\n}\\n\\n#jp-main-dock-panel[data-mode='single-document']\\n  .jp-MainAreaWidget\\n  > .jp-Toolbar {\\n  border: none;\\n  box-shadow: none;\\n}\\n\\n/* @deprecated dead code to be removed in JupyterLab 5\\n  Button in toolbar should use the ui-toolkit\\n  https://github.com/jupyterlab-contrib/jupyter-ui-toolkit.\\n*/\\nbutton.jp-ToolbarButtonComponent {\\n  background: var(--jp-layout-color1);\\n  border: none;\\n  box-sizing: border-box;\\n  outline: none;\\n  appearance: none;\\n  -webkit-appearance: none;\\n  -moz-appearance: none;\\n  padding: 0 6px;\\n  margin: 0;\\n  height: 24px;\\n  border-radius: var(--jp-border-radius);\\n  display: flex;\\n  align-items: center;\\n  text-align: center;\\n  font-size: var(--jp-ui-font-size0);\\n  min-width: unset;\\n  min-height: unset;\\n}\\n\\nbutton.jp-ToolbarButtonComponent:disabled {\\n  opacity: 0.4;\\n}\\n\\nbutton.jp-ToolbarButtonComponent > span {\\n  padding: 0;\\n  flex: 0 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-ThemedContainer {\n  /* Decrease default density for Jupyter toolkit components */\n  --density: -4;\n}\n\n/* Styles for tree view */\n.jp-TreeView {\n  min-width: auto;\n}\n\n.jp-TreeView.jp-mod-flat > .jp-TreeItem::part(content-region) {\n  margin-inline-start: calc(var(--design-unit) * 2px);\n}\n\n/* Styles for tree item */\n.jp-TreeItem::part(expand-collapse-button) {\n  color: var(--jp-inverse-layout-color3);\n}\n\n/* Tune hover for stealth buttons otherwise they won't stand out */\n.jp-TreeItem jp-button[appearance='stealth']:hover {\n  background: var(--tree-item-expand-collapse-hover);\n}\n\n.jp-TreeItem[selected] jp-button[appearance='stealth']:hover {\n  background: var(--tree-item-expand-collapse-selected-hover);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/toolkit.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,4DAA4D;EAC5D,aAAa;AACf;;AAEA,yBAAyB;AACzB;EACE,eAAe;AACjB;;AAEA;EACE,mDAAmD;AACrD;;AAEA,yBAAyB;AACzB;EACE,sCAAsC;AACxC;;AAEA,kEAAkE;AAClE;EACE,kDAAkD;AACpD;;AAEA;EACE,2DAA2D;AAC7D\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-ThemedContainer {\\n  /* Decrease default density for Jupyter toolkit components */\\n  --density: -4;\\n}\\n\\n/* Styles for tree view */\\n.jp-TreeView {\\n  min-width: auto;\\n}\\n\\n.jp-TreeView.jp-mod-flat > .jp-TreeItem::part(content-region) {\\n  margin-inline-start: calc(var(--design-unit) * 2px);\\n}\\n\\n/* Styles for tree item */\\n.jp-TreeItem::part(expand-collapse-button) {\\n  color: var(--jp-inverse-layout-color3);\\n}\\n\\n/* Tune hover for stealth buttons otherwise they won't stand out */\\n.jp-TreeItem jp-button[appearance='stealth']:hover {\\n  background: var(--tree-item-expand-collapse-hover);\\n}\\n\\n.jp-TreeItem[selected] jp-button[appearance='stealth']:hover {\\n  background: var(--tree-item-expand-collapse-selected-hover);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.jp-WindowedPanel-outer {\n  height: 100%;\n  position: relative;\n  overflow: auto;\n  overflow-anchor: none;\n}\n\n.jp-WindowedPanel-inner {\n  position: relative;\n}\n\n.jp-WindowedPanel-viewport {\n  position: absolute;\n  left: 0;\n  right: 0;\n  overflow: visible;\n}\n\n.jp-WindowedPanel-scrollbar {\n  display: none;\n  position: relative;\n  user-select: none;\n}\n\n.jp-WindowedPanel.jp-mod-virtual-scrollbar > .jp-WindowedPanel-scrollbar {\n  background-color: inherit;\n  border-left: 1px solid var(--jp-layout-color3);\n  display: block;\n  position: fixed;\n  overflow-y: auto;\n  overflow-x: hidden;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  min-width: 35px;\n  z-index: 1;\n}\n\n.jp-WindowedPanel-scrollbar-content {\n  background-color: transparent;\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n  position: relative;\n  z-index: 3;\n}\n\n.jp-WindowedPanel-scrollbar-content > .jp-WindowedPanel-scrollbar-item {\n  border-bottom: 1px solid var(--jp-layout-color3);\n  background-color: rgb(from var(--jp-layout-color1) r g b / 50%);\n  padding: 2px;\n  text-align: left;\n  margin: 0 2px;\n}\n\n.jp-WindowedPanel-scrollbar-content > .jp-WindowedPanel-scrollbar-item:hover {\n  cursor: pointer;\n  background-color: var(--jp-layout-color3);\n}\n\n.jp-WindowedPanel-scrollbar-viewportIndicator {\n  position: absolute;\n  background: var(--jp-layout-color2);\n  border: 1px solid var(--jp-layout-color4);\n  width: 100%;\n  z-index: 2;\n  border-radius: 2px;\n  box-sizing: border-box;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/ui-components/style/windowedlist.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,YAAY;EACZ,kBAAkB;EAClB,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,kBAAkB;EAClB,OAAO;EACP,QAAQ;EACR,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,kBAAkB;EAClB,iBAAiB;AACnB;;AAEA;EACE,yBAAyB;EACzB,8CAA8C;EAC9C,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,QAAQ;EACR,eAAe;EACf,UAAU;AACZ;;AAEA;EACE,6BAA6B;EAC7B,qBAAqB;EACrB,SAAS;EACT,UAAU;EACV,kBAAkB;EAClB,UAAU;AACZ;;AAEA;EACE,gDAAgD;EAChD,+DAA+D;EAC/D,YAAY;EACZ,gBAAgB;EAChB,aAAa;AACf;;AAEA;EACE,eAAe;EACf,yCAAyC;AAC3C;;AAEA;EACE,kBAAkB;EAClB,mCAAmC;EACnC,yCAAyC;EACzC,WAAW;EACX,UAAU;EACV,kBAAkB;EAClB,sBAAsB;AACxB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.jp-WindowedPanel-outer {\\n  height: 100%;\\n  position: relative;\\n  overflow: auto;\\n  overflow-anchor: none;\\n}\\n\\n.jp-WindowedPanel-inner {\\n  position: relative;\\n}\\n\\n.jp-WindowedPanel-viewport {\\n  position: absolute;\\n  left: 0;\\n  right: 0;\\n  overflow: visible;\\n}\\n\\n.jp-WindowedPanel-scrollbar {\\n  display: none;\\n  position: relative;\\n  user-select: none;\\n}\\n\\n.jp-WindowedPanel.jp-mod-virtual-scrollbar > .jp-WindowedPanel-scrollbar {\\n  background-color: inherit;\\n  border-left: 1px solid var(--jp-layout-color3);\\n  display: block;\\n  position: fixed;\\n  overflow-y: auto;\\n  overflow-x: hidden;\\n  top: 0;\\n  bottom: 0;\\n  right: 0;\\n  min-width: 35px;\\n  z-index: 1;\\n}\\n\\n.jp-WindowedPanel-scrollbar-content {\\n  background-color: transparent;\\n  list-style-type: none;\\n  margin: 0;\\n  padding: 0;\\n  position: relative;\\n  z-index: 3;\\n}\\n\\n.jp-WindowedPanel-scrollbar-content > .jp-WindowedPanel-scrollbar-item {\\n  border-bottom: 1px solid var(--jp-layout-color3);\\n  background-color: rgb(from var(--jp-layout-color1) r g b / 50%);\\n  padding: 2px;\\n  text-align: left;\\n  margin: 0 2px;\\n}\\n\\n.jp-WindowedPanel-scrollbar-content > .jp-WindowedPanel-scrollbar-item:hover {\\n  cursor: pointer;\\n  background-color: var(--jp-layout-color3);\\n}\\n\\n.jp-WindowedPanel-scrollbar-viewportIndicator {\\n  position: absolute;\\n  background: var(--jp-layout-color2);\\n  border: 1px solid var(--jp-layout-color4);\\n  width: 100%;\\n  z-index: 2;\\n  border-radius: 2px;\\n  box-sizing: border-box;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n.jp-RenderedVegaCommon5 {\n  margin-left: 8px;\n  margin-top: 8px;\n}\n\n.jp-MimeDocument .jp-RenderedVegaCommon5 {\n  padding: 16px;\n}\n\n.vega canvas {\n  background: var(--jp-vega-background);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@jupyterlab/vega5-extension/style/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;8EAG8E;;AAE9E;EACE,gBAAgB;EAChB,eAAe;AACjB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,qCAAqC;AACvC\",\"sourcesContent\":[\"/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Distributed under the terms of the Modified BSD License.\\n|----------------------------------------------------------------------------*/\\n\\n.jp-RenderedVegaCommon5 {\\n  margin-left: 8px;\\n  margin-top: 8px;\\n}\\n\\n.jp-MimeDocument .jp-RenderedVegaCommon5 {\\n  padding: 16px;\\n}\\n\\n.vega canvas {\\n  background: var(--jp-vega-background);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-cursor-backdrop {\n  top: 0px;\n  left: 0px;\n  position: fixed;\n  width: 200px;\n  height: 200px;\n  margin-top: -100px;\n  margin-left: -100px;\n  will-change: transform;\n  z-index: 100;\n  scrollbar-width: none;\n  -ms-overflow-style: none;\n  overflow: scroll;\n}\n\n.lm-cursor-backdrop::after {\n  content: '';\n  height: 1200px;\n  width: 1200px;\n  display: block;\n}\n\n.lm-cursor-backdrop::-webkit-scrollbar {\n  display: none;\n}\n\n.lm-mod-drag-image {\n  top: 0px;\n  left: 0px;\n  will-change: transform;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@lumino/dragdrop/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,QAAQ;EACR,SAAS;EACT,eAAe;EACf,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,mBAAmB;EACnB,sBAAsB;EACtB,YAAY;EACZ,qBAAqB;EACrB,wBAAwB;EACxB,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,cAAc;EACd,aAAa;EACb,cAAc;AAChB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,QAAQ;EACR,SAAS;EACT,sBAAsB;AACxB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-cursor-backdrop {\\n  top: 0px;\\n  left: 0px;\\n  position: fixed;\\n  width: 200px;\\n  height: 200px;\\n  margin-top: -100px;\\n  margin-left: -100px;\\n  will-change: transform;\\n  z-index: 100;\\n  scrollbar-width: none;\\n  -ms-overflow-style: none;\\n  overflow: scroll;\\n}\\n\\n.lm-cursor-backdrop::after {\\n  content: '';\\n  height: 1200px;\\n  width: 1200px;\\n  display: block;\\n}\\n\\n.lm-cursor-backdrop::-webkit-scrollbar {\\n  display: none;\\n}\\n\\n.lm-mod-drag-image {\\n  top: 0px;\\n  left: 0px;\\n  will-change: transform;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {\n  /* Title is rotated for horizontal accordion panel using CSS */\n  display: block;\n  transform-origin: top left;\n  transform: rotate(-90deg) translate(-100%);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@lumino/widgets/style/accordionpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,8DAA8D;EAC9D,cAAc;EACd,0BAA0B;EAC1B,0CAA0C;AAC5C\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {\\n  /* Title is rotated for horizontal accordion panel using CSS */\\n  display: block;\\n  transform-origin: top left;\\n  transform: rotate(-90deg) translate(-100%);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n  display: flex;\n  flex-direction: column;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.lm-CommandPalette-search {\n  flex: 0 0 auto;\n}\n\n.lm-CommandPalette-content {\n  flex: 1 1 auto;\n  margin: 0;\n  padding: 0;\n  min-height: 0;\n  overflow: auto;\n  list-style-type: none;\n}\n\n.lm-CommandPalette-header {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.lm-CommandPalette-item {\n  display: flex;\n  flex-direction: row;\n}\n\n.lm-CommandPalette-itemIcon {\n  flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemContent {\n  flex: 1 1 auto;\n  overflow: hidden;\n}\n\n.lm-CommandPalette-itemShortcut {\n  flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemLabel {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.lm-close-icon {\n  border: 1px solid transparent;\n  background-color: transparent;\n  position: absolute;\n  z-index: 1;\n  right: 3%;\n  top: 0;\n  bottom: 0;\n  margin: auto;\n  padding: 7px 0;\n  display: none;\n  vertical-align: middle;\n  outline: 0;\n  cursor: pointer;\n}\n.lm-close-icon:after {\n  content: 'X';\n  display: block;\n  width: 15px;\n  height: 15px;\n  text-align: center;\n  color: #000;\n  font-weight: normal;\n  font-size: 12px;\n  cursor: pointer;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@lumino/widgets/style/commandpalette.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,sBAAsB;EACtB,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,6BAA6B;EAC7B,6BAA6B;EAC7B,kBAAkB;EAClB,UAAU;EACV,SAAS;EACT,MAAM;EACN,SAAS;EACT,YAAY;EACZ,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,UAAU;EACV,eAAe;AACjB;AACA;EACE,YAAY;EACZ,cAAc;EACd,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,WAAW;EACX,mBAAmB;EACnB,eAAe;EACf,eAAe;AACjB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-CommandPalette {\\n  display: flex;\\n  flex-direction: column;\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n}\\n\\n.lm-CommandPalette-search {\\n  flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-content {\\n  flex: 1 1 auto;\\n  margin: 0;\\n  padding: 0;\\n  min-height: 0;\\n  overflow: auto;\\n  list-style-type: none;\\n}\\n\\n.lm-CommandPalette-header {\\n  overflow: hidden;\\n  white-space: nowrap;\\n  text-overflow: ellipsis;\\n}\\n\\n.lm-CommandPalette-item {\\n  display: flex;\\n  flex-direction: row;\\n}\\n\\n.lm-CommandPalette-itemIcon {\\n  flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-itemContent {\\n  flex: 1 1 auto;\\n  overflow: hidden;\\n}\\n\\n.lm-CommandPalette-itemShortcut {\\n  flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-itemLabel {\\n  overflow: hidden;\\n  white-space: nowrap;\\n  text-overflow: ellipsis;\\n}\\n\\n.lm-close-icon {\\n  border: 1px solid transparent;\\n  background-color: transparent;\\n  position: absolute;\\n  z-index: 1;\\n  right: 3%;\\n  top: 0;\\n  bottom: 0;\\n  margin: auto;\\n  padding: 7px 0;\\n  display: none;\\n  vertical-align: middle;\\n  outline: 0;\\n  cursor: pointer;\\n}\\n.lm-close-icon:after {\\n  content: 'X';\\n  display: block;\\n  width: 15px;\\n  height: 15px;\\n  text-align: center;\\n  color: #000;\\n  font-weight: normal;\\n  font-size: 12px;\\n  cursor: pointer;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel {\n  z-index: 0;\n}\n\n.lm-DockPanel-widget {\n  z-index: 0;\n}\n\n.lm-DockPanel-tabBar {\n  z-index: 1;\n}\n\n.lm-DockPanel-handle {\n  z-index: 2;\n}\n\n.lm-DockPanel-handle.lm-mod-hidden {\n  display: none !important;\n}\n\n.lm-DockPanel-handle:after {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  content: '';\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal'] {\n  cursor: ew-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='vertical'] {\n  cursor: ns-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal']:after {\n  left: 50%;\n  min-width: 8px;\n  transform: translateX(-50%);\n}\n\n.lm-DockPanel-handle[data-orientation='vertical']:after {\n  top: 50%;\n  min-height: 8px;\n  transform: translateY(-50%);\n}\n\n.lm-DockPanel-overlay {\n  z-index: 3;\n  box-sizing: border-box;\n  pointer-events: none;\n}\n\n.lm-DockPanel-overlay.lm-mod-hidden {\n  display: none !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@lumino/widgets/style/dockpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B;;AAEA;EACE,UAAU;EACV,sBAAsB;EACtB,oBAAoB;AACtB;;AAEA;EACE,wBAAwB;AAC1B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DockPanel {\\n  z-index: 0;\\n}\\n\\n.lm-DockPanel-widget {\\n  z-index: 0;\\n}\\n\\n.lm-DockPanel-tabBar {\\n  z-index: 1;\\n}\\n\\n.lm-DockPanel-handle {\\n  z-index: 2;\\n}\\n\\n.lm-DockPanel-handle.lm-mod-hidden {\\n  display: none !important;\\n}\\n\\n.lm-DockPanel-handle:after {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  width: 100%;\\n  height: 100%;\\n  content: '';\\n}\\n\\n.lm-DockPanel-handle[data-orientation='horizontal'] {\\n  cursor: ew-resize;\\n}\\n\\n.lm-DockPanel-handle[data-orientation='vertical'] {\\n  cursor: ns-resize;\\n}\\n\\n.lm-DockPanel-handle[data-orientation='horizontal']:after {\\n  left: 50%;\\n  min-width: 8px;\\n  transform: translateX(-50%);\\n}\\n\\n.lm-DockPanel-handle[data-orientation='vertical']:after {\\n  top: 50%;\\n  min-height: 8px;\\n  transform: translateY(-50%);\\n}\\n\\n.lm-DockPanel-overlay {\\n  z-index: 3;\\n  box-sizing: border-box;\\n  pointer-events: none;\\n}\\n\\n.lm-DockPanel-overlay.lm-mod-hidden {\\n  display: none !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../../@jupyterlab/builder/node_modules/css-loader/dist/cjs.js!./widget.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../../@jupyterlab/builder/node_modules/css-loader/dist/cjs.js!./accordionpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../../@jupyterlab/builder/node_modules/css-loader/dist/cjs.js!./commandpalette.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../../@jupyterlab/builder/node_modules/css-loader/dist/cjs.js!./dockpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../../../@jupyterlab/builder/node_modules/css-loader/dist/cjs.js!./menu.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../../../@jupyterlab/builder/node_modules/css-loader/dist/cjs.js!./menubar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_6___ from \"-!../../../@jupyterlab/builder/node_modules/css-loader/dist/cjs.js!./scrollbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_7___ from \"-!../../../@jupyterlab/builder/node_modules/css-loader/dist/cjs.js!./splitpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_8___ from \"-!../../../@jupyterlab/builder/node_modules/css-loader/dist/cjs.js!./tabbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_9___ from \"-!../../../@jupyterlab/builder/node_modules/css-loader/dist/cjs.js!./tabpanel.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_6___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_7___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_8___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_9___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@lumino/widgets/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n@import './widget.css';\\n@import './accordionpanel.css';\\n@import './commandpalette.css';\\n@import './dockpanel.css';\\n@import './menu.css';\\n@import './menubar.css';\\n@import './scrollbar.css';\\n@import './splitpanel.css';\\n@import './tabbar.css';\\n@import './tabpanel.css';\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n  z-index: 10000;\n  position: absolute;\n  white-space: nowrap;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.lm-Menu-content {\n  margin: 0;\n  padding: 0;\n  display: table;\n  list-style-type: none;\n}\n\n.lm-Menu-item {\n  display: table-row;\n}\n\n.lm-Menu-item.lm-mod-hidden,\n.lm-Menu-item.lm-mod-collapsed {\n  display: none !important;\n}\n\n.lm-Menu-itemIcon,\n.lm-Menu-itemSubmenuIcon {\n  display: table-cell;\n  text-align: center;\n}\n\n.lm-Menu-itemLabel {\n  display: table-cell;\n  text-align: left;\n}\n\n.lm-Menu-itemShortcut {\n  display: table-cell;\n  text-align: right;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@lumino/widgets/style/menu.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,kBAAkB;EAClB,gBAAgB;EAChB,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;;EAEE,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;EACnB,iBAAiB;AACnB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-Menu {\\n  z-index: 10000;\\n  position: absolute;\\n  white-space: nowrap;\\n  overflow-x: hidden;\\n  overflow-y: auto;\\n  outline: none;\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n}\\n\\n.lm-Menu-content {\\n  margin: 0;\\n  padding: 0;\\n  display: table;\\n  list-style-type: none;\\n}\\n\\n.lm-Menu-item {\\n  display: table-row;\\n}\\n\\n.lm-Menu-item.lm-mod-hidden,\\n.lm-Menu-item.lm-mod-collapsed {\\n  display: none !important;\\n}\\n\\n.lm-Menu-itemIcon,\\n.lm-Menu-itemSubmenuIcon {\\n  display: table-cell;\\n  text-align: center;\\n}\\n\\n.lm-Menu-itemLabel {\\n  display: table-cell;\\n  text-align: left;\\n}\\n\\n.lm-Menu-itemShortcut {\\n  display: table-cell;\\n  text-align: right;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n  outline: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.lm-MenuBar-content {\n  margin: 0;\n  padding: 0;\n  display: flex;\n  flex-direction: row;\n  list-style-type: none;\n}\n\n.lm-MenuBar-item {\n  box-sizing: border-box;\n}\n\n.lm-MenuBar-itemIcon,\n.lm-MenuBar-itemLabel {\n  display: inline-block;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@lumino/widgets/style/menubar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;;EAEE,qBAAqB;AACvB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-MenuBar {\\n  outline: none;\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n}\\n\\n.lm-MenuBar-content {\\n  margin: 0;\\n  padding: 0;\\n  display: flex;\\n  flex-direction: row;\\n  list-style-type: none;\\n}\\n\\n.lm-MenuBar-item {\\n  box-sizing: border-box;\\n}\\n\\n.lm-MenuBar-itemIcon,\\n.lm-MenuBar-itemLabel {\\n  display: inline-block;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar {\n  display: flex;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n  flex-direction: row;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n  flex-direction: column;\n}\n\n.lm-ScrollBar-button {\n  box-sizing: border-box;\n  flex: 0 0 auto;\n}\n\n.lm-ScrollBar-track {\n  box-sizing: border-box;\n  position: relative;\n  overflow: hidden;\n  flex: 1 1 auto;\n}\n\n.lm-ScrollBar-thumb {\n  box-sizing: border-box;\n  position: absolute;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@lumino/widgets/style/scrollbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;EACtB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;EAClB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;AACpB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-ScrollBar {\\n  display: flex;\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal'] {\\n  flex-direction: row;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical'] {\\n  flex-direction: column;\\n}\\n\\n.lm-ScrollBar-button {\\n  box-sizing: border-box;\\n  flex: 0 0 auto;\\n}\\n\\n.lm-ScrollBar-track {\\n  box-sizing: border-box;\\n  position: relative;\\n  overflow: hidden;\\n  flex: 1 1 auto;\\n}\\n\\n.lm-ScrollBar-thumb {\\n  box-sizing: border-box;\\n  position: absolute;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-SplitPanel-child {\n  z-index: 0;\n}\n\n.lm-SplitPanel-handle {\n  z-index: 1;\n}\n\n.lm-SplitPanel-handle.lm-mod-hidden {\n  display: none !important;\n}\n\n.lm-SplitPanel-handle:after {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  content: '';\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {\n  cursor: ew-resize;\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {\n  cursor: ns-resize;\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {\n  left: 50%;\n  min-width: 8px;\n  transform: translateX(-50%);\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {\n  top: 50%;\n  min-height: 8px;\n  transform: translateY(-50%);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@lumino/widgets/style/splitpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-SplitPanel-child {\\n  z-index: 0;\\n}\\n\\n.lm-SplitPanel-handle {\\n  z-index: 1;\\n}\\n\\n.lm-SplitPanel-handle.lm-mod-hidden {\\n  display: none !important;\\n}\\n\\n.lm-SplitPanel-handle:after {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  width: 100%;\\n  height: 100%;\\n  content: '';\\n}\\n\\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {\\n  cursor: ew-resize;\\n}\\n\\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {\\n  cursor: ns-resize;\\n}\\n\\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {\\n  left: 50%;\\n  min-width: 8px;\\n  transform: translateX(-50%);\\n}\\n\\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {\\n  top: 50%;\\n  min-height: 8px;\\n  transform: translateY(-50%);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n  display: flex;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] {\n  flex-direction: row;\n  align-items: flex-end;\n}\n\n.lm-TabBar[data-orientation='vertical'] {\n  flex-direction: column;\n  align-items: flex-end;\n}\n\n.lm-TabBar-content {\n  margin: 0;\n  padding: 0;\n  display: flex;\n  flex: 1 1 auto;\n  list-style-type: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {\n  flex-direction: row;\n}\n\n.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {\n  flex-direction: column;\n}\n\n.lm-TabBar-tab {\n  display: flex;\n  flex-direction: row;\n  box-sizing: border-box;\n  overflow: hidden;\n  touch-action: none; /* Disable native Drag/Drop */\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabCloseIcon {\n  flex: 0 0 auto;\n}\n\n.lm-TabBar-tabLabel {\n  flex: 1 1 auto;\n  overflow: hidden;\n  white-space: nowrap;\n}\n\n.lm-TabBar-tabInput {\n  user-select: all;\n  width: 100%;\n  box-sizing: border-box;\n}\n\n.lm-TabBar-tab.lm-mod-hidden {\n  display: none !important;\n}\n\n.lm-TabBar-addButton.lm-mod-hidden {\n  display: none !important;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {\n  position: relative;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {\n  left: 0;\n  transition: left 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {\n  top: 0;\n  transition: top 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {\n  transition: none;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n  user-select: all;\n  width: 100%;\n  box-sizing: border-box;\n  background: inherit;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@lumino/widgets/style/tabbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;EACtB,qBAAqB;AACvB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,sBAAsB;EACtB,gBAAgB;EAChB,kBAAkB,EAAE,6BAA6B;AACnD;;AAEA;;EAEE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;AACxB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,OAAO;EACP,2BAA2B;AAC7B;;AAEA;EACE,MAAM;EACN,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;EACtB,mBAAmB;AACrB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-TabBar {\\n  display: flex;\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n}\\n\\n.lm-TabBar[data-orientation='horizontal'] {\\n  flex-direction: row;\\n  align-items: flex-end;\\n}\\n\\n.lm-TabBar[data-orientation='vertical'] {\\n  flex-direction: column;\\n  align-items: flex-end;\\n}\\n\\n.lm-TabBar-content {\\n  margin: 0;\\n  padding: 0;\\n  display: flex;\\n  flex: 1 1 auto;\\n  list-style-type: none;\\n}\\n\\n.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {\\n  flex-direction: row;\\n}\\n\\n.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {\\n  flex-direction: column;\\n}\\n\\n.lm-TabBar-tab {\\n  display: flex;\\n  flex-direction: row;\\n  box-sizing: border-box;\\n  overflow: hidden;\\n  touch-action: none; /* Disable native Drag/Drop */\\n}\\n\\n.lm-TabBar-tabIcon,\\n.lm-TabBar-tabCloseIcon {\\n  flex: 0 0 auto;\\n}\\n\\n.lm-TabBar-tabLabel {\\n  flex: 1 1 auto;\\n  overflow: hidden;\\n  white-space: nowrap;\\n}\\n\\n.lm-TabBar-tabInput {\\n  user-select: all;\\n  width: 100%;\\n  box-sizing: border-box;\\n}\\n\\n.lm-TabBar-tab.lm-mod-hidden {\\n  display: none !important;\\n}\\n\\n.lm-TabBar-addButton.lm-mod-hidden {\\n  display: none !important;\\n}\\n\\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {\\n  position: relative;\\n}\\n\\n.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {\\n  left: 0;\\n  transition: left 150ms ease;\\n}\\n\\n.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {\\n  top: 0;\\n  transition: top 150ms ease;\\n}\\n\\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {\\n  transition: none;\\n}\\n\\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\\n  user-select: all;\\n  width: 100%;\\n  box-sizing: border-box;\\n  background: inherit;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabPanel-tabBar {\n  z-index: 1;\n}\n\n.lm-TabPanel-stackedPanel {\n  z-index: 0;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@lumino/widgets/style/tabpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-TabPanel-tabBar {\\n  z-index: 1;\\n}\\n\\n.lm-TabPanel-stackedPanel {\\n  z-index: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../@jupyterlab/builder/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Widget {\n  box-sizing: border-box;\n  position: relative;\n}\n\n.lm-Widget.lm-mod-hidden {\n  display: none !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../node_modules/@lumino/widgets/style/widget.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,sBAAsB;EACtB,kBAAkB;AACpB;;AAEA;EACE,wBAAwB;AAC1B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-Widget {\\n  box-sizing: border-box;\\n  position: relative;\\n}\\n\\n.lm-Widget.lm-mod-hidden {\\n  display: none !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n  var list = [];\n\n  // return the list of modules as css string\n  list.toString = function toString() {\n    return this.map(function (item) {\n      var content = \"\";\n      var needLayer = typeof item[5] !== \"undefined\";\n      if (item[4]) {\n        content += \"@supports (\".concat(item[4], \") {\");\n      }\n      if (item[2]) {\n        content += \"@media \".concat(item[2], \" {\");\n      }\n      if (needLayer) {\n        content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n      }\n      content += cssWithMappingToString(item);\n      if (needLayer) {\n        content += \"}\";\n      }\n      if (item[2]) {\n        content += \"}\";\n      }\n      if (item[4]) {\n        content += \"}\";\n      }\n      return content;\n    }).join(\"\");\n  };\n\n  // import a list of modules into the list\n  list.i = function i(modules, media, dedupe, supports, layer) {\n    if (typeof modules === \"string\") {\n      modules = [[null, modules, undefined]];\n    }\n    var alreadyImportedModules = {};\n    if (dedupe) {\n      for (var k = 0; k < this.length; k++) {\n        var id = this[k][0];\n        if (id != null) {\n          alreadyImportedModules[id] = true;\n        }\n      }\n    }\n    for (var _k = 0; _k < modules.length; _k++) {\n      var item = [].concat(modules[_k]);\n      if (dedupe && alreadyImportedModules[item[0]]) {\n        continue;\n      }\n      if (typeof layer !== \"undefined\") {\n        if (typeof item[5] === \"undefined\") {\n          item[5] = layer;\n        } else {\n          item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n          item[5] = layer;\n        }\n      }\n      if (media) {\n        if (!item[2]) {\n          item[2] = media;\n        } else {\n          item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n          item[2] = media;\n        }\n      }\n      if (supports) {\n        if (!item[4]) {\n          item[4] = \"\".concat(supports);\n        } else {\n          item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n          item[4] = supports;\n        }\n      }\n      list.push(item);\n    }\n  };\n  return list;\n};","\"use strict\";\n\nmodule.exports = function (url, options) {\n  if (!options) {\n    options = {};\n  }\n  if (!url) {\n    return url;\n  }\n  url = String(url.__esModule ? url.default : url);\n\n  // If url is already wrapped in quotes, remove them\n  if (/^['\"].*['\"]$/.test(url)) {\n    url = url.slice(1, -1);\n  }\n  if (options.hash) {\n    url += options.hash;\n  }\n\n  // Should url be wrapped?\n  // See https://drafts.csswg.org/css-values-3/#urls\n  if (/[\"'() \\t\\n]|(%20)/.test(url) || options.needQuotes) {\n    return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\"), \"\\\"\");\n  }\n  return url;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n  var content = item[1];\n  var cssMapping = item[3];\n  if (!cssMapping) {\n    return content;\n  }\n  if (typeof btoa === \"function\") {\n    var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n    var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n    var sourceMapping = \"/*# \".concat(data, \" */\");\n    return [content].concat([sourceMapping]).join(\"\\n\");\n  }\n  return [content].join(\"\\n\");\n};","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n  var result = -1;\n  for (var i = 0; i < stylesInDOM.length; i++) {\n    if (stylesInDOM[i].identifier === identifier) {\n      result = i;\n      break;\n    }\n  }\n  return result;\n}\nfunction modulesToDom(list, options) {\n  var idCountMap = {};\n  var identifiers = [];\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i];\n    var id = options.base ? item[0] + options.base : item[0];\n    var count = idCountMap[id] || 0;\n    var identifier = \"\".concat(id, \" \").concat(count);\n    idCountMap[id] = count + 1;\n    var indexByIdentifier = getIndexByIdentifier(identifier);\n    var obj = {\n      css: item[1],\n      media: item[2],\n      sourceMap: item[3],\n      supports: item[4],\n      layer: item[5]\n    };\n    if (indexByIdentifier !== -1) {\n      stylesInDOM[indexByIdentifier].references++;\n      stylesInDOM[indexByIdentifier].updater(obj);\n    } else {\n      var updater = addElementStyle(obj, options);\n      options.byIndex = i;\n      stylesInDOM.splice(i, 0, {\n        identifier: identifier,\n        updater: updater,\n        references: 1\n      });\n    }\n    identifiers.push(identifier);\n  }\n  return identifiers;\n}\nfunction addElementStyle(obj, options) {\n  var api = options.domAPI(options);\n  api.update(obj);\n  var updater = function updater(newObj) {\n    if (newObj) {\n      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n        return;\n      }\n      api.update(obj = newObj);\n    } else {\n      api.remove();\n    }\n  };\n  return updater;\n}\nmodule.exports = function (list, options) {\n  options = options || {};\n  list = list || [];\n  var lastIdentifiers = modulesToDom(list, options);\n  return function update(newList) {\n    newList = newList || [];\n    for (var i = 0; i < lastIdentifiers.length; i++) {\n      var identifier = lastIdentifiers[i];\n      var index = getIndexByIdentifier(identifier);\n      stylesInDOM[index].references--;\n    }\n    var newLastIdentifiers = modulesToDom(newList, options);\n    for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n      var _identifier = lastIdentifiers[_i];\n      var _index = getIndexByIdentifier(_identifier);\n      if (stylesInDOM[_index].references === 0) {\n        stylesInDOM[_index].updater();\n        stylesInDOM.splice(_index, 1);\n      }\n    }\n    lastIdentifiers = newLastIdentifiers;\n  };\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next  */\nfunction getTarget(target) {\n  if (typeof memo[target] === \"undefined\") {\n    var styleTarget = document.querySelector(target);\n\n    // Special case to return head of iframe instead of iframe itself\n    if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n      try {\n        // This will throw an exception if access to iframe is blocked\n        // due to cross-origin restrictions\n        styleTarget = styleTarget.contentDocument.head;\n      } catch (e) {\n        // istanbul ignore next\n        styleTarget = null;\n      }\n    }\n    memo[target] = styleTarget;\n  }\n  return memo[target];\n}\n\n/* istanbul ignore next  */\nfunction insertBySelector(insert, style) {\n  var target = getTarget(insert);\n  if (!target) {\n    throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n  }\n  target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next  */\nfunction insertStyleElement(options) {\n  var element = document.createElement(\"style\");\n  options.setAttributes(element, options.attributes);\n  options.insert(element, options.options);\n  return element;\n}\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next  */\nfunction setAttributesWithoutAttributes(styleElement) {\n  var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n  if (nonce) {\n    styleElement.setAttribute(\"nonce\", nonce);\n  }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next  */\nfunction apply(styleElement, options, obj) {\n  var css = \"\";\n  if (obj.supports) {\n    css += \"@supports (\".concat(obj.supports, \") {\");\n  }\n  if (obj.media) {\n    css += \"@media \".concat(obj.media, \" {\");\n  }\n  var needLayer = typeof obj.layer !== \"undefined\";\n  if (needLayer) {\n    css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n  }\n  css += obj.css;\n  if (needLayer) {\n    css += \"}\";\n  }\n  if (obj.media) {\n    css += \"}\";\n  }\n  if (obj.supports) {\n    css += \"}\";\n  }\n  var sourceMap = obj.sourceMap;\n  if (sourceMap && typeof btoa !== \"undefined\") {\n    css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n  }\n\n  // For old IE\n  /* istanbul ignore if  */\n  options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n  // istanbul ignore if\n  if (styleElement.parentNode === null) {\n    return false;\n  }\n  styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next  */\nfunction domAPI(options) {\n  if (typeof document === \"undefined\") {\n    return {\n      update: function update() {},\n      remove: function remove() {}\n    };\n  }\n  var styleElement = options.insertStyleElement(options);\n  return {\n    update: function update(obj) {\n      apply(styleElement, options, obj);\n    },\n    remove: function remove() {\n      removeStyleElement(styleElement);\n    }\n  };\n}\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next  */\nfunction styleTagTransform(css, styleElement) {\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css;\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild);\n    }\n    styleElement.appendChild(document.createTextNode(css));\n  }\n}\nmodule.exports = styleTagTransform;","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module cell-toolbar-extension\n */\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { CellBarExtension } from '@jupyterlab/cell-toolbar';\nimport { createToolbarFactory, IToolbarWidgetRegistry } from '@jupyterlab/apputils';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nconst PLUGIN_ID = '@jupyterlab/cell-toolbar-extension:plugin';\nconst cellToolbar = {\n    id: PLUGIN_ID,\n    description: 'Add the cells toolbar.',\n    autoStart: true,\n    activate: async (app, settingRegistry, toolbarRegistry, translator) => {\n        /**\n         * Load the settings for this extension\n         *\n         * @param setting Extension settings\n         */\n        function loadSetting(setting) {\n            // Read the setting and convert to the correct type\n            const showCellToolbar = setting === null\n                ? true\n                : setting.get('showToolbar').composite;\n            extension.enabled = showCellToolbar;\n        }\n        const toolbarItems = settingRegistry && toolbarRegistry\n            ? createToolbarFactory(toolbarRegistry, settingRegistry, CellBarExtension.FACTORY_NAME, cellToolbar.id, translator !== null && translator !== void 0 ? translator : nullTranslator)\n            : undefined;\n        const extension = new CellBarExtension(app.commands, toolbarItems);\n        // Wait for the application to be restored and\n        // for the settings for this plugin to be loaded\n        if (settingRegistry !== null) {\n            void Promise.all([app.restored, settingRegistry.load(PLUGIN_ID)]).then(([, setting]) => {\n                // Read the settings\n                loadSetting(setting);\n                // Listen for your plugin setting changes using Signal\n                setting.changed.connect(loadSetting);\n            });\n        }\n        app.docRegistry.addWidgetExtension('Notebook', extension);\n    },\n    optional: [ISettingRegistry, IToolbarWidgetRegistry, ITranslator]\n};\nexport default cellToolbar;\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/cells/style/index.js';\nimport '@jupyterlab/notebook/style/index.js';\n\nimport './base.css';\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/cell-toolbar/style/index.js';\n","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { createDefaultFactory, setToolbar } from '@jupyterlab/apputils';\nimport { ObservableList } from '@jupyterlab/observables';\nimport { ReactWidget, Toolbar } from '@jupyterlab/ui-components';\nimport { some } from '@lumino/algorithm';\nimport { Signal } from '@lumino/signaling';\nimport { nullTranslator } from '@jupyterlab/translation';\n/*\n * Text mime types\n */\nconst TEXT_MIME_TYPES = [\n    'text/plain',\n    'application/vnd.jupyter.stdout',\n    'application/vnd.jupyter.stderr'\n];\n/**\n * Widget cell toolbar classes\n */\nconst CELL_TOOLBAR_CLASS = 'jp-cell-toolbar';\n// @deprecated to be removed\nconst CELL_MENU_CLASS = 'jp-cell-menu';\n/**\n * Class for a cell whose contents overlap with the cell toolbar\n */\nconst TOOLBAR_OVERLAP_CLASS = 'jp-toolbar-overlap';\n/**\n * Watch a notebook so that a cell toolbar appears on the active cell\n */\nexport class CellToolbarTracker {\n    /**\n     * CellToolbarTracker constructor\n     *\n     * @param panel The notebook panel\n     * @param toolbar The toolbar; deprecated use {@link toolbarFactory} instead\n     * @param toolbarFactory The toolbar factory\n     */\n    constructor(panel, toolbar, toolbarFactory, translator) {\n        this._isDisposed = false;\n        this._toolbar = null;\n        this._toolbarItems = null;\n        this._toolbarFactory = null;\n        this._panel = panel;\n        this._previousActiveCell = this._panel.content.activeCell;\n        this._toolbarItems = toolbar !== null && toolbar !== void 0 ? toolbar : null;\n        this._toolbarFactory = toolbarFactory !== null && toolbarFactory !== void 0 ? toolbarFactory : null;\n        this._enabled = true; // If this has been set to false, it will be modified after settings are available\n        this._trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        if (this._toolbarItems === null && this._toolbarFactory === null) {\n            throw Error('You must provide the toolbarFactory or the toolbar items.');\n        }\n        // deprecated to be removed when we remove toolbar from input arguments\n        if (!this._toolbarFactory && this._toolbarItems) {\n            this._onToolbarChanged();\n            this._toolbarItems.changed.connect(this._onToolbarChanged, this);\n        }\n        // Only add the toolbar to the notebook's active cell (if any) once it has fully rendered and been revealed.\n        void panel.revealed.then(() => {\n            requestAnimationFrame(() => {\n                const notebook = panel.content;\n                this._onActiveCellChanged(notebook);\n                // Handle subsequent changes of active cell.\n                notebook.activeCellChanged.connect(this._onActiveCellChanged, this);\n                // Check whether the toolbar should be rendered upon a layout change\n                notebook.renderingLayoutChanged.connect(this._onActiveCellChanged, this);\n                notebook.disposed.connect(() => {\n                    notebook.activeCellChanged.disconnect(this._onActiveCellChanged);\n                });\n            });\n        });\n    }\n    /**\n     * @deprecated Will become protected in JupyterLab 5\n     */\n    _onMetadataChanged(model, args) {\n        if (args.key === 'jupyter') {\n            if (typeof args.newValue === 'object' &&\n                args.newValue.source_hidden === true &&\n                (args.type === 'add' || args.type === 'change')) {\n                // Cell just became hidden; remove toolbar\n                this._removeToolbar(model);\n            }\n            // Check whether input visibility changed\n            else if (typeof args.oldValue === 'object' &&\n                args.oldValue.source_hidden === true) {\n                // Cell just became visible; add toolbar\n                this._addToolbar(model);\n            }\n        }\n    }\n    /**\n     * @deprecated Will become protected in JupyterLab 5\n     */\n    _onActiveCellChanged(notebook) {\n        if (this._previousActiveCell && !this._previousActiveCell.isDisposed) {\n            // Disposed cells do not have a model anymore.\n            this._removeToolbar(this._previousActiveCell.model);\n            this._previousActiveCell.model.metadataChanged.disconnect(this._onMetadataChanged);\n        }\n        const activeCell = notebook.activeCell;\n        // Change previously active cell.\n        this._previousActiveCell = activeCell;\n        if (activeCell === null || activeCell.inputHidden) {\n            return;\n        }\n        activeCell.model.metadataChanged.connect(this._onMetadataChanged, this);\n        this._addToolbar(activeCell.model);\n    }\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Whether the cell toolbar is shown, if there is enough room\n     */\n    get enabled() {\n        return this._enabled;\n    }\n    /**\n     * Sets whether the cell toolbar is shown, if there is enough room\n     */\n    set enabled(value) {\n        this._enabled = value;\n        this._onToolbarChanged();\n    }\n    dispose() {\n        var _a, _b;\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        (_a = this._toolbarItems) === null || _a === void 0 ? void 0 : _a.changed.disconnect(this._onToolbarChanged, this);\n        (_b = this._toolbar) === null || _b === void 0 ? void 0 : _b.dispose();\n        this._panel = null;\n        Signal.clearData(this);\n    }\n    _addToolbar(model) {\n        // Do nothing if the toolbar shouldn't be visible.\n        if (!this.enabled) {\n            return;\n        }\n        const cell = this._getCell(model);\n        if (cell && !cell.isDisposed) {\n            const toolbarWidget = (this._toolbar = new Toolbar());\n            // Note: CELL_MENU_CLASS is deprecated.\n            toolbarWidget.addClass(CELL_MENU_CLASS);\n            toolbarWidget.addClass(CELL_TOOLBAR_CLASS);\n            toolbarWidget.node.setAttribute('aria-label', this._trans.__('Cell toolbar'));\n            const promises = [cell.ready];\n            if (this._toolbarFactory) {\n                setToolbar(cell, this._toolbarFactory, toolbarWidget);\n                // FIXME toolbarWidget.update() - strangely this does not work\n                toolbarWidget.layout.widgets.forEach(w => {\n                    w.update();\n                });\n            }\n            else {\n                for (const { name, widget } of this._toolbarItems) {\n                    toolbarWidget.addItem(name, widget);\n                    if (widget instanceof ReactWidget &&\n                        widget.renderPromise !== undefined) {\n                        widget.update();\n                        promises.push(widget.renderPromise);\n                    }\n                }\n            }\n            promises.push(cell.ready);\n            // Wait for all the buttons to be rendered before attaching the toolbar.\n            Promise.all(promises)\n                .then(() => {\n                var _a;\n                if (cell.isDisposed || ((_a = this._panel) === null || _a === void 0 ? void 0 : _a.content.activeCell) !== cell) {\n                    toolbarWidget.dispose();\n                    return;\n                }\n                // Hide the toolbar by default, to avoid temporary overlapping.\n                cell.node.classList.add(TOOLBAR_OVERLAP_CLASS);\n                cell.inputArea.layout.insertWidget(0, toolbarWidget);\n                // For rendered markdown, watch for resize events.\n                cell.displayChanged.connect(this._resizeEventCallback, this);\n                // Watch for changes in the cell's contents.\n                cell.model.contentChanged.connect(this._changedEventCallback, this);\n                // Hide the cell toolbar if it overlaps with cell contents\n                this._updateCellForToolbarOverlap(cell);\n            })\n                .catch(e => {\n                console.error('Error rendering buttons of the cell toolbar: ', e);\n            });\n        }\n    }\n    _getCell(model) {\n        var _a;\n        return (_a = this._panel) === null || _a === void 0 ? void 0 : _a.content.widgets.find(widget => widget.model === model);\n    }\n    _removeToolbar(model) {\n        var _a, _b;\n        const cell = this._getCell(model);\n        if (cell && !cell.isDisposed) {\n            // Attempt to remove the resize and changed event handlers.\n            cell.displayChanged.disconnect(this._resizeEventCallback, this);\n        }\n        model.contentChanged.disconnect(this._changedEventCallback, this);\n        if (((_a = this._toolbar) === null || _a === void 0 ? void 0 : _a.parent) === (cell === null || cell === void 0 ? void 0 : cell.inputArea) &&\n            ((_b = this._toolbar) === null || _b === void 0 ? void 0 : _b.isDisposed) === false) {\n            this._toolbar.dispose();\n        }\n    }\n    /**\n     * Call back on settings changes\n     *\n     * @deprecated To remove when toolbar can not be provided directly to the tracker\n     */\n    _onToolbarChanged() {\n        var _a;\n        // Reset toolbar when settings changes\n        const activeCell = (_a = this._panel) === null || _a === void 0 ? void 0 : _a.content.activeCell;\n        if (activeCell) {\n            this._removeToolbar(activeCell.model);\n            this._addToolbar(activeCell.model);\n        }\n    }\n    _changedEventCallback() {\n        var _a;\n        const activeCell = (_a = this._panel) === null || _a === void 0 ? void 0 : _a.content.activeCell;\n        if (activeCell === null || activeCell === undefined) {\n            return;\n        }\n        this._updateCellForToolbarOverlap(activeCell);\n    }\n    _resizeEventCallback() {\n        var _a;\n        const activeCell = (_a = this._panel) === null || _a === void 0 ? void 0 : _a.content.activeCell;\n        if (activeCell === null || activeCell === undefined) {\n            return;\n        }\n        this._updateCellForToolbarOverlap(activeCell);\n    }\n    _updateCellForToolbarOverlap(activeCell) {\n        // When we do change in cell, the browser might not have completed the layout\n        // update if we don't wait, resulting in the previous width being returned\n        // using `getBoundingClientRect().width` in later functions. This also wait for\n        // the toolbar to be rendered the first time (on page reload), allowing us to\n        // retrieve the right widgets width.\n        requestIdleCallback(() => {\n            // Remove the \"toolbar overlap\" class from the cell, rendering the cell's toolbar\n            const activeCellElement = activeCell.node;\n            activeCellElement.classList.remove(TOOLBAR_OVERLAP_CLASS);\n            if (this._cellToolbarOverlapsContents(activeCell)) {\n                // Add the \"toolbar overlap\" class to the cell, completely concealing the toolbar,\n                // if the first line of the content overlaps with it at all\n                activeCellElement.classList.add(TOOLBAR_OVERLAP_CLASS);\n            }\n        });\n    }\n    _cellToolbarOverlapsContents(activeCell) {\n        var _a, _b, _c, _d;\n        // Fail safe when the active cell is not ready yet\n        if (!activeCell.model) {\n            return false;\n        }\n        const cellType = activeCell.model.type;\n        // If the toolbar is too large for the current cell, hide it.\n        const editorRect = (_a = activeCell.editorWidget) === null || _a === void 0 ? void 0 : _a.node.getBoundingClientRect();\n        const cellLeft = (_b = editorRect === null || editorRect === void 0 ? void 0 : editorRect.left) !== null && _b !== void 0 ? _b : 0;\n        const cellRight = (_c = editorRect === null || editorRect === void 0 ? void 0 : editorRect.right) !== null && _c !== void 0 ? _c : 0;\n        const toolbarLeft = this._cellToolbarLeft(activeCell);\n        if (toolbarLeft === null) {\n            return false;\n        }\n        // The toolbar should not take up more than 50% of the cell.\n        if ((cellLeft + cellRight) / 2 > toolbarLeft) {\n            return true;\n        }\n        if (cellType === 'markdown' && activeCell.rendered) {\n            // Check for overlap in rendered markdown content\n            return this._markdownOverlapsToolbar(activeCell);\n        }\n        // Check for overlap in code content\n        if (((_d = this._panel) === null || _d === void 0 ? void 0 : _d.content.renderingLayout) === 'default') {\n            return this._codeOverlapsToolbar(activeCell);\n        }\n        else {\n            return this._outputOverlapsToolbar(activeCell);\n        }\n    }\n    /**\n     * Check for overlap between rendered Markdown and the cell toolbar\n     *\n     * @param activeCell A rendered MarkdownCell\n     * @returns `true` if the first line of the output overlaps with the cell toolbar, `false` otherwise\n     */\n    _markdownOverlapsToolbar(activeCell) {\n        const markdownOutput = activeCell.inputArea; // Rendered markdown appears in the input area\n        if (!markdownOutput) {\n            return false;\n        }\n        // Get the rendered markdown as a widget.\n        const markdownOutputWidget = markdownOutput.renderedInput;\n        const markdownOutputElement = markdownOutputWidget.node;\n        const firstOutputElementChild = markdownOutputElement.firstElementChild;\n        if (firstOutputElementChild === null) {\n            return false;\n        }\n        // Temporarily set the element's max width so that the bounding client rectangle only encompasses the content.\n        const oldMaxWidth = firstOutputElementChild.style.maxWidth;\n        firstOutputElementChild.style.maxWidth = 'max-content';\n        const lineRight = firstOutputElementChild.getBoundingClientRect().right;\n        // Reinstate the old max width.\n        firstOutputElementChild.style.maxWidth = oldMaxWidth;\n        const toolbarLeft = this._cellToolbarLeft(activeCell);\n        return toolbarLeft === null ? false : lineRight > toolbarLeft;\n    }\n    _outputOverlapsToolbar(activeCell) {\n        const outputArea = activeCell.outputArea.node;\n        if (outputArea) {\n            const outputs = outputArea.querySelectorAll('[data-mime-type]');\n            const toolbarRect = this._cellToolbarRect(activeCell);\n            if (toolbarRect) {\n                const { left: toolbarLeft, bottom: toolbarBottom } = toolbarRect;\n                return some(outputs, output => {\n                    const node = output.firstElementChild;\n                    if (node) {\n                        const range = new Range();\n                        if (TEXT_MIME_TYPES.includes(output.getAttribute('data-mime-type') || '')) {\n                            // If the node is plain text, it's in a <pre>. To get the true bounding box of the\n                            // text, the node contents need to be selected.\n                            range.selectNodeContents(node);\n                        }\n                        else {\n                            range.selectNode(node);\n                        }\n                        const { right: nodeRight, top: nodeTop } = range.getBoundingClientRect();\n                        // Note: y-coordinate increases toward the bottom of page\n                        return nodeRight > toolbarLeft && nodeTop < toolbarBottom;\n                    }\n                    return false;\n                });\n            }\n        }\n        return false;\n    }\n    _codeOverlapsToolbar(activeCell) {\n        const editorWidget = activeCell.editorWidget;\n        const editor = activeCell.editor;\n        if (!editorWidget || !editor) {\n            return false;\n        }\n        if (editor.lineCount < 1) {\n            return false; // Nothing in the editor\n        }\n        const codeMirrorLines = editorWidget.node.getElementsByClassName('cm-line');\n        if (codeMirrorLines.length < 1) {\n            return false; // No lines present\n        }\n        let lineRight = codeMirrorLines[0].getBoundingClientRect().left;\n        const range = document.createRange();\n        range.selectNodeContents(codeMirrorLines[0]);\n        lineRight += range.getBoundingClientRect().width;\n        const toolbarLeft = this._cellToolbarLeft(activeCell);\n        return toolbarLeft === null ? false : lineRight > toolbarLeft;\n    }\n    _cellToolbarRect(activeCell) {\n        var _a;\n        if (((_a = this._toolbar) === null || _a === void 0 ? void 0 : _a.parent) !== activeCell.inputArea) {\n            return null;\n        }\n        const activeCellToolbar = this._toolbar.node;\n        return activeCellToolbar.getBoundingClientRect();\n    }\n    _cellToolbarLeft(activeCell) {\n        var _a;\n        return ((_a = this._cellToolbarRect(activeCell)) === null || _a === void 0 ? void 0 : _a.left) || null;\n    }\n}\nconst defaultToolbarItems = [\n    {\n        command: 'notebook:duplicate-below',\n        name: 'duplicate-cell'\n    },\n    {\n        command: 'notebook:move-cell-up',\n        name: 'move-cell-up'\n    },\n    {\n        command: 'notebook:move-cell-down',\n        name: 'move-cell-down'\n    },\n    {\n        command: 'notebook:insert-cell-above',\n        name: 'insert-cell-above'\n    },\n    {\n        command: 'notebook:insert-cell-below',\n        name: 'insert-cell-below'\n    },\n    {\n        command: 'notebook:delete-cell',\n        name: 'delete-cell'\n    }\n];\n/**\n * Widget extension that creates a CellToolbarTracker each time a notebook is\n * created.\n */\nexport class CellBarExtension {\n    constructor(commands, toolbarFactory) {\n        this._commands = commands;\n        this._toolbarFactory = toolbarFactory !== null && toolbarFactory !== void 0 ? toolbarFactory : this.defaultToolbarFactory;\n    }\n    get defaultToolbarFactory() {\n        const itemFactory = createDefaultFactory(this._commands);\n        return (widget) => new ObservableList({\n            values: defaultToolbarItems.map(item => {\n                return {\n                    name: item.name,\n                    widget: itemFactory(CellBarExtension.FACTORY_NAME, widget, item)\n                };\n            })\n        });\n    }\n    createNew(panel) {\n        return (this._tracker = new CellToolbarTracker(panel, undefined, this._toolbarFactory));\n    }\n    /**\n     * Whether the cell toolbar is displayed, if there is enough room for it\n     */\n    get enabled() {\n        return this._tracker.enabled;\n    }\n    /**\n     * Sets whether the cell toolbar is displayed, if there is enough room for it\n     */\n    set enabled(value) {\n        if (this._tracker) {\n            this._tracker.enabled = value;\n        }\n    }\n}\nCellBarExtension.FACTORY_NAME = 'Cell';\n//# sourceMappingURL=celltoolbartracker.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module cell-toolbar\n */\nexport * from './celltoolbartracker';\n//# sourceMappingURL=index.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { h, VirtualDOM } from '@lumino/virtualdom';\n/**\n * Constants for drag\n */\n/**\n * The threshold in pixels to start a drag event.\n */\nconst DRAG_THRESHOLD = 5;\n/**\n * The class name added to drag images.\n */\nconst DRAG_IMAGE_CLASS = 'jp-dragImage';\n/**\n * The class name added to singular drag images\n */\nconst SINGLE_DRAG_IMAGE_CLASS = 'jp-dragImage-singlePrompt';\n/**\n * The class name added to the drag image cell content.\n */\nconst CELL_DRAG_CONTENT_CLASS = 'jp-dragImage-content';\n/**\n * The class name added to the drag image cell content.\n */\nconst CELL_DRAG_PROMPT_CLASS = 'jp-dragImage-prompt';\n/**\n * The class name added to the drag image cell content.\n */\nconst CELL_DRAG_MULTIPLE_BACK = 'jp-dragImage-multipleBack';\nexport var CellDragUtils;\n(function (CellDragUtils) {\n    /**\n     * Find the cell index containing the target html element.\n     * This function traces up the DOM hierarchy to find the root cell\n     * node. Then find the corresponding child and select it.\n     *\n     * @param node - the cell node or a child of the cell node.\n     * @param cells - an iterable of Cells\n     * @param isCellNode - a function that takes in a node and checks if\n     * it is a cell node.\n     *\n     * @returns index of the cell we're looking for. Returns -1 if\n     * the cell is not founds\n     */\n    function findCell(node, cells, isCellNode) {\n        let cellIndex = -1;\n        while (node && node.parentElement) {\n            if (isCellNode(node)) {\n                let index = -1;\n                for (const cell of cells) {\n                    if (cell.node === node) {\n                        cellIndex = ++index;\n                        break;\n                    }\n                }\n                break;\n            }\n            node = node.parentElement;\n        }\n        return cellIndex;\n    }\n    CellDragUtils.findCell = findCell;\n    /**\n     * Detect which part of the cell triggered the MouseEvent\n     *\n     * @param cell - The cell which contains the MouseEvent's target\n     * @param target - The DOM node which triggered the MouseEvent\n     */\n    function detectTargetArea(cell, target) {\n        var _a, _b;\n        let targetArea;\n        if (cell) {\n            if ((_a = cell.editorWidget) === null || _a === void 0 ? void 0 : _a.node.contains(target)) {\n                targetArea = 'input';\n            }\n            else if ((_b = cell.promptNode) === null || _b === void 0 ? void 0 : _b.contains(target)) {\n                targetArea = 'prompt';\n            }\n            else {\n                targetArea = 'cell';\n            }\n        }\n        else {\n            targetArea = 'unknown';\n        }\n        return targetArea;\n    }\n    CellDragUtils.detectTargetArea = detectTargetArea;\n    /**\n     * Detect if a drag event should be started. This is down if the\n     * mouse is moved beyond a certain distance (DRAG_THRESHOLD).\n     *\n     * @param prevX - X Coordinate of the mouse pointer during the mousedown event\n     * @param prevY - Y Coordinate of the mouse pointer during the mousedown event\n     * @param nextX - Current X Coordinate of the mouse pointer\n     * @param nextY - Current Y Coordinate of the mouse pointer\n     */\n    function shouldStartDrag(prevX, prevY, nextX, nextY) {\n        const dx = Math.abs(nextX - prevX);\n        const dy = Math.abs(nextY - prevY);\n        return dx >= DRAG_THRESHOLD || dy >= DRAG_THRESHOLD;\n    }\n    CellDragUtils.shouldStartDrag = shouldStartDrag;\n    /**\n     * Create an image for the cell(s) to be dragged\n     *\n     * @param activeCell - The cell from where the drag event is triggered\n     * @param selectedCells - The cells to be dragged\n     */\n    function createCellDragImage(activeCell, selectedCells) {\n        const count = selectedCells.length;\n        let promptNumber;\n        if (activeCell.model.type === 'code') {\n            const executionCount = activeCell.model\n                .executionCount;\n            promptNumber = ' ';\n            if (executionCount) {\n                promptNumber = executionCount.toString();\n            }\n        }\n        else {\n            promptNumber = '';\n        }\n        const cellContent = activeCell.model.sharedModel\n            .getSource()\n            .split('\\n')[0]\n            .slice(0, 26);\n        if (count > 1) {\n            if (promptNumber !== '') {\n                return VirtualDOM.realize(h.div(h.div({ className: DRAG_IMAGE_CLASS }, h.span({ className: CELL_DRAG_PROMPT_CLASS }, '[' + promptNumber + ']:'), h.span({ className: CELL_DRAG_CONTENT_CLASS }, cellContent)), h.div({ className: CELL_DRAG_MULTIPLE_BACK }, '')));\n            }\n            else {\n                return VirtualDOM.realize(h.div(h.div({ className: DRAG_IMAGE_CLASS }, h.span({ className: CELL_DRAG_PROMPT_CLASS }), h.span({ className: CELL_DRAG_CONTENT_CLASS }, cellContent)), h.div({ className: CELL_DRAG_MULTIPLE_BACK }, '')));\n            }\n        }\n        else {\n            if (promptNumber !== '') {\n                return VirtualDOM.realize(h.div(h.div({ className: `${DRAG_IMAGE_CLASS} ${SINGLE_DRAG_IMAGE_CLASS}` }, h.span({ className: CELL_DRAG_PROMPT_CLASS }, '[' + promptNumber + ']:'), h.span({ className: CELL_DRAG_CONTENT_CLASS }, cellContent))));\n            }\n            else {\n                return VirtualDOM.realize(h.div(h.div({ className: `${DRAG_IMAGE_CLASS} ${SINGLE_DRAG_IMAGE_CLASS}` }, h.span({ className: CELL_DRAG_PROMPT_CLASS }), h.span({ className: CELL_DRAG_CONTENT_CLASS }, cellContent))));\n            }\n        }\n    }\n    CellDragUtils.createCellDragImage = createCellDragImage;\n})(CellDragUtils || (CellDragUtils = {}));\n//# sourceMappingURL=celldragutils.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { ReactWidget } from '@jupyterlab/ui-components';\nimport { ElementExt } from '@lumino/domutils';\nimport * as React from 'react';\n/**\n * The CSS class added to all collapsers.\n */\nconst COLLAPSER_CLASS = 'jp-Collapser';\n/**\n * The CSS class added to the collapser child.\n */\nconst COLLAPSER_CHILD_CLASS = 'jp-Collapser-child';\n/**\n * The CSS class added to input collapsers.\n */\nconst INPUT_COLLAPSER = 'jp-InputCollapser';\n/**\n * The CSS class added to output collapsers.\n */\nconst OUTPUT_COLLAPSER = 'jp-OutputCollapser';\n/**\n * Abstract collapser base class.\n *\n * ### Notes\n * A collapser is a visible div to the left of a cell's\n * input/output that a user can click on to collapse the\n * input/output.\n */\nexport class Collapser extends ReactWidget {\n    /**\n     * Construct a new collapser.\n     */\n    constructor() {\n        super();\n        this.addClass(COLLAPSER_CLASS);\n    }\n    /**\n     * Is the input/output of the parent collapsed.\n     */\n    get collapsed() {\n        return false;\n    }\n    /**\n     * Render the collapser with the virtual DOM.\n     */\n    render() {\n        const childClass = COLLAPSER_CHILD_CLASS;\n        return React.createElement(\"div\", { className: childClass, onClick: e => this.handleClick(e) });\n    }\n}\n/**\n * A collapser subclass to collapse a cell's input area.\n */\nexport class InputCollapser extends Collapser {\n    /**\n     * Construct a new input collapser.\n     */\n    constructor() {\n        super();\n        this.addClass(INPUT_COLLAPSER);\n    }\n    /**\n     * Is the cell's input collapsed?\n     */\n    get collapsed() {\n        var _a;\n        const cell = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.parent;\n        if (cell) {\n            return cell.inputHidden;\n        }\n        else {\n            return false;\n        }\n    }\n    /**\n     * Handle a click event for the user to collapse the cell's input.\n     */\n    handleClick(e) {\n        var _a;\n        const cell = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.parent;\n        if (cell) {\n            cell.inputHidden = !cell.inputHidden;\n        }\n        /* We need this until we watch the cell state */\n        this.update();\n    }\n}\n/**\n * A collapser subclass to collapse a cell's output area.\n */\nexport class OutputCollapser extends Collapser {\n    /**\n     * Construct a new output collapser.\n     */\n    constructor() {\n        super();\n        this.addClass(OUTPUT_COLLAPSER);\n    }\n    /**\n     * Is the cell's output collapsed?\n     */\n    get collapsed() {\n        var _a;\n        const cell = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.parent;\n        if (cell) {\n            return cell.outputHidden;\n        }\n        else {\n            return false;\n        }\n    }\n    /**\n     * Handle a click event for the user to collapse the cell's output.\n     */\n    handleClick(e) {\n        var _a, _b;\n        const cell = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.parent;\n        if (cell) {\n            cell.outputHidden = !cell.outputHidden;\n            /* Scroll cell into view after output collapse */\n            if (cell.outputHidden) {\n                let area = (_b = cell.parent) === null || _b === void 0 ? void 0 : _b.node;\n                if (area) {\n                    ElementExt.scrollIntoViewIfNeeded(area, cell.node);\n                }\n            }\n        }\n        /* We need this until we watch the cell state */\n        this.update();\n    }\n}\n//# sourceMappingURL=collapser.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { Widget } from '@lumino/widgets';\n/**\n * The CSS class added to the cell header.\n */\nconst CELL_HEADER_CLASS = 'jp-CellHeader';\n/**\n * The CSS class added to the cell footer.\n */\nconst CELL_FOOTER_CLASS = 'jp-CellFooter';\n/**\n * Default implementation of a cell header.\n */\nexport class CellHeader extends Widget {\n    /**\n     * Construct a new cell header.\n     */\n    constructor() {\n        super();\n        this.addClass(CELL_HEADER_CLASS);\n    }\n}\n/**\n * Default implementation of a cell footer.\n */\nexport class CellFooter extends Widget {\n    /**\n     * Construct a new cell footer.\n     */\n    constructor() {\n        super();\n        this.addClass(CELL_FOOTER_CLASS);\n    }\n}\n//# sourceMappingURL=headerfooter.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { PanelLayout } from '@lumino/widgets';\nimport { Widget } from '@lumino/widgets';\nimport { CodeEditorWrapper } from '@jupyterlab/codeeditor';\n/**\n * The class name added to input area widgets.\n */\nconst INPUT_AREA_CLASS = 'jp-InputArea';\n/**\n * The class name added to the prompt area of cell.\n */\nconst INPUT_AREA_PROMPT_CLASS = 'jp-InputArea-prompt';\n/**\n * The class name added to OutputPrompt.\n */\nconst INPUT_PROMPT_CLASS = 'jp-InputPrompt';\n/**\n * The class name added to the editor area of the cell.\n */\nconst INPUT_AREA_EDITOR_CLASS = 'jp-InputArea-editor';\n/** ****************************************************************************\n * InputArea\n ******************************************************************************/\n/**\n * An input area widget, which hosts a prompt and an editor widget.\n */\nexport class InputArea extends Widget {\n    /**\n     * Construct an input area widget.\n     */\n    constructor(options) {\n        super();\n        this.addClass(INPUT_AREA_CLASS);\n        const { contentFactory, editorOptions, model } = options;\n        this.model = model;\n        this.contentFactory = contentFactory;\n        // Prompt\n        const prompt = (this._prompt = contentFactory.createInputPrompt());\n        prompt.addClass(INPUT_AREA_PROMPT_CLASS);\n        // Editor\n        const editor = (this._editor = new CodeEditorWrapper({\n            factory: contentFactory.editorFactory,\n            model,\n            editorOptions\n        }));\n        editor.addClass(INPUT_AREA_EDITOR_CLASS);\n        const layout = (this.layout = new PanelLayout());\n        layout.addWidget(prompt);\n        layout.addWidget(editor);\n    }\n    /**\n     * Get the CodeEditorWrapper used by the cell.\n     */\n    get editorWidget() {\n        return this._editor;\n    }\n    /**\n     * Get the CodeEditor used by the cell.\n     */\n    get editor() {\n        return this._editor.editor;\n    }\n    /**\n     * Get the prompt node used by the cell.\n     */\n    get promptNode() {\n        return this._prompt.node;\n    }\n    /**\n     * Get the rendered input area widget, if any.\n     */\n    get renderedInput() {\n        return this._rendered;\n    }\n    /**\n     * Render an input instead of the text editor.\n     */\n    renderInput(widget) {\n        const layout = this.layout;\n        if (this._rendered) {\n            this._rendered.parent = null;\n        }\n        this._editor.hide();\n        this._rendered = widget;\n        layout.addWidget(widget);\n    }\n    /**\n     * Show the text editor.\n     */\n    showEditor() {\n        if (this._rendered) {\n            this._rendered.parent = null;\n        }\n        this._editor.show();\n    }\n    /**\n     * Set the prompt of the input area.\n     */\n    setPrompt(value) {\n        this._prompt.executionCount = value;\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        // Do nothing if already disposed.\n        if (this.isDisposed) {\n            return;\n        }\n        this._prompt = null;\n        this._editor = null;\n        this._rendered = null;\n        super.dispose();\n    }\n}\n/**\n * A namespace for `InputArea` statics.\n */\n(function (InputArea) {\n    /**\n     * Default implementation of `IContentFactory`.\n     *\n     * This defaults to using an `editorFactory` based on CodeMirror.\n     */\n    class ContentFactory {\n        /**\n         * Construct a `ContentFactory`.\n         */\n        constructor(options) {\n            this._editor = options.editorFactory;\n        }\n        /**\n         * Return the `CodeEditor.Factory` being used.\n         */\n        get editorFactory() {\n            return this._editor;\n        }\n        /**\n         * Create an input prompt.\n         */\n        createInputPrompt() {\n            return new InputPrompt();\n        }\n    }\n    InputArea.ContentFactory = ContentFactory;\n})(InputArea || (InputArea = {}));\n/**\n * The default input prompt implementation.\n */\nexport class InputPrompt extends Widget {\n    /*\n     * Create an output prompt widget.\n     */\n    constructor() {\n        super();\n        this._executionCount = null;\n        this.addClass(INPUT_PROMPT_CLASS);\n    }\n    /**\n     * The execution count for the prompt.\n     */\n    get executionCount() {\n        return this._executionCount;\n    }\n    set executionCount(value) {\n        this._executionCount = value;\n        if (value === null) {\n            this.node.textContent = ' ';\n        }\n        else {\n            this.node.textContent = `[${value || ' '}]:`;\n        }\n    }\n}\n//# sourceMappingURL=inputarea.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { Signal } from '@lumino/signaling';\nimport { AttachmentsModel } from '@jupyterlab/attachments';\nimport { CodeEditor } from '@jupyterlab/codeeditor';\nimport { OutputAreaModel } from '@jupyterlab/outputarea';\nimport { createMutex, createStandaloneCell } from '@jupyter/ydoc';\nconst globalModelDBMutex = createMutex();\nexport function isCodeCellModel(model) {\n    return model.type === 'code';\n}\nexport function isMarkdownCellModel(model) {\n    return model.type === 'markdown';\n}\nexport function isRawCellModel(model) {\n    return model.type === 'raw';\n}\n/**\n * An implementation of the cell model.\n */\nexport class CellModel extends CodeEditor.Model {\n    constructor(options = {}) {\n        const { cell_type, sharedModel, ...others } = options;\n        super({\n            sharedModel: sharedModel !== null && sharedModel !== void 0 ? sharedModel : createStandaloneCell({\n                cell_type: cell_type !== null && cell_type !== void 0 ? cell_type : 'raw',\n                id: options.id\n            }),\n            ...others\n        });\n        /**\n         * A signal emitted when the state of the model changes.\n         */\n        this.contentChanged = new Signal(this);\n        /**\n         * A signal emitted when a model state changes.\n         */\n        this.stateChanged = new Signal(this);\n        this._metadataChanged = new Signal(this);\n        this._trusted = false;\n        this.standaloneModel = typeof options.sharedModel === 'undefined';\n        this.trusted = !!this.getMetadata('trusted') || !!options.trusted;\n        this.sharedModel.changed.connect(this.onGenericChange, this);\n        this.sharedModel.metadataChanged.connect(this._onMetadataChanged, this);\n    }\n    /**\n     * Signal emitted when cell metadata changes.\n     */\n    get metadataChanged() {\n        return this._metadataChanged;\n    }\n    /**\n     * The id for the cell.\n     */\n    get id() {\n        return this.sharedModel.getId();\n    }\n    /**\n     * The metadata associated with the cell.\n     */\n    get metadata() {\n        return this.sharedModel.metadata;\n    }\n    /**\n     * The trusted state of the model.\n     */\n    get trusted() {\n        return this._trusted;\n    }\n    set trusted(newValue) {\n        const oldValue = this.trusted;\n        if (oldValue !== newValue) {\n            this._trusted = newValue;\n            this.onTrustedChanged(this, { newValue, oldValue });\n        }\n    }\n    /**\n     * Dispose of the resources held by the model.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this.sharedModel.changed.disconnect(this.onGenericChange, this);\n        this.sharedModel.metadataChanged.disconnect(this._onMetadataChanged, this);\n        super.dispose();\n    }\n    /**\n     * Handle a change to the trusted state.\n     *\n     * The default implementation is a no-op.\n     */\n    onTrustedChanged(trusted, args) {\n        /* no-op */\n    }\n    /**\n     * Delete a metadata\n     *\n     * @param key Metadata key\n     */\n    deleteMetadata(key) {\n        return this.sharedModel.deleteMetadata(key);\n    }\n    /**\n     * Get a metadata\n     *\n     * ### Notes\n     * This returns a copy of the key value.\n     *\n     * @param key Metadata key\n     */\n    getMetadata(key) {\n        return this.sharedModel.getMetadata(key);\n    }\n    /**\n     * Set a metadata\n     *\n     * @param key Metadata key\n     * @param value Metadata value\n     */\n    setMetadata(key, value) {\n        if (typeof value === 'undefined') {\n            this.sharedModel.deleteMetadata(key);\n        }\n        else {\n            this.sharedModel.setMetadata(key, value);\n        }\n    }\n    /**\n     * Serialize the model to JSON.\n     */\n    toJSON() {\n        return this.sharedModel.toJSON();\n    }\n    /**\n     * Handle a change to the observable value.\n     */\n    onGenericChange() {\n        this.contentChanged.emit(void 0);\n    }\n    _onMetadataChanged(sender, change) {\n        this._metadataChanged.emit(change);\n    }\n}\n/**\n * A base implementation for cell models with attachments.\n */\nexport class AttachmentsCellModel extends CellModel {\n    /**\n     * Construct a new cell with optional attachments.\n     */\n    constructor(options) {\n        var _a;\n        super(options);\n        const factory = (_a = options.contentFactory) !== null && _a !== void 0 ? _a : AttachmentsCellModel.defaultContentFactory;\n        const values = this.sharedModel.getAttachments();\n        this._attachments = factory.createAttachmentsModel({ values });\n        this._attachments.stateChanged.connect(this.onGenericChange, this);\n        this._attachments.changed.connect(this._onAttachmentsChange, this);\n        this.sharedModel.changed.connect(this._onSharedModelChanged, this);\n    }\n    /**\n     * Get the attachments of the model.\n     */\n    get attachments() {\n        return this._attachments;\n    }\n    /**\n     * Dispose of the resources held by the model.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._attachments.stateChanged.disconnect(this.onGenericChange, this);\n        this._attachments.changed.disconnect(this._onAttachmentsChange, this);\n        this._attachments.dispose();\n        this.sharedModel.changed.disconnect(this._onSharedModelChanged, this);\n        super.dispose();\n    }\n    /**\n     * Serialize the model to JSON.\n     */\n    toJSON() {\n        return super.toJSON();\n    }\n    /**\n     * Handle a change to the cell outputs modelDB and reflect it in the shared model.\n     */\n    _onAttachmentsChange(sender, event) {\n        const cell = this.sharedModel;\n        globalModelDBMutex(() => cell.setAttachments(sender.toJSON()));\n    }\n    /**\n     * Handle a change to the code cell value.\n     */\n    _onSharedModelChanged(slot, change) {\n        if (change.attachmentsChange) {\n            const cell = this.sharedModel;\n            globalModelDBMutex(() => { var _a; return this._attachments.fromJSON((_a = cell.getAttachments()) !== null && _a !== void 0 ? _a : {}); });\n        }\n    }\n}\n/**\n * The namespace for `AttachmentsCellModel` statics.\n */\n(function (AttachmentsCellModel) {\n    /**\n     * The default implementation of an `IContentFactory`.\n     */\n    class ContentFactory {\n        /**\n         * Create an attachments model.\n         */\n        createAttachmentsModel(options) {\n            return new AttachmentsModel(options);\n        }\n    }\n    AttachmentsCellModel.ContentFactory = ContentFactory;\n    /**\n     * The shared `ContentFactory` instance.\n     */\n    AttachmentsCellModel.defaultContentFactory = new ContentFactory();\n})(AttachmentsCellModel || (AttachmentsCellModel = {}));\n/**\n * An implementation of a raw cell model.\n */\nexport class RawCellModel extends AttachmentsCellModel {\n    /**\n     * Construct a raw cell model from optional shared model.\n     */\n    constructor(options = {}) {\n        super({\n            cell_type: 'raw',\n            ...options\n        });\n    }\n    /**\n     * The type of the cell.\n     */\n    get type() {\n        return 'raw';\n    }\n    /**\n     * Serialize the model to JSON.\n     */\n    toJSON() {\n        return super.toJSON();\n    }\n}\n/**\n * An implementation of a markdown cell model.\n */\nexport class MarkdownCellModel extends AttachmentsCellModel {\n    /**\n     * Construct a markdown cell model from optional shared model.\n     */\n    constructor(options = {}) {\n        super({\n            cell_type: 'markdown',\n            ...options\n        });\n        // Use the Github-flavored markdown mode.\n        this.mimeType = 'text/x-ipythongfm';\n    }\n    /**\n     * The type of the cell.\n     */\n    get type() {\n        return 'markdown';\n    }\n    /**\n     * Serialize the model to JSON.\n     */\n    toJSON() {\n        return super.toJSON();\n    }\n}\n/**\n * An implementation of a code cell Model.\n */\nexport class CodeCellModel extends CellModel {\n    /**\n     * Construct a new code cell with optional original cell content.\n     */\n    constructor(options = {}) {\n        var _a;\n        super({\n            cell_type: 'code',\n            ...options\n        });\n        this._executedCode = '';\n        this._isDirty = false;\n        const factory = (_a = options === null || options === void 0 ? void 0 : options.contentFactory) !== null && _a !== void 0 ? _a : CodeCellModel.defaultContentFactory;\n        const trusted = this.trusted;\n        const outputs = this.sharedModel.getOutputs();\n        this._outputs = factory.createOutputArea({ trusted, values: outputs });\n        this.sharedModel.changed.connect(this._onSharedModelChanged, this);\n        this._outputs.changed.connect(this.onGenericChange, this);\n        this._outputs.changed.connect(this.onOutputsChange, this);\n    }\n    /**\n     * The type of the cell.\n     */\n    get type() {\n        return 'code';\n    }\n    /**\n     * The execution count of the cell.\n     */\n    get executionCount() {\n        return this.sharedModel.execution_count || null;\n    }\n    set executionCount(newValue) {\n        this.sharedModel.execution_count = newValue || null;\n    }\n    /**\n     * The execution state of the cell.\n     */\n    get executionState() {\n        return this.sharedModel.executionState;\n    }\n    set executionState(newValue) {\n        this.sharedModel.executionState = newValue;\n    }\n    /**\n     * Whether the cell is dirty or not.\n     *\n     * A cell is dirty if it is output is not empty and does not\n     * result of the input code execution.\n     */\n    get isDirty() {\n        // Test could be done dynamically with this._executedCode\n        // but for performance reason, the diff status is stored in a boolean.\n        return this._isDirty;\n    }\n    /**\n     * Public Set whether the cell is dirty or not.\n     */\n    set isDirty(dirty) {\n        this._setDirty(dirty);\n    }\n    /**\n     * The cell outputs.\n     */\n    get outputs() {\n        return this._outputs;\n    }\n    clearExecution() {\n        this.outputs.clear();\n        this.executionCount = null;\n        this.executionState = 'idle';\n        this._setDirty(false);\n        this.sharedModel.deleteMetadata('execution');\n        // We trust this cell as it no longer has any outputs.\n        this.trusted = true;\n    }\n    /**\n     * Dispose of the resources held by the model.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this.sharedModel.changed.disconnect(this._onSharedModelChanged, this);\n        this._outputs.changed.disconnect(this.onGenericChange, this);\n        this._outputs.changed.disconnect(this.onOutputsChange, this);\n        this._outputs.dispose();\n        this._outputs = null;\n        super.dispose();\n    }\n    /**\n     * Handle a change to the trusted state.\n     */\n    onTrustedChanged(trusted, args) {\n        const newTrusted = args.newValue;\n        if (this._outputs) {\n            this._outputs.trusted = newTrusted;\n        }\n        if (newTrusted) {\n            const codeCell = this.sharedModel;\n            const metadata = codeCell.getMetadata();\n            metadata.trusted = true;\n            codeCell.setMetadata(metadata);\n        }\n        this.stateChanged.emit({\n            name: 'trusted',\n            oldValue: args.oldValue,\n            newValue: newTrusted\n        });\n    }\n    /**\n     * Serialize the model to JSON.\n     */\n    toJSON() {\n        return super.toJSON();\n    }\n    /**\n     * Handle a change to the cell outputs modelDB and reflect it in the shared model.\n     */\n    onOutputsChange(sender, event) {\n        const codeCell = this.sharedModel;\n        globalModelDBMutex(() => {\n            switch (event.type) {\n                case 'add': {\n                    for (const output of event.newValues) {\n                        if (output.type === 'stream') {\n                            output.streamText.changed.connect((sender, textEvent) => {\n                                if (textEvent.options !== undefined &&\n                                    textEvent.options['silent']) {\n                                    return;\n                                }\n                                const codeCell = this.sharedModel;\n                                if (textEvent.type === 'remove') {\n                                    codeCell.removeStreamOutput(event.newIndex, textEvent.start, 'silent-change');\n                                }\n                                else {\n                                    codeCell.appendStreamOutput(event.newIndex, textEvent.value, 'silent-change');\n                                }\n                            }, this);\n                        }\n                    }\n                    const outputs = event.newValues.map(output => output.toJSON());\n                    codeCell.updateOutputs(event.newIndex, event.newIndex, outputs, 'silent-change');\n                    break;\n                }\n                case 'set': {\n                    const newValues = event.newValues.map(output => output.toJSON());\n                    codeCell.updateOutputs(event.oldIndex, event.oldIndex + newValues.length, newValues, 'silent-change');\n                    break;\n                }\n                case 'remove':\n                    codeCell.updateOutputs(event.oldIndex, event.oldValues.length, [], 'silent-change');\n                    break;\n                default:\n                    throw new Error(`Invalid event type: ${event.type}`);\n            }\n        });\n    }\n    /**\n     * Handle a change to the code cell value.\n     */\n    _onSharedModelChanged(slot, change) {\n        if (change.streamOutputChange) {\n            globalModelDBMutex(() => {\n                for (const streamOutputChange of change.streamOutputChange) {\n                    if ('delete' in streamOutputChange) {\n                        this._outputs.removeStreamOutput(streamOutputChange.delete);\n                    }\n                    if ('insert' in streamOutputChange) {\n                        this._outputs.appendStreamOutput(streamOutputChange.insert.toString());\n                    }\n                }\n            });\n        }\n        if (change.outputsChange) {\n            globalModelDBMutex(() => {\n                let retain = 0;\n                for (const outputsChange of change.outputsChange) {\n                    if ('retain' in outputsChange) {\n                        retain += outputsChange.retain;\n                    }\n                    if ('delete' in outputsChange) {\n                        for (let i = 0; i < outputsChange.delete; i++) {\n                            this._outputs.remove(retain);\n                        }\n                    }\n                    if ('insert' in outputsChange) {\n                        // Inserting an output always results in appending it.\n                        for (const output of outputsChange.insert) {\n                            // For compatibility with older ydoc where a plain object,\n                            // (rather than a Map instance) could be provided.\n                            // In a future major release the use of Map will be required.\n                            this._outputs.add('toJSON' in output ? output.toJSON() : output);\n                        }\n                    }\n                }\n            });\n        }\n        if (change.executionCountChange) {\n            if (change.executionCountChange.newValue &&\n                (this.isDirty || !change.executionCountChange.oldValue)) {\n                this._setDirty(false);\n            }\n            this.stateChanged.emit({\n                name: 'executionCount',\n                oldValue: change.executionCountChange.oldValue,\n                newValue: change.executionCountChange.newValue\n            });\n        }\n        if (change.executionStateChange) {\n            this.stateChanged.emit({\n                name: 'executionState',\n                oldValue: change.executionStateChange.oldValue,\n                newValue: change.executionStateChange.newValue\n            });\n        }\n        if (change.sourceChange && this.executionCount !== null) {\n            this._setDirty(this._executedCode !== this.sharedModel.getSource().trim());\n        }\n    }\n    /**\n     * Set whether the cell is dirty or not.\n     */\n    _setDirty(v) {\n        if (!v) {\n            this._executedCode = this.sharedModel.getSource().trim();\n        }\n        if (v !== this._isDirty) {\n            this._isDirty = v;\n            this.stateChanged.emit({\n                name: 'isDirty',\n                oldValue: !v,\n                newValue: v\n            });\n        }\n    }\n}\n/**\n * The namespace for `CodeCellModel` statics.\n */\n(function (CodeCellModel) {\n    /**\n     * The default implementation of an `IContentFactory`.\n     */\n    class ContentFactory {\n        /**\n         * Create an output area.\n         */\n        createOutputArea(options) {\n            return new OutputAreaModel(options);\n        }\n    }\n    CodeCellModel.ContentFactory = ContentFactory;\n    /**\n     * The shared `ContentFactory` instance.\n     */\n    CodeCellModel.defaultContentFactory = new ContentFactory();\n})(CodeCellModel || (CodeCellModel = {}));\n//# sourceMappingURL=model.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { ellipsesIcon } from '@jupyterlab/ui-components';\nimport { Widget } from '@lumino/widgets';\nimport { nullTranslator } from '@jupyterlab/translation';\n/**\n * The CSS class added to placeholders.\n */\nconst PLACEHOLDER_CLASS = 'jp-Placeholder';\n/**\n * The CSS classes added to input placeholder prompts.\n */\nconst INPUT_PROMPT_CLASS = 'jp-Placeholder-prompt jp-InputPrompt';\n/**\n * The CSS classes added to output placeholder prompts.\n */\nconst OUTPUT_PROMPT_CLASS = 'jp-Placeholder-prompt jp-OutputPrompt';\n/**\n * The CSS class added to placeholder content.\n */\nconst CONTENT_CLASS = 'jp-Placeholder-content';\n/**\n * The CSS class added to input placeholders.\n */\nconst INPUT_PLACEHOLDER_CLASS = 'jp-InputPlaceholder';\n/**\n * The CSS class added to output placeholders.\n */\nconst OUTPUT_PLACEHOLDER_CLASS = 'jp-OutputPlaceholder';\n/**\n * An base class for placeholders\n *\n * ### Notes\n * A placeholder is the element that is shown when input/output\n * is hidden.\n */\nexport class Placeholder extends Widget {\n    /**\n     * Construct a new placeholder.\n     */\n    constructor(options) {\n        var _a, _b, _c;\n        const node = document.createElement('div');\n        super({ node });\n        const trans = ((_a = options.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n        const innerNode = document.createElement('div');\n        innerNode.className = (_b = options.promptClass) !== null && _b !== void 0 ? _b : '';\n        node.insertAdjacentHTML('afterbegin', innerNode.outerHTML);\n        this._cell = document.createElement('div');\n        this._cell.classList.add(CONTENT_CLASS);\n        this._cell.title = trans.__('Click to expand');\n        const container = this._cell.appendChild(document.createElement('div'));\n        container.classList.add('jp-Placeholder-contentContainer');\n        this._textContent = container.appendChild(document.createElement('span'));\n        this._textContent.className = 'jp-PlaceholderText';\n        this._textContent.innerText = (_c = options.text) !== null && _c !== void 0 ? _c : '';\n        node.appendChild(this._cell);\n        ellipsesIcon.element({\n            container: container.appendChild(document.createElement('span')),\n            className: 'jp-MoreHorizIcon',\n            elementPosition: 'center',\n            height: 'auto',\n            width: '32px'\n        });\n        this.addClass(PLACEHOLDER_CLASS);\n        this._callback = options.callback;\n    }\n    /**\n     * The text displayed in the placeholder.\n     */\n    set text(t) {\n        this._textContent.innerText = t;\n    }\n    get text() {\n        return this._textContent.innerText;\n    }\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        this.node.addEventListener('click', this._callback);\n    }\n    onBeforeDetach(msg) {\n        this.node.removeEventListener('click', this._callback);\n        super.onBeforeDetach(msg);\n    }\n}\n/**\n * The input placeholder class.\n */\nexport class InputPlaceholder extends Placeholder {\n    /**\n     * Construct a new input placeholder.\n     */\n    constructor(options) {\n        super({ ...options, promptClass: INPUT_PROMPT_CLASS });\n        this.addClass(INPUT_PLACEHOLDER_CLASS);\n    }\n}\n/**\n * The output placeholder class.\n */\nexport class OutputPlaceholder extends Placeholder {\n    /**\n     * Construct a new output placeholder.\n     */\n    constructor(options) {\n        super({ ...options, promptClass: OUTPUT_PROMPT_CLASS });\n        this.addClass(OUTPUT_PLACEHOLDER_CLASS);\n    }\n}\n//# sourceMappingURL=placeholder.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { EditorSearchProvider } from '@jupyterlab/codemirror';\nimport { signalToPromise } from '@jupyterlab/coreutils';\nimport { GenericSearchProvider } from '@jupyterlab/documentsearch';\n/**\n * Class applied on highlighted search matches\n */\nexport const SELECTED_HIGHLIGHT_CLASS = 'jp-mod-selected';\n/**\n * Search provider for cells.\n */\nexport class CellSearchProvider extends EditorSearchProvider {\n    constructor(cell) {\n        super();\n        this.cell = cell;\n        if (!this.cell.inViewport && !this.cell.editor) {\n            void signalToPromise(cell.inViewportChanged).then(([, inViewport]) => {\n                if (inViewport) {\n                    this.cmHandler.setEditor(this.editor);\n                }\n            });\n        }\n    }\n    /**\n     * Text editor\n     */\n    get editor() {\n        return this.cell.editor;\n    }\n    /**\n     * Editor content model\n     */\n    get model() {\n        return this.cell.model;\n    }\n}\n/**\n * Code cell search provider\n */\nclass CodeCellSearchProvider extends CellSearchProvider {\n    /**\n     * Constructor\n     *\n     * @param cell Cell widget\n     */\n    constructor(cell) {\n        super(cell);\n        this.currentProviderIndex = -1;\n        this.outputsProvider = [];\n        const outputs = this.cell.outputArea;\n        this._onOutputsChanged(outputs, outputs.widgets.length).catch(reason => {\n            console.error(`Failed to initialize search on cell outputs.`, reason);\n        });\n        outputs.outputLengthChanged.connect(this._onOutputsChanged, this);\n        outputs.disposed.connect(() => {\n            outputs.outputLengthChanged.disconnect(this._onOutputsChanged);\n        }, this);\n    }\n    /**\n     * Number of matches in the cell.\n     */\n    get matchesCount() {\n        if (!this.isActive) {\n            return 0;\n        }\n        return (super.matchesCount +\n            this.outputsProvider.reduce((sum, provider) => { var _a; return sum + ((_a = provider.matchesCount) !== null && _a !== void 0 ? _a : 0); }, 0));\n    }\n    /**\n     * Clear currently highlighted match.\n     */\n    async clearHighlight() {\n        await super.clearHighlight();\n        await Promise.all(this.outputsProvider.map(provider => provider.clearHighlight()));\n    }\n    /**\n     * Dispose the search provider\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        super.dispose();\n        this.outputsProvider.map(provider => {\n            provider.dispose();\n        });\n        this.outputsProvider.length = 0;\n    }\n    /**\n     * Highlight the next match.\n     *\n     * @returns The next match if there is one.\n     */\n    async highlightNext(loop, options) {\n        var _a;\n        // If we're scanning from the previous match, test whether we're\n        // at the end of the matches list.\n        const from = (_a = options === null || options === void 0 ? void 0 : options.from) !== null && _a !== void 0 ? _a : '';\n        if (this.matchesCount === 0 ||\n            (from === 'previous-match' &&\n                this.currentIndex !== null &&\n                this.currentIndex + 1 >= this.cmHandler.matches.length) ||\n            !this.isActive) {\n            this.currentIndex = null;\n        }\n        else {\n            if (this.currentProviderIndex === -1) {\n                const match = await super.highlightNext(loop, options);\n                if (match) {\n                    this.currentIndex = this.cmHandler.currentIndex;\n                    return match;\n                }\n                else {\n                    this.currentProviderIndex = 0;\n                }\n            }\n            while (this.currentProviderIndex < this.outputsProvider.length) {\n                const provider = this.outputsProvider[this.currentProviderIndex];\n                const match = await provider.highlightNext(false);\n                if (match) {\n                    this.currentIndex =\n                        super.matchesCount +\n                            this.outputsProvider\n                                .slice(0, this.currentProviderIndex)\n                                .reduce((sum, provider) => { var _a; return (sum += (_a = provider.matchesCount) !== null && _a !== void 0 ? _a : 0); }, 0) +\n                            provider.currentMatchIndex;\n                    return match;\n                }\n                else {\n                    this.currentProviderIndex += 1;\n                }\n            }\n            this.currentProviderIndex = -1;\n            this.currentIndex = null;\n            return undefined;\n        }\n    }\n    /**\n     * Highlight the previous match.\n     *\n     * @returns The previous match if there is one.\n     */\n    async highlightPrevious() {\n        if (this.matchesCount === 0 || !this.isActive) {\n            this.currentIndex = null;\n        }\n        else {\n            if (this.currentIndex === null) {\n                this.currentProviderIndex = this.outputsProvider.length - 1;\n            }\n            while (this.currentProviderIndex >= 0) {\n                const provider = this.outputsProvider[this.currentProviderIndex];\n                const match = await provider.highlightPrevious(false);\n                if (match) {\n                    this.currentIndex =\n                        super.matchesCount +\n                            this.outputsProvider\n                                .slice(0, this.currentProviderIndex)\n                                .reduce((sum, provider) => { var _a; return (sum += (_a = provider.matchesCount) !== null && _a !== void 0 ? _a : 0); }, 0) +\n                            provider.currentMatchIndex;\n                    return match;\n                }\n                else {\n                    this.currentProviderIndex -= 1;\n                }\n            }\n            const match = await super.highlightPrevious();\n            if (match) {\n                this.currentIndex = this.cmHandler.currentIndex;\n                return match;\n            }\n            else {\n                this.currentIndex = null;\n                return undefined;\n            }\n        }\n    }\n    /**\n     * Initialize the search using the provided options. Should update the UI to highlight\n     * all matches and \"select\" the first match.\n     *\n     * @param query A RegExp to be use to perform the search\n     * @param filters Filter parameters to pass to provider\n     */\n    async startQuery(query, filters) {\n        await super.startQuery(query, filters);\n        // Search outputs\n        if ((filters === null || filters === void 0 ? void 0 : filters.output) !== false && this.isActive) {\n            await Promise.all(this.outputsProvider.map(provider => provider.startQuery(query)));\n        }\n    }\n    async endQuery() {\n        var _a;\n        await super.endQuery();\n        if (((_a = this.filters) === null || _a === void 0 ? void 0 : _a.output) !== false && this.isActive) {\n            await Promise.all(this.outputsProvider.map(provider => provider.endQuery()));\n        }\n    }\n    /**\n     * Replace all matches in the cell source with the provided text\n     *\n     * @param newText The replacement text.\n     * @returns Whether a replace occurred.\n     */\n    async replaceAllMatches(newText, options) {\n        if (this.model.getMetadata('editable') === false)\n            return Promise.resolve(false);\n        const result = await super.replaceAllMatches(newText, options);\n        return result;\n    }\n    /**\n     * Replace the currently selected match with the provided text.\n     * If no match is selected, it won't do anything.\n     *\n     * @param newText The replacement text.\n     * @returns Whether a replace occurred.\n     */\n    async replaceCurrentMatch(newText, loop, options) {\n        if (this.model.getMetadata('editable') === false)\n            return Promise.resolve(false);\n        const result = await super.replaceCurrentMatch(newText, loop, options);\n        return result;\n    }\n    async _onOutputsChanged(outputArea, changes) {\n        var _a;\n        this.outputsProvider.forEach(provider => {\n            provider.dispose();\n        });\n        this.outputsProvider.length = 0;\n        this.currentProviderIndex = -1;\n        this.outputsProvider = this.cell.outputArea.widgets.map(output => new GenericSearchProvider(output));\n        if (this.isActive && this.query && ((_a = this.filters) === null || _a === void 0 ? void 0 : _a.output) !== false) {\n            await Promise.all([\n                this.outputsProvider.map(provider => {\n                    void provider.startQuery(this.query);\n                })\n            ]);\n        }\n        this._stateChanged.emit();\n    }\n}\n/**\n * Markdown cell search provider\n */\nclass MarkdownCellSearchProvider extends CellSearchProvider {\n    /**\n     * Constructor\n     *\n     * @param cell Cell widget\n     */\n    constructor(cell) {\n        super(cell);\n        this._unrenderedByHighlight = false;\n        this.renderedProvider = new GenericSearchProvider(cell.renderer);\n    }\n    /**\n     * Clear currently highlighted match\n     */\n    async clearHighlight() {\n        await super.clearHighlight();\n        await this.renderedProvider.clearHighlight();\n    }\n    /**\n     * Dispose the search provider\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        super.dispose();\n        this.renderedProvider.dispose();\n    }\n    /**\n     * Stop the search and clean any UI elements.\n     */\n    async endQuery() {\n        await super.endQuery();\n        await this.renderedProvider.endQuery();\n    }\n    /**\n     * Highlight the next match.\n     *\n     * @returns The next match if there is one.\n     */\n    async highlightNext(loop = true, options) {\n        let match = undefined;\n        if (!this.isActive) {\n            return match;\n        }\n        const cell = this.cell;\n        if (cell.rendered && this.matchesCount > 0) {\n            // Unrender the cell\n            this._unrenderedByHighlight = true;\n            const waitForRendered = signalToPromise(cell.renderedChanged);\n            cell.rendered = false;\n            await waitForRendered;\n        }\n        match = await super.highlightNext(loop, options);\n        return match;\n    }\n    /**\n     * Highlight the previous match.\n     *\n     * @returns The previous match if there is one.\n     */\n    async highlightPrevious() {\n        let match = undefined;\n        const cell = this.cell;\n        if (cell.rendered && this.matchesCount > 0) {\n            // Unrender the cell if there are matches within the cell\n            this._unrenderedByHighlight = true;\n            const waitForRendered = signalToPromise(cell.renderedChanged);\n            cell.rendered = false;\n            await waitForRendered;\n        }\n        match = await super.highlightPrevious();\n        return match;\n    }\n    /**\n     * Initialize the search using the provided options. Should update the UI\n     * to highlight all matches and \"select\" the first match.\n     *\n     * @param query A RegExp to be use to perform the search\n     * @param filters Filter parameters to pass to provider\n     */\n    async startQuery(query, filters) {\n        await super.startQuery(query, filters);\n        const cell = this.cell;\n        if (cell.rendered) {\n            this.onRenderedChanged(cell, cell.rendered);\n        }\n        cell.renderedChanged.connect(this.onRenderedChanged, this);\n    }\n    /**\n     * Replace all matches in the cell source with the provided text\n     *\n     * @param newText The replacement text.\n     * @returns Whether a replace occurred.\n     */\n    async replaceAllMatches(newText, options) {\n        if (this.model.getMetadata('editable') === false)\n            return Promise.resolve(false);\n        const result = await super.replaceAllMatches(newText, options);\n        // if the cell is rendered force update\n        if (this.cell.rendered) {\n            this.cell.update();\n        }\n        return result;\n    }\n    /**\n     * Replace the currently selected match with the provided text.\n     * If no match is selected, it won't do anything.\n     *\n     * @param newText The replacement text.\n     * @returns Whether a replace occurred.\n     */\n    async replaceCurrentMatch(newText, loop, options) {\n        if (this.model.getMetadata('editable') === false)\n            return Promise.resolve(false);\n        const result = await super.replaceCurrentMatch(newText, loop, options);\n        return result;\n    }\n    /**\n     * Callback on rendered state change\n     *\n     * @param cell Cell that emitted the change\n     * @param rendered New rendered value\n     */\n    onRenderedChanged(cell, rendered) {\n        var _a;\n        if (!this._unrenderedByHighlight) {\n            this.currentIndex = null;\n        }\n        this._unrenderedByHighlight = false;\n        if (this.isActive) {\n            if (rendered) {\n                void this.renderedProvider.startQuery(this.query);\n            }\n            else {\n                // Force cursor position to ensure reverse search is working as expected\n                (_a = cell.editor) === null || _a === void 0 ? void 0 : _a.setCursorPosition({ column: 0, line: 0 });\n                void this.renderedProvider.endQuery();\n            }\n        }\n    }\n}\n/**\n * Factory to create a cell search provider\n *\n * @param cell Cell widget\n * @returns Cell search provider\n */\nexport function createCellSearchProvider(cell) {\n    if (cell.isPlaceholder()) {\n        return new CellSearchProvider(cell);\n    }\n    switch (cell.model.type) {\n        case 'code':\n            return new CodeCellSearchProvider(cell);\n        case 'markdown':\n            return new MarkdownCellSearchProvider(cell);\n        default:\n            return new CellSearchProvider(cell);\n    }\n}\n//# sourceMappingURL=searchprovider.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { Throttler } from '@lumino/polling';\nimport { Widget } from '@lumino/widgets';\nimport { Signal } from '@lumino/signaling';\nconst RESIZE_HANDLE_CLASS = 'jp-CellResizeHandle';\nconst CELL_RESIZED_CLASS = 'jp-mod-resizedCell';\n/**\n * A handle that allows to change input/output proportions in side-by-side mode.\n */\nexport class ResizeHandle extends Widget {\n    constructor(targetNode) {\n        super();\n        this.targetNode = targetNode;\n        this._isActive = false;\n        this._isDragging = false;\n        /**\n         * A public signal used to indicate the size of the cell and output has changed.\n         */\n        this.sizeChanged = new Signal(this);\n        this.addClass(RESIZE_HANDLE_CLASS);\n        this._resizer = new Throttler(event => this._resize(event), 50);\n    }\n    /**\n     * Dispose the resizer handle.\n     */\n    dispose() {\n        this._resizer.dispose();\n        super.dispose();\n    }\n    /**\n     * Handle the DOM events for the widget.\n     *\n     * @param event - The DOM event sent to the widget.\n     *\n     */\n    handleEvent(event) {\n        var _a, _b;\n        switch (event.type) {\n            case 'dblclick':\n                (_a = this.targetNode.parentNode) === null || _a === void 0 ? void 0 : _a.childNodes.forEach(node => {\n                    node.classList.remove(CELL_RESIZED_CLASS);\n                });\n                document.documentElement.style.setProperty('--jp-side-by-side-output-size', `1fr`);\n                this._isActive = false;\n                break;\n            case 'mousedown':\n                this._isDragging = true;\n                if (!this._isActive) {\n                    (_b = this.targetNode.parentNode) === null || _b === void 0 ? void 0 : _b.childNodes.forEach(node => {\n                        node.classList.add(CELL_RESIZED_CLASS);\n                    });\n                    this._isActive = true;\n                }\n                window.addEventListener('mousemove', this);\n                window.addEventListener('mouseup', this);\n                break;\n            case 'mousemove': {\n                if (this._isActive && this._isDragging) {\n                    void this._resizer.invoke(event);\n                }\n                break;\n            }\n            case 'mouseup':\n                this._isDragging = false;\n                window.removeEventListener('mousemove', this);\n                window.removeEventListener('mouseup', this);\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Handle `after-attach` messages.\n     */\n    onAfterAttach(msg) {\n        this.node.addEventListener('dblclick', this);\n        this.node.addEventListener('mousedown', this);\n        super.onAfterAttach(msg);\n    }\n    /**\n     * Handle `before-detach` messages.\n     */\n    onBeforeDetach(msg) {\n        this.node.removeEventListener('dblclick', this);\n        this.node.removeEventListener('mousedown', this);\n        super.onBeforeDetach(msg);\n    }\n    _resize(event) {\n        // Gate the output size ratio between {0.05, 50} as sensible defaults.\n        const { width, x } = this.targetNode.getBoundingClientRect();\n        const position = event.clientX - x;\n        const ratio = width / position - 1;\n        if (0 < ratio) {\n            const normalized = Math.max(Math.min(Math.abs(ratio), 50), 0.05);\n            document.documentElement.style.setProperty('--jp-side-by-side-output-size', `${normalized}fr`);\n            this.sizeChanged.emit(normalized);\n        }\n    }\n}\n//# sourceMappingURL=resizeHandle.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { EditorView } from '@codemirror/view';\nimport { ElementExt } from '@lumino/domutils';\nimport { AttachmentsResolver } from '@jupyterlab/attachments';\nimport { DOMUtils } from '@jupyterlab/apputils';\nimport { ActivityMonitor, URLExt } from '@jupyterlab/coreutils';\nimport { OutputArea, OutputPrompt, SimplifiedOutputArea, Stdin } from '@jupyterlab/outputarea';\nimport { imageRendererFactory, MimeModel } from '@jupyterlab/rendermime';\nimport { TableOfContentsUtils } from '@jupyterlab/toc';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { addIcon, collapseIcon, expandIcon } from '@jupyterlab/ui-components';\nimport { PromiseDelegate, UUID } from '@lumino/coreutils';\nimport { some } from '@lumino/algorithm';\nimport { MessageLoop } from '@lumino/messaging';\nimport { Debouncer } from '@lumino/polling';\nimport { Signal } from '@lumino/signaling';\nimport { Panel, PanelLayout, Widget } from '@lumino/widgets';\nimport { InputCollapser, OutputCollapser } from './collapser';\nimport { CellFooter, CellHeader } from './headerfooter';\nimport { InputArea, InputPrompt } from './inputarea';\nimport { InputPlaceholder, OutputPlaceholder } from './placeholder';\nimport { ResizeHandle } from './resizeHandle';\n/**\n * The CSS class added to cell widgets.\n */\nconst CELL_CLASS = 'jp-Cell';\n/**\n * The CSS class added to the cell header.\n */\nconst CELL_HEADER_CLASS = 'jp-Cell-header';\n/**\n * The CSS class added to the cell footer.\n */\nconst CELL_FOOTER_CLASS = 'jp-Cell-footer';\n/**\n * The CSS class added to the cell input wrapper.\n */\nconst CELL_INPUT_WRAPPER_CLASS = 'jp-Cell-inputWrapper';\n/**\n * The CSS class added to the cell output wrapper.\n */\nconst CELL_OUTPUT_WRAPPER_CLASS = 'jp-Cell-outputWrapper';\n/**\n * The CSS class added to the cell input area.\n */\nconst CELL_INPUT_AREA_CLASS = 'jp-Cell-inputArea';\n/**\n * The CSS class added to the cell output area.\n */\nconst CELL_OUTPUT_AREA_CLASS = 'jp-Cell-outputArea';\n/**\n * The CSS class added to the cell input collapser.\n */\nconst CELL_INPUT_COLLAPSER_CLASS = 'jp-Cell-inputCollapser';\n/**\n * The CSS class added to the cell output collapser.\n */\nconst CELL_OUTPUT_COLLAPSER_CLASS = 'jp-Cell-outputCollapser';\n/**\n * The class name added to the cell when dirty.\n */\nconst DIRTY_CLASS = 'jp-mod-dirty';\n/**\n * The class name added to code cells.\n */\nconst CODE_CELL_CLASS = 'jp-CodeCell';\n/**\n * The class name added to markdown cells.\n */\nconst MARKDOWN_CELL_CLASS = 'jp-MarkdownCell';\n/**\n * The class name added to rendered markdown output widgets.\n */\nconst MARKDOWN_OUTPUT_CLASS = 'jp-MarkdownOutput';\nconst MARKDOWN_HEADING_COLLAPSED = 'jp-MarkdownHeadingCollapsed';\nconst HEADING_COLLAPSER_CLASS = 'jp-collapseHeadingButton';\nconst SHOW_HIDDEN_CELLS_CLASS = 'jp-showHiddenCellsButton';\n/**\n * The class name added to raw cells.\n */\nconst RAW_CELL_CLASS = 'jp-RawCell';\n/**\n * The class name added to a rendered input area.\n */\nconst RENDERED_CLASS = 'jp-mod-rendered';\nconst NO_OUTPUTS_CLASS = 'jp-mod-noOutputs';\n/**\n * The text applied to an empty markdown cell.\n */\nconst DEFAULT_MARKDOWN_TEXT = 'Type Markdown and LaTeX: $ α^2 $';\n/**\n * The timeout to wait for change activity to have ceased before rendering.\n */\nconst RENDER_TIMEOUT = 1000;\n/**\n * The mime type for a rich contents drag object.\n */\nconst CONTENTS_MIME_RICH = 'application/x-jupyter-icontentsrich';\n/** ****************************************************************************\n * Cell\n ******************************************************************************/\n/**\n * A base cell widget.\n */\nexport class Cell extends Widget {\n    /**\n     * Construct a new base cell widget.\n     */\n    constructor(options) {\n        var _a, _b, _c, _d;\n        super();\n        this.prompt = '';\n        this._displayChanged = new Signal(this);\n        this._scrollRequested = new Signal(this);\n        /**\n         * Editor extension emitting `scrollRequested` signal on scroll.\n         *\n         * Scrolling within editor will be prevented when a cell is out out viewport.\n         * Windowed containers including cells should listen to the scroll request\n         * signal and invoke the `scrollWithinCell()` callback after scrolling the cell\n         * back into the view (and after updating the `inViewport` property).\n         */\n        this._scrollHandlerExtension = EditorView.scrollHandler.of((view, range, options) => {\n            // When cell is in the viewport we can scroll within the editor immediately.\n            // When cell is out of viewport, the windowed container needs to first\n            // scroll the cell into the viewport (otherwise CodeMirror is unable to\n            // calculate the correct scroll delta) before invoking scrolling in editor.\n            const inWindowedContainer = this._inViewport !== null;\n            const preventDefault = inWindowedContainer && !this._inViewport;\n            this._scrollRequested.emit({\n                defaultPrevented: preventDefault,\n                scrollWithinCell: () => {\n                    view.dispatch({\n                        effects: EditorView.scrollIntoView(range, options)\n                    });\n                }\n            });\n            return preventDefault;\n        });\n        this._editorConfig = {};\n        this._editorExtensions = [];\n        this._inputHidden = false;\n        this._inViewportChanged = new Signal(this);\n        this._readOnly = false;\n        this._ready = new PromiseDelegate();\n        this._resizeDebouncer = new Debouncer(() => {\n            this._displayChanged.emit();\n        }, 0);\n        this._syncCollapse = false;\n        this._syncEditable = false;\n        this.addClass(CELL_CLASS);\n        const model = (this._model = options.model);\n        this.contentFactory = options.contentFactory;\n        this.layout = (_a = options.layout) !== null && _a !== void 0 ? _a : new PanelLayout();\n        // Set up translator for aria labels\n        this.translator = (_b = options.translator) !== null && _b !== void 0 ? _b : nullTranslator;\n        // For cells disable searching with CodeMirror search panel.\n        this._editorConfig = { searchWithCM: false, ...options.editorConfig };\n        this._editorExtensions = (_c = options.editorExtensions) !== null && _c !== void 0 ? _c : [];\n        this._editorExtensions.push(this._scrollHandlerExtension);\n        this._placeholder = true;\n        this._inViewport = null;\n        this.placeholder = (_d = options.placeholder) !== null && _d !== void 0 ? _d : true;\n        model.metadataChanged.connect(this.onMetadataChanged, this);\n    }\n    /**\n     * Initialize view state from model.\n     *\n     * #### Notes\n     * Should be called after construction. For convenience, returns this, so it\n     * can be chained in the construction, like `new Foo().initializeState();`\n     */\n    initializeState() {\n        this.loadCollapseState();\n        this.loadEditableState();\n        return this;\n    }\n    /**\n     * Signal to indicate that widget has changed visibly (in size, in type, etc)\n     */\n    get displayChanged() {\n        return this._displayChanged;\n    }\n    /**\n     * Whether the cell is in viewport or not.\n     *\n     * #### Notes\n     * This property is managed by the windowed container which holds the cell.\n     * When a cell is not in a windowed container, it always returns `false`,\n     * but this may change in the future major version.\n     */\n    get inViewport() {\n        var _a;\n        return (_a = this._inViewport) !== null && _a !== void 0 ? _a : false;\n    }\n    set inViewport(v) {\n        if (this._inViewport !== v) {\n            this._inViewport = v;\n            this._inViewportChanged.emit(this._inViewport);\n        }\n    }\n    /**\n     * Will emit true just after the node is attached to the DOM\n     * Will emit false just before the node is detached of the DOM\n     */\n    get inViewportChanged() {\n        return this._inViewportChanged;\n    }\n    /**\n     * Whether the cell is a placeholder not yet fully rendered or not.\n     */\n    get placeholder() {\n        return this._placeholder;\n    }\n    set placeholder(v) {\n        if (this._placeholder !== v && v === false) {\n            this.initializeDOM();\n            this._placeholder = v;\n            this._ready.resolve();\n        }\n    }\n    /**\n     * Get the prompt node used by the cell.\n     */\n    get promptNode() {\n        if (this.placeholder) {\n            return null;\n        }\n        if (!this._inputHidden) {\n            return this._input.promptNode;\n        }\n        else {\n            return this._inputPlaceholder.node\n                .firstElementChild;\n        }\n    }\n    /**\n     * Get the CodeEditorWrapper used by the cell.\n     */\n    get editorWidget() {\n        var _a, _b;\n        return (_b = (_a = this._input) === null || _a === void 0 ? void 0 : _a.editorWidget) !== null && _b !== void 0 ? _b : null;\n    }\n    /**\n     * Get the CodeEditor used by the cell.\n     */\n    get editor() {\n        var _a, _b;\n        return (_b = (_a = this._input) === null || _a === void 0 ? void 0 : _a.editor) !== null && _b !== void 0 ? _b : null;\n    }\n    /**\n     * Editor configuration\n     */\n    get editorConfig() {\n        return this._editorConfig;\n    }\n    /**\n     * Cell headings\n     */\n    get headings() {\n        return new Array();\n    }\n    /**\n     * Get the model used by the cell.\n     */\n    get model() {\n        return this._model;\n    }\n    /**\n     * Get the input area for the cell.\n     */\n    get inputArea() {\n        return this._input;\n    }\n    /**\n     * The read only state of the cell.\n     */\n    get readOnly() {\n        return this._readOnly;\n    }\n    set readOnly(value) {\n        if (value === this._readOnly) {\n            return;\n        }\n        this._readOnly = value;\n        if (this.syncEditable) {\n            this.saveEditableState();\n        }\n        this.update();\n    }\n    /**\n     * Whether the cell is a placeholder that defer rendering\n     *\n     * #### Notes\n     * You can wait for the promise `Cell.ready` to wait for the\n     * cell to be rendered.\n     */\n    isPlaceholder() {\n        return this.placeholder;\n    }\n    /**\n     * Save view editable state to model\n     */\n    saveEditableState() {\n        const { sharedModel } = this.model;\n        const current = sharedModel.getMetadata('editable');\n        if ((this.readOnly && current === false) ||\n            (!this.readOnly && current === undefined)) {\n            return;\n        }\n        if (this.readOnly) {\n            sharedModel.setMetadata('editable', false);\n        }\n        else {\n            sharedModel.deleteMetadata('editable');\n        }\n    }\n    /**\n     * Load view editable state from model.\n     */\n    loadEditableState() {\n        this.readOnly =\n            this.model.sharedModel.getMetadata('editable') ===\n                false;\n    }\n    /**\n     * A promise that resolves when the widget renders for the first time.\n     */\n    get ready() {\n        return this._ready.promise;\n    }\n    /**\n     * Set the prompt for the widget.\n     * @deprecated - set the `executionState` on the model instead.\n     */\n    setPrompt(value) {\n        return this._setPrompt(value);\n    }\n    /**\n     * Set the prompt for the widget.\n     *\n     * Note: this method is protected because it is needed in the CodeCell subclass,\n     * but it cannot be defined there because input is private to Cell class.\n     */\n    _setPrompt(value) {\n        var _a;\n        this.prompt = value;\n        (_a = this._input) === null || _a === void 0 ? void 0 : _a.setPrompt(value);\n    }\n    /**\n     * The view state of input being hidden.\n     */\n    get inputHidden() {\n        return this._inputHidden;\n    }\n    set inputHidden(value) {\n        var _a;\n        if (this._inputHidden === value) {\n            return;\n        }\n        if (!this.placeholder) {\n            const layout = this._inputWrapper.layout;\n            if (value) {\n                this._input.parent = null;\n                if (this._inputPlaceholder) {\n                    this._inputPlaceholder.text = (_a = this.model.sharedModel\n                        .getSource()\n                        .split('\\n')) === null || _a === void 0 ? void 0 : _a[0];\n                }\n                layout.addWidget(this._inputPlaceholder);\n            }\n            else {\n                this._inputPlaceholder.parent = null;\n                layout.addWidget(this._input);\n            }\n        }\n        this._inputHidden = value;\n        if (this.syncCollapse) {\n            this.saveCollapseState();\n        }\n        this.handleInputHidden(value);\n    }\n    /**\n     * Save view collapse state to model\n     */\n    saveCollapseState() {\n        const jupyter = { ...this.model.getMetadata('jupyter') };\n        if ((this.inputHidden && jupyter.source_hidden === true) ||\n            (!this.inputHidden && jupyter.source_hidden === undefined)) {\n            return;\n        }\n        if (this.inputHidden) {\n            jupyter.source_hidden = true;\n        }\n        else {\n            delete jupyter.source_hidden;\n        }\n        if (Object.keys(jupyter).length === 0) {\n            this.model.deleteMetadata('jupyter');\n        }\n        else {\n            this.model.setMetadata('jupyter', jupyter);\n        }\n    }\n    /**\n     * Revert view collapse state from model.\n     */\n    loadCollapseState() {\n        var _a;\n        const jupyter = (_a = this.model.getMetadata('jupyter')) !== null && _a !== void 0 ? _a : {};\n        this.inputHidden = !!jupyter.source_hidden;\n    }\n    /**\n     * Handle the input being hidden.\n     *\n     * #### Notes\n     * This is called by the `inputHidden` setter so that subclasses\n     * can perform actions upon the input being hidden without accessing\n     * private state.\n     */\n    handleInputHidden(value) {\n        return;\n    }\n    /**\n     * Whether to sync the collapse state to the cell model.\n     */\n    get syncCollapse() {\n        return this._syncCollapse;\n    }\n    set syncCollapse(value) {\n        if (this._syncCollapse === value) {\n            return;\n        }\n        this._syncCollapse = value;\n        if (value) {\n            this.loadCollapseState();\n        }\n    }\n    /**\n     * Whether to sync the editable state to the cell model.\n     */\n    get syncEditable() {\n        return this._syncEditable;\n    }\n    set syncEditable(value) {\n        if (this._syncEditable === value) {\n            return;\n        }\n        this._syncEditable = value;\n        if (value) {\n            this.loadEditableState();\n        }\n    }\n    /**\n     * Clone the cell, using the same model.\n     */\n    clone() {\n        const constructor = this.constructor;\n        return new constructor({\n            model: this.model,\n            contentFactory: this.contentFactory,\n            placeholder: false,\n            translator: this.translator\n        });\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        // Do nothing if already disposed.\n        if (this.isDisposed) {\n            return;\n        }\n        this._resizeDebouncer.dispose();\n        this._input = null;\n        this._model = null;\n        this._inputWrapper = null;\n        this._inputPlaceholder = null;\n        super.dispose();\n    }\n    /**\n     * Update the editor configuration with the partial provided dictionary.\n     *\n     * @param v Partial editor configuration\n     */\n    updateEditorConfig(v) {\n        this._editorConfig = { ...this._editorConfig, ...v };\n        if (this.editor) {\n            this.editor.setBaseOptions(this._editorConfig);\n        }\n    }\n    /**\n     * Signal emitted when cell requests scrolling to its element.\n     */\n    get scrollRequested() {\n        return this._scrollRequested;\n    }\n    /**\n     * Create children widgets.\n     */\n    initializeDOM() {\n        if (!this.placeholder) {\n            return;\n        }\n        const contentFactory = this.contentFactory;\n        const model = this._model;\n        // Header\n        const header = contentFactory.createCellHeader();\n        header.addClass(CELL_HEADER_CLASS);\n        this.layout.addWidget(header);\n        // Input\n        const inputWrapper = (this._inputWrapper = new Panel());\n        inputWrapper.addClass(CELL_INPUT_WRAPPER_CLASS);\n        const inputCollapser = new InputCollapser();\n        inputCollapser.addClass(CELL_INPUT_COLLAPSER_CLASS);\n        const input = (this._input = new InputArea({\n            model,\n            contentFactory,\n            editorOptions: this.getEditorOptions()\n        }));\n        input.addClass(CELL_INPUT_AREA_CLASS);\n        inputWrapper.addWidget(inputCollapser);\n        inputWrapper.addWidget(input);\n        this.layout.addWidget(inputWrapper);\n        this._inputPlaceholder = new InputPlaceholder({\n            callback: () => {\n                this.inputHidden = !this.inputHidden;\n            },\n            text: input.model.sharedModel.getSource().split('\\n')[0],\n            translator: this.translator\n        });\n        input.model.contentChanged.connect((sender, args) => {\n            var _a;\n            if (this._inputPlaceholder && this.inputHidden) {\n                this._inputPlaceholder.text = (_a = sender.sharedModel\n                    .getSource()\n                    .split('\\n')) === null || _a === void 0 ? void 0 : _a[0];\n            }\n        });\n        if (this.inputHidden) {\n            input.parent = null;\n            inputWrapper.layout.addWidget(this._inputPlaceholder);\n        }\n        // Footer\n        const footer = this.contentFactory.createCellFooter();\n        footer.addClass(CELL_FOOTER_CLASS);\n        this.layout.addWidget(footer);\n    }\n    /**\n     * Get the editor options at initialization.\n     *\n     * @returns Editor options\n     */\n    getEditorOptions() {\n        return { config: this.editorConfig, extensions: this._editorExtensions };\n    }\n    /**\n     * Handle `before-attach` messages.\n     */\n    onBeforeAttach(msg) {\n        if (this.placeholder) {\n            this.placeholder = false;\n        }\n    }\n    /**\n     * Handle `after-attach` messages.\n     */\n    onAfterAttach(msg) {\n        this.update();\n    }\n    /**\n     * Handle `'activate-request'` messages.\n     */\n    onActivateRequest(msg) {\n        var _a;\n        (_a = this.editor) === null || _a === void 0 ? void 0 : _a.focus();\n    }\n    /**\n     * Handle `resize` messages.\n     */\n    onResize(msg) {\n        void this._resizeDebouncer.invoke();\n    }\n    /**\n     * Handle `update-request` messages.\n     */\n    onUpdateRequest(msg) {\n        var _a, _b;\n        if (!this._model) {\n            return;\n        }\n        // Handle read only state.\n        if (((_a = this.editor) === null || _a === void 0 ? void 0 : _a.getOption('readOnly')) !== this._readOnly) {\n            (_b = this.editor) === null || _b === void 0 ? void 0 : _b.setOption('readOnly', this._readOnly);\n        }\n    }\n    onContentChanged() {\n        var _a;\n        if (this.inputHidden && this._inputPlaceholder) {\n            this._inputPlaceholder.text = (_a = this.model.sharedModel\n                .getSource()\n                .split('\\n')) === null || _a === void 0 ? void 0 : _a[0];\n        }\n    }\n    /**\n     * Handle changes in the metadata.\n     */\n    onMetadataChanged(model, args) {\n        switch (args.key) {\n            case 'jupyter':\n                if (this.syncCollapse) {\n                    this.loadCollapseState();\n                }\n                break;\n            case 'editable':\n                if (this.syncEditable) {\n                    this.loadEditableState();\n                }\n                break;\n            default:\n                break;\n        }\n    }\n}\n/**\n * The namespace for the `Cell` class statics.\n */\n(function (Cell) {\n    /**\n     * Type of headings\n     */\n    let HeadingType;\n    (function (HeadingType) {\n        /**\n         * Heading from HTML output\n         */\n        HeadingType[HeadingType[\"HTML\"] = 0] = \"HTML\";\n        /**\n         * Heading from Markdown cell or Markdown output\n         */\n        HeadingType[HeadingType[\"Markdown\"] = 1] = \"Markdown\";\n    })(HeadingType = Cell.HeadingType || (Cell.HeadingType = {}));\n    /**\n     * The default implementation of an `IContentFactory`.\n     *\n     * This includes a CodeMirror editor factory to make it easy to use out of the box.\n     */\n    class ContentFactory {\n        /**\n         * Create a content factory for a cell.\n         */\n        constructor(options) {\n            this._editorFactory = options.editorFactory;\n        }\n        /**\n         * The readonly editor factory that create code editors\n         */\n        get editorFactory() {\n            return this._editorFactory;\n        }\n        /**\n         * Create a new cell header for the parent widget.\n         */\n        createCellHeader() {\n            return new CellHeader();\n        }\n        /**\n         * Create a new cell footer for the parent widget.\n         */\n        createCellFooter() {\n            return new CellFooter();\n        }\n        /**\n         * Create an input prompt.\n         */\n        createInputPrompt() {\n            return new InputPrompt();\n        }\n        /**\n         * Create the output prompt for the widget.\n         */\n        createOutputPrompt() {\n            return new OutputPrompt();\n        }\n        /**\n         * Create an stdin widget.\n         */\n        createStdin(options) {\n            return new Stdin(options);\n        }\n    }\n    Cell.ContentFactory = ContentFactory;\n})(Cell || (Cell = {}));\n/** ****************************************************************************\n * CodeCell\n ******************************************************************************/\n/**\n * Code cell layout\n *\n * It will not detached the output area when the cell is detached.\n */\nexport class CodeCellLayout extends PanelLayout {\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     *\n     * #### Notes\n     * The default implementation of this method forwards the message\n     * to all widgets. It assumes all widget nodes are attached to the\n     * parent widget node.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onBeforeAttach(msg) {\n        let beforeOutputArea = true;\n        const outputAreaWrapper = this.parent.node.firstElementChild;\n        for (const widget of this) {\n            if (outputAreaWrapper) {\n                if (widget.node === outputAreaWrapper) {\n                    beforeOutputArea = false;\n                }\n                else {\n                    MessageLoop.sendMessage(widget, msg);\n                    if (beforeOutputArea) {\n                        this.parent.node.insertBefore(widget.node, outputAreaWrapper);\n                    }\n                    else {\n                        this.parent.node.appendChild(widget.node);\n                    }\n                    // Force setting isVisible to true as it requires the parent widget to be\n                    // visible. But that flag will be set only during the `onAfterAttach` call.\n                    if (!this.parent.isHidden) {\n                        widget.setFlag(Widget.Flag.IsVisible);\n                    }\n                    // Not called in NotebookWindowedLayout to avoid outputArea\n                    // widgets unwanted update or reset.\n                    MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n                }\n            }\n        }\n    }\n    /**\n     * A message handler invoked on an `'after-detach'` message.\n     *\n     * #### Notes\n     * The default implementation of this method forwards the message\n     * to all widgets. It assumes all widget nodes are attached to the\n     * parent widget node.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onAfterDetach(msg) {\n        for (const widget of this) {\n            // TODO we could improve this further by removing outputs based\n            // on their mime type (for example plain/text or markdown could safely be detached)\n            // If the cell is out of the view port, its children are already detached -> skip detaching\n            if (!widget.hasClass(CELL_OUTPUT_WRAPPER_CLASS) &&\n                widget.node.isConnected) {\n                // Not called in NotebookWindowedLayout for windowed notebook\n                MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n                this.parent.node.removeChild(widget.node);\n                MessageLoop.sendMessage(widget, msg);\n            }\n        }\n    }\n}\n/**\n * A widget for a code cell.\n */\nexport class CodeCell extends Cell {\n    /**\n     * Construct a code cell widget.\n     */\n    constructor(options) {\n        var _a;\n        super({ layout: new CodeCellLayout(), ...options, placeholder: true });\n        /**\n         * Detect the movement of the caret in the output area.\n         *\n         * Emits scroll request if the caret moved.\n         */\n        this._detectCaretMovementInOuput = (e) => {\n            const inWindowedContainer = this._inViewport !== null;\n            const defaultPrevented = inWindowedContainer && !this._inViewport;\n            // Because we do not want to scroll on any key, but only on keys which\n            // move the caret (this on keys which cause input and on keys like left,\n            // right, top, bottom arrow, home, end, page down/up - but only if the\n            // cursor is not at the respective end of the input) we need to listen\n            // to the `selectionchange` event on target inputs/textareas, etc.\n            const target = e.target;\n            if (!target || !(target instanceof HTMLElement)) {\n                return;\n            }\n            // Make sure the previous listener gets disconnected\n            if (this._lastTarget) {\n                this._lastTarget.removeEventListener('selectionchange', this._lastOnCaretMovedHandler);\n                document.removeEventListener('selectionchange', this._lastOnCaretMovedHandler);\n            }\n            const onCaretMoved = () => {\n                this._scrollRequested.emit({\n                    scrollWithinCell: ({ scroller }) => {\n                        ElementExt.scrollIntoViewIfNeeded(scroller, target);\n                    },\n                    defaultPrevented\n                });\n            };\n            // Remember the most recent target/handler to disconnect them next time.\n            this._lastTarget = target;\n            this._lastOnCaretMovedHandler = onCaretMoved;\n            // Firefox only supports `selectionchange` on the actual input element,\n            // all other browsers only support it on the top-level document.\n            target.addEventListener('selectionchange', onCaretMoved, { once: true });\n            document.addEventListener('selectionchange', onCaretMoved, {\n                once: true\n            });\n            // Schedule removal of the listener.\n            setTimeout(() => {\n                target.removeEventListener('selectionchange', onCaretMoved);\n                document.removeEventListener('selectionchange', onCaretMoved);\n            }, 250);\n        };\n        this._headingsCache = null;\n        this._outputHidden = false;\n        this._outputWrapper = null;\n        this._outputPlaceholder = null;\n        this._syncScrolled = false;\n        this._lastTarget = null;\n        this._lastOutputHeight = '';\n        this.addClass(CODE_CELL_CLASS);\n        const trans = this.translator.load('jupyterlab');\n        // Only save options not handled by parent constructor.\n        const rendermime = (this._rendermime = options.rendermime);\n        const contentFactory = this.contentFactory;\n        const model = this.model;\n        this.maxNumberOutputs = options.maxNumberOutputs;\n        // Note that modifying the below label warrants one to also modify\n        // the same in this._outputLengthHandler. Ideally, this label must\n        // have been a constant and used in both places but it is not done\n        // so because of limitations in the translation manager.\n        const ariaLabel = model.outputs.length === 0\n            ? trans.__('Code Cell Content')\n            : trans.__('Code Cell Content with Output');\n        this.node.setAttribute('aria-label', ariaLabel);\n        const output = (this._output = new OutputArea({\n            model: this.model.outputs,\n            rendermime,\n            contentFactory: contentFactory,\n            maxNumberOutputs: this.maxNumberOutputs,\n            translator: this.translator,\n            promptOverlay: true,\n            inputHistoryScope: options.inputHistoryScope,\n            showInputPlaceholder: options.showInputPlaceholder\n        }));\n        output.node.addEventListener('keydown', this._detectCaretMovementInOuput);\n        output.addClass(CELL_OUTPUT_AREA_CLASS);\n        output.toggleScrolling.connect(() => {\n            this.outputsScrolled = !this.outputsScrolled;\n        });\n        output.initialize.connect(() => {\n            this.updatePromptOverlayIcon();\n        });\n        // Defer setting placeholder as OutputArea must be instantiated before initializing the DOM\n        this.placeholder = (_a = options.placeholder) !== null && _a !== void 0 ? _a : true;\n        model.outputs.changed.connect(this.onOutputChanged, this);\n        model.outputs.stateChanged.connect(this.onOutputChanged, this);\n        model.stateChanged.connect(this.onStateChanged, this);\n    }\n    /**\n     * Create children widgets.\n     */\n    initializeDOM() {\n        if (!this.placeholder) {\n            return;\n        }\n        super.initializeDOM();\n        this._updatePrompt();\n        // Insert the output before the cell footer.\n        const outputWrapper = (this._outputWrapper = new Panel());\n        outputWrapper.addClass(CELL_OUTPUT_WRAPPER_CLASS);\n        const outputCollapser = new OutputCollapser();\n        outputCollapser.addClass(CELL_OUTPUT_COLLAPSER_CLASS);\n        outputWrapper.addWidget(outputCollapser);\n        // Set a CSS if there are no outputs, and connect a signal for future\n        // changes to the number of outputs. This is for conditional styling\n        // if there are no outputs.\n        if (this.model.outputs.length === 0) {\n            this.addClass(NO_OUTPUTS_CLASS);\n        }\n        this._output.outputLengthChanged.connect(this._outputLengthHandler, this);\n        outputWrapper.addWidget(this._output);\n        const layout = this.layout;\n        const resizeHandle = new ResizeHandle(this.node);\n        resizeHandle.sizeChanged.connect(this._sizeChangedHandler, this);\n        layout.insertWidget(layout.widgets.length - 1, resizeHandle);\n        layout.insertWidget(layout.widgets.length - 1, outputWrapper);\n        if (this.model.isDirty) {\n            this.addClass(DIRTY_CLASS);\n        }\n        this._outputPlaceholder = new OutputPlaceholder({\n            callback: () => {\n                this.outputHidden = !this.outputHidden;\n            },\n            text: this.getOutputPlaceholderText(),\n            translator: this.translator\n        });\n        const layoutWrapper = outputWrapper.layout;\n        if (this.outputHidden) {\n            layoutWrapper.removeWidget(this._output);\n            layoutWrapper.addWidget(this._outputPlaceholder);\n            if (this.inputHidden && !outputWrapper.isHidden) {\n                this._outputWrapper.hide();\n            }\n        }\n        const trans = this.translator.load('jupyterlab');\n        const ariaLabel = this.model.outputs.length === 0\n            ? trans.__('Code Cell Content')\n            : trans.__('Code Cell Content with Output');\n        this.node.setAttribute('aria-label', ariaLabel);\n    }\n    getOutputPlaceholderText() {\n        var _a;\n        const firstOutput = this.model.outputs.get(0);\n        const outputData = firstOutput === null || firstOutput === void 0 ? void 0 : firstOutput.data;\n        if (!outputData) {\n            return undefined;\n        }\n        const supportedOutputTypes = [\n            'text/html',\n            'image/svg+xml',\n            'application/pdf',\n            'text/markdown',\n            'text/plain',\n            'application/vnd.jupyter.stderr',\n            'application/vnd.jupyter.stdout',\n            'text'\n        ];\n        const preferredOutput = supportedOutputTypes.find(mt => {\n            const data = firstOutput.data[mt];\n            return (Array.isArray(data) ? typeof data[0] : typeof data) === 'string';\n        });\n        const dataToDisplay = firstOutput.data[preferredOutput !== null && preferredOutput !== void 0 ? preferredOutput : ''];\n        if (dataToDisplay !== undefined) {\n            return (_a = (Array.isArray(dataToDisplay)\n                ? dataToDisplay\n                : dataToDisplay === null || dataToDisplay === void 0 ? void 0 : dataToDisplay.split('\\n'))) === null || _a === void 0 ? void 0 : _a.find(part => part !== '');\n        }\n        return undefined;\n    }\n    /**\n     * Initialize view state from model.\n     *\n     * #### Notes\n     * Should be called after construction. For convenience, returns this, so it\n     * can be chained in the construction, like `new Foo().initializeState();`\n     */\n    initializeState() {\n        super.initializeState();\n        this.loadScrolledState();\n        this._updatePrompt();\n        return this;\n    }\n    get headings() {\n        if (!this._headingsCache) {\n            const headings = [];\n            // Iterate over the code cell outputs to check for Markdown or HTML from which we can generate ToC headings...\n            const outputs = this.model.outputs;\n            for (let j = 0; j < outputs.length; j++) {\n                const m = outputs.get(j);\n                let htmlType = null;\n                let mdType = null;\n                Object.keys(m.data).forEach(t => {\n                    if (!mdType && TableOfContentsUtils.Markdown.isMarkdown(t)) {\n                        mdType = t;\n                    }\n                    else if (!htmlType && TableOfContentsUtils.isHTML(t)) {\n                        htmlType = t;\n                    }\n                });\n                // Parse HTML output\n                if (htmlType) {\n                    let htmlData = m.data[htmlType];\n                    if (typeof htmlData !== 'string') {\n                        htmlData = htmlData.join('\\n');\n                    }\n                    headings.push(...TableOfContentsUtils.getHTMLHeadings(this._rendermime.sanitizer.sanitize(htmlData)).map(heading => {\n                        return {\n                            ...heading,\n                            outputIndex: j,\n                            type: Cell.HeadingType.HTML\n                        };\n                    }));\n                }\n                else if (mdType) {\n                    headings.push(...TableOfContentsUtils.Markdown.getHeadings(m.data[mdType]).map(heading => {\n                        return {\n                            ...heading,\n                            outputIndex: j,\n                            type: Cell.HeadingType.Markdown\n                        };\n                    }));\n                }\n            }\n            this._headingsCache = headings;\n        }\n        return [...this._headingsCache];\n    }\n    /**\n     * Get the output area for the cell.\n     */\n    get outputArea() {\n        return this._output;\n    }\n    /**\n     * The view state of output being collapsed.\n     */\n    get outputHidden() {\n        return this._outputHidden;\n    }\n    set outputHidden(value) {\n        var _a;\n        if (this._outputHidden === value) {\n            return;\n        }\n        if (!this.placeholder) {\n            const layout = this._outputWrapper.layout;\n            if (value) {\n                layout.removeWidget(this._output);\n                layout.addWidget(this._outputPlaceholder);\n                if (this.inputHidden && !this._outputWrapper.isHidden) {\n                    this._outputWrapper.hide();\n                }\n                if (this._outputPlaceholder) {\n                    this._outputPlaceholder.text = (_a = this.getOutputPlaceholderText()) !== null && _a !== void 0 ? _a : '';\n                }\n            }\n            else {\n                if (this._outputWrapper.isHidden) {\n                    this._outputWrapper.show();\n                }\n                layout.removeWidget(this._outputPlaceholder);\n                layout.addWidget(this._output);\n            }\n        }\n        this._outputHidden = value;\n        if (this.syncCollapse) {\n            this.saveCollapseState();\n        }\n    }\n    /**\n     * Save view collapse state to model\n     */\n    saveCollapseState() {\n        // Because collapse state for a code cell involves two different pieces of\n        // metadata (the `collapsed` and `jupyter` metadata keys), we block reacting\n        // to changes in metadata until we have fully committed our changes.\n        // Otherwise setting one key can trigger a write to the other key to\n        // maintain the synced consistency.\n        this.model.sharedModel.transact(() => {\n            super.saveCollapseState();\n            const collapsed = this.model.getMetadata('collapsed');\n            if ((this.outputHidden && collapsed === true) ||\n                (!this.outputHidden && collapsed === undefined)) {\n                return;\n            }\n            // Do not set jupyter.outputs_hidden since it is redundant. See\n            // and https://github.com/jupyter/nbformat/issues/137\n            if (this.outputHidden) {\n                this.model.setMetadata('collapsed', true);\n            }\n            else {\n                this.model.deleteMetadata('collapsed');\n            }\n        }, false, 'silent-change');\n    }\n    /**\n     * Revert view collapse state from model.\n     *\n     * We consider the `collapsed` metadata key as the source of truth for outputs\n     * being hidden.\n     */\n    loadCollapseState() {\n        super.loadCollapseState();\n        this.outputHidden = !!this.model.getMetadata('collapsed');\n    }\n    /**\n     * Whether the output is in a scrolled state?\n     */\n    get outputsScrolled() {\n        return this._outputsScrolled;\n    }\n    set outputsScrolled(value) {\n        this.toggleClass('jp-mod-outputsScrolled', value);\n        this._outputsScrolled = value;\n        if (this.syncScrolled) {\n            this.saveScrolledState();\n        }\n        this.updatePromptOverlayIcon();\n    }\n    /**\n     * Update the Prompt Overlay Icon\n     */\n    updatePromptOverlayIcon() {\n        var _a;\n        const overlay = DOMUtils.findElement(this.node, 'jp-OutputArea-promptOverlay');\n        if (!overlay) {\n            return;\n        }\n        // If you are changing this, don't forget about svg.\n        const ICON_HEIGHT = 16 + 4 + 4; // 4px for padding\n        if (overlay.clientHeight <= ICON_HEIGHT) {\n            (_a = overlay.firstChild) === null || _a === void 0 ? void 0 : _a.remove();\n            return;\n        }\n        let overlayTitle;\n        if (this._outputsScrolled) {\n            expandIcon.element({\n                container: overlay\n            });\n            overlayTitle = 'Expand Output';\n        }\n        else {\n            collapseIcon.element({\n                container: overlay\n            });\n            overlayTitle = 'Collapse Output';\n        }\n        const trans = this.translator.load('jupyterlab');\n        overlay.title = trans.__(overlayTitle);\n    }\n    /**\n     * Save view collapse state to model\n     */\n    saveScrolledState() {\n        const current = this.model.getMetadata('scrolled');\n        if ((this.outputsScrolled && current === true) ||\n            (!this.outputsScrolled && current === undefined)) {\n            return;\n        }\n        if (this.outputsScrolled) {\n            this.model.setMetadata('scrolled', true);\n        }\n        else {\n            this.outputArea.node.style.height = '';\n            this.model.deleteMetadata('scrolled');\n        }\n    }\n    /**\n     * Revert view collapse state from model.\n     */\n    loadScrolledState() {\n        // We don't have the notion of 'auto' scrolled, so we make it false.\n        if (this.model.getMetadata('scrolled') === 'auto') {\n            this.outputsScrolled = false;\n        }\n        else {\n            this.outputsScrolled = !!this.model.getMetadata('scrolled');\n        }\n    }\n    /**\n     * Whether to sync the scrolled state to the cell model.\n     */\n    get syncScrolled() {\n        return this._syncScrolled;\n    }\n    set syncScrolled(value) {\n        if (this._syncScrolled === value) {\n            return;\n        }\n        this._syncScrolled = value;\n        if (value) {\n            this.loadScrolledState();\n        }\n    }\n    /**\n     * Handle the input being hidden.\n     *\n     * #### Notes\n     * This method is called by the case cell implementation and is\n     * subclasses here so the code cell can watch to see when input\n     * is hidden without accessing private state.\n     */\n    handleInputHidden(value) {\n        if (this.placeholder) {\n            return;\n        }\n        if (!value && this._outputWrapper.isHidden) {\n            this._outputWrapper.show();\n        }\n        else if (value && !this._outputWrapper.isHidden && this._outputHidden) {\n            this._outputWrapper.hide();\n        }\n    }\n    /**\n     * Clone the cell, using the same model.\n     */\n    clone() {\n        const constructor = this.constructor;\n        return new constructor({\n            model: this.model,\n            contentFactory: this.contentFactory,\n            rendermime: this._rendermime,\n            placeholder: false,\n            translator: this.translator\n        });\n    }\n    /**\n     * Clone the OutputArea alone, returning a simplified output area, using the same model.\n     */\n    cloneOutputArea() {\n        return new SimplifiedOutputArea({\n            model: this.model.outputs,\n            contentFactory: this.contentFactory,\n            rendermime: this._rendermime\n        });\n    }\n    /**\n     * Dispose of the resources used by the widget.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._output.outputLengthChanged.disconnect(this._outputLengthHandler, this);\n        this._output.node.removeEventListener('keydown', this._detectCaretMovementInOuput);\n        this._rendermime = null;\n        this._output = null;\n        this._outputWrapper = null;\n        this._outputPlaceholder = null;\n        super.dispose();\n    }\n    /**\n     * Handle changes in the model.\n     */\n    onStateChanged(model, args) {\n        switch (args.name) {\n            case 'executionCount':\n                if (args.newValue !== null) {\n                    // Mark execution state if execution count was set.\n                    this.model.executionState = 'idle';\n                }\n                this._updatePrompt();\n                break;\n            case 'executionState':\n                this._updatePrompt();\n                break;\n            case 'isDirty':\n                if (model.isDirty) {\n                    this.addClass(DIRTY_CLASS);\n                }\n                else {\n                    this.removeClass(DIRTY_CLASS);\n                }\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Callback on output changes\n     */\n    onOutputChanged() {\n        var _a;\n        this._headingsCache = null;\n        if (this._outputPlaceholder && this.outputHidden) {\n            this._outputPlaceholder.text = (_a = this.getOutputPlaceholderText()) !== null && _a !== void 0 ? _a : '';\n        }\n        // This is to hide/show icon on single line output.\n        this.updatePromptOverlayIcon();\n        // Clear output area when empty\n        const height = this.outputArea.node.style.height;\n        if (this.model.outputs.length === 0 && height !== '') {\n            this._lastOutputHeight = height;\n            this.outputArea.node.style.height = '';\n        }\n        else if (this.model.outputs.length > 0 && height === '') {\n            this.outputArea.node.style.height = this._lastOutputHeight;\n        }\n    }\n    /**\n     * Handle changes in the metadata.\n     */\n    onMetadataChanged(model, args) {\n        switch (args.key) {\n            case 'scrolled':\n                if (this.syncScrolled) {\n                    this.loadScrolledState();\n                }\n                break;\n            case 'collapsed':\n                if (this.syncCollapse) {\n                    this.loadCollapseState();\n                }\n                break;\n            default:\n                break;\n        }\n        super.onMetadataChanged(model, args);\n    }\n    _updatePrompt() {\n        let prompt;\n        if (this.model.executionState == 'running') {\n            prompt = '*';\n        }\n        else {\n            prompt = `${this.model.executionCount || ''}`;\n        }\n        this._setPrompt(prompt);\n    }\n    /**\n     * Handle changes in the number of outputs in the output area.\n     */\n    _outputLengthHandler(sender, args) {\n        const force = args === 0 ? true : false;\n        this.toggleClass(NO_OUTPUTS_CLASS, force);\n        const trans = this.translator.load('jupyterlab');\n        const ariaLabel = force\n            ? trans.__('Code Cell Content')\n            : trans.__('Code Cell Content with Output');\n        this.node.setAttribute('aria-label', ariaLabel);\n    }\n    /**\n     * Handle changes in input/output proportions in side-by-side mode.\n     */\n    _sizeChangedHandler(sender) {\n        this._displayChanged.emit();\n    }\n}\n/**\n * The namespace for the `CodeCell` class statics.\n */\n(function (CodeCell) {\n    /**\n     * Execute a cell given a client session.\n     */\n    async function execute(cell, sessionContext, metadata) {\n        var _a;\n        const model = cell.model;\n        const code = model.sharedModel.getSource();\n        if (!code.trim() || !((_a = sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel)) {\n            model.sharedModel.transact(() => {\n                model.clearExecution();\n            }, false, 'silent-change');\n            return;\n        }\n        const cellId = { cellId: model.sharedModel.getId() };\n        metadata = {\n            ...model.metadata,\n            ...metadata,\n            ...cellId\n        };\n        const { recordTiming } = metadata;\n        model.sharedModel.transact(() => {\n            model.clearExecution();\n            cell.outputHidden = false;\n        }, false, 'silent-change');\n        // note: in future we would like to distinguish running from scheduled\n        model.executionState = 'running';\n        model.trusted = true;\n        let future;\n        try {\n            const msgPromise = OutputArea.execute(code, cell.outputArea, sessionContext, metadata);\n            // cell.outputArea.future assigned synchronously in `execute`\n            if (recordTiming) {\n                const recordTimingHook = (msg) => {\n                    let label;\n                    switch (msg.header.msg_type) {\n                        case 'status':\n                            label = `status.${msg.content.execution_state}`;\n                            break;\n                        case 'execute_input':\n                            label = 'execute_input';\n                            break;\n                        default:\n                            return true;\n                    }\n                    // If the data is missing, estimate it to now\n                    // Date was added in 5.1: https://jupyter-client.readthedocs.io/en/stable/messaging.html#message-header\n                    const value = msg.header.date || new Date().toISOString();\n                    const timingInfo = Object.assign({}, model.getMetadata('execution'));\n                    timingInfo[`iopub.${label}`] = value;\n                    model.setMetadata('execution', timingInfo);\n                    return true;\n                };\n                cell.outputArea.future.registerMessageHook(recordTimingHook);\n            }\n            else {\n                model.deleteMetadata('execution');\n            }\n            // Save this execution's future so we can compare in the catch below.\n            future = cell.outputArea.future;\n            const msg = (await msgPromise);\n            model.executionCount = msg.content.execution_count;\n            if (recordTiming) {\n                const timingInfo = Object.assign({}, model.getMetadata('execution'));\n                const started = msg.metadata.started;\n                // Started is not in the API, but metadata IPyKernel sends\n                if (started) {\n                    timingInfo['shell.execute_reply.started'] = started;\n                }\n                // Per above, the 5.0 spec does not assume date, so we estimate is required\n                const finished = msg.header.date;\n                timingInfo['shell.execute_reply'] =\n                    finished || new Date().toISOString();\n                model.setMetadata('execution', timingInfo);\n            }\n            return msg;\n        }\n        catch (e) {\n            // If we started executing, and the cell is still indicating this\n            // execution, clear the prompt.\n            if (future && !cell.isDisposed && cell.outputArea.future === future) {\n                cell.model.executionState = 'idle';\n                if (recordTiming && future.isDisposed) {\n                    // Record the time when the cell execution was aborted\n                    const timingInfo = Object.assign({}, model.getMetadata('execution'));\n                    timingInfo['execution_failed'] = new Date().toISOString();\n                    model.setMetadata('execution', timingInfo);\n                }\n            }\n            throw e;\n        }\n    }\n    CodeCell.execute = execute;\n})(CodeCell || (CodeCell = {}));\n/**\n * `AttachmentsCell` - A base class for a cell widget that allows\n *  attachments to be drag/drop'd or pasted onto it\n */\nexport class AttachmentsCell extends Cell {\n    /**\n     * Handle the DOM events for the widget.\n     *\n     * @param event - The DOM event sent to the widget.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the notebook panel's node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'lm-dragover':\n                this._evtDragOver(event);\n                break;\n            case 'lm-drop':\n                this._evtDrop(event);\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Get the editor options at initialization.\n     *\n     * @returns Editor options\n     */\n    getEditorOptions() {\n        var _a, _b;\n        const base = (_a = super.getEditorOptions()) !== null && _a !== void 0 ? _a : {};\n        base.extensions = [\n            ...((_b = base.extensions) !== null && _b !== void 0 ? _b : []),\n            EditorView.domEventHandlers({\n                dragenter: (event) => {\n                    event.preventDefault();\n                },\n                dragover: (event) => {\n                    event.preventDefault();\n                },\n                drop: (event) => {\n                    this._evtNativeDrop(event);\n                },\n                paste: (event) => {\n                    this._evtPaste(event);\n                }\n            })\n        ];\n        return base;\n    }\n    /**\n     * Handle `after-attach` messages for the widget.\n     */\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        const node = this.node;\n        node.addEventListener('lm-dragover', this);\n        node.addEventListener('lm-drop', this);\n    }\n    /**\n     * A message handler invoked on a `'before-detach'`\n     * message\n     */\n    onBeforeDetach(msg) {\n        const node = this.node;\n        node.removeEventListener('lm-dragover', this);\n        node.removeEventListener('lm-drop', this);\n        super.onBeforeDetach(msg);\n    }\n    _evtDragOver(event) {\n        const supportedMimeType = some(imageRendererFactory.mimeTypes, mimeType => {\n            if (!event.mimeData.hasData(CONTENTS_MIME_RICH)) {\n                return false;\n            }\n            const data = event.mimeData.getData(CONTENTS_MIME_RICH);\n            return data.model.mimetype === mimeType;\n        });\n        if (!supportedMimeType) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        event.dropAction = event.proposedAction;\n    }\n    /**\n     * Handle the `paste` event for the widget\n     */\n    _evtPaste(event) {\n        var _a;\n        const isEditable = (_a = this.model.getMetadata('editable')) !== null && _a !== void 0 ? _a : true;\n        if (event.clipboardData && isEditable) {\n            const items = event.clipboardData.items;\n            for (let i = 0; i < items.length; i++) {\n                if (items[i].type === 'text/plain') {\n                    // Skip if this text is the path to a file\n                    if (i < items.length - 1 && items[i + 1].kind === 'file') {\n                        continue;\n                    }\n                    items[i].getAsString(text => {\n                        var _a, _b;\n                        (_b = (_a = this.editor).replaceSelection) === null || _b === void 0 ? void 0 : _b.call(_a, text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n'));\n                    });\n                }\n                this._attachFiles(event.clipboardData.items);\n            }\n        }\n        event.preventDefault();\n    }\n    /**\n     * Handle the `drop` event for the widget\n     */\n    _evtNativeDrop(event) {\n        if (event.dataTransfer) {\n            this._attachFiles(event.dataTransfer.items);\n        }\n        event.preventDefault();\n    }\n    /**\n     * Handle the `'lm-drop'` event for the widget.\n     */\n    _evtDrop(event) {\n        const supportedMimeTypes = event.mimeData.types().filter(mimeType => {\n            if (mimeType === CONTENTS_MIME_RICH) {\n                const data = event.mimeData.getData(CONTENTS_MIME_RICH);\n                return (imageRendererFactory.mimeTypes.indexOf(data.model.mimetype) !== -1);\n            }\n            return imageRendererFactory.mimeTypes.indexOf(mimeType) !== -1;\n        });\n        if (supportedMimeTypes.length === 0) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        if (event.proposedAction === 'none') {\n            event.dropAction = 'none';\n            return;\n        }\n        event.dropAction = 'copy';\n        for (const mimeType of supportedMimeTypes) {\n            if (mimeType === CONTENTS_MIME_RICH) {\n                const { model, withContent } = event.mimeData.getData(CONTENTS_MIME_RICH);\n                if (model.type === 'file') {\n                    const URI = this._generateURI(model.name);\n                    this.updateCellSourceWithAttachment(model.name, URI);\n                    void withContent().then(fullModel => {\n                        this.model.attachments.set(URI, {\n                            [fullModel.mimetype]: fullModel.content\n                        });\n                    });\n                }\n            }\n            else {\n                // Pure mimetype, no useful name to infer\n                const URI = this._generateURI();\n                this.model.attachments.set(URI, {\n                    [mimeType]: event.mimeData.getData(mimeType)\n                });\n                this.updateCellSourceWithAttachment(URI, URI);\n            }\n        }\n    }\n    /**\n     * Attaches all DataTransferItems (obtained from\n     * clipboard or native drop events) to the cell\n     */\n    _attachFiles(items) {\n        for (let i = 0; i < items.length; i++) {\n            const item = items[i];\n            if (item.kind === 'file') {\n                const blob = item.getAsFile();\n                if (blob) {\n                    this._attachFile(blob);\n                }\n            }\n        }\n    }\n    /**\n     * Takes in a file object and adds it to\n     * the cell attachments\n     */\n    _attachFile(blob) {\n        const reader = new FileReader();\n        reader.onload = evt => {\n            const { href, protocol } = URLExt.parse(reader.result);\n            if (protocol !== 'data:') {\n                return;\n            }\n            const dataURIRegex = /([\\w+\\/\\+]+)?(?:;(charset=[\\w\\d-]*|base64))?,(.*)/;\n            const matches = dataURIRegex.exec(href);\n            if (!matches || matches.length !== 4) {\n                return;\n            }\n            const mimeType = matches[1];\n            const encodedData = matches[3];\n            const bundle = { [mimeType]: encodedData };\n            const URI = this._generateURI(blob.name);\n            if (mimeType.startsWith('image/')) {\n                this.model.attachments.set(URI, bundle);\n                this.updateCellSourceWithAttachment(blob.name, URI);\n            }\n        };\n        reader.onerror = evt => {\n            console.error(`Failed to attach ${blob.name}` + evt);\n        };\n        reader.readAsDataURL(blob);\n    }\n    /**\n     * Generates a unique URI for a file\n     * while preserving the file extension.\n     */\n    _generateURI(name = '') {\n        const lastIndex = name.lastIndexOf('.');\n        return lastIndex !== -1\n            ? UUID.uuid4().concat(name.substring(lastIndex))\n            : UUID.uuid4();\n    }\n}\n/** ****************************************************************************\n * MarkdownCell\n ******************************************************************************/\n/**\n * A widget for a Markdown cell.\n *\n * #### Notes\n * Things get complicated if we want the rendered text to update\n * any time the text changes, the text editor model changes,\n * or the input area model changes.  We don't support automatically\n * updating the rendered text in all of these cases.\n */\nexport class MarkdownCell extends AttachmentsCell {\n    /**\n     * Construct a Markdown cell widget.\n     */\n    constructor(options) {\n        var _a, _b, _c, _d;\n        super({ ...options, placeholder: true });\n        this._headingsCache = null;\n        this._headingCollapsedChanged = new Signal(this);\n        this._prevText = '';\n        this._rendered = true;\n        this._renderedChanged = new Signal(this);\n        this._showEditorForReadOnlyMarkdown = true;\n        this.addClass(MARKDOWN_CELL_CLASS);\n        this.model.contentChanged.connect(this.onContentChanged, this);\n        const trans = this.translator.load('jupyterlab');\n        this.node.setAttribute('aria-label', trans.__('Markdown Cell Content'));\n        // Ensure we can resolve attachments:\n        this._rendermime = options.rendermime.clone({\n            resolver: new AttachmentsResolver({\n                parent: (_a = options.rendermime.resolver) !== null && _a !== void 0 ? _a : undefined,\n                model: this.model.attachments\n            })\n        });\n        this._renderer = this._rendermime.createRenderer('text/markdown');\n        this._renderer.addClass(MARKDOWN_OUTPUT_CLASS);\n        // Check if heading cell is set to be collapsed\n        this._headingCollapsed = ((_b = this.model.getMetadata(MARKDOWN_HEADING_COLLAPSED)) !== null && _b !== void 0 ? _b : false);\n        this._showEditorForReadOnlyMarkdown =\n            (_c = options.showEditorForReadOnlyMarkdown) !== null && _c !== void 0 ? _c : MarkdownCell.defaultShowEditorForReadOnlyMarkdown;\n        // Defer setting placeholder as the renderer must be instantiated before initializing the DOM\n        this.placeholder = (_d = options.placeholder) !== null && _d !== void 0 ? _d : true;\n        this._monitor = new ActivityMonitor({\n            signal: this.model.contentChanged,\n            timeout: RENDER_TIMEOUT\n        });\n        // Throttle the rendering rate of the widget.\n        this.ready\n            .then(() => {\n            if (this.isDisposed) {\n                // Bail early\n                return;\n            }\n            this._monitor.activityStopped.connect(() => {\n                if (this._rendered) {\n                    this.update();\n                }\n            }, this);\n        })\n            .catch(reason => {\n            console.error('Failed to be ready', reason);\n        });\n    }\n    /**\n     * Text that represents the highest heading (i.e. lowest level) if cell is a heading.\n     * Returns empty string if not a heading.\n     */\n    get headingInfo() {\n        // Use table of content algorithm for consistency\n        const headings = this.headings;\n        if (headings.length > 0) {\n            // Return the highest level\n            const { text, level } = headings.reduce((prev, curr) => (prev.level <= curr.level ? prev : curr), headings[0]);\n            return { text, level };\n        }\n        else {\n            return { text: '', level: -1 };\n        }\n    }\n    get headings() {\n        if (!this._headingsCache) {\n            // Use table of content algorithm for consistency\n            const headings = TableOfContentsUtils.Markdown.getHeadings(this.model.sharedModel.getSource());\n            this._headingsCache = headings.map(h => {\n                return { ...h, type: Cell.HeadingType.Markdown };\n            });\n        }\n        return [...this._headingsCache];\n    }\n    /**\n     * Whether the heading is collapsed or not.\n     */\n    get headingCollapsed() {\n        return this._headingCollapsed;\n    }\n    set headingCollapsed(value) {\n        var _a;\n        if (this._headingCollapsed !== value) {\n            this._headingCollapsed = value;\n            if (value) {\n                this.model.setMetadata(MARKDOWN_HEADING_COLLAPSED, value);\n            }\n            else if (this.model.getMetadata(MARKDOWN_HEADING_COLLAPSED) !== 'undefined') {\n                this.model.deleteMetadata(MARKDOWN_HEADING_COLLAPSED);\n            }\n            const collapseButton = (_a = this.inputArea) === null || _a === void 0 ? void 0 : _a.promptNode.getElementsByClassName(HEADING_COLLAPSER_CLASS)[0];\n            if (collapseButton) {\n                if (value) {\n                    collapseButton.classList.add('jp-mod-collapsed');\n                }\n                else {\n                    collapseButton.classList.remove('jp-mod-collapsed');\n                }\n            }\n            this.renderCollapseButtons(this._renderer);\n            this._headingCollapsedChanged.emit(this._headingCollapsed);\n        }\n    }\n    /**\n     * Number of collapsed sub cells.\n     */\n    get numberChildNodes() {\n        return this._numberChildNodes;\n    }\n    set numberChildNodes(value) {\n        this._numberChildNodes = value;\n        this.renderCollapseButtons(this._renderer);\n    }\n    /**\n     * Signal emitted when the cell collapsed state changes.\n     */\n    get headingCollapsedChanged() {\n        return this._headingCollapsedChanged;\n    }\n    /**\n     * Whether the cell is rendered.\n     */\n    get rendered() {\n        return this._rendered;\n    }\n    set rendered(value) {\n        // Show cell as rendered when cell is not editable\n        if (this.readOnly && this._showEditorForReadOnlyMarkdown === false) {\n            value = true;\n        }\n        if (value === this._rendered) {\n            return;\n        }\n        this._rendered = value;\n        this._handleRendered()\n            .then(() => {\n            // If the rendered state changed, raise an event.\n            this._displayChanged.emit();\n            this._renderedChanged.emit(this._rendered);\n        })\n            .catch(reason => {\n            console.error('Failed to render', reason);\n        });\n    }\n    /**\n     * Signal emitted when the markdown cell rendered state changes\n     */\n    get renderedChanged() {\n        return this._renderedChanged;\n    }\n    /*\n     * Whether the Markdown editor is visible in read-only mode.\n     */\n    get showEditorForReadOnly() {\n        return this._showEditorForReadOnlyMarkdown;\n    }\n    set showEditorForReadOnly(value) {\n        this._showEditorForReadOnlyMarkdown = value;\n        if (value === false) {\n            this.rendered = true;\n        }\n    }\n    /**\n     * Renderer\n     */\n    get renderer() {\n        return this._renderer;\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._monitor.dispose();\n        super.dispose();\n    }\n    /**\n     * Create children widgets.\n     */\n    initializeDOM() {\n        if (!this.placeholder) {\n            return;\n        }\n        super.initializeDOM();\n        this.renderCollapseButtons(this._renderer);\n        this._handleRendered().catch(reason => {\n            console.error('Failed to render', reason);\n        });\n    }\n    maybeCreateCollapseButton() {\n        var _a;\n        const { level } = this.headingInfo;\n        if (level > 0 &&\n            ((_a = this.inputArea) === null || _a === void 0 ? void 0 : _a.promptNode.getElementsByClassName(HEADING_COLLAPSER_CLASS).length) == 0) {\n            let collapseButton = this.inputArea.promptNode.appendChild(document.createElement('button'));\n            collapseButton.className = `jp-Button ${HEADING_COLLAPSER_CLASS}`;\n            collapseButton.setAttribute('data-heading-level', level.toString());\n            if (this._headingCollapsed) {\n                collapseButton.classList.add('jp-mod-collapsed');\n            }\n            else {\n                collapseButton.classList.remove('jp-mod-collapsed');\n            }\n            collapseButton.onclick = (event) => {\n                this.headingCollapsed = !this.headingCollapsed;\n            };\n        }\n    }\n    /**\n     * Create, update or remove the hidden cells button.\n     * Note that the actual visibility is controlled in Static Notebook by toggling jp-mod-showHiddenCellsButton class.\n     */\n    maybeCreateOrUpdateExpandButton() {\n        const showHiddenCellsButtonList = this.node.getElementsByClassName(SHOW_HIDDEN_CELLS_CLASS);\n        let trans = this.translator.load('jupyterlab');\n        let buttonText = trans._n('%1 cell hidden', '%1 cells hidden', this._numberChildNodes);\n        let needToCreateButton = this.headingCollapsed &&\n            this._numberChildNodes > 0 &&\n            showHiddenCellsButtonList.length == 0;\n        if (needToCreateButton) {\n            const newShowHiddenCellsButton = document.createElement('button');\n            newShowHiddenCellsButton.className = `jp-mod-minimal jp-Button ${SHOW_HIDDEN_CELLS_CLASS}`;\n            addIcon.render(newShowHiddenCellsButton);\n            const buttonTextElement = document.createElement('div');\n            buttonTextElement.textContent = buttonText;\n            newShowHiddenCellsButton.appendChild(buttonTextElement);\n            newShowHiddenCellsButton.onclick = () => {\n                this.headingCollapsed = false;\n            };\n            this.node.appendChild(newShowHiddenCellsButton);\n        }\n        let needToUpdateButtonText = this.headingCollapsed &&\n            this._numberChildNodes > 0 &&\n            showHiddenCellsButtonList.length == 1;\n        if (needToUpdateButtonText) {\n            showHiddenCellsButtonList[0].childNodes[1].textContent = buttonText;\n        }\n        let needToRemoveButton = !(this.headingCollapsed && this._numberChildNodes > 0);\n        if (needToRemoveButton) {\n            for (const button of showHiddenCellsButtonList) {\n                this.node.removeChild(button);\n            }\n        }\n    }\n    /**\n     * Callback on content changed\n     */\n    onContentChanged() {\n        super.onContentChanged();\n        this._headingsCache = null;\n    }\n    /**\n     * Render the collapse button for heading cells,\n     * and for collapsed heading cells render the \"expand hidden cells\"\n     * button.\n     */\n    renderCollapseButtons(widget) {\n        this.node.classList.toggle(MARKDOWN_HEADING_COLLAPSED, this._headingCollapsed);\n        this.maybeCreateCollapseButton();\n        this.maybeCreateOrUpdateExpandButton();\n    }\n    /**\n     * Render an input instead of the text editor.\n     */\n    renderInput(widget) {\n        this.addClass(RENDERED_CLASS);\n        if (!this.placeholder && !this.isDisposed) {\n            this.renderCollapseButtons(widget);\n            this.inputArea.renderInput(widget);\n        }\n    }\n    /**\n     * Show the text editor instead of rendered input.\n     */\n    showEditor() {\n        this.removeClass(RENDERED_CLASS);\n        if (!this.placeholder && !this.isDisposed) {\n            this.inputArea.showEditor();\n            // if this is going to be a heading, place the cursor accordingly\n            let numHashAtStart = (this.model.sharedModel\n                .getSource()\n                .match(/^#+/g) || [''])[0].length;\n            if (numHashAtStart > 0) {\n                this.inputArea.editor.setCursorPosition({\n                    column: numHashAtStart + 1,\n                    line: 0\n                }, { scroll: false });\n            }\n        }\n    }\n    /*\n     * Handle `update-request` messages.\n     */\n    onUpdateRequest(msg) {\n        // Make sure we are properly rendered.\n        this._handleRendered().catch(reason => {\n            console.error('Failed to render', reason);\n        });\n        super.onUpdateRequest(msg);\n    }\n    /**\n     * Modify the cell source to include a reference to the attachment.\n     */\n    updateCellSourceWithAttachment(attachmentName, URI) {\n        var _a, _b;\n        const textToBeAppended = `![${attachmentName}](attachment:${URI !== null && URI !== void 0 ? URI : attachmentName})`;\n        // TODO this should be done on the model...\n        (_b = (_a = this.editor) === null || _a === void 0 ? void 0 : _a.replaceSelection) === null || _b === void 0 ? void 0 : _b.call(_a, textToBeAppended);\n    }\n    /**\n     * Handle the rendered state.\n     */\n    async _handleRendered() {\n        if (!this._rendered) {\n            this.showEditor();\n        }\n        else {\n            // TODO: It would be nice for the cell to provide a way for\n            // its consumers to hook into when the rendering is done.\n            await this._updateRenderedInput();\n            if (this._rendered) {\n                // The rendered flag may be updated in the mean time\n                this.renderInput(this._renderer);\n            }\n        }\n    }\n    /**\n     * Update the rendered input.\n     */\n    _updateRenderedInput() {\n        if (this.placeholder) {\n            return Promise.resolve();\n        }\n        const model = this.model;\n        const text = (model && model.sharedModel.getSource()) || DEFAULT_MARKDOWN_TEXT;\n        // Do not re-render if the text has not changed.\n        if (text !== this._prevText) {\n            const mimeModel = new MimeModel({ data: { 'text/markdown': text } });\n            this._prevText = text;\n            return this._renderer.renderModel(mimeModel);\n        }\n        return Promise.resolve();\n    }\n    /**\n     * Clone the cell, using the same model.\n     */\n    clone() {\n        const constructor = this.constructor;\n        return new constructor({\n            model: this.model,\n            contentFactory: this.contentFactory,\n            rendermime: this._rendermime,\n            placeholder: false,\n            translator: this.translator\n        });\n    }\n}\n/**\n * The namespace for the `CodeCell` class statics.\n */\n(function (MarkdownCell) {\n    /**\n     * Default value for showEditorForReadOnlyMarkdown.\n     */\n    MarkdownCell.defaultShowEditorForReadOnlyMarkdown = true;\n})(MarkdownCell || (MarkdownCell = {}));\n/** ****************************************************************************\n * RawCell\n ******************************************************************************/\n/**\n * A widget for a raw cell.\n */\nexport class RawCell extends Cell {\n    /**\n     * Construct a raw cell widget.\n     */\n    constructor(options) {\n        super(options);\n        this.addClass(RAW_CELL_CLASS);\n        const trans = this.translator.load('jupyterlab');\n        this.node.setAttribute('aria-label', trans.__('Raw Cell Content'));\n    }\n    /**\n     * Clone the cell, using the same model.\n     */\n    clone() {\n        const constructor = this.constructor;\n        return new constructor({\n            model: this.model,\n            contentFactory: this.contentFactory,\n            placeholder: false,\n            translator: this.translator\n        });\n    }\n}\n//# sourceMappingURL=widget.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module cells\n */\nexport * from './celldragutils';\nexport * from './collapser';\nexport * from './headerfooter';\nexport * from './inputarea';\nexport * from './model';\nexport * from './placeholder';\nexport * from './searchprovider';\nexport * from './widget';\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/rendermime/style/index.js';\n","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@jupyterlab/attachments/style/index.js';\nimport '@lumino/dragdrop/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/documentsearch/style/index.js';\nimport '@jupyterlab/codemirror/style/index.js';\nimport '@jupyterlab/filebrowser/style/index.js';\nimport '@jupyterlab/outputarea/style/index.js';\nimport '@jupyterlab/toc/style/index.js';\n\nimport './base.css';\n","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport React from 'react';\nimport { addIcon, checkIcon, LabIcon } from '@jupyterlab/ui-components';\nimport { reduce } from '@lumino/algorithm';\nimport { nullTranslator } from '@jupyterlab/translation';\n/**\n * The class name added to the cell-tags field.\n */\nconst CELL_TAGS_WIDGET_CLASS = 'jp-CellTags';\n/**\n * The class name added to each tag element.\n */\nconst CELL_TAGS_ELEMENT_CLASS = 'jp-CellTags-Tag';\n/**\n * The class name added to each applied tag element.\n */\nconst CELL_TAGS_ELEMENT_APPLIED_CLASS = 'jp-CellTags-Applied';\n/**\n * The class name added to each unapplied tag element.\n */\nconst CELL_TAGS_ELEMENT_UNAPPLIED_CLASS = 'jp-CellTags-Unapplied';\n/**\n * The class name added to the tag holder.\n */\nconst CELL_TAGS_HOLDER_CLASS = 'jp-CellTags-Holder';\n/**\n * The class name added to the add-tag input.\n */\nconst CELL_TAGS_ADD_CLASS = 'jp-CellTags-Add';\n/**\n * The class name added to an empty input.\n */\nconst CELL_TAGS_EMPTY_CLASS = 'jp-CellTags-Empty';\nexport class CellTagField {\n    constructor(tracker, translator) {\n        this._tracker = tracker;\n        this._translator = translator || nullTranslator;\n        this._trans = this._translator.load('jupyterlab');\n        this._editing = false;\n    }\n    addTag(props, tag) {\n        const data = props.formData;\n        if (tag && !data.includes(tag)) {\n            data.push(tag);\n            props.formContext.updateMetadata({ [props.name]: data }, true);\n        }\n    }\n    /**\n     * Pull from cell metadata all the tags used in the notebook and update the\n     * stored tag list.\n     */\n    pullTags() {\n        var _a, _b;\n        const notebook = (_a = this._tracker) === null || _a === void 0 ? void 0 : _a.currentWidget;\n        const cells = (_b = notebook === null || notebook === void 0 ? void 0 : notebook.model) === null || _b === void 0 ? void 0 : _b.cells;\n        if (cells === undefined) {\n            return [];\n        }\n        const allTags = reduce(cells, (allTags, cell) => {\n            var _a;\n            const tags = (_a = cell.getMetadata('tags')) !== null && _a !== void 0 ? _a : [];\n            return [...allTags, ...tags];\n        }, []);\n        return [...new Set(allTags)].filter(tag => tag !== '');\n    }\n    _emptyAddTag(target) {\n        target.value = '';\n        target.style.width = '';\n        target.classList.add(CELL_TAGS_EMPTY_CLASS);\n    }\n    _onAddTagKeyDown(props, event) {\n        const input = event.target;\n        if (event.ctrlKey)\n            return;\n        if (event.key === 'Enter') {\n            this.addTag(props, input.value);\n        }\n        else if (event.key === 'Escape') {\n            this._emptyAddTag(input);\n        }\n    }\n    _onAddTagFocus(event) {\n        if (!this._editing) {\n            event.target.blur();\n        }\n    }\n    _onAddTagBlur(input) {\n        if (this._editing) {\n            this._editing = false;\n            this._emptyAddTag(input);\n        }\n    }\n    _onChange(event) {\n        if (!event.target.value) {\n            this._emptyAddTag(event.target);\n        }\n        else {\n            event.target.classList.remove(CELL_TAGS_EMPTY_CLASS);\n            const tmp = document.createElement('span');\n            tmp.className = CELL_TAGS_ADD_CLASS;\n            tmp.textContent = event.target.value;\n            // set width to the pixel length of the text\n            document.body.appendChild(tmp);\n            event.target.style.setProperty('width', `calc(${tmp.getBoundingClientRect().width}px + var(--jp-add-tag-extra-width))`);\n            document.body.removeChild(tmp);\n        }\n    }\n    _onAddTagClick(props, event) {\n        const elem = event.target.closest('div');\n        const input = elem === null || elem === void 0 ? void 0 : elem.childNodes[0];\n        if (!this._editing) {\n            this._editing = true;\n            input.value = '';\n            input.focus();\n        }\n        else if (event.target !== input) {\n            this.addTag(props, input.value);\n        }\n        event.preventDefault();\n    }\n    _onTagClick(props, tag) {\n        const data = props.formData;\n        if (data.includes(tag)) {\n            data.splice(data.indexOf(tag), 1);\n        }\n        else {\n            data.push(tag);\n        }\n        props.formContext.updateMetadata({ [props.name]: data }, true);\n    }\n    render(props) {\n        const allTags = this.pullTags();\n        return (React.createElement(\"div\", { className: CELL_TAGS_WIDGET_CLASS },\n            React.createElement(\"div\", { className: \"jp-FormGroup-fieldLabel jp-FormGroup-contentItem\" }, \"Cell Tags\"),\n            allTags &&\n                allTags.map((tag, i) => (React.createElement(\"div\", { key: i, className: `${CELL_TAGS_ELEMENT_CLASS} ${props.formData.includes(tag)\n                        ? CELL_TAGS_ELEMENT_APPLIED_CLASS\n                        : CELL_TAGS_ELEMENT_UNAPPLIED_CLASS}`, onClick: () => this._onTagClick(props, tag) },\n                    React.createElement(\"div\", { className: CELL_TAGS_HOLDER_CLASS },\n                        React.createElement(\"span\", null, tag),\n                        props.formData.includes(tag) && (React.createElement(LabIcon.resolveReact, { icon: checkIcon, tag: \"span\", elementPosition: \"center\", height: \"18px\", width: \"18px\", marginLeft: \"5px\", marginRight: \"-3px\" })))))),\n            React.createElement(\"div\", { className: `${CELL_TAGS_ELEMENT_CLASS} ${CELL_TAGS_ELEMENT_UNAPPLIED_CLASS}` },\n                React.createElement(\"div\", { className: CELL_TAGS_HOLDER_CLASS, onMouseDown: (e) => this._onAddTagClick(props, e) },\n                    React.createElement(\"input\", { className: `${CELL_TAGS_ADD_CLASS} ${CELL_TAGS_EMPTY_CLASS}`, type: \"text\", placeholder: this._trans.__('Add Tag'), onKeyDown: (e) => this._onAddTagKeyDown(props, e), onFocus: (e) => this._onAddTagFocus(e), onBlur: (e) => this._onAddTagBlur(e.target), onChange: (e) => {\n                            this._onChange(e);\n                        } }),\n                    React.createElement(LabIcon.resolveReact, { icon: addIcon, tag: \"span\", height: \"18px\", width: \"18px\", className: CELL_TAGS_HOLDER_CLASS })))));\n    }\n}\n//# sourceMappingURL=celltag.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module celltags-extension\n */\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport { CellTagField } from './celltag';\nimport { IFormRendererRegistry } from '@jupyterlab/ui-components';\n/**\n * Registering cell tag field.\n */\nconst customCellTag = {\n    id: '@jupyterlab/celltags-extension:plugin',\n    description: 'Adds the cell tags editor.',\n    autoStart: true,\n    requires: [INotebookTracker],\n    optional: [IFormRendererRegistry],\n    activate: (app, tracker, formRegistry) => {\n        // Register the custom field\n        if (formRegistry) {\n            const component = {\n                fieldRenderer: (props) => {\n                    return new CellTagField(tracker).render(props);\n                }\n            };\n            formRegistry.addRenderer('@jupyterlab/celltags-extension:plugin.renderer', component);\n        }\n    }\n};\nexport default [customCellTag];\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/notebook/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * A namespace for `IEditorMimeTypeService`.\n */\nexport var IEditorMimeTypeService;\n(function (IEditorMimeTypeService) {\n    /**\n     * The default mime type.\n     */\n    IEditorMimeTypeService.defaultMimeType = 'text/plain';\n})(IEditorMimeTypeService || (IEditorMimeTypeService = {}));\n//# sourceMappingURL=mimetype.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { YFile } from '@jupyter/ydoc';\nimport { ObservableMap } from '@jupyterlab/observables';\nimport { Signal } from '@lumino/signaling';\nimport { IEditorMimeTypeService } from './mimetype';\n/**\n * A namespace for code editors.\n *\n * #### Notes\n * - A code editor is a set of common assumptions which hold for all concrete editors.\n * - Changes in implementations of the code editor should only be caused by changes in concrete editors.\n * - Common JLab services which are based on the code editor should belong to `IEditorServices`.\n */\nexport var CodeEditor;\n(function (CodeEditor) {\n    /**\n     * The default implementation of the editor model.\n     */\n    class Model {\n        /**\n         * Construct a new Model.\n         */\n        constructor(options = {}) {\n            var _a, _b;\n            /**\n             * Whether the model should disposed the shared model on disposal or not.\n             */\n            this.standaloneModel = false;\n            this._isDisposed = false;\n            this._selections = new ObservableMap();\n            this._mimeType = IEditorMimeTypeService.defaultMimeType;\n            this._mimeTypeChanged = new Signal(this);\n            // Track if we need to dispose the model or not.\n            this.standaloneModel = typeof options.sharedModel === 'undefined';\n            this.sharedModel = (_a = options.sharedModel) !== null && _a !== void 0 ? _a : new YFile();\n            this._mimeType =\n                (_b = options.mimeType) !== null && _b !== void 0 ? _b : IEditorMimeTypeService.defaultMimeType;\n        }\n        /**\n         * A signal emitted when a mimetype changes.\n         */\n        get mimeTypeChanged() {\n            return this._mimeTypeChanged;\n        }\n        /**\n         * Get the selections for the model.\n         */\n        get selections() {\n            return this._selections;\n        }\n        /**\n         * A mime type of the model.\n         */\n        get mimeType() {\n            return this._mimeType;\n        }\n        set mimeType(newValue) {\n            const oldValue = this.mimeType;\n            if (oldValue === newValue) {\n                return;\n            }\n            this._mimeType = newValue;\n            this._mimeTypeChanged.emit({\n                name: 'mimeType',\n                oldValue: oldValue,\n                newValue: newValue\n            });\n        }\n        /**\n         * Whether the model is disposed.\n         */\n        get isDisposed() {\n            return this._isDisposed;\n        }\n        /**\n         * Dispose of the resources used by the model.\n         */\n        dispose() {\n            if (this._isDisposed) {\n                return;\n            }\n            this._isDisposed = true;\n            this._selections.dispose();\n            if (this.standaloneModel) {\n                this.sharedModel.dispose();\n            }\n            Signal.clearData(this);\n        }\n    }\n    CodeEditor.Model = Model;\n})(CodeEditor || (CodeEditor = {}));\n//# sourceMappingURL=editor.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { checkIcon, undoIcon } from '@jupyterlab/ui-components';\nimport { JSONExt } from '@lumino/coreutils';\nimport { Widget } from '@lumino/widgets';\nimport { CodeEditor } from './editor';\n/**\n * The class name added to a JSONEditor instance.\n */\nconst JSONEDITOR_CLASS = 'jp-JSONEditor';\n/**\n * The class name added when the Metadata editor contains invalid JSON.\n */\nconst ERROR_CLASS = 'jp-mod-error';\n/**\n * The class name added to the editor host node.\n */\nconst HOST_CLASS = 'jp-JSONEditor-host';\n/**\n * The class name added to the header area.\n */\nconst HEADER_CLASS = 'jp-JSONEditor-header';\n/**\n * A widget for editing observable JSON.\n */\nexport class JSONEditor extends Widget {\n    /**\n     * Construct a new JSON editor.\n     */\n    constructor(options) {\n        super();\n        this._dataDirty = false;\n        this._inputDirty = false;\n        this._source = null;\n        this._originalValue = JSONExt.emptyObject;\n        this._changeGuard = false;\n        this.translator = options.translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        this.addClass(JSONEDITOR_CLASS);\n        this.headerNode = document.createElement('div');\n        this.headerNode.className = HEADER_CLASS;\n        this.revertButtonNode = undoIcon.element({\n            tag: 'span',\n            title: this._trans.__('Revert changes to data')\n        });\n        this.commitButtonNode = checkIcon.element({\n            tag: 'span',\n            title: this._trans.__('Commit changes to data'),\n            marginLeft: '8px'\n        });\n        this.editorHostNode = document.createElement('div');\n        this.editorHostNode.className = HOST_CLASS;\n        this.headerNode.appendChild(this.revertButtonNode);\n        this.headerNode.appendChild(this.commitButtonNode);\n        this.node.appendChild(this.headerNode);\n        this.node.appendChild(this.editorHostNode);\n        const model = new CodeEditor.Model({ mimeType: 'application/json' });\n        model.sharedModel.changed.connect(this._onModelChanged, this);\n        this.model = model;\n        this.editor = options.editorFactory({\n            host: this.editorHostNode,\n            model,\n            config: {\n                readOnly: true\n            }\n        });\n    }\n    /**\n     * The observable source.\n     */\n    get source() {\n        return this._source;\n    }\n    set source(value) {\n        if (this._source === value) {\n            return;\n        }\n        if (this._source) {\n            this._source.changed.disconnect(this._onSourceChanged, this);\n        }\n        this._source = value;\n        this.editor.setOption('readOnly', value === null);\n        if (value) {\n            value.changed.connect(this._onSourceChanged, this);\n        }\n        this._setValue();\n    }\n    /**\n     * Get whether the editor is dirty.\n     */\n    get isDirty() {\n        return this._dataDirty || this._inputDirty;\n    }\n    /**\n     * Dispose of the editor.\n     */\n    dispose() {\n        var _a;\n        if (this.isDisposed) {\n            return;\n        }\n        (_a = this.source) === null || _a === void 0 ? void 0 : _a.dispose();\n        this.model.dispose();\n        this.editor.dispose();\n        super.dispose();\n    }\n    /**\n     * Handle the DOM events for the widget.\n     *\n     * @param event - The DOM event sent to the widget.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the notebook panel's node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'blur':\n                this._evtBlur(event);\n                break;\n            case 'click':\n                this._evtClick(event);\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Handle `after-attach` messages for the widget.\n     */\n    onAfterAttach(msg) {\n        const node = this.editorHostNode;\n        node.addEventListener('blur', this, true);\n        node.addEventListener('click', this, true);\n        this.revertButtonNode.hidden = true;\n        this.commitButtonNode.hidden = true;\n        this.headerNode.addEventListener('click', this);\n    }\n    /**\n     * Handle `before-detach` messages for the widget.\n     */\n    onBeforeDetach(msg) {\n        const node = this.editorHostNode;\n        node.removeEventListener('blur', this, true);\n        node.removeEventListener('click', this, true);\n        this.headerNode.removeEventListener('click', this);\n    }\n    /**\n     * Handle a change to the metadata of the source.\n     */\n    _onSourceChanged(sender, args) {\n        if (this._changeGuard) {\n            return;\n        }\n        if (this._inputDirty || this.editor.hasFocus()) {\n            this._dataDirty = true;\n            return;\n        }\n        this._setValue();\n    }\n    /**\n     * Handle change events.\n     */\n    _onModelChanged(model, change) {\n        if (change.sourceChange) {\n            let valid = true;\n            try {\n                const value = JSON.parse(this.editor.model.sharedModel.getSource());\n                this.removeClass(ERROR_CLASS);\n                this._inputDirty =\n                    !this._changeGuard && !JSONExt.deepEqual(value, this._originalValue);\n            }\n            catch (err) {\n                this.addClass(ERROR_CLASS);\n                this._inputDirty = true;\n                valid = false;\n            }\n            this.revertButtonNode.hidden = !this._inputDirty;\n            this.commitButtonNode.hidden = !valid || !this._inputDirty;\n        }\n    }\n    /**\n     * Handle blur events for the text area.\n     */\n    _evtBlur(event) {\n        // Update the metadata if necessary.\n        if (!this._inputDirty && this._dataDirty) {\n            this._setValue();\n        }\n    }\n    /**\n     * Handle click events for the buttons.\n     */\n    _evtClick(event) {\n        const target = event.target;\n        if (this.revertButtonNode.contains(target)) {\n            this._setValue();\n        }\n        else if (this.commitButtonNode.contains(target)) {\n            if (!this.commitButtonNode.hidden && !this.hasClass(ERROR_CLASS)) {\n                this._changeGuard = true;\n                this._mergeContent();\n                this._changeGuard = false;\n                this._setValue();\n            }\n        }\n        else if (this.editorHostNode.contains(target)) {\n            this.editor.focus();\n        }\n    }\n    /**\n     * Merge the user content.\n     */\n    _mergeContent() {\n        const model = this.editor.model;\n        const old = this._originalValue;\n        const user = JSON.parse(model.sharedModel.getSource());\n        const source = this.source;\n        if (!source) {\n            return;\n        }\n        // If it is in user and has changed from old, set in new.\n        for (const key in user) {\n            if (!JSONExt.deepEqual(user[key], old[key] || null)) {\n                source.set(key, user[key]);\n            }\n        }\n        // If it was in old and is not in user, remove from source.\n        for (const key in old) {\n            if (!(key in user)) {\n                source.delete(key);\n            }\n        }\n    }\n    /**\n     * Set the value given the owner contents.\n     */\n    _setValue() {\n        this._dataDirty = false;\n        this._inputDirty = false;\n        this.revertButtonNode.hidden = true;\n        this.commitButtonNode.hidden = true;\n        this.removeClass(ERROR_CLASS);\n        const model = this.editor.model;\n        const content = this._source ? this._source.toJSON() : {};\n        this._changeGuard = true;\n        if (content === void 0) {\n            model.sharedModel.setSource(this._trans.__('No data!'));\n            this._originalValue = JSONExt.emptyObject;\n        }\n        else {\n            const value = JSON.stringify(content, null, 4);\n            model.sharedModel.setSource(value);\n            this._originalValue = content;\n            // Move the cursor to within the brace.\n            if (value.length > 1 && value[0] === '{') {\n                this.editor.setCursorPosition({ line: 0, column: 1 });\n            }\n        }\n        this._changeGuard = false;\n        this.commitButtonNode.hidden = true;\n        this.revertButtonNode.hidden = true;\n    }\n}\n//# sourceMappingURL=jsoneditor.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { showPopup, TextItem } from '@jupyterlab/statusbar';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { classes, lineFormIcon, ReactWidget, VDomModel, VDomRenderer } from '@jupyterlab/ui-components';\nimport React from 'react';\nimport { DOMUtils } from '@jupyterlab/apputils';\n/**\n * A component for rendering a \"go-to-line\" form.\n */\nclass LineFormComponent extends React.Component {\n    /**\n     * Construct a new LineFormComponent.\n     */\n    constructor(props) {\n        super(props);\n        /**\n         * Handle a change to the value in the input field.\n         */\n        this._handleChange = (event) => {\n            this.setState({ value: event.currentTarget.value });\n        };\n        /**\n         * Handle submission of the input field.\n         */\n        this._handleSubmit = (event) => {\n            event.preventDefault();\n            const value = parseInt(this._textInput.value, 10);\n            if (!isNaN(value) &&\n                isFinite(value) &&\n                1 <= value &&\n                value <= this.props.maxLine) {\n                this.props.handleSubmit(value);\n            }\n            return false;\n        };\n        /**\n         * Handle focusing of the input field.\n         */\n        this._handleFocus = () => {\n            this.setState({ hasFocus: true });\n        };\n        /**\n         * Handle blurring of the input field.\n         */\n        this._handleBlur = () => {\n            this.setState({ hasFocus: false });\n        };\n        this._textInput = null;\n        this.translator = props.translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        this.state = {\n            value: '',\n            hasFocus: false,\n            textInputId: DOMUtils.createDomID() + '-line-number-input'\n        };\n    }\n    /**\n     * Focus the element on mount.\n     */\n    componentDidMount() {\n        this._textInput.focus();\n    }\n    /**\n     * Render the LineFormComponent.\n     */\n    render() {\n        return (React.createElement(\"div\", { className: \"jp-lineFormSearch\" },\n            React.createElement(\"form\", { name: \"lineColumnForm\", onSubmit: this._handleSubmit, noValidate: true },\n                React.createElement(\"div\", { className: classes('jp-lineFormWrapper', 'lm-lineForm-wrapper', this.state.hasFocus ? 'jp-lineFormWrapperFocusWithin' : undefined) },\n                    React.createElement(\"input\", { type: \"text\", id: this.state.textInputId, className: \"jp-lineFormInput\", onChange: this._handleChange, onFocus: this._handleFocus, onBlur: this._handleBlur, value: this.state.value, ref: input => {\n                            this._textInput = input;\n                        } }),\n                    React.createElement(\"div\", { className: \"jp-baseLineForm jp-lineFormButtonContainer\" },\n                        React.createElement(lineFormIcon.react, { className: \"jp-baseLineForm jp-lineFormButtonIcon\", elementPosition: \"center\" }),\n                        React.createElement(\"input\", { type: \"submit\", className: \"jp-baseLineForm jp-lineFormButton\", value: \"\" }))),\n                React.createElement(\"label\", { className: \"jp-lineFormCaption\", htmlFor: this.state.textInputId }, this._trans.__('Go to line number between 1 and %1', this.props.maxLine)))));\n    }\n}\n/**\n * A pure functional component for rendering a line/column\n * status item.\n */\nfunction LineColComponent(props) {\n    const translator = props.translator || nullTranslator;\n    const trans = translator.load('jupyterlab');\n    const keydownHandler = (event) => {\n        if (event.key === 'Enter' ||\n            event.key === 'Spacebar' ||\n            event.key === ' ') {\n            event.preventDefault();\n            event.stopPropagation();\n            props.handleClick();\n        }\n        else {\n            return;\n        }\n    };\n    return (React.createElement(TextItem, { onClick: props.handleClick, source: trans.__('Ln %1, Col %2', props.line, props.column), title: trans.__('Go to line number…'), tabIndex: 0, onKeyDown: keydownHandler }));\n}\n/**\n * A widget implementing a line/column status item.\n */\nexport class LineCol extends VDomRenderer {\n    /**\n     * Construct a new LineCol status item.\n     */\n    constructor(translator) {\n        super(new LineCol.Model());\n        this._popup = null;\n        this.addClass('jp-mod-highlighted');\n        this.translator = translator || nullTranslator;\n    }\n    /**\n     * Render the status item.\n     */\n    render() {\n        if (this.model === null) {\n            return null;\n        }\n        else {\n            return (React.createElement(LineColComponent, { line: this.model.line, column: this.model.column, translator: this.translator, handleClick: () => this._handleClick() }));\n        }\n    }\n    /**\n     * A click handler for the widget.\n     */\n    _handleClick() {\n        if (this._popup) {\n            this._popup.dispose();\n        }\n        const body = ReactWidget.create(React.createElement(LineFormComponent, { handleSubmit: val => this._handleSubmit(val), currentLine: this.model.line, maxLine: this.model.editor.lineCount, translator: this.translator }));\n        this._popup = showPopup({\n            body: body,\n            anchor: this,\n            align: 'right'\n        });\n    }\n    /**\n     * Handle submission for the widget.\n     */\n    _handleSubmit(value) {\n        this.model.editor.setCursorPosition({ line: value - 1, column: 0 });\n        this._popup.dispose();\n        this.model.editor.focus();\n    }\n}\n/**\n * A namespace for LineCol statics.\n */\n(function (LineCol) {\n    /**\n     * A VDom model for a status item tracking the line/column of an editor.\n     */\n    class Model extends VDomModel {\n        constructor() {\n            super(...arguments);\n            /**\n             * React to a change in the cursors of the current editor.\n             */\n            this._onSelectionChanged = () => {\n                const oldState = this._getAllState();\n                const pos = this.editor.getCursorPosition();\n                this._line = pos.line + 1;\n                this._column = pos.column + 1;\n                this._triggerChange(oldState, this._getAllState());\n            };\n            this._line = 1;\n            this._column = 1;\n            this._editor = null;\n        }\n        /**\n         * The current editor of the model.\n         */\n        get editor() {\n            return this._editor;\n        }\n        set editor(editor) {\n            var _a;\n            const oldEditor = this._editor;\n            if ((_a = oldEditor === null || oldEditor === void 0 ? void 0 : oldEditor.model) === null || _a === void 0 ? void 0 : _a.selections) {\n                oldEditor.model.selections.changed.disconnect(this._onSelectionChanged);\n            }\n            const oldState = this._getAllState();\n            this._editor = editor;\n            if (!this._editor) {\n                this._column = 1;\n                this._line = 1;\n            }\n            else {\n                this._editor.model.selections.changed.connect(this._onSelectionChanged);\n                const pos = this._editor.getCursorPosition();\n                this._column = pos.column + 1;\n                this._line = pos.line + 1;\n            }\n            this._triggerChange(oldState, this._getAllState());\n        }\n        /**\n         * The current line of the model.\n         */\n        get line() {\n            return this._line;\n        }\n        /**\n         * The current column of the model.\n         */\n        get column() {\n            return this._column;\n        }\n        _getAllState() {\n            return [this._line, this._column];\n        }\n        _triggerChange(oldState, newState) {\n            if (oldState[0] !== newState[0] || oldState[1] !== newState[1]) {\n                this.stateChanged.emit(void 0);\n            }\n        }\n    }\n    LineCol.Model = Model;\n})(LineCol || (LineCol = {}));\n//# sourceMappingURL=lineCol.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * A class added to editors that can host a completer.\n */\nexport const COMPLETER_ENABLED_CLASS = 'jp-mod-completer-enabled';\n/**\n * A class added to editors that have an active completer.\n */\nexport const COMPLETER_ACTIVE_CLASS = 'jp-mod-completer-active';\n/**\n * A class added to editors that have a cursor at the beginning of the line.\n */\nexport const COMPLETER_LINE_BEGINNING_CLASS = 'jp-mod-at-line-beginning';\n/**\n * Code editor services token.\n */\nexport const IEditorServices = new Token('@jupyterlab/codeeditor:IEditorServices', `A service for the text editor provider\n  for the application. Use this to create new text editors and host them in your\n  UI elements.`);\n/**\n * Code editor cursor position token.\n */\nexport const IPositionModel = new Token('@jupyterlab/codeeditor:IPositionModel', `A service to handle an code editor cursor position.`);\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Widget } from '@lumino/widgets';\n/**\n * The class name added to an editor widget that has a primary selection.\n */\nconst HAS_SELECTION_CLASS = 'jp-mod-has-primary-selection';\n/**\n * The class name added to an editor widget that has a cursor/selection\n * within the whitespace at the beginning of a line\n */\nconst HAS_IN_LEADING_WHITESPACE_CLASS = 'jp-mod-in-leading-whitespace';\n/**\n * A class used to indicate a drop target.\n */\nconst DROP_TARGET_CLASS = 'jp-mod-dropTarget';\n/**\n * RegExp to test for leading whitespace\n */\nconst leadingWhitespaceRe = /^\\s+$/;\n/**\n * A widget which hosts a code editor.\n */\nexport class CodeEditorWrapper extends Widget {\n    /**\n     * Construct a new code editor widget.\n     */\n    constructor(options) {\n        super();\n        const { factory, model, editorOptions } = options;\n        const editor = (this.editor = factory({\n            host: this.node,\n            model,\n            ...editorOptions\n        }));\n        editor.model.selections.changed.connect(this._onSelectionsChanged, this);\n    }\n    /**\n     * Get the model used by the widget.\n     */\n    get model() {\n        return this.editor.model;\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this.editor.dispose();\n        super.dispose();\n    }\n    /**\n     * Handle the DOM events for the widget.\n     *\n     * @param event - The DOM event sent to the widget.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the notebook panel's node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'lm-dragenter':\n                this._evtDragEnter(event);\n                break;\n            case 'lm-dragleave':\n                this._evtDragLeave(event);\n                break;\n            case 'lm-dragover':\n                this._evtDragOver(event);\n                break;\n            case 'lm-drop':\n                this._evtDrop(event);\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Handle `'activate-request'` messages.\n     */\n    onActivateRequest(msg) {\n        this.editor.focus();\n    }\n    /**\n     * A message handler invoked on an `'after-attach'` message.\n     */\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        const node = this.node;\n        node.addEventListener('lm-dragenter', this);\n        node.addEventListener('lm-dragleave', this);\n        node.addEventListener('lm-dragover', this);\n        node.addEventListener('lm-drop', this);\n    }\n    /**\n     * Handle `before-detach` messages for the widget.\n     */\n    onBeforeDetach(msg) {\n        const node = this.node;\n        node.removeEventListener('lm-dragenter', this);\n        node.removeEventListener('lm-dragleave', this);\n        node.removeEventListener('lm-dragover', this);\n        node.removeEventListener('lm-drop', this);\n    }\n    /**\n     * Handle a change in model selections.\n     */\n    _onSelectionsChanged() {\n        const { start, end } = this.editor.getSelection();\n        if (start.column !== end.column || start.line !== end.line) {\n            // a selection was made\n            this.addClass(HAS_SELECTION_CLASS);\n            this.removeClass(HAS_IN_LEADING_WHITESPACE_CLASS);\n        }\n        else {\n            // the cursor was placed\n            this.removeClass(HAS_SELECTION_CLASS);\n            if (this.editor\n                .getLine(end.line)\n                .slice(0, end.column)\n                .match(leadingWhitespaceRe)) {\n                this.addClass(HAS_IN_LEADING_WHITESPACE_CLASS);\n            }\n            else {\n                this.removeClass(HAS_IN_LEADING_WHITESPACE_CLASS);\n            }\n        }\n    }\n    /**\n     * Handle the `'lm-dragenter'` event for the widget.\n     */\n    _evtDragEnter(event) {\n        if (this.editor.getOption('readOnly') === true) {\n            return;\n        }\n        const data = Private.findTextData(event.mimeData);\n        if (data === undefined) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        this.addClass('jp-mod-dropTarget');\n    }\n    /**\n     * Handle the `'lm-dragleave'` event for the widget.\n     */\n    _evtDragLeave(event) {\n        this.removeClass(DROP_TARGET_CLASS);\n        if (this.editor.getOption('readOnly') === true) {\n            return;\n        }\n        const data = Private.findTextData(event.mimeData);\n        if (data === undefined) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n    }\n    /**\n     * Handle the `'lm-dragover'` event for the widget.\n     */\n    _evtDragOver(event) {\n        this.removeClass(DROP_TARGET_CLASS);\n        if (this.editor.getOption('readOnly') === true) {\n            return;\n        }\n        const data = Private.findTextData(event.mimeData);\n        if (data === undefined) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        event.dropAction = 'copy';\n        this.addClass(DROP_TARGET_CLASS);\n    }\n    /**\n     * Handle the `'lm-drop'` event for the widget.\n     */\n    _evtDrop(event) {\n        if (this.editor.getOption('readOnly') === true) {\n            return;\n        }\n        const data = Private.findTextData(event.mimeData);\n        if (data === undefined) {\n            return;\n        }\n        const coordinate = {\n            top: event.y,\n            bottom: event.y,\n            left: event.x,\n            right: event.x\n        };\n        const position = this.editor.getPositionForCoordinate(coordinate);\n        if (position === null) {\n            return;\n        }\n        this.removeClass(DROP_TARGET_CLASS);\n        event.preventDefault();\n        event.stopPropagation();\n        if (event.proposedAction === 'none') {\n            event.dropAction = 'none';\n            return;\n        }\n        const offset = this.editor.getOffsetAt(position);\n        this.model.sharedModel.updateSource(offset, offset, data);\n    }\n}\n/**\n * A namespace for private functionality.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Given a MimeData instance, extract the first text data, if any.\n     */\n    function findTextData(mime) {\n        const types = mime.types();\n        const textType = types.find(t => t.indexOf('text') === 0);\n        if (textType === undefined) {\n            return undefined;\n        }\n        return mime.getData(textType);\n    }\n    Private.findTextData = findTextData;\n})(Private || (Private = {}));\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { StackedLayout, Widget } from '@lumino/widgets';\nimport { CodeEditor } from './editor';\nimport { CodeEditorWrapper } from './widget';\nexport class CodeViewerWidget extends Widget {\n    /**\n     * Construct a new code viewer widget.\n     */\n    constructor(options) {\n        var _a;\n        super();\n        this.model = options.model;\n        const editorWidget = new CodeEditorWrapper({\n            factory: options.factory,\n            model: this.model,\n            editorOptions: {\n                ...options.editorOptions,\n                config: { ...(_a = options.editorOptions) === null || _a === void 0 ? void 0 : _a.config, readOnly: true }\n            }\n        });\n        this.editor = editorWidget.editor;\n        const layout = (this.layout = new StackedLayout());\n        layout.addWidget(editorWidget);\n    }\n    static createCodeViewer(options) {\n        const { content, mimeType, ...others } = options;\n        const model = new CodeEditor.Model({\n            mimeType\n        });\n        model.sharedModel.setSource(content);\n        const widget = new CodeViewerWidget({ ...others, model });\n        widget.disposed.connect(() => {\n            model.dispose();\n        });\n        return widget;\n    }\n    get content() {\n        return this.model.sharedModel.getSource();\n    }\n    get mimeType() {\n        return this.model.mimeType;\n    }\n}\n//# sourceMappingURL=viewer.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module codeeditor\n */\nexport * from './editor';\nexport * from './factory';\nexport * from './jsoneditor';\nexport * from './lineCol';\nexport * from './mimetype';\nexport * from './tokens';\nexport * from './viewer';\nexport * from './widget';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/statusbar/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@lumino/dragdrop/style/index.js';\n\nimport './base.css';\n","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { deleteLine, toggleBlockComment, toggleComment, toggleTabFocusMode } from '@codemirror/commands';\nimport { selectNextOccurrence } from '@codemirror/search';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\n/**\n * Identifiers of commands.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.deleteLine = 'codemirror:delete-line';\n    CommandIDs.toggleBlockComment = 'codemirror:toggle-block-comment';\n    CommandIDs.toggleComment = 'codemirror:toggle-comment';\n    CommandIDs.selectNextOccurrence = 'codemirror:select-next-occurrence';\n    CommandIDs.toggleTabFocusMode = 'codemirror:toggle-tab-focus-mode';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * Selector for CodeMirror editor with `cmView` attribute.\n */\nconst CODE_MIRROR_SELECTOR = '.cm-content';\n/**\n * The editor commands.\n */\nexport const commandsPlugin = {\n    id: '@jupyterlab/codemirror-extension:commands',\n    description: 'Registers commands acting on selected/active CodeMirror editor.',\n    autoStart: true,\n    optional: [ITranslator],\n    activate: (app, translator) => {\n        translator = translator !== null && translator !== void 0 ? translator : nullTranslator;\n        const trans = translator.load('jupyterlab');\n        const isCodeMirror = (node) => node.classList.contains(CODE_MIRROR_SELECTOR);\n        const findEditorView = () => {\n            var _a, _b;\n            const node = (_a = app.contextMenuHitTest(isCodeMirror)) !== null && _a !== void 0 ? _a : (_b = document.activeElement) === null || _b === void 0 ? void 0 : _b.closest(CODE_MIRROR_SELECTOR);\n            if (!node) {\n                return;\n            }\n            if (!('cmView' in node)) {\n                return;\n            }\n            return node.cmView.view;\n        };\n        const isEnabled = () => {\n            return !!findEditorView();\n        };\n        app.commands.addCommand(CommandIDs.deleteLine, {\n            label: trans.__('Delete the current line'),\n            execute: () => {\n                const view = findEditorView();\n                if (!view) {\n                    return;\n                }\n                deleteLine(view);\n            },\n            isEnabled\n        });\n        app.commands.addCommand(CommandIDs.toggleBlockComment, {\n            label: trans.__('Toggle Block Comment'),\n            caption: trans.__('Toggles block comments in languages which support it (e.g. C, JavaScript)'),\n            execute: () => {\n                const view = findEditorView();\n                if (!view) {\n                    return;\n                }\n                toggleBlockComment(view);\n            },\n            isEnabled\n        });\n        app.commands.addCommand(CommandIDs.toggleComment, {\n            label: trans.__('Toggle Comment'),\n            execute: () => {\n                const view = findEditorView();\n                if (!view) {\n                    return;\n                }\n                toggleComment(view);\n            },\n            isEnabled\n        });\n        app.commands.addCommand(CommandIDs.toggleTabFocusMode, {\n            label: trans.__('Toggle Tab Focus Mode'),\n            caption: trans.__('Toggles behavior of Tab key between inserting indentation and moving to next focusable element'),\n            execute: () => {\n                const view = findEditorView();\n                if (!view) {\n                    return;\n                }\n                toggleTabFocusMode(view);\n            },\n            isEnabled\n        });\n        app.commands.addCommand(CommandIDs.selectNextOccurrence, {\n            label: trans.__('Select Next Occurrence'),\n            execute: () => {\n                const view = findEditorView();\n                if (!view) {\n                    return;\n                }\n                selectNextOccurrence(view);\n            },\n            isEnabled\n        });\n    }\n};\n//# sourceMappingURL=commands.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { LanguageSupport, StreamLanguage } from '@codemirror/language';\nimport { IEditorServices } from '@jupyterlab/codeeditor';\nimport { CodeMirrorEditorFactory, CodeMirrorMimeTypeService, EditorExtensionRegistry, EditorLanguageRegistry, EditorThemeRegistry, IEditorExtensionRegistry, IEditorLanguageRegistry, IEditorThemeRegistry, parseMathIPython, pythonBuiltin, ybinding } from '@jupyterlab/codemirror';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { FormComponent, IFormRendererRegistry } from '@jupyterlab/ui-components';\nimport { JSONExt } from '@lumino/coreutils';\nimport validatorAjv8 from '@rjsf/validator-ajv8';\nimport React from 'react';\n/**\n * CodeMirror settings plugin ID\n */\nconst SETTINGS_ID = '@jupyterlab/codemirror-extension:plugin';\n/**\n * CodeMirror language registry provider.\n */\nexport const languagePlugin = {\n    id: '@jupyterlab/codemirror-extension:languages',\n    description: 'Provides the CodeMirror languages registry.',\n    provides: IEditorLanguageRegistry,\n    optional: [ITranslator],\n    activate: (app, translator) => {\n        const languages = new EditorLanguageRegistry();\n        // Register default languages\n        for (const language of EditorLanguageRegistry.getDefaultLanguages(translator)) {\n            languages.addLanguage(language);\n        }\n        // Add Jupyter Markdown flavor here to support\n        // code block highlighting.\n        languages.addLanguage({\n            name: 'ipythongfm',\n            mime: 'text/x-ipythongfm',\n            load: async () => {\n                const [m, py, tex] = await Promise.all([\n                    import('@codemirror/lang-markdown'),\n                    import('@codemirror/lang-python'),\n                    import('@codemirror/legacy-modes/mode/stex')\n                ]);\n                const mdlang = m.markdown({\n                    base: m.markdownLanguage,\n                    codeLanguages: (info) => languages.findBest(info),\n                    extensions: [\n                        parseMathIPython(StreamLanguage.define(tex.stexMath).parser)\n                    ]\n                });\n                return new LanguageSupport(mdlang.language, [\n                    mdlang.support,\n                    pythonBuiltin(py.pythonLanguage)\n                ]);\n            }\n        });\n        return languages;\n    }\n};\n/**\n * CodeMirror theme registry provider.\n */\nexport const themePlugin = {\n    id: '@jupyterlab/codemirror-extension:themes',\n    description: 'Provides the CodeMirror theme registry',\n    provides: IEditorThemeRegistry,\n    optional: [ITranslator],\n    activate: (app, translator) => {\n        const themes = new EditorThemeRegistry();\n        // Register default themes\n        for (const theme of EditorThemeRegistry.getDefaultThemes(translator)) {\n            themes.addTheme(theme);\n        }\n        return themes;\n    }\n};\n/**\n * CodeMirror editor extensions registry provider.\n */\nexport const extensionPlugin = {\n    id: '@jupyterlab/codemirror-extension:extensions',\n    description: 'Provides the CodeMirror extension factory registry.',\n    provides: IEditorExtensionRegistry,\n    requires: [IEditorThemeRegistry],\n    optional: [ITranslator, ISettingRegistry, IFormRendererRegistry],\n    activate: (app, themes, translator, settingRegistry, formRegistry) => {\n        const registry = new EditorExtensionRegistry();\n        // Register default extensions\n        for (const extensionFactory of EditorExtensionRegistry.getDefaultExtensions({\n            themes,\n            translator\n        })) {\n            registry.addExtension(extensionFactory);\n        }\n        if (settingRegistry) {\n            const updateSettings = (settings) => {\n                var _a;\n                registry.baseConfiguration =\n                    (_a = settings.get('defaultConfig').composite) !== null && _a !== void 0 ? _a : {};\n            };\n            void Promise.all([\n                settingRegistry.load(SETTINGS_ID),\n                app.restored\n            ]).then(([settings]) => {\n                updateSettings(settings);\n                settings.changed.connect(updateSettings);\n            });\n            formRegistry === null || formRegistry === void 0 ? void 0 : formRegistry.addRenderer(`${SETTINGS_ID}.defaultConfig`, {\n                fieldRenderer: (props) => {\n                    const properties = React.useMemo(() => registry.settingsSchema, []);\n                    const defaultFormData = {};\n                    // Only provide customizable options\n                    for (const [key, value] of Object.entries(registry.defaultConfiguration)) {\n                        if (typeof properties[key] !== 'undefined') {\n                            defaultFormData[key] = value;\n                        }\n                    }\n                    return (React.createElement(\"div\", { className: \"jp-FormGroup-contentNormal\" },\n                        React.createElement(\"h3\", { className: \"jp-FormGroup-fieldLabel jp-FormGroup-contentItem\" }, props.schema.title),\n                        props.schema.description && (React.createElement(\"div\", { className: \"jp-FormGroup-description\" }, props.schema.description)),\n                        React.createElement(FormComponent, { schema: {\n                                title: props.schema.title,\n                                description: props.schema.description,\n                                type: 'object',\n                                properties,\n                                additionalProperties: false\n                            }, validator: validatorAjv8, formData: { ...defaultFormData, ...props.formData }, formContext: { defaultFormData }, liveValidate: true, onChange: e => {\n                                var _a;\n                                // Only save non-default values\n                                const nonDefault = {};\n                                for (const [property, value] of Object.entries((_a = e.formData) !== null && _a !== void 0 ? _a : {})) {\n                                    const default_ = defaultFormData[property];\n                                    if (default_ === undefined ||\n                                        !JSONExt.deepEqual(value, default_)) {\n                                        nonDefault[property] = value;\n                                    }\n                                }\n                                props.onChange(nonDefault);\n                            }, tagName: \"div\", translator: translator !== null && translator !== void 0 ? translator : nullTranslator })));\n                }\n            });\n        }\n        return registry;\n    }\n};\n/**\n * CodeMirror shared model binding provider.\n */\nexport const bindingPlugin = {\n    id: '@jupyterlab/codemirror-extension:binding',\n    description: 'Register the CodeMirror extension factory binding the editor and the shared model.',\n    autoStart: true,\n    requires: [IEditorExtensionRegistry],\n    activate: (app, extensions) => {\n        extensions.addExtension({\n            name: 'shared-model-binding',\n            factory: options => {\n                var _a;\n                const sharedModel = options.model.sharedModel;\n                return EditorExtensionRegistry.createImmutableExtension(ybinding({\n                    ytext: sharedModel.ysource,\n                    undoManager: (_a = sharedModel.undoManager) !== null && _a !== void 0 ? _a : undefined\n                }));\n            }\n        });\n    }\n};\n/**\n * The editor services.\n */\nexport const servicesPlugin = {\n    id: '@jupyterlab/codemirror-extension:services',\n    description: 'Provides the service to instantiate CodeMirror editors.',\n    provides: IEditorServices,\n    requires: [IEditorLanguageRegistry, IEditorExtensionRegistry],\n    optional: [ITranslator],\n    activate: (app, languages, extensions, translator) => {\n        const factory = new CodeMirrorEditorFactory({\n            extensions,\n            languages,\n            translator: translator !== null && translator !== void 0 ? translator : nullTranslator\n        });\n        return {\n            factoryService: factory,\n            mimeTypeService: new CodeMirrorMimeTypeService(languages)\n        };\n    }\n};\n//# sourceMappingURL=services.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module codemirror-extension\n */\nimport { ILabShell } from '@jupyterlab/application';\nimport { IPositionModel, LineCol } from '@jupyterlab/codeeditor';\nimport { IStatusBar } from '@jupyterlab/statusbar';\nimport { ITranslator } from '@jupyterlab/translation';\nimport { commandsPlugin } from './commands';\nimport { bindingPlugin, extensionPlugin, languagePlugin, servicesPlugin, themePlugin } from './services';\n/**\n * A plugin providing a line/column status item to the application.\n */\nexport const lineColItem = {\n    id: '@jupyterlab/codemirror-extension:line-col-status',\n    description: 'Provides the code editor cursor position model.',\n    autoStart: true,\n    requires: [ITranslator],\n    optional: [ILabShell, IStatusBar],\n    provides: IPositionModel,\n    activate: (app, translator, labShell, statusBar) => {\n        const item = new LineCol(translator);\n        const providers = new Set();\n        if (statusBar) {\n            // Add the status item to the status bar.\n            statusBar.registerStatusItem(lineColItem.id, {\n                priority: 1,\n                item,\n                align: 'right',\n                rank: 2,\n                isActive: () => !!item.model.editor\n            });\n        }\n        const addEditorProvider = (provider) => {\n            providers.add(provider);\n            if (app.shell.currentWidget) {\n                updateEditor(app.shell, {\n                    newValue: app.shell.currentWidget,\n                    oldValue: null\n                });\n            }\n        };\n        const update = () => {\n            updateEditor(app.shell, {\n                oldValue: app.shell.currentWidget,\n                newValue: app.shell.currentWidget\n            });\n        };\n        function updateEditor(shell, changes) {\n            Promise.all([...providers].map(provider => provider(changes.newValue)))\n                .then(editors => {\n                var _a;\n                item.model.editor =\n                    (_a = editors.filter(editor => editor !== null)[0]) !== null && _a !== void 0 ? _a : null;\n            })\n                .catch(reason => {\n                console.error('Get editors', reason);\n            });\n        }\n        if (labShell) {\n            labShell.currentChanged.connect(updateEditor);\n        }\n        return { addEditorProvider, update };\n    }\n};\n/**\n * Export the plugins as default.\n */\nconst plugins = [\n    commandsPlugin,\n    languagePlugin,\n    themePlugin,\n    bindingPlugin,\n    extensionPlugin,\n    servicesPlugin,\n    lineColItem\n];\nexport default plugins;\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/statusbar/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/codemirror/style/index.js';\n","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { indentLess, indentMore, insertBlankLine, insertNewlineAndIndent, insertTab, simplifySelection } from '@codemirror/commands';\nimport { COMPLETER_ACTIVE_CLASS, COMPLETER_ENABLED_CLASS, COMPLETER_LINE_BEGINNING_CLASS } from '@jupyterlab/codeeditor';\n/**\n * Selector for a widget that can run code.\n */\nconst CODE_RUNNER_SELECTOR = '[data-jp-code-runner]';\n/**\n * Selector for a widget that can run code in terminal mode.\n */\nconst TERMINAL_CODE_RUNNER_SELECTOR = '[data-jp-interaction-mode=\"terminal\"]';\n/**\n * Selector for a widget that can open a tooltip.\n */\nconst TOOLTIP_OPENER_SELECTOR = '.jp-CodeMirrorEditor:not(.jp-mod-has-primary-selection):not(.jp-mod-in-leading-whitespace):not(.jp-mod-completer-active)';\n/**\n * Selector for an active cell in edit mode.\n */\nconst ACTIVE_CELL_IN_EDIT_MODE_SELECTOR = '.jp-mod-editMode .jp-Cell.jp-mod-active';\n/**\n * CodeMirror commands namespace\n */\nexport var StateCommands;\n(function (StateCommands) {\n    /**\n     * Indent or insert a tab as appropriate.\n     */\n    function indentMoreOrInsertTab(target) {\n        var _a;\n        let classList = (_a = target.dom.parentElement) === null || _a === void 0 ? void 0 : _a.classList;\n        let completerEnabled = classList === null || classList === void 0 ? void 0 : classList.contains(COMPLETER_ENABLED_CLASS);\n        let lineBeggining = classList === null || classList === void 0 ? void 0 : classList.contains(COMPLETER_LINE_BEGINNING_CLASS);\n        if (completerEnabled && !lineBeggining) {\n            return false;\n        }\n        const arg = { state: target.state, dispatch: target.dispatch };\n        const from = target.state.selection.main.from;\n        const to = target.state.selection.main.to;\n        if (from != to) {\n            return indentMore(arg);\n        }\n        const line = target.state.doc.lineAt(from);\n        const before = target.state.doc.slice(line.from, from).toString();\n        if (/^\\s*$/.test(before)) {\n            return indentMore(arg);\n        }\n        else {\n            return insertTab(arg);\n        }\n    }\n    StateCommands.indentMoreOrInsertTab = indentMoreOrInsertTab;\n    /**\n     * Insert new line if completer is not active.\n     */\n    function completerOrInsertNewLine(target) {\n        var _a;\n        if ((_a = target.dom.parentElement) === null || _a === void 0 ? void 0 : _a.classList.contains(COMPLETER_ACTIVE_CLASS)) {\n            // do not prevent default to allow completer `enter` action\n            return false;\n        }\n        if (target.dom.closest(TERMINAL_CODE_RUNNER_SELECTOR)) {\n            // do not prevent default to allow for the cell to run\n            return false;\n        }\n        const arg = { state: target.state, dispatch: target.dispatch };\n        return insertNewlineAndIndent(arg);\n    }\n    StateCommands.completerOrInsertNewLine = completerOrInsertNewLine;\n    /**\n     * Prevent insertion of new line when running cell with Ctrl/Command + Enter\n     * @deprecated\n     */\n    function preventNewLineOnRun(target) {\n        if (target.dom.closest(CODE_RUNNER_SELECTOR)) {\n            return true;\n        }\n        return false;\n    }\n    StateCommands.preventNewLineOnRun = preventNewLineOnRun;\n    /**\n     * Insert a new line or run a cell with Ctrl/Command + Enter\n     */\n    function insertBlankLineOnRun(target) {\n        if (target.dom.closest(CODE_RUNNER_SELECTOR)) {\n            // do not prevent default to allow `run` action to be handled by lumino\n            return false;\n        }\n        else {\n            const arg = { state: target.state, dispatch: target.dispatch };\n            return insertBlankLine(arg);\n        }\n    }\n    StateCommands.insertBlankLineOnRun = insertBlankLineOnRun;\n    /**\n     * Simplify selection but do not prevent default to allow switching to command mode.\n     */\n    function simplifySelectionAndMaybeSwitchToCommandMode(target) {\n        const arg = { state: target.state, dispatch: target.dispatch };\n        const preventDefault = simplifySelection(arg);\n        if (target.dom.closest(ACTIVE_CELL_IN_EDIT_MODE_SELECTOR)) {\n            // do not prevent default to allow switching to command mode\n            return false;\n        }\n        else {\n            return preventDefault;\n        }\n    }\n    StateCommands.simplifySelectionAndMaybeSwitchToCommandMode = simplifySelectionAndMaybeSwitchToCommandMode;\n    /**\n     * Prevent dedenting when launching inspection request (a.k.a tooltip).\n     *\n     * This function should be removed once a better way to prevent default\n     * CodeMirror commands is implemented, as tracked in\n     * https://github.com/jupyterlab/jupyterlab/issues/15897\n     */\n    function dedentIfNotLaunchingTooltip(target) {\n        if (target.dom.closest(TOOLTIP_OPENER_SELECTOR)) {\n            return false;\n        }\n        return indentLess(target);\n    }\n    StateCommands.dedentIfNotLaunchingTooltip = dedentIfNotLaunchingTooltip;\n})(StateCommands || (StateCommands = {}));\n//# sourceMappingURL=commands.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { combineConfig, Facet } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\n/**\n * Custom theme configuration\n *\n * The first non-null value takes precedence\n */\nconst customThemeConfig = Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            fontFamily: null,\n            fontSize: null,\n            lineHeight: null\n        }, {\n            fontFamily: (a, b) => a !== null && a !== void 0 ? a : b,\n            fontSize: (a, b) => a !== null && a !== void 0 ? a : b,\n            lineHeight: (a, b) => a !== null && a !== void 0 ? a : b\n        });\n    }\n});\nfunction setEditorStyle(view) {\n    const { fontFamily, fontSize, lineHeight } = view.state.facet(customThemeConfig);\n    let style = '';\n    if (fontSize) {\n        style += `font-size: ${fontSize}px !important;`;\n    }\n    if (fontFamily) {\n        style += `font-family: ${fontFamily} !important;`;\n    }\n    if (lineHeight) {\n        style += `line-height: ${lineHeight.toString()} !important`;\n    }\n    return { style: style };\n}\n/**\n * Get the extension to customize an editor theme.\n *\n * @param config Theme customization\n * @returns Editor extension\n */\nexport function customTheme(config) {\n    return [\n        customThemeConfig.of(config),\n        EditorView.editorAttributes.of(setEditorStyle)\n    ];\n}\n//# sourceMappingURL=customStyle.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { parseMixed } from '@lezer/common';\nimport { tags } from '@lezer/highlight';\n// Mathematical expression delimiters\nconst INLINE_MATH_DOLLAR = 'InlineMathDollar';\nconst INLINE_MATH_BRACKET = 'InlineMathBracket';\nconst BLOCK_MATH_DOLLAR = 'BlockMathDollar';\nconst BLOCK_MATH_BRACKET = 'BlockMathBracket';\n/**\n * Length of the delimiter for a math expression\n */\nconst DELIMITER_LENGTH = {\n    [INLINE_MATH_DOLLAR]: 1,\n    [INLINE_MATH_BRACKET]: 3,\n    [BLOCK_MATH_DOLLAR]: 2,\n    [BLOCK_MATH_BRACKET]: 3\n};\n/**\n * Delimiters for math expressions\n */\n// Delimiters must be defined as constant because they are used in object match tests\nconst DELIMITERS = Object.keys(DELIMITER_LENGTH).reduce((agg, name) => {\n    agg[name] = { mark: `${name}Mark`, resolve: name };\n    return agg;\n}, {});\n/**\n * Define an IPython mathematical expression parser for Markdown.\n *\n * @param latexParser CodeMirror {@link Parser} for LaTeX mathematical expression\n * @returns Markdown extension\n */\nexport function parseMathIPython(latexParser) {\n    const defineNodes = new Array();\n    Object.keys(DELIMITER_LENGTH).forEach(name => {\n        defineNodes.push({\n            name,\n            style: tags.emphasis\n        }, { name: `${name}Mark`, style: tags.processingInstruction });\n    });\n    return {\n        defineNodes,\n        parseInline: [\n            {\n                name: BLOCK_MATH_DOLLAR,\n                parse(cx, next, pos) {\n                    if (next != 36 /* '$' */ || cx.char(pos + 1) != 36) {\n                        return -1;\n                    }\n                    return cx.addDelimiter(DELIMITERS[BLOCK_MATH_DOLLAR], pos, pos + DELIMITER_LENGTH[BLOCK_MATH_DOLLAR], true, true);\n                }\n            },\n            {\n                name: INLINE_MATH_DOLLAR,\n                parse(cx, next, pos) {\n                    if (next != 36 /* '$' */ || cx.char(pos + 1) == 36) {\n                        return -1;\n                    }\n                    return cx.addDelimiter(DELIMITERS[INLINE_MATH_DOLLAR], pos, pos + DELIMITER_LENGTH[INLINE_MATH_DOLLAR], true, true);\n                }\n            },\n            // Inline expression wrapped in \\\\( ... \\\\)\n            {\n                name: INLINE_MATH_BRACKET,\n                before: 'Escape', // Search for this delimiter before the escape character\n                parse(cx, next, pos) {\n                    if (next != 92 /* '\\' */ ||\n                        cx.char(pos + 1) != 92 ||\n                        ![40 /* '(' */, 41 /* ')' */].includes(cx.char(pos + 2))) {\n                        return -1;\n                    }\n                    return cx.addDelimiter(DELIMITERS[INLINE_MATH_BRACKET], pos, pos + DELIMITER_LENGTH[INLINE_MATH_BRACKET], cx.char(pos + 2) == 40, cx.char(pos + 2) == 41);\n                }\n            },\n            // Block expression wrapped in \\\\[ ... \\\\]\n            {\n                name: BLOCK_MATH_BRACKET,\n                before: 'Escape', // Search for this delimiter before the escape character\n                parse(cx, next, pos) {\n                    if (next != 92 /* '\\' */ ||\n                        cx.char(pos + 1) != 92 ||\n                        ![91 /* '[' */, 93 /* ']' */].includes(cx.char(pos + 2))) {\n                        return -1;\n                    }\n                    return cx.addDelimiter(DELIMITERS[BLOCK_MATH_BRACKET], pos, pos + DELIMITER_LENGTH[BLOCK_MATH_BRACKET], cx.char(pos + 2) == 91, cx.char(pos + 2) == 93);\n                }\n            }\n        ],\n        wrap: latexParser\n            ? parseMixed((node, input) => {\n                // Test if the node type is one of the math expression\n                const delimiterLength = DELIMITER_LENGTH[node.type.name];\n                if (delimiterLength) {\n                    return {\n                        parser: latexParser,\n                        // Remove delimiter from LaTeX parser otherwise it won't be highlighted\n                        overlay: [\n                            {\n                                from: node.from + delimiterLength,\n                                to: node.to - delimiterLength\n                            }\n                        ]\n                    };\n                }\n                return null;\n            })\n            : undefined\n    };\n}\n//# sourceMappingURL=ipython-md.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n// Inspired by https://discuss.codemirror.net/t/how-to-implement-ruler/4616/\nimport { Facet } from '@codemirror/state';\nimport { EditorView, ViewPlugin } from '@codemirror/view';\nimport { JSONExt } from '@lumino/coreutils';\nconst RULERS_CLASSNAME = 'cm-rulers';\n/**\n * Rulers style\n */\nconst baseTheme = EditorView.baseTheme({\n    [`.${RULERS_CLASSNAME}`]: { borderRight: '1px dotted gray', opacity: 0.7 }\n});\n/**\n * Rulers facet\n */\nconst rulerConfig = Facet.define({\n    // Merge all unique values\n    combine(value) {\n        const final = value.reduce((agg, arr) => agg.concat(\n        // Check value is not in aggregate nor multiple time in the array.\n        arr.filter((v, idx) => !agg.includes(v) && idx == arr.lastIndexOf(v))), []);\n        return final;\n    }\n});\n/**\n * View plugin displaying the rulers\n */\nconst plugin = ViewPlugin.fromClass(class {\n    constructor(view) {\n        var _a, _b;\n        this.rulersContainer = view.dom.appendChild(document.createElement('div'));\n        this.rulersContainer.style.cssText = `\n                position: absolute;\n                left: 0;\n                top: 0;\n                width: 100%;\n                height: 100%;\n                pointer-events: none;\n                overflow: hidden;\n            `;\n        const defaultCharacterWidth = view.defaultCharacterWidth;\n        const widths = view.state.facet(rulerConfig);\n        const guttersWidths = (_b = (_a = view.scrollDOM.querySelector('.cm-gutters')) === null || _a === void 0 ? void 0 : _a.clientWidth) !== null && _b !== void 0 ? _b : 0;\n        this.rulers = widths.map(width => {\n            const ruler = this.rulersContainer.appendChild(document.createElement('div'));\n            ruler.classList.add(RULERS_CLASSNAME);\n            ruler.style.cssText = `\n                position: absolute;\n                left: ${guttersWidths + width * defaultCharacterWidth}px;\n                height: 100%;\n            `;\n            // FIXME: This should be equal to the amount of padding on a line.\n            // This value should be extracted from CodeMirror rather than hardcoded.\n            ruler.style.width = '6px';\n            return ruler;\n        });\n    }\n    update(update) {\n        var _a, _b;\n        const widths = update.view.state.facet(rulerConfig);\n        if (update.viewportChanged ||\n            update.geometryChanged ||\n            !JSONExt.deepEqual(widths, update.startState.facet(rulerConfig))) {\n            const guttersWidth = (_b = (_a = update.view.scrollDOM.querySelector('.cm-gutters')) === null || _a === void 0 ? void 0 : _a.clientWidth) !== null && _b !== void 0 ? _b : 0;\n            const defaultCharacterWidth = update.view.defaultCharacterWidth;\n            this.rulers.forEach((ruler, rulerIdx) => {\n                ruler.style.left = `${guttersWidth + widths[rulerIdx] * defaultCharacterWidth}px`;\n            });\n        }\n    }\n    destroy() {\n        this.rulers.forEach(ruler => {\n            ruler.remove();\n        });\n        this.rulersContainer.remove();\n    }\n});\n/**\n * Extension for CodeMirror 6 displaying rulers.\n *\n * @param value Rulers position\n * @returns CodeMirror 6 extension\n */\nexport function rulers(value) {\n    return [baseTheme, rulerConfig.of(value), plugin];\n}\n//# sourceMappingURL=rulers.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n *\n * Vendored from https://github.com/yjs/y-codemirror.next\n * licensed under MIT License by Kevin Jahns.\n *\n * Ideally we would depend on the y-codemirror.next, but it is impractical\n * until https://github.com/yjs/y-codemirror.next/issues/27 is resolved.\n *\n * Modifications compared to upstream:\n * - removed spurious mutex (https://github.com/yjs/y-codemirror.next/issues/15)\n * - added TypeScript types\n * - simplified `YUndoManagerConfig` by removing public methods\n * - moved `_onStackItemAdded`, `_onStackItemPopped` and `_storeSelection` definitions out of constructor\n */\nimport { EditorView, ViewPlugin } from '@codemirror/view';\nimport { Facet } from '@codemirror/state';\nimport { ySyncAnnotation, ySyncFacet } from './ybinding';\nexport class YUndoManagerConfig {\n    constructor(undoManager) {\n        this.undoManager = undoManager;\n    }\n}\nexport const yUndoManagerFacet = Facet.define({\n    combine(inputs) {\n        return inputs[inputs.length - 1];\n    }\n});\nclass YUndoManagerPluginValue {\n    constructor(view) {\n        this._onStackItemAdded = ({ stackItem, changedParentTypes }) => {\n            // only store metadata if this type was affected\n            if (changedParentTypes.has(this._syncConf.ytext) &&\n                this._beforeChangeSelection &&\n                !stackItem.meta.has(this)) {\n                // do not overwrite previous stored selection\n                stackItem.meta.set(this, this._beforeChangeSelection);\n            }\n        };\n        this._onStackItemPopped = ({ stackItem }) => {\n            const sel = stackItem.meta.get(this);\n            if (sel) {\n                const selection = this._syncConf.fromYRange(sel);\n                this._view.dispatch(this._view.state.update({\n                    selection,\n                    effects: [EditorView.scrollIntoView(selection)]\n                }));\n                this._storeSelection();\n            }\n        };\n        this._storeSelection = () => {\n            // store the selection before the change is applied so we can restore it with the undo manager.\n            this._beforeChangeSelection = this._syncConf.toYRange(this._view.state.selection.main);\n        };\n        this._view = view;\n        this._conf = view.state.facet(yUndoManagerFacet);\n        this._undoManager = this._conf.undoManager;\n        this._syncConf = view.state.facet(ySyncFacet);\n        this._beforeChangeSelection = null;\n        this._undoManager.on('stack-item-added', this._onStackItemAdded);\n        this._undoManager.on('stack-item-popped', this._onStackItemPopped);\n        this._undoManager.addTrackedOrigin(this._syncConf);\n    }\n    update(update) {\n        if (update.selectionSet &&\n            (update.transactions.length === 0 ||\n                update.transactions[0].annotation(ySyncAnnotation) !== this._syncConf)) {\n            // This only works when YUndoManagerPlugin is included before the sync plugin\n            this._storeSelection();\n        }\n    }\n    destroy() {\n        this._undoManager.off('stack-item-added', this._onStackItemAdded);\n        this._undoManager.off('stack-item-popped', this._onStackItemPopped);\n        this._undoManager.removeTrackedOrigin(this._syncConf);\n    }\n}\nexport const yUndoManager = ViewPlugin.fromClass(YUndoManagerPluginValue);\n//# sourceMappingURL=yundomanager.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n *\n * Binding for yjs and codemirror\n *\n * It is a simplification of https://github.com/yjs/y-codemirror.next\n * licensed under MIT License by Kevin Jahns\n */\nimport { Annotation, EditorSelection, Facet } from '@codemirror/state';\nimport { ViewPlugin } from '@codemirror/view';\nimport { yUndoManager, YUndoManagerConfig, yUndoManagerFacet } from './yundomanager';\nimport { createAbsolutePositionFromRelativePosition, createRelativePositionFromJSON, createRelativePositionFromTypeIndex, relativePositionToJSON } from 'yjs';\n/**\n * Defines a range on text using relative positions that can be transformed back to\n * absolute positions. (https://docs.yjs.dev/api/relative-positions)\n */\nexport class YRange {\n    /**\n     * @param yanchor\n     * @param yhead\n     */\n    constructor(yanchor, yhead) {\n        this.yanchor = yanchor;\n        this.yhead = yhead;\n    }\n    /**\n     * Convert the position to JSON\n     */\n    toJSON() {\n        return {\n            yanchor: relativePositionToJSON(this.yanchor),\n            yhead: relativePositionToJSON(this.yhead)\n        };\n    }\n    /**\n     * Convert a JSON range to a YRange\n     * @param json Range to convert\n     * @return The range as YRange\n     */\n    static fromJSON(json) {\n        return new YRange(createRelativePositionFromJSON(json.yanchor), createRelativePositionFromJSON(json.yhead));\n    }\n}\n/**\n * Yjs binding configuration\n */\nexport class YSyncConfig {\n    /**\n     * Create a new binding configuration\n     *\n     * @param ytext Yjs text to synchronize\n     */\n    constructor(ytext) {\n        this.ytext = ytext;\n    }\n    /**\n     * Helper function to transform an absolute index position to a Yjs-based relative position\n     * (https://docs.yjs.dev/api/relative-positions).\n     *\n     * A relative position can be transformed back to an absolute position even after the document has changed. The position is\n     * automatically adapted. This does not require any position transformations. Relative positions are computed based on\n     * the internal Yjs document model. Peers that share content through Yjs are guaranteed that their positions will always\n     * synced up when using relative positions.\n     *\n     * ```js\n     * import { ySyncFacet } from 'y-codemirror'\n     *\n     * ..\n     * const ysync = view.state.facet(ySyncFacet)\n     * // transform an absolute index position to a ypos\n     * const ypos = ysync.getYPos(3)\n     * // transform the ypos back to an absolute position\n     * ysync.fromYPos(ypos) // => 3\n     * ```\n     *\n     * It cannot be guaranteed that absolute index positions can be synced up between peers.\n     * This might lead to undesired behavior when implementing features that require that all peers see the\n     * same marked range (e.g. a comment plugin).\n     *\n     * @param pos\n     * @param assoc\n     */\n    toYPos(pos, assoc = 0) {\n        return createRelativePositionFromTypeIndex(this.ytext, pos, assoc);\n    }\n    /**\n     * @param rpos\n     */\n    fromYPos(rpos) {\n        const pos = createAbsolutePositionFromRelativePosition(createRelativePositionFromJSON(rpos), this.ytext.doc);\n        if (pos == null || pos.type !== this.ytext) {\n            throw new Error('[y-codemirror] The position you want to retrieve was created by a different document');\n        }\n        return {\n            pos: pos.index,\n            assoc: pos.assoc\n        };\n    }\n    /**\n     * @param range\n     * @return\n     */\n    toYRange(range) {\n        const assoc = range.assoc;\n        const yanchor = this.toYPos(range.anchor, assoc);\n        const yhead = this.toYPos(range.head, assoc);\n        return new YRange(yanchor, yhead);\n    }\n    /**\n     * @param yrange\n     */\n    fromYRange(yrange) {\n        const anchor = this.fromYPos(yrange.yanchor);\n        const head = this.fromYPos(yrange.yhead);\n        if (anchor.pos === head.pos) {\n            return EditorSelection.cursor(head.pos, head.assoc);\n        }\n        return EditorSelection.range(anchor.pos, head.pos);\n    }\n}\n/**\n * Yjs binding facet\n */\nexport const ySyncFacet = Facet.define({\n    combine(inputs) {\n        return inputs[inputs.length - 1];\n    }\n});\n/**\n * Yjs binding annotation\n *\n * It is used to track the origin of the document changes\n */\nexport const ySyncAnnotation = Annotation.define();\n/**\n * Yjs binding view plugin to synchronize the\n * editor state with the Yjs document.\n */\nexport const ySync = ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.conf = view.state.facet(ySyncFacet);\n        this._observer = (event, tr) => {\n            var _a;\n            if (tr.origin !== this.conf) {\n                const delta = event.delta;\n                const changes = [];\n                let pos = 0;\n                for (let i = 0; i < delta.length; i++) {\n                    const d = delta[i];\n                    if (d.insert != null) {\n                        changes.push({ from: pos, to: pos, insert: d.insert });\n                    }\n                    else if (d.delete != null) {\n                        changes.push({ from: pos, to: pos + d.delete, insert: '' });\n                        pos += d.delete;\n                    }\n                    else {\n                        pos += (_a = d.retain) !== null && _a !== void 0 ? _a : 0;\n                    }\n                }\n                view.dispatch({\n                    changes,\n                    // Specified the changes origin to not loop when synchronizing\n                    annotations: [ySyncAnnotation.of(this.conf)]\n                });\n            }\n        };\n        this._ytext = this.conf.ytext;\n        this._ytext.observe(this._observer);\n    }\n    update(update) {\n        if (!update.docChanged ||\n            (update.transactions.length > 0 &&\n                update.transactions[0].annotation(ySyncAnnotation) === this.conf)) {\n            return;\n        }\n        const ytext = this.conf.ytext;\n        ytext.doc.transact(() => {\n            /**\n             * This variable adjusts the fromA position to the current position in the Y.Text type.\n             */\n            let adj = 0;\n            update.changes.iterChanges((fromA, toA, fromB, toB, insert) => {\n                const insertText = insert.sliceString(0, insert.length, '\\n');\n                if (fromA !== toA) {\n                    ytext.delete(fromA + adj, toA - fromA);\n                }\n                if (insertText.length > 0) {\n                    ytext.insert(fromA + adj, insertText);\n                }\n                adj += insertText.length - (toA - fromA);\n            });\n            // Set the configuration as origin to not loop when synchronizing\n        }, this.conf);\n    }\n    destroy() {\n        this._ytext.unobserve(this._observer);\n    }\n});\n/**\n * Extension for CodeMirror 6 binding the Yjs text (source of truth)\n * and the editor state.\n *\n * @param ytext Yjs text to bind\n * @param undoManager Yjs text undo manager\n * @returns CodeMirror 6 extension\n */\nexport function ybinding({ ytext, undoManager }) {\n    const ySyncConfig = new YSyncConfig(ytext);\n    const plugins = [ySyncFacet.of(ySyncConfig), ySync];\n    if (undoManager) {\n        plugins.push(\n        // We need to add a new origin to the undo manager to ensure text updates\n        // are tracked; we also need to restore selection after undo/redo.\n        yUndoManagerFacet.of(new YUndoManagerConfig(undoManager)), yUndoManager);\n    }\n    return plugins;\n}\n//# sourceMappingURL=ybinding.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nexport * from './customStyle';\nexport * from './ipython-md';\nexport * from './rulers';\nexport * from './ybinding';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { closeBrackets, closeBracketsKeymap } from '@codemirror/autocomplete';\nimport { defaultKeymap } from '@codemirror/commands';\nimport { bracketMatching, foldGutter, indentOnInput, indentUnit } from '@codemirror/language';\nimport { Compartment, EditorState, Prec, StateEffect } from '@codemirror/state';\nimport { crosshairCursor, drawSelection, dropCursor, EditorView, highlightActiveLine, highlightSpecialChars, highlightTrailingWhitespace, highlightWhitespace, keymap, lineNumbers, rectangularSelection, scrollPastEnd, tooltips } from '@codemirror/view';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { JSONExt } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\nimport { StateCommands } from './commands';\nimport { customTheme, rulers } from './extensions';\nimport { closeSearchPanel, findNext, findPrevious, openSearchPanel, selectSelectionMatches } from '@codemirror/search';\n/**\n * The class name added to read only editor widgets.\n */\nconst READ_ONLY_CLASS = 'jp-mod-readOnly';\n/**\n * Editor configuration handler\n *\n * It stores the editor configuration and the editor extensions.\n * It also allows to inject new extensions into an editor.\n */\nexport class ExtensionsHandler {\n    constructor({ baseConfiguration, config, defaultExtensions } = {}) {\n        this._configChanged = new Signal(this);\n        this._disposed = new Signal(this);\n        this._isDisposed = false;\n        this._immutables = new Set();\n        this._baseConfig = baseConfiguration !== null && baseConfiguration !== void 0 ? baseConfiguration : {};\n        this._config = config !== null && config !== void 0 ? config : {};\n        this._configurableBuilderMap = new Map(defaultExtensions);\n        const configurables = Object.keys(this._config).concat(Object.keys(this._baseConfig));\n        this._immutables = new Set([...this._configurableBuilderMap.keys()].filter(key => !configurables.includes(key)));\n    }\n    /**\n     * Signal triggered when the editor configuration changes.\n     * It provides the mapping of the new configuration (only those that changed).\n     *\n     * It should result in a call to `IExtensionsHandler.reconfigureExtensions`.\n     */\n    get configChanged() {\n        return this._configChanged;\n    }\n    /**\n     * A signal emitted when the object is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * Tests whether the object is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the object.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._disposed.emit();\n        Signal.clearData(this);\n    }\n    /**\n     * Get a config option for the editor.\n     */\n    getOption(option) {\n        var _a;\n        return (_a = this._config[option]) !== null && _a !== void 0 ? _a : this._baseConfig[option];\n    }\n    /**\n     * Whether the option exists or not.\n     */\n    hasOption(option) {\n        return (Object.keys(this._config).includes(option) ||\n            Object.keys(this._baseConfig).includes(option));\n    }\n    /**\n     * Set a config option for the editor.\n     *\n     * You will need to reconfigure the editor extensions by listening\n     * to `IExtensionsHandler.configChanged`.\n     */\n    setOption(option, value) {\n        // Don't bother setting the option if it is already the same.\n        if (this._config[option] !== value) {\n            this._config[option] = value;\n            this._configChanged.emit({ [option]: value });\n        }\n    }\n    /**\n     * Set a base config option for the editor.\n     *\n     * You will need to reconfigure the editor extensions by listening\n     * to `IExtensionsHandler.configChanged`.\n     */\n    setBaseOptions(options) {\n        // Change values of baseConfig\n        const changed = this._getChangedOptions(options, this._baseConfig);\n        if (changed.length > 0) {\n            this._baseConfig = options;\n            const customizedKeys = Object.keys(this._config);\n            const notOverridden = changed.filter(k => !customizedKeys.includes(k));\n            if (notOverridden.length > 0) {\n                this._configChanged.emit(notOverridden.reduce((agg, key) => {\n                    agg[key] = this._baseConfig[key];\n                    return agg;\n                }, {}));\n            }\n        }\n        // Change values of config keys if present in options\n        for (const key of Object.keys(options)) {\n            if (key in this._config && this._config[key] != options[key]) {\n                this.setOption(key, options[key]);\n            }\n        }\n    }\n    /**\n     * Set config options for the editor.\n     *\n     * You will need to reconfigure the editor extensions by listening\n     * to `EditorHandler.configChanged`.\n     *\n     * This method is preferred when setting several options. The\n     * options are set within an operation, which only performs\n     * the costly update at the end, and not after every option\n     * is set.\n     */\n    setOptions(options) {\n        const changed = this._getChangedOptions(options, this._config);\n        if (changed.length > 0) {\n            this._config = { ...options };\n            this._configChanged.emit(changed.reduce((agg, key) => {\n                var _a;\n                agg[key] = (_a = this._config[key]) !== null && _a !== void 0 ? _a : this._baseConfig[key];\n                return agg;\n            }, {}));\n        }\n    }\n    /**\n     * Reconfigures the extension mapped with key with the provided value.\n     *\n     * @param view Editor view\n     * @param key Parameter unique key\n     * @param value Parameter value to be applied\n     */\n    reconfigureExtension(view, key, value) {\n        const effect = this.getEffect(view.state, key, value);\n        if (effect) {\n            view.dispatch({\n                effects: [effect]\n            });\n        }\n    }\n    /**\n     * Reconfigures all the extensions mapped with the options from the\n     * provided partial configuration.\n     *\n     * @param view Editor view\n     * @param configuration Editor configuration\n     */\n    reconfigureExtensions(view, configuration) {\n        const effects = Object.keys(configuration)\n            .filter(key => this.has(key))\n            .map(key => this.getEffect(view.state, key, configuration[key]));\n        view.dispatch({\n            effects: effects.filter(effect => effect !== null)\n        });\n    }\n    /**\n     * Appends extensions to the top-level configuration of the\n     * editor.\n     *\n     * Injected extension cannot be removed.\n     *\n     * ### Notes\n     * You should prefer registering a IEditorExtensionFactory instead\n     * of this feature.\n     *\n     * @alpha\n     * @param view Editor view\n     * @param extension Editor extension to inject\n     */\n    injectExtension(view, extension) {\n        view.dispatch({\n            effects: StateEffect.appendConfig.of(extension)\n        });\n    }\n    /**\n     * Returns the list of initial extensions of an editor\n     * based on the configuration.\n     *\n     * @returns The initial editor extensions\n     */\n    getInitialExtensions() {\n        const configuration = { ...this._baseConfig, ...this._config };\n        const extensions = [...this._immutables]\n            .map(key => { var _a; return (_a = this.get(key)) === null || _a === void 0 ? void 0 : _a.instance(undefined); })\n            .filter(ext => ext);\n        for (const k of Object.keys(configuration)) {\n            const builder = this.get(k);\n            if (builder) {\n                const value = configuration[k];\n                extensions.push(builder.instance(value));\n            }\n        }\n        return extensions;\n    }\n    /**\n     * Get a extension builder\n     * @param key Extension unique identifier\n     * @returns The extension builder\n     */\n    get(key) {\n        return this._configurableBuilderMap.get(key);\n    }\n    /**\n     * Whether the editor has an extension for the identifier.\n     *\n     * @param key Extension unique identifier\n     * @returns Extension existence\n     */\n    has(key) {\n        return this._configurableBuilderMap.has(key);\n    }\n    getEffect(state, key, value) {\n        var _a;\n        const builder = this.get(key);\n        return (_a = builder === null || builder === void 0 ? void 0 : builder.reconfigure(value)) !== null && _a !== void 0 ? _a : null;\n    }\n    _getChangedOptions(newConfig, oldConfig) {\n        const changed = new Array();\n        const newKeys = new Array();\n        for (const [key, value] of Object.entries(newConfig)) {\n            newKeys.push(key);\n            if (oldConfig[key] !== value) {\n                changed.push(key);\n            }\n        }\n        // Add removed old keys\n        changed.push(...Object.keys(oldConfig).filter(k => !newKeys.includes(k)));\n        return changed;\n    }\n}\n/**\n * CodeMirror extensions registry\n */\nexport class EditorExtensionRegistry {\n    constructor() {\n        this.configurationBuilder = new Map();\n        this.configurationSchema = {};\n        this.defaultOptions = {};\n        this.handlers = new Set();\n        this.immutableExtensions = new Set();\n        this._baseConfiguration = {};\n    }\n    /**\n     * Base editor configuration\n     *\n     * This is the default configuration optionally modified by the user;\n     * e.g. through user settings.\n     */\n    get baseConfiguration() {\n        return { ...this.defaultOptions, ...this._baseConfiguration };\n    }\n    set baseConfiguration(v) {\n        if (!JSONExt.deepEqual(v, this._baseConfiguration)) {\n            this._baseConfiguration = v;\n            for (const handler of this.handlers) {\n                handler.setBaseOptions(this.baseConfiguration);\n            }\n        }\n    }\n    /**\n     * Default editor configuration\n     *\n     * This is the default configuration as defined when extensions\n     * are registered.\n     */\n    get defaultConfiguration() {\n        // Only options with schema should be JSON serializable\n        // So we cannot use `JSONExt.deepCopy` on the default options.\n        return Object.freeze({ ...this.defaultOptions });\n    }\n    /**\n     * Editor configuration JSON schema\n     */\n    get settingsSchema() {\n        return Object.freeze(JSONExt.deepCopy(this.configurationSchema));\n    }\n    /**\n     * Add a default editor extension\n     *\n     * @template T Extension parameter type\n     * @param factory Extension factory\n     */\n    addExtension(factory) {\n        var _a;\n        if (this.configurationBuilder.has(factory.name)) {\n            throw new Error(`Extension named ${factory.name} is already registered.`);\n        }\n        this.configurationBuilder.set(factory.name, factory);\n        if (typeof factory.default != 'undefined') {\n            this.defaultOptions[factory.name] = factory.default;\n        }\n        if (factory.schema) {\n            this.configurationSchema[factory.name] = {\n                default: (_a = factory.default) !== null && _a !== void 0 ? _a : null,\n                ...factory.schema\n            };\n            this.defaultOptions[factory.name] =\n                this.configurationSchema[factory.name].default;\n        }\n    }\n    /**\n     * Create a new extensions handler for an editor\n     *\n     * @param options Extensions options and initial editor configuration\n     */\n    createNew(options) {\n        const configuration = new Array();\n        for (const [key, builder] of this.configurationBuilder.entries()) {\n            const extension = builder.factory(options);\n            if (extension) {\n                configuration.push([key, extension]);\n            }\n        }\n        const handler = new ExtensionsHandler({\n            baseConfiguration: this.baseConfiguration,\n            config: options.config,\n            defaultExtensions: configuration\n        });\n        this.handlers.add(handler);\n        handler.disposed.connect(() => {\n            this.handlers.delete(handler);\n        });\n        return handler;\n    }\n}\n/**\n * Editor extension registry namespace\n */\n(function (EditorExtensionRegistry) {\n    /**\n     * Dynamically configurable editor extension.\n     */\n    class ConfigurableExtension {\n        /**\n         * Create a dynamic editor extension.\n         *\n         * @param builder Extension builder\n         */\n        constructor(builder) {\n            this._compartment = new Compartment();\n            this._builder = builder;\n        }\n        /**\n         * Create an editor extension for the provided value.\n         *\n         * @param value Editor extension parameter value\n         * @returns The editor extension\n         */\n        instance(value) {\n            return this._compartment.of(this._builder(value));\n        }\n        /**\n         * Reconfigure an editor extension.\n         *\n         * @param value Editor extension value\n         * @returns Editor state effect\n         */\n        reconfigure(value) {\n            return this._compartment.reconfigure(this._builder(value));\n        }\n    }\n    /**\n     * Immutable editor extension class\n     */\n    class ImmutableExtension {\n        /**\n         * Create an immutable editor extension.\n         *\n         * @param extension Extension\n         */\n        constructor(extension) {\n            this._extension = extension;\n        }\n        /**\n         * Create an editor extension.\n         *\n         * @returns The editor extension\n         */\n        instance() {\n            return this._extension;\n        }\n        /**\n         * Reconfigure an editor extension.\n         *\n         * This is a no-op\n         */\n        reconfigure() {\n            // This is a no-op\n            return null;\n        }\n    }\n    /**\n     * Creates a dynamically configurable editor extension.\n     *\n     * @param builder Extension builder\n     * @return The extension\n     */\n    function createConfigurableExtension(builder) {\n        return new ConfigurableExtension(builder);\n    }\n    EditorExtensionRegistry.createConfigurableExtension = createConfigurableExtension;\n    /**\n     * Creates a configurable extension returning\n     * one of two extensions depending on a boolean value.\n     *\n     * @param truthy Extension to apply when the parameter is true\n     * @param falsy Extension to apply when the parameter is false\n     * @return The extension\n     */\n    function createConditionalExtension(truthy, falsy = []) {\n        return new ConfigurableExtension(value => value ? truthy : falsy);\n    }\n    EditorExtensionRegistry.createConditionalExtension = createConditionalExtension;\n    /**\n     * Creates an immutable extension.\n     *\n     * @param extension Immutable extension\n     * @return The extension\n     */\n    function createImmutableExtension(extension) {\n        return new ImmutableExtension(extension);\n    }\n    EditorExtensionRegistry.createImmutableExtension = createImmutableExtension;\n    /**\n     * Get the default editor extensions.\n     *\n     * @returns CodeMirror 6 extension factories\n     */\n    function getDefaultExtensions(options = {}) {\n        const { themes, translator } = options;\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        const extensions = [\n            Object.freeze({\n                name: 'autoClosingBrackets',\n                default: false,\n                factory: () => createConditionalExtension(closeBrackets()),\n                schema: {\n                    type: 'boolean',\n                    title: trans.__('Auto Closing Brackets')\n                }\n            }),\n            Object.freeze({\n                name: 'codeFolding',\n                default: false,\n                factory: () => createConditionalExtension(foldGutter()),\n                schema: {\n                    type: 'boolean',\n                    title: trans.__('Code Folding')\n                }\n            }),\n            Object.freeze({\n                name: 'cursorBlinkRate',\n                default: 1200,\n                factory: () => createConfigurableExtension((value) => drawSelection({ cursorBlinkRate: value })),\n                schema: {\n                    type: 'number',\n                    title: trans.__('Cursor blinking rate'),\n                    description: trans.__('Half-period in milliseconds used for cursor blinking. The default blink rate is 1200ms. By setting this to zero, blinking can be disabled.')\n                }\n            }),\n            Object.freeze({\n                name: 'highlightActiveLine',\n                default: false,\n                factory: () => createConditionalExtension(highlightActiveLine()),\n                schema: {\n                    type: 'boolean',\n                    title: trans.__('Highlight the active line')\n                }\n            }),\n            Object.freeze({\n                name: 'highlightSpecialCharacters',\n                default: true,\n                factory: () => createConditionalExtension(highlightSpecialChars()),\n                schema: {\n                    type: 'boolean',\n                    title: trans.__('Highlight special characters')\n                }\n            }),\n            Object.freeze({\n                name: 'highlightTrailingWhitespace',\n                default: false,\n                factory: () => createConditionalExtension(highlightTrailingWhitespace()),\n                schema: {\n                    type: 'boolean',\n                    title: trans.__('Highlight trailing white spaces')\n                }\n            }),\n            Object.freeze({\n                name: 'highlightWhitespace',\n                default: false,\n                factory: () => createConditionalExtension(highlightWhitespace()),\n                schema: {\n                    type: 'boolean',\n                    title: trans.__('Highlight white spaces')\n                }\n            }),\n            Object.freeze({\n                name: 'indentUnit',\n                default: '4',\n                factory: () => createConfigurableExtension((value) => value == 'Tab'\n                    ? indentUnit.of('\\t')\n                    : indentUnit.of(' '.repeat(parseInt(value, 10)))),\n                schema: {\n                    type: 'string',\n                    title: trans.__('Indentation unit'),\n                    description: trans.__('The indentation is a `Tab` or the number of spaces. This defaults to 4 spaces.'),\n                    enum: ['Tab', '1', '2', '4', '8']\n                }\n            }),\n            // Default keyboard shortcuts\n            // TODO at some point we may want to get this configurable\n            Object.freeze({\n                name: 'keymap',\n                default: [\n                    {\n                        key: 'Mod-Enter',\n                        run: StateCommands.insertBlankLineOnRun\n                    },\n                    {\n                        key: 'Enter',\n                        run: StateCommands.completerOrInsertNewLine\n                    },\n                    {\n                        key: 'Escape',\n                        run: StateCommands.simplifySelectionAndMaybeSwitchToCommandMode\n                    },\n                    ...defaultKeymap.filter(binding => {\n                        // - Disable the default Mod-Enter handler as it always prevents default,\n                        //   preventing us from running cells with Ctrl + Enter. Instead we provide\n                        //   our own handler (insertBlankLineOnRun) which does not prevent default\n                        //   when used in code runner editors.\n                        // - Disable the default Shift-Mod-k handler because users prefer Ctrl+D\n                        //   for deleting lines, and because it prevents opening Table of Contents\n                        //   with Ctrl+Shift+K.\n                        // - Disable shortcuts for toggling comments (\"Mod-/\" and \"Alt-A\")\n                        //   as these as handled by lumino command\n                        // - Disable Escape handler because it prevents default and we\n                        //   want to run a cell action (switch to command mode) on Esc\n                        // - Disable default Enter handler because it prevents us from\n                        //   accepting a completer suggestion with Enter.\n                        // - Disable Ctrl-m (Shift-Alt-m on Mac) which toggles tab focus mode;\n                        //   JupyterLab binds `Esc` to an equivalent behavior (switching\n                        //   between command end edit mode) in notebooks, but has no equivalent\n                        //   in the File Editor; instead, a `codemirror:toggle-tab-focus-mode`\n                        //   command can be bound to invoke this behaviour.\n                        return ![\n                            'Ctrl-m',\n                            'Mod-Enter',\n                            'Shift-Mod-k',\n                            'Mod-/',\n                            'Alt-A',\n                            'Escape',\n                            'Enter'\n                        ].includes(binding.key);\n                    }),\n                    {\n                        key: 'Tab',\n                        run: StateCommands.indentMoreOrInsertTab,\n                        shift: StateCommands.dedentIfNotLaunchingTooltip\n                    }\n                ],\n                factory: () => createConfigurableExtension(value => keymap.of(value))\n            }),\n            Object.freeze({\n                name: 'lineNumbers',\n                default: true,\n                factory: () => createConditionalExtension(lineNumbers()),\n                schema: {\n                    type: 'boolean',\n                    title: trans.__('Line Numbers')\n                }\n            }),\n            Object.freeze({\n                name: 'lineWrap',\n                factory: () => createConditionalExtension(EditorView.lineWrapping),\n                default: true,\n                schema: {\n                    type: 'boolean',\n                    title: trans.__('Line Wrap')\n                }\n            }),\n            Object.freeze({\n                name: 'dropCursor',\n                default: true,\n                factory: () => createConditionalExtension(dropCursor()),\n                schema: {\n                    type: 'boolean',\n                    title: trans.__('Drop Cursor')\n                }\n            }),\n            Object.freeze({\n                name: 'matchBrackets',\n                default: true,\n                factory: () => createConditionalExtension([\n                    bracketMatching(),\n                    // closeBracketsKeymap must have higher precedence over defaultKeymap\n                    Prec.high(keymap.of(closeBracketsKeymap))\n                ]),\n                schema: {\n                    type: 'boolean',\n                    title: trans.__('Match Brackets')\n                }\n            }),\n            Object.freeze({\n                name: 'rectangularSelection',\n                default: true,\n                factory: () => createConditionalExtension([\n                    rectangularSelection(),\n                    crosshairCursor()\n                ]),\n                schema: {\n                    type: 'boolean',\n                    title: trans.__('Rectangular selection'),\n                    description: trans.__('Rectangular (block) selection can be created by dragging the mouse pointer while holding the left mouse button and the Alt key. When the Alt key is pressed, a crosshair cursor will appear, indicating that the rectangular selection mode is active.')\n                }\n            }),\n            Object.freeze({\n                name: 'readOnly',\n                default: false,\n                factory: () => createConfigurableExtension((value) => [\n                    EditorState.readOnly.of(value),\n                    value\n                        ? EditorView.editorAttributes.of({ class: READ_ONLY_CLASS })\n                        : []\n                ])\n            }),\n            Object.freeze({\n                name: 'rulers',\n                default: [],\n                factory: () => createConfigurableExtension((value) => value.length > 0 ? rulers(value) : []),\n                schema: {\n                    type: 'array',\n                    title: trans.__('Rulers'),\n                    items: {\n                        type: 'number',\n                        minimum: 0\n                    }\n                }\n            }),\n            Object.freeze({\n                name: 'extendSelection',\n                default: true,\n                factory: () => createConditionalExtension(keymap.of([\n                    {\n                        key: 'Mod-Shift-l',\n                        run: selectSelectionMatches,\n                        preventDefault: true\n                    }\n                ]))\n            }),\n            Object.freeze({\n                // Whether to activate the native CodeMirror search panel or not.\n                name: 'searchWithCM',\n                default: false,\n                factory: () => createConditionalExtension(keymap.of([\n                    {\n                        key: 'Mod-f',\n                        run: openSearchPanel,\n                        scope: 'editor search-panel'\n                    },\n                    {\n                        key: 'F3',\n                        run: findNext,\n                        shift: findPrevious,\n                        scope: 'editor search-panel',\n                        preventDefault: true\n                    },\n                    {\n                        key: 'Mod-g',\n                        run: findNext,\n                        shift: findPrevious,\n                        scope: 'editor search-panel',\n                        preventDefault: true\n                    },\n                    {\n                        key: 'Escape',\n                        run: closeSearchPanel,\n                        scope: 'editor search-panel'\n                    }\n                ]))\n            }),\n            Object.freeze({\n                name: 'scrollPastEnd',\n                default: false,\n                factory: (options) => options.inline ? null : createConditionalExtension(scrollPastEnd())\n            }),\n            Object.freeze({\n                name: 'smartIndent',\n                default: true,\n                factory: () => createConditionalExtension(indentOnInput()),\n                schema: {\n                    type: 'boolean',\n                    title: trans.__('Smart Indentation')\n                }\n            }),\n            /**\n             * tabFocusable\n             *\n             * Can the user use the tab key to focus on / enter the CodeMirror editor?\n             * If this is false, the CodeMirror editor can still be focused (via\n             * mouse-click, for example), just not via tab key navigation.\n             *\n             * It can be useful to set tabFocusable to false when the editor is\n             * embedded in a context that provides an alternative to the tab key for\n             * navigation. For example, the Notebook widget allows the user to move\n             * from one cell to another using the up and down arrow keys and to enter\n             * and exit the CodeMirror editor associated with that cell by pressing\n             * the enter and escape keys, respectively.\n             */\n            Object.freeze({\n                name: 'tabFocusable',\n                // The default for this needs to be true because the CodeMirror editor\n                // is used in lots of different places. By default, a user should be\n                // able to tab into a CodeMirror editor on the page, and by default, the\n                // user should be able to get out of the editor by pressing the escape\n                // key then immediately pressing the tab key (or shift+tab to go\n                // backwards on the page). If there are places in the app where this\n                // model of user interaction doesn't make sense or is broken, those\n                // places should be remedied on a case-by-case basis, **not** by making\n                // `tabFocusable` false by default.\n                default: true,\n                factory: () => createConditionalExtension(EditorView.contentAttributes.of({\n                    tabIndex: '0'\n                }), EditorView.contentAttributes.of({\n                    tabIndex: '-1'\n                }))\n            }),\n            Object.freeze({\n                name: 'tabSize',\n                default: 4,\n                factory: () => createConfigurableExtension((value) => EditorState.tabSize.of(value)),\n                schema: {\n                    type: 'number',\n                    title: trans.__('Tab size')\n                }\n            }),\n            Object.freeze({\n                name: 'tooltips',\n                factory: () => \n                // we need `absolute` due to use of `contain: layout` in lumino;\n                // we attach to body to ensure cursor collaboration tooltip is\n                // visible in first line of the editor.\n                createImmutableExtension(tooltips({\n                    position: 'absolute',\n                    parent: document.body\n                }))\n            }),\n            Object.freeze({\n                name: 'allowMultipleSelections',\n                default: true,\n                factory: () => createConfigurableExtension((value) => EditorState.allowMultipleSelections.of(value)),\n                schema: {\n                    type: 'boolean',\n                    title: trans.__('Multiple selections')\n                }\n            }),\n            Object.freeze({\n                name: 'customStyles',\n                factory: () => createConfigurableExtension(config => customTheme(config)),\n                default: {\n                    fontFamily: null,\n                    fontSize: null,\n                    lineHeight: null\n                },\n                schema: {\n                    title: trans.__('Custom editor styles'),\n                    type: 'object',\n                    properties: {\n                        fontFamily: {\n                            type: ['string', 'null'],\n                            title: trans.__('Font Family')\n                        },\n                        fontSize: {\n                            type: ['number', 'null'],\n                            minimum: 1,\n                            maximum: 100,\n                            title: trans.__('Font Size')\n                        },\n                        lineHeight: {\n                            type: ['number', 'null'],\n                            title: trans.__('Line Height')\n                        }\n                    },\n                    additionalProperties: false\n                }\n            })\n        ];\n        if (themes) {\n            extensions.push(Object.freeze({\n                name: 'theme',\n                default: 'jupyter',\n                factory: () => createConfigurableExtension(value => themes.getTheme(value)),\n                schema: {\n                    type: 'string',\n                    title: trans.__('Theme'),\n                    description: trans.__('CodeMirror theme')\n                }\n            }));\n        }\n        if (translator) {\n            extensions.push(Object.freeze({\n                name: 'translation',\n                // The list of internal strings is available at https://codemirror.net/examples/translate/\n                default: {\n                    // @codemirror/view\n                    'Control character': trans.__('Control character'),\n                    // @codemirror/commands\n                    'Selection deleted': trans.__('Selection deleted'),\n                    // @codemirror/language\n                    'Folded lines': trans.__('Folded lines'),\n                    'Unfolded lines': trans.__('Unfolded lines'),\n                    to: trans.__('to'),\n                    'folded code': trans.__('folded code'),\n                    unfold: trans.__('unfold'),\n                    'Fold line': trans.__('Fold line'),\n                    'Unfold line': trans.__('Unfold line'),\n                    // @codemirror/search\n                    'Go to line': trans.__('Go to line'),\n                    go: trans.__('go'),\n                    Find: trans.__('Find'),\n                    Replace: trans.__('Replace'),\n                    next: trans.__('next'),\n                    previous: trans.__('previous'),\n                    all: trans.__('all'),\n                    'match case': trans.__('match case'),\n                    replace: trans.__('replace'),\n                    'replace all': trans.__('replace all'),\n                    close: trans.__('close'),\n                    'current match': trans.__('current match'),\n                    'replaced $ matches': trans.__('replaced $ matches'),\n                    'replaced match on line $': trans.__('replaced match on line $'),\n                    'on line': trans.__('on line'),\n                    // @codemirror/autocomplete\n                    Completions: trans.__('Completions'),\n                    // @codemirror/lint\n                    Diagnostics: trans.__('Diagnostics'),\n                    'No diagnostics': trans.__('No diagnostics')\n                },\n                factory: () => createConfigurableExtension(value => EditorState.phrases.of(value))\n            }));\n        }\n        return extensions;\n    }\n    EditorExtensionRegistry.getDefaultExtensions = getDefaultExtensions;\n})(EditorExtensionRegistry || (EditorExtensionRegistry = {}));\n//# sourceMappingURL=extension.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { defaultHighlightStyle, HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { EditorView } from '@codemirror/view';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { tags as t } from '@lezer/highlight';\nexport const jupyterEditorTheme = EditorView.theme({\n    /**\n     * CodeMirror themes are handling the background/color in this way. This works\n     * fine for CodeMirror editors outside the notebook, but the notebook styles\n     * these things differently.\n     */\n    '&': {\n        background: 'var(--jp-layout-color0)',\n        color: 'var(--jp-content-font-color1)'\n    },\n    /* In the notebook, we want this styling to be handled by its container */\n    '.jp-CodeConsole &, .jp-Notebook &': {\n        background: 'transparent'\n    },\n    '.cm-content': {\n        caretColor: 'var(--jp-editor-cursor-color)'\n    },\n    /* Inherit font family from .cm-editor */\n    '.cm-scroller': {\n        fontFamily: 'inherit'\n    },\n    '.cm-cursor, .cm-dropCursor': {\n        borderLeft: 'var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color)'\n    },\n    '.cm-selectionBackground, .cm-content ::selection': {\n        backgroundColor: 'var(--jp-editor-selected-background)'\n    },\n    '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground': {\n        backgroundColor: 'var(--jp-editor-selected-focused-background)'\n    },\n    '.cm-gutters': {\n        borderRight: '1px solid var(--jp-border-color2)',\n        backgroundColor: 'var(--jp-layout-color2)'\n    },\n    '.cm-gutter': {\n        backgroundColor: 'var(--jp-layout-color2)'\n    },\n    '.cm-activeLine': {\n        backgroundColor: 'color-mix(in srgb, var(--jp-layout-color3) 25%, transparent)'\n    },\n    '.cm-lineNumbers': {\n        color: 'var(--jp-ui-font-color2)'\n    },\n    '.cm-searchMatch': {\n        backgroundColor: 'var(--jp-search-unselected-match-background-color)',\n        color: 'var(--jp-search-unselected-match-color)'\n    },\n    '.cm-searchMatch.cm-searchMatch-selected': {\n        backgroundColor: 'var(--jp-search-selected-match-background-color) !important',\n        color: 'var(--jp-search-selected-match-color) !important'\n    },\n    '.cm-tooltip': {\n        backgroundColor: 'var(--jp-layout-color1)'\n    }\n});\n// The list of available tags for syntax highlighting is available at\n// https://lezer.codemirror.net/docs/ref/#highlight.tags\nexport const jupyterHighlightStyle = HighlightStyle.define([\n    // Order matters - a rule will override the previous ones; important for example for in headings styles.\n    { tag: t.meta, color: 'var(--jp-mirror-editor-meta-color)' },\n    { tag: t.heading, color: 'var(--jp-mirror-editor-header-color)' },\n    {\n        tag: [t.heading1, t.heading2, t.heading3, t.heading4],\n        color: 'var(--jp-mirror-editor-header-color)',\n        fontWeight: 'bold'\n    },\n    {\n        tag: t.keyword,\n        color: 'var(--jp-mirror-editor-keyword-color)',\n        fontWeight: 'bold'\n    },\n    { tag: t.atom, color: 'var(--jp-mirror-editor-atom-color)' },\n    { tag: t.number, color: 'var(--jp-mirror-editor-number-color)' },\n    {\n        tag: [t.definition(t.name), t.function(t.definition(t.variableName))],\n        color: 'var(--jp-mirror-editor-def-color)'\n    },\n    {\n        tag: t.standard(t.variableName),\n        color: 'var(--jp-mirror-editor-builtin-color)'\n    },\n    {\n        tag: [t.special(t.variableName), t.self],\n        color: 'var(--jp-mirror-editor-variable-2-color)'\n    },\n    { tag: t.punctuation, color: 'var(--jp-mirror-editor-punctuation-color)' },\n    { tag: t.propertyName, color: 'var(--jp-mirror-editor-property-color)' },\n    {\n        tag: t.operator,\n        color: 'var(--jp-mirror-editor-operator-color)',\n        fontWeight: 'bold'\n    },\n    {\n        tag: t.comment,\n        color: 'var(--jp-mirror-editor-comment-color)',\n        fontStyle: 'italic'\n    },\n    { tag: t.string, color: 'var(--jp-mirror-editor-string-color)' },\n    {\n        tag: [t.labelName, t.monospace, t.special(t.string)],\n        color: 'var(--jp-mirror-editor-string-2-color)'\n    },\n    { tag: t.bracket, color: 'var(--jp-mirror-editor-bracket-color)' },\n    { tag: t.tagName, color: 'var(--jp-mirror-editor-tag-color)' },\n    { tag: t.attributeName, color: 'var(--jp-mirror-editor-attribute-color)' },\n    { tag: t.quote, color: 'var(--jp-mirror-editor-quote-color)' },\n    {\n        tag: t.link,\n        color: 'var(--jp-mirror-editor-link-color)',\n        textDecoration: 'underline'\n    },\n    { tag: [t.separator, t.derefOperator, t.paren], color: '' },\n    { tag: t.strong, fontWeight: 'bold' },\n    { tag: t.emphasis, fontStyle: 'italic' },\n    { tag: t.strikethrough, textDecoration: 'line-through' },\n    {\n        tag: t.bool,\n        color: 'var(--jp-mirror-editor-keyword-color)',\n        fontWeight: 'bold'\n    }\n]);\n/**\n * JupyterLab CodeMirror 6 theme\n */\nexport const jupyterTheme = [\n    jupyterEditorTheme,\n    syntaxHighlighting(jupyterHighlightStyle)\n];\n/**\n * CodeMirror 6 theme registry\n */\nexport class EditorThemeRegistry {\n    constructor() {\n        /**\n         * CodeMirror 6 themes\n         */\n        this._themeMap = new Map([\n            ['jupyter', Object.freeze({ name: 'jupyter', theme: jupyterTheme })]\n        ]);\n    }\n    /**\n     * Get all themes\n     */\n    get themes() {\n        return Array.from(this._themeMap.values());\n    }\n    /**\n     * Get the default CodeMirror 6 theme for JupyterLab\n     *\n     * @returns Default theme\n     */\n    defaultTheme() {\n        return this._themeMap.get('jupyter').theme;\n    }\n    /**\n     * Register a new theme.\n     *\n     * @param theme Codemirror 6 theme\n     */\n    addTheme(theme) {\n        if (this._themeMap.has(theme.name)) {\n            throw new Error(`A theme named '${theme.name}' is already registered.`);\n        }\n        this._themeMap.set(theme.name, { displayName: theme.name, ...theme });\n    }\n    /**\n     * Get a theme.\n     *\n     * #### Notes\n     * It falls back to the default theme\n     *\n     * @param name Theme name\n     * @returns Theme extension\n     */\n    getTheme(name) {\n        var _a;\n        const ext = (_a = this._themeMap.get(name)) === null || _a === void 0 ? void 0 : _a.theme;\n        return ext !== null && ext !== void 0 ? ext : this.defaultTheme();\n    }\n}\n/**\n * EditorThemeRegistry namespace\n */\n(function (EditorThemeRegistry) {\n    /**\n     * Get the default editor themes.\n     *\n     * @param translator Application translator\n     * @returns Default CodeMirror 6 themes\n     */\n    function getDefaultThemes(translator) {\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        return [\n            Object.freeze({\n                name: 'codemirror',\n                displayName: trans.__('codemirror'),\n                theme: [\n                    EditorView.baseTheme({}),\n                    syntaxHighlighting(defaultHighlightStyle)\n                ]\n            })\n        ];\n    }\n    EditorThemeRegistry.getDefaultThemes = getDefaultThemes;\n})(EditorThemeRegistry || (EditorThemeRegistry = {}));\n//# sourceMappingURL=theme.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { syntaxTree } from '@codemirror/language';\nimport { RangeSetBuilder } from '@codemirror/state';\nimport { Decoration, ViewPlugin } from '@codemirror/view';\nimport { NodeProp } from '@lezer/common';\nexport class PythonBuiltin {\n    constructor(view, langPython) {\n        this.langPython = langPython;\n        this.tree = syntaxTree(view.state);\n        this.mark = Decoration.mark({ class: 'cm-builtin' });\n        this.decorations = this.buildDeco(view);\n        this.decoratedTo = view.viewport.to;\n    }\n    update(update) {\n        let tree = syntaxTree(update.state);\n        let { viewport } = update.view, decoratedToMapped = update.changes.mapPos(this.decoratedTo, 1);\n        if (tree.length < viewport.to &&\n            tree.type == this.tree.type &&\n            decoratedToMapped >= viewport.to) {\n            this.decorations = this.decorations.map(update.changes);\n            this.decoratedTo = decoratedToMapped;\n        }\n        else if (tree != this.tree || update.viewportChanged) {\n            this.tree = tree;\n            this.decorations = this.buildDeco(update.view);\n            this.decoratedTo = viewport.to;\n        }\n    }\n    buildDeco(view) {\n        if (!this.tree.length)\n            return Decoration.none;\n        let builder = new RangeSetBuilder();\n        const enter = (node) => {\n            var _a;\n            const cursor = node.node.cursor();\n            // Handle nested language, e.g. Markdown\n            const mounted = cursor.tree && cursor.tree.prop(NodeProp.mounted);\n            if (mounted && mounted.overlay) {\n                (_a = node.node\n                    .enter(mounted.overlay[0].from + node.from, 1)) === null || _a === void 0 ? void 0 : _a.cursor().iterate(enter);\n            }\n            if (this.langPython.isActiveAt(view.state, node.from + 1) &&\n                node.name === 'VariableName') {\n                const variableName = view.state.sliceDoc(node.from, node.to);\n                if (builtins.includes(variableName)) {\n                    builder.add(node.from, node.to, this.mark);\n                }\n            }\n        };\n        for (let { from, to } of view.visibleRanges) {\n            this.tree.iterate({ enter, from, to });\n        }\n        return builder.finish();\n    }\n}\nexport function pythonBuiltin(langPython) {\n    return ViewPlugin.define(view => new PythonBuiltin(view, langPython), {\n        decorations: v => v.decorations\n    });\n}\nconst builtins = [\n    'abs',\n    'aiter',\n    'all',\n    'any',\n    'anext',\n    'ascii',\n    'bin',\n    'bool',\n    'breakpoint',\n    'bytearray',\n    'bytes',\n    'callable',\n    'chr',\n    'classmethod',\n    'compile',\n    'complex',\n    'delattr',\n    'dict',\n    'dir',\n    'divmod',\n    'enumerate',\n    'eval',\n    'exec',\n    'filter',\n    'float',\n    'format',\n    'frozenset',\n    'getattr',\n    'globals',\n    'hasattr',\n    'hash',\n    'help',\n    'hex',\n    'id',\n    'input',\n    'int',\n    'isinstance',\n    'issubclass',\n    'iter',\n    'len',\n    'list',\n    'locals',\n    'map',\n    'max',\n    'memoryview',\n    'min',\n    'next',\n    'object',\n    'oct',\n    'open',\n    'ord',\n    'pow',\n    'print',\n    'property',\n    'range',\n    'repr',\n    'reversed',\n    'round',\n    'set',\n    'setattr',\n    'slice',\n    'sorted',\n    'staticmethod',\n    'str',\n    'sum',\n    'super',\n    'tuple',\n    'type',\n    'vars',\n    'zip',\n    '__import__'\n];\n//# sourceMappingURL=pythonBuiltin.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { LanguageDescription, LanguageSupport, LRLanguage, StreamLanguage } from '@codemirror/language';\nimport { IEditorMimeTypeService } from '@jupyterlab/codeeditor';\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { buildParser } from '@lezer/generator';\nimport { highlightTree } from '@lezer/highlight';\nimport { jupyterHighlightStyle } from './theme';\nimport { pythonBuiltin } from './pythonBuiltin';\n/**\n * CodeMirror language registry\n */\nexport class EditorLanguageRegistry {\n    constructor() {\n        this._modeList = [];\n        // Add default language text/plain -> No expressions to parse\n        this.addLanguage({\n            name: 'none',\n            mime: 'text/plain',\n            support: new LanguageSupport(\n            // Create a dummy parser that as no expression to parse\n            LRLanguage.define({ parser: buildParser('@top Program { }') }))\n        });\n    }\n    /**\n     * Register a new language for CodeMirror\n     *\n     * @param language Language to register\n     */\n    addLanguage(language) {\n        var _a;\n        const info = (_a = this.findByName(language.name)) !== null && _a !== void 0 ? _a : this.findByMIME(language.mime, true);\n        if (info) {\n            throw new Error(`${language.mime} already registered`);\n        }\n        this._modeList.push(this.makeSpec(language));\n    }\n    /**\n     * Ensure a codemirror mode is available by name or Codemirror spec.\n     *\n     * @param language - The mode to ensure.  If it is a string, uses [findBest]\n     *   to get the appropriate spec.\n     *\n     * @returns A promise that resolves when the mode is available.\n     */\n    async getLanguage(language) {\n        const spec = this.findBest(language);\n        if (spec && !spec.support) {\n            spec.support = await spec.load();\n        }\n        return spec;\n    }\n    /**\n     * Get the raw list of available modes specs.\n     *\n     * @returns The available modes\n     */\n    getLanguages() {\n        return [...this._modeList];\n    }\n    /**\n     * Find a codemirror mode by MIME.\n     *\n     * @param mime Mime type to look for\n     * @param strict Whether xml and json should be assimilated to the generic mimetype\n     * @returns The mode or null\n     */\n    findByMIME(mime, strict = false) {\n        if (Array.isArray(mime)) {\n            for (let i = 0; i < mime.length; i++) {\n                const spec = this.findByMIME(mime[i]);\n                if (spec)\n                    return spec;\n            }\n            return null;\n        }\n        mime = mime.toLowerCase();\n        for (let i = 0; i < this._modeList.length; i++) {\n            let info = this._modeList[i];\n            if (Array.isArray(info.mime)) {\n                for (let j = 0; j < info.mime.length; j++) {\n                    if (info.mime[j] == mime) {\n                        return info;\n                    }\n                }\n            }\n            else if (info.mime == mime) {\n                return info;\n            }\n        }\n        if (!strict) {\n            if (/\\+xml$/.test(mime))\n                return this.findByMIME('application/xml');\n            if (/\\+json$/.test(mime))\n                return this.findByMIME('application/json');\n        }\n        return null;\n    }\n    /**\n     * Find a codemirror mode by name.\n     *\n     * @param name The mode name\n     * @returns The mode or null\n     */\n    findByName(name) {\n        name = name.toLowerCase();\n        for (let i = 0; i < this._modeList.length; i++) {\n            let info = this._modeList[i];\n            if (info.name.toLowerCase() == name)\n                return info;\n            if (info.alias) {\n                for (let j = 0; j < info.alias.length; j++) {\n                    if (info.alias[j].toLowerCase() == name) {\n                        return info;\n                    }\n                }\n            }\n        }\n        return null;\n    }\n    /**\n     * Find a codemirror mode by extension.\n     *\n     * @param ext The extension name\n     * @returns The mode or null\n     */\n    findByExtension(ext) {\n        if (Array.isArray(ext)) {\n            for (let i = 0; i < ext.length; i++) {\n                const spec = this.findByExtension(ext[i]);\n                if (spec)\n                    return spec;\n            }\n            return null;\n        }\n        ext = ext.toLowerCase();\n        for (let i = 0; i < this._modeList.length; i++) {\n            let info = this._modeList[i];\n            for (let j = 0; j < info.extensions.length; j++) {\n                if (info.extensions[j].toLowerCase() == ext) {\n                    return info;\n                }\n            }\n        }\n        return null;\n    }\n    /**\n     * Find a codemirror mode by filename.\n     *\n     * @param name File name\n     * @returns The mode or null\n     */\n    findByFileName(name) {\n        const basename = PathExt.basename(name);\n        for (let i = 0; i < this._modeList.length; i++) {\n            let info = this._modeList[i];\n            if (info.filename && info.filename.test(basename)) {\n                return info;\n            }\n        }\n        let dot = basename.lastIndexOf('.');\n        let ext = dot > -1 && basename.substring(dot + 1, basename.length);\n        if (ext) {\n            return this.findByExtension(ext);\n        }\n        return null;\n    }\n    /**\n     * Find a codemirror mode by name or CodeMirror spec.\n     *\n     * @param language The CodeMirror mode\n     * @param fallback Whether to fallback to default mimetype spec or not\n     * @returns The mode or null\n     */\n    findBest(language, fallback = true) {\n        var _a, _b, _c, _d;\n        const modename = typeof language === 'string' ? language : language.name;\n        const mimetype = typeof language !== 'string' ? language.mime : modename;\n        const ext = typeof language !== 'string' ? (_a = language.extensions) !== null && _a !== void 0 ? _a : [] : [];\n        return ((_d = (_c = (_b = (modename ? this.findByName(modename) : null)) !== null && _b !== void 0 ? _b : (mimetype ? this.findByMIME(mimetype) : null)) !== null && _c !== void 0 ? _c : this.findByExtension(ext)) !== null && _d !== void 0 ? _d : (fallback\n            ? this.findByMIME(IEditorMimeTypeService.defaultMimeType)\n            : null));\n    }\n    /**\n     * Parse and style a string.\n     *\n     * @param code Code to highlight\n     * @param language Code language\n     * @param el HTML element into which the highlighted code will be inserted\n     */\n    async highlight(code, language, el) {\n        var _a;\n        if (language) {\n            await this.getLanguage(language);\n        }\n        const language_ = (_a = language === null || language === void 0 ? void 0 : language.support) === null || _a === void 0 ? void 0 : _a.language;\n        if (!language_) {\n            el.appendChild(document.createTextNode(code));\n            return;\n        }\n        const tree = language_.parser.parse(code);\n        // position state required because unstyled tokens are not emitted\n        // in highlightTree\n        let pos = 0;\n        highlightTree(tree, jupyterHighlightStyle, (from, to, classes) => {\n            if (from > pos) {\n                // No style applied to the token between pos and from\n                el.appendChild(document.createTextNode(code.slice(pos, from)));\n            }\n            const sp = el.appendChild(document.createElement('span'));\n            sp.className = classes;\n            sp.appendChild(document.createTextNode(code.slice(from, to)));\n            pos = to;\n        });\n        if (pos < tree.length - 1) {\n            // No style applied on the trailing text\n            el.appendChild(document.createTextNode(code.slice(pos, tree.length)));\n        }\n    }\n    // Code mirror uses two similar structures, a plain object with optional fields,\n    // and a class with the same fields but all mandatory. Maybe adopting the same\n    // pattern would be less confusing (although far more verbose)\n    makeSpec(spec) {\n        let res = LanguageDescription.of(spec);\n        // CodeMirror does not store/use mime type of a language\n        res.mime = spec.mime;\n        res.displayName = spec.displayName;\n        return res;\n    }\n}\n/**\n * EditorLanguageRegistry namespace\n */\n(function (EditorLanguageRegistry) {\n    /**\n     * Convert an CodeMirror 5 language parser to CodeMirror 6\n     *\n     * @param parser Legacy parser\n     * @returns Language object\n     */\n    function legacy(parser) {\n        return new LanguageSupport(StreamLanguage.define(parser));\n    }\n    EditorLanguageRegistry.legacy = legacy;\n    /**\n     * Create a dialect of SQL\n     *\n     * @param dialectName SQL dialect\n     * @returns Language object\n     */\n    async function sql(dialectName) {\n        const m = await import('@codemirror/lang-sql');\n        return m.sql({ dialect: m[dialectName] });\n    }\n    /**\n     * Get the default editor languages\n     *\n     * @param translator Application translator\n     * @returns Default CodeMirror 6 languages\n     */\n    function getDefaultLanguages(translator) {\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        return [\n            {\n                name: 'C',\n                displayName: trans.__('C'),\n                mime: 'text/x-csrc',\n                extensions: ['c', 'h', 'ino'],\n                async load() {\n                    const m = await import('@codemirror/lang-cpp');\n                    return m.cpp();\n                }\n            },\n            {\n                name: 'C++',\n                displayName: trans.__('C++'),\n                mime: 'text/x-c++src',\n                extensions: ['cpp', 'c++', 'cc', 'cxx', 'hpp', 'h++', 'hh', 'hxx'],\n                async load() {\n                    const m = await import('@codemirror/lang-cpp');\n                    return m.cpp();\n                }\n            },\n            {\n                name: 'CQL',\n                displayName: trans.__('CQL'),\n                mime: 'text/x-cassandra',\n                extensions: ['cql'],\n                load() {\n                    return sql('Cassandra');\n                }\n            },\n            {\n                name: 'CSS',\n                displayName: trans.__('CSS'),\n                mime: 'text/css',\n                extensions: ['css'],\n                async load() {\n                    const m = await import('@codemirror/lang-css');\n                    return m.css();\n                }\n            },\n            {\n                name: 'HTML',\n                displayName: trans.__('HTML'),\n                alias: ['xhtml'],\n                mime: 'text/html',\n                extensions: ['html', 'htm', 'handlebars', 'hbs'],\n                async load() {\n                    const m = await import('@codemirror/lang-html');\n                    return m.html();\n                }\n            },\n            {\n                name: 'Java',\n                displayName: trans.__('Java'),\n                mime: 'text/x-java',\n                extensions: ['java'],\n                async load() {\n                    const m = await import('@codemirror/lang-java');\n                    return m.java();\n                }\n            },\n            {\n                name: 'Javascript',\n                displayName: trans.__('Javascript'),\n                alias: ['ecmascript', 'js', 'node'],\n                mime: [\n                    'text/javascript',\n                    'text/ecmascript',\n                    'application/javascript',\n                    'application/x-javascript',\n                    'application/ecmascript'\n                ],\n                extensions: ['js', 'mjs', 'cjs'],\n                async load() {\n                    const m = await import('@codemirror/lang-javascript');\n                    return m.javascript();\n                }\n            },\n            {\n                name: 'JSON',\n                displayName: trans.__('JSON'),\n                alias: ['json5'],\n                mime: ['application/json', 'application/x-json'],\n                extensions: ['json', 'map'],\n                async load() {\n                    const m = await import('@codemirror/lang-json');\n                    return m.json();\n                }\n            },\n            {\n                name: 'JSX',\n                displayName: trans.__('JSX'),\n                mime: 'text/jsx',\n                extensions: ['jsx'],\n                async load() {\n                    const m = await import('@codemirror/lang-javascript');\n                    return m.javascript({ jsx: true });\n                }\n            },\n            {\n                name: 'MariaDB SQL',\n                displayName: trans.__('MariaDB SQL'),\n                mime: 'text/x-mariadb',\n                load() {\n                    return sql('MariaSQL');\n                }\n            },\n            {\n                name: 'Markdown',\n                displayName: trans.__('Markdown'),\n                mime: 'text/x-markdown',\n                extensions: ['md', 'markdown', 'mkd'],\n                async load() {\n                    const m = await import('@codemirror/lang-markdown');\n                    return m.markdown({ codeLanguages: this._modeList });\n                }\n            },\n            {\n                name: 'MS SQL',\n                displayName: trans.__('MS SQL'),\n                mime: 'text/x-mssql',\n                load() {\n                    return sql('MSSQL');\n                }\n            },\n            {\n                name: 'MySQL',\n                displayName: trans.__('MySQL'),\n                mime: 'text/x-mysql',\n                load() {\n                    return sql('MySQL');\n                }\n            },\n            {\n                name: 'PHP',\n                displayName: trans.__('PHP'),\n                mime: [\n                    'text/x-php',\n                    'application/x-httpd-php',\n                    'application/x-httpd-php-open'\n                ],\n                extensions: ['php', 'php3', 'php4', 'php5', 'php7', 'phtml'],\n                async load() {\n                    const m = await import('@codemirror/lang-php');\n                    return m.php();\n                }\n            },\n            {\n                name: 'PLSQL',\n                displayName: trans.__('PLSQL'),\n                mime: 'text/x-plsql',\n                extensions: ['pls'],\n                load() {\n                    return sql('PLSQL');\n                }\n            },\n            {\n                name: 'PostgreSQL',\n                displayName: trans.__('PostgreSQL'),\n                mime: 'text/x-pgsql',\n                load() {\n                    return sql('PostgreSQL');\n                }\n            },\n            {\n                name: 'Python',\n                displayName: trans.__('Python'),\n                mime: 'text/x-python',\n                extensions: ['BUILD', 'bzl', 'py', 'pyw'],\n                filename: /^(BUCK|BUILD)$/,\n                async load() {\n                    const m = await import('@codemirror/lang-python');\n                    return new LanguageSupport(m.pythonLanguage, pythonBuiltin(m.pythonLanguage));\n                }\n            },\n            {\n                name: 'ipython',\n                displayName: trans.__('ipython'),\n                mime: 'text/x-ipython',\n                async load() {\n                    // FIXME Restore '?' operator - using the default python LanguageSupport allows\n                    // to activate feature such as code folding.\n                    // return Promise.resolve(legacy(mkPython({ singleOperators: /\\?/ })));\n                    const m = await import('@codemirror/lang-python');\n                    return new LanguageSupport(m.pythonLanguage, pythonBuiltin(m.pythonLanguage));\n                }\n            },\n            {\n                name: 'Rust',\n                displayName: trans.__('Rust'),\n                mime: 'text/x-rustsrc',\n                extensions: ['rs'],\n                async load() {\n                    const m = await import('@codemirror/lang-rust');\n                    return m.rust();\n                }\n            },\n            {\n                name: 'SQL',\n                displayName: trans.__('SQL'),\n                mime: ['application/sql', 'text/x-sql'],\n                extensions: ['sql'],\n                load() {\n                    return sql('StandardSQL');\n                }\n            },\n            {\n                name: 'SQLite',\n                displayName: trans.__('SQLite'),\n                mime: 'text/x-sqlite',\n                load() {\n                    return sql('SQLite');\n                }\n            },\n            {\n                name: 'TSX',\n                displayName: trans.__('TSX'),\n                alias: ['TypeScript-JSX'],\n                mime: 'text/typescript-jsx',\n                extensions: ['tsx'],\n                async load() {\n                    const m = await import('@codemirror/lang-javascript');\n                    return m.javascript({ jsx: true, typescript: true });\n                }\n            },\n            {\n                name: 'TypeScript',\n                displayName: trans.__('TypeScript'),\n                alias: ['ts'],\n                mime: 'application/typescript',\n                extensions: ['ts'],\n                async load() {\n                    const m = await import('@codemirror/lang-javascript');\n                    return m.javascript({ typescript: true });\n                }\n            },\n            {\n                name: 'WebAssembly',\n                displayName: trans.__('WebAssembly'),\n                mime: 'text/webassembly',\n                extensions: ['wat', 'wast'],\n                async load() {\n                    const m = await import('@codemirror/lang-wast');\n                    return m.wast();\n                }\n            },\n            {\n                name: 'XML',\n                displayName: trans.__('XML'),\n                alias: ['rss', 'wsdl', 'xsd'],\n                mime: ['application/xml', 'text/xml'],\n                extensions: ['xml', 'xsl', 'xsd', 'svg'],\n                async load() {\n                    const m = await import('@codemirror/lang-xml');\n                    return m.xml();\n                }\n            },\n            // Legacy modes ported from CodeMirror 5\n            {\n                name: 'APL',\n                displayName: trans.__('APL'),\n                mime: 'text/apl',\n                extensions: ['dyalog', 'apl'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/apl');\n                    return legacy(m.apl);\n                }\n            },\n            {\n                name: 'PGP',\n                displayName: trans.__('PGP'),\n                alias: ['asciiarmor'],\n                mime: [\n                    'application/pgp',\n                    'application/pgp-encrypted',\n                    'application/pgp-keys',\n                    'application/pgp-signature'\n                ],\n                extensions: ['asc', 'pgp', 'sig'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/asciiarmor');\n                    return legacy(m.asciiArmor);\n                }\n            },\n            {\n                name: 'ASN.1',\n                displayName: trans.__('ASN.1'),\n                mime: 'text/x-ttcn-asn',\n                extensions: ['asn', 'asn1'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/asn1');\n                    return legacy(m.asn1({}));\n                }\n            },\n            {\n                name: 'Asterisk',\n                displayName: trans.__('Asterisk'),\n                mime: 'text/x-asterisk',\n                filename: /^extensions\\.conf$/i,\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/asterisk');\n                    return legacy(m.asterisk);\n                }\n            },\n            {\n                name: 'Brainfuck',\n                displayName: trans.__('Brainfuck'),\n                mime: 'text/x-brainfuck',\n                extensions: ['b', 'bf'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/brainfuck');\n                    return legacy(m.brainfuck);\n                }\n            },\n            {\n                name: 'Cobol',\n                displayName: trans.__('Cobol'),\n                mime: 'text/x-cobol',\n                extensions: ['cob', 'cpy'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/cobol');\n                    return legacy(m.cobol);\n                }\n            },\n            {\n                name: 'C#',\n                displayName: trans.__('C#'),\n                alias: ['csharp', 'cs'],\n                mime: 'text/x-csharp',\n                extensions: ['cs'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/clike');\n                    return legacy(m.csharp);\n                }\n            },\n            {\n                name: 'Clojure',\n                displayName: trans.__('Clojure'),\n                mime: 'text/x-clojure',\n                extensions: ['clj', 'cljc', 'cljx'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/clojure');\n                    return legacy(m.clojure);\n                }\n            },\n            {\n                name: 'ClojureScript',\n                displayName: trans.__('ClojureScript'),\n                mime: 'text/x-clojurescript',\n                extensions: ['cljs'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/clojure');\n                    return legacy(m.clojure);\n                }\n            },\n            {\n                name: 'Closure Stylesheets (GSS)',\n                displayName: trans.__('Closure Stylesheets (GSS)'),\n                mime: 'text/x-gss',\n                extensions: ['gss'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/css');\n                    return legacy(m.gss);\n                }\n            },\n            {\n                name: 'CMake',\n                displayName: trans.__('CMake'),\n                mime: 'text/x-cmake',\n                extensions: ['cmake', 'cmake.in'],\n                filename: /^CMakeLists\\.txt$/,\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/cmake');\n                    return legacy(m.cmake);\n                }\n            },\n            {\n                name: 'CoffeeScript',\n                displayName: trans.__('CoffeeScript'),\n                alias: ['coffee', 'coffee-script'],\n                mime: [\n                    'application/vnd.coffeescript',\n                    'text/coffeescript',\n                    'text/x-coffeescript'\n                ],\n                extensions: ['coffee'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/coffeescript');\n                    return legacy(m.coffeeScript);\n                }\n            },\n            {\n                name: 'Common Lisp',\n                displayName: trans.__('Common Lisp'),\n                alias: ['lisp'],\n                mime: 'text/x-common-lisp',\n                extensions: ['cl', 'lisp', 'el'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/commonlisp');\n                    return legacy(m.commonLisp);\n                }\n            },\n            {\n                name: 'Cypher',\n                displayName: trans.__('Cypher'),\n                mime: 'application/x-cypher-query',\n                extensions: ['cyp', 'cypher'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/cypher');\n                    return legacy(m.cypher);\n                }\n            },\n            {\n                name: 'Cython',\n                displayName: trans.__('Cython'),\n                mime: 'text/x-cython',\n                extensions: ['pyx', 'pxd', 'pxi'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/python');\n                    return legacy(m.cython);\n                }\n            },\n            {\n                name: 'Crystal',\n                displayName: trans.__('Crystal'),\n                mime: 'text/x-crystal',\n                extensions: ['cr'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/crystal');\n                    return legacy(m.crystal);\n                }\n            },\n            {\n                name: 'D',\n                displayName: trans.__('D'),\n                mime: 'text/x-d',\n                extensions: ['d'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/d');\n                    return legacy(m.d);\n                }\n            },\n            {\n                name: 'Dart',\n                displayName: trans.__('Dart'),\n                mime: ['application/dart', 'text/x-dart'],\n                extensions: ['dart'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/clike');\n                    return legacy(m.dart);\n                }\n            },\n            {\n                name: 'diff',\n                displayName: trans.__('diff'),\n                mime: 'text/x-diff',\n                extensions: ['diff', 'patch'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/diff');\n                    return legacy(m.diff);\n                }\n            },\n            {\n                name: 'Dockerfile',\n                displayName: trans.__('Dockerfile'),\n                mime: 'text/x-dockerfile',\n                filename: /^Dockerfile$/,\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/dockerfile');\n                    return legacy(m.dockerFile);\n                }\n            },\n            {\n                name: 'DTD',\n                displayName: trans.__('DTD'),\n                mime: 'application/xml-dtd',\n                extensions: ['dtd'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/dtd');\n                    return legacy(m.dtd);\n                }\n            },\n            {\n                name: 'Dylan',\n                displayName: trans.__('Dylan'),\n                mime: 'text/x-dylan',\n                extensions: ['dylan', 'dyl', 'intr'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/dylan');\n                    return legacy(m.dylan);\n                }\n            },\n            {\n                name: 'EBNF',\n                displayName: trans.__('EBNF'),\n                mime: 'text/x-ebnf',\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/ebnf');\n                    return legacy(m.ebnf);\n                }\n            },\n            {\n                name: 'ECL',\n                displayName: trans.__('ECL'),\n                mime: 'text/x-ecl',\n                extensions: ['ecl'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/ecl');\n                    return legacy(m.ecl);\n                }\n            },\n            {\n                name: 'edn',\n                displayName: trans.__('edn'),\n                mime: 'application/edn',\n                extensions: ['edn'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/clojure');\n                    return legacy(m.clojure);\n                }\n            },\n            {\n                name: 'Eiffel',\n                displayName: trans.__('Eiffel'),\n                mime: 'text/x-eiffel',\n                extensions: ['e'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/eiffel');\n                    return legacy(m.eiffel);\n                }\n            },\n            {\n                name: 'Elm',\n                displayName: trans.__('Elm'),\n                mime: 'text/x-elm',\n                extensions: ['elm'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/elm');\n                    return legacy(m.elm);\n                }\n            },\n            {\n                name: 'Erlang',\n                displayName: trans.__('Erlang'),\n                mime: 'text/x-erlang',\n                extensions: ['erl'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/erlang');\n                    return legacy(m.erlang);\n                }\n            },\n            {\n                name: 'Esper',\n                displayName: trans.__('Esper'),\n                mime: 'text/x-esper',\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/sql');\n                    return legacy(m.esper);\n                }\n            },\n            {\n                name: 'Factor',\n                displayName: trans.__('Factor'),\n                mime: 'text/x-factor',\n                extensions: ['factor'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/factor');\n                    return legacy(m.factor);\n                }\n            },\n            {\n                name: 'FCL',\n                displayName: trans.__('FCL'),\n                mime: 'text/x-fcl',\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/fcl');\n                    return legacy(m.fcl);\n                }\n            },\n            {\n                name: 'Forth',\n                displayName: trans.__('Forth'),\n                mime: 'text/x-forth',\n                extensions: ['forth', 'fth', '4th'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/forth');\n                    return legacy(m.forth);\n                }\n            },\n            {\n                name: 'Fortran',\n                displayName: trans.__('Fortran'),\n                mime: 'text/x-fortran',\n                extensions: ['f', 'for', 'f77', 'f90', 'f95'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/fortran');\n                    return legacy(m.fortran);\n                }\n            },\n            {\n                name: 'F#',\n                displayName: trans.__('F#'),\n                alias: ['fsharp'],\n                mime: 'text/x-fsharp',\n                extensions: ['fs'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/mllike');\n                    return legacy(m.fSharp);\n                }\n            },\n            {\n                name: 'Gas',\n                displayName: trans.__('Gas'),\n                mime: 'text/x-gas',\n                extensions: ['s'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/gas');\n                    return legacy(m.gas);\n                }\n            },\n            {\n                name: 'Gherkin',\n                displayName: trans.__('Gherkin'),\n                mime: 'text/x-feature',\n                extensions: ['feature'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/gherkin');\n                    return legacy(m.gherkin);\n                }\n            },\n            {\n                name: 'Go',\n                displayName: trans.__('Go'),\n                mime: 'text/x-go',\n                extensions: ['go'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/go');\n                    return legacy(m.go);\n                }\n            },\n            {\n                name: 'Groovy',\n                displayName: trans.__('Groovy'),\n                mime: 'text/x-groovy',\n                extensions: ['groovy', 'gradle'],\n                filename: /^Jenkinsfile$/,\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/groovy');\n                    return legacy(m.groovy);\n                }\n            },\n            {\n                name: 'Haskell',\n                displayName: trans.__('Haskell'),\n                mime: 'text/x-haskell',\n                extensions: ['hs'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/haskell');\n                    return legacy(m.haskell);\n                }\n            },\n            {\n                name: 'Haxe',\n                displayName: trans.__('Haxe'),\n                mime: 'text/x-haxe',\n                extensions: ['hx'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/haxe');\n                    return legacy(m.haxe);\n                }\n            },\n            {\n                name: 'HXML',\n                displayName: trans.__('HXML'),\n                mime: 'text/x-hxml',\n                extensions: ['hxml'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/haxe');\n                    return legacy(m.hxml);\n                }\n            },\n            {\n                name: 'HTTP',\n                displayName: trans.__('HTTP'),\n                mime: 'message/http',\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/http');\n                    return legacy(m.http);\n                }\n            },\n            {\n                name: 'IDL',\n                displayName: trans.__('IDL'),\n                mime: 'text/x-idl',\n                extensions: ['pro'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/idl');\n                    return legacy(m.idl);\n                }\n            },\n            {\n                name: 'JSON-LD',\n                displayName: trans.__('JSON-LD'),\n                alias: ['jsonld'],\n                mime: 'application/ld+json',\n                extensions: ['jsonld'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/javascript');\n                    return legacy(m.jsonld);\n                }\n            },\n            {\n                name: 'Jinja2',\n                displayName: trans.__('Jinja2'),\n                mime: 'text/jinja2',\n                extensions: ['j2', 'jinja', 'jinja2'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/jinja2');\n                    return legacy(m.jinja2);\n                }\n            },\n            {\n                name: 'Julia',\n                displayName: trans.__('Julia'),\n                mime: 'text/x-julia',\n                extensions: ['jl'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/julia');\n                    return legacy(m.julia);\n                }\n            },\n            {\n                name: 'Kotlin',\n                displayName: trans.__('Kotlin'),\n                mime: 'text/x-kotlin',\n                extensions: ['kt'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/clike');\n                    return legacy(m.kotlin);\n                }\n            },\n            {\n                name: 'LESS',\n                displayName: trans.__('LESS'),\n                mime: 'text/x-less',\n                extensions: ['less'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/css');\n                    return legacy(m.less);\n                }\n            },\n            {\n                name: 'LiveScript',\n                displayName: trans.__('LiveScript'),\n                alias: ['ls'],\n                mime: 'text/x-livescript',\n                extensions: ['ls'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/livescript');\n                    return legacy(m.liveScript);\n                }\n            },\n            {\n                name: 'Lua',\n                displayName: trans.__('Lua'),\n                mime: 'text/x-lua',\n                extensions: ['lua'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/lua');\n                    return legacy(m.lua);\n                }\n            },\n            {\n                name: 'mIRC',\n                displayName: trans.__('mIRC'),\n                mime: 'text/mirc',\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/mirc');\n                    return legacy(m.mirc);\n                }\n            },\n            {\n                name: 'Mathematica',\n                displayName: trans.__('Mathematica'),\n                mime: 'text/x-mathematica',\n                extensions: ['m', 'nb', 'wl', 'wls'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/mathematica');\n                    return legacy(m.mathematica);\n                }\n            },\n            {\n                name: 'Modelica',\n                displayName: trans.__('Modelica'),\n                mime: 'text/x-modelica',\n                extensions: ['mo'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/modelica');\n                    return legacy(m.modelica);\n                }\n            },\n            {\n                name: 'MUMPS',\n                displayName: trans.__('MUMPS'),\n                mime: 'text/x-mumps',\n                extensions: ['mps'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/mumps');\n                    return legacy(m.mumps);\n                }\n            },\n            {\n                name: 'mbox',\n                displayName: trans.__('mbox'),\n                mime: 'application/mbox',\n                extensions: ['mbox'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/mbox');\n                    return legacy(m.mbox);\n                }\n            },\n            {\n                name: 'Nginx',\n                displayName: trans.__('Nginx'),\n                mime: 'text/x-nginx-conf',\n                filename: /nginx.*\\.conf$/i,\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/nginx');\n                    return legacy(m.nginx);\n                }\n            },\n            {\n                name: 'NSIS',\n                displayName: trans.__('NSIS'),\n                mime: 'text/x-nsis',\n                extensions: ['nsh', 'nsi'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/nsis');\n                    return legacy(m.nsis);\n                }\n            },\n            {\n                name: 'NTriples',\n                displayName: trans.__('NTriples'),\n                mime: [\n                    'application/n-triples',\n                    'application/n-quads',\n                    'text/n-triples'\n                ],\n                extensions: ['nt', 'nq'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/ntriples');\n                    return legacy(m.ntriples);\n                }\n            },\n            {\n                name: 'Objective-C',\n                displayName: trans.__('Objective-C'),\n                alias: ['objective-c', 'objc'],\n                mime: 'text/x-objectivec',\n                extensions: ['m'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/clike');\n                    return legacy(m.objectiveC);\n                }\n            },\n            {\n                name: 'Objective-C++',\n                displayName: trans.__('Objective-C++'),\n                alias: ['objective-c++', 'objc++'],\n                mime: 'text/x-objectivec++',\n                extensions: ['mm'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/clike');\n                    return legacy(m.objectiveCpp);\n                }\n            },\n            {\n                name: 'OCaml',\n                displayName: trans.__('OCaml'),\n                mime: 'text/x-ocaml',\n                extensions: ['ml', 'mli', 'mll', 'mly'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/mllike');\n                    return legacy(m.oCaml);\n                }\n            },\n            {\n                name: 'Octave',\n                displayName: trans.__('Octave'),\n                mime: 'text/x-octave',\n                extensions: ['m'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/octave');\n                    return legacy(m.octave);\n                }\n            },\n            {\n                name: 'Oz',\n                displayName: trans.__('Oz'),\n                mime: 'text/x-oz',\n                extensions: ['oz'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/oz');\n                    return legacy(m.oz);\n                }\n            },\n            {\n                name: 'Pascal',\n                displayName: trans.__('Pascal'),\n                mime: 'text/x-pascal',\n                extensions: ['p', 'pas'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/pascal');\n                    return legacy(m.pascal);\n                }\n            },\n            {\n                name: 'Perl',\n                displayName: trans.__('Perl'),\n                mime: 'text/x-perl',\n                extensions: ['pl', 'pm'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/perl');\n                    return legacy(m.perl);\n                }\n            },\n            {\n                name: 'Pig',\n                displayName: trans.__('Pig'),\n                mime: 'text/x-pig',\n                extensions: ['pig'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/pig');\n                    return legacy(m.pig);\n                }\n            },\n            {\n                name: 'PowerShell',\n                displayName: trans.__('PowerShell'),\n                mime: 'application/x-powershell',\n                extensions: ['ps1', 'psd1', 'psm1'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/powershell');\n                    return legacy(m.powerShell);\n                }\n            },\n            {\n                name: 'Properties files',\n                displayName: trans.__('Properties files'),\n                alias: ['ini', 'properties'],\n                mime: 'text/x-properties',\n                extensions: ['properties', 'ini', 'in'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/properties');\n                    return legacy(m.properties);\n                }\n            },\n            {\n                name: 'ProtoBuf',\n                displayName: trans.__('ProtoBuf'),\n                mime: 'text/x-protobuf',\n                extensions: ['proto'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/protobuf');\n                    return legacy(m.protobuf);\n                }\n            },\n            {\n                name: 'Pug',\n                displayName: trans.__('Pug'),\n                mime: 'text/x-pug',\n                extensions: ['pug'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/pug');\n                    return legacy(m.pug);\n                }\n            },\n            {\n                name: 'Puppet',\n                displayName: trans.__('Puppet'),\n                mime: 'text/x-puppet',\n                extensions: ['pp'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/puppet');\n                    return legacy(m.puppet);\n                }\n            },\n            {\n                name: 'Q',\n                displayName: trans.__('Q'),\n                mime: 'text/x-q',\n                extensions: ['q'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/q');\n                    return legacy(m.q);\n                }\n            },\n            {\n                name: 'R',\n                displayName: trans.__('R'),\n                alias: ['rscript'],\n                mime: 'text/x-rsrc',\n                extensions: ['r', 'R'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/r');\n                    return legacy(m.r);\n                }\n            },\n            {\n                name: 'RPM Changes',\n                displayName: trans.__('RPM Changes'),\n                mime: 'text/x-rpm-changes',\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/rpm');\n                    return legacy(m.rpmChanges);\n                }\n            },\n            {\n                name: 'RPM Spec',\n                displayName: trans.__('RPM Spec'),\n                mime: 'text/x-rpm-spec',\n                extensions: ['spec'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/rpm');\n                    return legacy(m.rpmSpec);\n                }\n            },\n            {\n                name: 'Ruby',\n                displayName: trans.__('Ruby'),\n                alias: ['jruby', 'macruby', 'rake', 'rb', 'rbx'],\n                mime: 'text/x-ruby',\n                extensions: ['rb'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/ruby');\n                    return legacy(m.ruby);\n                }\n            },\n            {\n                name: 'SAS',\n                displayName: trans.__('SAS'),\n                mime: 'text/x-sas',\n                extensions: ['sas'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/sas');\n                    return legacy(m.sas);\n                }\n            },\n            {\n                name: 'Scala',\n                displayName: trans.__('Scala'),\n                mime: 'text/x-scala',\n                extensions: ['scala'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/clike');\n                    return legacy(m.scala);\n                }\n            },\n            {\n                name: 'Scheme',\n                displayName: trans.__('Scheme'),\n                mime: 'text/x-scheme',\n                extensions: ['scm', 'ss'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/scheme');\n                    return legacy(m.scheme);\n                }\n            },\n            {\n                name: 'SCSS',\n                displayName: trans.__('SCSS'),\n                mime: 'text/x-scss',\n                extensions: ['scss'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/css');\n                    return legacy(m.sCSS);\n                }\n            },\n            {\n                name: 'Shell',\n                displayName: trans.__('Shell'),\n                alias: ['bash', 'sh', 'zsh'],\n                mime: ['text/x-sh', 'application/x-sh'],\n                extensions: ['sh', 'ksh', 'bash'],\n                filename: /^PKGBUILD$/,\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/shell');\n                    return legacy(m.shell);\n                }\n            },\n            {\n                name: 'Sieve',\n                displayName: trans.__('Sieve'),\n                mime: 'application/sieve',\n                extensions: ['siv', 'sieve'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/sieve');\n                    return legacy(m.sieve);\n                }\n            },\n            {\n                name: 'Smalltalk',\n                displayName: trans.__('Smalltalk'),\n                mime: 'text/x-stsrc',\n                extensions: ['st'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/smalltalk');\n                    return legacy(m.smalltalk);\n                }\n            },\n            {\n                name: 'Solr',\n                displayName: trans.__('Solr'),\n                mime: 'text/x-solr',\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/solr');\n                    return legacy(m.solr);\n                }\n            },\n            {\n                name: 'SML',\n                displayName: trans.__('SML'),\n                mime: 'text/x-sml',\n                extensions: ['sml', 'sig', 'fun', 'smackspec'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/mllike');\n                    return legacy(m.sml);\n                }\n            },\n            {\n                name: 'SPARQL',\n                displayName: trans.__('SPARQL'),\n                alias: ['sparul'],\n                mime: 'application/sparql-query',\n                extensions: ['rq', 'sparql'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/sparql');\n                    return legacy(m.sparql);\n                }\n            },\n            {\n                name: 'Spreadsheet',\n                displayName: trans.__('Spreadsheet'),\n                alias: ['excel', 'formula'],\n                mime: 'text/x-spreadsheet',\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/spreadsheet');\n                    return legacy(m.spreadsheet);\n                }\n            },\n            {\n                name: 'Squirrel',\n                displayName: trans.__('Squirrel'),\n                mime: 'text/x-squirrel',\n                extensions: ['nut'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/clike');\n                    return legacy(m.squirrel);\n                }\n            },\n            {\n                name: 'Stylus',\n                displayName: trans.__('Stylus'),\n                mime: 'text/x-styl',\n                extensions: ['styl'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/stylus');\n                    return legacy(m.stylus);\n                }\n            },\n            {\n                name: 'Swift',\n                displayName: trans.__('Swift'),\n                mime: 'text/x-swift',\n                extensions: ['swift'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/swift');\n                    return legacy(m.swift);\n                }\n            },\n            {\n                name: 'sTeX',\n                displayName: trans.__('sTeX'),\n                mime: 'text/x-stex',\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/stex');\n                    return legacy(m.stex);\n                }\n            },\n            {\n                name: 'LaTeX',\n                displayName: trans.__('LaTeX'),\n                alias: ['tex'],\n                mime: 'text/x-latex',\n                extensions: ['text', 'ltx', 'tex'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/stex');\n                    return legacy(m.stex);\n                }\n            },\n            {\n                name: 'SystemVerilog',\n                displayName: trans.__('SystemVerilog'),\n                mime: 'text/x-systemverilog',\n                extensions: ['v', 'sv', 'svh'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/verilog');\n                    return legacy(m.verilog);\n                }\n            },\n            {\n                name: 'Tcl',\n                displayName: trans.__('Tcl'),\n                mime: 'text/x-tcl',\n                extensions: ['tcl'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/tcl');\n                    return legacy(m.tcl);\n                }\n            },\n            {\n                name: 'Textile',\n                displayName: trans.__('Textile'),\n                mime: 'text/x-textile',\n                extensions: ['textile'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/textile');\n                    return legacy(m.textile);\n                }\n            },\n            {\n                name: 'TiddlyWiki',\n                displayName: trans.__('TiddlyWiki'),\n                mime: 'text/x-tiddlywiki',\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/tiddlywiki');\n                    return legacy(m.tiddlyWiki);\n                }\n            },\n            {\n                name: 'Tiki wiki',\n                displayName: trans.__('Tiki wiki'),\n                mime: 'text/tiki',\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/tiki');\n                    return legacy(m.tiki);\n                }\n            },\n            {\n                name: 'TOML',\n                displayName: trans.__('TOML'),\n                mime: 'text/x-toml',\n                extensions: ['toml'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/toml');\n                    return legacy(m.toml);\n                }\n            },\n            {\n                name: 'troff',\n                displayName: trans.__('troff'),\n                mime: 'text/troff',\n                extensions: ['1', '2', '3', '4', '5', '6', '7', '8', '9'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/troff');\n                    return legacy(m.troff);\n                }\n            },\n            {\n                name: 'TTCN',\n                displayName: trans.__('TTCN'),\n                mime: 'text/x-ttcn',\n                extensions: ['ttcn', 'ttcn3', 'ttcnpp'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/ttcn');\n                    return legacy(m.ttcn);\n                }\n            },\n            {\n                name: 'TTCN_CFG',\n                displayName: trans.__('TTCN_CFG'),\n                mime: 'text/x-ttcn-cfg',\n                extensions: ['cfg'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/ttcn-cfg');\n                    return legacy(m.ttcnCfg);\n                }\n            },\n            {\n                name: 'Turtle',\n                displayName: trans.__('Turtle'),\n                mime: 'text/turtle',\n                extensions: ['ttl'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/turtle');\n                    return legacy(m.turtle);\n                }\n            },\n            {\n                name: 'Web IDL',\n                displayName: trans.__('Web IDL'),\n                mime: 'text/x-webidl',\n                extensions: ['webidl'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/webidl');\n                    return legacy(m.webIDL);\n                }\n            },\n            {\n                name: 'VB.NET',\n                displayName: trans.__('VB.NET'),\n                mime: 'text/x-vb',\n                extensions: ['vb'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/vb');\n                    return legacy(m.vb);\n                }\n            },\n            {\n                name: 'VBScript',\n                displayName: trans.__('VBScript'),\n                mime: 'text/vbscript',\n                extensions: ['vbs'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/vbscript');\n                    return legacy(m.vbScript);\n                }\n            },\n            {\n                name: 'Velocity',\n                displayName: trans.__('Velocity'),\n                mime: 'text/velocity',\n                extensions: ['vtl'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/velocity');\n                    return legacy(m.velocity);\n                }\n            },\n            {\n                name: 'Verilog',\n                displayName: trans.__('Verilog'),\n                mime: 'text/x-verilog',\n                extensions: ['v'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/verilog');\n                    return legacy(m.verilog);\n                }\n            },\n            {\n                name: 'VHDL',\n                displayName: trans.__('VHDL'),\n                mime: 'text/x-vhdl',\n                extensions: ['vhd', 'vhdl'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/vhdl');\n                    return legacy(m.vhdl);\n                }\n            },\n            {\n                name: 'XQuery',\n                displayName: trans.__('XQuery'),\n                mime: 'application/xquery',\n                extensions: ['xy', 'xquery'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/xquery');\n                    return legacy(m.xQuery);\n                }\n            },\n            {\n                name: 'Yacas',\n                displayName: trans.__('Yacas'),\n                mime: 'text/x-yacas',\n                extensions: ['ys'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/yacas');\n                    return legacy(m.yacas);\n                }\n            },\n            {\n                name: 'YAML',\n                displayName: trans.__('YAML'),\n                alias: ['yml'],\n                mime: ['text/x-yaml', 'text/yaml'],\n                extensions: ['yaml', 'yml'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/yaml');\n                    return legacy(m.yaml);\n                }\n            },\n            {\n                name: 'Z80',\n                displayName: trans.__('Z80'),\n                mime: 'text/x-z80',\n                extensions: ['z80'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/z80');\n                    return legacy(m.z80);\n                }\n            },\n            {\n                name: 'mscgen',\n                displayName: trans.__('mscgen'),\n                mime: 'text/x-mscgen',\n                extensions: ['mscgen', 'mscin', 'msc'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/mscgen');\n                    return legacy(m.mscgen);\n                }\n            },\n            {\n                name: 'xu',\n                displayName: trans.__('xu'),\n                mime: 'text/x-xu',\n                extensions: ['xu'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/mscgen');\n                    return legacy(m.xu);\n                }\n            },\n            {\n                name: 'msgenny',\n                displayName: trans.__('msgenny'),\n                mime: 'text/x-msgenny',\n                extensions: ['msgenny'],\n                async load() {\n                    const m = await import('@codemirror/legacy-modes/mode/mscgen');\n                    return legacy(m.msgenny);\n                }\n            }\n        ];\n    }\n    EditorLanguageRegistry.getDefaultLanguages = getDefaultLanguages;\n})(EditorLanguageRegistry || (EditorLanguageRegistry = {}));\n//# sourceMappingURL=language.js.map","/* eslint-disable @typescript-eslint/ban-types */\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { insertNewlineAndIndent } from '@codemirror/commands';\nimport { ensureSyntaxTree } from '@codemirror/language';\nimport { Compartment, EditorSelection, EditorState, Prec } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { UUID } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\nimport { ExtensionsHandler } from './extension';\nimport { EditorLanguageRegistry } from './language';\n/**\n * The class name added to CodeMirrorWidget instances.\n */\nconst EDITOR_CLASS = 'jp-CodeMirrorEditor';\n/**\n * The key code for the up arrow key.\n */\nconst UP_ARROW = 38;\n/**\n * The key code for the down arrow key.\n */\nconst DOWN_ARROW = 40;\n/**\n * CodeMirror editor.\n */\nexport class CodeMirrorEditor {\n    /**\n     * Construct a CodeMirror editor.\n     */\n    constructor(options) {\n        var _a, _b, _c, _d, _e, _f;\n        /**\n         * A signal emitted when either the top or bottom edge is requested.\n         */\n        this.edgeRequested = new Signal(this);\n        this._isDisposed = false;\n        this._language = new Compartment();\n        this._uuid = '';\n        this._languages = (_a = options.languages) !== null && _a !== void 0 ? _a : new EditorLanguageRegistry();\n        this._configurator =\n            (_d = (_b = options.extensionsRegistry) === null || _b === void 0 ? void 0 : _b.createNew({\n                ...options,\n                inline: (_c = options.inline) !== null && _c !== void 0 ? _c : false\n            })) !== null && _d !== void 0 ? _d : new ExtensionsHandler();\n        const host = (this.host = options.host);\n        host.classList.add(EDITOR_CLASS);\n        host.classList.add('jp-Editor');\n        host.addEventListener('focus', this, true);\n        host.addEventListener('blur', this, true);\n        host.addEventListener('scroll', this, true);\n        this._uuid = (_e = options.uuid) !== null && _e !== void 0 ? _e : UUID.uuid4();\n        const model = (this._model = options.model);\n        // Default keydown handler - it will have low priority\n        const onKeyDown = EditorView.domEventHandlers({\n            keydown: (event, view) => {\n                return this.onKeydown(event);\n            }\n        });\n        const updateListener = EditorView.updateListener.of((update) => {\n            this._onDocChanged(update);\n        });\n        this._editor = Private.createEditor(host, this._configurator, [\n            // We need to set the order to high, otherwise the keybinding for ArrowUp/ArrowDown\n            // will process the event shunting our edge detection code.\n            Prec.high(onKeyDown),\n            updateListener,\n            // Initialize with empty extension\n            this._language.of([]),\n            ...((_f = options.extensions) !== null && _f !== void 0 ? _f : [])\n        ], model.sharedModel.source);\n        this._onMimeTypeChanged();\n        this._onCursorActivity();\n        this._configurator.configChanged.connect(this.onConfigChanged, this);\n        model.mimeTypeChanged.connect(this._onMimeTypeChanged, this);\n    }\n    /**\n     * The uuid of this editor;\n     */\n    get uuid() {\n        return this._uuid;\n    }\n    set uuid(value) {\n        this._uuid = value;\n    }\n    /**\n     * Get the codemirror editor wrapped by the editor.\n     */\n    get editor() {\n        return this._editor;\n    }\n    /**\n     * Get the codemirror doc wrapped by the widget.\n     */\n    get doc() {\n        return this._editor.state.doc;\n    }\n    /**\n     * Get the number of lines in the editor.\n     */\n    get lineCount() {\n        return this.doc.lines;\n    }\n    /**\n     * Returns a model for this editor.\n     */\n    get model() {\n        return this._model;\n    }\n    /**\n     * The height of a line in the editor in pixels.\n     */\n    get lineHeight() {\n        return this._editor.defaultLineHeight;\n    }\n    /**\n     * The widget of a character in the editor in pixels.\n     */\n    get charWidth() {\n        return this._editor.defaultCharacterWidth;\n    }\n    /**\n     * Tests whether the editor is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this.host.removeEventListener('focus', this, true);\n        this.host.removeEventListener('blur', this, true);\n        this.host.removeEventListener('scroll', this, true);\n        this._configurator.dispose();\n        Signal.clearData(this);\n        this.editor.destroy();\n    }\n    /**\n     * Get a config option for the editor.\n     */\n    getOption(option) {\n        return this._configurator.getOption(option);\n    }\n    /**\n     * Whether the option exists or not.\n     */\n    hasOption(option) {\n        return this._configurator.hasOption(option);\n    }\n    /**\n     * Set a config option for the editor.\n     */\n    setOption(option, value) {\n        this._configurator.setOption(option, value);\n    }\n    /**\n     * Set config options for the editor.\n     *\n     * This method is preferred when setting several options. The\n     * options are set within an operation, which only performs\n     * the costly update at the end, and not after every option\n     * is set.\n     */\n    setOptions(options) {\n        this._configurator.setOptions(options);\n    }\n    /**\n     * Set a base config options for the editor.\n     */\n    setBaseOptions(options) {\n        this._configurator.setBaseOptions(options);\n    }\n    /**\n     * Inject an extension into the editor\n     *\n     * @alpha\n     * @experimental\n     * @param ext CodeMirror 6 extension\n     */\n    injectExtension(ext) {\n        this._configurator.injectExtension(this._editor, ext);\n    }\n    /**\n     * Returns the content for the given line number.\n     */\n    getLine(line) {\n        // TODO: CM6 remove +1 when CM6 first line number has propagated\n        line = line + 1;\n        return line <= this.doc.lines ? this.doc.line(line).text : undefined;\n    }\n    /**\n     * Find an offset for the given position.\n     */\n    getOffsetAt(position) {\n        // TODO: CM6 remove +1 when CM6 first line number has propagated\n        return this.doc.line(position.line + 1).from + position.column;\n    }\n    /**\n     * Find a position for the given offset.\n     */\n    getPositionAt(offset) {\n        // TODO: CM6 remove -1 when CM6 first line number has propagated\n        const line = this.doc.lineAt(offset);\n        return { line: line.number - 1, column: offset - line.from };\n    }\n    /**\n     * Undo one edit (if any undo events are stored).\n     */\n    undo() {\n        this.model.sharedModel.undo();\n    }\n    /**\n     * Redo one undone edit.\n     */\n    redo() {\n        this.model.sharedModel.redo();\n    }\n    /**\n     * Clear the undo history.\n     */\n    clearHistory() {\n        this.model.sharedModel.clearUndoHistory();\n    }\n    /**\n     * Brings browser focus to this editor text.\n     */\n    focus() {\n        this._editor.focus();\n    }\n    /**\n     * Test whether the editor has keyboard focus.\n     */\n    hasFocus() {\n        return this._editor.hasFocus;\n    }\n    /**\n     * Explicitly blur the editor.\n     */\n    blur() {\n        this._editor.contentDOM.blur();\n    }\n    get state() {\n        return this._editor.state;\n    }\n    firstLine() {\n        // TODO: return 1 when CM6 first line number has propagated\n        return 0;\n    }\n    lastLine() {\n        return this.doc.lines - 1;\n    }\n    cursorCoords(where, mode) {\n        const selection = this.state.selection.main;\n        const pos = where ? selection.from : selection.to;\n        const rect = this.editor.coordsAtPos(pos);\n        return rect;\n    }\n    getRange(from, to, separator) {\n        const fromOffset = this.getOffsetAt(this._toPosition(from));\n        const toOffset = this.getOffsetAt(this._toPosition(to));\n        return this.state.sliceDoc(fromOffset, toOffset);\n    }\n    /**\n     * Reveal the given position in the editor.\n     */\n    revealPosition(position) {\n        const offset = this.getOffsetAt(position);\n        this._editor.dispatch({\n            effects: EditorView.scrollIntoView(offset)\n        });\n    }\n    /**\n     * Reveal the given selection in the editor.\n     */\n    revealSelection(selection) {\n        const start = this.getOffsetAt(selection.start);\n        const end = this.getOffsetAt(selection.end);\n        this._editor.dispatch({\n            effects: EditorView.scrollIntoView(EditorSelection.range(start, end))\n        });\n    }\n    /**\n     * Get the window coordinates given a cursor position.\n     */\n    getCoordinateForPosition(position) {\n        const offset = this.getOffsetAt(position);\n        const rect = this.editor.coordsAtPos(offset);\n        return rect;\n    }\n    /**\n     * Get the cursor position given window coordinates.\n     *\n     * @param coordinate - The desired coordinate.\n     *\n     * @returns The position of the coordinates, or null if not\n     *   contained in the editor.\n     */\n    getPositionForCoordinate(coordinate) {\n        const offset = this.editor.posAtCoords({\n            x: coordinate.left,\n            y: coordinate.top\n        });\n        return this.getPositionAt(offset) || null;\n    }\n    /**\n     * Returns the primary position of the cursor, never `null`.\n     */\n    getCursorPosition() {\n        const offset = this.state.selection.main.head;\n        return this.getPositionAt(offset);\n    }\n    /**\n     * Set the primary position of the cursor.\n     *\n     * #### Notes\n     * This will remove any secondary cursors.\n     *\n     * @deprecated options bias and origin are not used\n     */\n    setCursorPosition(position, options = {}) {\n        const offset = this.getOffsetAt(position);\n        this.editor.dispatch({\n            selection: { anchor: offset },\n            scrollIntoView: options.scroll === false ? false : true\n        });\n        // If the editor does not have focus, this cursor change\n        // will get screened out in _onCursorsChanged(). Make an\n        // exception for this method.\n        if (!this.editor.hasFocus) {\n            this.model.selections.set(this.uuid, this.getSelections());\n        }\n    }\n    /**\n     * Returns the primary selection, never `null`.\n     */\n    getSelection() {\n        return this.getSelections()[0];\n    }\n    /**\n     * Set the primary selection. This will remove any secondary cursors.\n     */\n    setSelection(selection) {\n        this.setSelections([selection]);\n    }\n    /**\n     * Gets the selections for all the cursors, never `null` or empty.\n     */\n    getSelections() {\n        const selections = this.state.selection.ranges; //= [{anchor: number, head: number}]\n        if (selections.length > 0) {\n            const sel = selections.map(r => ({\n                anchor: this._toCodeMirrorPosition(this.getPositionAt(r.from)),\n                head: this._toCodeMirrorPosition(this.getPositionAt(r.to))\n            }));\n            return sel.map(selection => this._toSelection(selection));\n        }\n        const cursor = this._toCodeMirrorPosition(this.getPositionAt(this.state.selection.main.head));\n        const selection = this._toSelection({ anchor: cursor, head: cursor });\n        return [selection];\n    }\n    /**\n     * Sets the selections for all the cursors, should not be empty.\n     * Cursors will be removed or added, as necessary.\n     * Passing an empty array resets a cursor position to the start of a document.\n     */\n    setSelections(selections) {\n        const sel = selections.length\n            ? selections.map(r => EditorSelection.range(this.getOffsetAt(r.start), this.getOffsetAt(r.end)))\n            : [EditorSelection.range(0, 0)];\n        this.editor.dispatch({ selection: EditorSelection.create(sel) });\n    }\n    /**\n     * Replaces the current selection with the given text.\n     *\n     * Behaviour for multiple selections is undefined.\n     *\n     * @param text The text to be inserted.\n     */\n    replaceSelection(text) {\n        const firstSelection = this.getSelections()[0];\n        this.model.sharedModel.updateSource(this.getOffsetAt(firstSelection.start), this.getOffsetAt(firstSelection.end), text);\n        const newPosition = this.getPositionAt(this.getOffsetAt(firstSelection.start) + text.length);\n        this.setSelection({ start: newPosition, end: newPosition });\n    }\n    /**\n     * Get a list of tokens for the current editor text content.\n     */\n    getTokens() {\n        const tokens = [];\n        const tree = ensureSyntaxTree(this.state, this.doc.length);\n        if (tree) {\n            tree.iterate({\n                enter: (ref) => {\n                    if (ref.node.firstChild === null) {\n                        tokens.push({\n                            value: this.state.sliceDoc(ref.from, ref.to),\n                            offset: ref.from,\n                            type: ref.name\n                        });\n                    }\n                    return true;\n                }\n            });\n        }\n        return tokens;\n    }\n    /**\n     * Get the token at a given editor position.\n     */\n    getTokenAt(offset) {\n        const tree = ensureSyntaxTree(this.state, offset);\n        let token = null;\n        if (tree) {\n            tree.iterate({\n                enter: (ref) => {\n                    // If a token has already been discovered, stop iterating.\n                    if (token) {\n                        return false;\n                    }\n                    // If it is not a leaf, keep iterating.\n                    if (ref.node.firstChild) {\n                        return true;\n                    }\n                    // If the relevant leaf token has been found, stop iterating.\n                    if (offset >= ref.from && offset <= ref.to) {\n                        let currentNode = ref;\n                        // The syntax tree of the code lines ending with an incomplete string creates an erronous\n                        // child of the last node, in this case the parent should be considered for the token.\n                        if (ref.name === '⚠' && ref.from === ref.to && ref.node.parent) {\n                            currentNode = ref.node.parent;\n                        }\n                        token = {\n                            value: this.state.sliceDoc(currentNode.from, currentNode.to),\n                            offset: currentNode.from,\n                            type: currentNode.name\n                        };\n                        return false;\n                    }\n                    return true;\n                }\n            });\n        }\n        return token || { offset, value: '' };\n    }\n    /**\n     * Get the token a the cursor position.\n     */\n    getTokenAtCursor() {\n        return this.getTokenAt(this.state.selection.main.head);\n    }\n    /**\n     * Insert a new indented line at the current cursor position.\n     */\n    newIndentedLine() {\n        insertNewlineAndIndent({\n            state: this.state,\n            dispatch: this.editor.dispatch\n        });\n    }\n    /**\n     * Execute a codemirror command on the editor.\n     *\n     * @param command - The name of the command to execute.\n     */\n    execCommand(command) {\n        command(this.editor);\n    }\n    onConfigChanged(configurator, changes) {\n        const definedChanges = Object.keys(changes).reduce((agg, key) => {\n            if (changes[key] != undefined) {\n                agg[key] = changes[key];\n            }\n            return agg;\n        }, {});\n        configurator.reconfigureExtensions(this._editor, definedChanges);\n        // when customStyles change and the editor is not initialized\n        if (changes['customStyles'] && !changes['fontSize']) {\n            // update the state to change the gutter height\n            this.editor.setState(this.editor.state);\n        }\n    }\n    /**\n     * Handle keydown events from the editor.\n     */\n    onKeydown(event) {\n        const position = this.state.selection.main.head;\n        if (position === 0 && event.keyCode === UP_ARROW) {\n            if (!event.shiftKey) {\n                this.edgeRequested.emit('top');\n            }\n            return false;\n        }\n        const line = this.doc.lineAt(position).number;\n        if (line === 1 && event.keyCode === UP_ARROW) {\n            if (!event.shiftKey) {\n                this.edgeRequested.emit('topLine');\n            }\n            return false;\n        }\n        const length = this.doc.length;\n        if (position === length && event.keyCode === DOWN_ARROW) {\n            if (!event.shiftKey) {\n                this.edgeRequested.emit('bottom');\n            }\n            return false;\n        }\n        return false;\n    }\n    /**\n     * Handles a mime type change.\n     */\n    _onMimeTypeChanged() {\n        // TODO: should we provide a hook for when the mode is done being set?\n        this._languages\n            .getLanguage(this._model.mimeType)\n            .then(language => {\n            var _a;\n            this._editor.dispatch({\n                effects: this._language.reconfigure((_a = language === null || language === void 0 ? void 0 : language.support) !== null && _a !== void 0 ? _a : [])\n            });\n        })\n            .catch(reason => {\n            console.log(`Failed to load language for '${this._model.mimeType}'.`, reason);\n            this._editor.dispatch({\n                effects: this._language.reconfigure([])\n            });\n        });\n    }\n    /**\n     * Handles a cursor activity event.\n     */\n    _onCursorActivity() {\n        // Only add selections if the editor has focus. This avoids unwanted\n        // triggering of cursor activity due to collaborator actions.\n        if (this._editor.hasFocus) {\n            const selections = this.getSelections();\n            this.model.selections.set(this.uuid, selections);\n        }\n    }\n    /**\n     * Converts a code mirror selection to an editor selection.\n     */\n    _toSelection(selection) {\n        return {\n            uuid: this.uuid,\n            start: this._toPosition(selection.anchor),\n            end: this._toPosition(selection.head)\n        };\n    }\n    /**\n     * Convert a code mirror position to an editor position.\n     */\n    _toPosition(position) {\n        return {\n            line: position.line,\n            column: position.ch\n        };\n    }\n    /**\n     * Convert an editor position to a code mirror position.\n     */\n    _toCodeMirrorPosition(position) {\n        return {\n            line: position.line,\n            ch: position.column\n        };\n    }\n    /**\n     * Handles document changes.\n     */\n    _onDocChanged(update) {\n        if (update.transactions.length && update.transactions[0].selection) {\n            this._onCursorActivity();\n        }\n    }\n    /**\n     * Handle the DOM events for the editor.\n     *\n     * @param event - The DOM event sent to the editor.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the editor's DOM node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'focus':\n                this._evtFocus(event);\n                break;\n            case 'blur':\n                this._evtBlur(event);\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Handle `focus` events for the editor.\n     */\n    _evtFocus(event) {\n        this.host.classList.add('jp-mod-focused');\n        // Update the selections on editor gaining focus because\n        // the onCursorActivity function filters usual cursor events\n        // based on the editor's focus.\n        this._onCursorActivity();\n    }\n    /**\n     * Handle `blur` events for the editor.\n     */\n    _evtBlur(event) {\n        this.host.classList.remove('jp-mod-focused');\n    }\n}\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    function createEditor(host, editorConfig, additionalExtensions, doc) {\n        const extensions = editorConfig.getInitialExtensions();\n        extensions.push(...additionalExtensions);\n        const view = new EditorView({\n            state: EditorState.create({\n                doc,\n                extensions\n            }),\n            parent: host\n        });\n        return view;\n    }\n    Private.createEditor = createEditor;\n})(Private || (Private = {}));\n//# sourceMappingURL=editor.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { keymap } from '@codemirror/view';\nimport { EditorExtensionRegistry } from './extension';\nimport { CodeMirrorEditor } from './editor';\nimport { EditorLanguageRegistry } from './language';\n/**\n * CodeMirror editor factory.\n */\nexport class CodeMirrorEditorFactory {\n    /**\n     * Construct an IEditorFactoryService for CodeMirrorEditors.\n     */\n    constructor(options = {}) {\n        var _a, _b, _c;\n        /**\n         * Create a new editor for inline code.\n         */\n        this.newInlineEditor = (options) => {\n            options.host.dataset.type = 'inline';\n            return this.newEditor({\n                ...options,\n                config: { ...this.inlineCodeMirrorConfig, ...(options.config || {}) },\n                inline: true\n            });\n        };\n        /**\n         * Create a new editor for a full document.\n         */\n        this.newDocumentEditor = (options) => {\n            var _a, _b;\n            options.host.dataset.type = 'document';\n            return this.newEditor({\n                ...options,\n                config: { ...this.documentCodeMirrorConfig, ...((_a = options.config) !== null && _a !== void 0 ? _a : {}) },\n                inline: false,\n                extensions: [\n                    keymap.of([\n                        {\n                            key: 'Shift-Enter',\n                            run: (target) => {\n                                return true;\n                            }\n                        }\n                    ])\n                ].concat((_b = options.extensions) !== null && _b !== void 0 ? _b : [])\n            });\n        };\n        this.languages = (_a = options.languages) !== null && _a !== void 0 ? _a : new EditorLanguageRegistry();\n        this.extensions = (_b = options.extensions) !== null && _b !== void 0 ? _b : new EditorExtensionRegistry();\n        this.translator = (_c = options.translator) !== null && _c !== void 0 ? _c : nullTranslator;\n        this.inlineCodeMirrorConfig = {\n            searchWithCM: true\n        };\n        this.documentCodeMirrorConfig = {\n            lineNumbers: true,\n            scrollPastEnd: true\n        };\n    }\n    /**\n     * Create a new editor\n     *\n     * @param options Editor options\n     * @returns The editor\n     */\n    newEditor(options) {\n        const editor = new CodeMirrorEditor({\n            extensionsRegistry: this.extensions,\n            languages: this.languages,\n            translator: this.translator,\n            ...options\n        });\n        return editor;\n    }\n}\n//# sourceMappingURL=factory.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { IEditorMimeTypeService } from '@jupyterlab/codeeditor';\nimport { PathExt } from '@jupyterlab/coreutils';\n/**\n * The mime type service for CodeMirror.\n */\nexport class CodeMirrorMimeTypeService {\n    constructor(languages) {\n        this.languages = languages;\n    }\n    /**\n     * Returns a mime type for the given language info.\n     *\n     * #### Notes\n     * If a mime type cannot be found returns the default mime type `text/plain`, never `null`.\n     * There may be more than one mime type, but only the first one will be returned.\n     * To access all mime types, use `IEditorLanguageRegistry` instead.\n     */\n    getMimeTypeByLanguage(info) {\n        var _a;\n        const ext = info.file_extension || '';\n        const mode = this.languages.findBest(info.codemirror_mode || {\n            mimetype: info.mimetype,\n            name: info.name,\n            ext: [ext.split('.').slice(-1)[0]]\n        });\n        return mode\n            ? Array.isArray(mode.mime)\n                ? (_a = mode.mime[0]) !== null && _a !== void 0 ? _a : IEditorMimeTypeService.defaultMimeType\n                : mode.mime\n            : IEditorMimeTypeService.defaultMimeType;\n    }\n    /**\n     * Returns a mime type for the given file path.\n     *\n     * #### Notes\n     * If a mime type cannot be found returns the default mime type `text/plain`, never `null`.\n     * There may be more than one mime type, but only the first one will be returned.\n     * To access all mime types, use `IEditorLanguageRegistry` instead.\n     */\n    getMimeTypeByFilePath(path) {\n        var _a;\n        const ext = PathExt.extname(path);\n        if (ext === '.ipy') {\n            return 'text/x-python';\n        }\n        else if (ext === '.md') {\n            return 'text/x-ipythongfm';\n        }\n        const mode = this.languages.findByFileName(path);\n        return mode\n            ? Array.isArray(mode.mime)\n                ? (_a = mode.mime[0]) !== null && _a !== void 0 ? _a : IEditorMimeTypeService.defaultMimeType\n                : mode.mime\n            : IEditorMimeTypeService.defaultMimeType;\n    }\n}\n//# sourceMappingURL=mimetype.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { EditorSelection, StateEffect, StateField } from '@codemirror/state';\nimport { Decoration, EditorView } from '@codemirror/view';\nimport { GenericSearchProvider, TextSearchEngine } from '@jupyterlab/documentsearch';\nimport { Signal } from '@lumino/signaling';\n/**\n * Search provider for editors.\n */\nexport class EditorSearchProvider {\n    /**\n     * Constructor\n     */\n    constructor() {\n        /**\n         * Current match index\n         */\n        this.currentIndex = null;\n        /**\n         * Current search query\n         */\n        this.query = null;\n        this._isActive = true;\n        this._inSelection = null;\n        this._isDisposed = false;\n        this._cmHandler = null;\n        this.currentIndex = null;\n        this._stateChanged = new Signal(this);\n    }\n    /**\n     * CodeMirror search highlighter\n     */\n    get cmHandler() {\n        if (!this._cmHandler) {\n            this._cmHandler = new CodeMirrorSearchHighlighter(this.editor);\n        }\n        return this._cmHandler;\n    }\n    /**\n     * Changed signal to be emitted when search matches change.\n     */\n    get stateChanged() {\n        return this._stateChanged;\n    }\n    /**\n     * Current match index\n     */\n    get currentMatchIndex() {\n        return this.isActive ? this.currentIndex : null;\n    }\n    /**\n     * Whether the cell search is active.\n     *\n     * This is used when applying search only on selected cells.\n     */\n    get isActive() {\n        return this._isActive;\n    }\n    /**\n     * Whether the search provider is disposed or not.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Number of matches in the cell.\n     */\n    get matchesCount() {\n        return this.isActive ? this.cmHandler.matches.length : 0;\n    }\n    /**\n     * Clear currently highlighted match\n     */\n    clearHighlight() {\n        this.currentIndex = null;\n        this.cmHandler.clearHighlight();\n        return Promise.resolve();\n    }\n    /**\n     * Dispose the search provider\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n        if (this.isActive) {\n            this.endQuery().catch(reason => {\n                console.error(`Failed to end search query on cells.`, reason);\n            });\n        }\n    }\n    /**\n     * Set `isActive` status.\n     *\n     * #### Notes\n     * It will start or end the search\n     *\n     * @param v New value\n     */\n    async setIsActive(v) {\n        if (this._isActive === v) {\n            return;\n        }\n        this._isActive = v;\n        if (this._isActive) {\n            if (this.query !== null) {\n                await this.startQuery(this.query, this.filters);\n            }\n        }\n        else {\n            await this.endQuery();\n        }\n    }\n    /**\n     * Set whether search should be limited to specified text selection.\n     */\n    async setSearchSelection(selection) {\n        if (this._inSelection === selection) {\n            return;\n        }\n        this._inSelection = selection;\n        await this.updateCodeMirror(this.model.sharedModel.getSource());\n        this._stateChanged.emit();\n    }\n    /**\n     * Set whether user selection should be protected from modifications.\n     *\n     * If disabled, the selection will be updated on search and on editor focus\n     * to cover the current match. We need to protect selection from modifications\n     * for both: search in text and search in cells; since `setSearchSelection`\n     * is only telling us about search in text, we need to have an additional\n     * way to signal that either search in text or in cells is active, or for\n     * any other reason selection range should be protected.\n     */\n    setProtectSelection(v) {\n        this.cmHandler.protectSelection = v;\n    }\n    /**\n     * Initialize the search using the provided options. Should update the UI\n     * to highlight all matches and \"select\" the first match.\n     *\n     * @param query A RegExp to be use to perform the search\n     * @param filters Filter parameters to pass to provider\n     */\n    async startQuery(query, filters) {\n        this.query = query;\n        this.filters = filters;\n        // Search input\n        const content = this.model.sharedModel.getSource();\n        await this.updateCodeMirror(content);\n        this.model.sharedModel.changed.connect(this.onSharedModelChanged, this);\n    }\n    /**\n     * Stop the search and clean any UI elements.\n     */\n    async endQuery() {\n        await this.clearHighlight();\n        await this.cmHandler.endQuery();\n        this.currentIndex = null;\n    }\n    /**\n     * Highlight the next match.\n     *\n     * @returns The next match if there is one.\n     */\n    async highlightNext(loop = true, options) {\n        if (this.matchesCount === 0 || !this.isActive) {\n            this.currentIndex = null;\n        }\n        else {\n            let match = await this.cmHandler.highlightNext(options);\n            if (match) {\n                this.currentIndex = this.cmHandler.currentIndex;\n            }\n            else {\n                // Note: the loop logic is only used in single-editor (e.g. file editor)\n                // provider sub-classes, notebook has its own loop logic and ignores\n                // `currentIndex` as set here.\n                this.currentIndex = loop ? 0 : null;\n            }\n            return match;\n        }\n        return Promise.resolve(this.getCurrentMatch());\n    }\n    /**\n     * Highlight the previous match.\n     *\n     * @returns The previous match if there is one.\n     */\n    async highlightPrevious(loop = true, options) {\n        if (this.matchesCount === 0 || !this.isActive) {\n            this.currentIndex = null;\n        }\n        else {\n            let match = await this.cmHandler.highlightPrevious(options);\n            if (match) {\n                this.currentIndex = this.cmHandler.currentIndex;\n            }\n            else {\n                this.currentIndex = loop ? this.matchesCount - 1 : null;\n            }\n            return match;\n        }\n        return Promise.resolve(this.getCurrentMatch());\n    }\n    /**\n     * Replace the currently selected match with the provided text.\n     *\n     * If no match is selected, it won't do anything.\n     *\n     * The caller of this method is expected to call `highlightNext` if after\n     * calling `replaceCurrentMatch()` attribute `this.currentIndex` is null.\n     * It is necessary to let the caller handle highlighting because this\n     * method is used in composition pattern (search engine of notebook cells)\n     * and highlighting on the composer (notebook) level needs to switch to next\n     * engine (cell) with matches.\n     *\n     * @param newText The replacement text.\n     * @returns Whether a replace occurred.\n     */\n    replaceCurrentMatch(newText, loop, options) {\n        if (!this.isActive) {\n            return Promise.resolve(false);\n        }\n        if (this.currentIndex !== null &&\n            this.currentIndex < this.cmHandler.matches.length) {\n            const match = this.getCurrentMatch();\n            if (!match) {\n                this.currentIndex = null;\n            }\n            else {\n                const substitutedText = (options === null || options === void 0 ? void 0 : options.regularExpression)\n                    ? match.text.replace(this.query, newText)\n                    : newText;\n                const insertText = (options === null || options === void 0 ? void 0 : options.preserveCase)\n                    ? GenericSearchProvider.preserveCase(match.text, substitutedText)\n                    : substitutedText;\n                this.model.sharedModel.updateSource(match.position, match.position + match.text.length, insertText);\n                // Regenerate the match list, then iterate through it.\n                return new Promise((resolve, reject) => {\n                    this.updateCodeMirror(this.model.sharedModel.getSource())\n                        .then(() => {\n                        const allMatches = this.cmHandler.matches;\n                        const positionAfterReplacement = match.position + insertText.length;\n                        let nextMatchFound = false;\n                        for (let matchIdx = this.currentIndex || 0; matchIdx < allMatches.length; matchIdx++) {\n                            if (allMatches[matchIdx].position >= positionAfterReplacement) {\n                                this.currentIndex = matchIdx;\n                                nextMatchFound = true;\n                                break;\n                            }\n                            // Move the highlight forward from the previous match, not looping.\n                            void this.highlightNext(false, { from: 'previous-match' });\n                        }\n                        if (!nextMatchFound) {\n                            this.currentIndex = null; // No more matches in this string\n                        }\n                        resolve(true);\n                    })\n                        .catch(err => {\n                        const errorMessage = `Failed to regenerate match list: ${err}`;\n                        console.error(errorMessage);\n                        reject(errorMessage);\n                    });\n                });\n            }\n        }\n        return Promise.resolve(false);\n    }\n    /**\n     * Replace all matches in the cell source with the provided text\n     *\n     * @param newText The replacement text.\n     * @returns Whether a replace occurred.\n     */\n    replaceAllMatches(newText, options) {\n        if (!this.isActive) {\n            return Promise.resolve(false);\n        }\n        let occurred = this.cmHandler.matches.length > 0;\n        let src = this.model.sharedModel.getSource();\n        let lastEnd = 0;\n        const finalSrc = this.cmHandler.matches.reduce((agg, match) => {\n            const start = match.position;\n            const end = start + match.text.length;\n            const substitutedText = (options === null || options === void 0 ? void 0 : options.regularExpression)\n                ? match.text.replace(this.query, newText)\n                : newText;\n            const insertText = (options === null || options === void 0 ? void 0 : options.preserveCase)\n                ? GenericSearchProvider.preserveCase(match.text, substitutedText)\n                : substitutedText;\n            const newStep = `${agg}${src.slice(lastEnd, start)}${insertText}`;\n            lastEnd = end;\n            return newStep;\n        }, '');\n        if (occurred) {\n            this.cmHandler.matches = [];\n            this.currentIndex = null;\n            this.model.sharedModel.setSource(`${finalSrc}${src.slice(lastEnd)}`);\n        }\n        return Promise.resolve(occurred);\n    }\n    /**\n     * Get the current match if it exists.\n     *\n     * @returns The current match\n     */\n    getCurrentMatch() {\n        if (this.currentIndex === null) {\n            return undefined;\n        }\n        else {\n            let match = undefined;\n            if (this.currentIndex < this.cmHandler.matches.length) {\n                match = this.cmHandler.matches[this.currentIndex];\n            }\n            return match;\n        }\n    }\n    /**\n     * Callback on source change\n     *\n     * @param emitter Source of the change\n     * @param changes Source change\n     */\n    async onSharedModelChanged(emitter, changes) {\n        if (changes.sourceChange) {\n            await this.updateCodeMirror(emitter.getSource());\n            this._stateChanged.emit();\n        }\n    }\n    /**\n     * Update matches\n     */\n    async updateCodeMirror(content) {\n        if (this.query !== null && this.isActive) {\n            const allMatches = await TextSearchEngine.search(this.query, content);\n            if (this._inSelection) {\n                const editor = this.editor;\n                const start = editor.getOffsetAt(this._inSelection.start);\n                const end = editor.getOffsetAt(this._inSelection.end);\n                this.cmHandler.matches = allMatches.filter(match => match.position >= start && match.position <= end);\n                // A special case to always have a current match when in line selection mode.\n                if (this.cmHandler.currentIndex === null &&\n                    this.cmHandler.matches.length > 0) {\n                    await this.cmHandler.highlightNext({\n                        from: 'selection',\n                        select: false,\n                        scroll: false\n                    });\n                }\n                this.currentIndex = this.cmHandler.currentIndex;\n            }\n            else {\n                this.cmHandler.matches = allMatches;\n            }\n        }\n        else {\n            this.cmHandler.matches = [];\n        }\n    }\n}\n/**\n * Helper class to highlight texts in a code mirror editor.\n *\n * Highlighted texts (aka `matches`) must be provided through\n * the `matches` attributes.\n *\n * **NOTES:**\n * - to retain the selection visibility `drawSelection` extension is needed.\n * - highlighting starts from the cursor (if editor is focused and `from` is set\n *   to `'auto'`, cursor moved, or `from` argument is set to `'selection'` or\n *   `'selection-start'`), or from last \"current\" match otherwise.\n * - `currentIndex` is the (readonly) source of truth for the current match.\n */\nexport class CodeMirrorSearchHighlighter {\n    /**\n     * Constructor\n     *\n     * @param editor The CodeMirror editor\n     */\n    constructor(editor) {\n        this._current = null;\n        this._cm = editor;\n        this._matches = new Array();\n        this._currentIndex = null;\n        this._highlightEffect = StateEffect.define({\n            map: (value, mapping) => {\n                const transform = (v) => ({\n                    text: v.text,\n                    position: mapping.mapPos(v.position)\n                });\n                return {\n                    matches: value.matches.map(transform),\n                    currentMatch: value.currentMatch\n                        ? transform(value.currentMatch)\n                        : null\n                };\n            }\n        });\n        this._highlightMark = Decoration.mark({ class: 'cm-searching' });\n        this._currentMark = Decoration.mark({ class: 'jp-current-match' });\n        this._highlightField = StateField.define({\n            create: () => {\n                return Decoration.none;\n            },\n            update: (highlights, transaction) => {\n                highlights = highlights.map(transaction.changes);\n                for (let ef of transaction.effects) {\n                    if (ef.is(this._highlightEffect)) {\n                        const e = ef;\n                        if (e.value.matches.length) {\n                            // Note: nesting will vary; sometimes `.cm-searching` will be\n                            // inside `.jp-current-match`, sometime the other way round.\n                            highlights = highlights.update({\n                                add: e.value.matches.map(m => this._highlightMark.range(m.position, m.position + m.text.length)),\n                                // filter out old marks\n                                filter: () => false\n                            });\n                            highlights = highlights.update({\n                                add: e.value.currentMatch\n                                    ? [\n                                        this._currentMark.range(e.value.currentMatch.position, e.value.currentMatch.position +\n                                            e.value.currentMatch.text.length)\n                                    ]\n                                    : []\n                            });\n                        }\n                        else {\n                            highlights = Decoration.none;\n                        }\n                    }\n                }\n                return highlights;\n            },\n            provide: f => EditorView.decorations.from(f)\n        });\n        this._domEventHandlers = EditorView.domEventHandlers({\n            focus: () => {\n                // Set cursor on active match when editor gets focused.\n                this._selectCurrentMatch();\n            }\n        });\n    }\n    /**\n     * The current index of the selected match.\n     */\n    get currentIndex() {\n        return this._currentIndex;\n    }\n    /**\n     * The list of matches\n     */\n    get matches() {\n        return this._matches;\n    }\n    set matches(v) {\n        this._matches = v;\n        if (this._currentIndex !== null &&\n            this._currentIndex > this._matches.length) {\n            this._currentIndex = this._matches.length > 0 ? 0 : null;\n        }\n        this._highlightCurrentMatch({ select: false });\n    }\n    /**\n     * Whether the cursor/selection should not be modified.\n     */\n    get protectSelection() {\n        return this._protectSelection;\n    }\n    set protectSelection(v) {\n        this._protectSelection = v;\n    }\n    /**\n     * Clear all highlighted matches\n     */\n    clearHighlight() {\n        this._currentIndex = null;\n        this._highlightCurrentMatch();\n    }\n    /**\n     * Clear the highlighted matches.\n     */\n    endQuery() {\n        this._currentIndex = null;\n        this._matches = [];\n        if (this._cm) {\n            this._cm.editor.dispatch({\n                effects: this._highlightEffect.of({ matches: [], currentMatch: null })\n            });\n        }\n        return Promise.resolve();\n    }\n    /**\n     * Highlight the next match\n     *\n     * @returns The next match if available\n     */\n    highlightNext(options) {\n        var _a;\n        this._currentIndex = this._findNext(false, (_a = options === null || options === void 0 ? void 0 : options.from) !== null && _a !== void 0 ? _a : 'auto');\n        this._highlightCurrentMatch(options);\n        return Promise.resolve(this._currentIndex !== null\n            ? this._matches[this._currentIndex]\n            : undefined);\n    }\n    /**\n     * Highlight the previous match\n     *\n     * @returns The previous match if available\n     */\n    highlightPrevious(options) {\n        var _a;\n        this._currentIndex = this._findNext(true, (_a = options === null || options === void 0 ? void 0 : options.from) !== null && _a !== void 0 ? _a : 'auto');\n        this._highlightCurrentMatch(options);\n        return Promise.resolve(this._currentIndex !== null\n            ? this._matches[this._currentIndex]\n            : undefined);\n    }\n    /**\n     * Set the editor\n     *\n     * @param editor Editor\n     */\n    setEditor(editor) {\n        if (this._cm) {\n            throw new Error('CodeMirrorEditor already set.');\n        }\n        else {\n            this._cm = editor;\n            if (this._currentIndex !== null) {\n                this._highlightCurrentMatch();\n            }\n            this._cm.editor.dispatch({\n                effects: StateEffect.appendConfig.of(this._domEventHandlers)\n            });\n            this._refresh();\n        }\n    }\n    _selectCurrentMatch(scroll = true) {\n        // This method has two responsibilities:\n        // 1) Scroll the current match into the view - useful for long lines,\n        //    and file editors with more lines that fit on the screen\n        // 2) When user has focus on the editor (not search box) and presses\n        //    ctrl + g/ctrl + shift + g to jump to next match they want their\n        //    cursor to jump too.\n        // We execute (1) and (2) together as CodeMirror has a special code path\n        // to handle both in a single dispatch.\n        // The (2) case is inapplicable to search in selection mode, as it would\n        // invalidate the query selection, so in that case we only execute (1).\n        const match = this._current;\n        if (!match) {\n            return;\n        }\n        if (!this._cm) {\n            return;\n        }\n        const cursor = {\n            anchor: match.position,\n            head: match.position + match.text.length\n        };\n        const selection = this._cm.editor.state.selection.main;\n        if ((selection.from === match.position &&\n            selection.to === match.position + match.text.length) ||\n            this._protectSelection) {\n            // Correct selection is already set or search is restricted to selection:\n            // scroll without changing the selection.\n            if (scroll) {\n                this._cm.editor.dispatch({\n                    effects: EditorView.scrollIntoView(EditorSelection.range(cursor.anchor, cursor.head))\n                });\n                return;\n            }\n        }\n        else {\n            this._cm.editor.dispatch({\n                selection: cursor,\n                scrollIntoView: scroll\n            });\n        }\n    }\n    _highlightCurrentMatch(options) {\n        var _a, _b, _c;\n        if (!this._cm) {\n            // no-op\n            return;\n        }\n        // Highlight the current index\n        if (this._currentIndex !== null) {\n            const match = this.matches[this._currentIndex];\n            this._current = match;\n            // We do not change selection nor scroll if:\n            // - user is selecting text,\n            // - document was modified\n            if ((_a = options === null || options === void 0 ? void 0 : options.select) !== null && _a !== void 0 ? _a : true) {\n                if (this._cm.hasFocus()) {\n                    // If editor is focused we actually set the cursor on the match.\n                    this._selectCurrentMatch((_b = options === null || options === void 0 ? void 0 : options.scroll) !== null && _b !== void 0 ? _b : true);\n                }\n                else if ((_c = options === null || options === void 0 ? void 0 : options.scroll) !== null && _c !== void 0 ? _c : true) {\n                    // otherwise we just scroll to preserve the selection.\n                    this._cm.editor.dispatch({\n                        effects: EditorView.scrollIntoView(match.position)\n                    });\n                }\n            }\n        }\n        else {\n            this._current = null;\n        }\n        this._refresh();\n    }\n    _refresh() {\n        if (!this._cm) {\n            // no-op\n            return;\n        }\n        let effects = [\n            this._highlightEffect.of({\n                matches: this.matches,\n                currentMatch: this._current\n            })\n        ];\n        if (!this._cm.state.field(this._highlightField, false)) {\n            effects.push(StateEffect.appendConfig.of([this._highlightField]));\n        }\n        this._cm.editor.dispatch({ effects });\n    }\n    _findNext(reverse, from = 'auto') {\n        var _a, _b, _c, _d;\n        if (this._matches.length === 0) {\n            // No-op\n            return null;\n        }\n        // If the editor has not be instantiated yet (e.g. a cell that has not yet be seen in the viewport),\n        // force the behavior\n        if (!this._cm && !['previous-match', 'start'].includes(from)) {\n            from = 'previous-match';\n        }\n        let lastPosition = 0;\n        if ((from === 'auto' && ((_b = (_a = this._cm) === null || _a === void 0 ? void 0 : _a.hasFocus()) !== null && _b !== void 0 ? _b : false)) ||\n            from === 'selection') {\n            const cursor = this._cm.state.selection.main;\n            lastPosition = reverse ? cursor.anchor : cursor.head;\n        }\n        else if (from === 'selection-start') {\n            const cursor = this._cm.state.selection.main;\n            lastPosition = Math.min(cursor.anchor, cursor.head);\n        }\n        else if (from === 'start') {\n            lastPosition = 0;\n        }\n        else if (this._current) {\n            lastPosition = reverse\n                ? this._current.position\n                : this._current.position + this._current.text.length;\n        }\n        if (lastPosition === 0 && reverse && this.currentIndex === null) {\n            // The default position is (0, 0) but we want to start from the end in that case\n            // Fallback to the end of the latest match if the editor is not instantiated\n            lastPosition =\n                (_d = (_c = this._cm) === null || _c === void 0 ? void 0 : _c.doc.length) !== null && _d !== void 0 ? _d : endLastMatch(this._matches[this._matches.length - 1]);\n        }\n        const position = lastPosition;\n        let found = Utils.findNext(this._matches, position, 0, this._matches.length - 1);\n        if (found === null) {\n            // Don't loop\n            return reverse ? this._matches.length - 1 : null;\n        }\n        if (reverse) {\n            found -= 1;\n            if (found < 0) {\n                // Don't loop\n                return null;\n            }\n        }\n        return found;\n        function endLastMatch(lastMatch) {\n            return lastMatch ? lastMatch.position + lastMatch.text.length : 0;\n        }\n    }\n}\n/**\n * Helpers namespace\n */\nvar Utils;\n(function (Utils) {\n    /**\n     * Find the closest match at `position` just after it.\n     *\n     * #### Notes\n     * Search is done using a binary search algorithm\n     *\n     * @param matches List of matches\n     * @param position Searched position\n     * @param lowerBound Lower range index\n     * @param higherBound High range index\n     * @returns The next match or null if none exists\n     */\n    function findNext(matches, position, lowerBound = 0, higherBound = Infinity) {\n        higherBound = Math.min(matches.length - 1, higherBound);\n        while (lowerBound <= higherBound) {\n            let middle = Math.floor(0.5 * (lowerBound + higherBound));\n            const currentPosition = matches[middle].position;\n            if (currentPosition < position) {\n                lowerBound = middle + 1;\n                if (lowerBound < matches.length &&\n                    matches[lowerBound].position > position) {\n                    return lowerBound;\n                }\n            }\n            else if (currentPosition > position) {\n                higherBound = middle - 1;\n                if (higherBound > 0 && matches[higherBound].position < position) {\n                    return middle;\n                }\n            }\n            else {\n                return middle;\n            }\n        }\n        // Next could be the first item\n        const first = lowerBound > 0 ? lowerBound - 1 : 0;\n        const match = matches[first];\n        return match.position >= position ? first : null;\n    }\n    Utils.findNext = findNext;\n})(Utils || (Utils = {}));\n//# sourceMappingURL=searchprovider.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { Token } from '@lumino/coreutils';\n/**\n * Editor language token.\n */\nexport const IEditorExtensionRegistry = new Token('@jupyterlab/codemirror:IEditorExtensionRegistry', `A registry for CodeMirror extension factories.`);\n/**\n * Editor language token.\n */\nexport const IEditorLanguageRegistry = new Token('@jupyterlab/codemirror:IEditorLanguageRegistry', 'A registry for CodeMirror languages.');\n/**\n * Editor theme token.\n */\nexport const IEditorThemeRegistry = new Token('@jupyterlab/codemirror:IEditorThemeRegistry', 'A registry for CodeMirror theme.');\n//# sourceMappingURL=token.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module codemirror\n */\nexport * from './commands';\nexport * from './editor';\nexport * from './extension';\nexport * from './extensions';\nexport * from './factory';\nexport * from './language';\nexport * from './mimetype';\nexport * from './searchprovider';\nexport * from './theme';\nexport * from './token';\nexport * from './pythonBuiltin';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/documentsearch/style/index.js';\n\nimport './base.css';\n","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport React, { useState } from 'react';\nconst AVAILABLE_PROVIDERS = 'availableProviders';\n/**\n * Custom setting renderer for provider rank.\n */\nexport function renderAvailableProviders(props) {\n    const { schema } = props;\n    const title = schema.title;\n    const desc = schema.description;\n    const settings = props.formContext.settings;\n    const userData = settings.get(AVAILABLE_PROVIDERS).user;\n    const items = {\n        ...schema.default\n    };\n    if (userData) {\n        for (const key of Object.keys(items)) {\n            if (key in userData) {\n                items[key] = userData[key];\n            }\n            else {\n                items[key] = -1;\n            }\n        }\n    }\n    const [settingValue, setValue] = useState(items);\n    const onSettingChange = (key, e) => {\n        const newValue = {\n            ...settingValue,\n            [key]: parseInt(e.target.value)\n        };\n        settings.set(AVAILABLE_PROVIDERS, newValue).catch(console.error);\n        setValue(newValue);\n    };\n    return (\n    //TODO Remove hard coded class names\n    React.createElement(\"div\", null,\n        React.createElement(\"fieldset\", null,\n            React.createElement(\"legend\", null, title),\n            React.createElement(\"p\", { className: \"field-description\" }, desc),\n            Object.keys(items).map(key => {\n                return (React.createElement(\"div\", { key: key, className: \"form-group small-field\" },\n                    React.createElement(\"div\", null,\n                        React.createElement(\"h3\", null,\n                            \" \",\n                            key),\n                        React.createElement(\"div\", { className: \"inputFieldWrapper\" },\n                            React.createElement(\"input\", { className: \"form-control\", type: \"number\", value: settingValue[key], onChange: e => {\n                                    onSettingChange(key, e);\n                                } })))));\n            }))));\n}\n//# sourceMappingURL=renderer.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module completer-extension\n */\nimport { COMPLETER_ACTIVE_CLASS } from '@jupyterlab/codeeditor';\nimport { CommandToolbarButton } from '@jupyterlab/ui-components';\nimport { CompletionProviderManager, ContextCompleterProvider, HistoryInlineCompletionProvider, ICompletionProviderManager, IInlineCompleterFactory, InlineCompleter, KernelCompleterProvider } from '@jupyterlab/completer';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { caretLeftIcon, caretRightIcon, checkIcon, IFormRendererRegistry } from '@jupyterlab/ui-components';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { CommandRegistry } from '@lumino/commands';\nimport { renderAvailableProviders } from './renderer';\nconst COMPLETION_MANAGER_PLUGIN = '@jupyterlab/completer-extension:manager';\nconst INLINE_COMPLETER_PLUGIN = '@jupyterlab/completer-extension:inline-completer';\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.nextInline = 'inline-completer:next';\n    CommandIDs.previousInline = 'inline-completer:previous';\n    CommandIDs.acceptInline = 'inline-completer:accept';\n    CommandIDs.invokeInline = 'inline-completer:invoke';\n})(CommandIDs || (CommandIDs = {}));\nconst defaultProviders = {\n    id: '@jupyterlab/completer-extension:base-service',\n    description: 'Adds context and kernel completion providers.',\n    requires: [ICompletionProviderManager],\n    autoStart: true,\n    activate: (app, completionManager) => {\n        completionManager.registerProvider(new ContextCompleterProvider());\n        completionManager.registerProvider(new KernelCompleterProvider());\n    }\n};\nconst inlineHistoryProvider = {\n    id: '@jupyterlab/completer-extension:inline-history',\n    description: 'Adds inline completion provider suggesting code from execution history.',\n    requires: [ICompletionProviderManager],\n    optional: [ITranslator],\n    autoStart: true,\n    activate: (app, completionManager, translator) => {\n        completionManager.registerInlineProvider(new HistoryInlineCompletionProvider({\n            translator: translator !== null && translator !== void 0 ? translator : nullTranslator\n        }));\n    }\n};\nconst inlineCompleterFactory = {\n    id: '@jupyterlab/completer-extension:inline-completer-factory',\n    description: 'Provides a factory for inline completer.',\n    provides: IInlineCompleterFactory,\n    optional: [ITranslator],\n    autoStart: true,\n    activate: (app, translator) => {\n        const trans = (translator || nullTranslator).load('jupyterlab');\n        return {\n            factory: options => {\n                const inlineCompleter = new InlineCompleter({\n                    ...options,\n                    trans: trans\n                });\n                const describeShortcut = (commandID) => {\n                    const binding = app.commands.keyBindings.find(binding => binding.command === commandID);\n                    const keys = binding\n                        ? CommandRegistry.formatKeystroke(binding.keys)\n                        : '';\n                    return keys ? `${keys}` : '';\n                };\n                const labelCache = {\n                    [CommandIDs.previousInline]: describeShortcut(CommandIDs.previousInline),\n                    [CommandIDs.nextInline]: describeShortcut(CommandIDs.nextInline),\n                    [CommandIDs.acceptInline]: describeShortcut(CommandIDs.acceptInline)\n                };\n                app.commands.keyBindingChanged.connect((_emitter, change) => {\n                    const command = change.binding.command;\n                    if (labelCache.hasOwnProperty(command)) {\n                        const cached = labelCache[command];\n                        const newLabel = describeShortcut(command);\n                        if (newLabel !== cached) {\n                            // Update cache\n                            labelCache[command] = newLabel;\n                            // Re-render any UI elements using this command\n                            app.commands.notifyCommandChanged(command);\n                        }\n                    }\n                });\n                inlineCompleter.toolbar.addItem('previous-inline-completion', new CommandToolbarButton({\n                    commands: app.commands,\n                    icon: caretLeftIcon,\n                    id: CommandIDs.previousInline,\n                    label: () => labelCache[CommandIDs.previousInline],\n                    caption: trans.__('Previous')\n                }));\n                inlineCompleter.toolbar.addItem('next-inline-completion', new CommandToolbarButton({\n                    commands: app.commands,\n                    icon: caretRightIcon,\n                    id: CommandIDs.nextInline,\n                    label: () => labelCache[CommandIDs.nextInline],\n                    caption: trans.__('Next')\n                }));\n                inlineCompleter.toolbar.addItem('accept-inline-completion', new CommandToolbarButton({\n                    commands: app.commands,\n                    icon: checkIcon,\n                    id: CommandIDs.acceptInline,\n                    label: () => labelCache[CommandIDs.acceptInline],\n                    caption: trans.__('Accept')\n                }));\n                inlineCompleter.model.suggestionsChanged.connect(() => {\n                    // Enabled state of these commands depends on whether\n                    // there are any suggestions (or whether there is more\n                    // than one suggestion) so the UI needs to be modified\n                    // when the suggestions change to reflect the enabled\n                    // state in the buttons state.\n                    for (const command of [\n                        CommandIDs.previousInline,\n                        CommandIDs.nextInline,\n                        CommandIDs.acceptInline\n                    ]) {\n                        app.commands.notifyCommandChanged(command);\n                    }\n                });\n                return inlineCompleter;\n            }\n        };\n    }\n};\nconst inlineCompleter = {\n    id: INLINE_COMPLETER_PLUGIN,\n    description: 'Registers the inline completer factory; adds inline completer commands, shortcuts and settings.',\n    requires: [\n        ICompletionProviderManager,\n        IInlineCompleterFactory,\n        ISettingRegistry\n    ],\n    optional: [ITranslator],\n    autoStart: true,\n    activate: (app, completionManager, factory, settings, translator) => {\n        completionManager.setInlineCompleterFactory(factory);\n        const trans = (translator || nullTranslator).load('jupyterlab');\n        const isEnabled = () => !!app.shell.currentWidget && !!completionManager.inline;\n        let inlineCompleterSettings;\n        app.commands.addCommand(CommandIDs.nextInline, {\n            execute: () => {\n                var _a;\n                (_a = completionManager.inline) === null || _a === void 0 ? void 0 : _a.cycle(app.shell.currentWidget.id, 'next');\n            },\n            label: trans.__('Next Inline Completion'),\n            isEnabled\n        });\n        app.commands.addCommand(CommandIDs.previousInline, {\n            execute: () => {\n                var _a;\n                (_a = completionManager.inline) === null || _a === void 0 ? void 0 : _a.cycle(app.shell.currentWidget.id, 'previous');\n            },\n            label: trans.__('Previous Inline Completion'),\n            isEnabled\n        });\n        app.commands.addCommand(CommandIDs.acceptInline, {\n            execute: () => {\n                var _a;\n                (_a = completionManager.inline) === null || _a === void 0 ? void 0 : _a.accept(app.shell.currentWidget.id);\n            },\n            label: trans.__('Accept Inline Completion'),\n            isEnabled: () => {\n                return (isEnabled() &&\n                    completionManager.inline.isActive(app.shell.currentWidget.id));\n            }\n        });\n        app.commands.addCommand(CommandIDs.invokeInline, {\n            execute: () => {\n                var _a;\n                (_a = completionManager.inline) === null || _a === void 0 ? void 0 : _a.invoke(app.shell.currentWidget.id);\n            },\n            label: trans.__('Invoke Inline Completer'),\n            isEnabled\n        });\n        const updateSettings = (settings) => {\n            var _a;\n            inlineCompleterSettings =\n                settings.composite;\n            (_a = completionManager.inline) === null || _a === void 0 ? void 0 : _a.configure(inlineCompleterSettings);\n        };\n        app.restored\n            .then(() => {\n            var _a;\n            const availableProviders = (_a = completionManager.inlineProviders) !== null && _a !== void 0 ? _a : [];\n            const composeDefaults = (provider) => {\n                var _a, _b;\n                return {\n                    // By default all providers are opt-out, but\n                    // any provider can configure itself to be opt-in.\n                    enabled: true,\n                    autoFillInMiddle: false,\n                    timeout: 5000,\n                    debouncerDelay: 0,\n                    ...((_b = (_a = provider.schema) === null || _a === void 0 ? void 0 : _a.default) !== null && _b !== void 0 ? _b : {})\n                };\n            };\n            settings.transform(INLINE_COMPLETER_PLUGIN, {\n                compose: plugin => {\n                    var _a, _b;\n                    const providers = (_a = plugin.data.composite['providers']) !== null && _a !== void 0 ? _a : {};\n                    for (const provider of availableProviders) {\n                        const defaults = composeDefaults(provider);\n                        providers[provider.identifier] = {\n                            ...defaults,\n                            ...((_b = providers[provider.identifier]) !== null && _b !== void 0 ? _b : {})\n                        };\n                    }\n                    // Add fallback defaults in composite settings values\n                    plugin.data['composite']['providers'] = providers;\n                    return plugin;\n                },\n                fetch: plugin => {\n                    var _a, _b;\n                    const schema = plugin.schema.properties;\n                    const providersSchema = {};\n                    for (const provider of availableProviders) {\n                        providersSchema[provider.identifier] = {\n                            title: trans.__('%1 provider', provider.name),\n                            properties: {\n                                ...((_b = (_a = provider.schema) === null || _a === void 0 ? void 0 : _a.properties) !== null && _b !== void 0 ? _b : {}),\n                                timeout: {\n                                    title: trans.__('Timeout'),\n                                    description: trans.__('Timeout for %1 provider (in milliseconds).', provider.name),\n                                    type: 'number',\n                                    minimum: 0\n                                },\n                                debouncerDelay: {\n                                    title: trans.__('Debouncer delay'),\n                                    minimum: 0,\n                                    description: trans.__('Time since the last key press to wait before requesting completions from %1 provider (in milliseconds).', provider.name),\n                                    type: 'number'\n                                },\n                                enabled: {\n                                    title: trans.__('Enabled'),\n                                    description: trans.__('Whether to fetch completions %1 provider.', provider.name),\n                                    type: 'boolean'\n                                },\n                                autoFillInMiddle: {\n                                    title: trans.__('Fill in middle on typing'),\n                                    description: trans.__('Whether to show completions in the middle of the code line from %1 provider on typing.', provider.name),\n                                    type: 'boolean'\n                                }\n                            },\n                            default: composeDefaults(provider),\n                            type: 'object'\n                        };\n                    }\n                    // Populate schema for providers settings\n                    schema['providers']['properties'] = providersSchema;\n                    return plugin;\n                }\n            });\n            const settingsPromise = settings.load(INLINE_COMPLETER_PLUGIN);\n            settingsPromise\n                .then(settingValues => {\n                updateSettings(settingValues);\n                settingValues.changed.connect(newSettings => {\n                    updateSettings(newSettings);\n                });\n            })\n                .catch(console.error);\n        })\n            .catch(console.error);\n        const findKeybinding = (commandID) => {\n            return app.commands.keyBindings.find(binding => binding.command === commandID);\n        };\n        const keyBindings = {\n            [CommandIDs.acceptInline]: findKeybinding(CommandIDs.acceptInline),\n            [CommandIDs.invokeInline]: findKeybinding(CommandIDs.invokeInline)\n        };\n        app.commands.keyBindingChanged.connect((_emitter, change) => {\n            const command = change.binding.command;\n            if (keyBindings.hasOwnProperty(command)) {\n                keyBindings[command] =\n                    findKeybinding(command);\n            }\n        });\n        const evtKeydown = (event) => {\n            // Handle bindings to `Tab` key specially\n            if (!(event.target instanceof Element)) {\n                return;\n            }\n            const target = event.target;\n            switch (event.keyCode) {\n                case 9: {\n                    // Tab key\n                    const potentialTabBindings = [\n                        // Note: `accept` should come ahead of `invoke` due to specificity\n                        keyBindings[CommandIDs.acceptInline],\n                        keyBindings[CommandIDs.invokeInline]\n                    ];\n                    for (const binding of potentialTabBindings) {\n                        if (binding &&\n                            binding.keys.length === 1 &&\n                            binding.keys[0] === 'Tab' &&\n                            target.closest(binding.selector) &&\n                            app.commands.isEnabled(binding.command)) {\n                            const tabCompleterActive = target.closest('.' + COMPLETER_ACTIVE_CLASS);\n                            if ((inlineCompleterSettings === null || inlineCompleterSettings === void 0 ? void 0 : inlineCompleterSettings.suppressIfTabCompleterActive) &&\n                                tabCompleterActive) {\n                                return;\n                            }\n                            app.commands.execute(binding.command).catch(console.error);\n                            event.preventDefault();\n                            event.stopPropagation();\n                            event.stopImmediatePropagation();\n                            return;\n                        }\n                    }\n                    break;\n                }\n                default:\n                    return;\n            }\n        };\n        document.addEventListener('keydown', evtKeydown, true);\n    }\n};\nconst manager = {\n    id: COMPLETION_MANAGER_PLUGIN,\n    description: 'Provides the completion provider manager.',\n    requires: [ISettingRegistry],\n    optional: [IFormRendererRegistry],\n    provides: ICompletionProviderManager,\n    autoStart: true,\n    activate: (app, settings, editorRegistry) => {\n        const AVAILABLE_PROVIDERS = 'availableProviders';\n        const manager = new CompletionProviderManager();\n        const updateSetting = (settingValues, availableProviders) => {\n            var _a;\n            const providersData = settingValues.get(AVAILABLE_PROVIDERS);\n            const composite = settingValues.composite;\n            manager.setTimeout(composite.providerTimeout);\n            manager.setShowDocumentationPanel(composite.showDocumentationPanel);\n            manager.setContinuousHinting(composite.autoCompletion);\n            manager.setSuppressIfInlineCompleterActive(composite.suppressIfInlineCompleterActive);\n            const selectedProviders = (_a = providersData.user) !== null && _a !== void 0 ? _a : providersData.composite;\n            const sortedProviders = Object.entries(selectedProviders !== null && selectedProviders !== void 0 ? selectedProviders : {})\n                .filter(val => val[1] >= 0 && availableProviders.includes(val[0]))\n                .sort(([, rank1], [, rank2]) => rank2 - rank1)\n                .map(item => item[0]);\n            manager.activateProvider(sortedProviders);\n        };\n        app.restored\n            .then(() => {\n            const availableProviders = [...manager.getProviders().entries()];\n            const availableProviderIDs = availableProviders.map(([key, value]) => key);\n            settings.transform(COMPLETION_MANAGER_PLUGIN, {\n                fetch: plugin => {\n                    const schema = plugin.schema.properties;\n                    const defaultValue = {};\n                    availableProviders.forEach(([key, value], index) => {\n                        var _a;\n                        defaultValue[key] = (_a = value.rank) !== null && _a !== void 0 ? _a : (index + 1) * 10;\n                    });\n                    schema[AVAILABLE_PROVIDERS]['default'] = defaultValue;\n                    return plugin;\n                }\n            });\n            const settingsPromise = settings.load(COMPLETION_MANAGER_PLUGIN);\n            settingsPromise\n                .then(settingValues => {\n                updateSetting(settingValues, availableProviderIDs);\n                settingValues.changed.connect(newSettings => {\n                    updateSetting(newSettings, availableProviderIDs);\n                });\n            })\n                .catch(console.error);\n        })\n            .catch(console.error);\n        if (editorRegistry) {\n            const renderer = {\n                fieldRenderer: (props) => {\n                    return renderAvailableProviders(props);\n                }\n            };\n            editorRegistry.addRenderer(`${COMPLETION_MANAGER_PLUGIN}.availableProviders`, renderer);\n        }\n        return manager;\n    }\n};\n/**\n * Export the plugins as default.\n */\nconst plugins = [\n    manager,\n    defaultProviders,\n    inlineHistoryProvider,\n    inlineCompleterFactory,\n    inlineCompleter\n];\nexport default plugins;\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/completer/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The type of completion request.\n */\nexport var CompletionTriggerKind;\n(function (CompletionTriggerKind) {\n    CompletionTriggerKind[CompletionTriggerKind[\"Invoked\"] = 1] = \"Invoked\";\n    CompletionTriggerKind[CompletionTriggerKind[\"TriggerCharacter\"] = 2] = \"TriggerCharacter\";\n    CompletionTriggerKind[CompletionTriggerKind[\"TriggerForIncompleteCompletions\"] = 3] = \"TriggerForIncompleteCompletions\";\n})(CompletionTriggerKind || (CompletionTriggerKind = {}));\n/**\n * Describes how an inline completion provider was triggered.\n * @alpha\n */\nexport var InlineCompletionTriggerKind;\n(function (InlineCompletionTriggerKind) {\n    /**\n     * Completion was triggered explicitly by a user gesture.\n     * Return multiple completion items to enable cycling through them.\n     */\n    InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Invoke\"] = 0] = \"Invoke\";\n    /**\n     * Completion was triggered automatically while editing.\n     * It is sufficient to return a single completion item in this case.\n     */\n    InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Automatic\"] = 1] = \"Automatic\";\n})(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {}));\n/**\n * Token allowing to override (or disable) inline completer widget factory.\n */\nexport const IInlineCompleterFactory = new Token('@jupyterlab/completer:IInlineCompleterFactory', 'A factory of inline completer widgets.');\n/**\n * The exported token used to register new provider.\n */\nexport const ICompletionProviderManager = new Token('@jupyterlab/completer:ICompletionProviderManager', 'A service for the completion providers management.');\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { COMPLETER_ACTIVE_CLASS, COMPLETER_ENABLED_CLASS, COMPLETER_LINE_BEGINNING_CLASS } from '@jupyterlab/codeeditor';\nimport { Text } from '@jupyterlab/coreutils';\nimport { Message, MessageLoop } from '@lumino/messaging';\nimport { Signal } from '@lumino/signaling';\nimport { CompletionTriggerKind, InlineCompletionTriggerKind } from './tokens';\n/**\n * A completion handler for editors.\n */\nexport class CompletionHandler {\n    /**\n     * Construct a new completion handler for a widget.\n     */\n    constructor(options) {\n        this._fetchingInline = 0;\n        this._editor = null;\n        this._enabled = false;\n        this._isDisposed = false;\n        this._autoCompletion = false;\n        this._continuousInline = true;\n        this._tabCompleterActive = false;\n        this.completer = options.completer;\n        this.inlineCompleter = options.inlineCompleter;\n        this.completer.selected.connect(this.onCompletionSelected, this);\n        this.completer.visibilityChanged.connect(this.onVisibilityChanged, this);\n        this._reconciliator = options.reconciliator;\n    }\n    set reconciliator(reconciliator) {\n        this._reconciliator = reconciliator;\n    }\n    /**\n     * The editor used by the completion handler.\n     */\n    get editor() {\n        return this._editor;\n    }\n    set editor(newValue) {\n        if (newValue === this._editor) {\n            return;\n        }\n        let editor = this._editor;\n        // Clean up and disconnect from old editor.\n        if (editor && !editor.isDisposed) {\n            const model = editor.model;\n            editor.host.classList.remove(COMPLETER_ENABLED_CLASS);\n            editor.host.classList.remove(COMPLETER_ACTIVE_CLASS);\n            model.selections.changed.disconnect(this.onSelectionsChanged, this);\n            model.sharedModel.changed.disconnect(this._onSharedModelChanged, this);\n        }\n        // Reset completer state.\n        this.completer.reset();\n        this.completer.editor = newValue;\n        // Update the editor and signal connections.\n        editor = this._editor = newValue;\n        if (editor) {\n            const model = editor.model;\n            this._enabled = false;\n            model.selections.changed.connect(this.onSelectionsChanged, this);\n            // We expect the model to be an editor, a file editor, or a cell.\n            const sharedModel = model.sharedModel;\n            // For cells and files the `changed` signal is not limited to text,\n            // but also fires on changes to metadata, outputs, execution count,\n            // and state changes, hence we need to filter the change type.\n            sharedModel.changed.connect(this._onSharedModelChanged, this);\n            // On initial load, manually check the cursor position.\n            this.onSelectionsChanged();\n            if (this.inlineCompleter) {\n                this.inlineCompleter.editor = editor;\n            }\n        }\n    }\n    /**\n     * Get whether the completion handler is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Enable/disable continuous hinting mode.\n     */\n    set autoCompletion(value) {\n        this._autoCompletion = value;\n    }\n    get autoCompletion() {\n        return this._autoCompletion;\n    }\n    /**\n     * Dispose of the resources used by the handler.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n    }\n    /**\n     * Invoke the inline completer on explicit user request.\n     */\n    invokeInline() {\n        const editor = this._editor;\n        if (editor) {\n            this._makeInlineRequest(editor.getCursorPosition(), InlineCompletionTriggerKind.Invoke).catch(reason => {\n                console.warn('Inline invoke request bailed', reason);\n            });\n        }\n    }\n    /**\n     * Invoke the handler and launch a completer.\n     */\n    invoke() {\n        MessageLoop.sendMessage(this, CompletionHandler.Msg.InvokeRequest);\n    }\n    /**\n     * Process a message sent to the completion handler.\n     */\n    processMessage(msg) {\n        switch (msg.type) {\n            case CompletionHandler.Msg.InvokeRequest.type:\n                this.onInvokeRequest(msg);\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Get the state of the text editor at the given position.\n     */\n    getState(editor, position) {\n        return {\n            text: editor.model.sharedModel.getSource(),\n            line: position.line,\n            column: position.column\n        };\n    }\n    /**\n     * Handle a completion selected signal from the completion widget.\n     */\n    onCompletionSelected(completer, val) {\n        const model = completer.model;\n        const editor = this._editor;\n        if (!editor || !model) {\n            return;\n        }\n        const patch = model.createPatch(val);\n        if (!patch) {\n            return;\n        }\n        const { start, end, value } = patch;\n        const cursorBeforeChange = editor.getOffsetAt(editor.getCursorPosition());\n        // Update the document and the cursor position in the same transaction\n        // to ensure consistency in listeners to document changes.\n        // Note: it also ensures a single change is stored by the undo manager.\n        const transactions = {\n            changes: { from: start, to: end, insert: value }\n        };\n        if (cursorBeforeChange <= end && cursorBeforeChange >= start) {\n            transactions.selection = { anchor: start + value.length };\n        }\n        editor.editor.dispatch(transactions);\n    }\n    /**\n     * Handle `invoke-request` messages.\n     */\n    onInvokeRequest(msg) {\n        // If there is no completer model, bail.\n        if (!this.completer.model) {\n            return;\n        }\n        // If a completer session is already active, bail.\n        if (this.completer.model.original) {\n            return;\n        }\n        const editor = this._editor;\n        if (editor) {\n            this._makeRequest(editor.getCursorPosition(), CompletionTriggerKind.Invoked).catch(reason => {\n                console.warn('Invoke request bailed', reason);\n            });\n        }\n    }\n    /**\n     * Handle selection changed signal from an editor.\n     *\n     * #### Notes\n     * If a sub-class reimplements this method, then that class must either call\n     * its super method or it must take responsibility for adding and removing\n     * the completer completable class to the editor host node.\n     *\n     * Despite the fact that the editor widget adds a class whenever there is a\n     * primary selection, this method checks independently for two reasons:\n     *\n     * 1. The editor widget connects to the same signal to add that class, so\n     *    there is no guarantee that the class will be added before this method\n     *    is invoked so simply checking for the CSS class's existence is not an\n     *    option. Secondarily, checking the editor state should be faster than\n     *    querying the DOM in either case.\n     * 2. Because this method adds a class that indicates whether completer\n     *    functionality ought to be enabled, relying on the behavior of the\n     *    `jp-mod-has-primary-selection` to filter out any editors that have\n     *    a selection means the semantic meaning of `jp-mod-completer-enabled`\n     *    is obscured because there may be cases where the enabled class is added\n     *    even though the completer is not available.\n     */\n    onSelectionsChanged() {\n        var _a;\n        const model = this.completer.model;\n        const editor = this._editor;\n        if (!editor) {\n            return;\n        }\n        const inlineModel = (_a = this.inlineCompleter) === null || _a === void 0 ? void 0 : _a.model;\n        if (inlineModel) {\n            // Dispatch selection change.\n            inlineModel.handleSelectionChange(editor.getSelection());\n        }\n        const host = editor.host;\n        // If there is no model, return.\n        if (!model) {\n            this._enabled = false;\n            host.classList.remove(COMPLETER_ENABLED_CLASS);\n            return;\n        }\n        // If we are currently performing a subset match,\n        // return without resetting the completer.\n        if (model.subsetMatch) {\n            return;\n        }\n        const position = editor.getCursorPosition();\n        const line = editor.getLine(position.line);\n        const { start, end } = editor.getSelection();\n        // If there is a text selection, return.\n        if (start.column !== end.column || start.line !== end.line) {\n            this._enabled = false;\n            model.reset(true);\n            host.classList.remove(COMPLETER_ENABLED_CLASS);\n            return;\n        }\n        // If line is empty or the cursor doesn't have any characters before\n        // it besides whitespace, add line beginning class\n        // so that completer can stay enabled, but tab\n        // in codemirror can still be triggered.\n        if (!line || end.column === 0) {\n            host.classList.add(COMPLETER_LINE_BEGINNING_CLASS);\n        }\n        else if (line && line.slice(0, position.column).match(/^\\s*$/)) {\n            host.classList.add(COMPLETER_LINE_BEGINNING_CLASS);\n        }\n        else {\n            host.classList.remove(COMPLETER_LINE_BEGINNING_CLASS);\n        }\n        // Enable completion.\n        if (!this._enabled) {\n            this._enabled = true;\n            host.classList.add(COMPLETER_ENABLED_CLASS);\n        }\n        // Dispatch the cursor change.\n        model.handleCursorChange(this.getState(editor, editor.getCursorPosition()));\n    }\n    /**\n     * Handle a text changed signal from an editor.\n     */\n    async onTextChanged(str, changed) {\n        var _a;\n        if (!this._enabled) {\n            return;\n        }\n        const model = this.completer.model;\n        const editor = this.editor;\n        if (!editor) {\n            return;\n        }\n        if (model &&\n            this._autoCompletion &&\n            this._reconciliator.shouldShowContinuousHint &&\n            (await this._reconciliator.shouldShowContinuousHint(this.completer.isVisible, changed))) {\n            void this._makeRequest(editor.getCursorPosition(), CompletionTriggerKind.TriggerCharacter);\n        }\n        const inlineModel = (_a = this.inlineCompleter) === null || _a === void 0 ? void 0 : _a.model;\n        if (inlineModel) {\n            // Dispatch the text change to inline completer\n            // (this happens before request is sent)\n            inlineModel.handleTextChange(changed);\n            if (this._continuousInline) {\n                void this._makeInlineRequest(editor.getCursorPosition(), InlineCompletionTriggerKind.Automatic);\n            }\n        }\n        if (model) {\n            // If there is a text selection, no completion is allowed.\n            const { start, end } = editor.getSelection();\n            if (start.column !== end.column || start.line !== end.line) {\n                return;\n            }\n            // Dispatch the text change.\n            model.handleTextChange(this.getState(editor, editor.getCursorPosition()));\n        }\n    }\n    /**\n     * Handle a visibility change signal from a completer widget.\n     */\n    onVisibilityChanged(completer) {\n        var _a;\n        // Completer is not active.\n        if (completer.isDisposed || completer.isHidden) {\n            this._tabCompleterActive = false;\n            if (this._editor) {\n                this._editor.host.classList.remove(COMPLETER_ACTIVE_CLASS);\n                this._editor.focus();\n            }\n            return;\n        }\n        // Completer is active.\n        this._tabCompleterActive = true;\n        (_a = this._editor) === null || _a === void 0 ? void 0 : _a.host.classList.add(COMPLETER_ACTIVE_CLASS);\n    }\n    /**\n     * Handle a text shared model change signal from an editor.\n     */\n    async _onSharedModelChanged(str, changed) {\n        if (changed.sourceChange) {\n            await this.onTextChanged(str, changed);\n        }\n    }\n    /**\n     * Make a completion request.\n     */\n    _makeRequest(position, trigger) {\n        const editor = this.editor;\n        if (!editor) {\n            return Promise.reject(new Error('No active editor'));\n        }\n        const request = this._composeRequest(editor, position);\n        const state = this.getState(editor, position);\n        return this._reconciliator\n            .fetch(request, trigger)\n            .then(reply => {\n            var _a;\n            if (!reply) {\n                return;\n            }\n            const model = this._updateModel(state, reply.start, reply.end);\n            if (!model) {\n                return;\n            }\n            if (this.completer.suppressIfInlineCompleterActive &&\n                ((_a = this.inlineCompleter) === null || _a === void 0 ? void 0 : _a.isActive)) {\n                return;\n            }\n            if (model.setCompletionItems) {\n                model.setCompletionItems(reply.items);\n            }\n        })\n            .catch(p => {\n            /* Fails silently. */\n        });\n    }\n    async _makeInlineRequest(position, trigger) {\n        const editor = this.editor;\n        if (!editor) {\n            return Promise.reject(new Error('No active editor'));\n        }\n        if (!this.inlineCompleter) {\n            return Promise.reject(new Error('No inline completer'));\n        }\n        const line = editor.getLine(position.line);\n        if (trigger === InlineCompletionTriggerKind.Automatic &&\n            (typeof line === 'undefined' ||\n                line.slice(0, position.column).match(/^\\s*$/))) {\n            // In Automatic mode we only auto-trigger on the end of line (and not on the beginning).\n            // Increase the counter to avoid out-of date replies when pressing Backspace quickly.\n            this._fetchingInline += 1;\n            return;\n        }\n        let isMiddleOfLine = false;\n        if (typeof line !== 'undefined' && position.column < line.length) {\n            isMiddleOfLine = true;\n        }\n        const request = this._composeRequest(editor, position);\n        const model = this.inlineCompleter.model;\n        if (!model) {\n            return;\n        }\n        model.cursor = position;\n        const current = ++this._fetchingInline;\n        const promises = this._reconciliator.fetchInline(request, trigger, isMiddleOfLine);\n        let cancelled = false;\n        const completed = new Set();\n        for (const promise of promises) {\n            promise\n                .then(result => {\n                var _a;\n                if (cancelled || !result || !result.items) {\n                    return;\n                }\n                if (current !== this._fetchingInline) {\n                    return;\n                }\n                completed.add(promise);\n                if (completed.size === 1) {\n                    if (((_a = this.inlineCompleter) === null || _a === void 0 ? void 0 : _a.suppressIfTabCompleterActive) &&\n                        this._tabCompleterActive) {\n                        cancelled = true;\n                        return;\n                    }\n                    model.setCompletions(result);\n                }\n                else {\n                    model.appendCompletions(result);\n                }\n            })\n                .catch(e => {\n                // Emit warning for debugging.\n                console.warn(e);\n            })\n                .finally(() => {\n                // Mark the provider promise as completed.\n                completed.add(promise);\n                // Let the model know that we are awaiting for fewer providers now.\n                const remaining = promises.length - completed.size;\n                model.notifyProgress({\n                    pendingProviders: remaining,\n                    totalProviders: promises.length\n                });\n            });\n        }\n    }\n    _composeRequest(editor, position) {\n        const text = editor.model.sharedModel.getSource();\n        const mimeType = editor.model.mimeType;\n        const offset = Text.jsIndexToCharIndex(editor.getOffsetAt(position), text);\n        return { text, offset, mimeType };\n    }\n    /**\n     * Updates model with text state and current cursor position.\n     */\n    _updateModel(state, start, end) {\n        const model = this.completer.model;\n        const text = state.text;\n        if (!model) {\n            return null;\n        }\n        // Update the original request.\n        model.original = state;\n        // Update the cursor.\n        model.cursor = {\n            start: Text.charIndexToJsIndex(start, text),\n            end: Text.charIndexToJsIndex(end, text)\n        };\n        return model;\n    }\n}\n/**\n * A namespace for cell completion handler statics.\n */\n(function (CompletionHandler) {\n    /**\n     * Stream event type.\n     */\n    let StraemEvent;\n    (function (StraemEvent) {\n        StraemEvent[StraemEvent[\"opened\"] = 0] = \"opened\";\n        StraemEvent[StraemEvent[\"update\"] = 1] = \"update\";\n        StraemEvent[StraemEvent[\"closed\"] = 2] = \"closed\";\n    })(StraemEvent = CompletionHandler.StraemEvent || (CompletionHandler.StraemEvent = {}));\n    /**\n     * A namespace for completion handler messages.\n     */\n    let Msg;\n    (function (Msg) {\n        /**\n         * A singleton `'invoke-request'` message.\n         */\n        Msg.InvokeRequest = new Message('invoke-request');\n    })(Msg = CompletionHandler.Msg || (CompletionHandler.Msg = {}));\n})(CompletionHandler || (CompletionHandler = {}));\n//# sourceMappingURL=handler.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { StringExt } from '@lumino/algorithm';\nimport { JSONExt } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\n/**\n * Escape HTML by native means of the browser.\n */\nfunction escapeHTML(text) {\n    const node = document.createElement('span');\n    node.textContent = text;\n    return node.innerHTML;\n}\n/**\n * An implementation of a completer model.\n */\nexport class CompleterModel {\n    constructor() {\n        this.processedItemsCache = null;\n        this._current = null;\n        this._cursor = null;\n        this._isDisposed = false;\n        this._completionItems = [];\n        this._original = null;\n        this._query = '';\n        this._subsetMatch = false;\n        this._typeMap = {};\n        this._orderedTypes = [];\n        this._stateChanged = new Signal(this);\n        this._queryChanged = new Signal(this);\n        /**\n         * The weak map between a processed completion item with the original item.\n         * It's used to keep track of original completion item in case of displaying\n         * the completer with query.\n         */\n        this._processedToOriginalItem = null;\n        /**\n         * A counter to cancel ongoing `resolveItem` call.\n         */\n        this._resolvingItem = 0;\n    }\n    /**\n     * A signal emitted when state of the completer menu changes.\n     */\n    get stateChanged() {\n        return this._stateChanged;\n    }\n    /**\n     * A signal emitted when query string changes (at invocation, or as user types).\n     */\n    get queryChanged() {\n        return this._queryChanged;\n    }\n    /**\n     * The original completion request details.\n     */\n    get original() {\n        return this._original;\n    }\n    set original(newValue) {\n        const unchanged = this._original === newValue ||\n            (this._original &&\n                newValue &&\n                JSONExt.deepEqual(newValue, this._original));\n        if (unchanged) {\n            return;\n        }\n        this._reset();\n        // Set both the current and original to the same value when original is set.\n        this._current = this._original = newValue;\n        this._stateChanged.emit(undefined);\n    }\n    /**\n     * The current text change details.\n     */\n    get current() {\n        return this._current;\n    }\n    set current(newValue) {\n        const unchanged = this._current === newValue ||\n            (this._current && newValue && JSONExt.deepEqual(newValue, this._current));\n        if (unchanged) {\n            return;\n        }\n        const original = this._original;\n        // Original request must always be set before a text change. If it isn't\n        // the model fails silently.\n        if (!original) {\n            return;\n        }\n        const cursor = this._cursor;\n        // Cursor must always be set before a text change. This happens\n        // automatically in the completer handler, but since `current` is a public\n        // attribute, this defensive check is necessary.\n        if (!cursor) {\n            return;\n        }\n        const current = (this._current = newValue);\n        if (!current) {\n            this._stateChanged.emit(undefined);\n            return;\n        }\n        const originalLine = original.text.split('\\n')[original.line];\n        const currentLine = current.text.split('\\n')[current.line];\n        // If the text change means that the original start point has been preceded,\n        // then the completion is no longer valid and should be reset.\n        if (!this._subsetMatch && currentLine.length < originalLine.length) {\n            this.reset(true);\n            return;\n        }\n        const { start, end } = cursor;\n        // Clip the front of the current line.\n        let query = current.text.substring(start);\n        // Clip the back of the current line by calculating the end of the original.\n        const ending = original.text.substring(end);\n        query = query.substring(0, query.lastIndexOf(ending));\n        this._query = query;\n        this.processedItemsCache = null;\n        this._processedToOriginalItem = null;\n        this._queryChanged.emit({ newValue: this._query, origin: 'editorUpdate' });\n        this._stateChanged.emit(undefined);\n    }\n    /**\n     * The cursor details that the API has used to return matching options.\n     */\n    get cursor() {\n        return this._cursor;\n    }\n    set cursor(newValue) {\n        // Original request must always be set before a cursor change. If it isn't\n        // the model fails silently.\n        if (!this.original) {\n            return;\n        }\n        this._cursor = newValue;\n    }\n    /**\n     * The query against which items are filtered.\n     */\n    get query() {\n        return this._query;\n    }\n    set query(newValue) {\n        this._query = newValue;\n        this.processedItemsCache = null;\n        this._processedToOriginalItem = null;\n        this._queryChanged.emit({ newValue: this._query, origin: 'setter' });\n    }\n    /**\n     * A flag that is true when the model value was modified by a subset match.\n     */\n    get subsetMatch() {\n        return this._subsetMatch;\n    }\n    set subsetMatch(newValue) {\n        this._subsetMatch = newValue;\n    }\n    /**\n     * Get whether the model is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the model.\n     */\n    dispose() {\n        // Do nothing if already disposed.\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n    }\n    /**\n     * The list of visible items in the completer menu.\n     *\n     * #### Notes\n     * This is a read-only property.\n     * When overriding it is recommended to cache results in `processedItemsCache`\n     * property which will be automatically nullified when needed.\n     */\n    completionItems() {\n        if (!this.processedItemsCache) {\n            let query = this._query;\n            if (query) {\n                const markedItems = this._markup(query);\n                this.processedItemsCache = markedItems.map(it => it.processedItem);\n                this._processedToOriginalItem = new WeakMap(markedItems.map(it => [it.processedItem, it.originalItem]));\n            }\n            else {\n                this.processedItemsCache = this._completionItems.map(item => {\n                    return this._escapeItemLabel(item);\n                });\n                this._processedToOriginalItem = null;\n            }\n        }\n        return this.processedItemsCache;\n    }\n    /**\n     * Set the list of visible items in the completer menu, and append any\n     * new types to KNOWN_TYPES.\n     */\n    setCompletionItems(newValue) {\n        if (JSONExt.deepEqual(newValue, this._completionItems)) {\n            return;\n        }\n        this._completionItems = newValue;\n        this._orderedTypes = Private.findOrderedCompletionItemTypes(this._completionItems);\n        this.processedItemsCache = null;\n        this._processedToOriginalItem = null;\n        this._stateChanged.emit(undefined);\n    }\n    /**\n     * The map from identifiers (a.b) to types (function, module, class, instance,\n     * etc.).\n     *\n     * #### Notes\n     * A type map is currently only provided by the latest IPython kernel using\n     * the completer reply metadata field `_jupyter_types_experimental`. The\n     * values are completely up to the kernel.\n     *\n     */\n    typeMap() {\n        return this._typeMap;\n    }\n    /**\n     * An ordered list of all the known types in the typeMap.\n     *\n     * #### Notes\n     * To visually encode the types of the completer matches, we assemble an\n     * ordered list. This list begins with:\n     * ```\n     * ['function', 'instance', 'class', 'module', 'keyword']\n     * ```\n     * and then has any remaining types listed alphabetically. This will give\n     * reliable visual encoding for these known types, but allow kernels to\n     * provide new types.\n     */\n    orderedTypes() {\n        return this._orderedTypes;\n    }\n    /**\n     * Handle a cursor change.\n     */\n    handleCursorChange(change) {\n        // If there is no active completion, return.\n        if (!this._original) {\n            return;\n        }\n        const { column, line } = change;\n        const { current, original } = this;\n        if (!original) {\n            return;\n        }\n        // If a cursor change results in a the cursor being on a different line\n        // than the original request, cancel.\n        if (line !== original.line) {\n            this.reset(true);\n            return;\n        }\n        // If a cursor change results in the cursor being set to a position that\n        // precedes the original column, cancel.\n        if (column < original.column) {\n            this.reset(true);\n            return;\n        }\n        const { cursor } = this;\n        if (!cursor || !current) {\n            return;\n        }\n        // If a cursor change results in the cursor being set to a position beyond\n        // the end of the area that would be affected by completion, cancel.\n        const cursorDelta = cursor.end - cursor.start;\n        const originalLine = original.text.split('\\n')[original.line];\n        const currentLine = current.text.split('\\n')[current.line];\n        const inputDelta = currentLine.length - originalLine.length;\n        if (column > original.column + cursorDelta + inputDelta) {\n            this.reset(true);\n            return;\n        }\n    }\n    /**\n     * Handle a text change.\n     */\n    handleTextChange(change) {\n        const original = this._original;\n        // If there is no active completion, return.\n        if (!original) {\n            return;\n        }\n        const { text, column, line } = change;\n        const last = text.split('\\n')[line][column - 1];\n        // If last character entered is not whitespace or if the change column is\n        // greater than or equal to the original column, update completion.\n        if ((last && last.match(/\\S/)) || change.column >= original.column) {\n            this.current = change;\n            return;\n        }\n        // If final character is whitespace, reset completion.\n        this.reset(false);\n    }\n    /**\n     * Create a resolved patch between the original state and a patch string.\n     *\n     * @param patch - The patch string to apply to the original value.\n     *\n     * @returns A patched text change or undefined if original value did not exist.\n     */\n    createPatch(patch) {\n        const original = this._original;\n        const cursor = this._cursor;\n        const current = this._current;\n        if (!original || !cursor || !current) {\n            return undefined;\n        }\n        let { start, end } = cursor;\n        // Also include any filtering/additional-typing that has occurred\n        // since the completion request in the patched length.\n        end = end + (current.text.length - original.text.length);\n        return { start, end, value: patch };\n    }\n    /**\n     * Reset the state of the model and emit a state change signal.\n     *\n     * @param hard - Reset even if a subset match is in progress.\n     */\n    reset(hard = false) {\n        // When the completer detects a common subset prefix for all options,\n        // it updates the model and sets the model source to that value, triggering\n        // a reset. Unless explicitly a hard reset, this should be ignored.\n        if (!hard && this._subsetMatch) {\n            return;\n        }\n        this._reset();\n        this._stateChanged.emit(undefined);\n    }\n    /**\n     * Check if CompletionItem matches against query.\n     * Highlight matching prefix by adding <mark> tags.\n     */\n    _markup(query) {\n        var _a;\n        const items = this._completionItems;\n        let results = [];\n        for (const originalItem of items) {\n            // See if label matches query string\n            // With ICompletionItems, the label may include parameters,\n            // so we exclude them from the matcher.\n            // e.g. Given label `foo(b, a, r)` and query `bar`,\n            // don't count parameters, `b`, `a`, and `r` as matches.\n            const index = originalItem.label.indexOf('(');\n            const text = index > -1\n                ? originalItem.label.substring(0, index)\n                : originalItem.label;\n            const match = StringExt.matchSumOfSquares(escapeHTML(text), query);\n            // Filter non-matching items.\n            if (match) {\n                // Highlight label text if there's a match\n                let marked = StringExt.highlight(escapeHTML(originalItem.label), match.indices, Private.mark);\n                // Use `Object.assign` to evaluate getters.\n                const highlightedItem = Object.assign({}, originalItem);\n                highlightedItem.label = marked.join('');\n                highlightedItem.insertText =\n                    (_a = originalItem.insertText) !== null && _a !== void 0 ? _a : originalItem.label;\n                results.push({\n                    item: highlightedItem,\n                    score: match.score,\n                    originalItem\n                });\n            }\n        }\n        results.sort(Private.scoreCmp);\n        // Extract only the item (dropping the extra score attribute to not leak\n        // implementation details to JavaScript callers.\n        return results.map(match => ({\n            processedItem: match.item,\n            originalItem: match.originalItem\n        }));\n    }\n    /**\n     * Lazy load missing data of an item.\n     * @param indexOrValue - the item or its index\n     * @remarks\n     * Resolving item by index will be deprecated in\n     * the JupyterLab 5.0 and removed in JupyterLab 6.0.\n     *\n     * @return Return `undefined` if the completion item with `activeIndex` index can not be found.\n     *  Return a promise of `null` if another `resolveItem` is called. Otherwise return the\n     * promise of resolved completion item.\n     */\n    resolveItem(indexOrValue) {\n        let processedItem;\n        if (typeof indexOrValue === 'number') {\n            const completionItems = this.completionItems();\n            if (!completionItems || !completionItems[indexOrValue]) {\n                return undefined;\n            }\n            processedItem = completionItems[indexOrValue];\n        }\n        else {\n            processedItem = indexOrValue;\n        }\n        if (!processedItem) {\n            return undefined;\n        }\n        let originalItem;\n        if (this._processedToOriginalItem) {\n            originalItem = this._processedToOriginalItem.get(processedItem);\n        }\n        else {\n            originalItem = processedItem;\n        }\n        if (!originalItem) {\n            return undefined;\n        }\n        return this._resolveItemByValue(originalItem);\n    }\n    /**\n     * Lazy load missing data of a completion item.\n     *\n     * @param  completionItem - the item to be resolved\n     * @return See `resolveItem` method\n     */\n    _resolveItemByValue(completionItem) {\n        const current = ++this._resolvingItem;\n        let resolvedItem;\n        if (completionItem.resolve) {\n            let patch;\n            if (completionItem.insertText) {\n                patch = this.createPatch(completionItem.insertText);\n            }\n            resolvedItem = completionItem.resolve(patch);\n        }\n        else {\n            resolvedItem = Promise.resolve(completionItem);\n        }\n        return resolvedItem\n            .then(activeItem => {\n            // Escape the label it in place\n            this._escapeItemLabel(activeItem, true);\n            Object.keys(activeItem).forEach((key) => {\n                completionItem[key] = activeItem[key];\n            });\n            completionItem.resolve = undefined;\n            if (current !== this._resolvingItem) {\n                return Promise.resolve(null);\n            }\n            return activeItem;\n        })\n            .catch(e => {\n            console.error(e);\n            // Failed to resolve missing data, return the original item.\n            return Promise.resolve(completionItem);\n        });\n    }\n    /**\n     * Escape item label, storing the original label and adding `insertText` if needed.\n     * If escaping changes label creates a new item unless `inplace` is true.\n     */\n    _escapeItemLabel(item, inplace = false) {\n        var _a;\n        const escapedLabel = escapeHTML(item.label);\n        // If there was no insert text, use the original (unescaped) label.\n        if (escapedLabel !== item.label) {\n            const newItem = inplace ? item : Object.assign({}, item);\n            newItem.insertText = (_a = item.insertText) !== null && _a !== void 0 ? _a : item.label;\n            newItem.label = escapedLabel;\n            return newItem;\n        }\n        return item;\n    }\n    /**\n     * Reset the state of the model.\n     */\n    _reset() {\n        const hadQuery = this._query;\n        this._current = null;\n        this._cursor = null;\n        this._completionItems = [];\n        this._original = null;\n        this._query = '';\n        this.processedItemsCache = null;\n        this._processedToOriginalItem = null;\n        this._subsetMatch = false;\n        this._typeMap = {};\n        this._orderedTypes = [];\n        if (hadQuery) {\n            this._queryChanged.emit({ newValue: this._query, origin: 'reset' });\n        }\n    }\n}\n/**\n * A namespace for completer model private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The list of known type annotations of completer matches.\n     */\n    const KNOWN_TYPES = ['function', 'instance', 'class', 'module', 'keyword'];\n    /**\n     * The map of known type annotations of completer matches.\n     */\n    const KNOWN_MAP = KNOWN_TYPES.reduce((acc, type) => {\n        acc[type] = null;\n        return acc;\n    }, {});\n    /**\n     * Mark a highlighted chunk of text.\n     */\n    function mark(value) {\n        return `<mark>${value}</mark>`;\n    }\n    Private.mark = mark;\n    /**\n     * A sort comparison function for item match scores.\n     *\n     * #### Notes\n     * This orders the items first based on score (lower is better), then\n     * by locale order of the item text.\n     */\n    function scoreCmp(a, b) {\n        var _a, _b, _c;\n        const delta = a.score - b.score;\n        if (delta !== 0) {\n            return delta;\n        }\n        return (_c = (_a = a.item.insertText) === null || _a === void 0 ? void 0 : _a.localeCompare((_b = b.item.insertText) !== null && _b !== void 0 ? _b : '')) !== null && _c !== void 0 ? _c : 0;\n    }\n    Private.scoreCmp = scoreCmp;\n    /**\n     * Compute a reliably ordered list of types for ICompletionItems.\n     *\n     * #### Notes\n     * The resulting list always begins with the known types:\n     * ```\n     * ['function', 'instance', 'class', 'module', 'keyword']\n     * ```\n     * followed by other types in alphabetical order.\n     *\n     */\n    function findOrderedCompletionItemTypes(items) {\n        const newTypeSet = new Set();\n        items.forEach(item => {\n            if (item.type &&\n                !KNOWN_TYPES.includes(item.type) &&\n                !newTypeSet.has(item.type)) {\n                newTypeSet.add(item.type);\n            }\n        });\n        const newTypes = Array.from(newTypeSet);\n        newTypes.sort((a, b) => a.localeCompare(b));\n        return KNOWN_TYPES.concat(newTypes);\n    }\n    Private.findOrderedCompletionItemTypes = findOrderedCompletionItemTypes;\n    /**\n     * Compute a reliably ordered list of types.\n     *\n     * #### Notes\n     * The resulting list always begins with the known types:\n     * ```\n     * ['function', 'instance', 'class', 'module', 'keyword']\n     * ```\n     * followed by other types in alphabetical order.\n     */\n    function findOrderedTypes(typeMap) {\n        const filtered = Object.keys(typeMap)\n            .map(key => typeMap[key])\n            .filter((value) => !!value && !(value in KNOWN_MAP))\n            .sort((a, b) => a.localeCompare(b));\n        return KNOWN_TYPES.concat(filtered);\n    }\n    Private.findOrderedTypes = findOrderedTypes;\n})(Private || (Private = {}));\n//# sourceMappingURL=model.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Sanitizer } from '@jupyterlab/apputils';\nimport { renderText } from '@jupyterlab/rendermime';\nimport { HoverBox } from '@jupyterlab/ui-components';\nimport { ElementExt } from '@lumino/domutils';\nimport { Signal } from '@lumino/signaling';\nimport { Widget } from '@lumino/widgets';\n/**\n * The class name added to completer menu items.\n */\nconst ITEM_CLASS = 'jp-Completer-item';\n/**\n * The class name added to an active completer menu item.\n */\nconst ACTIVE_CLASS = 'jp-mod-active';\n/**\n * The class used by item listing which determines the height of the completer.\n */\nconst LIST_CLASS = 'jp-Completer-list';\n/**\n * Class of the documentation panel.\n */\nconst DOC_PANEL_CLASS = 'jp-Completer-docpanel';\n/**\n * A flag to indicate that event handlers are caught in the capture phase.\n */\nconst USE_CAPTURE = true;\n/**\n * The number of colors defined for the completer type annotations.\n * These are listed in completer/style/index.css#102-152.\n */\nconst N_COLORS = 10;\n/**\n * A widget that enables text completion.\n *\n * #### Notes\n * The completer is intended to be absolutely positioned on the\n * page and hover over any other content, so it should be attached directly\n * to `document.body`, or a node that is the full size of `document.body`.\n * Attaching it to other nodes may incorrectly locate the completer.\n */\nexport class Completer extends Widget {\n    /**\n     * Construct a text completer menu widget.\n     */\n    constructor(options) {\n        var _a, _b, _c, _d;\n        super({ node: document.createElement('div') });\n        this._activeIndex = 0;\n        this._editor = null;\n        this._model = null;\n        this._selected = new Signal(this);\n        this._visibilityChanged = new Signal(this);\n        this._indexChanged = new Signal(this);\n        this._lastSubsetMatch = '';\n        this._geometryLock = false;\n        /**\n         * Increasing this counter invalidates previous request to save geometry cache in animation callback.\n         */\n        this._geometryCounter = 0;\n        this._docPanelExpanded = false;\n        this._renderCounter = 0;\n        this.sanitizer = (_a = options.sanitizer) !== null && _a !== void 0 ? _a : new Sanitizer();\n        this._defaultRenderer = Completer.getDefaultRenderer(this.sanitizer);\n        this._renderer = (_b = options.renderer) !== null && _b !== void 0 ? _b : this._defaultRenderer;\n        this._docPanel = this._createDocPanelNode();\n        this.model = (_c = options.model) !== null && _c !== void 0 ? _c : null;\n        this.editor = (_d = options.editor) !== null && _d !== void 0 ? _d : null;\n        this.addClass('jp-Completer');\n        this.addClass('jp-ThemedContainer');\n        this._updateConstraints();\n    }\n    /**\n     * Cache style constraints from CSS.\n     */\n    _updateConstraints() {\n        const tempNode = document.createElement('div');\n        tempNode.classList.add(LIST_CLASS);\n        tempNode.style.visibility = 'hidden';\n        tempNode.style.overflowY = 'scroll';\n        document.body.appendChild(tempNode);\n        const computedStyle = window.getComputedStyle(tempNode);\n        this._maxHeight = parseInt(computedStyle.maxHeight, 10);\n        this._minHeight = parseInt(computedStyle.minHeight, 10);\n        this._scrollbarWidth = tempNode.offsetWidth - tempNode.clientWidth;\n        document.body.removeChild(tempNode);\n        const tempDocPanel = this._createDocPanelNode();\n        this._docPanelWidth = Private.measureSize(tempDocPanel, 'inline-block').width;\n    }\n    /**\n     * The active index.\n     */\n    get activeIndex() {\n        return this._activeIndex;\n    }\n    /**\n     * The editor used by the completion widget.\n     */\n    get editor() {\n        return this._editor;\n    }\n    set editor(newValue) {\n        this._editor = newValue;\n    }\n    /**\n     * A signal emitted when a selection is made from the completer menu.\n     */\n    get selected() {\n        return this._selected;\n    }\n    /**\n     * A signal emitted when the completer widget's visibility changes.\n     *\n     * #### Notes\n     * This signal is useful when there are multiple floating widgets that may\n     * contend with the same space and ought to be mutually exclusive.\n     */\n    get visibilityChanged() {\n        return this._visibilityChanged;\n    }\n    /**\n     * A signal emitted when the active index changes.\n     */\n    get indexChanged() {\n        return this._indexChanged;\n    }\n    /**\n     * The model used by the completer widget.\n     */\n    get model() {\n        return this._model;\n    }\n    set model(model) {\n        if ((!model && !this._model) || model === this._model) {\n            return;\n        }\n        if (this._model) {\n            this._model.stateChanged.disconnect(this.onModelStateChanged, this);\n            this._model.queryChanged.disconnect(this.onModelQueryChanged, this);\n        }\n        this._model = model;\n        if (this._model) {\n            this._model.stateChanged.connect(this.onModelStateChanged, this);\n            this._model.queryChanged.connect(this.onModelQueryChanged, this);\n        }\n    }\n    /**\n     * The completer used by the completer widget.\n     */\n    get renderer() {\n        return this._renderer;\n    }\n    set renderer(renderer) {\n        this._renderer = renderer;\n    }\n    /**\n     * Enable/disable the document panel.\n     */\n    set showDocsPanel(showDoc) {\n        this._showDoc = showDoc;\n    }\n    get showDocsPanel() {\n        return this._showDoc;\n    }\n    /**\n     * Dispose of the resources held by the completer widget.\n     */\n    dispose() {\n        this._sizeCache = undefined;\n        this._model = null;\n        super.dispose();\n    }\n    /**\n     * Handle the DOM events for the widget.\n     *\n     * @param event - The DOM event sent to the widget.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the dock panel's node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        if (this.isHidden || !this._editor) {\n            return;\n        }\n        switch (event.type) {\n            case 'keydown':\n                this._evtKeydown(event);\n                break;\n            case 'pointerdown':\n                this._evtPointerdown(event);\n                break;\n            case 'scroll':\n                this._evtScroll(event);\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Reset the widget.\n     */\n    reset() {\n        this._activeIndex = 0;\n        this._lastSubsetMatch = '';\n        if (this._model) {\n            this._model.reset(true);\n        }\n        this._docPanel.style.display = 'none';\n        // Clear size cache.\n        this._sizeCache = undefined;\n        this.node.scrollTop = 0;\n    }\n    /**\n     * Emit the selected signal for the current active item and reset.\n     */\n    selectActive() {\n        const active = this.node.querySelector(`.${ACTIVE_CLASS}`);\n        if (!active) {\n            this.reset();\n            return;\n        }\n        this._selected.emit(active.getAttribute('data-value'));\n        this.reset();\n    }\n    /**\n     * Handle `after-attach` messages for the widget.\n     */\n    onAfterAttach(msg) {\n        document.addEventListener('keydown', this, USE_CAPTURE);\n        document.addEventListener('pointerdown', this, USE_CAPTURE);\n        document.addEventListener('scroll', this, USE_CAPTURE);\n    }\n    /**\n     * Handle `before-detach` messages for the widget.\n     */\n    onBeforeDetach(msg) {\n        document.removeEventListener('keydown', this, USE_CAPTURE);\n        document.removeEventListener('pointerdown', this, USE_CAPTURE);\n        document.removeEventListener('scroll', this, USE_CAPTURE);\n    }\n    /**\n     * Handle model state changes.\n     */\n    onModelStateChanged() {\n        if (this.isAttached) {\n            this._activeIndex = 0;\n            this._indexChanged.emit(this._activeIndex);\n            this.update();\n        }\n    }\n    /**\n     * Handle model query changes.\n     */\n    onModelQueryChanged(model, queryChange) {\n        // If query was changed by the user typing, the filtered down items\n        // may no longer reach/exceed the maxHeight of the completer widget,\n        // hence size needs to be recalculated.\n        if (this._sizeCache && queryChange.origin === 'editorUpdate') {\n            const newItems = model.completionItems();\n            const oldItems = this._sizeCache.items;\n            // Only reset size if the number of items changed, or the longest item changed.\n            const oldWidest = oldItems[this._findWidestItemIndex(oldItems)];\n            const newWidest = newItems[this._findWidestItemIndex(newItems)];\n            const heuristic = this._getPreferredItemWidthHeuristic();\n            if (newItems.length !== this._sizeCache.items.length ||\n                heuristic(oldWidest) !== heuristic(newWidest)) {\n                this._sizeCache = undefined;\n            }\n        }\n    }\n    /**\n     * Handle `update-request` messages.\n     */\n    onUpdateRequest(msg) {\n        var _a;\n        const model = this._model;\n        if (!model) {\n            return;\n        }\n        // If this is the first time the current completer session has loaded,\n        // populate any initial subset match. This is being done before node\n        // gets rendered to avoid rendering it twice.\n        if (!model.query) {\n            this._populateSubset();\n        }\n        let items = model.completionItems();\n        // If there are no items, reset and bail.\n        if (!items.length) {\n            if (!this.isHidden) {\n                this.reset();\n                this.hide();\n                this._visibilityChanged.emit(undefined);\n            }\n            return;\n        }\n        // Update constraints before any DOM modifications\n        this._updateConstraints();\n        // Do not trigger any geometry updates from async code when in lock.\n        this._geometryLock = true;\n        const node = this._createCompleterNode(model, items);\n        let active = node.querySelectorAll(`.${ITEM_CLASS}`)[this._activeIndex];\n        active.classList.add(ACTIVE_CLASS);\n        const resolvedItem = (_a = this.model) === null || _a === void 0 ? void 0 : _a.resolveItem(items[this._activeIndex]);\n        // Add the documentation panel\n        if (this._showDoc) {\n            this._docPanel.innerText = '';\n            node.appendChild(this._docPanel);\n            this._docPanelExpanded = false;\n            this._docPanel.style.display = 'none';\n            this._updateDocPanel(resolvedItem, active);\n        }\n        if (this.isHidden) {\n            this.show();\n            this._setGeometry();\n            this._visibilityChanged.emit(undefined);\n        }\n        else {\n            this._setGeometry();\n        }\n        this._geometryLock = false;\n    }\n    /**\n     * Get cached dimensions of the completer box.\n     */\n    get sizeCache() {\n        if (!this._sizeCache) {\n            return;\n        }\n        return {\n            width: this._sizeCache.width + this._sizeCache.docPanelWidth,\n            height: Math.max(this._sizeCache.height, this._sizeCache.docPanelHeight)\n        };\n    }\n    _createDocPanelNode() {\n        const docPanel = document.createElement('div');\n        docPanel.className = DOC_PANEL_CLASS;\n        return docPanel;\n    }\n    _createCompleterNode(model, items) {\n        const current = ++this._renderCounter;\n        // Clear the node.\n        let node = this.node;\n        node.textContent = '';\n        // Compute an ordered list of all the types in the typeMap, this is computed\n        // once by the model each time new data arrives for efficiency.\n        let orderedTypes = model.orderedTypes();\n        // Populate the completer items.\n        let ul = document.createElement('ul');\n        ul.className = LIST_CLASS;\n        // Add first N items to fill the first \"page\" assuming that the completer\n        // would reach its maximum allowed height.\n        const first = this._renderer.createCompletionItemNode(items[0], orderedTypes);\n        const renderedItems = [first];\n        const firstItemSize = Private.measureSize(first, 'inline-grid');\n        const pageSize = Math.max(Math.ceil(this._maxHeight / firstItemSize.height), 5);\n        // We add one item in case if height heuristic is inaccurate.\n        const toRenderImmediately = Math.min(pageSize + 1, items.length);\n        const start = performance.now();\n        for (let i = 1; i < toRenderImmediately; i++) {\n            const li = this._renderer.createCompletionItemNode(items[i], orderedTypes);\n            renderedItems.push(li);\n        }\n        for (const li of renderedItems) {\n            ul.appendChild(li);\n        }\n        // Pre-calculate size:\n        //  - height will equal first element height times number of items,\n        //    or maximum allowed height if there are more items than fit on a page,\n        //  - width will be estimated from the widest item.\n        const widestItemIndex = this._findWidestItemIndex(items);\n        const widestItem = widestItemIndex < renderedItems.length\n            ? renderedItems[widestItemIndex]\n            : this._renderer.createCompletionItemNode(items[widestItemIndex], orderedTypes);\n        // The node needs to be cloned to avoid side-effect of detaching it.\n        const widestItemSize = Private.measureSize(widestItem.cloneNode(true), 'inline-grid');\n        this._sizeCache = {\n            height: Math.min(this._maxHeight, firstItemSize.height * items.length),\n            width: widestItemSize.width + this._scrollbarWidth,\n            items: items,\n            docPanelWidth: 0,\n            docPanelHeight: 0\n        };\n        if (toRenderImmediately < items.length) {\n            // Render remaining items on idle in subsequent animation frames,\n            // in chunks of size such that each frame would take about 16ms\n            // allowing for 4ms of overhead, but keep the chunks no smaller\n            // than 5 items at a time.\n            const timePerItem = (performance.now() - start) / toRenderImmediately;\n            const chunkSize = Math.max(5, Math.floor(12 / timePerItem));\n            let alreadyRendered = toRenderImmediately;\n            let previousChunkFinal = renderedItems[renderedItems.length - 1];\n            const renderChunk = () => {\n                if (alreadyRendered >= items.length) {\n                    return;\n                }\n                // Add a filler so that the list with partially rendered items has the total\n                // height equal to the (predicted) final height to avoid scrollbar jitter.\n                const predictedMissingHeight = firstItemSize.height * (items.length - alreadyRendered);\n                previousChunkFinal.style.marginBottom = `${predictedMissingHeight}px`;\n                requestAnimationFrame(() => {\n                    if (current != this._renderCounter) {\n                        // Bail if rendering afresh was requested in the meantime.\n                        return;\n                    }\n                    previousChunkFinal.style.marginBottom = '';\n                    const limit = Math.min(items.length, alreadyRendered + chunkSize);\n                    for (let i = alreadyRendered; i < limit; i++) {\n                        const li = this._renderer.createCompletionItemNode(items[i], orderedTypes);\n                        ul.appendChild(li);\n                        previousChunkFinal = li;\n                    }\n                    alreadyRendered = limit;\n                    renderChunk();\n                });\n            };\n            renderChunk();\n        }\n        node.appendChild(ul);\n        return node;\n    }\n    /**\n     * Use preferred heuristic to find the index of the widest item.\n     */\n    _findWidestItemIndex(items) {\n        const widthHeuristic = this._getPreferredItemWidthHeuristic();\n        const widthHeuristics = items.map(widthHeuristic);\n        return widthHeuristics.indexOf(Math.max(...widthHeuristics));\n    }\n    /**\n     * Get item width heuristic function from renderer if available,\n     * or the default one otherwise.\n     */\n    _getPreferredItemWidthHeuristic() {\n        return this._renderer.itemWidthHeuristic\n            ? this._renderer.itemWidthHeuristic.bind(this._renderer)\n            : this._defaultRenderer.itemWidthHeuristic.bind(this._defaultRenderer);\n    }\n    /**\n     * Cycle through the available completer items.\n     *\n     * #### Notes\n     * When the user cycles all the way `down` to the last index, subsequent\n     * `down` cycles will cycle to the first index. When the user cycles `up` to\n     * the first item, subsequent `up` cycles will cycle to the last index.\n     */\n    _cycle(direction) {\n        var _a, _b;\n        const items = this.node.querySelectorAll(`.${ITEM_CLASS}`);\n        const index = this._activeIndex;\n        const last = items.length - 1;\n        let active = this.node.querySelector(`.${ACTIVE_CLASS}`);\n        active.classList.remove(ACTIVE_CLASS);\n        switch (direction) {\n            case 'up':\n                this._activeIndex = index === 0 ? last : index - 1;\n                break;\n            case 'down':\n                this._activeIndex = index < last ? index + 1 : 0;\n                break;\n            case 'pageUp':\n            case 'pageDown': {\n                // Measure the number of items on a page and clamp to the list length.\n                const container = this.node.getBoundingClientRect();\n                const current = active.getBoundingClientRect();\n                const page = Math.floor(container.height / current.height);\n                const sign = direction === 'pageUp' ? -1 : 1;\n                this._activeIndex = Math.min(Math.max(0, index + sign * page), last);\n                break;\n            }\n        }\n        active = items[this._activeIndex];\n        active.classList.add(ACTIVE_CLASS);\n        let completionList = this.node.querySelector(`.${LIST_CLASS}`);\n        ElementExt.scrollIntoViewIfNeeded(completionList, active);\n        this._indexChanged.emit(this._activeIndex);\n        const visibleCompletionItems = (_a = this.model) === null || _a === void 0 ? void 0 : _a.completionItems();\n        const activeCompletionItem = visibleCompletionItems === null || visibleCompletionItems === void 0 ? void 0 : visibleCompletionItems[this._activeIndex];\n        if (activeCompletionItem) {\n            const resolvedItem = (_b = this.model) === null || _b === void 0 ? void 0 : _b.resolveItem(activeCompletionItem);\n            if (this._showDoc) {\n                this._updateDocPanel(resolvedItem, active);\n            }\n        }\n    }\n    /**\n     * Handle keydown events for the widget.\n     */\n    _evtKeydown(event) {\n        if (this.isHidden || !this._editor) {\n            return;\n        }\n        if (!this._editor.host.contains(event.target)) {\n            this.reset();\n            return;\n        }\n        switch (event.keyCode) {\n            case 9: {\n                // Tab key\n                event.preventDefault();\n                event.stopPropagation();\n                event.stopImmediatePropagation();\n                const model = this._model;\n                if (!model) {\n                    return;\n                }\n                // Autoinsert single completions on manual request (tab)\n                const items = model.completionItems();\n                if (items && items.length === 1) {\n                    this._selected.emit(items[0].insertText || items[0].label);\n                    this.reset();\n                    return;\n                }\n                const populated = this._populateSubset();\n                // If the common subset was found and set on `query`,\n                // or if there is a `query` in the initialization options,\n                // then emit a completion signal with that `query` (=subset match),\n                // but only if the query has actually changed.\n                // See: https://github.com/jupyterlab/jupyterlab/issues/10439#issuecomment-875189540\n                if (model.query && model.query !== this._lastSubsetMatch) {\n                    model.subsetMatch = true;\n                    this._selected.emit(model.query);\n                    model.subsetMatch = false;\n                    this._lastSubsetMatch = model.query;\n                }\n                // If the query changed, update rendering of the options.\n                if (populated) {\n                    this.update();\n                }\n                this._cycle(event.shiftKey ? 'up' : 'down');\n                return;\n            }\n            case 27: // Esc key\n                event.preventDefault();\n                event.stopPropagation();\n                event.stopImmediatePropagation();\n                this.reset();\n                return;\n            case 33: // PageUp\n            case 34: // PageDown\n            case 38: // Up arrow key\n            case 40: {\n                // Down arrow key\n                event.preventDefault();\n                event.stopPropagation();\n                event.stopImmediatePropagation();\n                const cycle = Private.keyCodeMap[event.keyCode];\n                this._cycle(cycle);\n                return;\n            }\n            default:\n                return;\n        }\n    }\n    /**\n     * Handle mousedown events for the widget.\n     */\n    _evtPointerdown(event) {\n        if (this.isHidden || !this._editor) {\n            return;\n        }\n        if (Private.nonstandardClick(event)) {\n            this.reset();\n            return;\n        }\n        let target = event.target;\n        while (target !== document.documentElement) {\n            // If the user has made a selection, emit its value and reset the widget.\n            if (target.classList.contains(ITEM_CLASS)) {\n                event.preventDefault();\n                event.stopPropagation();\n                event.stopImmediatePropagation();\n                this._selected.emit(target.getAttribute('data-value'));\n                this.reset();\n                return;\n            }\n            // If the mouse event happened anywhere else in the widget, bail.\n            if (target === this.node) {\n                event.preventDefault();\n                event.stopPropagation();\n                event.stopImmediatePropagation();\n                return;\n            }\n            target = target.parentElement;\n        }\n        this.reset();\n    }\n    /**\n     * Handle scroll events for the widget\n     */\n    _evtScroll(event) {\n        if (this.isHidden || !this._editor) {\n            return;\n        }\n        const { node } = this;\n        // All scrolls except scrolls in the actual hover box node may cause the\n        // referent editor that anchors the node to move, so the only scroll events\n        // that can safely be ignored are ones that happen inside the hovering node.\n        if (node.contains(event.target)) {\n            return;\n        }\n        // Set the geometry of the node asynchronously.\n        requestAnimationFrame(() => {\n            this._setGeometry();\n        });\n    }\n    /**\n     * Populate the completer up to the longest initial subset of items.\n     *\n     * @returns `true` if a subset match was found and populated.\n     */\n    _populateSubset() {\n        const { model } = this;\n        if (!model) {\n            return false;\n        }\n        const items = model.completionItems();\n        const subset = Private.commonSubset(items.map(item => item.insertText || item.label));\n        const { query } = model;\n        // If a common subset exists and it is not the current query, highlight it.\n        if (subset && subset !== query && subset.indexOf(query) === 0) {\n            model.query = subset;\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Set the visible dimensions of the widget.\n     */\n    _setGeometry() {\n        const { node } = this;\n        const model = this._model;\n        const editor = this._editor;\n        // This is an overly defensive test: `cursor` will always exist if\n        // `original` exists, except in contrived tests. But since it is possible\n        // to generate a runtime error, the check occurs here.\n        if (!editor || !model || !model.original || !model.cursor) {\n            return;\n        }\n        const start = model.cursor.start;\n        const position = editor.getPositionAt(start);\n        const anchor = editor.getCoordinateForPosition(position);\n        if (!anchor) {\n            return;\n        }\n        const style = window.getComputedStyle(node);\n        const borderLeft = parseInt(style.borderLeftWidth, 10) || 0;\n        const paddingLeft = parseInt(style.paddingLeft, 10) || 0;\n        // When the editor is attached to the main area, contain the completer hover box\n        // to the full area available (rather than to the editor itself); the available\n        // area excludes the toolbar, hence the first Widget child between MainAreaWidget\n        // and editor is preferred. The difference is negligible in File Editor, but\n        // substantial for Notebooks.\n        const host = editor.host.closest('.jp-MainAreaWidget > .lm-Widget') ||\n            editor.host;\n        const items = model.completionItems();\n        // Fast cache invalidation (only checks for length rather than length + width)\n        if (this._sizeCache && this._sizeCache.items.length !== items.length) {\n            this._sizeCache = undefined;\n        }\n        // Calculate the geometry of the completer.\n        HoverBox.setGeometry({\n            anchor,\n            host: host,\n            maxHeight: this._maxHeight,\n            minHeight: this._minHeight,\n            node: node,\n            size: this.sizeCache,\n            offset: { horizontal: borderLeft + paddingLeft },\n            privilege: 'below',\n            style: style,\n            outOfViewDisplay: {\n                top: 'stick-inside',\n                bottom: 'stick-inside',\n                left: 'stick-inside',\n                right: 'stick-outside'\n            }\n        });\n        const current = ++this._geometryCounter;\n        if (!this._sizeCache) {\n            // If size was not pre-calculated using heuristics, save the actual\n            // size into cache once rendered.\n            requestAnimationFrame(() => {\n                if (current != this._geometryCounter) {\n                    // Do not set size to cache if it may already be outdated.\n                    return;\n                }\n                let rect = node.getBoundingClientRect();\n                let panel = this._docPanel.getBoundingClientRect();\n                this._sizeCache = {\n                    width: rect.width - panel.width,\n                    height: rect.height,\n                    items: items,\n                    docPanelWidth: panel.width,\n                    docPanelHeight: panel.height\n                };\n            });\n        }\n    }\n    /**\n     * Update the display-state and contents of the documentation panel\n     */\n    _updateDocPanel(resolvedItem, activeNode) {\n        var _a, _b, _c;\n        let docPanel = this._docPanel;\n        if (!resolvedItem) {\n            this._toggleDocPanel(false);\n            return;\n        }\n        const loadingIndicator = (_c = (_b = (_a = this._renderer).createLoadingDocsIndicator) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : this._defaultRenderer.createLoadingDocsIndicator();\n        activeNode.appendChild(loadingIndicator);\n        resolvedItem\n            .then(activeItem => {\n            var _a, _b, _c;\n            if (!activeItem) {\n                return;\n            }\n            if (!docPanel) {\n                return;\n            }\n            if (activeItem.documentation) {\n                const node = (_c = (_b = (_a = this._renderer).createDocumentationNode) === null || _b === void 0 ? void 0 : _b.call(_a, activeItem)) !== null && _c !== void 0 ? _c : this._defaultRenderer.createDocumentationNode(activeItem);\n                docPanel.textContent = '';\n                docPanel.appendChild(node);\n                this._toggleDocPanel(true);\n            }\n            else {\n                this._toggleDocPanel(false);\n            }\n        })\n            .catch(e => console.error(e))\n            .finally(() => {\n            activeNode.removeChild(loadingIndicator);\n        });\n    }\n    _toggleDocPanel(show) {\n        let docPanel = this._docPanel;\n        if (show) {\n            if (this._docPanelExpanded) {\n                return;\n            }\n            docPanel.style.display = '';\n            this._docPanelExpanded = true;\n        }\n        else {\n            if (!this._docPanelExpanded) {\n                return;\n            }\n            docPanel.style.display = 'none';\n            this._docPanelExpanded = false;\n        }\n        const sizeCache = this._sizeCache;\n        if (sizeCache) {\n            sizeCache.docPanelHeight = show ? this._maxHeight : 0;\n            sizeCache.docPanelWidth = show ? this._docPanelWidth : 0;\n            if (!this._geometryLock) {\n                this._setGeometry();\n            }\n        }\n    }\n}\n(function (Completer) {\n    /**\n     * The default implementation of an `IRenderer`.\n     */\n    class Renderer {\n        constructor(options) {\n            this.sanitizer = (options === null || options === void 0 ? void 0 : options.sanitizer) || new Sanitizer();\n        }\n        /**\n         * Create an item node from an ICompletionItem for a text completer menu.\n         */\n        createCompletionItemNode(item, orderedTypes) {\n            let wrapperNode = this._createWrapperNode(item.insertText || item.label);\n            if (item.deprecated) {\n                wrapperNode.classList.add('jp-Completer-deprecated');\n            }\n            return this._constructNode(wrapperNode, this._createLabelNode(item.label), !!item.type, item.type, orderedTypes, item.icon);\n        }\n        /**\n         * Create a documentation node for documentation panel.\n         */\n        createDocumentationNode(activeItem) {\n            const host = document.createElement('div');\n            host.classList.add('jp-RenderedText');\n            const sanitizer = this.sanitizer;\n            const source = activeItem.documentation || '';\n            renderText({ host, sanitizer, source }).catch(console.error);\n            return host;\n        }\n        /**\n         * Get a heuristic for the width of an item.\n         */\n        itemWidthHeuristic(item) {\n            var _a;\n            // Get the label text without HTML markup (`<mark>` is the only markup\n            // that is allowed in processed items, everything else gets escaped).\n            const labelText = item.label.replace(/<(\\/)?mark>/g, '');\n            return labelText.length + (((_a = item.type) === null || _a === void 0 ? void 0 : _a.length) || 0);\n        }\n        /**\n         * Create a loading bar for the documentation panel.\n         */\n        createLoadingDocsIndicator() {\n            const loadingContainer = document.createElement('div');\n            loadingContainer.classList.add('jp-Completer-loading-bar-container');\n            const loadingBar = document.createElement('div');\n            loadingBar.classList.add('jp-Completer-loading-bar');\n            loadingContainer.append(loadingBar);\n            return loadingContainer;\n        }\n        /**\n         * Create base node with the value to be inserted.\n         */\n        _createWrapperNode(value) {\n            const li = document.createElement('li');\n            li.className = ITEM_CLASS;\n            // Set the raw, un-marked up value as a data attribute.\n            li.setAttribute('data-value', value);\n            return li;\n        }\n        /**\n         * Create match node to highlight potential prefix match within result.\n         */\n        _createLabelNode(result) {\n            const matchNode = document.createElement('code');\n            matchNode.className = 'jp-Completer-match';\n            // Use innerHTML because search results include <mark> tags.\n            matchNode.innerHTML = result;\n            return matchNode;\n        }\n        /**\n         * Attaches type and match nodes to base node.\n         */\n        _constructNode(li, matchNode, typesExist, type, orderedTypes, icon) {\n            // Add the icon or type monogram\n            if (icon) {\n                const iconNode = icon.element({\n                    className: 'jp-Completer-type jp-Completer-icon'\n                });\n                li.appendChild(iconNode);\n            }\n            else if (typesExist) {\n                const typeNode = document.createElement('span');\n                typeNode.textContent = (type[0] || '').toLowerCase();\n                const colorIndex = (orderedTypes.indexOf(type) % N_COLORS) + 1;\n                typeNode.className = 'jp-Completer-type jp-Completer-monogram';\n                typeNode.setAttribute(`data-color-index`, colorIndex.toString());\n                li.appendChild(typeNode);\n            }\n            else {\n                // Create empty span to ensure consistent list styling.\n                // Otherwise, in a list of two items,\n                // if one item has an icon, but the other has type,\n                // the icon grows out of its bounds.\n                const dummyNode = document.createElement('span');\n                dummyNode.className = 'jp-Completer-monogram';\n                li.appendChild(dummyNode);\n            }\n            li.appendChild(matchNode);\n            // If there is a type, add the type extension and title\n            if (typesExist) {\n                li.title = type;\n                const typeExtendedNode = document.createElement('code');\n                typeExtendedNode.className = 'jp-Completer-typeExtended';\n                typeExtendedNode.textContent = type.toLocaleLowerCase();\n                li.appendChild(typeExtendedNode);\n            }\n            else {\n                // If no type is present on the right,\n                // the highlighting of the completion item\n                // doesn't cover the entire row.\n                const dummyTypeExtendedNode = document.createElement('span');\n                dummyTypeExtendedNode.className = 'jp-Completer-typeExtended';\n                li.appendChild(dummyTypeExtendedNode);\n            }\n            return li;\n        }\n    }\n    Completer.Renderer = Renderer;\n    /**\n     * Default renderer\n     */\n    let _defaultRenderer;\n    /**\n     * The default `IRenderer` instance.\n     */\n    function getDefaultRenderer(sanitizer) {\n        if (!_defaultRenderer ||\n            (sanitizer && _defaultRenderer.sanitizer !== sanitizer)) {\n            _defaultRenderer = new Renderer({ sanitizer: sanitizer });\n        }\n        return _defaultRenderer;\n    }\n    Completer.getDefaultRenderer = getDefaultRenderer;\n})(Completer || (Completer = {}));\n/**\n * A namespace for completer widget private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Mapping from keyCodes to scrollTypes.\n     */\n    Private.keyCodeMap = {\n        38: 'up',\n        40: 'down',\n        33: 'pageUp',\n        34: 'pageDown'\n    };\n    /**\n     * Returns the common subset string that a list of strings shares.\n     */\n    function commonSubset(values) {\n        const len = values.length;\n        let subset = '';\n        if (len < 2) {\n            return subset;\n        }\n        const strlen = values[0].length;\n        for (let i = 0; i < strlen; i++) {\n            const ch = values[0][i];\n            for (let j = 1; j < len; j++) {\n                if (values[j][i] !== ch) {\n                    return subset;\n                }\n            }\n            subset += ch;\n        }\n        return subset;\n    }\n    Private.commonSubset = commonSubset;\n    /**\n     * Returns true for any modified click event (i.e., not a left-click).\n     */\n    function nonstandardClick(event) {\n        return (event.button !== 0 ||\n            event.altKey ||\n            event.ctrlKey ||\n            event.shiftKey ||\n            event.metaKey);\n    }\n    Private.nonstandardClick = nonstandardClick;\n    /**\n     * Measure size of provided HTML element without painting it.\n     *\n     * #### Notes\n     * The provided element has to be detached (not connected to DOM),\n     * or a side-effect of detaching it will occur.\n     */\n    function measureSize(element, display) {\n        if (element.isConnected) {\n            console.warn('Measuring connected elements with `measureSize` has side-effects');\n        }\n        element.style.visibility = 'hidden';\n        element.style.display = display;\n        document.body.appendChild(element);\n        const size = element.getBoundingClientRect();\n        document.body.removeChild(element);\n        element.removeAttribute('style');\n        return size;\n    }\n    Private.measureSize = measureSize;\n})(Private || (Private = {}));\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { CompletionHandler } from './handler';\nimport { InlineCompletionTriggerKind } from './tokens';\nimport { Signal } from '@lumino/signaling';\n/**\n * The reconciliator which is used to fetch and merge responses from multiple completion providers.\n */\nexport class ProviderReconciliator {\n    /**\n     * Creates an instance of ProviderReconciliator.\n     */\n    constructor(options) {\n        var _a, _b;\n        this._resolveFactory = (provider, el) => provider.resolve\n            ? (patch) => provider.resolve(el, this._context, patch)\n            : undefined;\n        /**\n         * Counter to reject current provider response if a new fetch request is created.\n         */\n        this._fetching = 0;\n        /**\n         * Counter to reject current inline provider response if a new `inlineFetch` request is created.\n         */\n        this._inlineFetching = 0;\n        this._providers = options.providers;\n        this._inlineProviders = (_a = options.inlineProviders) !== null && _a !== void 0 ? _a : [];\n        this._inlineProvidersSettings = (_b = options.inlineProvidersSettings) !== null && _b !== void 0 ? _b : {};\n        this._context = options.context;\n        this._timeout = options.timeout;\n    }\n    /**\n     * Check for the providers which are applicable with the current context\n     *\n     * @return  List of applicable providers\n     */\n    async applicableProviders() {\n        const isApplicablePromises = this._providers.map(p => p.isApplicable(this._context));\n        const applicableProviders = await Promise.all(isApplicablePromises);\n        return this._providers.filter((_, idx) => applicableProviders[idx]);\n    }\n    fetchInline(request, trigger, isMiddleOfLine) {\n        let promises = [];\n        const current = ++this._inlineFetching;\n        for (const provider of this._inlineProviders) {\n            const settings = this._inlineProvidersSettings[provider.identifier];\n            if (trigger !== InlineCompletionTriggerKind.Invoke &&\n                isMiddleOfLine &&\n                !settings.autoFillInMiddle) {\n                // Skip if FIM is disabled\n                continue;\n            }\n            let delay = 0;\n            if (trigger === InlineCompletionTriggerKind.Automatic) {\n                delay = settings.debouncerDelay;\n            }\n            const fetch = () => {\n                const promise = provider\n                    .fetch(request, { ...this._context, triggerKind: trigger })\n                    .then(completionList => {\n                    return {\n                        ...completionList,\n                        items: completionList.items.map(item => {\n                            const newItem = item;\n                            newItem.stream = new Signal(newItem);\n                            newItem.provider = provider;\n                            void this._stream(newItem, provider);\n                            return newItem;\n                        })\n                    };\n                });\n                const timeoutPromise = new Promise(resolve => {\n                    return setTimeout(() => resolve(null), delay + settings.timeout);\n                });\n                return Promise.race([promise, timeoutPromise]);\n            };\n            const promise = delay === 0\n                ? fetch()\n                : new Promise((resolve, reject) => {\n                    return setTimeout(() => {\n                        if (current != this._inlineFetching) {\n                            // User pressed another key or explicitly requested completions since.\n                            return reject(null);\n                        }\n                        else {\n                            return resolve(fetch());\n                        }\n                    }, delay);\n                });\n            // Wrap promise and return error in case of failure.\n            promises.push(promise.catch(p => p));\n        }\n        return promises;\n    }\n    async _stream(item, provider) {\n        if (!item.isIncomplete || !provider.stream || !item.token) {\n            return;\n        }\n        const streamed = item.stream;\n        const token = item.token;\n        item.token = undefined;\n        // Notify that streaming started.\n        item.streaming = true;\n        streamed.emit(CompletionHandler.StraemEvent.opened);\n        for await (const reply of provider.stream(token)) {\n            const updated = reply.response;\n            const addition = updated.insertText.substring(item.insertText.length);\n            // Stream an update.\n            item.insertText = updated.insertText;\n            item.lastStreamed = addition;\n            item.error = reply.response.error;\n            streamed.emit(CompletionHandler.StraemEvent.update);\n        }\n        // Notify that streaming is no longer in progress.\n        item.isIncomplete = false;\n        item.lastStreamed = undefined;\n        item.streaming = false;\n        streamed.emit(CompletionHandler.StraemEvent.closed);\n    }\n    /**\n     * Fetch response from multiple providers, If a provider can not return\n     * the response for a completer request before timeout,\n     * the result of this provider will be ignored.\n     *\n     * @param {CompletionHandler.IRequest} request - The completion request.\n     */\n    async fetch(request, trigger) {\n        const current = ++this._fetching;\n        let promises = [];\n        const applicableProviders = await this.applicableProviders();\n        for (const provider of applicableProviders) {\n            let promise;\n            promise = provider.fetch(request, this._context, trigger).then(reply => {\n                if (current !== this._fetching) {\n                    return Promise.reject(void 0);\n                }\n                const items = reply.items.map(el => ({\n                    ...el,\n                    resolve: this._resolveFactory(provider, el)\n                }));\n                return { ...reply, items };\n            });\n            const timeoutPromise = new Promise(resolve => {\n                return setTimeout(() => resolve(null), this._timeout);\n            });\n            promise = Promise.race([promise, timeoutPromise]);\n            // Wrap promise and return error in case of failure.\n            promises.push(promise.catch(p => p));\n        }\n        // TODO: maybe use `Promise.allSettled` once library is at es2020 instead of adding a catch.\n        const combinedPromise = Promise.all(promises);\n        return this._mergeCompletions(combinedPromise);\n    }\n    /**\n     * Check if completer should make request to fetch completion responses\n     * on user typing. If the provider with highest rank does not have\n     * `shouldShowContinuousHint` method, a default one will be used.\n     *\n     * @param completerIsVisible - The visible status of completer widget.\n     * @param changed - CodeMirror changed argument.\n     */\n    async shouldShowContinuousHint(completerIsVisible, changed) {\n        const applicableProviders = await this.applicableProviders();\n        if (applicableProviders.length === 0) {\n            return false;\n        }\n        if (applicableProviders[0].shouldShowContinuousHint) {\n            return applicableProviders[0].shouldShowContinuousHint(completerIsVisible, changed, this._context);\n        }\n        return this._defaultShouldShowContinuousHint(completerIsVisible, changed);\n    }\n    _alignPrefixes(replies, minStart, maxStart) {\n        if (minStart != maxStart) {\n            const editor = this._context.editor;\n            if (!editor) {\n                return replies;\n            }\n            const cursor = editor.getCursorPosition();\n            const line = editor.getLine(cursor.line);\n            if (!line) {\n                return replies;\n            }\n            const lineOffset = editor.getOffsetAt({ line: cursor.line, column: 0 });\n            return replies.map(reply => {\n                const prefixStart = Math.max(reply.start - lineOffset, 0);\n                const prefixEnd = Math.max(maxStart - lineOffset, 0);\n                // No prefix to strip, return as-is.\n                if (prefixStart == prefixEnd) {\n                    return reply;\n                }\n                const prefix = line.substring(prefixStart, prefixEnd);\n                return {\n                    ...reply,\n                    items: reply.items.map(item => {\n                        let insertText = item.insertText || item.label;\n                        item.insertText = insertText.startsWith(prefix)\n                            ? insertText.slice(prefix.length)\n                            : insertText;\n                        return item;\n                    })\n                };\n            });\n        }\n        return replies;\n    }\n    async _mergeCompletions(promises) {\n        let replies = (await promises).filter(reply => {\n            // Ignore it errors out.\n            if (!reply || reply instanceof Error) {\n                return false;\n            }\n            // Ignore if no matches.\n            if (!reply.items.length) {\n                return false;\n            }\n            // Otherwise keep.\n            return true;\n        });\n        // Fast path for a single reply or no replies.\n        if (replies.length == 0) {\n            return null;\n        }\n        else if (replies.length == 1) {\n            return replies[0];\n        }\n        const minEnd = Math.min(...replies.map(reply => reply.end));\n        // If any of the replies uses a wider range, we need to align them\n        // so that all responses use the same range.\n        const starts = replies.map(reply => reply.start);\n        const minStart = Math.min(...starts);\n        const maxStart = Math.max(...starts);\n        replies = this._alignPrefixes(replies, minStart, maxStart);\n        const insertTextSet = new Set();\n        const mergedItems = new Array();\n        for (const reply of replies) {\n            reply.items.forEach(item => {\n                // IPython returns 'import' and 'import '; while the latter is more useful,\n                // user should not see two suggestions with identical labels and nearly-identical\n                // behaviour as they could not distinguish the two either way.\n                let text = (item.insertText || item.label).trim();\n                if (insertTextSet.has(text)) {\n                    return;\n                }\n                insertTextSet.add(text);\n                mergedItems.push(item);\n            });\n        }\n        return {\n            start: maxStart,\n            end: minEnd,\n            items: mergedItems\n        };\n    }\n    _defaultShouldShowContinuousHint(completerIsVisible, changed) {\n        return (!completerIsVisible &&\n            (changed.sourceChange == null ||\n                changed.sourceChange.some(delta => delta.insert != null && delta.insert.length > 0)));\n    }\n}\n//# sourceMappingURL=reconciliator.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nexport const CONTEXT_PROVIDER_ID = 'CompletionProvider:context';\n/**\n * A context connector for completion handlers.\n */\nexport class ContextCompleterProvider {\n    constructor() {\n        this.identifier = CONTEXT_PROVIDER_ID;\n        this.rank = 500;\n        this.renderer = null;\n    }\n    /**\n     * The context completion provider is applicable on all cases.\n     * @param context - additional information about context of completion request\n     */\n    async isApplicable(context) {\n        return true;\n    }\n    /**\n     * Fetch completion requests.\n     *\n     * @param request - The completion request text and details.\n     */\n    fetch(request, context) {\n        const editor = context.editor;\n        if (!editor) {\n            return Promise.reject('No editor');\n        }\n        return new Promise(resolve => {\n            resolve(Private.contextHint(editor));\n        });\n    }\n}\n/**\n * A namespace for Private functionality.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Get a list of completion hints from a tokenization\n     * of the editor.\n     */\n    function contextHint(editor) {\n        // Find the token at the cursor\n        const token = editor.getTokenAtCursor();\n        // Get the list of matching tokens.\n        const tokenList = getCompletionTokens(token, editor);\n        // Only choose the ones that have a non-empty type\n        // field, which are likely to be of interest.\n        const completionList = tokenList.filter(t => t.type).map(t => t.value);\n        // Remove duplicate completions from the list\n        const matches = new Set(completionList);\n        const items = new Array();\n        matches.forEach(label => items.push({ label }));\n        return {\n            start: token.offset,\n            end: token.offset + token.value.length,\n            items\n        };\n    }\n    Private.contextHint = contextHint;\n    /**\n     * Get a list of tokens that match the completion request,\n     * but are not identical to the completion request.\n     */\n    function getCompletionTokens(token, editor) {\n        const candidates = editor.getTokens();\n        // Only get the tokens that have a common start, but\n        // are not identical.\n        return candidates.filter(t => t.value.indexOf(token.value) === 0 && t.value !== token.value);\n    }\n})(Private || (Private = {}));\n//# sourceMappingURL=contextprovider.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Text } from '@jupyterlab/coreutils';\nexport const KERNEL_PROVIDER_ID = 'CompletionProvider:kernel';\n/**\n * A kernel connector for completion handlers.\n */\nexport class KernelCompleterProvider {\n    constructor() {\n        this.identifier = KERNEL_PROVIDER_ID;\n        this.rank = 550;\n        this.renderer = null;\n    }\n    /**\n     * The kernel completion provider is applicable only if the kernel is available.\n     * @param context - additional information about context of completion request\n     */\n    async isApplicable(context) {\n        var _a;\n        const hasKernel = (_a = context.session) === null || _a === void 0 ? void 0 : _a.kernel;\n        if (!hasKernel) {\n            return false;\n        }\n        return true;\n    }\n    /**\n     * Fetch completion requests.\n     *\n     * @param request - The completion request text and details.\n     */\n    async fetch(request, context) {\n        var _a;\n        const kernel = (_a = context.session) === null || _a === void 0 ? void 0 : _a.kernel;\n        if (!kernel) {\n            throw new Error('No kernel for completion request.');\n        }\n        const contents = {\n            code: request.text,\n            cursor_pos: request.offset\n        };\n        const msg = await kernel.requestComplete(contents);\n        const response = msg.content;\n        if (response.status !== 'ok') {\n            throw new Error('Completion fetch failed to return successfully.');\n        }\n        const items = new Array();\n        const metadata = response.metadata._jupyter_types_experimental;\n        response.matches.forEach((label, index) => {\n            if (metadata && metadata[index]) {\n                items.push({\n                    label,\n                    type: metadata[index].type,\n                    insertText: metadata[index].text\n                });\n            }\n            else {\n                items.push({ label });\n            }\n        });\n        return {\n            start: response.cursor_start,\n            end: response.cursor_end,\n            items\n        };\n    }\n    /**\n     * Kernel provider will use the inspect request to lazy-load the content\n     * for document panel.\n     */\n    async resolve(item, context, patch) {\n        const { editor, session } = context;\n        if (session && editor) {\n            let code = editor.model.sharedModel.getSource();\n            const position = editor.getCursorPosition();\n            let offset = Text.jsIndexToCharIndex(editor.getOffsetAt(position), code);\n            const kernel = session.kernel;\n            if (!code || !kernel) {\n                return Promise.resolve(item);\n            }\n            if (patch) {\n                const { start, value } = patch;\n                code = code.substring(0, start) + value;\n                offset = offset + value.length;\n            }\n            const contents = {\n                code,\n                cursor_pos: offset,\n                detail_level: 0\n            };\n            const msg = await kernel.requestInspect(contents);\n            const value = msg.content;\n            if (value.status !== 'ok' || !value.found) {\n                return item;\n            }\n            item.documentation = value.data['text/plain'];\n            return item;\n        }\n        return item;\n    }\n    /**\n     * Kernel provider will activate the completer in continuous mode after\n     * the `.` character.\n     */\n    shouldShowContinuousHint(visible, changed) {\n        const sourceChange = changed.sourceChange;\n        if (sourceChange == null) {\n            return true;\n        }\n        if (sourceChange.some(delta => delta.delete != null)) {\n            return false;\n        }\n        return sourceChange.some(delta => delta.insert != null &&\n            (delta.insert === '.' || (!visible && delta.insert.trim().length > 0)));\n    }\n}\n//# sourceMappingURL=kernelprovider.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Decoration, EditorView, WidgetType } from '@codemirror/view';\nimport { StateEffect, StateField } from '@codemirror/state';\nconst TRANSIENT_LINE_SPACER_CLASS = 'jp-GhostText-lineSpacer';\nconst TRANSIENT_LETTER_SPACER_CLASS = 'jp-GhostText-letterSpacer';\nconst GHOST_TEXT_CLASS = 'jp-GhostText';\nconst STREAMED_TOKEN_CLASS = 'jp-GhostText-streamedToken';\nconst STREAMING_INDICATOR_CLASS = 'jp-GhostText-streamingIndicator';\nconst ERROR_INDICATOR_CLASS = 'jp-GhostText-errorIndicator';\nconst HIDDEN_LINES_CLASS = 'jp-GhostText-hiddenLines';\nexport class GhostTextManager {\n    constructor(options) {\n        this.options = options;\n        // no-op\n    }\n    /**\n     * Place ghost text in an editor.\n     */\n    placeGhost(view, text) {\n        const effects = [Private.addMark.of(text)];\n        if (!view.state.field(Private.markField, false)) {\n            effects.push(StateEffect.appendConfig.of([Private.markField]));\n            effects.push(StateEffect.appendConfig.of([\n                EditorView.domEventHandlers({\n                    blur: (event) => {\n                        if (this.options.onBlur(event) === false) {\n                            return true;\n                        }\n                        const effects = [\n                            Private.removeMark.of(null)\n                        ];\n                        // Only execute it after editor update has completed.\n                        setTimeout(() => {\n                            view.dispatch({ effects });\n                        }, 0);\n                    }\n                })\n            ]));\n        }\n        view.dispatch({ effects });\n    }\n    /**\n     * Clear all ghost texts from the editor.\n     */\n    clearGhosts(view) {\n        const effects = [Private.removeMark.of(null)];\n        view.dispatch({ effects });\n    }\n}\n/**\n * Typing animation.\n */\nGhostTextManager.streamingAnimation = 'uncover';\n/**\n * Delay for removal of line spacer.\n */\nGhostTextManager.spacerRemovalDelay = 700;\n/**\n * Duration for line spacer removal.\n */\nGhostTextManager.spacerRemovalDuration = 300;\nclass GhostTextWidget extends WidgetType {\n    constructor(options) {\n        super();\n        this.options = options;\n        this.isSpacer = false;\n        this._clearErrorTimeout = null;\n    }\n    eq(other) {\n        return (other.content == this.content &&\n            other.options.streaming === this.options.streaming &&\n            other.options.error === this.options.error);\n    }\n    get lineBreaks() {\n        return (this.content.match(/\\n/g) || '').length;\n    }\n    updateDOM(dom, _view) {\n        this._updateDOM(dom);\n        return true;\n    }\n    get content() {\n        return this.options.content;\n    }\n    toDOM() {\n        let wrap = document.createElement('span');\n        if (this.options.onPointerOver) {\n            wrap.addEventListener('pointerover', this.options.onPointerOver);\n        }\n        if (this.options.onPointerLeave) {\n            wrap.addEventListener('pointerleave', this.options.onPointerLeave);\n        }\n        wrap.classList.add(GHOST_TEXT_CLASS);\n        wrap.dataset.animation = GhostTextManager.streamingAnimation;\n        wrap.dataset.providedBy = this.options.providerId;\n        this._updateDOM(wrap);\n        return wrap;\n    }\n    _removeErrorAnimation(dom) {\n        const elementsToRemove = dom.querySelectorAll(`.${ERROR_INDICATOR_CLASS}`);\n        elementsToRemove.forEach(element => {\n            element.remove();\n        });\n    }\n    /**\n     * Mount the error animation DOM and remove the streaming indicator if any.\n     */\n    _mountErrorAnimation(dom) {\n        const errorIndicator = document.createElement('span');\n        errorIndicator.className = ERROR_INDICATOR_CLASS;\n        const error = this.options.error;\n        if (error === null || error === void 0 ? void 0 : error.message) {\n            errorIndicator.title = error === null || error === void 0 ? void 0 : error.message;\n        }\n        // Delete stream and previous error animation\n        const elementsToRemove = dom.querySelectorAll(`.${STREAMING_INDICATOR_CLASS}, .${ERROR_INDICATOR_CLASS}`);\n        elementsToRemove.forEach(element => {\n            element.remove();\n        });\n        dom.appendChild(errorIndicator);\n    }\n    _updateDOM(dom) {\n        var _a, _b;\n        if (this.options.error) {\n            this._mountErrorAnimation(dom);\n            this._clearErrorTimeout = setTimeout(() => {\n                this._removeErrorAnimation(dom);\n                this._clearErrorTimeout = null;\n            }, 5000);\n            return;\n        }\n        // If not in an error anymore, clear the error indicator\n        if (this._clearErrorTimeout !== null) {\n            clearTimeout(this._clearErrorTimeout);\n            this._removeErrorAnimation(dom);\n            this._clearErrorTimeout = null;\n        }\n        let content = this.content;\n        let hiddenContent = '';\n        let addition = this.options.addedPart;\n        if (addition) {\n            if (addition.startsWith('\\n')) {\n                // Show the new line straight away to ensure proper positioning.\n                addition = addition.substring(1);\n            }\n            content = content.substring(0, content.length - addition.length);\n        }\n        if (this.options.maxLines) {\n            // Split into content to show immediately and the hidden part\n            const lines = content.split('\\n');\n            content = lines.slice(0, this.options.maxLines).join('\\n');\n            hiddenContent = lines.slice(this.options.maxLines).join('\\n');\n        }\n        const minLines = Math.min((_a = this.options.minLines) !== null && _a !== void 0 ? _a : 0, (_b = this.options.maxLines) !== null && _b !== void 0 ? _b : Infinity);\n        const linesToAdd = Math.max(0, minLines - content.split('\\n').length + 1);\n        const placeHolderLines = new Array(linesToAdd).fill('').join('\\n');\n        if (this.isSpacer) {\n            dom.innerText = content + placeHolderLines;\n            return;\n        }\n        dom.innerText = content;\n        let streamedTokenHost = dom;\n        if (hiddenContent.length > 0) {\n            const hiddenWrapper = document.createElement('span');\n            hiddenWrapper.className = 'jp-GhostText-hiddenWrapper';\n            dom.appendChild(hiddenWrapper);\n            const expandOnHover = document.createElement('span');\n            expandOnHover.className = 'jp-GhostText-expandHidden';\n            expandOnHover.innerText = '⇓';\n            const hiddenPart = document.createElement('span');\n            hiddenWrapper.appendChild(expandOnHover);\n            hiddenPart.className = HIDDEN_LINES_CLASS;\n            hiddenPart.innerText = '\\n' + hiddenContent;\n            hiddenWrapper.appendChild(hiddenPart);\n            streamedTokenHost = hiddenPart;\n        }\n        if (addition) {\n            const addedPart = document.createElement('span');\n            addedPart.className = STREAMED_TOKEN_CLASS;\n            addedPart.innerText = addition;\n            streamedTokenHost.appendChild(addedPart);\n        }\n        // Add \"streaming-in-progress\" indicator\n        if (this.options.streaming) {\n            const streamingIndicator = document.createElement('span');\n            streamingIndicator.className = STREAMING_INDICATOR_CLASS;\n            streamedTokenHost.appendChild(streamingIndicator);\n        }\n        if (placeHolderLines.length > 0) {\n            const placeholderLinesNode = document.createTextNode(placeHolderLines);\n            streamedTokenHost.appendChild(placeholderLinesNode);\n        }\n    }\n    destroy(dom) {\n        if (this.options.onPointerOver) {\n            dom.removeEventListener('pointerover', this.options.onPointerOver);\n        }\n        if (this.options.onPointerLeave) {\n            dom.removeEventListener('pointerleave', this.options.onPointerLeave);\n        }\n        super.destroy(dom);\n    }\n}\n/**\n * Spacers are used to reduce height jitter in the transition between multi-line inline suggestions.\n * In particular, when user removes a letter they will often get a new suggestion in split-second,\n * but without spacer they would see the editor collapse in height and then elongate again.\n */\nclass TransientSpacerWidget extends GhostTextWidget {\n    constructor() {\n        super(...arguments);\n        this.isSpacer = true;\n    }\n}\nclass TransientLineSpacerWidget extends TransientSpacerWidget {\n    toDOM() {\n        const wrap = super.toDOM();\n        wrap.classList.add(TRANSIENT_LINE_SPACER_CLASS);\n        wrap.style.animationDelay = GhostTextManager.spacerRemovalDelay + 'ms';\n        wrap.style.animationDuration =\n            GhostTextManager.spacerRemovalDuration + 'ms';\n        return wrap;\n    }\n}\nclass TransientLetterSpacerWidget extends TransientSpacerWidget {\n    get content() {\n        return this.options.content[0];\n    }\n    toDOM() {\n        const wrap = super.toDOM();\n        wrap.classList.add(TRANSIENT_LETTER_SPACER_CLASS);\n        return wrap;\n    }\n}\nvar Private;\n(function (Private) {\n    let GhostAction;\n    (function (GhostAction) {\n        GhostAction[GhostAction[\"Set\"] = 0] = \"Set\";\n        GhostAction[GhostAction[\"Remove\"] = 1] = \"Remove\";\n        GhostAction[GhostAction[\"FilterAndUpdate\"] = 2] = \"FilterAndUpdate\";\n    })(GhostAction || (GhostAction = {}));\n    Private.addMark = StateEffect.define({\n        map: (old, change) => ({\n            ...old,\n            from: change.mapPos(old.from),\n            to: change.mapPos(old.from + old.content.length)\n        })\n    });\n    Private.removeMark = StateEffect.define();\n    /**\n     * Decide what should be done for transaction effects.\n     */\n    function chooseAction(tr) {\n        // This function can short-circuit because at any time there is no more than one ghost text.\n        for (let e of tr.effects) {\n            if (e.is(Private.addMark)) {\n                return {\n                    action: GhostAction.Set,\n                    spec: e.value\n                };\n            }\n            else if (e.is(Private.removeMark)) {\n                return {\n                    action: GhostAction.Remove\n                };\n            }\n        }\n        if (tr.docChanged || tr.selection) {\n            return {\n                action: GhostAction.FilterAndUpdate\n            };\n        }\n        return null;\n    }\n    function createWidget(spec, tr) {\n        const ghost = Decoration.widget({\n            widget: new GhostTextWidget(spec),\n            side: 1,\n            ghostSpec: spec\n        });\n        // Widget decorations can only have zero-length ranges\n        return ghost.range(Math.min(spec.from, tr.newDoc.length), Math.min(spec.from, tr.newDoc.length));\n    }\n    function createSpacer(spec, tr, timeout = 1000) {\n        // no spacer needed if content is only one character long.\n        if (spec.content.length < 2) {\n            return [];\n        }\n        const timeoutInfo = {\n            elapsed: false\n        };\n        setTimeout(() => {\n            timeoutInfo.elapsed = true;\n        }, timeout);\n        const characterSpacer = Decoration.widget({\n            widget: new TransientLetterSpacerWidget(spec),\n            side: 1,\n            timeoutInfo\n        });\n        const lineSpacer = Decoration.widget({\n            widget: new TransientLineSpacerWidget(spec),\n            side: 1,\n            timeoutInfo\n        });\n        // We add two different spacers: one to temporarily preserve height of as many lines\n        // as there were in the content, and the other (character spacer) to ensure that\n        // cursor is not malformed by the presence of the line spacer.\n        return [\n            characterSpacer.range(Math.min(spec.from, tr.newDoc.length), Math.min(spec.from, tr.newDoc.length)),\n            lineSpacer.range(Math.min(spec.from, tr.newDoc.length), Math.min(spec.from, tr.newDoc.length))\n        ];\n    }\n    Private.markField = StateField.define({\n        create() {\n            return Decoration.none;\n        },\n        update(marks, tr) {\n            const data = chooseAction(tr);\n            // remove spacers after timeout\n            marks = marks.update({\n                filter: (_from, _to, value) => {\n                    if (value.spec.widget instanceof TransientSpacerWidget) {\n                        return !value.spec.timeoutInfo.elapsed;\n                    }\n                    return true;\n                }\n            });\n            if (!data) {\n                return marks.map(tr.changes);\n            }\n            switch (data.action) {\n                case GhostAction.Set: {\n                    const spec = data.spec;\n                    const newWidget = createWidget(spec, tr);\n                    return marks.update({\n                        add: [newWidget],\n                        filter: (_from, _to, value) => value === newWidget.value\n                    });\n                }\n                case GhostAction.Remove:\n                    return marks.update({\n                        filter: () => false\n                    });\n                case GhostAction.FilterAndUpdate: {\n                    let cursor = marks.iter();\n                    // skip over spacer if any\n                    while (cursor.value &&\n                        cursor.value.spec.widget instanceof TransientSpacerWidget) {\n                        cursor.next();\n                    }\n                    if (!cursor.value) {\n                        // short-circuit if no widgets are present, or if only spacer was present\n                        return marks.map(tr.changes);\n                    }\n                    const originalSpec = cursor.value.spec.ghostSpec;\n                    const spec = { ...originalSpec };\n                    let shouldRemoveGhost = false;\n                    tr.changes.iterChanges((fromA, toA, fromB, toB, inserted) => {\n                        if (shouldRemoveGhost) {\n                            return;\n                        }\n                        if (fromA === toA && fromB !== toB) {\n                            // text was inserted without modifying old text\n                            for (let lineNumber = 0; lineNumber < inserted.lines; lineNumber++) {\n                                const lineContent = inserted.lineAt(lineNumber).text;\n                                const line = lineNumber > 0 ? '\\n' + lineContent : lineContent;\n                                if (spec.content.startsWith(line)) {\n                                    spec.content = spec.content.slice(line.length);\n                                    spec.from += line.length;\n                                }\n                                else {\n                                    shouldRemoveGhost = true;\n                                    break;\n                                }\n                            }\n                        }\n                        else if (fromB === toB && fromA !== toA) {\n                            // text was removed\n                            shouldRemoveGhost = true;\n                        }\n                        else {\n                            // text was replaced\n                            shouldRemoveGhost = true;\n                            // TODO: could check if the previous spec matches\n                        }\n                    });\n                    // removing multi-line widget would cause the code cell to jump; instead\n                    // we add a temporary spacer widget(s) which will be removed in a future update\n                    // allowing a slight delay between getting a new suggestion and reducing cell height\n                    const newWidgets = shouldRemoveGhost\n                        ? createSpacer(originalSpec, tr)\n                        : [createWidget(spec, tr)];\n                    const newValues = newWidgets.map(widget => widget.value);\n                    marks = marks.update({\n                        add: newWidgets,\n                        filter: (_from, _to, value) => newValues.includes(value)\n                    });\n                    if (shouldRemoveGhost) {\n                        // TODO this can error out when deleting text, ideally a clean solution would be used.\n                        try {\n                            marks = marks.map(tr.changes);\n                        }\n                        catch (e) {\n                            console.warn(e);\n                            return Decoration.none;\n                        }\n                    }\n                    return marks;\n                }\n            }\n        },\n        provide: f => EditorView.decorations.from(f)\n    });\n})(Private || (Private = {}));\n//# sourceMappingURL=ghost.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { HoverBox, kernelIcon, Toolbar } from '@jupyterlab/ui-components';\nimport { Signal } from '@lumino/signaling';\nimport { PanelLayout, Widget } from '@lumino/widgets';\nimport { GhostTextManager } from './ghost';\nconst INLINE_COMPLETER_CLASS = 'jp-InlineCompleter';\nconst INLINE_COMPLETER_ACTIVE_CLASS = 'jp-mod-inline-completer-active';\nconst HOVER_CLASS = 'jp-InlineCompleter-hover';\nconst PROGRESS_BAR_CLASS = 'jp-InlineCompleter-progressBar';\n/**\n * Widget enabling user to choose among inline completions,\n * typically by pressing next/previous buttons, and showing\n * additional metadata about active completion, such as\n * inline completion provider name.\n */\nexport class InlineCompleter extends Widget {\n    constructor(options) {\n        var _a, _b;\n        super({ node: document.createElement('div') });\n        this._clearHoverTimeout = null;\n        this._current = 0;\n        this._editor = null;\n        this._lastItem = null;\n        this._model = null;\n        this._providerWidget = new Widget();\n        this._showShortcuts = InlineCompleter.defaultSettings.showShortcuts;\n        this._showWidget = InlineCompleter.defaultSettings.showWidget;\n        this._suggestionsCounter = new Widget();\n        this._toolbar = new Toolbar();\n        this.model = (_a = options.model) !== null && _a !== void 0 ? _a : null;\n        this.editor = (_b = options.editor) !== null && _b !== void 0 ? _b : null;\n        this.addClass(INLINE_COMPLETER_CLASS);\n        this.addClass('jp-ThemedContainer');\n        this._ghostManager = new GhostTextManager({\n            onBlur: this._onEditorBlur.bind(this)\n        });\n        this._trans = options.trans;\n        const layout = (this.layout = new PanelLayout());\n        layout.addWidget(this._suggestionsCounter);\n        layout.addWidget(this.toolbar);\n        layout.addWidget(this._providerWidget);\n        this._progressBar = document.createElement('div');\n        this._progressBar.className = PROGRESS_BAR_CLASS;\n        this.node.appendChild(this._progressBar);\n        this._updateShortcutsVisibility();\n        this._updateDisplay();\n        // Allow the node to receive focus, which prevents removing the ghost text\n        // when user mis-clicks on the tooltip instead of the button in the tooltip.\n        this.node.tabIndex = 0;\n    }\n    /**\n     * Toolbar with buttons such as previous/next/accept.\n     */\n    get toolbar() {\n        return this._toolbar;\n    }\n    /**\n     * The editor used by the completion widget.\n     */\n    get editor() {\n        return this._editor;\n    }\n    set editor(newValue) {\n        var _a;\n        (_a = this.model) === null || _a === void 0 ? void 0 : _a.reset();\n        this._editor = newValue;\n    }\n    /**\n     * The model used by the completer widget.\n     */\n    get model() {\n        return this._model;\n    }\n    set model(model) {\n        if ((!model && !this._model) || model === this._model) {\n            return;\n        }\n        if (this._model) {\n            this._model.suggestionsChanged.disconnect(this._onModelSuggestionsChanged, this);\n            this._model.filterTextChanged.disconnect(this._onModelFilterTextChanged, this);\n            this._model.provisionProgress.disconnect(this._onProvisionProgress, this);\n        }\n        this._model = model;\n        if (this._model) {\n            this._model.suggestionsChanged.connect(this._onModelSuggestionsChanged, this);\n            this._model.filterTextChanged.connect(this._onModelFilterTextChanged, this);\n            this._model.provisionProgress.connect(this._onProvisionProgress, this);\n        }\n    }\n    cycle(direction) {\n        var _a, _b;\n        const items = (_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.completions) === null || _b === void 0 ? void 0 : _b.items;\n        if (!items) {\n            return;\n        }\n        if (direction === 'next') {\n            const proposed = this._current + 1;\n            this._current = proposed === items.length ? 0 : proposed;\n        }\n        else {\n            const proposed = this._current - 1;\n            this._current = proposed === -1 ? items.length - 1 : proposed;\n        }\n        this._updateStreamTracking();\n        this._render();\n    }\n    accept() {\n        const model = this.model;\n        const candidate = this.current;\n        const editor = this._editor;\n        if (!editor || !model || !candidate) {\n            return;\n        }\n        const position = model.cursor;\n        const value = candidate.insertText;\n        const cursorBeforeChange = editor.getOffsetAt(editor.getCursorPosition());\n        const requestPosition = editor.getOffsetAt(position);\n        const start = requestPosition;\n        const end = cursorBeforeChange;\n        const transactions = {\n            changes: { from: start, to: end, insert: value }\n        };\n        if (cursorBeforeChange <= end && cursorBeforeChange >= start) {\n            transactions.selection = { anchor: start + value.length };\n        }\n        editor.editor.dispatch(transactions);\n        model.reset();\n        this.update();\n    }\n    get current() {\n        var _a;\n        const completions = (_a = this.model) === null || _a === void 0 ? void 0 : _a.completions;\n        if (!completions) {\n            return null;\n        }\n        return completions.items[this._current];\n    }\n    _updateStreamTracking() {\n        if (this._lastItem) {\n            this._lastItem.stream.disconnect(this._onStream, this);\n        }\n        const current = this.current;\n        if (current) {\n            current.stream.connect(this._onStream, this);\n        }\n        this._lastItem = current;\n    }\n    _onStream(_emitter, _change) {\n        var _a;\n        // TODO handle stuck streams, i.e. if we connected and received 'opened'\n        // but then did not receive 'closed' for a long time we should disconnect\n        // and update widget with an 'timed out' status.\n        const completions = (_a = this.model) === null || _a === void 0 ? void 0 : _a.completions;\n        if (!completions || !completions.items || completions.items.length === 0) {\n            return;\n        }\n        if (this.isHidden) {\n            return;\n        }\n        const candidate = completions.items[this._current];\n        this._setText(candidate);\n    }\n    /**\n     * Change user-configurable settings.\n     */\n    configure(settings) {\n        this._showWidget = settings.showWidget;\n        this._updateDisplay();\n        if (settings.showShortcuts !== this._showShortcuts) {\n            this._showShortcuts = settings.showShortcuts;\n            this._updateShortcutsVisibility();\n        }\n        GhostTextManager.streamingAnimation = settings.streamingAnimation;\n        GhostTextManager.spacerRemovalDelay = Math.max(0, settings.editorResizeDelay - 300);\n        GhostTextManager.spacerRemovalDuration = Math.max(0, Math.min(300, settings.editorResizeDelay - 300));\n        this._minLines = settings.minLines;\n        this._maxLines = settings.maxLines;\n        this._reserveSpaceForLongest = settings.reserveSpaceForLongest;\n        this._suppressIfTabCompleterActive = settings.suppressIfTabCompleterActive;\n    }\n    /**\n     * Whether to suppress the inline completer when tab completer is active.\n     */\n    get suppressIfTabCompleterActive() {\n        return this._suppressIfTabCompleterActive;\n    }\n    /**\n     * Whether the inline completer is active.\n     */\n    get isActive() {\n        var _a;\n        return !!((_a = this.editor) === null || _a === void 0 ? void 0 : _a.host.classList.contains(INLINE_COMPLETER_ACTIVE_CLASS));\n    }\n    /**\n     * Handle the DOM events for the widget.\n     *\n     * @param event - The DOM event sent to the widget.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the dock panel's node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        if (this.isHidden || !this._editor) {\n            return;\n        }\n        switch (event.type) {\n            case 'pointerdown':\n                this._evtPointerdown(event);\n                break;\n            case 'scroll':\n                this._evtScroll(event);\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Handle `update-request` messages.\n     */\n    onUpdateRequest(msg) {\n        super.onUpdateRequest(msg);\n        const model = this._model;\n        if (!model) {\n            return;\n        }\n        let reply = model.completions;\n        // If there are no items, hide.\n        if (!reply || !reply.items || reply.items.length === 0) {\n            if (!this.isHidden) {\n                this.hide();\n            }\n            return;\n        }\n        if (this.isHidden) {\n            this.show();\n            this._setGeometry();\n        }\n    }\n    /**\n     * Handle `after-attach` messages for the widget.\n     */\n    onAfterAttach(msg) {\n        document.addEventListener('scroll', this, true);\n        document.addEventListener('pointerdown', this, true);\n    }\n    /**\n     * Handle `before-detach` messages for the widget.\n     */\n    onBeforeDetach(msg) {\n        document.removeEventListener('scroll', this, true);\n        document.removeEventListener('pointerdown', this, true);\n    }\n    /**\n     * Handle pointerdown events for the widget.\n     */\n    _evtPointerdown(event) {\n        var _a;\n        if (this.isHidden || !this._editor) {\n            return;\n        }\n        const target = event.target;\n        if (this.node.contains(target)) {\n            return true;\n        }\n        this.hide();\n        (_a = this.model) === null || _a === void 0 ? void 0 : _a.reset();\n    }\n    /**\n     * Handle scroll events for the widget\n     */\n    _evtScroll(event) {\n        if (this.isHidden || !this._editor) {\n            return;\n        }\n        const { node } = this;\n        // All scrolls except scrolls in the actual hover box node may cause the\n        // referent editor that anchors the node to move, so the only scroll events\n        // that can safely be ignored are ones that happen inside the hovering node.\n        if (node.contains(event.target)) {\n            return;\n        }\n        // Set the geometry of the node asynchronously.\n        requestAnimationFrame(() => {\n            this._setGeometry();\n        });\n    }\n    _onEditorBlur(event) {\n        var _a;\n        if (this.node.contains(event.relatedTarget)) {\n            // Cancel removing ghost text if our node is receiving focus\n            return false;\n        }\n        // The ghost text will be removed, so nothing to accept\n        (_a = this._editor) === null || _a === void 0 ? void 0 : _a.host.classList.remove(INLINE_COMPLETER_ACTIVE_CLASS);\n        // Hide the widget if editor was blurred.\n        this.hide();\n    }\n    _onModelSuggestionsChanged(_emitter, args) {\n        var _a;\n        if (!this.isAttached) {\n            this.update();\n            return;\n        }\n        if (args.event === 'set') {\n            this._current = (_a = args.indexMap.get(this._current)) !== null && _a !== void 0 ? _a : 0;\n        }\n        else if (args.event === 'clear') {\n            const editor = this.editor;\n            if (editor) {\n                this._ghostManager.clearGhosts(editor.editor);\n                editor.host.classList.remove(INLINE_COMPLETER_ACTIVE_CLASS);\n            }\n        }\n        this._updateStreamTracking();\n        this.update();\n        this._render();\n    }\n    _onModelFilterTextChanged(_emitter, mapping) {\n        var _a, _b;\n        const completions = (_a = this.model) === null || _a === void 0 ? void 0 : _a.completions;\n        if (!completions || !completions.items || completions.items.length === 0) {\n            return;\n        }\n        this._current = (_b = mapping.get(this._current)) !== null && _b !== void 0 ? _b : 0;\n        this._updateStreamTracking();\n        // Because the signal will be emitted during `EditorView.update` we want to\n        // wait for the update to complete before calling `this._render()`. As there\n        // is no API to check if update is done, we instead defer to next engine tick.\n        setTimeout(() => {\n            this._render();\n            // (reading layout to get coordinate to position hoverbox is not allowed either)\n            this._setGeometry();\n        }, 0);\n    }\n    _onProvisionProgress(_emitter, progress) {\n        requestAnimationFrame(() => {\n            if (progress.pendingProviders === 0) {\n                this._progressBar.style.display = 'none';\n            }\n            else {\n                this._progressBar.style.display = '';\n                this._progressBar.style.width =\n                    (100 * progress.pendingProviders) / progress.totalProviders + '%';\n            }\n        });\n    }\n    _render() {\n        var _a, _b;\n        const completions = (_a = this.model) === null || _a === void 0 ? void 0 : _a.completions;\n        if (!completions || !completions.items || completions.items.length === 0) {\n            return;\n        }\n        const candidate = completions.items[this._current];\n        this._setText(candidate);\n        if (this._showWidget === 'never') {\n            return;\n        }\n        this._suggestionsCounter.node.innerText = this._trans.__('%1/%2', this._current + 1, completions.items.length);\n        this._providerWidget.node.title = this._trans.__('Provider: %1', candidate.provider.name);\n        const icon = (_b = candidate.provider.icon) !== null && _b !== void 0 ? _b : kernelIcon;\n        icon.render(this._providerWidget.node);\n    }\n    _setText(item) {\n        var _a, _b, _c;\n        const text = item.insertText;\n        const editor = this._editor;\n        const model = this._model;\n        if (!model || !editor) {\n            return;\n        }\n        const view = editor.editor;\n        let minLines;\n        if (this._reserveSpaceForLongest) {\n            const items = (_c = (_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.completions) === null || _b === void 0 ? void 0 : _b.items) !== null && _c !== void 0 ? _c : [];\n            const longest = Math.max(...items.map(i => i.insertText.split('\\n').length));\n            minLines = Math.max(this._minLines, longest);\n        }\n        else {\n            minLines = this._minLines;\n        }\n        this._ghostManager.placeGhost(view, {\n            from: editor.getOffsetAt(model.cursor),\n            content: text,\n            providerId: item.provider.identifier,\n            addedPart: item.lastStreamed,\n            streaming: item.streaming,\n            minLines: minLines,\n            maxLines: this._maxLines,\n            onPointerOver: this._onPointerOverGhost.bind(this),\n            onPointerLeave: this._onPointerLeaveGhost.bind(this),\n            error: item.error\n        });\n        editor.host.classList.add(INLINE_COMPLETER_ACTIVE_CLASS);\n    }\n    _onPointerOverGhost() {\n        if (this._clearHoverTimeout !== null) {\n            window.clearTimeout(this._clearHoverTimeout);\n            this._clearHoverTimeout = null;\n        }\n        this.node.classList.add(HOVER_CLASS);\n    }\n    _onPointerLeaveGhost() {\n        // Remove after a small delay to avoid flicker when moving cursor\n        // between the lines or around the edges of the ghost text.\n        this._clearHoverTimeout = window.setTimeout(() => this.node.classList.remove(HOVER_CLASS), 500);\n    }\n    _setGeometry() {\n        const { node } = this;\n        const model = this._model;\n        const editor = this._editor;\n        if (!editor || !model || !model.cursor) {\n            return;\n        }\n        const host = editor.host.closest('.jp-MainAreaWidget > .lm-Widget') ||\n            editor.host;\n        let anchor;\n        try {\n            const maybeAnchor = editor.getCoordinateForPosition(model.cursor);\n            if (!maybeAnchor) {\n                throw Error('No coordinates for cursor position');\n            }\n            anchor = maybeAnchor;\n        }\n        catch (_a) {\n            // if coordinate is no longer in editor (e.g. after deleting a line), hide widget\n            this.hide();\n            return;\n        }\n        HoverBox.setGeometry({\n            anchor,\n            host: host,\n            maxHeight: 40,\n            minHeight: 20,\n            node: node,\n            privilege: 'forceAbove',\n            outOfViewDisplay: {\n                top: 'stick-outside',\n                bottom: 'stick-inside',\n                left: 'stick-inside',\n                right: 'stick-outside'\n            }\n        });\n    }\n    _updateShortcutsVisibility() {\n        this.node.dataset.showShortcuts = this._showShortcuts + '';\n    }\n    _updateDisplay() {\n        this.node.dataset.display = this._showWidget;\n    }\n}\n/**\n * A namespace for inline completer statics.\n */\n(function (InlineCompleter) {\n    /**\n     * Defaults for runtime user-configurable settings.\n     */\n    InlineCompleter.defaultSettings = {\n        showWidget: 'onHover',\n        showShortcuts: true,\n        streamingAnimation: 'uncover',\n        providers: {},\n        minLines: 2,\n        maxLines: 4,\n        editorResizeDelay: 1000,\n        reserveSpaceForLongest: false,\n        suppressIfTabCompleterActive: true\n    };\n    /**\n     * Model for inline completions.\n     */\n    class Model {\n        constructor() {\n            this.suggestionsChanged = new Signal(this);\n            this.filterTextChanged = new Signal(this);\n            this.provisionProgress = new Signal(this);\n            this._isDisposed = false;\n            this._completions = null;\n        }\n        setCompletions(reply) {\n            var _a, _b;\n            const previousPositions = new Map((_b = (_a = this._completions) === null || _a === void 0 ? void 0 : _a.items) === null || _b === void 0 ? void 0 : _b.map((item, index) => [item.insertText, index]));\n            this._completions = reply;\n            const indexMap = new Map(reply.items.map((item, newIndex) => [\n                previousPositions.get(item.insertText),\n                newIndex\n            ]));\n            this.suggestionsChanged.emit({\n                event: 'set',\n                indexMap\n            });\n        }\n        appendCompletions(reply) {\n            if (!this._completions || !this._completions.items) {\n                console.warn('No completions to append to');\n                return;\n            }\n            this._completions.items.push(...reply.items);\n            this.suggestionsChanged.emit({ event: 'append' });\n        }\n        notifyProgress(progress) {\n            this.provisionProgress.emit(progress);\n        }\n        get cursor() {\n            return this._cursor;\n        }\n        set cursor(value) {\n            this._cursor = value;\n        }\n        get completions() {\n            return this._completions;\n        }\n        reset() {\n            this._completions = null;\n            this.suggestionsChanged.emit({ event: 'clear' });\n        }\n        /**\n         * Get whether the model is disposed.\n         */\n        get isDisposed() {\n            return this._isDisposed;\n        }\n        handleTextChange(sourceChange) {\n            var _a;\n            const completions = this._completions;\n            if (!completions ||\n                !completions.items ||\n                completions.items.length === 0) {\n                return;\n            }\n            const originalPositions = new Map(completions.items.map((item, index) => [item, index]));\n            for (let change of (_a = sourceChange.sourceChange) !== null && _a !== void 0 ? _a : []) {\n                const insert = change.insert;\n                if (insert) {\n                    const items = completions.items.filter(item => {\n                        var _a;\n                        const filterText = (_a = item.filterText) !== null && _a !== void 0 ? _a : item.insertText;\n                        if (!filterText.startsWith(insert)) {\n                            return false;\n                        }\n                        item.filterText = filterText.substring(insert.length);\n                        item.insertText = item.insertText.substring(insert.length);\n                        return true;\n                    });\n                    if (items.length === 0) {\n                        // all items from this provider were filtered out\n                        this._completions = null;\n                    }\n                    completions.items = items;\n                }\n                else {\n                    if (!change.retain) {\n                        this._completions = null;\n                    }\n                }\n            }\n            const indexMap = new Map(completions.items.map((item, newIndex) => [\n                originalPositions.get(item),\n                newIndex\n            ]));\n            this.filterTextChanged.emit(indexMap);\n        }\n        handleSelectionChange(range) {\n            const initialCursor = this.cursor;\n            if (!initialCursor) {\n                return;\n            }\n            const { start, end } = range;\n            if (start.column !== end.column || start.line !== end.line) {\n                // Cancel if user started selecting text.\n                this.reset();\n            }\n            if (start.line !== initialCursor.line ||\n                start.column < initialCursor.column) {\n                // Cancel if user moved cursor to next line or receded to before the origin\n                this.reset();\n            }\n        }\n        /**\n         * Dispose of the resources held by the model.\n         */\n        dispose() {\n            // Do nothing if already disposed.\n            if (this._isDisposed) {\n                return;\n            }\n            this._isDisposed = true;\n            Signal.clearData(this);\n        }\n    }\n    InlineCompleter.Model = Model;\n})(InlineCompleter || (InlineCompleter = {}));\n//# sourceMappingURL=inline.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\nimport { Widget } from '@lumino/widgets';\nimport { ProviderReconciliator } from './reconciliator';\nimport { CONTEXT_PROVIDER_ID } from './default/contextprovider';\nimport { KERNEL_PROVIDER_ID } from './default/kernelprovider';\nimport { CompletionHandler } from './handler';\nimport { CompleterModel } from './model';\nimport { InlineCompleter } from './inline';\nimport { Completer } from './widget';\n/**\n * A manager for completion providers.\n */\nexport class CompletionProviderManager {\n    /**\n     * Construct a new completer manager.\n     */\n    constructor() {\n        /**\n         * The set of activated providers\n         */\n        this._activeProviders = new Set([KERNEL_PROVIDER_ID, CONTEXT_PROVIDER_ID]);\n        this._inlineCompleterSettings = InlineCompleter.defaultSettings;\n        this._providers = new Map();\n        this._inlineProviders = new Map();\n        this._panelHandlers = new Map();\n        this._mostRecentContext = new Map();\n        this._activeProvidersChanged = new Signal(this);\n        this._selected = new Signal(this);\n        this._inlineCompleterFactory = null;\n    }\n    /**\n     * Signal emitted when active providers list is changed.\n     */\n    get activeProvidersChanged() {\n        return this._activeProvidersChanged;\n    }\n    /**\n     * Signal emitted when a selection is made from a completer menu.\n     */\n    get selected() {\n        return this._selected;\n    }\n    /**\n     * Set provider timeout.\n     *\n     * @param {number} timeout - value of timeout in millisecond.\n     */\n    setTimeout(timeout) {\n        this._timeout = timeout;\n    }\n    /**\n     * Enable/disable the document panel.\n     */\n    setShowDocumentationPanel(showDoc) {\n        this._panelHandlers.forEach(handler => (handler.completer.showDocsPanel = showDoc));\n        this._showDoc = showDoc;\n    }\n    /**\n     * Whether to suppress the tab completer when inline completions are presented.\n     */\n    setSuppressIfInlineCompleterActive(suppress) {\n        this._panelHandlers.forEach(handler => (handler.completer.suppressIfInlineCompleterActive = suppress));\n        this._suppressIfInlineCompleterActive = suppress;\n    }\n    /**\n     * Enable/disable continuous hinting mode.\n     */\n    setContinuousHinting(value) {\n        this._panelHandlers.forEach(handler => (handler.autoCompletion = value));\n        this._autoCompletion = value;\n    }\n    /**\n     * Register a completer provider with the manager.\n     *\n     * @param {ICompletionProvider} provider - the provider to be registered.\n     */\n    registerProvider(provider) {\n        const identifier = provider.identifier;\n        if (this._providers.has(identifier)) {\n            console.warn(`Completion provider with identifier ${identifier} is already registered`);\n        }\n        else {\n            this._providers.set(identifier, provider);\n            this._panelHandlers.forEach((handler, id) => {\n                void this.updateCompleter(this._mostRecentContext.get(id));\n            });\n        }\n    }\n    registerInlineProvider(provider) {\n        const identifier = provider.identifier;\n        if (this._inlineProviders.has(identifier)) {\n            console.warn(`Completion provider with identifier ${identifier} is already registered`);\n        }\n        else {\n            this._inlineProviders.set(identifier, provider);\n            this._panelHandlers.forEach((handler, id) => {\n                void this.updateCompleter(this._mostRecentContext.get(id));\n            });\n        }\n    }\n    /**\n     *\n     * Return the map of providers.\n     */\n    getProviders() {\n        return this._providers;\n    }\n    /**\n     * Activate the providers by id, the list of ids is populated from user setting.\n     * The non-existing providers will be discarded.\n     *\n     * @param {Array<string>} providerIds - Array of strings with ids of provider\n     */\n    activateProvider(providerIds) {\n        this._activeProviders = new Set([]);\n        providerIds.forEach(providerId => {\n            if (this._providers.has(providerId)) {\n                this._activeProviders.add(providerId);\n            }\n        });\n        if (this._activeProviders.size === 0) {\n            this._activeProviders.add(KERNEL_PROVIDER_ID);\n            this._activeProviders.add(CONTEXT_PROVIDER_ID);\n        }\n        this._activeProvidersChanged.emit();\n    }\n    /**\n     * Create or update completer handler of a widget with new context.\n     *\n     * @param newCompleterContext - The completion context.\n     */\n    async updateCompleter(newCompleterContext) {\n        var _a, _b;\n        const { widget, editor, sanitizer } = newCompleterContext;\n        const id = widget.id;\n        const handler = this._panelHandlers.get(id);\n        const firstProvider = [...this._activeProviders][0];\n        const provider = this._providers.get(firstProvider);\n        let renderer = (_a = provider === null || provider === void 0 ? void 0 : provider.renderer) !== null && _a !== void 0 ? _a : Completer.getDefaultRenderer(sanitizer);\n        const modelFactory = provider === null || provider === void 0 ? void 0 : provider.modelFactory;\n        let model;\n        if (modelFactory) {\n            model = await modelFactory.call(provider, newCompleterContext);\n        }\n        else {\n            model = new CompleterModel();\n        }\n        this._mostRecentContext.set(widget.id, newCompleterContext);\n        const options = {\n            model,\n            editor,\n            renderer,\n            sanitizer,\n            showDoc: this._showDoc\n        };\n        if (!handler) {\n            // Create a new handler.\n            const handler = await this._generateHandler(newCompleterContext, options);\n            this._panelHandlers.set(widget.id, handler);\n            handler.completer.selected.connect((completer, insertText) => this._selected.emit({ insertText }));\n            widget.disposed.connect(old => {\n                this.disposeHandler(old.id, handler);\n                this._mostRecentContext.delete(id);\n            });\n        }\n        else {\n            // Update existing completer.\n            const completer = handler.completer;\n            (_b = completer.model) === null || _b === void 0 ? void 0 : _b.dispose();\n            completer.model = options.model;\n            completer.renderer = options.renderer;\n            completer.showDocsPanel = options.showDoc;\n            completer.suppressIfInlineCompleterActive =\n                this._suppressIfInlineCompleterActive;\n            // Update other handler attributes.\n            handler.autoCompletion = this._autoCompletion;\n            if (editor) {\n                handler.editor = editor;\n                handler.reconciliator =\n                    await this.generateReconciliator(newCompleterContext);\n            }\n        }\n    }\n    /**\n     * Invoke the completer in the widget with provided id.\n     *\n     * @param id - the id of notebook panel, console panel or code editor.\n     */\n    invoke(id) {\n        const handler = this._panelHandlers.get(id);\n        if (handler) {\n            handler.invoke();\n        }\n    }\n    /**\n     * Activate `select` command in the widget with provided id.\n     *\n     * @param {string} id - the id of notebook panel, console panel or code editor.\n     */\n    select(id) {\n        const handler = this._panelHandlers.get(id);\n        if (handler) {\n            handler.completer.selectActive();\n        }\n    }\n    /**\n     * Set inline completer factory.\n     */\n    setInlineCompleterFactory(factory) {\n        this._inlineCompleterFactory = factory;\n        this._panelHandlers.forEach((handler, id) => {\n            void this.updateCompleter(this._mostRecentContext.get(id));\n        });\n        if (this.inline) {\n            return;\n        }\n        this.inline = {\n            invoke: (id) => {\n                const handler = this._panelHandlers.get(id);\n                if (handler && handler.inlineCompleter) {\n                    handler.invokeInline();\n                }\n            },\n            isActive: (id) => {\n                const handler = this._panelHandlers.get(id);\n                if (handler && handler.inlineCompleter) {\n                    return handler.inlineCompleter.isActive;\n                }\n                return false;\n            },\n            cycle: (id, direction) => {\n                const handler = this._panelHandlers.get(id);\n                if (handler && handler.inlineCompleter) {\n                    handler.inlineCompleter.cycle(direction);\n                }\n            },\n            accept: (id) => {\n                const handler = this._panelHandlers.get(id);\n                if (handler && handler.inlineCompleter) {\n                    handler.inlineCompleter.accept();\n                }\n            },\n            configure: (settings) => {\n                this._inlineCompleterSettings = settings;\n                for (const [providerId, provider] of this._inlineProviders.entries()) {\n                    if (provider.configure) {\n                        provider.configure(settings.providers[providerId]);\n                    }\n                }\n                this._panelHandlers.forEach((handler, handlerId) => {\n                    if (handler.inlineCompleter) {\n                        handler.inlineCompleter.configure(settings);\n                    }\n                    // trigger update to regenerate reconciliator\n                    void this.updateCompleter(this._mostRecentContext.get(handlerId));\n                });\n            }\n        };\n    }\n    /**\n     * Inline providers information.\n     */\n    get inlineProviders() {\n        return [...this._inlineProviders.values()];\n    }\n    /**\n     * Helper function to generate a `ProviderReconciliator` with provided context.\n     * The `isApplicable` method of provider is used to filter out the providers\n     * which can not be used with provided context.\n     *\n     * @param {ICompletionContext} completerContext - the current completer context\n     */\n    async generateReconciliator(completerContext) {\n        const enabledProviders = [];\n        for (const [id, providerSettings] of Object.entries(this._inlineCompleterSettings.providers)) {\n            if (providerSettings.enabled === true) {\n                enabledProviders.push(id);\n            }\n        }\n        const inlineProviders = [...this._inlineProviders.values()].filter(provider => enabledProviders.includes(provider.identifier));\n        const providers = [];\n        for (const id of this._activeProviders) {\n            const provider = this._providers.get(id);\n            if (provider) {\n                providers.push(provider);\n            }\n        }\n        return new ProviderReconciliator({\n            context: completerContext,\n            providers,\n            inlineProviders,\n            inlineProvidersSettings: this._inlineCompleterSettings.providers,\n            timeout: this._timeout\n        });\n    }\n    /**\n     * Helper to dispose the completer handler on widget disposed event.\n     *\n     * @param {string} id - id of the widget\n     * @param {CompletionHandler} handler - the handler to be disposed.\n     */\n    disposeHandler(id, handler) {\n        var _a, _b, _c, _d;\n        (_a = handler.completer.model) === null || _a === void 0 ? void 0 : _a.dispose();\n        handler.completer.dispose();\n        (_c = (_b = handler.inlineCompleter) === null || _b === void 0 ? void 0 : _b.model) === null || _c === void 0 ? void 0 : _c.dispose();\n        (_d = handler.inlineCompleter) === null || _d === void 0 ? void 0 : _d.dispose();\n        handler.dispose();\n        this._panelHandlers.delete(id);\n    }\n    /**\n     * Helper to generate a completer handler from provided context.\n     */\n    async _generateHandler(completerContext, options) {\n        const completer = new Completer(options);\n        const inlineCompleter = this._inlineCompleterFactory\n            ? this._inlineCompleterFactory.factory({\n                ...options,\n                model: new InlineCompleter.Model()\n            })\n            : undefined;\n        completer.hide();\n        Widget.attach(completer, document.body);\n        if (inlineCompleter) {\n            Widget.attach(inlineCompleter, document.body);\n            inlineCompleter.hide();\n            inlineCompleter.configure(this._inlineCompleterSettings);\n        }\n        const reconciliator = await this.generateReconciliator(completerContext);\n        const handler = new CompletionHandler({\n            completer,\n            inlineCompleter,\n            reconciliator: reconciliator\n        });\n        handler.editor = completerContext.editor;\n        return handler;\n    }\n}\n//# sourceMappingURL=manager.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { LabIcon } from '@jupyterlab/ui-components';\nimport inlineSvgStr from '../style/icons/inline.svg';\nimport widgetSvgStr from '../style/icons/widget.svg';\nexport const inlineCompleterIcon = new LabIcon({\n    name: 'completer:inline',\n    svgstr: inlineSvgStr\n});\nexport const completerWidgetIcon = new LabIcon({\n    name: 'completer:widget',\n    svgstr: widgetSvgStr\n});\n//# sourceMappingURL=icons.js.map","import { nullTranslator } from '@jupyterlab/translation';\nimport { historyIcon } from '@jupyterlab/ui-components';\n/**\n * An example inline completion provider using history to populate suggestions.\n */\nexport class HistoryInlineCompletionProvider {\n    constructor(options) {\n        this.options = options;\n        this.identifier = '@jupyterlab/inline-completer:history';\n        this._maxSuggestions = 100;\n        const translator = options.translator || nullTranslator;\n        this._trans = translator.load('jupyterlab');\n    }\n    get name() {\n        return this._trans.__('History');\n    }\n    get icon() {\n        return historyIcon;\n    }\n    get schema() {\n        return {\n            properties: {\n                maxSuggestions: {\n                    title: this._trans.__('Maximum number of suggestions'),\n                    description: this._trans.__('The maximum number of suggestions to retrieve from history.'),\n                    type: 'number'\n                }\n            },\n            default: {\n                // make this provider opt-in\n                enabled: false,\n                maxSuggestions: 100\n            }\n        };\n    }\n    configure(settings) {\n        var _a;\n        this._maxSuggestions = (_a = settings.maxSuggestions) !== null && _a !== void 0 ? _a : 100;\n    }\n    async fetch(request, context, trigger) {\n        var _a;\n        const kernel = (_a = context.session) === null || _a === void 0 ? void 0 : _a.kernel;\n        if (!kernel) {\n            throw new Error('No kernel for completion request.');\n        }\n        const multiLinePrefix = request.text.slice(0, request.offset);\n        const linePrefix = multiLinePrefix.split('\\n').slice(-1)[0];\n        const suffix = request.text.slice(request.offset).split('\\n')[0];\n        let historyRequest;\n        const items = [];\n        if (linePrefix === '') {\n            historyRequest = {\n                output: false,\n                raw: true,\n                hist_access_type: 'tail',\n                n: this._maxSuggestions\n            };\n            const reply = await kernel.requestHistory(historyRequest);\n            if (reply.content.status === 'ok') {\n                let history = reply.content.history;\n                const historyFrequencyMap = new Map();\n                // Count the frequency of each element\n                for (const entry of history.reverse()) {\n                    const sourceLines = entry[2];\n                    historyFrequencyMap.set(sourceLines, (historyFrequencyMap.get(sourceLines) || 0) + 1);\n                }\n                const frequencyHistory = Array.from(historyFrequencyMap.entries());\n                const sortedFrequencyHistory = frequencyHistory.sort((a, b) => {\n                    if (a[1] > b[1]) {\n                        return -1;\n                    }\n                    else if (a[1] < b[1]) {\n                        return 1;\n                    }\n                    else {\n                        return 0;\n                    }\n                });\n                for (const entry of sortedFrequencyHistory) {\n                    items.push({\n                        insertText: entry[0]\n                    });\n                }\n            }\n        }\n        else {\n            historyRequest = {\n                output: false,\n                raw: true,\n                hist_access_type: 'search',\n                pattern: linePrefix + '*' + (suffix ? suffix + '*' : ''),\n                unique: true,\n                n: this._maxSuggestions\n            };\n            const reply = await kernel.requestHistory(historyRequest);\n            if (reply.content.status === 'ok') {\n                for (const entry of reply.content.history) {\n                    const sourceLines = entry[2].split('\\n');\n                    for (let i = 0; i < sourceLines.length; i++) {\n                        const line = sourceLines[i];\n                        if (line.startsWith(linePrefix)) {\n                            let followingLines = line.slice(linePrefix.length);\n                            if (i + 1 < sourceLines.length) {\n                                followingLines += '\\n' + sourceLines.slice(i + 1).join('\\n');\n                            }\n                            if (suffix) {\n                                followingLines = followingLines.slice(0, followingLines.indexOf(suffix));\n                            }\n                            items.push({\n                                insertText: followingLines\n                            });\n                        }\n                    }\n                }\n            }\n        }\n        return { items };\n    }\n}\n//# sourceMappingURL=inlinehistoryprovider.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module completer\n */\nexport * from './handler';\nexport * from './model';\nexport * from './widget';\nexport * from './tokens';\nexport * from './manager';\nexport * from './reconciliator';\nexport * from './icons';\nexport * from './inline';\nexport * from './default/contextprovider';\nexport * from './default/kernelprovider';\nexport * from './default/inlinehistoryprovider';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/codemirror/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ICommandPalette } from '@jupyterlab/apputils';\nimport { ForeignHandler, IConsoleTracker } from '@jupyterlab/console';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator } from '@jupyterlab/translation';\nimport { AttachedProperty } from '@lumino/properties';\n/**\n * The console foreign handler.\n */\nexport const foreign = {\n    id: '@jupyterlab/console-extension:foreign',\n    description: 'Add foreign handler of IOPub messages to the console.',\n    requires: [IConsoleTracker, ISettingRegistry, ITranslator],\n    optional: [ICommandPalette],\n    activate: activateForeign,\n    autoStart: true\n};\nexport default foreign;\nfunction activateForeign(app, tracker, settingRegistry, translator, palette) {\n    var _a;\n    const trans = translator.load('jupyterlab');\n    const { shell } = app;\n    tracker.widgetAdded.connect((sender, widget) => {\n        const console = widget.console;\n        const handler = new ForeignHandler({\n            sessionContext: console.sessionContext,\n            parent: console\n        });\n        Private.foreignHandlerProperty.set(console, handler);\n        // Property showAllKernelActivity configures foreign handler enabled on start.\n        void settingRegistry\n            .get('@jupyterlab/console-extension:tracker', 'showAllKernelActivity')\n            .then(({ composite }) => {\n            const showAllKernelActivity = composite;\n            handler.enabled = showAllKernelActivity;\n        });\n        console.disposed.connect(() => {\n            handler.dispose();\n        });\n    });\n    const { commands } = app;\n    const category = trans.__('Console');\n    const toggleShowAllActivity = 'console:toggle-show-all-kernel-activity';\n    // Get the current widget and activate unless the args specify otherwise.\n    function getCurrent(args) {\n        const widget = tracker.currentWidget;\n        const activate = args['activate'] !== false;\n        if (activate && widget) {\n            shell.activateById(widget.id);\n        }\n        return widget;\n    }\n    commands.addCommand(toggleShowAllActivity, {\n        label: args => trans.__('Show All Kernel Activity'),\n        execute: args => {\n            const current = getCurrent(args);\n            if (!current) {\n                return;\n            }\n            const handler = Private.foreignHandlerProperty.get(current.console);\n            if (handler) {\n                handler.enabled = !handler.enabled;\n            }\n        },\n        isToggled: () => {\n            var _a;\n            return tracker.currentWidget !== null &&\n                !!((_a = Private.foreignHandlerProperty.get(tracker.currentWidget.console)) === null || _a === void 0 ? void 0 : _a.enabled);\n        },\n        isEnabled: () => tracker.currentWidget !== null &&\n            tracker.currentWidget === shell.currentWidget\n    });\n    const notify = () => {\n        commands.notifyCommandChanged(toggleShowAllActivity);\n    };\n    tracker.currentChanged.connect(notify);\n    (_a = shell.currentChanged) === null || _a === void 0 ? void 0 : _a.connect(notify);\n    if (palette) {\n        palette.addItem({\n            command: toggleShowAllActivity,\n            category,\n            args: { isPalette: true }\n        });\n    }\n}\n/*\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * An attached property for a console's foreign handler.\n     */\n    Private.foreignHandlerProperty = new AttachedProperty({\n        name: 'foreignHandler',\n        create: () => undefined\n    });\n})(Private || (Private = {}));\n//# sourceMappingURL=foreign.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { IConsoleCellExecutor, runCell } from '@jupyterlab/console';\n/**\n * Console cell executor plugin.\n */\nexport const cellExecutor = {\n    id: '@jupyterlab/console-extension:cell-executor',\n    description: 'Provides the console cell executor.',\n    autoStart: true,\n    provides: IConsoleCellExecutor,\n    activate: () => {\n        return Object.freeze({ runCell });\n    }\n};\n//# sourceMappingURL=cellexecutor.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module console-extension\n */\nimport { ILabStatus, ILayoutRestorer } from '@jupyterlab/application';\nimport { createToolbarFactory, Dialog, ICommandPalette, IKernelStatusModel, ISanitizer, ISessionContextDialogs, IToolbarWidgetRegistry, Sanitizer, SemanticCommand, SessionContextDialogs, setToolbar, showDialog, Toolbar, WidgetTracker } from '@jupyterlab/apputils';\nimport { IEditorServices, IPositionModel } from '@jupyterlab/codeeditor';\nimport { ICompletionProviderManager } from '@jupyterlab/completer';\nimport { ConsolePanel, IConsoleCellExecutor, IConsoleTracker } from '@jupyterlab/console';\nimport { IDefaultFileBrowser } from '@jupyterlab/filebrowser';\nimport { ILauncher } from '@jupyterlab/launcher';\nimport { IMainMenu } from '@jupyterlab/mainmenu';\nimport { IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { clearIcon, consoleIcon, dockBottomIcon, dockLeftIcon, dockRightIcon, dockTopIcon, dotsIcon, IFormRendererRegistry, redoIcon, refreshIcon, runIcon, ToolbarButton, undoIcon } from '@jupyterlab/ui-components';\nimport { find } from '@lumino/algorithm';\nimport { JSONExt, UUID } from '@lumino/coreutils';\nimport { DisposableSet } from '@lumino/disposable';\nimport { Menu } from '@lumino/widgets';\nimport foreign from './foreign';\nimport { cellExecutor } from './cellexecutor';\n/**\n * The command IDs used by the console plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.autoClosingBrackets = 'console:toggle-autoclosing-brackets';\n    CommandIDs.create = 'console:create';\n    CommandIDs.clear = 'console:clear';\n    CommandIDs.runUnforced = 'console:run-unforced';\n    CommandIDs.runForced = 'console:run-forced';\n    CommandIDs.linebreak = 'console:linebreak';\n    CommandIDs.interrupt = 'console:interrupt-kernel';\n    CommandIDs.restart = 'console:restart-kernel';\n    CommandIDs.closeAndShutdown = 'console:close-and-shutdown';\n    CommandIDs.open = 'console:open';\n    CommandIDs.inject = 'console:inject';\n    CommandIDs.changeKernel = 'console:change-kernel';\n    CommandIDs.getKernel = 'console:get-kernel';\n    CommandIDs.interactionMode = 'console:interaction-mode';\n    CommandIDs.redo = 'console:redo';\n    CommandIDs.replaceSelection = 'console:replace-selection';\n    CommandIDs.shutdown = 'console:shutdown';\n    CommandIDs.undo = 'console:undo';\n    CommandIDs.invokeCompleter = 'completer:invoke-console';\n    CommandIDs.selectCompleter = 'completer:select-console';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The console widget tracker provider.\n */\nconst tracker = {\n    id: '@jupyterlab/console-extension:tracker',\n    description: 'Provides the console widget tracker.',\n    provides: IConsoleTracker,\n    requires: [\n        ConsolePanel.IContentFactory,\n        IEditorServices,\n        IConsoleCellExecutor,\n        IRenderMimeRegistry,\n        ISettingRegistry\n    ],\n    optional: [\n        ILayoutRestorer,\n        IDefaultFileBrowser,\n        IMainMenu,\n        ICommandPalette,\n        ILauncher,\n        ILabStatus,\n        ISessionContextDialogs,\n        IFormRendererRegistry,\n        ITranslator,\n        ISessionContextDialogs,\n        IToolbarWidgetRegistry\n    ],\n    activate: activateConsole,\n    autoStart: true\n};\n/**\n * The console widget content factory.\n */\nconst factory = {\n    id: '@jupyterlab/console-extension:factory',\n    description: 'Provides the console widget content factory.',\n    provides: ConsolePanel.IContentFactory,\n    requires: [IEditorServices],\n    autoStart: true,\n    activate: (app, editorServices) => {\n        const editorFactory = editorServices.factoryService.newInlineEditor;\n        return new ConsolePanel.ContentFactory({ editorFactory });\n    }\n};\n/**\n * Kernel status indicator.\n */\nconst kernelStatus = {\n    id: '@jupyterlab/console-extension:kernel-status',\n    description: 'Adds the console to the kernel status indicator model.',\n    autoStart: true,\n    requires: [IConsoleTracker, IKernelStatusModel],\n    activate: (app, tracker, kernelStatus) => {\n        const provider = (widget) => {\n            let session = null;\n            if (widget && tracker.has(widget)) {\n                return widget.sessionContext;\n            }\n            return session;\n        };\n        kernelStatus.addSessionProvider(provider);\n    }\n};\n/**\n * Cursor position.\n */\nconst lineColStatus = {\n    id: '@jupyterlab/console-extension:cursor-position',\n    description: 'Adds the console to the code editor cursor position model.',\n    autoStart: true,\n    requires: [IConsoleTracker, IPositionModel],\n    activate: (app, tracker, positionModel) => {\n        let previousWidget = null;\n        const provider = async (widget) => {\n            let editor = null;\n            if (widget !== previousWidget) {\n                previousWidget === null || previousWidget === void 0 ? void 0 : previousWidget.console.promptCellCreated.disconnect(positionModel.update);\n                previousWidget = null;\n                if (widget && tracker.has(widget)) {\n                    widget.console.promptCellCreated.connect(positionModel.update);\n                    const promptCell = widget.console.promptCell;\n                    editor = null;\n                    if (promptCell) {\n                        await promptCell.ready;\n                        editor = promptCell.editor;\n                    }\n                    previousWidget = widget;\n                }\n            }\n            else if (widget) {\n                const promptCell = widget.console.promptCell;\n                editor = null;\n                if (promptCell) {\n                    await promptCell.ready;\n                    editor = promptCell.editor;\n                }\n            }\n            return editor;\n        };\n        positionModel.addEditorProvider(provider);\n    }\n};\nconst completerPlugin = {\n    id: '@jupyterlab/console-extension:completer',\n    description: 'Adds completion to the console.',\n    autoStart: true,\n    requires: [IConsoleTracker],\n    optional: [ICompletionProviderManager, ITranslator, ISanitizer],\n    activate: activateConsoleCompleterService\n};\n/**\n * Export the plugins as the default.\n */\nconst plugins = [\n    factory,\n    tracker,\n    foreign,\n    kernelStatus,\n    lineColStatus,\n    completerPlugin,\n    cellExecutor\n];\nexport default plugins;\n/**\n * Activate the console extension.\n */\nasync function activateConsole(app, contentFactory, editorServices, executor, rendermime, settingRegistry, restorer, filebrowser, mainMenu, palette, launcher, status, sessionDialogs_, formRegistry, translator_, sessionContextDialogs, toolbarRegistry) {\n    var _a;\n    const translator = translator_ !== null && translator_ !== void 0 ? translator_ : nullTranslator;\n    const trans = translator.load('jupyterlab');\n    const manager = app.serviceManager;\n    const { commands, shell } = app;\n    const category = trans.__('Console');\n    const sessionDialogs = sessionDialogs_ !== null && sessionDialogs_ !== void 0 ? sessionDialogs_ : new SessionContextDialogs({ translator });\n    const pluginId = '@jupyterlab/console-extension:tracker';\n    const promptCellPositions = [\n        'top',\n        'bottom',\n        'left',\n        'right'\n    ];\n    // Instantiate the toolbar factory for console panel at plugin activation time\n    // since the plugin defines toolbar items and \"jupyter.lab.toolbars\" is set to true.\n    let toolbarFactory;\n    if (toolbarRegistry) {\n        const factory = 'ConsolePanel';\n        toolbarFactory = createToolbarFactory(toolbarRegistry, settingRegistry, factory, pluginId, translator);\n        if (sessionContextDialogs) {\n            toolbarRegistry.addFactory(factory, 'kernelName', panel => Toolbar.createKernelNameItem(panel.sessionContext, sessionContextDialogs, translator));\n        }\n        toolbarRegistry.addFactory(factory, 'kernelStatus', panel => {\n            const sessionContext = panel.sessionContext;\n            // TODO: update use of deprecated APIs, without having to depend on @jupyterlab/notebook\n            const indicator = Toolbar.createKernelStatusItem(sessionContext);\n            return indicator;\n        });\n        const promptMenu = new Menu({ commands });\n        promptMenu.addClass('jp-CodeConsolePromptMenu');\n        promptCellPositions.forEach(position => {\n            promptMenu.addItem({ command: `console:prompt-to-${position}` });\n        });\n        toolbarRegistry.addFactory(factory, 'promptPosition', panel => {\n            const button = new ToolbarButton({\n                tooltip: trans.__('Change Console Prompt Position'),\n                icon: dotsIcon,\n                onClick: () => {\n                    const right = button.node.getBoundingClientRect().right;\n                    const bottom = button.node.getBoundingClientRect().bottom;\n                    promptMenu.open(right, bottom, { horizontalAlignment: 'right' });\n                }\n            });\n            return button;\n        });\n    }\n    // Create a widget tracker for all console panels.\n    const tracker = new WidgetTracker({\n        namespace: 'console'\n    });\n    // Handle state restoration.\n    if (restorer) {\n        void restorer.restore(tracker, {\n            command: CommandIDs.create,\n            args: widget => {\n                const { path, name, kernelPreference } = widget.console.sessionContext;\n                return {\n                    path,\n                    name,\n                    kernelPreference: { ...kernelPreference }\n                };\n            },\n            name: widget => { var _a; return (_a = widget.console.sessionContext.path) !== null && _a !== void 0 ? _a : UUID.uuid4(); },\n            when: manager.ready\n        });\n    }\n    // Add a launcher item if the launcher is available.\n    if (launcher) {\n        void manager.ready.then(() => {\n            let disposables = null;\n            const onSpecsChanged = () => {\n                if (disposables) {\n                    disposables.dispose();\n                    disposables = null;\n                }\n                const specs = manager.kernelspecs.specs;\n                if (!specs) {\n                    return;\n                }\n                disposables = new DisposableSet();\n                for (const name in specs.kernelspecs) {\n                    const rank = name === specs.default ? 0 : Infinity;\n                    const spec = specs.kernelspecs[name];\n                    const kernelIconUrl = spec.resources['logo-svg'] || spec.resources['logo-64x64'];\n                    disposables.add(launcher.add({\n                        command: CommandIDs.create,\n                        args: { isLauncher: true, kernelPreference: { name } },\n                        category: trans.__('Console'),\n                        rank,\n                        kernelIconUrl,\n                        metadata: {\n                            kernel: JSONExt.deepCopy(spec.metadata || {})\n                        }\n                    }));\n                }\n            };\n            onSpecsChanged();\n            manager.kernelspecs.specsChanged.connect(onSpecsChanged);\n        });\n    }\n    /**\n     * Create a console for a given path.\n     */\n    async function createConsole(options) {\n        var _a, _b;\n        await manager.ready;\n        const panel = new ConsolePanel({\n            manager,\n            contentFactory,\n            mimeTypeService: editorServices.mimeTypeService,\n            rendermime,\n            sessionDialogs,\n            executor,\n            translator,\n            setBusy: (_a = (status && (() => status.setBusy()))) !== null && _a !== void 0 ? _a : undefined,\n            ...options\n        });\n        if (toolbarFactory) {\n            setToolbar(panel, toolbarFactory);\n        }\n        const interactionMode = (await settingRegistry.get('@jupyterlab/console-extension:tracker', 'interactionMode')).composite;\n        panel.console.node.dataset.jpInteractionMode = interactionMode;\n        // Add the console panel to the tracker. We want the panel to show up before\n        // any kernel selection dialog, so we do not await panel.session.ready;\n        await tracker.add(panel);\n        panel.sessionContext.propertyChanged.connect(() => {\n            void tracker.save(panel);\n        });\n        if (options.subshell) {\n            panel.sessionContext.kernelChanged.connect(async () => {\n                if (!panel.sessionContext.isDisposed) {\n                    panel.sessionContext.ready\n                        .then(async () => {\n                        if (panel.sessionContext.session === null) {\n                            console.error('Cannot create subshell without session');\n                        }\n                        else if (panel.sessionContext.session.kernel === null) {\n                            console.error('Cannot create subshell without kernel');\n                        }\n                        else {\n                            const { kernel } = panel.sessionContext.session;\n                            // Ensure kernel has received kernel_info.\n                            await kernel.info;\n                            const replyMsg = await kernel.requestCreateSubshell({}).done;\n                            kernel.subshellId = replyMsg.content.subshell_id;\n                        }\n                    })\n                        .catch(reason => {\n                        console.error('Failed to initialize SessionContext or create new subshell.', reason);\n                    });\n                }\n            });\n        }\n        shell.add(panel, 'main', {\n            ref: options.ref,\n            mode: options.insertMode,\n            activate: options.activate !== false,\n            type: (_b = options.type) !== null && _b !== void 0 ? _b : 'Console'\n        });\n        return panel;\n    }\n    let clearCellsOnExecute;\n    let clearCodeContentOnExecute;\n    let hideCodeInput;\n    let interactionMode;\n    let promptCellConfig = {};\n    let promptCellPosition;\n    let showBanner;\n    /**\n     * Update settings for one console or all consoles.\n     *\n     * @param panel Optional - single console to update.\n     */\n    async function updateSettings(panel) {\n        clearCellsOnExecute = (await settingRegistry.get(pluginId, 'clearCellsOnExecute')).composite;\n        clearCodeContentOnExecute = (await settingRegistry.get(pluginId, 'clearCodeContentOnExecute')).composite;\n        hideCodeInput = (await settingRegistry.get(pluginId, 'hideCodeInput'))\n            .composite;\n        interactionMode = (await settingRegistry.get(pluginId, 'interactionMode'))\n            .composite;\n        promptCellConfig = (await settingRegistry.get(pluginId, 'promptCellConfig'))\n            .composite;\n        promptCellPosition = (await settingRegistry.get(pluginId, 'promptCellPosition')).composite;\n        showBanner = (await settingRegistry.get(pluginId, 'showBanner'))\n            .composite;\n        const setWidgetOptions = (widget) => {\n            var _a, _b;\n            widget.console.node.dataset.jpInteractionMode = interactionMode;\n            // Update future promptCells\n            widget.console.editorConfig = promptCellConfig;\n            // Update promptCell already on screen\n            (_b = (_a = widget.console.promptCell) === null || _a === void 0 ? void 0 : _a.editor) === null || _b === void 0 ? void 0 : _b.setOptions(promptCellConfig);\n            // Set other config options\n            widget.console.setConfig({\n                clearCellsOnExecute,\n                clearCodeContentOnExecute,\n                hideCodeInput,\n                promptCellPosition,\n                showBanner\n            });\n        };\n        if (panel) {\n            setWidgetOptions(panel);\n        }\n        else {\n            tracker.forEach(setWidgetOptions);\n        }\n    }\n    settingRegistry.pluginChanged.connect((sender, plugin) => {\n        if (plugin === pluginId) {\n            void updateSettings();\n        }\n    });\n    await updateSettings();\n    if (formRegistry) {\n        const CMRenderer = formRegistry.getRenderer('@jupyterlab/codemirror-extension:plugin.defaultConfig');\n        if (CMRenderer) {\n            formRegistry.addRenderer('@jupyterlab/console-extension:tracker.promptCellConfig', CMRenderer);\n        }\n    }\n    // Apply settings when a console is created.\n    tracker.widgetAdded.connect((sender, panel) => {\n        void updateSettings(panel);\n    });\n    commands.addCommand(CommandIDs.autoClosingBrackets, {\n        execute: async (args) => {\n            var _a;\n            promptCellConfig.autoClosingBrackets = !!((_a = args['force']) !== null && _a !== void 0 ? _a : !promptCellConfig.autoClosingBrackets);\n            await settingRegistry.set(pluginId, 'promptCellConfig', promptCellConfig);\n        },\n        label: trans.__('Auto Close Brackets for Code Console Prompt'),\n        isToggled: () => promptCellConfig.autoClosingBrackets\n    });\n    /**\n     * Whether there is an active console.\n     */\n    function isEnabled() {\n        return (tracker.currentWidget !== null &&\n            tracker.currentWidget === shell.currentWidget);\n    }\n    commands.addCommand(CommandIDs.open, {\n        label: trans.__('Open a console for the provided `path`.'),\n        execute: (args) => {\n            const path = args['path'];\n            const widget = tracker.find(value => {\n                var _a;\n                return ((_a = value.console.sessionContext.session) === null || _a === void 0 ? void 0 : _a.path) === path;\n            });\n            if (widget) {\n                if (args.activate !== false) {\n                    shell.activateById(widget.id);\n                }\n                return widget;\n            }\n            else {\n                return manager.ready.then(() => {\n                    const model = find(manager.sessions.running(), item => {\n                        return item.path === path;\n                    });\n                    if (model) {\n                        return createConsole(args);\n                    }\n                    return Promise.reject(`No running kernel session for path: ${path}`);\n                });\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.create, {\n        label: args => {\n            var _a, _b, _c, _d;\n            if (args['isPalette']) {\n                return trans.__('New Console');\n            }\n            else if (args['isLauncher'] && args['kernelPreference']) {\n                const kernelPreference = args['kernelPreference'];\n                // TODO: Lumino command functions should probably be allowed to return undefined?\n                return ((_d = (_c = (_b = (_a = manager.kernelspecs) === null || _a === void 0 ? void 0 : _a.specs) === null || _b === void 0 ? void 0 : _b.kernelspecs[kernelPreference.name || '']) === null || _c === void 0 ? void 0 : _c.display_name) !== null && _d !== void 0 ? _d : '');\n            }\n            return trans.__('Console');\n        },\n        icon: args => (args['isPalette'] ? undefined : consoleIcon),\n        execute: args => {\n            var _a;\n            const basePath = (_a = (args['basePath'] ||\n                args['cwd'] ||\n                (filebrowser === null || filebrowser === void 0 ? void 0 : filebrowser.model.path))) !== null && _a !== void 0 ? _a : '';\n            return createConsole({ basePath, ...args });\n        }\n    });\n    // Get the current widget and activate unless the args specify otherwise.\n    function getCurrent(args) {\n        var _a;\n        const widget = args[SemanticCommand.WIDGET]\n            ? (_a = tracker.find(panel => panel.id === args[SemanticCommand.WIDGET])) !== null && _a !== void 0 ? _a : null\n            : tracker.currentWidget;\n        const activate = args['activate'] !== false;\n        if (activate && widget) {\n            shell.activateById(widget.id);\n        }\n        return widget;\n    }\n    /**\n     * Create commands to change the position of the prompt cell.\n     */\n    const iconMap = {\n        top: dockTopIcon,\n        bottom: dockBottomIcon,\n        right: dockRightIcon,\n        left: dockLeftIcon\n    };\n    promptCellPositions.forEach((position) => {\n        const command = `console:prompt-to-${position}`;\n        commands.addCommand(command, {\n            execute: args => {\n                const current = getCurrent(args);\n                if (!current) {\n                    return;\n                }\n                current.console.setConfig({ promptCellPosition: position });\n            },\n            isEnabled: isEnabled,\n            label: trans.__(`Prompt to ${position}`),\n            icon: args => (args['isPalette'] ? undefined : iconMap[position])\n        });\n        if (palette) {\n            palette.addItem({\n                command,\n                category,\n                args: { isPalette: true }\n            });\n        }\n    });\n    /**\n     * Add undo command\n     */\n    commands.addCommand(CommandIDs.undo, {\n        execute: args => {\n            var _a;\n            const current = getCurrent(args);\n            if (!current) {\n                return;\n            }\n            const editor = (_a = current.console.promptCell) === null || _a === void 0 ? void 0 : _a.editor;\n            if (!editor) {\n                return;\n            }\n            editor.undo();\n        },\n        isEnabled: args => {\n            var _a, _b, _c;\n            if (!isEnabled()) {\n                return false;\n            }\n            const editor = (_c = (_b = (_a = getCurrent(args)) === null || _a === void 0 ? void 0 : _a.console) === null || _b === void 0 ? void 0 : _b.promptCell) === null || _c === void 0 ? void 0 : _c.editor;\n            if (!editor) {\n                return false;\n            }\n            return editor.model.sharedModel.canUndo();\n        },\n        icon: undoIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: trans.__('Undo')\n    });\n    /**\n     * Add redo command\n     */\n    commands.addCommand(CommandIDs.redo, {\n        execute: args => {\n            var _a;\n            const current = getCurrent(args);\n            if (!current) {\n                return;\n            }\n            const editor = (_a = current.console.promptCell) === null || _a === void 0 ? void 0 : _a.editor;\n            if (!editor) {\n                return;\n            }\n            editor.redo();\n        },\n        isEnabled: args => {\n            var _a, _b, _c;\n            if (!isEnabled()) {\n                return false;\n            }\n            const editor = (_c = (_b = (_a = getCurrent(args)) === null || _a === void 0 ? void 0 : _a.console) === null || _b === void 0 ? void 0 : _b.promptCell) === null || _c === void 0 ? void 0 : _c.editor;\n            if (!editor) {\n                return false;\n            }\n            return editor.model.sharedModel.canRedo();\n        },\n        icon: redoIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: trans.__('Redo')\n    });\n    commands.addCommand(CommandIDs.clear, {\n        label: trans.__('Clear Console Cells'),\n        icon: args => (args.toolbar ? clearIcon : undefined),\n        execute: args => {\n            const current = getCurrent(args);\n            if (!current) {\n                return;\n            }\n            current.console.clear();\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.runUnforced, {\n        label: trans.__('Run Cell (unforced)'),\n        icon: args => (args.toolbar ? runIcon : undefined),\n        execute: args => {\n            const current = getCurrent(args);\n            if (!current) {\n                return;\n            }\n            return current.console.execute();\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.runForced, {\n        label: trans.__('Run Cell (forced)'),\n        icon: args => (args.toolbar ? runIcon : undefined),\n        execute: args => {\n            const current = getCurrent(args);\n            if (!current) {\n                return;\n            }\n            return current.console.execute(true);\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.linebreak, {\n        label: trans.__('Insert Line Break'),\n        execute: args => {\n            const current = getCurrent(args);\n            if (!current) {\n                return;\n            }\n            current.console.insertLinebreak();\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.replaceSelection, {\n        label: trans.__('Replace Selection in Console'),\n        execute: args => {\n            const current = getCurrent(args);\n            if (!current) {\n                return;\n            }\n            const text = args['text'] || '';\n            current.console.replaceSelection(text);\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.interrupt, {\n        label: trans.__('Interrupt Kernel'),\n        execute: args => {\n            var _a;\n            const current = getCurrent(args);\n            if (!current) {\n                return;\n            }\n            const kernel = (_a = current.console.sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel;\n            if (kernel) {\n                return kernel.interrupt();\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.restart, {\n        label: trans.__('Restart Kernel…'),\n        icon: args => (args.toolbar ? refreshIcon : undefined),\n        execute: args => {\n            const current = getCurrent(args);\n            if (!current) {\n                return;\n            }\n            return sessionDialogs.restart(current.console.sessionContext);\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.shutdown, {\n        label: trans.__('Shut Down'),\n        execute: args => {\n            const current = getCurrent(args);\n            if (!current) {\n                return;\n            }\n            return current.console.sessionContext.shutdown();\n        }\n    });\n    commands.addCommand(CommandIDs.closeAndShutdown, {\n        label: trans.__('Close and Shut Down…'),\n        execute: args => {\n            const current = getCurrent(args);\n            if (!current) {\n                return;\n            }\n            return showDialog({\n                title: trans.__('Shut down the console?'),\n                body: trans.__('Are you sure you want to close \"%1\"?', current.title.label),\n                buttons: [\n                    Dialog.cancelButton({\n                        ariaLabel: trans.__('Cancel console Shut Down')\n                    }),\n                    Dialog.warnButton({\n                        ariaLabel: trans.__('Confirm console Shut Down')\n                    })\n                ]\n            }).then(result => {\n                if (result.button.accept) {\n                    return commands\n                        .execute(CommandIDs.shutdown, { activate: false })\n                        .then(() => {\n                        current.dispose();\n                        return true;\n                    });\n                }\n                else {\n                    return false;\n                }\n            });\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.inject, {\n        label: trans.__('Inject some code in a console.'),\n        execute: args => {\n            const path = args['path'];\n            tracker.find(widget => {\n                var _a;\n                if (((_a = widget.console.sessionContext.session) === null || _a === void 0 ? void 0 : _a.path) === path) {\n                    if (args['activate'] !== false) {\n                        shell.activateById(widget.id);\n                    }\n                    void widget.console.inject(args['code'], args['metadata']);\n                    return true;\n                }\n                return false;\n            });\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.changeKernel, {\n        label: trans.__('Change Kernel…'),\n        execute: args => {\n            const current = getCurrent(args);\n            if (!current) {\n                return;\n            }\n            return sessionDialogs.selectKernel(current.console.sessionContext);\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.getKernel, {\n        label: trans.__('Get Kernel'),\n        execute: args => {\n            var _a;\n            const current = getCurrent({ activate: false, ...args });\n            if (!current) {\n                return;\n            }\n            return (_a = current.sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel;\n        },\n        isEnabled\n    });\n    // All commands with isEnabled defined directly or in a semantic commands\n    const skip = [CommandIDs.create];\n    const notify = () => {\n        Object.values(CommandIDs)\n            .filter(id => !skip.includes(id))\n            .forEach(id => app.commands.notifyCommandChanged(id));\n    };\n    tracker.currentChanged.connect(notify);\n    (_a = shell.currentChanged) === null || _a === void 0 ? void 0 : _a.connect(notify);\n    if (palette) {\n        // Add command palette items\n        [\n            CommandIDs.create,\n            CommandIDs.linebreak,\n            CommandIDs.clear,\n            CommandIDs.runUnforced,\n            CommandIDs.runForced,\n            CommandIDs.restart,\n            CommandIDs.interrupt,\n            CommandIDs.changeKernel,\n            CommandIDs.closeAndShutdown\n        ].forEach(command => {\n            palette.addItem({ command, category, args: { isPalette: true } });\n        });\n    }\n    if (mainMenu) {\n        // Add a close and shutdown command to the file menu.\n        mainMenu.fileMenu.closeAndCleaners.add({\n            id: CommandIDs.closeAndShutdown,\n            isEnabled\n        });\n        // Add a kernel user to the Kernel menu\n        mainMenu.kernelMenu.kernelUsers.changeKernel.add({\n            id: CommandIDs.changeKernel,\n            isEnabled\n        });\n        mainMenu.kernelMenu.kernelUsers.clearWidget.add({\n            id: CommandIDs.clear,\n            isEnabled\n        });\n        mainMenu.kernelMenu.kernelUsers.interruptKernel.add({\n            id: CommandIDs.interrupt,\n            isEnabled\n        });\n        mainMenu.kernelMenu.kernelUsers.restartKernel.add({\n            id: CommandIDs.restart,\n            isEnabled\n        });\n        mainMenu.kernelMenu.kernelUsers.shutdownKernel.add({\n            id: CommandIDs.shutdown,\n            isEnabled\n        });\n        // Add a code runner to the Run menu.\n        mainMenu.runMenu.codeRunners.run.add({\n            id: CommandIDs.runForced,\n            isEnabled\n        });\n        // Add a clearer to the edit menu\n        mainMenu.editMenu.clearers.clearCurrent.add({\n            id: CommandIDs.clear,\n            isEnabled\n        });\n        // Add undo/redo hooks to the edit menu.\n        mainMenu.editMenu.undoers.redo.add({\n            id: CommandIDs.redo,\n            isEnabled\n        });\n        mainMenu.editMenu.undoers.undo.add({\n            id: CommandIDs.undo,\n            isEnabled\n        });\n        // Add kernel information to the application help menu.\n        mainMenu.helpMenu.getKernel.add({\n            id: CommandIDs.getKernel,\n            isEnabled\n        });\n    }\n    // For backwards compatibility and clarity, we explicitly label the run\n    // keystroke with the actual effected change, rather than the generic\n    // \"notebook\" or \"terminal\" interaction mode. When this interaction mode\n    // affects more than just the run keystroke, we can make this menu title more\n    // generic.\n    const runShortcutTitles = {\n        notebook: trans.__('Execute with Shift+Enter'),\n        terminal: trans.__('Execute with Enter')\n    };\n    // Add the execute keystroke setting submenu.\n    commands.addCommand(CommandIDs.interactionMode, {\n        label: args => {\n            var _a;\n            return (_a = runShortcutTitles[args['interactionMode']]) !== null && _a !== void 0 ? _a : 'Set the console interaction mode.';\n        },\n        execute: async (args) => {\n            const key = 'keyMap';\n            try {\n                await settingRegistry.set(pluginId, 'interactionMode', args['interactionMode']);\n            }\n            catch (reason) {\n                console.error(`Failed to set ${pluginId}:${key} - ${reason.message}`);\n            }\n        },\n        isToggled: args => args['interactionMode'] === interactionMode\n    });\n    return tracker;\n}\n/**\n * Activate the completer service for console.\n */\nfunction activateConsoleCompleterService(app, consoles, manager, translator, appSanitizer) {\n    if (!manager) {\n        return;\n    }\n    const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n    const sanitizer = appSanitizer !== null && appSanitizer !== void 0 ? appSanitizer : new Sanitizer();\n    app.commands.addCommand(CommandIDs.invokeCompleter, {\n        label: trans.__('Display the completion helper.'),\n        execute: () => {\n            const id = consoles.currentWidget && consoles.currentWidget.id;\n            if (id) {\n                return manager.invoke(id);\n            }\n        }\n    });\n    app.commands.addCommand(CommandIDs.selectCompleter, {\n        label: trans.__('Select the completion suggestion.'),\n        execute: () => {\n            const id = consoles.currentWidget && consoles.currentWidget.id;\n            if (id) {\n                return manager.select(id);\n            }\n        }\n    });\n    app.commands.addKeyBinding({\n        command: CommandIDs.selectCompleter,\n        keys: ['Enter'],\n        selector: '.jp-ConsolePanel .jp-mod-completer-active'\n    });\n    const updateCompleter = async (_, consolePanel) => {\n        var _a, _b;\n        const completerContext = {\n            editor: (_b = (_a = consolePanel.console.promptCell) === null || _a === void 0 ? void 0 : _a.editor) !== null && _b !== void 0 ? _b : null,\n            session: consolePanel.console.sessionContext.session,\n            widget: consolePanel\n        };\n        await manager.updateCompleter(completerContext);\n        consolePanel.console.promptCellCreated.connect((codeConsole, cell) => {\n            const newContext = {\n                editor: cell.editor,\n                session: codeConsole.sessionContext.session,\n                widget: consolePanel,\n                sanitzer: sanitizer\n            };\n            manager.updateCompleter(newContext).catch(console.error);\n        });\n        consolePanel.console.sessionContext.sessionChanged.connect(() => {\n            var _a, _b;\n            const newContext = {\n                editor: (_b = (_a = consolePanel.console.promptCell) === null || _a === void 0 ? void 0 : _a.editor) !== null && _b !== void 0 ? _b : null,\n                session: consolePanel.console.sessionContext.session,\n                widget: consolePanel,\n                sanitizer: sanitizer\n            };\n            manager.updateCompleter(newContext).catch(console.error);\n        });\n    };\n    consoles.widgetAdded.connect(updateCompleter);\n    manager.activeProvidersChanged.connect(() => {\n        consoles.forEach(consoleWidget => {\n            updateCompleter(undefined, consoleWidget).catch(e => console.error(e));\n        });\n    });\n}\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/completer/style/index.js';\nimport '@jupyterlab/filebrowser/style/index.js';\nimport '@jupyterlab/console/style/index.js';\nimport '@jupyterlab/launcher/style/index.js';\nimport '@jupyterlab/mainmenu/style/index.js';\n\nimport './base.css';\n","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { CodeCell } from '@jupyterlab/cells';\n/**\n * Run a console cell.\n *\n * @param options Cell execution options\n * @returns Execution status\n */\nexport async function runCell({ cell, onCellExecuted, sessionContext }) {\n    const onSuccess = (value) => {\n        if (value && value.content.status === 'ok') {\n            const content = value.content;\n            // Use deprecated payloads for backwards compatibility.\n            if (content.payload && content.payload.length) {\n                const setNextInput = content.payload.filter(i => {\n                    return i.source === 'set_next_input';\n                })[0];\n                if (setNextInput) {\n                    const text = setNextInput.text;\n                    // Ignore the `replace` value and always set the next cell.\n                    cell.model.sharedModel.setSource(text);\n                }\n            }\n            onCellExecuted({\n                cell,\n                executionDate: new Date(),\n                success: true\n            });\n            return true;\n        }\n        else if (value && value.content.status === 'error') {\n            const errorName = value.content.ename;\n            const errorValue = value.content.evalue;\n            onCellExecuted({\n                cell,\n                executionDate: new Date(),\n                success: false,\n                error: new Error(`KernelReplyNotOK: ${errorName} ${errorValue}`)\n            });\n            return false;\n        }\n        onCellExecuted({\n            cell,\n            executionDate: new Date(),\n            success: false\n        });\n        return false;\n    };\n    const onFailure = (reason) => {\n        onCellExecuted({\n            cell,\n            executionDate: new Date(),\n            success: false,\n            error: new Error(reason)\n        });\n        return false;\n    };\n    return CodeCell.execute(cell, sessionContext).then(onSuccess, onFailure);\n}\n//# sourceMappingURL=cellexecutor.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\nconst FOREIGN_CELL_CLASS = 'jp-CodeConsole-foreignCell';\n/**\n * A handler for capturing API messages from other sessions that should be\n * rendered in a given parent.\n */\nexport class ForeignHandler {\n    /**\n     * Construct a new foreign message handler.\n     */\n    constructor(options) {\n        this._enabled = false;\n        this._isDisposed = false;\n        this.sessionContext = options.sessionContext;\n        this.sessionContext.iopubMessage.connect(this.onIOPubMessage, this);\n        this._parent = options.parent;\n    }\n    /**\n     * Set whether the handler is able to inject foreign cells into a console.\n     */\n    get enabled() {\n        return this._enabled;\n    }\n    set enabled(value) {\n        this._enabled = value;\n    }\n    /**\n     * The foreign handler's parent receiver.\n     */\n    get parent() {\n        return this._parent;\n    }\n    /**\n     * Test whether the handler is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose the resources held by the handler.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n    }\n    /**\n     * Handler IOPub messages.\n     *\n     * @returns `true` if the message resulted in a new cell injection or a\n     * previously injected cell being updated and `false` for all other messages.\n     */\n    onIOPubMessage(sender, msg) {\n        var _a;\n        // Only process messages if foreign cell injection is enabled.\n        if (!this._enabled) {\n            return false;\n        }\n        const kernel = (_a = this.sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel;\n        if (!kernel) {\n            return false;\n        }\n        // Check whether this message came from an external session.\n        const parent = this._parent;\n        const session = msg.parent_header.session;\n        if (session === kernel.clientId) {\n            return false;\n        }\n        const msgType = msg.header.msg_type;\n        const parentHeader = msg.parent_header;\n        const parentMsgId = parentHeader.msg_id;\n        let cell;\n        switch (msgType) {\n            case 'execute_input': {\n                const inputMsg = msg;\n                cell = this._newCell(parentMsgId);\n                const model = cell.model;\n                model.executionCount = inputMsg.content.execution_count;\n                model.sharedModel.setSource(inputMsg.content.code);\n                model.trusted = true;\n                parent.update();\n                return true;\n            }\n            case 'execute_result':\n            case 'display_data':\n            case 'stream':\n            case 'error': {\n                cell = this._parent.getCell(parentMsgId);\n                if (!cell) {\n                    return false;\n                }\n                const output = {\n                    ...msg.content,\n                    output_type: msgType\n                };\n                cell.model.outputs.add(output);\n                parent.update();\n                return true;\n            }\n            case 'clear_output': {\n                const wait = msg.content.wait;\n                cell = this._parent.getCell(parentMsgId);\n                if (cell) {\n                    cell.model.outputs.clear(wait);\n                }\n                return true;\n            }\n            default:\n                return false;\n        }\n    }\n    /**\n     * Create a new code cell for an input originated from a foreign session.\n     */\n    _newCell(parentMsgId) {\n        const cell = this.parent.createCodeCell();\n        cell.addClass(FOREIGN_CELL_CLASS);\n        this._parent.addCell(cell, parentMsgId);\n        return cell;\n    }\n}\n//# sourceMappingURL=foreign.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\n/**\n * A console history manager object.\n */\nexport class ConsoleHistory {\n    /**\n     * Construct a new console history object.\n     */\n    constructor(options) {\n        this._cursor = 0;\n        this._hasSession = false;\n        this._history = [];\n        this._placeholder = '';\n        this._setByHistory = false;\n        this._isDisposed = false;\n        this._editor = null;\n        this._filtered = [];\n        const { sessionContext } = options;\n        if (sessionContext) {\n            this.sessionContext = sessionContext;\n            void this._handleKernel();\n            this.sessionContext.kernelChanged.connect(this._handleKernel, this);\n        }\n    }\n    /**\n     * The current editor used by the history manager.\n     */\n    get editor() {\n        return this._editor;\n    }\n    set editor(value) {\n        if (this._editor === value) {\n            return;\n        }\n        const prev = this._editor;\n        if (prev) {\n            prev.edgeRequested.disconnect(this.onEdgeRequest, this);\n            prev.model.sharedModel.changed.disconnect(this.onTextChange, this);\n        }\n        this._editor = value;\n        if (value) {\n            value.edgeRequested.connect(this.onEdgeRequest, this);\n            value.model.sharedModel.changed.connect(this.onTextChange, this);\n        }\n    }\n    /**\n     * The placeholder text that a history session began with.\n     */\n    get placeholder() {\n        return this._placeholder;\n    }\n    /**\n     * Get whether the console history manager is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the console history manager.\n     */\n    dispose() {\n        this._isDisposed = true;\n        this._history.length = 0;\n        Signal.clearData(this);\n    }\n    /**\n     * Get the previous item in the console history.\n     *\n     * @param placeholder - The placeholder string that gets temporarily added\n     * to the history only for the duration of one history session. If multiple\n     * placeholders are sent within a session, only the first one is accepted.\n     *\n     * @returns A Promise for console command text or `undefined` if unavailable.\n     */\n    back(placeholder) {\n        if (!this._hasSession) {\n            this._hasSession = true;\n            this._placeholder = placeholder;\n            // Filter the history with the placeholder string.\n            this.setFilter(placeholder);\n            this._cursor = this._filtered.length - 1;\n        }\n        --this._cursor;\n        this._cursor = Math.max(0, this._cursor);\n        const content = this._filtered[this._cursor];\n        return Promise.resolve(content);\n    }\n    /**\n     * Get the next item in the console history.\n     *\n     * @param placeholder - The placeholder string that gets temporarily added\n     * to the history only for the duration of one history session. If multiple\n     * placeholders are sent within a session, only the first one is accepted.\n     *\n     * @returns A Promise for console command text or `undefined` if unavailable.\n     */\n    forward(placeholder) {\n        if (!this._hasSession) {\n            this._hasSession = true;\n            this._placeholder = placeholder;\n            // Filter the history with the placeholder string.\n            this.setFilter(placeholder);\n            this._cursor = this._filtered.length;\n        }\n        ++this._cursor;\n        this._cursor = Math.min(this._filtered.length - 1, this._cursor);\n        const content = this._filtered[this._cursor];\n        return Promise.resolve(content);\n    }\n    /**\n     * Add a new item to the bottom of history.\n     *\n     * @param item The item being added to the bottom of history.\n     *\n     * #### Notes\n     * If the item being added is undefined or empty, it is ignored. If the item\n     * being added is the same as the last item in history, it is ignored as well\n     * so that the console's history will consist of no contiguous repetitions.\n     */\n    push(item) {\n        if (item && item !== this._history[this._history.length - 1]) {\n            this._history.push(item);\n        }\n        this.reset();\n    }\n    /**\n     * Reset the history navigation state, i.e., start a new history session.\n     */\n    reset() {\n        this._cursor = this._history.length;\n        this._hasSession = false;\n        this._placeholder = '';\n    }\n    /**\n     * Populate the history collection on history reply from a kernel.\n     *\n     * @param value The kernel message history reply.\n     *\n     * #### Notes\n     * History entries have the shape:\n     * [session: number, line: number, input: string]\n     * Contiguous duplicates are stripped out of the API response.\n     */\n    onHistory(value) {\n        this._history.length = 0;\n        let last = '';\n        let current = '';\n        if (value.content.status === 'ok') {\n            for (let i = 0; i < value.content.history.length; i++) {\n                current = value.content.history[i][2];\n                if (current !== last) {\n                    this._history.push((last = current));\n                }\n            }\n        }\n        // Reset the history navigation cursor back to the bottom.\n        this._cursor = this._history.length;\n    }\n    /**\n     * Handle a text change signal from the editor.\n     */\n    onTextChange() {\n        if (this._setByHistory) {\n            this._setByHistory = false;\n            return;\n        }\n        this.reset();\n    }\n    /**\n     * Handle an edge requested signal.\n     */\n    onEdgeRequest(editor, location) {\n        const sharedModel = editor.model.sharedModel;\n        const source = sharedModel.getSource();\n        if (location === 'top' || location === 'topLine') {\n            void this.back(source).then(value => {\n                if (this.isDisposed || !value) {\n                    return;\n                }\n                if (sharedModel.getSource() === value) {\n                    return;\n                }\n                this._setByHistory = true;\n                sharedModel.setSource(value);\n                let columnPos = 0;\n                columnPos = value.indexOf('\\n');\n                if (columnPos < 0) {\n                    columnPos = value.length;\n                }\n                editor.setCursorPosition({ line: 0, column: columnPos });\n            });\n        }\n        else {\n            void this.forward(source).then(value => {\n                if (this.isDisposed) {\n                    return;\n                }\n                const text = value || this.placeholder;\n                if (sharedModel.getSource() === text) {\n                    return;\n                }\n                this._setByHistory = true;\n                sharedModel.setSource(text);\n                const pos = editor.getPositionAt(text.length);\n                if (pos) {\n                    editor.setCursorPosition(pos);\n                }\n            });\n        }\n    }\n    /**\n     * Handle the current kernel changing.\n     */\n    async _handleKernel() {\n        var _a, _b;\n        const kernel = (_b = (_a = this.sessionContext) === null || _a === void 0 ? void 0 : _a.session) === null || _b === void 0 ? void 0 : _b.kernel;\n        if (!kernel) {\n            this._history.length = 0;\n            return;\n        }\n        return kernel.requestHistory(Private.initialRequest).then(v => {\n            this.onHistory(v);\n        });\n    }\n    /**\n     * Set the filter data.\n     *\n     * @param filterStr - The string to use when filtering the data.\n     */\n    setFilter(filterStr = '') {\n        // Apply the new filter and remove contiguous duplicates.\n        this._filtered.length = 0;\n        let last = '';\n        let current = '';\n        for (let i = 0; i < this._history.length; i++) {\n            current = this._history[i];\n            if (current !== last &&\n                filterStr === current.slice(0, filterStr.length)) {\n                this._filtered.push((last = current));\n            }\n        }\n        this._filtered.push(filterStr);\n    }\n}\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    Private.initialRequest = {\n        output: false,\n        raw: true,\n        hist_access_type: 'tail',\n        n: 500\n    };\n})(Private || (Private = {}));\n//# sourceMappingURL=history.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { createStandaloneCell } from '@jupyter/ydoc';\nimport { DOMUtils } from '@jupyterlab/apputils';\nimport { Cell, CellDragUtils, CodeCell, CodeCellModel, isCodeCellModel, RawCell, RawCellModel } from '@jupyterlab/cells';\nimport { ObservableList } from '@jupyterlab/observables';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { MimeData } from '@lumino/coreutils';\nimport { Drag } from '@lumino/dragdrop';\nimport { Signal } from '@lumino/signaling';\nimport { Panel, PanelLayout, SplitPanel, Widget } from '@lumino/widgets';\nimport { runCell } from './cellexecutor';\nimport { ConsoleHistory } from './history';\n/**\n * The data attribute added to a widget that has an active kernel.\n */\nconst KERNEL_USER = 'jpKernelUser';\n/**\n * The data attribute added to a widget can run code.\n */\nconst CODE_RUNNER = 'jpCodeRunner';\n/**\n * The class name added to console widgets.\n */\nconst CONSOLE_CLASS = 'jp-CodeConsole';\n/**\n * The class added to console cells\n */\nconst CONSOLE_CELL_CLASS = 'jp-Console-cell';\n/**\n * The class name added to the console banner.\n */\nconst BANNER_CLASS = 'jp-CodeConsole-banner';\n/**\n * The class name of the active prompt cell.\n */\nconst PROMPT_CLASS = 'jp-CodeConsole-promptCell';\n/**\n * The class name of the panel that holds cell content.\n */\nconst CONTENT_CLASS = 'jp-CodeConsole-content';\n/**\n * The class name of the panel that holds prompts.\n */\nconst INPUT_CLASS = 'jp-CodeConsole-input';\n/**\n * The class name added to the console when an element within it is focused\n * and takes keyboard input, such as <input> and <div contenteditable>\n *\n * This class is also effective when the focused element is in shadow DOM.\n */\nconst READ_WRITE_CLASS = 'jp-mod-readWrite';\n/**\n * The timeout in ms for execution requests to the kernel.\n */\nconst EXECUTION_TIMEOUT = 250;\n/**\n * The mimetype used for Jupyter cell data.\n */\nconst JUPYTER_CELL_MIME = 'application/vnd.jupyter.cells';\n/**\n * The data attribute added to a widget that can undo.\n */\nconst UNDOER = 'jpUndoer';\n/**\n * A widget containing a Jupyter console.\n *\n * #### Notes\n * The CodeConsole class is intended to be used within a ConsolePanel\n * instance. Under most circumstances, it is not instantiated by user code.\n */\nexport class CodeConsole extends Widget {\n    /**\n     * Construct a console widget.\n     */\n    constructor(options) {\n        var _a, _b, _c;\n        super();\n        /**\n         * The configuration options for the text editor widget.\n         */\n        this.editorConfig = CodeConsole.defaultEditorConfig;\n        this._banner = null;\n        this._executed = new Signal(this);\n        this._config = {};\n        this._mimetype = 'text/x-ipython';\n        this._msgIds = new Map();\n        this._msgIdCells = new Map();\n        this._promptCellCreated = new Signal(this);\n        this._dragData = null;\n        this._drag = null;\n        this._focusedCell = null;\n        this._translator = (_a = options.translator) !== null && _a !== void 0 ? _a : nullTranslator;\n        this._executor = (_b = options.executor) !== null && _b !== void 0 ? _b : Object.freeze({ runCell });\n        this.addClass(CONSOLE_CLASS);\n        this.node.dataset[KERNEL_USER] = 'true';\n        this.node.dataset[CODE_RUNNER] = 'true';\n        this.node.dataset[UNDOER] = 'true';\n        this.node.tabIndex = -1; // Allow the widget to take focus.\n        // Create the panels that hold the content and input.\n        const layout = (this.layout = new PanelLayout());\n        this._cells = new ObservableList();\n        this._content = new Panel();\n        this._input = new Panel();\n        this._splitPanel = new SplitPanel({ spacing: 0 });\n        this._splitPanel.addClass('jp-CodeConsole-split');\n        this.contentFactory = options.contentFactory;\n        this.modelFactory = (_c = options.modelFactory) !== null && _c !== void 0 ? _c : CodeConsole.defaultModelFactory;\n        this.rendermime = options.rendermime;\n        this.sessionContext = options.sessionContext;\n        this._mimeTypeService = options.mimeTypeService;\n        // Add top-level CSS classes.\n        this._content.addClass(CONTENT_CLASS);\n        this._input.addClass(INPUT_CLASS);\n        layout.addWidget(this._splitPanel);\n        // initialize the console with defaults\n        this.setConfig({\n            clearCellsOnExecute: false,\n            clearCodeContentOnExecute: true,\n            hideCodeInput: false,\n            promptCellPosition: 'bottom',\n            showBanner: true\n        });\n        this._history = new ConsoleHistory({\n            sessionContext: this.sessionContext\n        });\n        void this._onKernelChanged();\n        this.sessionContext.kernelChanged.connect(this._onKernelChanged, this);\n        this.sessionContext.statusChanged.connect(this._onKernelStatusChanged, this);\n    }\n    /**\n     * A signal emitted when the console finished executing its prompt cell.\n     */\n    get executed() {\n        return this._executed;\n    }\n    /**\n     * A signal emitted when a new prompt cell is created.\n     */\n    get promptCellCreated() {\n        return this._promptCellCreated;\n    }\n    /**\n     * The list of content cells in the console.\n     *\n     * #### Notes\n     * This list does not include the current banner or the prompt for a console.\n     * It may include previous banners as raw cells.\n     */\n    get cells() {\n        return this._cells;\n    }\n    /*\n     * The console input prompt cell.\n     */\n    get promptCell() {\n        const inputLayout = this._input.layout;\n        return inputLayout.widgets[0] || null;\n    }\n    /**\n     * Add a new cell to the content panel.\n     *\n     * @param cell - The code cell widget being added to the content panel.\n     *\n     * @param msgId - The optional execution message id for the cell.\n     *\n     * #### Notes\n     * This method is meant for use by outside classes that want to add cells to a\n     * console. It is distinct from the `inject` method in that it requires\n     * rendered code cell widgets and does not execute them (though it can store\n     * the execution message id).\n     */\n    addCell(cell, msgId) {\n        if (this._config.clearCellsOnExecute) {\n            this.clear();\n        }\n        cell.addClass(CONSOLE_CELL_CLASS);\n        this._content.addWidget(cell);\n        this._cells.push(cell);\n        if (msgId) {\n            this._msgIds.set(msgId, cell);\n            this._msgIdCells.set(cell, msgId);\n        }\n        cell.disposed.connect(this._onCellDisposed, this);\n        this.update();\n    }\n    /**\n     * Add a banner cell.\n     */\n    addBanner() {\n        if (this._banner) {\n            // An old banner just becomes a normal cell now.\n            const cell = this._banner;\n            this._cells.push(this._banner);\n            cell.disposed.connect(this._onCellDisposed, this);\n        }\n        // Create the banner.\n        const model = this.modelFactory.createRawCell({\n            sharedModel: createStandaloneCell({\n                cell_type: 'raw',\n                source: '...'\n            })\n        });\n        const banner = (this._banner = new RawCell({\n            model,\n            contentFactory: this.contentFactory,\n            placeholder: false,\n            editorConfig: {\n                autoClosingBrackets: false,\n                codeFolding: false,\n                highlightActiveLine: false,\n                highlightTrailingWhitespace: false,\n                highlightWhitespace: false,\n                indentUnit: '4',\n                lineNumbers: false,\n                lineWrap: true,\n                matchBrackets: false,\n                readOnly: true,\n                rulers: [],\n                scrollPastEnd: false,\n                smartIndent: false,\n                tabSize: 4,\n                theme: 'jupyter'\n            }\n        })).initializeState();\n        banner.addClass(BANNER_CLASS);\n        banner.readOnly = true;\n        this._content.addWidget(banner);\n    }\n    /**\n     * Clear the code cells.\n     */\n    clear() {\n        // Dispose all the content cells\n        const cells = this._cells;\n        while (cells.length > 0) {\n            cells.get(0).dispose();\n        }\n    }\n    /**\n     * Create a new cell with the built-in factory.\n     */\n    createCodeCell() {\n        const factory = this.contentFactory;\n        const options = this._createCodeCellOptions();\n        const cell = factory.createCodeCell(options);\n        cell.readOnly = true;\n        cell.model.mimeType = this._mimetype;\n        return cell;\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        // Do nothing if already disposed.\n        if (this.isDisposed) {\n            return;\n        }\n        this._msgIdCells = null;\n        this._msgIds = null;\n        this._history.dispose();\n        super.dispose();\n    }\n    /**\n     * Execute the current prompt.\n     *\n     * @param force - Whether to force execution without checking code\n     * completeness.\n     *\n     * @param timeout - The length of time, in milliseconds, that the execution\n     * should wait for the API to determine whether code being submitted is\n     * incomplete before attempting submission anyway. The default value is `250`.\n     */\n    async execute(force = false, timeout = EXECUTION_TIMEOUT) {\n        var _a, _b;\n        if (((_b = (_a = this.sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel) === null || _b === void 0 ? void 0 : _b.status) === 'dead') {\n            return;\n        }\n        const promptCell = this.promptCell;\n        if (!promptCell) {\n            throw new Error('Cannot execute without a prompt cell');\n        }\n        promptCell.model.trusted = true;\n        if (force) {\n            // Create a new prompt cell before kernel execution to allow typeahead.\n            this.newPromptCell();\n            await this._execute(promptCell);\n            return;\n        }\n        // Check whether we should execute.\n        const shouldExecute = await this._shouldExecute(timeout);\n        if (this.isDisposed) {\n            return;\n        }\n        if (shouldExecute) {\n            // Create a new prompt cell before kernel execution to allow typeahead.\n            this.newPromptCell();\n            this.promptCell.editor.focus();\n            await this._execute(promptCell);\n        }\n        else {\n            // add a newline if we shouldn't execute\n            promptCell.editor.newIndentedLine();\n        }\n    }\n    /**\n     * Get a cell given a message id.\n     *\n     * @param msgId - The message id.\n     */\n    getCell(msgId) {\n        return this._msgIds.get(msgId);\n    }\n    /**\n     * Inject arbitrary code for the console to execute immediately.\n     *\n     * @param code - The code contents of the cell being injected.\n     *\n     * @returns A promise that indicates when the injected cell's execution ends.\n     */\n    inject(code, metadata = {}) {\n        const cell = this.createCodeCell();\n        cell.model.sharedModel.setSource(code);\n        for (const key of Object.keys(metadata)) {\n            cell.model.setMetadata(key, metadata[key]);\n        }\n        this.addCell(cell);\n        return this._execute(cell);\n    }\n    /**\n     * Insert a line break in the prompt cell.\n     */\n    insertLinebreak() {\n        const promptCell = this.promptCell;\n        if (!promptCell) {\n            return;\n        }\n        promptCell.editor.newIndentedLine();\n    }\n    /**\n     * Replaces the selected text in the prompt cell.\n     *\n     * @param text - The text to replace the selection.\n     */\n    replaceSelection(text) {\n        var _a, _b;\n        const promptCell = this.promptCell;\n        if (!promptCell) {\n            return;\n        }\n        (_b = (_a = promptCell.editor).replaceSelection) === null || _b === void 0 ? void 0 : _b.call(_a, text);\n    }\n    /**\n     * Set configuration options for the console.\n     */\n    setConfig(config) {\n        const { clearCellsOnExecute, clearCodeContentOnExecute, hideCodeInput, promptCellPosition, showBanner } = config;\n        this._config = {\n            clearCellsOnExecute: clearCellsOnExecute !== null && clearCellsOnExecute !== void 0 ? clearCellsOnExecute : this._config.clearCellsOnExecute,\n            clearCodeContentOnExecute: clearCodeContentOnExecute !== null && clearCodeContentOnExecute !== void 0 ? clearCodeContentOnExecute : this._config.clearCodeContentOnExecute,\n            hideCodeInput: hideCodeInput !== null && hideCodeInput !== void 0 ? hideCodeInput : this._config.hideCodeInput,\n            promptCellPosition: promptCellPosition !== null && promptCellPosition !== void 0 ? promptCellPosition : this._config.promptCellPosition,\n            showBanner: showBanner !== null && showBanner !== void 0 ? showBanner : this._config.showBanner\n        };\n        this._updateLayout();\n    }\n    /**\n     * Serialize the output.\n     *\n     * #### Notes\n     * This only serializes the code cells and the prompt cell if it exists, and\n     * skips any old banner cells.\n     */\n    serialize() {\n        const cells = [];\n        for (const cell of this._cells) {\n            const model = cell.model;\n            if (isCodeCellModel(model)) {\n                cells.push(model.toJSON());\n            }\n        }\n        if (this.promptCell) {\n            cells.push(this.promptCell.model.toJSON());\n        }\n        return cells;\n    }\n    /**\n     * Handle `mousedown` events for the widget.\n     */\n    _evtMouseDown(event) {\n        const { button, shiftKey } = event;\n        // We only handle main or secondary button actions.\n        if (!(button === 0 || button === 2) ||\n            // Shift right-click gives the browser default behavior.\n            (shiftKey && button === 2)) {\n            return;\n        }\n        let target = event.target;\n        const cellFilter = (node) => node.classList.contains(CONSOLE_CELL_CLASS);\n        let cellIndex = CellDragUtils.findCell(target, this._cells, cellFilter);\n        if (cellIndex === -1) {\n            // `event.target` sometimes gives an orphaned node in\n            // Firefox 57, which can have `null` anywhere in its parent line. If we fail\n            // to find a cell using `event.target`, try again using a target\n            // reconstructed from the position of the click event.\n            target = document.elementFromPoint(event.clientX, event.clientY);\n            cellIndex = CellDragUtils.findCell(target, this._cells, cellFilter);\n        }\n        if (cellIndex === -1) {\n            return;\n        }\n        const cell = this._cells.get(cellIndex);\n        const targetArea = CellDragUtils.detectTargetArea(cell, event.target);\n        if (targetArea === 'prompt') {\n            this._dragData = {\n                pressX: event.clientX,\n                pressY: event.clientY,\n                index: cellIndex\n            };\n            this._focusedCell = cell;\n            document.addEventListener('mouseup', this, true);\n            document.addEventListener('mousemove', this, true);\n            event.preventDefault();\n        }\n    }\n    /**\n     * Handle `mousemove` event of widget\n     */\n    _evtMouseMove(event) {\n        const data = this._dragData;\n        if (data &&\n            CellDragUtils.shouldStartDrag(data.pressX, data.pressY, event.clientX, event.clientY)) {\n            void this._startDrag(data.index, event.clientX, event.clientY);\n        }\n    }\n    /**\n     * Start a drag event\n     */\n    _startDrag(index, clientX, clientY) {\n        const cellModel = this._focusedCell.model;\n        const selected = [cellModel.toJSON()];\n        const dragImage = CellDragUtils.createCellDragImage(this._focusedCell, selected);\n        this._drag = new Drag({\n            mimeData: new MimeData(),\n            dragImage,\n            proposedAction: 'copy',\n            supportedActions: 'copy',\n            source: this\n        });\n        this._drag.mimeData.setData(JUPYTER_CELL_MIME, selected);\n        const textContent = cellModel.sharedModel.getSource();\n        this._drag.mimeData.setData('text/plain', textContent);\n        this._focusedCell = null;\n        document.removeEventListener('mousemove', this, true);\n        document.removeEventListener('mouseup', this, true);\n        return this._drag.start(clientX, clientY).then(() => {\n            if (this.isDisposed) {\n                return;\n            }\n            this._drag = null;\n            this._dragData = null;\n        });\n    }\n    /**\n     * Handle the DOM events for the widget.\n     *\n     * @param event -The DOM event sent to the widget.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the notebook panel's node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'keydown':\n                this._evtKeyDown(event);\n                break;\n            case 'mousedown':\n                this._evtMouseDown(event);\n                break;\n            case 'mousemove':\n                this._evtMouseMove(event);\n                break;\n            case 'mouseup':\n                this._evtMouseUp(event);\n                break;\n            case 'resize':\n                this._splitPanel.fit();\n                break;\n            case 'focusin':\n                this._evtFocusIn(event);\n                break;\n            case 'focusout':\n                this._evtFocusOut(event);\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Handle `after_attach` messages for the widget.\n     */\n    onAfterAttach(msg) {\n        const node = this.node;\n        node.addEventListener('keydown', this, true);\n        node.addEventListener('click', this);\n        node.addEventListener('mousedown', this);\n        node.addEventListener('focusin', this);\n        node.addEventListener('focusout', this);\n        // Create a prompt if necessary.\n        if (!this.promptCell) {\n            this.newPromptCell();\n        }\n        else {\n            this.promptCell.editor.focus();\n            this.update();\n        }\n    }\n    /**\n     * Handle `before-detach` messages for the widget.\n     */\n    onBeforeDetach(msg) {\n        const node = this.node;\n        node.removeEventListener('keydown', this, true);\n        node.removeEventListener('click', this);\n        node.removeEventListener('focusin', this);\n        node.removeEventListener('focusout', this);\n    }\n    /**\n     * Handle `'activate-request'` messages.\n     */\n    onActivateRequest(msg) {\n        const editor = this.promptCell && this.promptCell.editor;\n        if (editor) {\n            editor.focus();\n        }\n        this.update();\n    }\n    /**\n     * Make a new prompt cell.\n     */\n    newPromptCell() {\n        var _a, _b, _c, _d, _e;\n        let promptCell = this.promptCell;\n        const input = this._input;\n        const previousContent = (_a = promptCell === null || promptCell === void 0 ? void 0 : promptCell.model.sharedModel.getSource()) !== null && _a !== void 0 ? _a : '';\n        const previousCursorPosition = (_b = promptCell === null || promptCell === void 0 ? void 0 : promptCell.editor) === null || _b === void 0 ? void 0 : _b.getCursorPosition();\n        // Make the last prompt read-only, clear its signals, and move to content.\n        if (promptCell) {\n            promptCell.readOnly = true;\n            promptCell.removeClass(PROMPT_CLASS);\n            // Schedule execution of signal clearance to happen later so that\n            // the `readOnly` configuration gets updated before editor signals\n            // get disconnected (see `Cell.onUpdateRequest`).\n            const oldCell = promptCell;\n            requestIdleCallback(() => {\n                // Clear the signals to avoid memory leaks\n                Signal.clearData(oldCell.editor);\n            });\n            // Ensure to clear the cursor\n            (_c = promptCell.editor) === null || _c === void 0 ? void 0 : _c.blur();\n            const child = input.widgets[0];\n            child.parent = null;\n            if (this._config.hideCodeInput) {\n                (_d = promptCell.inputArea) === null || _d === void 0 ? void 0 : _d.setHidden(true);\n            }\n            this.addCell(promptCell);\n        }\n        // Create the new prompt cell.\n        const factory = this.contentFactory;\n        const options = this._createCodeCellOptions();\n        promptCell = factory.createCodeCell(options);\n        promptCell.model.mimeType = this._mimetype;\n        promptCell.addClass(PROMPT_CLASS);\n        // Add the prompt cell to the DOM, making `this.promptCell` valid again.\n        this._input.addWidget(promptCell);\n        this._history.editor = promptCell.editor;\n        if (!this._config.clearCodeContentOnExecute) {\n            promptCell.model.sharedModel.setSource(previousContent);\n            if (previousCursorPosition) {\n                (_e = promptCell.editor) === null || _e === void 0 ? void 0 : _e.setCursorPosition(previousCursorPosition);\n            }\n        }\n        this._promptCellCreated.emit(promptCell);\n    }\n    /**\n     * Handle `update-request` messages.\n     */\n    onUpdateRequest(msg) {\n        Private.scrollToBottom(this._content.node);\n    }\n    /**\n     * Handle the `'keydown'` event for the widget.\n     */\n    _evtKeyDown(event) {\n        const editor = this.promptCell && this.promptCell.editor;\n        if (!editor) {\n            return;\n        }\n        if (event.keyCode === 13 && !editor.hasFocus()) {\n            event.preventDefault();\n            editor.focus();\n        }\n        else if (event.keyCode === 27 && editor.hasFocus()) {\n            // Set to command mode\n            event.preventDefault();\n            event.stopPropagation();\n            this.node.focus();\n        }\n    }\n    /**\n     * Handle the `'mouseup'` event for the widget.\n     */\n    _evtMouseUp(event) {\n        if (this.promptCell &&\n            this.promptCell.node.contains(event.target)) {\n            this.promptCell.editor.focus();\n        }\n    }\n    /**\n     * Handle `focus` events for the widget.\n     */\n    _evtFocusIn(event) {\n        // Update read-write class state.\n        this._updateReadWrite();\n    }\n    /**\n     * Handle `focusout` events for the widget.\n     */\n    _evtFocusOut(event) {\n        // Update read-write class state.\n        this._updateReadWrite();\n    }\n    /**\n     * Execute the code in the current prompt cell.\n     */\n    async _execute(cell) {\n        const source = cell.model.sharedModel.getSource();\n        this._history.push(source);\n        // If the source of the console is just \"clear\", clear the console as we\n        // do in IPython or QtConsole.\n        if (source === 'clear' || source === '%clear') {\n            this.clear();\n            return Promise.resolve(void 0);\n        }\n        cell.model.contentChanged.connect(this.update, this);\n        const options = {\n            cell,\n            sessionContext: this.sessionContext,\n            onCellExecuted: (args) => {\n                this._executed.emit(args.executionDate);\n                if (args.error) {\n                    for (const cell of this._cells) {\n                        if (cell.model.executionCount === null) {\n                            cell.model.executionState = 'idle';\n                        }\n                    }\n                }\n            }\n        };\n        try {\n            await this._executor.runCell(options);\n        }\n        finally {\n            if (!this.isDisposed) {\n                cell.model.contentChanged.disconnect(this.update, this);\n                this.update();\n            }\n        }\n    }\n    /**\n     * Update the console based on the kernel info.\n     */\n    _handleInfo(info) {\n        if (info.status !== 'ok') {\n            if (this._banner) {\n                this._banner.model.sharedModel.setSource('Error in getting kernel banner');\n            }\n            return;\n        }\n        if (this._banner) {\n            this._banner.model.sharedModel.setSource(info.banner);\n        }\n        const lang = info.language_info;\n        this._mimetype = this._mimeTypeService.getMimeTypeByLanguage(lang);\n        if (this.promptCell) {\n            this.promptCell.model.mimeType = this._mimetype;\n        }\n    }\n    /**\n     * Create the options used to initialize a code cell widget.\n     */\n    _createCodeCellOptions() {\n        const contentFactory = this.contentFactory;\n        const modelFactory = this.modelFactory;\n        const model = modelFactory.createCodeCell({});\n        const rendermime = this.rendermime;\n        const editorConfig = this.editorConfig;\n        return {\n            model,\n            rendermime,\n            contentFactory,\n            editorConfig,\n            placeholder: false,\n            translator: this._translator\n        };\n    }\n    /**\n     * Handle cell disposed signals.\n     */\n    _onCellDisposed(sender, args) {\n        if (!this.isDisposed) {\n            this._cells.removeValue(sender);\n            const msgId = this._msgIdCells.get(sender);\n            if (msgId) {\n                this._msgIdCells.delete(sender);\n                this._msgIds.delete(msgId);\n            }\n        }\n    }\n    /**\n     * Test whether we should execute the prompt cell.\n     */\n    _shouldExecute(timeout) {\n        const promptCell = this.promptCell;\n        if (!promptCell) {\n            return Promise.resolve(false);\n        }\n        const model = promptCell.model;\n        const code = model.sharedModel.getSource();\n        return new Promise((resolve, reject) => {\n            var _a;\n            const timer = setTimeout(() => {\n                resolve(true);\n            }, timeout);\n            const kernel = (_a = this.sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel;\n            if (!kernel) {\n                resolve(false);\n                return;\n            }\n            kernel\n                .requestIsComplete({ code })\n                .then(isComplete => {\n                clearTimeout(timer);\n                if (this.isDisposed) {\n                    resolve(false);\n                }\n                if (isComplete.content.status !== 'incomplete') {\n                    resolve(true);\n                    return;\n                }\n                resolve(false);\n            })\n                .catch(() => {\n                resolve(true);\n            });\n        });\n    }\n    /**\n     * Handle a change to the kernel.\n     */\n    async _onKernelChanged() {\n        var _a;\n        this.clear();\n        if (this._banner) {\n            this._banner.dispose();\n            this._banner = null;\n        }\n        if (this._config.showBanner) {\n            this.addBanner();\n        }\n        if ((_a = this.sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel) {\n            this._handleInfo(await this.sessionContext.session.kernel.info);\n        }\n    }\n    /**\n     * Handle a change to the kernel status.\n     */\n    async _onKernelStatusChanged() {\n        var _a;\n        const kernel = (_a = this.sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel;\n        if ((kernel === null || kernel === void 0 ? void 0 : kernel.status) === 'restarting') {\n            if (this._config.showBanner) {\n                this.addBanner();\n            }\n            this._handleInfo(await (kernel === null || kernel === void 0 ? void 0 : kernel.info));\n        }\n    }\n    /**\n     * Update the console node with class indicating read-write state.\n     */\n    _updateReadWrite() {\n        // TODO: de-duplicate with code in notebook/src/widget.ts\n        const inReadWrite = DOMUtils.hasActiveEditableElement(this.node);\n        this.node.classList.toggle(READ_WRITE_CLASS, inReadWrite);\n    }\n    /**\n     * Update the layout of the code console.\n     */\n    _updateLayout() {\n        const { promptCellPosition = 'bottom' } = this._config;\n        this._splitPanel.orientation = ['left', 'right'].includes(promptCellPosition)\n            ? 'horizontal'\n            : 'vertical';\n        // Insert the content and input panes into the widget.\n        SplitPanel.setStretch(this._content, 1);\n        SplitPanel.setStretch(this._input, 1);\n        if (promptCellPosition === 'bottom' || promptCellPosition === 'right') {\n            this._splitPanel.insertWidget(0, this._content);\n            this._splitPanel.insertWidget(1, this._input);\n        }\n        else {\n            this._splitPanel.insertWidget(0, this._input);\n            this._splitPanel.insertWidget(1, this._content);\n        }\n        // Default relative sizes\n        let sizes = [1, 1];\n        if (promptCellPosition === 'top') {\n            sizes = [1, 100];\n        }\n        else if (promptCellPosition === 'bottom') {\n            sizes = [100, 1];\n        }\n        this._splitPanel.setRelativeSizes(sizes);\n    }\n}\n/**\n * A namespace for CodeConsole statics.\n */\n(function (CodeConsole) {\n    /**\n     * Default console editor configuration\n     */\n    CodeConsole.defaultEditorConfig = {\n        codeFolding: false,\n        lineNumbers: false\n    };\n    /**\n     * Default implementation of `IContentFactory`.\n     */\n    class ContentFactory extends Cell.ContentFactory {\n        /**\n         * Create a new code cell widget.\n         *\n         * #### Notes\n         * If no cell content factory is passed in with the options, the one on the\n         * notebook content factory is used.\n         */\n        createCodeCell(options) {\n            return new CodeCell(options).initializeState();\n        }\n        /**\n         * Create a new raw cell widget.\n         *\n         * #### Notes\n         * If no cell content factory is passed in with the options, the one on the\n         * notebook content factory is used.\n         */\n        createRawCell(options) {\n            return new RawCell(options).initializeState();\n        }\n    }\n    CodeConsole.ContentFactory = ContentFactory;\n    /**\n     * The default implementation of an `IModelFactory`.\n     */\n    class ModelFactory {\n        /**\n         * Create a new cell model factory.\n         */\n        constructor(options = {}) {\n            this.codeCellContentFactory =\n                options.codeCellContentFactory || CodeCellModel.defaultContentFactory;\n        }\n        /**\n         * Create a new code cell.\n         * @param options - The data to use for the original source data.\n         * @returns A new code cell. If a source cell is provided, the\n        new cell will be initialized with the data from the source.\n        If the contentFactory is not provided, the instance\n        `codeCellContentFactory` will be used.\n         */\n        createCodeCell(options = {}) {\n            if (!options.contentFactory) {\n                options.contentFactory = this.codeCellContentFactory;\n            }\n            return new CodeCellModel(options);\n        }\n        /**\n         * Create a new raw cell.\n         * @param options - The data to use for the original source data.\n         * @returns A new raw cell. If a source cell is provided, the\n        new cell will be initialized with the data from the source.\n         */\n        createRawCell(options) {\n            return new RawCellModel(options);\n        }\n    }\n    CodeConsole.ModelFactory = ModelFactory;\n    /**\n     * The default `ModelFactory` instance.\n     */\n    CodeConsole.defaultModelFactory = new ModelFactory({});\n})(CodeConsole || (CodeConsole = {}));\n/**\n * A namespace for console widget private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Jump to the bottom of a node.\n     *\n     * @param node - The scrollable element.\n     */\n    function scrollToBottom(node) {\n        node.scrollTop = node.scrollHeight - node.clientHeight;\n    }\n    Private.scrollToBottom = scrollToBottom;\n})(Private || (Private = {}));\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { MainAreaWidget, SessionContext, SessionContextDialogs } from '@jupyterlab/apputils';\nimport { PathExt, Time } from '@jupyterlab/coreutils';\nimport { RenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { consoleIcon } from '@jupyterlab/ui-components';\nimport { Token, UUID } from '@lumino/coreutils';\nimport { Panel } from '@lumino/widgets';\nimport { CodeConsole } from './widget';\n/**\n * The class name added to console panels.\n */\nconst PANEL_CLASS = 'jp-ConsolePanel';\n/**\n * A panel which contains a console and the ability to add other children.\n */\nexport class ConsolePanel extends MainAreaWidget {\n    /**\n     * Construct a console panel.\n     */\n    constructor(options) {\n        super({ content: new Panel() });\n        this._executed = null;\n        this._connected = null;\n        this.addClass(PANEL_CLASS);\n        let { executor, rendermime, mimeTypeService, path, basePath, name, manager, modelFactory, sessionContext, translator } = options;\n        this.translator = translator !== null && translator !== void 0 ? translator : nullTranslator;\n        const trans = this.translator.load('jupyterlab');\n        const contentFactory = (this.contentFactory = options.contentFactory);\n        const count = Private.count++;\n        if (!path) {\n            path = PathExt.join(basePath || '', `console-${count}-${UUID.uuid4()}`);\n        }\n        sessionContext = this._sessionContext =\n            sessionContext !== null && sessionContext !== void 0 ? sessionContext : new SessionContext({\n                kernelManager: manager.kernels,\n                sessionManager: manager.sessions,\n                specsManager: manager.kernelspecs,\n                path: manager.contents.localPath(path),\n                name: name || trans.__('Console %1', count),\n                type: 'console',\n                kernelPreference: options.kernelPreference,\n                setBusy: options.setBusy\n            });\n        const resolver = new RenderMimeRegistry.UrlResolver({\n            path,\n            contents: manager.contents\n        });\n        rendermime = rendermime.clone({ resolver });\n        this.console = contentFactory.createConsole({\n            executor,\n            rendermime,\n            sessionContext: sessionContext,\n            mimeTypeService,\n            contentFactory,\n            modelFactory,\n            translator\n        });\n        this.content.addWidget(this.console);\n        void sessionContext.initialize().then(async (value) => {\n            var _a;\n            if (value) {\n                await ((_a = options.sessionDialogs) !== null && _a !== void 0 ? _a : new SessionContextDialogs({ translator })).selectKernel(sessionContext);\n            }\n            this._connected = new Date();\n            this._updateTitlePanel();\n        });\n        this.console.executed.connect(this._onExecuted, this);\n        this._updateTitlePanel();\n        sessionContext.kernelChanged.connect(this._updateTitlePanel, this);\n        sessionContext.propertyChanged.connect(this._updateTitlePanel, this);\n        this.title.icon = consoleIcon;\n        this.title.closable = true;\n        this.id = `console-${count}`;\n    }\n    /**\n     * The session used by the panel.\n     */\n    get sessionContext() {\n        return this._sessionContext;\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        this.sessionContext.dispose();\n        this.console.dispose();\n        super.dispose();\n    }\n    /**\n     * Handle `'activate-request'` messages.\n     */\n    onActivateRequest(msg) {\n        const prompt = this.console.promptCell;\n        if (prompt) {\n            prompt.editor.focus();\n        }\n    }\n    /**\n     * Handle `'close-request'` messages.\n     */\n    onCloseRequest(msg) {\n        super.onCloseRequest(msg);\n        this.dispose();\n    }\n    /**\n     * Handle a console execution.\n     */\n    _onExecuted(sender, args) {\n        this._executed = args;\n        this._updateTitlePanel();\n    }\n    /**\n     * Update the console panel title.\n     */\n    _updateTitlePanel() {\n        Private.updateTitle(this, this._connected, this._executed, this.translator);\n    }\n}\n/**\n * A namespace for ConsolePanel statics.\n */\n(function (ConsolePanel) {\n    /**\n     * Default implementation of `IContentFactory`.\n     */\n    class ContentFactory extends CodeConsole.ContentFactory {\n        /**\n         * Create a new console panel.\n         */\n        createConsole(options) {\n            return new CodeConsole(options);\n        }\n    }\n    ConsolePanel.ContentFactory = ContentFactory;\n    /**\n     * The console renderer token.\n     */\n    ConsolePanel.IContentFactory = new Token('@jupyterlab/console:IContentFactory', 'A factory object that creates new code consoles. Use this if you want to create and host code consoles in your own UI elements.');\n})(ConsolePanel || (ConsolePanel = {}));\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The counter for new consoles.\n     */\n    Private.count = 1;\n    /**\n     * Update the title of a console panel.\n     */\n    function updateTitle(panel, connected, executed, translator) {\n        translator = translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        const sessionContext = panel.console.sessionContext.session;\n        if (sessionContext) {\n            // FIXME:\n            let caption = trans.__('Name: %1\\n', sessionContext.name) +\n                trans.__('Directory: %1\\n', PathExt.dirname(sessionContext.path)) +\n                trans.__('Kernel: %1', panel.console.sessionContext.kernelDisplayName);\n            if (connected) {\n                caption += trans.__('\\nConnected: %1', Time.format(connected.toISOString()));\n            }\n            if (executed) {\n                caption += trans.__('\\nLast Execution: %1');\n            }\n            panel.title.label = sessionContext.name;\n            panel.title.caption = caption;\n        }\n        else {\n            panel.title.label = trans.__('Console');\n            panel.title.caption = '';\n        }\n    }\n    Private.updateTitle = updateTitle;\n})(Private || (Private = {}));\n//# sourceMappingURL=panel.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The console tracker token.\n */\nexport const IConsoleTracker = new Token('@jupyterlab/console:IConsoleTracker', `A widget tracker for code consoles.\n  Use this if you want to be able to iterate over and interact with code consoles\n  created by the application.`);\n/**\n * The Console cell executor token.\n */\nexport const IConsoleCellExecutor = new Token('@jupyterlab/console:IConsoleCellExecutor', `The console cell executor`);\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module console\n */\nexport * from './cellexecutor';\nexport * from './foreign';\nexport * from './history';\nexport * from './panel';\nexport * from './tokens';\nexport * from './widget';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@lumino/dragdrop/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/cells/style/index.js';\n\nimport './base.css';\n","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ActivityMonitor = void 0;\nconst signaling_1 = require(\"@lumino/signaling\");\n/**\n * A class that monitors activity on a signal.\n */\nclass ActivityMonitor {\n    /**\n     * Construct a new activity monitor.\n     */\n    constructor(options) {\n        this._timer = -1;\n        this._timeout = -1;\n        this._isDisposed = false;\n        this._activityStopped = new signaling_1.Signal(this);\n        options.signal.connect(this._onSignalFired, this);\n        this._timeout = options.timeout || 1000;\n    }\n    /**\n     * A signal emitted when activity has ceased.\n     */\n    get activityStopped() {\n        return this._activityStopped;\n    }\n    /**\n     * The timeout associated with the monitor, in milliseconds.\n     */\n    get timeout() {\n        return this._timeout;\n    }\n    set timeout(value) {\n        this._timeout = value;\n    }\n    /**\n     * Test whether the monitor has been disposed.\n     *\n     * #### Notes\n     * This is a read-only property.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources used by the activity monitor.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        signaling_1.Signal.clearData(this);\n    }\n    /**\n     * A signal handler for the monitored signal.\n     */\n    _onSignalFired(sender, args) {\n        clearTimeout(this._timer);\n        this._sender = sender;\n        this._args = args;\n        this._timer = setTimeout(() => {\n            this._activityStopped.emit({\n                sender: this._sender,\n                args: this._args\n            });\n        }, this._timeout);\n    }\n}\nexports.ActivityMonitor = ActivityMonitor;\n//# sourceMappingURL=activitymonitor.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module coreutils\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./activitymonitor\"), exports);\n__exportStar(require(\"./interfaces\"), exports);\n__exportStar(require(\"./lru\"), exports);\n__exportStar(require(\"./markdowncodeblocks\"), exports);\n__exportStar(require(\"./pageconfig\"), exports);\n__exportStar(require(\"./path\"), exports);\n__exportStar(require(\"./signal\"), exports);\n__exportStar(require(\"./text\"), exports);\n__exportStar(require(\"./time\"), exports);\n__exportStar(require(\"./url\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=interfaces.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LruCache = void 0;\nconst DEFAULT_MAX_SIZE = 128;\n/** A least-recently-used cache. */\nclass LruCache {\n    constructor(options = {}) {\n        this._map = new Map();\n        this._maxSize = (options === null || options === void 0 ? void 0 : options.maxSize) || DEFAULT_MAX_SIZE;\n    }\n    /**\n     * Return the current size of the cache.\n     */\n    get size() {\n        return this._map.size;\n    }\n    /**\n     * Clear the values in the cache.\n     */\n    clear() {\n        this._map.clear();\n    }\n    /**\n     * Get a value (or null) from the cache, pushing the item to the front of the cache.\n     */\n    get(key) {\n        const item = this._map.get(key) || null;\n        if (item != null) {\n            this._map.delete(key);\n            this._map.set(key, item);\n        }\n        return item;\n    }\n    /**\n     * Set a value in the cache, potentially evicting an old item.\n     */\n    set(key, value) {\n        if (this._map.size >= this._maxSize) {\n            this._map.delete(this._map.keys().next().value);\n        }\n        this._map.set(key, value);\n    }\n}\nexports.LruCache = LruCache;\n//# sourceMappingURL=lru.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MarkdownCodeBlocks = void 0;\n/**\n * The namespace for code block functions which help\n * in extract code from markdown text\n */\nvar MarkdownCodeBlocks;\n(function (MarkdownCodeBlocks) {\n    MarkdownCodeBlocks.CODE_BLOCK_MARKER = '```';\n    const markdownExtensions = [\n        '.markdown',\n        '.mdown',\n        '.mkdn',\n        '.md',\n        '.mkd',\n        '.mdwn',\n        '.mdtxt',\n        '.mdtext',\n        '.text',\n        '.txt',\n        '.Rmd'\n    ];\n    class MarkdownCodeBlock {\n        constructor(startLine) {\n            this.startLine = startLine;\n            this.code = '';\n            this.endLine = -1;\n        }\n    }\n    MarkdownCodeBlocks.MarkdownCodeBlock = MarkdownCodeBlock;\n    /**\n     * Check whether the given file extension is a markdown extension\n     * @param extension - A file extension\n     *\n     * @returns true/false depending on whether this is a supported markdown extension\n     */\n    function isMarkdown(extension) {\n        return markdownExtensions.indexOf(extension) > -1;\n    }\n    MarkdownCodeBlocks.isMarkdown = isMarkdown;\n    /**\n     * Construct all code snippets from current text\n     * (this could be potentially optimized if we can cache and detect differences)\n     * @param text - A string to parse codeblocks from\n     *\n     * @returns An array of MarkdownCodeBlocks.\n     */\n    function findMarkdownCodeBlocks(text) {\n        if (!text || text === '') {\n            return [];\n        }\n        const lines = text.split('\\n');\n        const codeBlocks = [];\n        let currentBlock = null;\n        for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n            const line = lines[lineIndex];\n            const lineContainsMarker = line.indexOf(MarkdownCodeBlocks.CODE_BLOCK_MARKER) === 0;\n            const constructingBlock = currentBlock != null;\n            // Skip this line if it is not part of any code block and doesn't contain a marker.\n            if (!lineContainsMarker && !constructingBlock) {\n                continue;\n            }\n            // Check if we are already constructing a code block.\n            if (!constructingBlock) {\n                // Start constructing a new code block.\n                currentBlock = new MarkdownCodeBlock(lineIndex);\n                // Check whether this is a single line code block of the form ```a = 10```.\n                const firstIndex = line.indexOf(MarkdownCodeBlocks.CODE_BLOCK_MARKER);\n                const lastIndex = line.lastIndexOf(MarkdownCodeBlocks.CODE_BLOCK_MARKER);\n                const isSingleLine = firstIndex !== lastIndex;\n                if (isSingleLine) {\n                    currentBlock.code = line.substring(firstIndex + MarkdownCodeBlocks.CODE_BLOCK_MARKER.length, lastIndex);\n                    currentBlock.endLine = lineIndex;\n                    codeBlocks.push(currentBlock);\n                    currentBlock = null;\n                }\n            }\n            else if (currentBlock) {\n                if (lineContainsMarker) {\n                    // End of block, finish it up.\n                    currentBlock.endLine = lineIndex - 1;\n                    codeBlocks.push(currentBlock);\n                    currentBlock = null;\n                }\n                else {\n                    // Append the current line.\n                    currentBlock.code += line + '\\n';\n                }\n            }\n        }\n        return codeBlocks;\n    }\n    MarkdownCodeBlocks.findMarkdownCodeBlocks = findMarkdownCodeBlocks;\n})(MarkdownCodeBlocks || (exports.MarkdownCodeBlocks = MarkdownCodeBlocks = {}));\n//# sourceMappingURL=markdowncodeblocks.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PageConfig = void 0;\nconst coreutils_1 = require(\"@lumino/coreutils\");\nconst minimist_1 = __importDefault(require(\"minimist\"));\nconst url_1 = require(\"./url\");\n/**\n * The namespace for `PageConfig` functions.\n */\nvar PageConfig;\n(function (PageConfig) {\n    /**\n     * Get global configuration data for the Jupyter application.\n     *\n     * @param name - The name of the configuration option.\n     *\n     * @returns The config value or an empty string if not found.\n     *\n     * #### Notes\n     * All values are treated as strings.\n     * For browser based applications, it is assumed that the page HTML\n     * includes a script tag with the id `jupyter-config-data` containing the\n     * configuration as valid JSON.  In order to support the classic Notebook,\n     * we fall back on checking for `body` data of the given `name`.\n     *\n     * For node applications, it is assumed that the process was launched\n     * with a `--jupyter-config-data` option pointing to a JSON settings\n     * file.\n     */\n    function getOption(name) {\n        if (configData) {\n            return configData[name] || getBodyData(name);\n        }\n        configData = Object.create(null);\n        let found = false;\n        // Use script tag if available.\n        if (typeof document !== 'undefined' && document) {\n            const el = document.getElementById('jupyter-config-data');\n            if (el) {\n                configData = JSON.parse(el.textContent || '');\n                found = true;\n            }\n        }\n        // Otherwise use CLI if given.\n        if (!found && typeof process !== 'undefined' && process.argv) {\n            try {\n                const cli = (0, minimist_1.default)(process.argv.slice(2));\n                const path = require('path');\n                let fullPath = '';\n                if ('jupyter-config-data' in cli) {\n                    fullPath = path.resolve(cli['jupyter-config-data']);\n                }\n                else if ('JUPYTER_CONFIG_DATA' in process.env) {\n                    fullPath = path.resolve(process.env['JUPYTER_CONFIG_DATA']);\n                }\n                if (fullPath) {\n                    // Force Webpack to ignore this require.\n                    // eslint-disable-next-line\n                    configData = eval('require')(fullPath);\n                }\n            }\n            catch (e) {\n                console.error(e);\n            }\n        }\n        if (!coreutils_1.JSONExt.isObject(configData)) {\n            configData = Object.create(null);\n        }\n        else {\n            for (const key in configData) {\n                // PageConfig expects strings\n                if (typeof configData[key] !== 'string') {\n                    configData[key] = JSON.stringify(configData[key]);\n                }\n            }\n        }\n        return configData[name] || getBodyData(name);\n    }\n    PageConfig.getOption = getOption;\n    /**\n     * Set global configuration data for the Jupyter application.\n     *\n     * @param name - The name of the configuration option.\n     * @param value - The value to set the option to.\n     *\n     * @returns The last config value or an empty string if it doesn't exist.\n     */\n    function setOption(name, value) {\n        const last = getOption(name);\n        configData[name] = value;\n        return last;\n    }\n    PageConfig.setOption = setOption;\n    /**\n     * Get the base url for a Jupyter application, or the base url of the page.\n     */\n    function getBaseUrl() {\n        return url_1.URLExt.normalize(getOption('baseUrl') || '/');\n    }\n    PageConfig.getBaseUrl = getBaseUrl;\n    /**\n     * Get the tree url for a JupyterLab application.\n     */\n    function getTreeUrl() {\n        return url_1.URLExt.join(getBaseUrl(), getOption('treeUrl'));\n    }\n    PageConfig.getTreeUrl = getTreeUrl;\n    /**\n     * Get the base url for sharing links (usually baseUrl)\n     */\n    function getShareUrl() {\n        return url_1.URLExt.normalize(getOption('shareUrl') || getBaseUrl());\n    }\n    PageConfig.getShareUrl = getShareUrl;\n    /**\n     * Get the tree url for shareable links.\n     * Usually the same as treeUrl,\n     * but overridable e.g. when sharing with JupyterHub.\n     */\n    function getTreeShareUrl() {\n        return url_1.URLExt.normalize(url_1.URLExt.join(getShareUrl(), getOption('treeUrl')));\n    }\n    PageConfig.getTreeShareUrl = getTreeShareUrl;\n    /**\n     * Create a new URL given an optional mode and tree path.\n     *\n     * This is used to create URLS when the mode or tree path change as the user\n     * changes mode or the current document in the main area. If fields in\n     * options are omitted, the value in PageConfig will be used.\n     *\n     * @param options - IGetUrlOptions for the new path.\n     */\n    function getUrl(options) {\n        var _a, _b, _c, _d;\n        let path = options.toShare ? getShareUrl() : getBaseUrl();\n        const mode = (_a = options.mode) !== null && _a !== void 0 ? _a : getOption('mode');\n        const workspace = (_b = options.workspace) !== null && _b !== void 0 ? _b : getOption('workspace');\n        const labOrDoc = mode === 'single-document' ? 'doc' : 'lab';\n        path = url_1.URLExt.join(path, labOrDoc);\n        if (workspace !== PageConfig.defaultWorkspace) {\n            path = url_1.URLExt.join(path, 'workspaces', encodeURIComponent((_c = getOption('workspace')) !== null && _c !== void 0 ? _c : PageConfig.defaultWorkspace));\n        }\n        const treePath = (_d = options.treePath) !== null && _d !== void 0 ? _d : getOption('treePath');\n        if (treePath) {\n            path = url_1.URLExt.join(path, 'tree', url_1.URLExt.encodeParts(treePath));\n        }\n        return path;\n    }\n    PageConfig.getUrl = getUrl;\n    PageConfig.defaultWorkspace = 'default';\n    /**\n     * Get the base websocket url for a Jupyter application, or an empty string.\n     */\n    function getWsUrl(baseUrl) {\n        let wsUrl = getOption('wsUrl');\n        if (!wsUrl) {\n            baseUrl = baseUrl ? url_1.URLExt.normalize(baseUrl) : getBaseUrl();\n            if (baseUrl.indexOf('http') !== 0) {\n                return '';\n            }\n            wsUrl = 'ws' + baseUrl.slice(4);\n        }\n        return url_1.URLExt.normalize(wsUrl);\n    }\n    PageConfig.getWsUrl = getWsUrl;\n    /**\n     * Returns the URL converting this notebook to a certain\n     * format with nbconvert.\n     */\n    function getNBConvertURL({ path, format, download }) {\n        const notebookPath = url_1.URLExt.encodeParts(path);\n        const url = url_1.URLExt.join(getBaseUrl(), 'nbconvert', format, notebookPath);\n        if (download) {\n            return url + '?download=true';\n        }\n        return url;\n    }\n    PageConfig.getNBConvertURL = getNBConvertURL;\n    /**\n     * Get the authorization token for a Jupyter application.\n     */\n    function getToken() {\n        return getOption('token') || getBodyData('jupyterApiToken');\n    }\n    PageConfig.getToken = getToken;\n    /**\n     * Get the Notebook version info [major, minor, patch].\n     */\n    function getNotebookVersion() {\n        const notebookVersion = getOption('notebookVersion');\n        if (notebookVersion === '') {\n            return [0, 0, 0];\n        }\n        return JSON.parse(notebookVersion);\n    }\n    PageConfig.getNotebookVersion = getNotebookVersion;\n    /**\n     * Private page config data for the Jupyter application.\n     */\n    let configData = null;\n    /**\n     * Get a url-encoded item from `body.data` and decode it\n     * We should never have any encoded URLs anywhere else in code\n     * until we are building an actual request.\n     */\n    function getBodyData(key) {\n        if (typeof document === 'undefined' || !document.body) {\n            return '';\n        }\n        const val = document.body.dataset[key];\n        if (typeof val === 'undefined') {\n            return '';\n        }\n        return decodeURIComponent(val);\n    }\n    /**\n     * The namespace for page config `Extension` functions.\n     */\n    let Extension;\n    (function (Extension) {\n        /**\n         * Populate an array from page config.\n         *\n         * @param key - The page config key (e.g., `deferredExtensions`).\n         *\n         * #### Notes\n         * This is intended for `deferredExtensions` and `disabledExtensions`.\n         */\n        function populate(key) {\n            try {\n                const raw = getOption(key);\n                if (raw) {\n                    return JSON.parse(raw);\n                }\n            }\n            catch (error) {\n                console.warn(`Unable to parse ${key}.`, error);\n            }\n            return [];\n        }\n        /**\n         * The collection of deferred extensions in page config.\n         */\n        Extension.deferred = populate('deferredExtensions');\n        /**\n         * The collection of disabled extensions in page config.\n         */\n        Extension.disabled = populate('disabledExtensions');\n        /**\n         * Returns whether a plugin is deferred.\n         *\n         * @param id - The plugin ID.\n         */\n        function isDeferred(id) {\n            // Check for either a full plugin id match or an extension\n            // name match.\n            const separatorIndex = id.indexOf(':');\n            let extName = '';\n            if (separatorIndex !== -1) {\n                extName = id.slice(0, separatorIndex);\n            }\n            return Extension.deferred.some(val => val === id || (extName && val === extName));\n        }\n        Extension.isDeferred = isDeferred;\n        /**\n         * Returns whether a plugin is disabled.\n         *\n         * @param id - The plugin ID.\n         */\n        function isDisabled(id) {\n            // Check for either a full plugin id match or an extension\n            // name match.\n            const separatorIndex = id.indexOf(':');\n            let extName = '';\n            if (separatorIndex !== -1) {\n                extName = id.slice(0, separatorIndex);\n            }\n            return Extension.disabled.some(val => val === id || (extName && val === extName));\n        }\n        Extension.isDisabled = isDisabled;\n    })(Extension = PageConfig.Extension || (PageConfig.Extension = {}));\n})(PageConfig || (exports.PageConfig = PageConfig = {}));\n//# sourceMappingURL=pageconfig.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PathExt = void 0;\nconst path_1 = require(\"path\");\n/**\n * The namespace for path-related functions.\n *\n * Note that Jupyter server paths do not start with a leading slash.\n */\nvar PathExt;\n(function (PathExt) {\n    /**\n     * Join all arguments together and normalize the resulting path.\n     * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown.\n     *\n     * @param paths - The string paths to join.\n     */\n    function join(...paths) {\n        const path = path_1.posix.join(...paths);\n        return path === '.' ? '' : removeSlash(path);\n    }\n    PathExt.join = join;\n    /**\n     * Join all arguments together and normalize the resulting path and preserve the leading slash.\n     *\n     * @param paths - The string paths to join.\n     */\n    function joinWithLeadingSlash(...paths) {\n        const path = path_1.posix.join(...paths);\n        return path === '.' ? '' : path;\n    }\n    PathExt.joinWithLeadingSlash = joinWithLeadingSlash;\n    /**\n     * Return the last portion of a path. Similar to the Unix basename command.\n     * Often used to extract the file name from a fully qualified path.\n     *\n     * @param path - The path to evaluate.\n     *\n     * @param ext - An extension to remove from the result.\n     */\n    function basename(path, ext) {\n        return path_1.posix.basename(path, ext);\n    }\n    PathExt.basename = basename;\n    /**\n     * Get the directory name of a path, similar to the Unix dirname command.\n     * When an empty path is given, returns the root path.\n     *\n     * @param path - The file path.\n     */\n    function dirname(path) {\n        const dir = removeSlash(path_1.posix.dirname(path));\n        return dir === '.' ? '' : dir;\n    }\n    PathExt.dirname = dirname;\n    /**\n     * Get the extension of the path.\n     *\n     * @param path - The file path.\n     *\n     * @returns the extension of the file.\n     *\n     * #### Notes\n     * The extension is the string from the last occurrence of the `.`\n     * character to end of string in the last portion of the path, inclusive.\n     * If there is no `.` in the last portion of the path, or if the first\n     * character of the basename of path [[basename]] is `.`, then an\n     * empty string is returned.\n     */\n    function extname(path) {\n        return path_1.posix.extname(path);\n    }\n    PathExt.extname = extname;\n    /**\n     * Normalize a string path, reducing '..' and '.' parts.\n     * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used.\n     * When an empty path is given, returns the root path.\n     *\n     * @param path - The string path to normalize.\n     */\n    function normalize(path) {\n        if (path === '') {\n            return '';\n        }\n        return removeSlash(path_1.posix.normalize(path));\n    }\n    PathExt.normalize = normalize;\n    /**\n     * Resolve a sequence of paths or path segments into an absolute path.\n     * The root path in the application has no leading slash, so it is removed.\n     *\n     * @param parts - The paths to join.\n     *\n     * #### Notes\n     * The right-most parameter is considered \\{to\\}.  Other parameters are considered an array of \\{from\\}.\n     *\n     * Starting from leftmost \\{from\\} parameter, resolves \\{to\\} to an absolute path.\n     *\n     * If \\{to\\} isn't already absolute, \\{from\\} arguments are prepended in right to left order, until an absolute path is found. If after using all \\{from\\} paths still no absolute path is found, the current working directory is used as well. The resulting path is normalized, and trailing slashes are removed unless the path gets resolved to the root directory.\n     */\n    function resolve(...parts) {\n        return removeSlash(path_1.posix.resolve(...parts));\n    }\n    PathExt.resolve = resolve;\n    /**\n     * Solve the relative path from \\{from\\} to \\{to\\}.\n     *\n     * @param from - The source path.\n     *\n     * @param to - The target path.\n     *\n     * #### Notes\n     * If from and to each resolve to the same path (after calling\n     * path.resolve() on each), a zero-length string is returned.\n     * If a zero-length string is passed as from or to, `/`\n     * will be used instead of the zero-length strings.\n     */\n    function relative(from, to) {\n        return removeSlash(path_1.posix.relative(from, to));\n    }\n    PathExt.relative = relative;\n    /**\n     * Normalize a file extension to be of the type `'.foo'`.\n     *\n     * @param extension - the file extension.\n     *\n     * #### Notes\n     * Adds a leading dot if not present and converts to lower case.\n     */\n    function normalizeExtension(extension) {\n        if (extension.length > 0 && extension.indexOf('.') !== 0) {\n            extension = `.${extension}`;\n        }\n        return extension;\n    }\n    PathExt.normalizeExtension = normalizeExtension;\n    /**\n     * Remove the leading slash from a path.\n     *\n     * @param path the path from which to remove a leading slash.\n     */\n    function removeSlash(path) {\n        if (path.indexOf('/') === 0) {\n            path = path.slice(1);\n        }\n        return path;\n    }\n    PathExt.removeSlash = removeSlash;\n})(PathExt || (exports.PathExt = PathExt = {}));\n//# sourceMappingURL=path.js.map","\"use strict\";\n/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.signalToPromise = signalToPromise;\nconst coreutils_1 = require(\"@lumino/coreutils\");\n/**\n * Convert a signal into a promise for the first emitted value.\n *\n * @param signal - The signal we are listening to.\n * @param timeout - Timeout to wait for signal in ms (not timeout if not defined or 0)\n *\n * @returns a Promise that resolves with a `(sender, args)` pair.\n */\nfunction signalToPromise(signal, timeout) {\n    const waitForSignal = new coreutils_1.PromiseDelegate();\n    function cleanup() {\n        signal.disconnect(slot);\n    }\n    function slot(sender, args) {\n        cleanup();\n        waitForSignal.resolve([sender, args]);\n    }\n    signal.connect(slot);\n    if ((timeout !== null && timeout !== void 0 ? timeout : 0) > 0) {\n        setTimeout(() => {\n            cleanup();\n            waitForSignal.reject(`Signal not emitted within ${timeout} ms.`);\n        }, timeout);\n    }\n    return waitForSignal.promise;\n}\n//# sourceMappingURL=signal.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Text = void 0;\n/**\n * The namespace for text-related functions.\n */\nvar Text;\n(function (Text) {\n    // javascript stores text as utf16 and string indices use \"code units\",\n    // which stores high-codepoint characters as \"surrogate pairs\",\n    // which occupy two indices in the javascript string.\n    // We need to translate cursor_pos in the Jupyter protocol (in characters)\n    // to js offset (with surrogate pairs taking two spots).\n    const HAS_SURROGATES = '𝐚'.length > 1;\n    /**\n     * Convert a javascript string index into a unicode character offset\n     *\n     * @param jsIdx - The javascript string index (counting surrogate pairs)\n     *\n     * @param text - The text in which the offset is calculated\n     *\n     * @returns The unicode character offset\n     */\n    function jsIndexToCharIndex(jsIdx, text) {\n        if (HAS_SURROGATES) {\n            // not using surrogates, nothing to do\n            return jsIdx;\n        }\n        let charIdx = jsIdx;\n        for (let i = 0; i + 1 < text.length && i < jsIdx; i++) {\n            const charCode = text.charCodeAt(i);\n            // check for surrogate pair\n            if (charCode >= 0xd800 && charCode <= 0xdbff) {\n                const nextCharCode = text.charCodeAt(i + 1);\n                if (nextCharCode >= 0xdc00 && nextCharCode <= 0xdfff) {\n                    charIdx--;\n                    i++;\n                }\n            }\n        }\n        return charIdx;\n    }\n    Text.jsIndexToCharIndex = jsIndexToCharIndex;\n    /**\n     * Convert a unicode character offset to a javascript string index.\n     *\n     * @param charIdx - The index in unicode characters\n     *\n     * @param text - The text in which the offset is calculated\n     *\n     * @returns The js-native index\n     */\n    function charIndexToJsIndex(charIdx, text) {\n        if (HAS_SURROGATES) {\n            // not using surrogates, nothing to do\n            return charIdx;\n        }\n        let jsIdx = charIdx;\n        for (let i = 0; i + 1 < text.length && i < jsIdx; i++) {\n            const charCode = text.charCodeAt(i);\n            // check for surrogate pair\n            if (charCode >= 0xd800 && charCode <= 0xdbff) {\n                const nextCharCode = text.charCodeAt(i + 1);\n                if (nextCharCode >= 0xdc00 && nextCharCode <= 0xdfff) {\n                    jsIdx++;\n                    i++;\n                }\n            }\n        }\n        return jsIdx;\n    }\n    Text.charIndexToJsIndex = charIndexToJsIndex;\n    /**\n     * Given a 'snake-case', 'snake_case', 'snake:case', or\n     * 'snake case' string, will return the camel case version: 'snakeCase'.\n     *\n     * @param str the snake-case input string.\n     *\n     * @param upper default = false. If true, the first letter of the\n     * returned string will be capitalized.\n     *\n     * @returns the camel case version of the input string.\n     */\n    function camelCase(str, upper = false) {\n        return str.replace(/^(\\w)|[\\s-_:]+(\\w)/g, function (match, p1, p2) {\n            if (p2) {\n                return p2.toUpperCase();\n            }\n            else {\n                return upper ? p1.toUpperCase() : p1.toLowerCase();\n            }\n        });\n    }\n    Text.camelCase = camelCase;\n    /**\n     * Given a string, title case the words in the string.\n     *\n     * @param str the string to title case.\n     *\n     * @returns the same string, but with each word capitalized.\n     */\n    function titleCase(str) {\n        return (str || '')\n            .toLowerCase()\n            .split(' ')\n            .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n            .join(' ');\n    }\n    Text.titleCase = titleCase;\n})(Text || (exports.Text = Text = {}));\n//# sourceMappingURL=text.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Time = void 0;\n/**\n * A list of time units with their associated value in milliseconds.\n */\nconst UNITS = [\n    { name: 'years', milliseconds: 365 * 24 * 60 * 60 * 1000 },\n    { name: 'months', milliseconds: 30 * 24 * 60 * 60 * 1000 },\n    { name: 'days', milliseconds: 24 * 60 * 60 * 1000 },\n    { name: 'hours', milliseconds: 60 * 60 * 1000 },\n    { name: 'minutes', milliseconds: 60 * 1000 },\n    { name: 'seconds', milliseconds: 1000 }\n];\n/**\n * The namespace for date functions.\n */\nvar Time;\n(function (Time) {\n    /**\n     * Convert a timestring to a human readable string (e.g. 'two minutes ago').\n     *\n     * @param value - The date timestring or date object.\n     *\n     * @returns A formatted date.\n     */\n    function formatHuman(value, format = 'long') {\n        const lang = document.documentElement.lang || 'en';\n        const formatter = new Intl.RelativeTimeFormat(lang, {\n            numeric: 'auto',\n            style: format\n        });\n        const delta = new Date(value).getTime() - Date.now();\n        for (let unit of UNITS) {\n            const amount = Math.ceil(delta / unit.milliseconds);\n            if (amount === 0) {\n                continue;\n            }\n            return formatter.format(amount, unit.name);\n        }\n        return formatter.format(0, 'seconds');\n    }\n    Time.formatHuman = formatHuman;\n    /**\n     * Convenient helper to convert a timestring to a date format.\n     *\n     * @param value - The date timestring or date object.\n     *\n     * @returns A formatted date.\n     */\n    function format(value) {\n        const lang = document.documentElement.lang || 'en';\n        const formatter = new Intl.DateTimeFormat(lang, {\n            dateStyle: 'short',\n            timeStyle: 'short'\n        });\n        return formatter.format(new Date(value));\n    }\n    Time.format = format;\n})(Time || (exports.Time = Time = {}));\n//# sourceMappingURL=time.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.URLExt = void 0;\nconst path_1 = require(\"path\");\nconst url_parse_1 = __importDefault(require(\"url-parse\"));\n/**\n * The namespace for URL-related functions.\n */\nvar URLExt;\n(function (URLExt) {\n    /**\n     * Parse a url into a URL object.\n     *\n     * @param url - The URL string to parse.\n     *\n     * @returns A URL object.\n     */\n    function parse(url) {\n        if (typeof document !== 'undefined' && document) {\n            const a = document.createElement('a');\n            a.href = url;\n            return a;\n        }\n        return (0, url_parse_1.default)(url);\n    }\n    URLExt.parse = parse;\n    /**\n     * Parse URL and retrieve hostname\n     *\n     * @param url - The URL string to parse\n     *\n     * @returns a hostname string value\n     */\n    function getHostName(url) {\n        return (0, url_parse_1.default)(url).hostname;\n    }\n    URLExt.getHostName = getHostName;\n    function normalize(url) {\n        return url && parse(url).toString();\n    }\n    URLExt.normalize = normalize;\n    /**\n     * Join a sequence of url components and normalizes as in node `path.join`.\n     *\n     * @param parts - The url components.\n     *\n     * @returns the joined url.\n     */\n    function join(...parts) {\n        let u = (0, url_parse_1.default)(parts[0], {});\n        // Schema-less URL can be only parsed as relative to a base URL\n        // see https://github.com/unshiftio/url-parse/issues/219#issuecomment-1002219326\n        const isSchemaLess = u.protocol === '' && u.slashes;\n        if (isSchemaLess) {\n            u = (0, url_parse_1.default)(parts[0], 'https:' + parts[0]);\n        }\n        const prefix = `${isSchemaLess ? '' : u.protocol}${u.slashes ? '//' : ''}${u.auth}${u.auth ? '@' : ''}${u.host}`;\n        // If there was a prefix, then the first path must start at the root.\n        const path = path_1.posix.join(`${!!prefix && u.pathname[0] !== '/' ? '/' : ''}${u.pathname}`, ...parts.slice(1));\n        return `${prefix}${path === '.' ? '' : path}`;\n    }\n    URLExt.join = join;\n    /**\n     * Encode the components of a multi-segment url.\n     *\n     * @param url - The url to encode.\n     *\n     * @returns the encoded url.\n     *\n     * #### Notes\n     * Preserves the `'/'` separators.\n     * Should not include the base url, since all parts are escaped.\n     */\n    function encodeParts(url) {\n        return join(...url.split('/').map(encodeURIComponent));\n    }\n    URLExt.encodeParts = encodeParts;\n    /**\n     * Return a serialized object string suitable for a query.\n     *\n     * @param value The source object.\n     *\n     * @returns an encoded url query.\n     *\n     * #### Notes\n     * Modified version of [stackoverflow](http://stackoverflow.com/a/30707423).\n     */\n    function objectToQueryString(value) {\n        const keys = Object.keys(value).filter(key => key.length > 0);\n        if (!keys.length) {\n            return '';\n        }\n        return ('?' +\n            keys\n                .map(key => {\n                const content = encodeURIComponent(String(value[key]));\n                return key + (content ? '=' + content : '');\n            })\n                .join('&'));\n    }\n    URLExt.objectToQueryString = objectToQueryString;\n    /**\n     * Return a parsed object that represents the values in a query string.\n     */\n    function queryStringToObject(value) {\n        return value\n            .replace(/^\\?/, '')\n            .split('&')\n            .reduce((acc, val) => {\n            const [key, value] = val.split('=');\n            if (key.length > 0) {\n                acc[key] = decodeURIComponent(value || '');\n            }\n            return acc;\n        }, {});\n    }\n    URLExt.queryStringToObject = queryStringToObject;\n    /**\n     * Test whether the url is a local url.\n     *\n     * @param allowRoot - Whether the paths starting at Unix-style filesystem root (`/`) are permitted.\n     *\n     * #### Notes\n     * This function returns `false` for any fully qualified url, including\n     * `data:`, `file:`, and `//` protocol URLs.\n     */\n    function isLocal(url, allowRoot = false) {\n        const { protocol } = parse(url);\n        return ((!protocol || url.toLowerCase().indexOf(protocol) !== 0) &&\n            (allowRoot ? url.indexOf('//') !== 0 : url.indexOf('/') !== 0));\n    }\n    URLExt.isLocal = isLocal;\n})(URLExt || (exports.URLExt = URLExt = {}));\n//# sourceMappingURL=url.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module csvviewer-extension\n */\nimport { ILayoutRestorer } from '@jupyterlab/application';\nimport { createToolbarFactory, InputDialog, IThemeManager, IToolbarWidgetRegistry, WidgetTracker } from '@jupyterlab/apputils';\nimport { CSVViewerFactory, TSVViewerFactory } from '@jupyterlab/csvviewer/lib/widget';\nimport { CSVDelimiter } from '@jupyterlab/csvviewer/lib/toolbar';\nimport { ISearchProviderRegistry } from '@jupyterlab/documentsearch';\nimport { IMainMenu } from '@jupyterlab/mainmenu';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator } from '@jupyterlab/translation';\n/**\n * The name of the factories that creates widgets.\n */\nconst FACTORY_CSV = 'CSVTable';\nconst FACTORY_TSV = 'TSVTable';\n/**\n * The command IDs used by the csvviewer plugins.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.CSVGoToLine = 'csv:go-to-line';\n    CommandIDs.TSVGoToLine = 'tsv:go-to-line';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The CSV file handler extension.\n */\nconst csv = {\n    activate: activateCsv,\n    id: '@jupyterlab/csvviewer-extension:csv',\n    description: 'Adds viewer for CSV file types',\n    requires: [ITranslator],\n    optional: [\n        ILayoutRestorer,\n        IThemeManager,\n        IMainMenu,\n        ISearchProviderRegistry,\n        ISettingRegistry,\n        IToolbarWidgetRegistry\n    ],\n    autoStart: true\n};\n/**\n * The TSV file handler extension.\n */\nconst tsv = {\n    activate: activateTsv,\n    id: '@jupyterlab/csvviewer-extension:tsv',\n    description: 'Adds viewer for TSV file types.',\n    requires: [ITranslator],\n    optional: [\n        ILayoutRestorer,\n        IThemeManager,\n        IMainMenu,\n        ISearchProviderRegistry,\n        ISettingRegistry,\n        IToolbarWidgetRegistry\n    ],\n    autoStart: true\n};\n/**\n * Activate cssviewer extension for CSV files\n */\nfunction activateCsv(app, translator, restorer, themeManager, mainMenu, searchRegistry, settingRegistry, toolbarRegistry) {\n    var _a;\n    const { commands, shell } = app;\n    let toolbarFactory;\n    if (toolbarRegistry) {\n        toolbarRegistry.addFactory(FACTORY_CSV, 'delimiter', widget => new CSVDelimiter({\n            widget: widget.content,\n            translator\n        }));\n        if (settingRegistry) {\n            toolbarFactory = createToolbarFactory(toolbarRegistry, settingRegistry, FACTORY_CSV, csv.id, translator);\n        }\n    }\n    const trans = translator.load('jupyterlab');\n    const factory = new CSVViewerFactory({\n        name: FACTORY_CSV,\n        label: trans.__('CSV Viewer'),\n        fileTypes: ['csv'],\n        defaultFor: ['csv'],\n        readOnly: true,\n        toolbarFactory,\n        translator\n    });\n    const tracker = new WidgetTracker({\n        namespace: 'csvviewer'\n    });\n    // The current styles for the data grids.\n    let style = Private.LIGHT_STYLE;\n    let rendererConfig = Private.LIGHT_TEXT_CONFIG;\n    if (restorer) {\n        // Handle state restoration.\n        void restorer.restore(tracker, {\n            command: 'docmanager:open',\n            args: widget => ({ path: widget.context.path, factory: FACTORY_CSV }),\n            name: widget => widget.context.path\n        });\n    }\n    app.docRegistry.addWidgetFactory(factory);\n    const ft = app.docRegistry.getFileType('csv');\n    let searchProviderInitialized = false;\n    factory.widgetCreated.connect(async (sender, widget) => {\n        // Track the widget.\n        void tracker.add(widget);\n        // Notify the widget tracker if restore data needs to update.\n        widget.context.pathChanged.connect(() => {\n            void tracker.save(widget);\n        });\n        if (ft) {\n            widget.title.icon = ft.icon;\n            widget.title.iconClass = ft.iconClass;\n            widget.title.iconLabel = ft.iconLabel;\n        }\n        // Delay await to execute `widget.title` setters (above) synchronously\n        if (searchRegistry && !searchProviderInitialized) {\n            const { CSVSearchProvider } = await import('./searchprovider');\n            searchRegistry.add('csv', CSVSearchProvider);\n            searchProviderInitialized = true;\n        }\n        // Set the theme for the new widget; requires `.content` to be loaded.\n        await widget.content.ready;\n        widget.content.style = style;\n        widget.content.rendererConfig = rendererConfig;\n        // Make sure the theme is correctly set when new widgets are created.\n        updateThemes();\n    });\n    // Keep the themes up-to-date.\n    const updateThemes = () => {\n        const isLight = themeManager && themeManager.theme\n            ? themeManager.isLight(themeManager.theme)\n            : true;\n        style = isLight ? Private.LIGHT_STYLE : Private.DARK_STYLE;\n        rendererConfig = isLight\n            ? Private.LIGHT_TEXT_CONFIG\n            : Private.DARK_TEXT_CONFIG;\n        tracker.forEach(async (grid) => {\n            await grid.content.ready;\n            grid.content.style = style;\n            grid.content.rendererConfig = rendererConfig;\n        });\n    };\n    if (themeManager) {\n        themeManager.themeChanged.connect(updateThemes);\n    }\n    // Add commands\n    const isEnabled = () => tracker.currentWidget !== null &&\n        tracker.currentWidget === shell.currentWidget;\n    commands.addCommand(CommandIDs.CSVGoToLine, {\n        label: trans.__('Go to Line'),\n        execute: async () => {\n            const widget = tracker.currentWidget;\n            if (widget === null) {\n                return;\n            }\n            const result = await InputDialog.getNumber({\n                title: trans.__('Go to Line'),\n                value: 0\n            });\n            if (result.button.accept && result.value !== null) {\n                widget.content.goToLine(result.value);\n            }\n        },\n        isEnabled\n    });\n    if (mainMenu) {\n        // Add go to line capability to the edit menu.\n        mainMenu.editMenu.goToLiners.add({\n            id: CommandIDs.CSVGoToLine,\n            isEnabled\n        });\n    }\n    const notify = () => {\n        commands.notifyCommandChanged(CommandIDs.CSVGoToLine);\n    };\n    tracker.currentChanged.connect(notify);\n    (_a = shell.currentChanged) === null || _a === void 0 ? void 0 : _a.connect(notify);\n}\n/**\n * Activate cssviewer extension for TSV files\n */\nfunction activateTsv(app, translator, restorer, themeManager, mainMenu, searchRegistry, settingRegistry, toolbarRegistry) {\n    const { commands, shell } = app;\n    let toolbarFactory;\n    if (toolbarRegistry) {\n        toolbarRegistry.addFactory(FACTORY_TSV, 'delimiter', widget => new CSVDelimiter({\n            widget: widget.content,\n            translator\n        }));\n        if (settingRegistry) {\n            toolbarFactory = createToolbarFactory(toolbarRegistry, settingRegistry, FACTORY_TSV, tsv.id, translator);\n        }\n    }\n    const trans = translator.load('jupyterlab');\n    const factory = new TSVViewerFactory({\n        name: FACTORY_TSV,\n        label: trans.__('TSV Viewer'),\n        fileTypes: ['tsv'],\n        defaultFor: ['tsv'],\n        readOnly: true,\n        toolbarFactory,\n        translator\n    });\n    const tracker = new WidgetTracker({\n        namespace: 'tsvviewer'\n    });\n    // The current styles for the data grids.\n    let style = Private.LIGHT_STYLE;\n    let rendererConfig = Private.LIGHT_TEXT_CONFIG;\n    if (restorer) {\n        // Handle state restoration.\n        void restorer.restore(tracker, {\n            command: 'docmanager:open',\n            args: widget => ({ path: widget.context.path, factory: FACTORY_TSV }),\n            name: widget => widget.context.path\n        });\n    }\n    app.docRegistry.addWidgetFactory(factory);\n    const ft = app.docRegistry.getFileType('tsv');\n    let searchProviderInitialized = false;\n    factory.widgetCreated.connect(async (sender, widget) => {\n        // Track the widget.\n        void tracker.add(widget);\n        // Notify the widget tracker if restore data needs to update.\n        widget.context.pathChanged.connect(() => {\n            void tracker.save(widget);\n        });\n        if (ft) {\n            widget.title.icon = ft.icon;\n            widget.title.iconClass = ft.iconClass;\n            widget.title.iconLabel = ft.iconLabel;\n        }\n        // Delay await to execute `widget.title` setters (above) synchronously\n        if (searchRegistry && !searchProviderInitialized) {\n            const { CSVSearchProvider } = await import('./searchprovider');\n            searchRegistry.add('tsv', CSVSearchProvider);\n            searchProviderInitialized = true;\n        }\n        // Set the theme for the new widget; requires `.content` to be loaded.\n        await widget.content.ready;\n        widget.content.style = style;\n        widget.content.rendererConfig = rendererConfig;\n    });\n    // Keep the themes up-to-date.\n    const updateThemes = () => {\n        const isLight = themeManager && themeManager.theme\n            ? themeManager.isLight(themeManager.theme)\n            : true;\n        style = isLight ? Private.LIGHT_STYLE : Private.DARK_STYLE;\n        rendererConfig = isLight\n            ? Private.LIGHT_TEXT_CONFIG\n            : Private.DARK_TEXT_CONFIG;\n        tracker.forEach(async (grid) => {\n            await grid.content.ready;\n            grid.content.style = style;\n            grid.content.rendererConfig = rendererConfig;\n        });\n    };\n    if (themeManager) {\n        themeManager.themeChanged.connect(updateThemes);\n    }\n    // Add commands\n    const isEnabled = () => tracker.currentWidget !== null &&\n        tracker.currentWidget === shell.currentWidget;\n    commands.addCommand(CommandIDs.TSVGoToLine, {\n        label: trans.__('Go to Line'),\n        execute: async () => {\n            const widget = tracker.currentWidget;\n            if (widget === null) {\n                return;\n            }\n            const result = await InputDialog.getNumber({\n                title: trans.__('Go to Line'),\n                value: 0\n            });\n            if (result.button.accept && result.value !== null) {\n                widget.content.goToLine(result.value);\n            }\n        },\n        isEnabled\n    });\n    if (mainMenu) {\n        // Add go to line capability to the edit menu.\n        mainMenu.editMenu.goToLiners.add({\n            id: CommandIDs.TSVGoToLine,\n            isEnabled\n        });\n    }\n    tracker.currentChanged.connect(() => {\n        commands.notifyCommandChanged(CommandIDs.TSVGoToLine);\n    });\n}\n/**\n * Export the plugins as default.\n */\nconst plugins = [csv, tsv];\nexport default plugins;\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The light theme for the data grid.\n     */\n    Private.LIGHT_STYLE = {\n        voidColor: '#F3F3F3',\n        backgroundColor: 'white',\n        headerBackgroundColor: '#EEEEEE',\n        gridLineColor: 'rgba(20, 20, 20, 0.15)',\n        headerGridLineColor: 'rgba(20, 20, 20, 0.25)',\n        rowBackgroundColor: i => (i % 2 === 0 ? '#F5F5F5' : 'white')\n    };\n    /**\n     * The dark theme for the data grid.\n     */\n    Private.DARK_STYLE = {\n        voidColor: 'black',\n        backgroundColor: '#111111',\n        headerBackgroundColor: '#424242',\n        gridLineColor: 'rgba(235, 235, 235, 0.15)',\n        headerGridLineColor: 'rgba(235, 235, 235, 0.25)',\n        rowBackgroundColor: i => (i % 2 === 0 ? '#212121' : '#111111')\n    };\n    /**\n     * The light config for the data grid renderer.\n     */\n    Private.LIGHT_TEXT_CONFIG = {\n        textColor: '#111111',\n        matchBackgroundColor: '#FFFFE0',\n        currentMatchBackgroundColor: '#FFFF00',\n        horizontalAlignment: 'right'\n    };\n    /**\n     * The dark config for the data grid renderer.\n     */\n    Private.DARK_TEXT_CONFIG = {\n        textColor: '#F5F5F5',\n        matchBackgroundColor: '#838423',\n        currentMatchBackgroundColor: '#A3807A',\n        horizontalAlignment: 'right'\n    };\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { CSVViewer } from '@jupyterlab/csvviewer';\nimport { DocumentWidget } from '@jupyterlab/docregistry';\nimport { SearchProvider } from '@jupyterlab/documentsearch';\n/**\n * CSV viewer search provider\n */\nexport class CSVSearchProvider extends SearchProvider {\n    constructor() {\n        super(...arguments);\n        /**\n         * Set to true if the widget under search is read-only, false\n         * if it is editable.  Will be used to determine whether to show\n         * the replace option.\n         */\n        this.isReadOnly = true;\n    }\n    /**\n     * Instantiate a search provider for the widget.\n     *\n     * #### Notes\n     * The widget provided is always checked using `isApplicable` before calling\n     * this factory.\n     *\n     * @param widget The widget to search on\n     * @param translator [optional] The translator object\n     *\n     * @returns The search provider on the widget\n     */\n    static createNew(widget, translator) {\n        return new CSVSearchProvider(widget);\n    }\n    /**\n     * Report whether or not this provider has the ability to search on the given object\n     */\n    static isApplicable(domain) {\n        // check to see if the CSVSearchProvider can search on the\n        // first cell, false indicates another editor is present\n        return (domain instanceof DocumentWidget && domain.content instanceof CSVViewer);\n    }\n    /**\n     * Clear currently highlighted match.\n     */\n    clearHighlight() {\n        // no-op\n        return Promise.resolve();\n    }\n    /**\n     * Move the current match indicator to the next match.\n     *\n     * @param loop Whether to loop within the matches list.\n     *\n     * @returns The match is never returned by this provider\n     */\n    highlightNext(loop) {\n        this.widget.content.searchService.find(this._query);\n        return Promise.resolve(undefined);\n    }\n    /**\n     * Move the current match indicator to the previous match.\n     *\n     * @param loop Whether to loop within the matches list.\n     *\n     * @returns The match is never returned by this provider\n     */\n    highlightPrevious(loop) {\n        this.widget.content.searchService.find(this._query, true);\n        return Promise.resolve(undefined);\n    }\n    /**\n     * Replace the currently selected match with the provided text\n     * Not implemented in the CSV viewer as it is read-only.\n     *\n     * @param newText The replacement text\n     * @param loop Whether to loop within the matches list.\n     *\n     * @returns A promise that resolves once the action has completed.\n     */\n    replaceCurrentMatch(newText, loop) {\n        return Promise.resolve(false);\n    }\n    /**\n     * Replace all matches in the notebook with the provided text\n     * Not implemented in the CSV viewer as it is read-only.\n     *\n     * @param newText The replacement text\n     *\n     * @returns A promise that resolves once the action has completed.\n     */\n    replaceAllMatches(newText) {\n        return Promise.resolve(false);\n    }\n    /**\n     * Initialize the search using the provided options.  Should update the UI\n     * to highlight all matches and \"select\" whatever the first match should be.\n     *\n     * @param query A RegExp to be use to perform the search\n     */\n    startQuery(query) {\n        this._query = query;\n        this.widget.content.searchService.find(query);\n        return Promise.resolve();\n    }\n    /**\n     * Clears state of a search provider to prepare for startQuery to be called\n     * in order to start a new query or refresh an existing one.\n     */\n    endQuery() {\n        this.widget.content.searchService.clear();\n        return Promise.resolve();\n    }\n}\n//# sourceMappingURL=searchprovider.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\n\nimport './base.css';\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/csvviewer/style/index.js';\nimport '@jupyterlab/documentsearch/style/index.js';\nimport '@jupyterlab/mainmenu/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module csvviewer\n */\nexport * from './model';\nexport * from './parse';\nexport * from './toolbar';\nexport * from './widget';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { DataModel } from '@lumino/datagrid';\nimport { parseDSV, parseDSVNoQuotes } from './parse';\n/*\nPossible ideas for further implementation:\n\n- Show a spinner or something visible when we are doing delayed parsing.\n- The cache right now handles scrolling down great - it gets the next several hundred rows. However, scrolling up causes lots of cache misses - each new row causes a flush of the cache. When invalidating an entire cache, we should put the requested row in middle of the cache (adjusting for rows at the beginning or end). When populating a cache, we should retrieve rows both above and below the requested row.\n- When we have a header, and we are guessing the parser to use, try checking just the part of the file *after* the header row for quotes. I think often a first header row is quoted, but the rest of the file is not and can be parsed much faster.\n- autdetect the delimiter (look for comma, tab, semicolon in first line. If more than one found, parse first row with comma, tab, semicolon delimiters. One with most fields wins).\n- Toolbar buttons to control the row delimiter, the parsing engine (quoted/not quoted), the quote character, etc.\n- Investigate incremental loading strategies in the parseAsync function. In initial investigations, setting the chunk size to 100k in parseAsync seems cause instability with large files in Chrome (such as 8-million row files). Perhaps this is because we are recycling the row offset and column offset arrays quickly? It doesn't seem that there is a memory leak. On this theory, perhaps we just need to keep the offsets list an actual list, and pass it into the parsing function to extend without copying, and finalize it into an array buffer only when we are done parsing. Or perhaps we double the size of the array buffer each time, which may be wasteful, but at the end we trim it down if it's too wasteful (perhaps we have our own object that is backed by an array buffer, but has a push method that will automatically double the array buffer size as needed, and a trim function to finalize the array to exactly the size needed)? Or perhaps we don't use array buffers at all - compare the memory cost and speed of keeping the offsets as lists instead of memory buffers.\n- Investigate a time-based incremental parsing strategy, rather than a row-based one. The parser could take a maximum time to parse (say 300ms), and will parse up to that duration, in which case the parser probably also needs a way to notify when it has reached the end of a file.\n- For very large files, where we are only storing a small cache, scrolling is very laggy in Safari. It would be good to profile it.\n*/\n/**\n * Possible delimiter-separated data parsers.\n */\nconst PARSERS = {\n    quotes: parseDSV,\n    noquotes: parseDSVNoQuotes\n};\n/**\n * A data model implementation for in-memory delimiter-separated data.\n *\n * #### Notes\n * This model handles data with up to 2**32 characters.\n */\nexport class DSVModel extends DataModel {\n    /**\n     * Create a data model with static CSV data.\n     *\n     * @param options - The options for initializing the data model.\n     */\n    constructor(options) {\n        super();\n        this._rowCount = 0;\n        // Cache information\n        /**\n         * The header strings.\n         */\n        this._header = [];\n        /**\n         * The column offset cache, starting with row _columnOffsetsStartingRow\n         *\n         * #### Notes\n         * The index of the first character in the data string for row r, column c is\n         * _columnOffsets[(r-this._columnOffsetsStartingRow)*numColumns+c]\n         */\n        this._columnOffsets = new Uint32Array(0);\n        /**\n         * The row that _columnOffsets[0] represents.\n         */\n        this._columnOffsetsStartingRow = 0;\n        /**\n         * The maximum number of rows to parse when there is a cache miss.\n         */\n        this._maxCacheGet = 1000;\n        /**\n         * The index for the start of each row.\n         */\n        this._rowOffsets = new Uint32Array(0);\n        // Bookkeeping variables.\n        this._delayedParse = null;\n        this._startedParsing = false;\n        this._doneParsing = false;\n        this._isDisposed = false;\n        this._ready = new PromiseDelegate();\n        let { data, delimiter = ',', rowDelimiter = undefined, quote = '\"', quoteParser = undefined, header = true, initialRows = 500 } = options;\n        this._rawData = data;\n        this._delimiter = delimiter;\n        this._quote = quote;\n        this._quoteEscaped = new RegExp(quote + quote, 'g');\n        this._initialRows = initialRows;\n        // Guess the row delimiter if it was not supplied. This will be fooled if a\n        // different line delimiter possibility appears in the first row.\n        if (rowDelimiter === undefined) {\n            const i = data.slice(0, 5000).indexOf('\\r');\n            if (i === -1) {\n                rowDelimiter = '\\n';\n            }\n            else if (data[i + 1] === '\\n') {\n                rowDelimiter = '\\r\\n';\n            }\n            else {\n                rowDelimiter = '\\r';\n            }\n        }\n        this._rowDelimiter = rowDelimiter;\n        if (quoteParser === undefined) {\n            // Check for the existence of quotes if the quoteParser is not set.\n            quoteParser = data.indexOf(quote) >= 0;\n        }\n        this._parser = quoteParser ? 'quotes' : 'noquotes';\n        // Parse the data.\n        this.parseAsync();\n        // Cache the header row.\n        if (header === true && this._columnCount > 0) {\n            const h = [];\n            for (let c = 0; c < this._columnCount; c++) {\n                h.push(this._getField(0, c));\n            }\n            this._header = h;\n        }\n    }\n    /**\n     * Whether this model has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * A promise that resolves when the model has parsed all of its data.\n     */\n    get ready() {\n        return this._ready.promise;\n    }\n    /**\n     * The string representation of the data.\n     */\n    get rawData() {\n        return this._rawData;\n    }\n    set rawData(value) {\n        this._rawData = value;\n    }\n    /**\n     * The initial chunk of rows to parse.\n     */\n    get initialRows() {\n        return this._initialRows;\n    }\n    set initialRows(value) {\n        this._initialRows = value;\n    }\n    /**\n     * The header strings.\n     */\n    get header() {\n        return this._header;\n    }\n    set header(value) {\n        this._header = value;\n    }\n    /**\n     * The delimiter between entries on the same row.\n     */\n    get delimiter() {\n        return this._delimiter;\n    }\n    /**\n     * The delimiter between rows.\n     */\n    get rowDelimiter() {\n        return this._rowDelimiter;\n    }\n    /**\n     * A boolean determined by whether parsing has completed.\n     */\n    get doneParsing() {\n        return this._doneParsing;\n    }\n    /**\n     * Get the row count for a region in the data model.\n     *\n     * @param region - The row region of interest.\n     *\n     * @returns - The row count for the region.\n     */\n    rowCount(region) {\n        if (region === 'body') {\n            if (this._header.length === 0) {\n                return this._rowCount;\n            }\n            else {\n                return this._rowCount - 1;\n            }\n        }\n        return 1;\n    }\n    /**\n     * Get the column count for a region in the data model.\n     *\n     * @param region - The column region of interest.\n     *\n     * @returns - The column count for the region.\n     */\n    columnCount(region) {\n        if (region === 'body') {\n            return this._columnCount;\n        }\n        return 1;\n    }\n    /**\n     * Get the data value for a cell in the data model.\n     *\n     * @param region - The cell region of interest.\n     *\n     * @param row - The row index of the cell of interest.\n     *\n     * @param column - The column index of the cell of interest.\n     *\n     * @param returns - The data value for the specified cell.\n     */\n    data(region, row, column) {\n        let value;\n        // Look up the field and value for the region.\n        switch (region) {\n            case 'body':\n                if (this._header.length === 0) {\n                    value = this._getField(row, column);\n                }\n                else {\n                    value = this._getField(row + 1, column);\n                }\n                break;\n            case 'column-header':\n                if (this._header.length === 0) {\n                    value = (column + 1).toString();\n                }\n                else {\n                    value = this._header[column];\n                }\n                break;\n            case 'row-header':\n                value = (row + 1).toString();\n                break;\n            case 'corner-header':\n                value = '';\n                break;\n            default:\n                throw 'unreachable';\n        }\n        // Return the final value.\n        return value;\n    }\n    /**\n     * Dispose the resources held by this model.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._columnCount = undefined;\n        this._rowCount = undefined;\n        this._rowOffsets = null;\n        this._columnOffsets = null;\n        this._rawData = null;\n        // Clear out state associated with the asynchronous parsing.\n        if (this._doneParsing === false) {\n            // Explicitly catch this rejection at least once so an error is not thrown\n            // to the console.\n            this.ready.catch(() => {\n                return;\n            });\n            this._ready.reject(undefined);\n        }\n        if (this._delayedParse !== null) {\n            window.clearTimeout(this._delayedParse);\n        }\n    }\n    /**\n     * Get the index in the data string for the first character of a row and\n     * column.\n     *\n     * @param row - The row of the data item.\n     * @param column - The column of the data item.\n     * @returns - The index into the data string where the data item starts.\n     */\n    getOffsetIndex(row, column) {\n        // Declare local variables.\n        const ncols = this._columnCount;\n        // Check to see if row *should* be in the cache, based on the cache size.\n        let rowIndex = (row - this._columnOffsetsStartingRow) * ncols;\n        if (rowIndex < 0 || rowIndex > this._columnOffsets.length) {\n            // Row isn't in the cache, so we invalidate the entire cache and set up\n            // the cache to hold the requested row.\n            this._columnOffsets.fill(0xffffffff);\n            this._columnOffsetsStartingRow = row;\n            rowIndex = 0;\n        }\n        // Check to see if we need to fetch the row data into the cache.\n        if (this._columnOffsets[rowIndex] === 0xffffffff) {\n            // Figure out how many rows below us also need to be fetched.\n            let maxRows = 1;\n            while (maxRows <= this._maxCacheGet &&\n                this._columnOffsets[rowIndex + maxRows * ncols] === 0xffffff) {\n                maxRows++;\n            }\n            // Parse the data to get the column offsets.\n            const { offsets } = PARSERS[this._parser]({\n                data: this._rawData,\n                delimiter: this._delimiter,\n                rowDelimiter: this._rowDelimiter,\n                quote: this._quote,\n                columnOffsets: true,\n                maxRows: maxRows,\n                ncols: ncols,\n                startIndex: this._rowOffsets[row]\n            });\n            // Copy results to the cache.\n            for (let i = 0; i < offsets.length; i++) {\n                this._columnOffsets[rowIndex + i] = offsets[i];\n            }\n        }\n        // Return the offset index from cache.\n        return this._columnOffsets[rowIndex + column];\n    }\n    /**\n     * Parse the data string asynchronously.\n     *\n     * #### Notes\n     * It can take several seconds to parse a several hundred megabyte string, so\n     * we parse the first 500 rows to get something up on the screen, then we\n     * parse the full data string asynchronously.\n     */\n    parseAsync() {\n        // Number of rows to get initially.\n        let currentRows = this._initialRows;\n        // Number of rows to get in each chunk thereafter. We set this high to just\n        // get the rest of the rows for now.\n        let chunkRows = Math.pow(2, 32) - 1;\n        // We give the UI a chance to draw by delaying the chunk parsing.\n        const delay = 30; // milliseconds\n        // Define a function to parse a chunk up to and including endRow.\n        const parseChunk = (endRow) => {\n            try {\n                this._computeRowOffsets(endRow);\n            }\n            catch (e) {\n                // Sometimes the data string cannot be parsed with the full parser (for\n                // example, we may have the wrong delimiter). In these cases, fall back to\n                // the simpler parser so we can show something.\n                if (this._parser === 'quotes') {\n                    console.warn(e);\n                    this._parser = 'noquotes';\n                    this._resetParser();\n                    this._computeRowOffsets(endRow);\n                }\n                else {\n                    throw e;\n                }\n            }\n            return this._doneParsing;\n        };\n        // Reset the parser to its initial state.\n        this._resetParser();\n        // Parse the first rows to give us the start of the data right away.\n        const done = parseChunk(currentRows);\n        // If we are done, return early.\n        if (done) {\n            return;\n        }\n        // Define a function to recursively parse the next chunk after a delay.\n        const delayedParse = () => {\n            // Parse up to the new end row.\n            const done = parseChunk(currentRows + chunkRows);\n            currentRows += chunkRows;\n            // Gradually double the chunk size until we reach a million rows, if we\n            // start below a million-row chunk size.\n            if (chunkRows < 1000000) {\n                chunkRows *= 2;\n            }\n            // If we aren't done, the schedule another parse.\n            if (done) {\n                this._delayedParse = null;\n            }\n            else {\n                this._delayedParse = window.setTimeout(delayedParse, delay);\n            }\n        };\n        // Parse full data string in chunks, delayed by a few milliseconds to give the UI a chance to draw.\n        this._delayedParse = window.setTimeout(delayedParse, delay);\n    }\n    /**\n     * Compute the row offsets and initialize the column offset cache.\n     *\n     * @param endRow - The last row to parse, from the start of the data (first\n     * row is row 1).\n     *\n     * #### Notes\n     * This method supports parsing the data incrementally by calling it with\n     * incrementally higher endRow. Rows that have already been parsed will not be\n     * parsed again.\n     */\n    _computeRowOffsets(endRow = 4294967295) {\n        var _a;\n        // If we've already parsed up to endRow, or if we've already parsed the\n        // entire data set, return early.\n        if (this._rowCount >= endRow || this._doneParsing === true) {\n            return;\n        }\n        // Compute the column count if we don't already have it.\n        if (this._columnCount === undefined) {\n            // Get number of columns in first row\n            this._columnCount = PARSERS[this._parser]({\n                data: this._rawData,\n                delimiter: this._delimiter,\n                rowDelimiter: this._rowDelimiter,\n                quote: this._quote,\n                columnOffsets: true,\n                maxRows: 1\n            }).ncols;\n        }\n        // `reparse` is the number of rows we are requesting to parse over again.\n        // We generally start at the beginning of the last row offset, so that the\n        // first row offset returned is the same as the last row offset we already\n        // have. We parse the data up to and including the requested row.\n        const reparse = this._rowCount > 0 ? 1 : 0;\n        const { nrows, offsets } = PARSERS[this._parser]({\n            data: this._rawData,\n            startIndex: (_a = this._rowOffsets[this._rowCount - reparse]) !== null && _a !== void 0 ? _a : 0,\n            delimiter: this._delimiter,\n            rowDelimiter: this._rowDelimiter,\n            quote: this._quote,\n            columnOffsets: false,\n            maxRows: endRow - this._rowCount + reparse\n        });\n        // If we have already set up our initial bookkeeping, return early if we\n        // did not get any new rows beyond the last row that we've parsed, i.e.,\n        // nrows===1.\n        if (this._startedParsing && nrows <= reparse) {\n            this._doneParsing = true;\n            this._ready.resolve(undefined);\n            return;\n        }\n        this._startedParsing = true;\n        // Update the row count, accounting for how many rows were reparsed.\n        const oldRowCount = this._rowCount;\n        const duplicateRows = Math.min(nrows, reparse);\n        this._rowCount = oldRowCount + nrows - duplicateRows;\n        // If we didn't reach the requested row, we must be done.\n        if (this._rowCount < endRow) {\n            this._doneParsing = true;\n            this._ready.resolve(undefined);\n        }\n        // Copy the new offsets into a new row offset array if needed.\n        if (this._rowCount > oldRowCount) {\n            const oldRowOffsets = this._rowOffsets;\n            this._rowOffsets = new Uint32Array(this._rowCount);\n            this._rowOffsets.set(oldRowOffsets);\n            this._rowOffsets.set(offsets, oldRowCount - duplicateRows);\n        }\n        // Expand the column offsets array if needed\n        // If the full column offsets array is small enough, build a cache big\n        // enough for all column offsets. We allocate up to 128 megabytes:\n        // 128*(2**20 bytes/M)/(4 bytes/entry) = 33554432 entries.\n        const maxColumnOffsetsRows = Math.floor(33554432 / this._columnCount);\n        // We need to expand the column offset array if we were storing all column\n        // offsets before. Check to see if the previous size was small enough that\n        // we stored all column offsets.\n        if (oldRowCount <= maxColumnOffsetsRows) {\n            // Check to see if the new column offsets array is small enough to still\n            // store, or if we should cut over to a small cache.\n            if (this._rowCount <= maxColumnOffsetsRows) {\n                // Expand the existing column offset array for new column offsets.\n                const oldColumnOffsets = this._columnOffsets;\n                this._columnOffsets = new Uint32Array(this._rowCount * this._columnCount);\n                this._columnOffsets.set(oldColumnOffsets);\n                this._columnOffsets.fill(0xffffffff, oldColumnOffsets.length);\n            }\n            else {\n                // If not, then our cache size is at most the maximum number of rows we\n                // fill in the cache at a time.\n                const oldColumnOffsets = this._columnOffsets;\n                this._columnOffsets = new Uint32Array(Math.min(this._maxCacheGet, maxColumnOffsetsRows) * this._columnCount);\n                // Fill in the entries we already have.\n                this._columnOffsets.set(oldColumnOffsets.subarray(0, this._columnOffsets.length));\n                // Invalidate the rest of the entries.\n                this._columnOffsets.fill(0xffffffff, oldColumnOffsets.length);\n                this._columnOffsetsStartingRow = 0;\n            }\n        }\n        // We have more rows than before, so emit the rows-inserted change signal.\n        let firstIndex = oldRowCount;\n        if (this._header.length > 0) {\n            firstIndex -= 1;\n        }\n        this.emitChanged({\n            type: 'rows-inserted',\n            region: 'body',\n            index: firstIndex,\n            span: this._rowCount - oldRowCount\n        });\n    }\n    /**\n     * Get the parsed string field for a row and column.\n     *\n     * @param row - The row number of the data item.\n     * @param column - The column number of the data item.\n     * @returns The parsed string for the data item.\n     */\n    _getField(row, column) {\n        // Declare local variables.\n        let value;\n        let nextIndex;\n        // Find the index for the first character in the field.\n        const index = this.getOffsetIndex(row, column);\n        // Initialize the trim adjustments.\n        let trimRight = 0;\n        let trimLeft = 0;\n        // Find the end of the slice (the start of the next field), and how much we\n        // should adjust to trim off a trailing field or row delimiter. First check\n        // if we are getting the last column.\n        if (column === this._columnCount - 1) {\n            // Check if we are getting any row but the last.\n            if (row < this._rowCount - 1) {\n                // Set the next offset to the next row, column 0.\n                nextIndex = this.getOffsetIndex(row + 1, 0);\n                // Since we are not at the last row, we need to trim off the row\n                // delimiter.\n                trimRight += this._rowDelimiter.length;\n            }\n            else {\n                // We are getting the last data item, so the slice end is the end of the\n                // data string.\n                nextIndex = this._rawData.length;\n                // The string may or may not end in a row delimiter (RFC 4180 2.2), so\n                // we explicitly check if we should trim off a row delimiter.\n                if (this._rawData[nextIndex - 1] ===\n                    this._rowDelimiter[this._rowDelimiter.length - 1]) {\n                    trimRight += this._rowDelimiter.length;\n                }\n            }\n        }\n        else {\n            // The next field starts at the next column offset.\n            nextIndex = this.getOffsetIndex(row, column + 1);\n            // Trim off the delimiter if it exists at the end of the field\n            if (index < nextIndex &&\n                this._rawData[nextIndex - 1] === this._delimiter) {\n                trimRight += 1;\n            }\n        }\n        // Check to see if the field begins with a quote. If it does, trim a quote on either side.\n        if (this._rawData[index] === this._quote) {\n            trimLeft += 1;\n            trimRight += 1;\n        }\n        // Slice the actual value out of the data string.\n        value = this._rawData.slice(index + trimLeft, nextIndex - trimRight);\n        // If we have a quoted field and we have an escaped quote inside it, unescape it.\n        if (trimLeft === 1 && value.indexOf(this._quote) !== -1) {\n            value = value.replace(this._quoteEscaped, this._quote);\n        }\n        // Return the value.\n        return value;\n    }\n    /**\n     * Reset the parser state.\n     */\n    _resetParser() {\n        this._columnCount = undefined;\n        this._rowOffsets = new Uint32Array(0);\n        this._rowCount = 0;\n        this._startedParsing = false;\n        this._columnOffsets = new Uint32Array(0);\n        // Clear out state associated with the asynchronous parsing.\n        if (this._doneParsing === false) {\n            // Explicitly catch this rejection at least once so an error is not thrown\n            // to the console.\n            this.ready.catch(() => {\n                return;\n            });\n            this._ready.reject(undefined);\n        }\n        this._doneParsing = false;\n        this._ready = new PromiseDelegate();\n        if (this._delayedParse !== null) {\n            window.clearTimeout(this._delayedParse);\n            this._delayedParse = null;\n        }\n        this.emitChanged({ type: 'model-reset' });\n    }\n}\n//# sourceMappingURL=model.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * Possible parser states.\n */\nvar STATE;\n(function (STATE) {\n    STATE[STATE[\"QUOTED_FIELD\"] = 0] = \"QUOTED_FIELD\";\n    STATE[STATE[\"QUOTED_FIELD_QUOTE\"] = 1] = \"QUOTED_FIELD_QUOTE\";\n    STATE[STATE[\"UNQUOTED_FIELD\"] = 2] = \"UNQUOTED_FIELD\";\n    STATE[STATE[\"NEW_FIELD\"] = 3] = \"NEW_FIELD\";\n    STATE[STATE[\"NEW_ROW\"] = 4] = \"NEW_ROW\";\n})(STATE || (STATE = {}));\n/**\n * Possible row delimiters for the parser.\n */\nvar ROW_DELIMITER;\n(function (ROW_DELIMITER) {\n    ROW_DELIMITER[ROW_DELIMITER[\"CR\"] = 0] = \"CR\";\n    ROW_DELIMITER[ROW_DELIMITER[\"CRLF\"] = 1] = \"CRLF\";\n    ROW_DELIMITER[ROW_DELIMITER[\"LF\"] = 2] = \"LF\";\n})(ROW_DELIMITER || (ROW_DELIMITER = {}));\n/**\n * Parse delimiter-separated data.\n *\n * @param options The parser options\n * @returns An object giving the offsets for the rows or columns parsed.\n *\n * #### Notes\n * This implementation is based on [RFC 4180](https://tools.ietf.org/html/rfc4180).\n */\nexport function parseDSV(options) {\n    const { data, columnOffsets, delimiter = ',', startIndex = 0, maxRows = 0xffffffff, rowDelimiter = '\\r\\n', quote = '\"' } = options;\n    // ncols will be set automatically if it is undefined.\n    let ncols = options.ncols;\n    // The number of rows we've already parsed.\n    let nrows = 0;\n    // The row or column offsets we return.\n    const offsets = [];\n    // Set up some useful local variables.\n    const CH_DELIMITER = delimiter.charCodeAt(0);\n    const CH_QUOTE = quote.charCodeAt(0);\n    const CH_LF = 10; // \\n\n    const CH_CR = 13; // \\r\n    const endIndex = data.length;\n    const { QUOTED_FIELD, QUOTED_FIELD_QUOTE, UNQUOTED_FIELD, NEW_FIELD, NEW_ROW } = STATE;\n    const { CR, LF, CRLF } = ROW_DELIMITER;\n    const [rowDelimiterCode, rowDelimiterLength] = rowDelimiter === '\\r\\n'\n        ? [CRLF, 2]\n        : rowDelimiter === '\\r'\n            ? [CR, 1]\n            : [LF, 1];\n    // Always start off at the beginning of a row.\n    let state = NEW_ROW;\n    // Set up the starting index.\n    let i = startIndex;\n    // We initialize to 0 just in case we are asked to parse past the end of the\n    // string. In that case, we want the number of columns to be 0.\n    let col = 0;\n    // Declare some useful temporaries\n    let char;\n    // Loop through the data string\n    while (i < endIndex) {\n        // i is the index of a character in the state.\n        // If we just hit a new row, and there are still characters left, push a new\n        // offset on and reset the column counter. We want this logic at the top of\n        // the while loop rather than the bottom because we don't want a trailing\n        // row delimiter at the end of the data to trigger a new row offset.\n        if (state === NEW_ROW) {\n            // Start a new row and reset the column counter.\n            offsets.push(i);\n            col = 1;\n        }\n        // Below, we handle this character, modify the parser state and increment the index to be consistent.\n        // Get the integer code for the current character, so the comparisons below\n        // are faster.\n        char = data.charCodeAt(i);\n        // Update the parser state. This switch statement is responsible for\n        // updating the state to be consistent with the index i+1 (we increment i\n        // after the switch statement). In some situations, we may increment i\n        // inside this loop to skip over indices as a shortcut.\n        switch (state) {\n            // At the beginning of a row or field, we can have a quote, row delimiter, or field delimiter.\n            case NEW_ROW:\n            case NEW_FIELD:\n                switch (char) {\n                    // If we have a quote, we are starting an escaped field.\n                    case CH_QUOTE:\n                        state = QUOTED_FIELD;\n                        break;\n                    // A field delimiter means we are starting a new field.\n                    case CH_DELIMITER:\n                        state = NEW_FIELD;\n                        break;\n                    // A row delimiter means we are starting a new row.\n                    case CH_CR:\n                        if (rowDelimiterCode === CR) {\n                            state = NEW_ROW;\n                        }\n                        else if (rowDelimiterCode === CRLF &&\n                            data.charCodeAt(i + 1) === CH_LF) {\n                            // If we see an expected \\r\\n, then increment to the end of the delimiter.\n                            i++;\n                            state = NEW_ROW;\n                        }\n                        else {\n                            throw `string index ${i} (in row ${nrows}, column ${col}): carriage return found, but not as part of a row delimiter C ${data.charCodeAt(i + 1)}`;\n                        }\n                        break;\n                    case CH_LF:\n                        if (rowDelimiterCode === LF) {\n                            state = NEW_ROW;\n                        }\n                        else {\n                            throw `string index ${i} (in row ${nrows}, column ${col}): line feed found, but row delimiter starts with a carriage return`;\n                        }\n                        break;\n                    // Otherwise, we are starting an unquoted field.\n                    default:\n                        state = UNQUOTED_FIELD;\n                        break;\n                }\n                break;\n            // We are in a quoted field.\n            case QUOTED_FIELD:\n                // Skip ahead until we see another quote, which either ends the quoted\n                // field or starts an escaped quote.\n                i = data.indexOf(quote, i);\n                if (i < 0) {\n                    throw `string index ${i} (in row ${nrows}, column ${col}): mismatched quote`;\n                }\n                state = QUOTED_FIELD_QUOTE;\n                break;\n            // We just saw a quote in a quoted field. This could be the end of the\n            // field, or it could be a repeated quote (i.e., an escaped quote according\n            // to RFC 4180).\n            case QUOTED_FIELD_QUOTE:\n                switch (char) {\n                    // Another quote means we just saw an escaped quote, so we are still in\n                    // the quoted field.\n                    case CH_QUOTE:\n                        state = QUOTED_FIELD;\n                        break;\n                    // A field or row delimiter means the quoted field just ended and we are\n                    // going into a new field or new row.\n                    case CH_DELIMITER:\n                        state = NEW_FIELD;\n                        break;\n                    // A row delimiter means we are starting a new row in the next index.\n                    case CH_CR:\n                        if (rowDelimiterCode === CR) {\n                            state = NEW_ROW;\n                        }\n                        else if (rowDelimiterCode === CRLF &&\n                            data.charCodeAt(i + 1) === CH_LF) {\n                            // If we see an expected \\r\\n, then increment to the end of the delimiter.\n                            i++;\n                            state = NEW_ROW;\n                        }\n                        else {\n                            throw `string index ${i} (in row ${nrows}, column ${col}): carriage return found, but not as part of a row delimiter C ${data.charCodeAt(i + 1)}`;\n                        }\n                        break;\n                    case CH_LF:\n                        if (rowDelimiterCode === LF) {\n                            state = NEW_ROW;\n                        }\n                        else {\n                            throw `string index ${i} (in row ${nrows}, column ${col}): line feed found, but row delimiter starts with a carriage return`;\n                        }\n                        break;\n                    default:\n                        throw `string index ${i} (in row ${nrows}, column ${col}): quote in escaped field not followed by quote, delimiter, or row delimiter`;\n                }\n                break;\n            // We are in an unquoted field, so the only thing we look for is the next\n            // row or field delimiter.\n            case UNQUOTED_FIELD:\n                // Skip ahead to either the next field delimiter or possible start of a\n                // row delimiter (CR or LF).\n                while (i < endIndex) {\n                    char = data.charCodeAt(i);\n                    if (char === CH_DELIMITER || char === CH_LF || char === CH_CR) {\n                        break;\n                    }\n                    i++;\n                }\n                // Process the character we're seeing in an unquoted field.\n                switch (char) {\n                    // A field delimiter means we are starting a new field.\n                    case CH_DELIMITER:\n                        state = NEW_FIELD;\n                        break;\n                    // A row delimiter means we are starting a new row in the next index.\n                    case CH_CR:\n                        if (rowDelimiterCode === CR) {\n                            state = NEW_ROW;\n                        }\n                        else if (rowDelimiterCode === CRLF &&\n                            data.charCodeAt(i + 1) === CH_LF) {\n                            // If we see an expected \\r\\n, then increment to the end of the delimiter.\n                            i++;\n                            state = NEW_ROW;\n                        }\n                        else {\n                            throw `string index ${i} (in row ${nrows}, column ${col}): carriage return found, but not as part of a row delimiter C ${data.charCodeAt(i + 1)}`;\n                        }\n                        break;\n                    case CH_LF:\n                        if (rowDelimiterCode === LF) {\n                            state = NEW_ROW;\n                        }\n                        else {\n                            throw `string index ${i} (in row ${nrows}, column ${col}): line feed found, but row delimiter starts with a carriage return`;\n                        }\n                        break;\n                    // Otherwise, we continue on in the unquoted field.\n                    default:\n                        continue;\n                }\n                break;\n            // We should never reach this point since the parser state is handled above,\n            // so throw an error if we do.\n            default:\n                throw `string index ${i} (in row ${nrows}, column ${col}): state not recognized`;\n        }\n        // Increment i to the next character index\n        i++;\n        // Update return values based on state.\n        switch (state) {\n            case NEW_ROW:\n                nrows++;\n                // If ncols is undefined, set it to the number of columns in this row (first row implied).\n                if (ncols === undefined) {\n                    if (nrows !== 1) {\n                        throw new Error('Error parsing default number of columns');\n                    }\n                    ncols = col;\n                }\n                // Pad or truncate the column offsets in the previous row if we are\n                // returning them.\n                if (columnOffsets === true) {\n                    if (col < ncols) {\n                        // We didn't have enough columns, so add some more column offsets that\n                        // point to just before the row delimiter we just saw.\n                        for (; col < ncols; col++) {\n                            offsets.push(i - rowDelimiterLength);\n                        }\n                    }\n                    else if (col > ncols) {\n                        // We had too many columns, so truncate them.\n                        offsets.length = offsets.length - (col - ncols);\n                    }\n                }\n                // Shortcut return if nrows reaches the maximum rows we are to parse.\n                if (nrows === maxRows) {\n                    return { nrows, ncols: columnOffsets ? ncols : 0, offsets };\n                }\n                break;\n            case NEW_FIELD:\n                // If we are returning column offsets, log the current index.\n                if (columnOffsets === true) {\n                    offsets.push(i);\n                }\n                // Update the column counter.\n                col++;\n                break;\n            default:\n                break;\n        }\n    }\n    // If we finished parsing and we are *not* in the NEW_ROW state, then do the\n    // column padding/truncation for the last row. Also make sure ncols is\n    // defined.\n    if (state !== NEW_ROW) {\n        nrows++;\n        if (columnOffsets === true) {\n            // If ncols is *still* undefined, then we only parsed one row and didn't\n            // have a newline, so set it to the number of columns we found.\n            if (ncols === undefined) {\n                ncols = col;\n            }\n            if (col < ncols) {\n                // We didn't have enough columns, so add some more column offsets that\n                // point to just before the row delimiter we just saw.\n                for (; col < ncols; col++) {\n                    offsets.push(i - (rowDelimiterLength - 1));\n                }\n            }\n            else if (col > ncols) {\n                // We had too many columns, so truncate them.\n                offsets.length = offsets.length - (col - ncols);\n            }\n        }\n    }\n    return { nrows, ncols: columnOffsets ? ncols !== null && ncols !== void 0 ? ncols : 0 : 0, offsets };\n}\n/**\n * Parse delimiter-separated data where no delimiter is quoted.\n *\n * @param options The parser options\n * @returns An object giving the offsets for the rows or columns parsed.\n *\n * #### Notes\n * This function is an optimized parser for cases where there are no field or\n * row delimiters in quotes. Note that the data can have quotes, but they are\n * not interpreted in any special way. This implementation is based on [RFC\n * 4180](https://tools.ietf.org/html/rfc4180), but disregards quotes.\n */\nexport function parseDSVNoQuotes(options) {\n    // Set option defaults.\n    const { data, columnOffsets, delimiter = ',', rowDelimiter = '\\r\\n', startIndex = 0, maxRows = 0xffffffff } = options;\n    // ncols will be set automatically if it is undefined.\n    let ncols = options.ncols;\n    // Set up our return variables.\n    const offsets = [];\n    let nrows = 0;\n    // Set up various state variables.\n    const rowDelimiterLength = rowDelimiter.length;\n    let currRow = startIndex;\n    const len = data.length;\n    let nextRow;\n    let col;\n    let rowString;\n    let colIndex;\n    // The end of the current row.\n    let rowEnd;\n    // Start parsing at the start index.\n    nextRow = startIndex;\n    // Loop through rows until we run out of data or we've reached maxRows.\n    while (nextRow !== -1 && nrows < maxRows && currRow < len) {\n        // Store the offset for the beginning of the row and increment the rows.\n        offsets.push(currRow);\n        nrows++;\n        // Find the next row delimiter.\n        nextRow = data.indexOf(rowDelimiter, currRow);\n        // If the next row delimiter is not found, set the end of the row to the\n        // end of the data string.\n        rowEnd = nextRow === -1 ? len : nextRow;\n        // If we are returning column offsets, push them onto the array.\n        if (columnOffsets === true) {\n            // Find the next field delimiter. We slice the current row out so that\n            // the indexOf will stop at the end of the row. It may possibly be faster\n            // to just use a loop to check each character.\n            col = 1;\n            rowString = data.slice(currRow, rowEnd);\n            colIndex = rowString.indexOf(delimiter);\n            if (ncols === undefined) {\n                // If we don't know how many columns we need, loop through and find all\n                // of the field delimiters in this row.\n                while (colIndex !== -1) {\n                    offsets.push(currRow + colIndex + 1);\n                    col++;\n                    colIndex = rowString.indexOf(delimiter, colIndex + 1);\n                }\n                // Set ncols to the number of fields we found.\n                ncols = col;\n            }\n            else {\n                // If we know the number of columns we expect, find the field delimiters\n                // up to that many columns.\n                while (colIndex !== -1 && col < ncols) {\n                    offsets.push(currRow + colIndex + 1);\n                    col++;\n                    colIndex = rowString.indexOf(delimiter, colIndex + 1);\n                }\n                // If we didn't reach the number of columns we expected, pad the offsets\n                // with the offset just before the row delimiter.\n                while (col < ncols) {\n                    offsets.push(rowEnd);\n                    col++;\n                }\n            }\n        }\n        // Skip past the row delimiter at the end of the row.\n        currRow = rowEnd + rowDelimiterLength;\n    }\n    return { nrows, ncols: columnOffsets ? ncols !== null && ncols !== void 0 ? ncols : 0 : 0, offsets };\n}\n//# sourceMappingURL=parse.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { Styling } from '@jupyterlab/ui-components';\nimport { Widget } from '@lumino/widgets';\n/**\n * The class name added to a csv toolbar widget.\n */\nconst CSV_DELIMITER_CLASS = 'jp-CSVDelimiter';\nconst CSV_DELIMITER_LABEL_CLASS = 'jp-CSVDelimiter-label';\n/**\n * The class name added to a csv toolbar's dropdown element.\n */\nconst CSV_DELIMITER_DROPDOWN_CLASS = 'jp-CSVDelimiter-dropdown';\n/**\n * A widget for selecting a delimiter.\n */\nexport class CSVDelimiter extends Widget {\n    /**\n     * Construct a new csv table widget.\n     */\n    constructor(options) {\n        super({\n            node: Private.createNode(options.widget.delimiter, options.translator)\n        });\n        this._widget = options.widget;\n        this.addClass(CSV_DELIMITER_CLASS);\n    }\n    /**\n     * The delimiter dropdown menu.\n     */\n    get selectNode() {\n        return this.node.getElementsByTagName('select')[0];\n    }\n    /**\n     * Handle the DOM events for the widget.\n     *\n     * @param event - The DOM event sent to the widget.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the dock panel's node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'change':\n                this._widget.delimiter = this.selectNode.value;\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Handle `after-attach` messages for the widget.\n     */\n    onAfterAttach(msg) {\n        this.selectNode.addEventListener('change', this);\n    }\n    /**\n     * Handle `before-detach` messages for the widget.\n     */\n    onBeforeDetach(msg) {\n        this.selectNode.removeEventListener('change', this);\n    }\n}\n/**\n * A namespace for private toolbar methods.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Create the node for the delimiter switcher.\n     */\n    function createNode(selected, translator) {\n        translator = translator || nullTranslator;\n        const trans = translator === null || translator === void 0 ? void 0 : translator.load('jupyterlab');\n        // The supported parsing delimiters and labels.\n        const delimiters = [\n            [',', ','],\n            [';', ';'],\n            ['\\t', trans.__('tab')],\n            ['|', trans.__('pipe')],\n            ['#', trans.__('hash')]\n        ];\n        const div = document.createElement('div');\n        const label = document.createElement('span');\n        const select = document.createElement('select');\n        label.textContent = trans.__('Delimiter: ');\n        label.className = CSV_DELIMITER_LABEL_CLASS;\n        for (const [delimiter, label] of delimiters) {\n            const option = document.createElement('option');\n            option.value = delimiter;\n            option.textContent = label;\n            if (delimiter === selected) {\n                option.selected = true;\n            }\n            select.appendChild(option);\n        }\n        div.appendChild(label);\n        const node = Styling.wrapSelect(select);\n        node.classList.add(CSV_DELIMITER_DROPDOWN_CLASS);\n        div.appendChild(node);\n        return div;\n    }\n    Private.createNode = createNode;\n})(Private || (Private = {}));\n//# sourceMappingURL=toolbar.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ActivityMonitor } from '@jupyterlab/coreutils';\nimport { ABCWidgetFactory, DocumentWidget } from '@jupyterlab/docregistry';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\nimport { PanelLayout, Widget } from '@lumino/widgets';\nimport { CSVDelimiter } from './toolbar';\n/**\n * The class name added to a CSV viewer.\n */\nconst CSV_CLASS = 'jp-CSVViewer';\n/**\n * The class name added to a CSV viewer datagrid.\n */\nconst CSV_GRID_CLASS = 'jp-CSVViewer-grid';\n/**\n * The timeout to wait for change activity to have ceased before rendering.\n */\nconst RENDER_TIMEOUT = 1000;\n/**\n * Configuration for cells textrenderer.\n */\nexport class TextRenderConfig {\n}\n/**\n * Search service remembers the search state and the location of the last\n * match, for incremental searching.\n * Search service is also responsible of providing a cell renderer function\n * to set the background color of cells matching the search text.\n */\nexport class GridSearchService {\n    constructor(grid) {\n        this._looping = true;\n        this._changed = new Signal(this);\n        this._grid = grid;\n        this._query = null;\n        this._row = 0;\n        this._column = -1;\n    }\n    /**\n     * A signal fired when the grid changes.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Returns a cellrenderer config function to render each cell background.\n     * If cell match, background is matchBackgroundColor, if it's the current\n     * match, background is currentMatchBackgroundColor.\n     */\n    cellBackgroundColorRendererFunc(config) {\n        return ({ value, row, column }) => {\n            if (this._query) {\n                if (value.match(this._query)) {\n                    if (this._row === row && this._column === column) {\n                        return config.currentMatchBackgroundColor;\n                    }\n                    return config.matchBackgroundColor;\n                }\n            }\n            return '';\n        };\n    }\n    /**\n     * Clear the search.\n     */\n    clear() {\n        this._query = null;\n        this._row = 0;\n        this._column = -1;\n        this._changed.emit(undefined);\n    }\n    /**\n     * incrementally look for searchText.\n     */\n    find(query, reverse = false) {\n        const model = this._grid.dataModel;\n        const rowCount = model.rowCount('body');\n        const columnCount = model.columnCount('body');\n        if (this._query !== query) {\n            // reset search\n            this._row = 0;\n            this._column = -1;\n        }\n        this._query = query;\n        // check if the match is in current viewport\n        const minRow = this._grid.scrollY / this._grid.defaultSizes.rowHeight;\n        const maxRow = (this._grid.scrollY + this._grid.pageHeight) /\n            this._grid.defaultSizes.rowHeight;\n        const minColumn = this._grid.scrollX / this._grid.defaultSizes.columnHeaderHeight;\n        const maxColumn = (this._grid.scrollX + this._grid.pageWidth) /\n            this._grid.defaultSizes.columnHeaderHeight;\n        const isInViewport = (row, column) => {\n            return (row >= minRow &&\n                row <= maxRow &&\n                column >= minColumn &&\n                column <= maxColumn);\n        };\n        const increment = reverse ? -1 : 1;\n        this._column += increment;\n        for (let row = this._row; reverse ? row >= 0 : row < rowCount; row += increment) {\n            for (let col = this._column; reverse ? col >= 0 : col < columnCount; col += increment) {\n                const cellData = model.data('body', row, col);\n                if (cellData.match(query)) {\n                    // to update the background of matching cells.\n                    // TODO: we only really need to invalidate the previous and current\n                    // cell rects, not the entire grid.\n                    this._changed.emit(undefined);\n                    if (!isInViewport(row, col)) {\n                        this._grid.scrollToRow(row);\n                    }\n                    this._row = row;\n                    this._column = col;\n                    return true;\n                }\n            }\n            this._column = reverse ? columnCount - 1 : 0;\n        }\n        // We've finished searching all the way to the limits of the grid. If this\n        // is the first time through (looping is true), wrap the indices and search\n        // again. Otherwise, give up.\n        if (this._looping) {\n            this._looping = false;\n            this._row = reverse ? 0 : rowCount - 1;\n            this._wrapRows(reverse);\n            try {\n                return this.find(query, reverse);\n            }\n            finally {\n                this._looping = true;\n            }\n        }\n        return false;\n    }\n    /**\n     * Wrap indices if needed to just before the start or just after the end.\n     */\n    _wrapRows(reverse = false) {\n        const model = this._grid.dataModel;\n        const rowCount = model.rowCount('body');\n        const columnCount = model.columnCount('body');\n        if (reverse && this._row <= 0) {\n            // if we are at the front, wrap to just past the end.\n            this._row = rowCount - 1;\n            this._column = columnCount;\n        }\n        else if (!reverse && this._row >= rowCount - 1) {\n            // if we are at the end, wrap to just before the front.\n            this._row = 0;\n            this._column = -1;\n        }\n    }\n    get query() {\n        return this._query;\n    }\n}\n/**\n * A viewer for CSV tables.\n */\nexport class CSVViewer extends Widget {\n    /**\n     * Construct a new CSV viewer.\n     */\n    constructor(options) {\n        super();\n        this._monitor = null;\n        this._delimiter = ',';\n        this._revealed = new PromiseDelegate();\n        this._baseRenderer = null;\n        this._context = options.context;\n        this.layout = new PanelLayout();\n        this.addClass(CSV_CLASS);\n        this._ready = this.initialize();\n    }\n    /**\n     * Promise which resolves when the content is ready.\n     */\n    get ready() {\n        return this._ready;\n    }\n    async initialize() {\n        const layout = this.layout;\n        if (this.isDisposed || !layout) {\n            return;\n        }\n        const { BasicKeyHandler, BasicMouseHandler, DataGrid } = await Private.ensureDataGrid();\n        this._defaultStyle = DataGrid.defaultStyle;\n        this._grid = new DataGrid({\n            defaultSizes: {\n                rowHeight: 24,\n                columnWidth: 144,\n                rowHeaderWidth: 64,\n                columnHeaderHeight: 36\n            }\n        });\n        this._grid.addClass(CSV_GRID_CLASS);\n        this._grid.headerVisibility = 'all';\n        this._grid.keyHandler = new BasicKeyHandler();\n        this._grid.mouseHandler = new BasicMouseHandler();\n        this._grid.copyConfig = {\n            separator: '\\t',\n            format: DataGrid.copyFormatGeneric,\n            headers: 'all',\n            warningThreshold: 1e6\n        };\n        layout.addWidget(this._grid);\n        this._searchService = new GridSearchService(this._grid);\n        this._searchService.changed.connect(this._updateRenderer, this);\n        await this._context.ready;\n        await this._updateGrid();\n        this._revealed.resolve(undefined);\n        // Throttle the rendering rate of the widget.\n        this._monitor = new ActivityMonitor({\n            signal: this._context.model.contentChanged,\n            timeout: RENDER_TIMEOUT\n        });\n        this._monitor.activityStopped.connect(this._updateGrid, this);\n    }\n    /**\n     * The CSV widget's context.\n     */\n    get context() {\n        return this._context;\n    }\n    /**\n     * A promise that resolves when the csv viewer is ready to be revealed.\n     */\n    get revealed() {\n        return this._revealed.promise;\n    }\n    /**\n     * The delimiter for the file.\n     */\n    get delimiter() {\n        return this._delimiter;\n    }\n    set delimiter(value) {\n        if (value === this._delimiter) {\n            return;\n        }\n        this._delimiter = value;\n        void this._updateGrid();\n    }\n    /**\n     * The style used by the data grid.\n     */\n    get style() {\n        return this._grid.style;\n    }\n    set style(value) {\n        this._grid.style = { ...this._defaultStyle, ...value };\n    }\n    /**\n     * The config used to create text renderer.\n     */\n    set rendererConfig(rendererConfig) {\n        this._baseRenderer = rendererConfig;\n        void this._updateRenderer();\n    }\n    /**\n     * The search service\n     */\n    get searchService() {\n        return this._searchService;\n    }\n    /**\n     * Dispose of the resources used by the widget.\n     */\n    dispose() {\n        if (this._monitor) {\n            this._monitor.dispose();\n        }\n        super.dispose();\n    }\n    /**\n     * Go to line\n     */\n    goToLine(lineNumber) {\n        this._grid.scrollToRow(lineNumber);\n    }\n    /**\n     * Handle `'activate-request'` messages.\n     */\n    onActivateRequest(msg) {\n        this.node.tabIndex = -1;\n        this.node.focus();\n    }\n    /**\n     * Create the model for the grid.\n     */\n    async _updateGrid() {\n        const { BasicSelectionModel } = await Private.ensureDataGrid();\n        const { DSVModel } = await Private.ensureDSVModel();\n        const data = this._context.model.toString();\n        const delimiter = this._delimiter;\n        const oldModel = this._grid.dataModel;\n        const dataModel = (this._grid.dataModel = new DSVModel({\n            data,\n            delimiter\n        }));\n        this._grid.selectionModel = new BasicSelectionModel({ dataModel });\n        if (oldModel) {\n            oldModel.dispose();\n        }\n    }\n    /**\n     * Update the renderer for the grid.\n     */\n    async _updateRenderer() {\n        if (this._baseRenderer === null) {\n            return;\n        }\n        const { TextRenderer } = await Private.ensureDataGrid();\n        const rendererConfig = this._baseRenderer;\n        const renderer = new TextRenderer({\n            textColor: rendererConfig.textColor,\n            horizontalAlignment: rendererConfig.horizontalAlignment,\n            backgroundColor: this._searchService.cellBackgroundColorRendererFunc(rendererConfig)\n        });\n        this._grid.cellRenderers.update({\n            body: renderer,\n            'column-header': renderer,\n            'corner-header': renderer,\n            'row-header': renderer\n        });\n    }\n}\n/**\n * A document widget for CSV content widgets.\n */\nexport class CSVDocumentWidget extends DocumentWidget {\n    constructor(options) {\n        let { content, context, delimiter, reveal, ...other } = options;\n        content = content || Private.createContent(context);\n        reveal = Promise.all([reveal, content.revealed]);\n        super({ content, context, reveal, ...other });\n        if (delimiter) {\n            content.delimiter = delimiter;\n        }\n    }\n    /**\n     * Set URI fragment identifier for rows\n     */\n    setFragment(fragment) {\n        const parseFragments = fragment.split('=');\n        // TODO: expand to allow columns and cells to be selected\n        // reference: https://tools.ietf.org/html/rfc7111#section-3\n        if (parseFragments[0] !== '#row') {\n            return;\n        }\n        // multiple rows, separated by semi-colons can be provided, we will just\n        // go to the top one\n        let topRow = parseFragments[1].split(';')[0];\n        // a range of rows can be provided, we will take the first value\n        topRow = topRow.split('-')[0];\n        // go to that row\n        void this.context.ready.then(() => {\n            this.content.goToLine(Number(topRow));\n        });\n    }\n}\n/**\n * A widget factory for CSV widgets.\n */\nexport class CSVViewerFactory extends ABCWidgetFactory {\n    /**\n     * Create a new widget given a context.\n     */\n    createNewWidget(context) {\n        const translator = this.translator;\n        return new CSVDocumentWidget({ context, translator });\n    }\n    /**\n     * Default factory for toolbar items to be added after the widget is created.\n     */\n    defaultToolbarFactory(widget) {\n        return [\n            {\n                name: 'delimiter',\n                widget: new CSVDelimiter({\n                    widget: widget.content,\n                    translator: this.translator\n                })\n            }\n        ];\n    }\n}\n/**\n * A widget factory for TSV widgets.\n */\nexport class TSVViewerFactory extends CSVViewerFactory {\n    /**\n     * Create a new widget given a context.\n     */\n    createNewWidget(context) {\n        const delimiter = '\\t';\n        return new CSVDocumentWidget({\n            context,\n            delimiter,\n            translator: this.translator\n        });\n    }\n}\nvar Private;\n(function (Private) {\n    let gridLoaded = null;\n    let modelLoaded = null;\n    /**\n     * Lazily load the datagrid module when the first grid is requested.\n     */\n    async function ensureDataGrid() {\n        if (gridLoaded == null) {\n            gridLoaded = new PromiseDelegate();\n            gridLoaded.resolve(await import('@lumino/datagrid'));\n        }\n        return gridLoaded.promise;\n    }\n    Private.ensureDataGrid = ensureDataGrid;\n    async function ensureDSVModel() {\n        if (modelLoaded == null) {\n            modelLoaded = new PromiseDelegate();\n            modelLoaded.resolve(await import('./model'));\n        }\n        return modelLoaded.promise;\n    }\n    Private.ensureDSVModel = ensureDSVModel;\n    function createContent(context) {\n        return new CSVViewer({ context });\n    }\n    Private.createContent = createContent;\n})(Private || (Private = {}));\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module debugger-extension\n */\nimport { ILabShell, ILayoutRestorer } from '@jupyterlab/application';\nimport { Clipboard, Dialog, ICommandPalette, InputDialog, ISessionContextDialogs, IThemeManager, MainAreaWidget, SessionContextDialogs, showDialog, WidgetTracker } from '@jupyterlab/apputils';\nimport { CodeCell } from '@jupyterlab/cells';\nimport { IEditorServices } from '@jupyterlab/codeeditor';\nimport { ConsolePanel, IConsoleTracker } from '@jupyterlab/console';\nimport { PageConfig, PathExt } from '@jupyterlab/coreutils';\nimport { Debugger, IDebugger, IDebuggerConfig, IDebuggerHandler, IDebuggerSidebar, IDebuggerSources, IDebuggerSourceViewer } from '@jupyterlab/debugger';\nimport { DocumentWidget } from '@jupyterlab/docregistry';\nimport { FileEditor, IEditorTracker } from '@jupyterlab/fileeditor';\nimport { ILoggerRegistry } from '@jupyterlab/logconsole';\nimport { INotebookTracker, NotebookActions, NotebookPanel } from '@jupyterlab/notebook';\nimport { standardRendererFactories as initialFactories, IRenderMimeRegistry, RenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nfunction notifyCommands(commands) {\n    Object.values(Debugger.CommandIDs).forEach(command => {\n        if (commands.hasCommand(command)) {\n            commands.notifyCommandChanged(command);\n        }\n    });\n}\nfunction updateState(commands, debug) {\n    const hasStoppedThreads = debug.hasStoppedThreads();\n    if (hasStoppedThreads) {\n        document.body.dataset.jpDebuggerStoppedThreads = 'true';\n    }\n    else {\n        delete document.body.dataset.jpDebuggerStoppedThreads;\n    }\n    notifyCommands(commands);\n}\n/**\n * A plugin that provides visual debugging support for consoles.\n */\nconst consoles = {\n    // FIXME This should be in @jupyterlab/console-extension\n    id: '@jupyterlab/debugger-extension:consoles',\n    description: 'Add debugger capability to the consoles.',\n    autoStart: true,\n    requires: [IDebugger, IConsoleTracker],\n    optional: [ILabShell],\n    activate: (app, debug, consoleTracker, labShell) => {\n        const handler = new Debugger.Handler({\n            type: 'console',\n            shell: app.shell,\n            service: debug\n        });\n        const updateHandlerAndCommands = async (widget) => {\n            const { sessionContext } = widget;\n            await sessionContext.ready;\n            await handler.updateContext(widget, sessionContext);\n            updateState(app.commands, debug);\n        };\n        if (labShell) {\n            labShell.currentChanged.connect((_, update) => {\n                const widget = update.newValue;\n                if (widget instanceof ConsolePanel) {\n                    void updateHandlerAndCommands(widget);\n                }\n            });\n        }\n        else {\n            consoleTracker.currentChanged.connect((_, consolePanel) => {\n                if (consolePanel) {\n                    void updateHandlerAndCommands(consolePanel);\n                }\n            });\n        }\n    }\n};\n/**\n * A plugin that provides visual debugging support for file editors.\n */\nconst files = {\n    // FIXME This should be in @jupyterlab/fileeditor-extension\n    id: '@jupyterlab/debugger-extension:files',\n    description: 'Adds debugger capabilities to files.',\n    autoStart: true,\n    requires: [IDebugger, IEditorTracker],\n    optional: [ILabShell],\n    activate: (app, debug, editorTracker, labShell) => {\n        const handler = new Debugger.Handler({\n            type: 'file',\n            shell: app.shell,\n            service: debug\n        });\n        const activeSessions = {};\n        const updateHandlerAndCommands = async (widget) => {\n            const sessions = app.serviceManager.sessions;\n            try {\n                const model = await sessions.findByPath(widget.context.path);\n                if (!model) {\n                    return;\n                }\n                let session = activeSessions[model.id];\n                if (!session) {\n                    // Use `connectTo` only if the session does not exist.\n                    // `connectTo` sends a kernel_info_request on the shell\n                    // channel, which blocks the debug session restore when waiting\n                    // for the kernel to be ready\n                    session = sessions.connectTo({ model });\n                    activeSessions[model.id] = session;\n                }\n                await handler.update(widget, session);\n                updateState(app.commands, debug);\n            }\n            catch (_a) {\n                return;\n            }\n        };\n        if (labShell) {\n            labShell.currentChanged.connect((_, update) => {\n                const widget = update.newValue;\n                if (widget instanceof DocumentWidget) {\n                    const { content } = widget;\n                    if (content instanceof FileEditor) {\n                        void updateHandlerAndCommands(widget);\n                    }\n                }\n            });\n        }\n        else {\n            editorTracker.currentChanged.connect((_, documentWidget) => {\n                if (documentWidget) {\n                    void updateHandlerAndCommands(documentWidget);\n                }\n            });\n        }\n    }\n};\n/**\n * A plugin that provides visual debugging support for notebooks.\n */\nconst notebooks = {\n    // FIXME This should be in @jupyterlab/notebook-extension\n    id: '@jupyterlab/debugger-extension:notebooks',\n    description: 'Adds debugger capability to notebooks and provides the debugger notebook handler.',\n    autoStart: true,\n    requires: [IDebugger, INotebookTracker],\n    optional: [ILabShell, ICommandPalette, ISessionContextDialogs, ITranslator],\n    provides: IDebuggerHandler,\n    activate: (app, service, notebookTracker, labShell, palette, sessionDialogs_, translator_) => {\n        const translator = translator_ !== null && translator_ !== void 0 ? translator_ : nullTranslator;\n        const sessionDialogs = sessionDialogs_ !== null && sessionDialogs_ !== void 0 ? sessionDialogs_ : new SessionContextDialogs({ translator });\n        const handler = new Debugger.Handler({\n            type: 'notebook',\n            shell: app.shell,\n            service\n        });\n        const trans = translator.load('jupyterlab');\n        app.commands.addCommand(Debugger.CommandIDs.restartDebug, {\n            label: trans.__('Restart Kernel and Debug…'),\n            caption: trans.__('Restart Kernel and Debug…'),\n            isEnabled: () => service.isStarted,\n            execute: async () => {\n                const state = service.getDebuggerState();\n                await service.stop();\n                const widget = notebookTracker.currentWidget;\n                if (!widget) {\n                    return;\n                }\n                const { content, sessionContext } = widget;\n                const restarted = await sessionDialogs.restart(sessionContext);\n                if (!restarted) {\n                    return;\n                }\n                await service.restoreDebuggerState(state);\n                await handler.updateWidget(widget, sessionContext.session);\n                await NotebookActions.runAll(content, sessionContext, sessionDialogs, translator);\n            }\n        });\n        const updateHandlerAndCommands = async (widget) => {\n            if (widget) {\n                const { sessionContext } = widget;\n                await sessionContext.ready;\n                await handler.updateContext(widget, sessionContext);\n            }\n            updateState(app.commands, service);\n        };\n        if (labShell) {\n            labShell.currentChanged.connect((_, update) => {\n                const widget = update.newValue;\n                if (widget instanceof NotebookPanel) {\n                    void updateHandlerAndCommands(widget);\n                }\n            });\n        }\n        else {\n            notebookTracker.currentChanged.connect((_, notebookPanel) => {\n                if (notebookPanel) {\n                    void updateHandlerAndCommands(notebookPanel);\n                }\n            });\n        }\n        if (palette) {\n            palette.addItem({\n                category: 'Notebook Operations',\n                command: Debugger.CommandIDs.restartDebug\n            });\n        }\n        return handler;\n    }\n};\n/**\n * A plugin that provides a debugger service.\n */\nconst service = {\n    id: '@jupyterlab/debugger-extension:service',\n    description: 'Provides the debugger service.',\n    autoStart: true,\n    provides: IDebugger,\n    requires: [IDebuggerConfig],\n    optional: [IDebuggerSources, ITranslator],\n    activate: (app, config, debuggerSources, translator) => new Debugger.Service({\n        config,\n        debuggerSources,\n        specsManager: app.serviceManager.kernelspecs,\n        translator\n    })\n};\n/**\n * A plugin that provides a configuration with hash method.\n */\nconst configuration = {\n    id: '@jupyterlab/debugger-extension:config',\n    description: 'Provides the debugger configuration',\n    provides: IDebuggerConfig,\n    autoStart: true,\n    activate: () => new Debugger.Config()\n};\n/**\n * A plugin that provides source/editor functionality for debugging.\n */\nconst sources = {\n    id: '@jupyterlab/debugger-extension:sources',\n    description: 'Provides the source feature for debugging',\n    autoStart: true,\n    provides: IDebuggerSources,\n    requires: [IDebuggerConfig, IEditorServices],\n    optional: [INotebookTracker, IConsoleTracker, IEditorTracker],\n    activate: (app, config, editorServices, notebookTracker, consoleTracker, editorTracker) => {\n        return new Debugger.Sources({\n            config,\n            shell: app.shell,\n            editorServices,\n            notebookTracker,\n            consoleTracker,\n            editorTracker\n        });\n    }\n};\n/*\n * A plugin to open detailed views for variables.\n */\nconst variables = {\n    id: '@jupyterlab/debugger-extension:variables',\n    description: 'Adds variables renderer and inspection in the debugger variable panel.',\n    autoStart: true,\n    requires: [IDebugger, IDebuggerHandler, ITranslator],\n    optional: [IThemeManager, IRenderMimeRegistry],\n    activate: (app, service, handler, translator, themeManager, rendermime) => {\n        const trans = translator.load('jupyterlab');\n        const { commands, shell } = app;\n        const tracker = new WidgetTracker({\n            namespace: 'debugger/inspect-variable'\n        });\n        const trackerMime = new WidgetTracker({\n            namespace: 'debugger/render-variable'\n        });\n        const CommandIDs = Debugger.CommandIDs;\n        // Add commands\n        commands.addCommand(CommandIDs.inspectVariable, {\n            label: trans.__('Inspect Variable'),\n            caption: trans.__('Inspect Variable'),\n            isEnabled: args => {\n                var _a, _b, _c, _d;\n                return !!((_a = service.session) === null || _a === void 0 ? void 0 : _a.isStarted) &&\n                    Number((_d = (_b = args.variableReference) !== null && _b !== void 0 ? _b : (_c = service.model.variables.selectedVariable) === null || _c === void 0 ? void 0 : _c.variablesReference) !== null && _d !== void 0 ? _d : 0) > 0;\n            },\n            execute: async (args) => {\n                var _a, _b, _c, _d;\n                let { variableReference, name } = args;\n                if (!variableReference) {\n                    variableReference =\n                        (_a = service.model.variables.selectedVariable) === null || _a === void 0 ? void 0 : _a.variablesReference;\n                }\n                if (!name) {\n                    name = (_b = service.model.variables.selectedVariable) === null || _b === void 0 ? void 0 : _b.name;\n                }\n                const id = `jp-debugger-variable-${name}`;\n                if (!name ||\n                    !variableReference ||\n                    tracker.find(widget => widget.id === id)) {\n                    return;\n                }\n                const variables = await service.inspectVariable(variableReference);\n                if (!variables || variables.length === 0) {\n                    return;\n                }\n                const model = service.model.variables;\n                const widget = new MainAreaWidget({\n                    content: new Debugger.VariablesGrid({\n                        model,\n                        commands,\n                        scopes: [{ name, variables }],\n                        themeManager\n                    })\n                });\n                widget.addClass('jp-DebuggerVariables');\n                widget.id = id;\n                widget.title.icon = Debugger.Icons.variableIcon;\n                widget.title.label = `${(_d = (_c = service.session) === null || _c === void 0 ? void 0 : _c.connection) === null || _d === void 0 ? void 0 : _d.name} - ${name}`;\n                void tracker.add(widget);\n                const disposeWidget = () => {\n                    widget.dispose();\n                    model.changed.disconnect(disposeWidget);\n                };\n                model.changed.connect(disposeWidget);\n                shell.add(widget, 'main', {\n                    mode: tracker.currentWidget ? 'split-right' : 'split-bottom',\n                    activate: false,\n                    type: 'Debugger Variables'\n                });\n            }\n        });\n        commands.addCommand(CommandIDs.renderMimeVariable, {\n            label: trans.__('Render Variable'),\n            caption: trans.__('Render variable according to its mime type'),\n            isEnabled: () => { var _a; return !!((_a = service.session) === null || _a === void 0 ? void 0 : _a.isStarted); },\n            isVisible: () => service.model.hasRichVariableRendering &&\n                (rendermime !== null || handler.activeWidget instanceof NotebookPanel),\n            execute: args => {\n                var _a, _b, _c, _d, _e, _f, _g, _h;\n                let { name, frameId } = args;\n                if (!name) {\n                    name = (_a = service.model.variables.selectedVariable) === null || _a === void 0 ? void 0 : _a.name;\n                }\n                if (!frameId) {\n                    frameId = (_b = service.model.callstack.frame) === null || _b === void 0 ? void 0 : _b.id;\n                }\n                const activeWidget = handler.activeWidget;\n                let activeRendermime = activeWidget instanceof NotebookPanel\n                    ? activeWidget.content.rendermime\n                    : rendermime;\n                if (!activeRendermime) {\n                    return;\n                }\n                const id = `jp-debugger-variable-mime-${name}-${(_d = (_c = service.session) === null || _c === void 0 ? void 0 : _c.connection) === null || _d === void 0 ? void 0 : _d.path.replace('/', '-')}`;\n                if (!name || // Name is mandatory\n                    trackerMime.find(widget => widget.id === id) || // Widget already exists\n                    (!frameId && service.hasStoppedThreads()) // frame id missing on breakpoint\n                ) {\n                    return;\n                }\n                const variablesModel = service.model.variables;\n                const widget = new Debugger.VariableRenderer({\n                    dataLoader: () => service.inspectRichVariable(name, frameId),\n                    rendermime: activeRendermime,\n                    translator\n                });\n                widget.addClass('jp-DebuggerRichVariable');\n                widget.id = id;\n                widget.title.icon = Debugger.Icons.variableIcon;\n                widget.title.label = `${name} - ${(_f = (_e = service.session) === null || _e === void 0 ? void 0 : _e.connection) === null || _f === void 0 ? void 0 : _f.name}`;\n                widget.title.caption = `${name} - ${(_h = (_g = service.session) === null || _g === void 0 ? void 0 : _g.connection) === null || _h === void 0 ? void 0 : _h.path}`;\n                void trackerMime.add(widget);\n                const disposeWidget = () => {\n                    widget.dispose();\n                    variablesModel.changed.disconnect(refreshWidget);\n                    activeWidget === null || activeWidget === void 0 ? void 0 : activeWidget.disposed.disconnect(disposeWidget);\n                };\n                const refreshWidget = () => {\n                    // Refresh the widget only if the active element is the same.\n                    if (handler.activeWidget === activeWidget) {\n                        void widget.refresh();\n                    }\n                };\n                widget.disposed.connect(disposeWidget);\n                variablesModel.changed.connect(refreshWidget);\n                activeWidget === null || activeWidget === void 0 ? void 0 : activeWidget.disposed.connect(disposeWidget);\n                shell.add(widget, 'main', {\n                    mode: trackerMime.currentWidget ? 'split-right' : 'split-bottom',\n                    activate: false,\n                    type: 'Debugger Variables'\n                });\n            }\n        });\n        commands.addCommand(CommandIDs.copyToClipboard, {\n            label: trans.__('Copy to Clipboard'),\n            caption: trans.__('Copy text representation of the value to clipboard'),\n            isEnabled: () => {\n                var _a, _b;\n                return (!!((_a = service.session) === null || _a === void 0 ? void 0 : _a.isStarted) &&\n                    !!((_b = service.model.variables.selectedVariable) === null || _b === void 0 ? void 0 : _b.value));\n            },\n            isVisible: () => handler.activeWidget instanceof NotebookPanel,\n            execute: async () => {\n                const value = service.model.variables.selectedVariable.value;\n                if (value) {\n                    Clipboard.copyToSystem(value);\n                }\n            }\n        });\n        commands.addCommand(CommandIDs.copyToGlobals, {\n            label: trans.__('Copy Variable to Globals'),\n            caption: trans.__('Copy variable to globals scope'),\n            isEnabled: () => { var _a; return !!((_a = service.session) === null || _a === void 0 ? void 0 : _a.isStarted); },\n            isVisible: () => handler.activeWidget instanceof NotebookPanel &&\n                service.model.supportCopyToGlobals,\n            execute: async (args) => {\n                const name = service.model.variables.selectedVariable.name;\n                await service.copyToGlobals(name);\n            }\n        });\n    }\n};\n/**\n * Debugger sidebar provider plugin.\n */\nconst sidebar = {\n    id: '@jupyterlab/debugger-extension:sidebar',\n    description: 'Provides the debugger sidebar.',\n    provides: IDebuggerSidebar,\n    requires: [IDebugger, IEditorServices, ITranslator],\n    optional: [IThemeManager, ISettingRegistry],\n    autoStart: true,\n    activate: async (app, service, editorServices, translator, themeManager, settingRegistry) => {\n        const { commands } = app;\n        const CommandIDs = Debugger.CommandIDs;\n        const callstackCommands = {\n            registry: commands,\n            continue: CommandIDs.debugContinue,\n            terminate: CommandIDs.terminate,\n            next: CommandIDs.next,\n            stepIn: CommandIDs.stepIn,\n            stepOut: CommandIDs.stepOut,\n            evaluate: CommandIDs.evaluate\n        };\n        const breakpointsCommands = {\n            registry: commands,\n            pauseOnExceptions: CommandIDs.pauseOnExceptions\n        };\n        const sidebar = new Debugger.Sidebar({\n            service,\n            callstackCommands,\n            breakpointsCommands,\n            editorServices,\n            themeManager,\n            translator\n        });\n        if (settingRegistry) {\n            const setting = await settingRegistry.load(main.id);\n            const updateSettings = () => {\n                var _a, _b, _c, _d;\n                const filters = setting.get('variableFilters').composite;\n                const kernel = (_d = (_c = (_b = (_a = service.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.kernel) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : '';\n                if (kernel && filters[kernel]) {\n                    sidebar.variables.filter = new Set(filters[kernel]);\n                }\n                const kernelSourcesFilter = setting.get('defaultKernelSourcesFilter')\n                    .composite;\n                sidebar.kernelSources.filter = kernelSourcesFilter;\n            };\n            updateSettings();\n            setting.changed.connect(updateSettings);\n            service.sessionChanged.connect(updateSettings);\n        }\n        return sidebar;\n    }\n};\n/**\n * The source viewer UI plugin.\n */\nconst sourceViewer = {\n    id: '@jupyterlab/debugger-extension:source-viewer',\n    description: 'Initialize the debugger sources viewer.',\n    requires: [IDebugger, IEditorServices, IDebuggerSources, ITranslator],\n    provides: IDebuggerSourceViewer,\n    autoStart: true,\n    activate: async (app, service, editorServices, debuggerSources, translator) => {\n        const readOnlyEditorFactory = new Debugger.ReadOnlyEditorFactory({\n            editorServices\n        });\n        const { model } = service;\n        const onCurrentFrameChanged = (_, frame) => {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n            debuggerSources\n                .find({\n                focus: true,\n                kernel: (_d = (_c = (_b = (_a = service.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.kernel) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : '',\n                path: (_g = (_f = (_e = service.session) === null || _e === void 0 ? void 0 : _e.connection) === null || _f === void 0 ? void 0 : _f.path) !== null && _g !== void 0 ? _g : '',\n                source: (_j = (_h = frame === null || frame === void 0 ? void 0 : frame.source) === null || _h === void 0 ? void 0 : _h.path) !== null && _j !== void 0 ? _j : ''\n            })\n                .forEach(editor => {\n                requestAnimationFrame(() => {\n                    void editor.reveal().then(() => {\n                        const edit = editor.get();\n                        if (edit) {\n                            Debugger.EditorHandler.showCurrentLine(edit, frame.line);\n                        }\n                    });\n                });\n            });\n        };\n        model.callstack.currentFrameChanged.connect(onCurrentFrameChanged);\n        const openSource = (source, breakpoint) => {\n            var _a, _b, _c, _d, _e, _f, _g;\n            if (!source) {\n                return;\n            }\n            const { content, mimeType, path } = source;\n            const results = debuggerSources.find({\n                focus: true,\n                kernel: (_d = (_c = (_b = (_a = service.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.kernel) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : '',\n                path: (_g = (_f = (_e = service.session) === null || _e === void 0 ? void 0 : _e.connection) === null || _f === void 0 ? void 0 : _f.path) !== null && _g !== void 0 ? _g : '',\n                source: path\n            });\n            if (results.length > 0) {\n                if (breakpoint && typeof breakpoint.line !== 'undefined') {\n                    results.forEach(editor => {\n                        void editor.reveal().then(() => {\n                            var _a;\n                            (_a = editor.get()) === null || _a === void 0 ? void 0 : _a.revealPosition({\n                                line: breakpoint.line - 1,\n                                column: breakpoint.column || 0\n                            });\n                        });\n                    });\n                }\n                return;\n            }\n            const editorWrapper = readOnlyEditorFactory.createNewEditor({\n                content,\n                mimeType,\n                path\n            });\n            const editor = editorWrapper.editor;\n            const editorHandler = new Debugger.EditorHandler({\n                debuggerService: service,\n                editorReady: () => Promise.resolve(editor),\n                getEditor: () => editor,\n                path,\n                src: editor.model.sharedModel\n            });\n            editorWrapper.disposed.connect(() => editorHandler.dispose());\n            debuggerSources.open({\n                label: PathExt.basename(path),\n                caption: path,\n                editorWrapper\n            });\n            const frame = service.model.callstack.frame;\n            if (frame) {\n                Debugger.EditorHandler.showCurrentLine(editor, frame.line);\n            }\n        };\n        const trans = translator.load('jupyterlab');\n        app.commands.addCommand(Debugger.CommandIDs.openSource, {\n            label: trans.__('Open Source'),\n            caption: trans.__('Open Source'),\n            isEnabled: () => !!sourceViewer,\n            execute: async (args) => {\n                const path = args.path || '';\n                if (!path) {\n                    throw Error('Path to open is needed');\n                }\n                if (!service.isStarted) {\n                    const choice = await showDialog({\n                        title: trans.__('Start debugger?'),\n                        body: trans.__('The debugger service is needed to open the source %1', path),\n                        buttons: [\n                            Dialog.cancelButton({ label: trans.__('Cancel') }),\n                            Dialog.okButton({ label: trans.__('Start debugger') })\n                        ]\n                    });\n                    if (choice.button.accept) {\n                        await service.start();\n                    }\n                    else {\n                        return;\n                    }\n                }\n                const source = await service.getSource({\n                    path\n                });\n                return openSource(source);\n            }\n        });\n        return Object.freeze({\n            open: openSource\n        });\n    }\n};\n/**\n * The main debugger UI plugin.\n */\nconst main = {\n    id: '@jupyterlab/debugger-extension:main',\n    description: 'Initialize the debugger user interface.',\n    requires: [IDebugger, IDebuggerSidebar, IEditorServices, ITranslator],\n    optional: [\n        ICommandPalette,\n        IDebuggerSourceViewer,\n        ILabShell,\n        ILayoutRestorer,\n        ILoggerRegistry,\n        ISettingRegistry\n    ],\n    autoStart: true,\n    activate: async (app, service, sidebar, editorServices, translator, palette, sourceViewer, labShell, restorer, loggerRegistry, settingRegistry) => {\n        var _a;\n        const trans = translator.load('jupyterlab');\n        const { commands, shell, serviceManager } = app;\n        const { kernelspecs } = serviceManager;\n        const CommandIDs = Debugger.CommandIDs;\n        // First check if there is a PageConfig override for the extension visibility\n        const alwaysShowDebuggerExtension = PageConfig.getOption('alwaysShowDebuggerExtension').toLowerCase() ===\n            'true';\n        if (!alwaysShowDebuggerExtension) {\n            // hide the debugger sidebar if no kernel with support for debugging is available\n            await kernelspecs.ready;\n            const specs = (_a = kernelspecs.specs) === null || _a === void 0 ? void 0 : _a.kernelspecs;\n            if (!specs) {\n                return;\n            }\n            const enabled = Object.keys(specs).some(name => { var _a, _b, _c; return !!((_c = (_b = (_a = specs[name]) === null || _a === void 0 ? void 0 : _a.metadata) === null || _b === void 0 ? void 0 : _b['debugger']) !== null && _c !== void 0 ? _c : false); });\n            if (!enabled) {\n                return;\n            }\n        }\n        // get the mime type of the kernel language for the current debug session\n        const getMimeType = async () => {\n            var _a, _b, _c;\n            const kernel = (_b = (_a = service.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.kernel;\n            if (!kernel) {\n                return '';\n            }\n            const info = (await kernel.info).language_info;\n            const name = info.name;\n            const mimeType = (_c = editorServices.mimeTypeService.getMimeTypeByLanguage({ name })) !== null && _c !== void 0 ? _c : '';\n            return mimeType;\n        };\n        const rendermime = new RenderMimeRegistry({ initialFactories });\n        commands.addCommand(CommandIDs.evaluate, {\n            label: trans.__('Evaluate Code'),\n            caption: trans.__('Evaluate Code'),\n            icon: Debugger.Icons.evaluateIcon,\n            isEnabled: () => service.hasStoppedThreads(),\n            execute: async () => {\n                var _a, _b, _c;\n                const mimeType = await getMimeType();\n                const result = await Debugger.Dialogs.getCode({\n                    title: trans.__('Evaluate Code'),\n                    okLabel: trans.__('Evaluate'),\n                    cancelLabel: trans.__('Cancel'),\n                    mimeType,\n                    contentFactory: new CodeCell.ContentFactory({\n                        editorFactory: options => editorServices.factoryService.newInlineEditor(options)\n                    }),\n                    rendermime\n                });\n                const code = result.value;\n                if (!result.button.accept || !code) {\n                    return;\n                }\n                const reply = await service.evaluate(code);\n                if (reply) {\n                    const data = reply.result;\n                    const path = (_b = (_a = service === null || service === void 0 ? void 0 : service.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.path;\n                    const logger = path ? (_c = loggerRegistry === null || loggerRegistry === void 0 ? void 0 : loggerRegistry.getLogger) === null || _c === void 0 ? void 0 : _c.call(loggerRegistry, path) : undefined;\n                    if (logger) {\n                        // print to log console of the notebook currently being debugged\n                        logger.log({ type: 'text', data, level: logger.level });\n                    }\n                    else {\n                        // fallback to printing to devtools console\n                        console.debug(data);\n                    }\n                }\n            }\n        });\n        commands.addCommand(CommandIDs.debugContinue, {\n            label: () => {\n                return service.hasStoppedThreads()\n                    ? trans.__('Continue')\n                    : trans.__('Pause');\n            },\n            caption: () => {\n                return service.hasStoppedThreads()\n                    ? trans.__('Continue')\n                    : trans.__('Pause');\n            },\n            icon: () => {\n                return service.hasStoppedThreads()\n                    ? Debugger.Icons.continueIcon\n                    : Debugger.Icons.pauseIcon;\n            },\n            isEnabled: () => { var _a, _b; return (_b = (_a = service.session) === null || _a === void 0 ? void 0 : _a.isStarted) !== null && _b !== void 0 ? _b : false; },\n            execute: async () => {\n                if (service.hasStoppedThreads()) {\n                    await service.continue();\n                }\n                else {\n                    await service.pause();\n                }\n                commands.notifyCommandChanged(CommandIDs.debugContinue);\n            }\n        });\n        commands.addCommand(CommandIDs.terminate, {\n            label: trans.__('Terminate'),\n            caption: trans.__('Terminate'),\n            icon: Debugger.Icons.terminateIcon,\n            isEnabled: () => service.hasStoppedThreads(),\n            execute: async () => {\n                await service.restart();\n                updateState(app.commands, service);\n            }\n        });\n        commands.addCommand(CommandIDs.next, {\n            label: trans.__('Next'),\n            caption: trans.__('Next'),\n            icon: Debugger.Icons.stepOverIcon,\n            isEnabled: () => service.hasStoppedThreads(),\n            execute: async () => {\n                await service.next();\n            }\n        });\n        commands.addCommand(CommandIDs.stepIn, {\n            label: trans.__('Step In'),\n            caption: trans.__('Step In'),\n            icon: Debugger.Icons.stepIntoIcon,\n            isEnabled: () => service.hasStoppedThreads(),\n            execute: async () => {\n                await service.stepIn();\n            }\n        });\n        commands.addCommand(CommandIDs.stepOut, {\n            label: trans.__('Step Out'),\n            caption: trans.__('Step Out'),\n            icon: Debugger.Icons.stepOutIcon,\n            isEnabled: () => service.hasStoppedThreads(),\n            execute: async () => {\n                await service.stepOut();\n            }\n        });\n        commands.addCommand(CommandIDs.pauseOnExceptions, {\n            label: args => args.filter || 'Breakpoints on exception',\n            caption: args => args.description,\n            isToggled: args => { var _a; return ((_a = service.session) === null || _a === void 0 ? void 0 : _a.isPausingOnException(args.filter)) || false; },\n            isEnabled: () => service.pauseOnExceptionsIsValid(),\n            execute: async (args) => {\n                var _a, _b, _c;\n                if (args === null || args === void 0 ? void 0 : args.filter) {\n                    let filter = args.filter;\n                    await service.pauseOnExceptionsFilter(filter);\n                }\n                else {\n                    let items = [];\n                    (_b = (_a = service.session) === null || _a === void 0 ? void 0 : _a.exceptionBreakpointFilters) === null || _b === void 0 ? void 0 : _b.forEach(availableFilter => {\n                        items.push(availableFilter.filter);\n                    });\n                    const result = await InputDialog.getMultipleItems({\n                        title: trans.__('Select a filter for breakpoints on exception'),\n                        items: items,\n                        defaults: ((_c = service.session) === null || _c === void 0 ? void 0 : _c.currentExceptionFilters) || []\n                    });\n                    let filters = result.button.accept ? result.value : null;\n                    if (filters !== null) {\n                        await service.pauseOnExceptions(filters);\n                    }\n                }\n            }\n        });\n        let autoCollapseSidebar = false;\n        if (settingRegistry) {\n            const setting = await settingRegistry.load(main.id);\n            const updateSettings = () => {\n                autoCollapseSidebar = setting.get('autoCollapseDebuggerSidebar')\n                    .composite;\n            };\n            updateSettings();\n            setting.changed.connect(updateSettings);\n        }\n        service.eventMessage.connect((_, event) => {\n            updateState(app.commands, service);\n            if (labShell && event.event === 'initialized') {\n                labShell.activateById(sidebar.id);\n            }\n            else if (labShell &&\n                sidebar.isVisible &&\n                event.event === 'terminated' &&\n                autoCollapseSidebar) {\n                labShell.collapseRight();\n            }\n        });\n        service.sessionChanged.connect(_ => {\n            updateState(app.commands, service);\n        });\n        if (restorer) {\n            restorer.add(sidebar, 'debugger-sidebar');\n        }\n        sidebar.node.setAttribute('role', 'region');\n        sidebar.node.setAttribute('aria-label', trans.__('Debugger section'));\n        sidebar.title.caption = trans.__('Debugger');\n        shell.add(sidebar, 'right', { type: 'Debugger' });\n        commands.addCommand(CommandIDs.showPanel, {\n            label: trans.__('Debugger Panel'),\n            execute: () => {\n                shell.activateById(sidebar.id);\n            }\n        });\n        if (palette) {\n            const category = trans.__('Debugger');\n            [\n                CommandIDs.debugContinue,\n                CommandIDs.terminate,\n                CommandIDs.next,\n                CommandIDs.stepIn,\n                CommandIDs.stepOut,\n                CommandIDs.evaluate,\n                CommandIDs.pauseOnExceptions\n            ].forEach(command => {\n                palette.addItem({ command, category });\n            });\n        }\n        if (sourceViewer) {\n            const { model } = service;\n            const onKernelSourceOpened = (_, source, breakpoint) => {\n                if (!source) {\n                    return;\n                }\n                sourceViewer.open(source, breakpoint);\n            };\n            model.sources.currentSourceOpened.connect((_, source) => {\n                sourceViewer.open(source);\n            });\n            model.kernelSources.kernelSourceOpened.connect(onKernelSourceOpened);\n            model.breakpoints.clicked.connect(async (_, breakpoint) => {\n                var _a;\n                const path = (_a = breakpoint.source) === null || _a === void 0 ? void 0 : _a.path;\n                const source = await service.getSource({\n                    sourceReference: 0,\n                    path\n                });\n                sourceViewer.open(source, breakpoint);\n            });\n        }\n    }\n};\n/**\n * Export the plugins as default.\n */\nconst plugins = [\n    service,\n    consoles,\n    files,\n    notebooks,\n    variables,\n    sidebar,\n    main,\n    sources,\n    sourceViewer,\n    configuration\n];\nexport default plugins;\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/codemirror/style/index.js';\nimport '@jupyterlab/cells/style/index.js';\nimport '@jupyterlab/console/style/index.js';\nimport '@jupyterlab/fileeditor/style/index.js';\nimport '@jupyterlab/notebook/style/index.js';\n\nimport './base.css';\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/cells/style/index.js';\nimport '@jupyterlab/console/style/index.js';\nimport '@jupyterlab/fileeditor/style/index.js';\nimport '@jupyterlab/notebook/style/index.js';\nimport '@jupyterlab/debugger/style/index.js';\nimport '@jupyterlab/logconsole/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n// Most of the implementation below is adapted from the following repository:\n// https://github.com/garycourt/murmurhash-js/blob/master/murmurhash2_gc.js\n// Which has the following MIT License:\n//\n// Copyright (c) 2011 Gary Court\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,\n// and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n//  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// The implementation below uses case fallthrough as part of the algorithm.\n/* eslint-disable no-fallthrough */\nconst m = 0x5bd1e995;\nconst encoder = new TextEncoder();\n/**\n * Calculate the murmurhash2 for a given string and seed.\n *\n * @param str The string to calculate the Murmur2 hash for.\n * @param seed The seed.\n *\n * @returns The Murmurhash2 hash.\n */\nexport function murmur2(str, seed) {\n    const data = encoder.encode(str);\n    let len = data.length;\n    let h = seed ^ len;\n    let i = 0;\n    while (len >= 4) {\n        let k = (data[i] & 0xff) |\n            ((data[++i] & 0xff) << 8) |\n            ((data[++i] & 0xff) << 16) |\n            ((data[++i] & 0xff) << 24);\n        k = (k & 0xffff) * m + ((((k >>> 16) * m) & 0xffff) << 16);\n        k ^= k >>> 24;\n        k = (k & 0xffff) * m + ((((k >>> 16) * m) & 0xffff) << 16);\n        h = ((h & 0xffff) * m + ((((h >>> 16) * m) & 0xffff) << 16)) ^ k;\n        len -= 4;\n        ++i;\n    }\n    switch (len) {\n        case 3:\n            h ^= (data[i + 2] & 0xff) << 16;\n        case 2:\n            h ^= (data[i + 1] & 0xff) << 8;\n        case 1:\n            h ^= data[i] & 0xff;\n            h = (h & 0xffff) * m + ((((h >>> 16) * m) & 0xffff) << 16);\n    }\n    h ^= h >>> 13;\n    h = (h & 0xffff) * m + ((((h >>> 16) * m) & 0xffff) << 16);\n    h ^= h >>> 15;\n    return h >>> 0;\n}\n//# sourceMappingURL=hash.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { murmur2 } from './hash';\n/**\n * A class that holds debugger configuration for all kernels.\n */\nexport class DebuggerConfig {\n    constructor() {\n        this._fileParams = new Map();\n        this._hashMethods = new Map();\n    }\n    /**\n     * Returns an id based on the given code.\n     *\n     * @param code The source code.\n     * @param kernel The kernel name from current session.\n     */\n    getCodeId(code, kernel) {\n        const fileParams = this._fileParams.get(kernel);\n        if (!fileParams) {\n            throw new Error(`Kernel (${kernel}) has no tmp file params.`);\n        }\n        const hash = this._hashMethods.get(kernel);\n        if (!hash) {\n            throw new Error(`Kernel (${kernel}) has no hashing params.`);\n        }\n        const { prefix, suffix } = fileParams;\n        return `${prefix}${hash(code)}${suffix}`;\n    }\n    /**\n     * Sets the hash parameters for a kernel.\n     *\n     * @param params - Hashing parameters for a kernel.\n     */\n    setHashParams(params) {\n        const { kernel, method, seed } = params;\n        if (!kernel) {\n            throw new TypeError(`Kernel name is not defined.`);\n        }\n        switch (method) {\n            case 'Murmur2':\n                this._hashMethods.set(kernel, code => murmur2(code, seed).toString());\n                break;\n            default:\n                throw new Error(`Hash method (${method}) is not supported.`);\n        }\n    }\n    /**\n     * Sets the parameters used by the kernel to create temp files (e.g. cells).\n     *\n     * @param params - Temporary file prefix and suffix for a kernel.\n     */\n    setTmpFileParams(params) {\n        const { kernel, prefix, suffix } = params;\n        if (!kernel) {\n            throw new TypeError(`Kernel name is not defined.`);\n        }\n        this._fileParams.set(kernel, { kernel, prefix, suffix });\n    }\n    /**\n     * Gets the parameters used for the temp files (e.e. cells) for a kernel.\n     *\n     * @param kernel - The kernel name from current session.\n     */\n    getTmpFileParams(kernel) {\n        return this._fileParams.get(kernel);\n    }\n}\n//# sourceMappingURL=config.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { Dialog } from '@jupyterlab/apputils';\nimport { CodeCell, CodeCellModel } from '@jupyterlab/cells';\nimport { Widget } from '@lumino/widgets';\n/**\n * A namespace for DebuggerEvaluateDialog statics.\n */\nexport var DebuggerEvaluateDialog;\n(function (DebuggerEvaluateDialog) {\n    /**\n     * Create and show a dialog to prompt user for code.\n     *\n     * @param options - The dialog setup options.\n     *\n     * @returns A promise that resolves with whether the dialog was accepted\n     */\n    function getCode(options) {\n        const dialog = new EvaluateDialog({\n            ...options,\n            body: new EvaluateDialogBody(options),\n            buttons: [\n                Dialog.cancelButton({ label: options.cancelLabel }),\n                Dialog.okButton({ label: options.okLabel })\n            ]\n        });\n        return dialog.launch();\n    }\n    DebuggerEvaluateDialog.getCode = getCode;\n})(DebuggerEvaluateDialog || (DebuggerEvaluateDialog = {}));\n/**\n * A dialog to prompt users for code to evaluate.\n */\nclass EvaluateDialog extends Dialog {\n    /**\n     * Handle the DOM events for the Evaluate dialog.\n     *\n     * @param event The DOM event sent to the dialog widget\n     */\n    handleEvent(event) {\n        if (event.type === 'keydown') {\n            const keyboardEvent = event;\n            const { code, shiftKey } = keyboardEvent;\n            if (shiftKey && code === 'Enter') {\n                return this.resolve();\n            }\n            if (code === 'Enter') {\n                return;\n            }\n        }\n        super.handleEvent(event);\n    }\n}\n/**\n * Widget body with a code cell prompt in a dialog\n */\nclass EvaluateDialogBody extends Widget {\n    /**\n     * CodePromptDialog constructor\n     *\n     * @param options Constructor options\n     */\n    constructor(options) {\n        super();\n        const { contentFactory, rendermime, mimeType } = options;\n        const model = new CodeCellModel();\n        model.mimeType = mimeType !== null && mimeType !== void 0 ? mimeType : '';\n        this._prompt = new CodeCell({\n            contentFactory,\n            rendermime,\n            model,\n            placeholder: false\n        }).initializeState();\n        // explicitly remove the prompt in front of the input area\n        this._prompt.inputArea.promptNode.remove();\n        this.node.appendChild(this._prompt.node);\n    }\n    /**\n     * Get the text specified by the user\n     */\n    getValue() {\n        return this._prompt.model.sharedModel.getSource();\n    }\n    /**\n     *  A message handler invoked on an `'after-attach'` message.\n     */\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        this._prompt.activate();\n    }\n}\n//# sourceMappingURL=evaluate.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { CodeEditor, CodeEditorWrapper } from '@jupyterlab/codeeditor';\n/**\n * A widget factory for read only editors.\n */\nexport class ReadOnlyEditorFactory {\n    /**\n     * Construct a new editor widget factory.\n     *\n     * @param options The instantiation options for a ReadOnlyEditorFactory.\n     */\n    constructor(options) {\n        this._services = options.editorServices;\n    }\n    /**\n     * Create a new CodeEditorWrapper given a Source.\n     *\n     * @param source The source to create a new editor for.\n     */\n    createNewEditor(source) {\n        const { content, mimeType, path } = source;\n        const factory = this._services.factoryService.newInlineEditor;\n        const mimeTypeService = this._services.mimeTypeService;\n        const model = new CodeEditor.Model({\n            mimeType: mimeType || mimeTypeService.getMimeTypeByFilePath(path)\n        });\n        model.sharedModel.source = content;\n        const editor = new CodeEditorWrapper({\n            editorOptions: {\n                config: {\n                    readOnly: true,\n                    lineNumbers: true\n                }\n            },\n            model,\n            factory\n        });\n        editor.node.setAttribute('data-jp-debugger', 'true');\n        editor.disposed.connect(() => {\n            model.dispose();\n        });\n        return editor;\n    }\n}\n//# sourceMappingURL=factory.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ActivityMonitor } from '@jupyterlab/coreutils';\nimport { Signal } from '@lumino/signaling';\nimport { Compartment, Prec, RangeSet, StateEffect, StateField } from '@codemirror/state';\nimport { Decoration, EditorView, gutter, GutterMarker } from '@codemirror/view';\n/**\n * The class name added to the current line.\n */\nconst LINE_HIGHLIGHT_CLASS = 'jp-DebuggerEditor-highlight';\n/**\n * The timeout for listening to editor content changes.\n */\nconst EDITOR_CHANGED_TIMEOUT = 1000;\n/**\n * A handler for a CodeEditor.IEditor.\n */\nexport class EditorHandler {\n    /**\n     * Instantiate a new EditorHandler.\n     *\n     * @param options The instantiation options for a EditorHandler.\n     */\n    constructor(options) {\n        var _a, _b, _c, _d;\n        this._src = options.src;\n        this._id = (_c = (_b = (_a = options.debuggerService.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : '';\n        this._path = (_d = options.path) !== null && _d !== void 0 ? _d : '';\n        this._debuggerService = options.debuggerService;\n        this._editor = options.getEditor;\n        this._editorMonitor = new ActivityMonitor({\n            signal: this._src.changed,\n            timeout: EDITOR_CHANGED_TIMEOUT\n        });\n        this._editorMonitor.activityStopped.connect(() => {\n            this._sendEditorBreakpoints();\n        }, this);\n        this._debuggerService.model.breakpoints.changed.connect(async () => {\n            const editor = this.editor;\n            if (!editor || editor.isDisposed) {\n                return;\n            }\n            this._addBreakpointsToEditor();\n        });\n        this._debuggerService.model.breakpoints.restored.connect(async () => {\n            const editor = this.editor;\n            if (!editor || editor.isDisposed) {\n                return;\n            }\n            this._addBreakpointsToEditor();\n        });\n        this._debuggerService.model.callstack.currentFrameChanged.connect(() => {\n            const editor = this.editor;\n            if (editor) {\n                EditorHandler.clearHighlight(editor);\n            }\n        });\n        this._breakpointEffect = StateEffect.define({\n            map: (value, mapping) => ({ pos: value.pos.map(v => mapping.mapPos(v)) })\n        });\n        this._breakpointState = StateField.define({\n            create: () => {\n                return RangeSet.empty;\n            },\n            update: (breakpoints, transaction) => {\n                breakpoints = breakpoints.map(transaction.changes);\n                for (let ef of transaction.effects) {\n                    if (ef.is(this._breakpointEffect)) {\n                        let e = ef;\n                        if (e.value.pos.length) {\n                            breakpoints = breakpoints.update({\n                                add: e.value.pos.map(v => Private.breakpointMarker.range(v)),\n                                sort: true\n                            });\n                        }\n                        else {\n                            breakpoints = RangeSet.empty;\n                        }\n                    }\n                }\n                return breakpoints;\n            }\n        });\n        this._gutter = new Compartment();\n        this._highlightDeco = Decoration.line({ class: LINE_HIGHLIGHT_CLASS });\n        this._highlightState = StateField.define({\n            create: () => {\n                return Decoration.none;\n            },\n            update: (highlights, transaction) => {\n                highlights = highlights.map(transaction.changes);\n                for (let ef of transaction.effects) {\n                    if (ef.is(EditorHandler._highlightEffect)) {\n                        let e = ef;\n                        if (e.value.pos.length) {\n                            highlights = highlights.update({\n                                add: e.value.pos.map(v => this._highlightDeco.range(v))\n                            });\n                        }\n                        else {\n                            highlights = Decoration.none;\n                        }\n                    }\n                }\n                return highlights;\n            },\n            provide: f => EditorView.decorations.from(f)\n        });\n        void options.editorReady().then(() => {\n            this._setupEditor();\n        });\n    }\n    /**\n     * The editor\n     */\n    get editor() {\n        return this._editor();\n    }\n    /**\n     * Dispose the handler.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._editorMonitor.dispose();\n        this._clearEditor();\n        this.isDisposed = true;\n        Signal.clearData(this);\n    }\n    /**\n     * Refresh the breakpoints display\n     */\n    refreshBreakpoints() {\n        this._addBreakpointsToEditor();\n    }\n    /**\n     * Setup the editor.\n     */\n    _setupEditor() {\n        const editor = this.editor;\n        if (!editor || editor.isDisposed) {\n            return;\n        }\n        editor.setOption('lineNumbers', true);\n        const breakpointGutter = [\n            this._breakpointState,\n            this._highlightState,\n            Prec.highest(gutter({\n                class: 'cm-breakpoint-gutter',\n                renderEmptyElements: true,\n                markers: v => v.state.field(this._breakpointState),\n                initialSpacer: () => Private.breakpointMarker,\n                domEventHandlers: {\n                    mousedown: (view, line) => {\n                        this._onGutterClick(view, line.from);\n                        return true;\n                    }\n                }\n            }))\n        ];\n        editor.injectExtension(this._gutter.of(breakpointGutter));\n        this._addBreakpointsToEditor();\n    }\n    /**\n     * Clear the editor by removing visual elements and handlers.\n     */\n    _clearEditor() {\n        const editor = this.editor;\n        if (!editor || editor.isDisposed) {\n            return;\n        }\n        EditorHandler.clearHighlight(editor);\n        this._clearGutter(editor);\n        editor.setOption('lineNumbers', false);\n        editor.editor.dispatch({\n            effects: this._gutter.reconfigure([])\n        });\n    }\n    /**\n     * Send the breakpoints from the editor UI via the debug service.\n     */\n    _sendEditorBreakpoints() {\n        var _a;\n        if ((_a = this.editor) === null || _a === void 0 ? void 0 : _a.isDisposed) {\n            return;\n        }\n        const breakpoints = this._getBreakpointsFromEditor().map(lineNumber => {\n            var _a, _b;\n            return Private.createBreakpoint(((_b = (_a = this._debuggerService.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.name) || '', lineNumber);\n        });\n        void this._debuggerService.updateBreakpoints(this._src.getSource(), breakpoints, this._path);\n    }\n    /**\n     * Handle a click on the gutter.\n     *\n     * @param editor The editor from where the click originated.\n     * @param position The position corresponding to the click event.\n     */\n    _onGutterClick(editor, position) {\n        var _a, _b, _c;\n        if (this._id !== ((_b = (_a = this._debuggerService.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.id)) {\n            return;\n        }\n        const lineNumber = editor.state.doc.lineAt(position).number;\n        let stateBreakpoints = editor.state.field(this._breakpointState);\n        let hasBreakpoint = false;\n        stateBreakpoints.between(position, position, () => {\n            hasBreakpoint = true;\n        });\n        let breakpoints = this._getBreakpoints();\n        if (hasBreakpoint) {\n            breakpoints = breakpoints.filter(ele => ele.line !== lineNumber);\n        }\n        else {\n            breakpoints.push(Private.createBreakpoint((_c = this._path) !== null && _c !== void 0 ? _c : this._debuggerService.session.connection.name, lineNumber));\n        }\n        breakpoints.sort((a, b) => {\n            return a.line - b.line;\n        });\n        void this._debuggerService.updateBreakpoints(this._src.getSource(), breakpoints, this._path);\n    }\n    /**\n     * Add the breakpoints to the editor.\n     */\n    _addBreakpointsToEditor() {\n        var _a, _b;\n        if (this._id !== ((_b = (_a = this._debuggerService.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.id)) {\n            return;\n        }\n        const editor = this.editor;\n        const breakpoints = this._getBreakpoints();\n        this._clearGutter(editor);\n        const breakpointPos = breakpoints.map(b => {\n            return editor.state.doc.line(b.line).from;\n        });\n        editor.editor.dispatch({\n            effects: this._breakpointEffect.of({ pos: breakpointPos })\n        });\n    }\n    /**\n     * Retrieve the breakpoints from the editor.\n     */\n    _getBreakpointsFromEditor() {\n        const editor = this.editor;\n        const breakpoints = editor.editor.state.field(this._breakpointState);\n        let lines = [];\n        breakpoints.between(0, editor.doc.length, (from) => {\n            lines.push(editor.doc.lineAt(from).number);\n        });\n        return lines;\n    }\n    _clearGutter(editor) {\n        if (!editor) {\n            return;\n        }\n        const view = editor.editor;\n        view.dispatch({\n            effects: this._breakpointEffect.of({ pos: [] })\n        });\n    }\n    /**\n     * Get the breakpoints for the editor using its content (code),\n     * or its path (if it exists).\n     */\n    _getBreakpoints() {\n        const code = this._src.getSource();\n        return this._debuggerService.model.breakpoints.getBreakpoints(this._path || this._debuggerService.getCodeId(code));\n    }\n}\n/**\n * A namespace for EditorHandler `statics`.\n */\n(function (EditorHandler) {\n    EditorHandler._highlightEffect = StateEffect.define({\n        map: (value, mapping) => ({ pos: value.pos.map(v => mapping.mapPos(v)) })\n    });\n    /**\n     * Highlight the current line of the frame in the given editor.\n     *\n     * @param editor The editor to highlight.\n     * @param line The line number.\n     */\n    function showCurrentLine(editor, line) {\n        clearHighlight(editor);\n        const cmEditor = editor;\n        const linePos = cmEditor.doc.line(line).from;\n        cmEditor.editor.dispatch({\n            effects: EditorHandler._highlightEffect.of({ pos: [linePos] })\n        });\n    }\n    EditorHandler.showCurrentLine = showCurrentLine;\n    /**\n     * Remove all line highlighting indicators for the given editor.\n     *\n     * @param editor The editor to cleanup.\n     */\n    function clearHighlight(editor) {\n        if (!editor || editor.isDisposed) {\n            return;\n        }\n        const cmEditor = editor;\n        cmEditor.editor.dispatch({\n            effects: EditorHandler._highlightEffect.of({ pos: [] })\n        });\n    }\n    EditorHandler.clearHighlight = clearHighlight;\n})(EditorHandler || (EditorHandler = {}));\n/**\n * A namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Create a marker DOM element for a breakpoint.\n     */\n    Private.breakpointMarker = new (class extends GutterMarker {\n        toDOM() {\n            const marker = document.createTextNode('●');\n            return marker;\n        }\n    })();\n    /**\n     * Create a new breakpoint.\n     *\n     * @param session The name of the session.\n     * @param line The line number of the breakpoint.\n     */\n    function createBreakpoint(session, line) {\n        return {\n            line,\n            verified: true,\n            source: {\n                name: session\n            }\n        };\n    }\n    Private.createBreakpoint = createBreakpoint;\n})(Private || (Private = {}));\n//# sourceMappingURL=editor.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ObservableMap } from '@jupyterlab/observables';\nimport { Signal } from '@lumino/signaling';\nimport { EditorHandler } from '../handlers/editor';\n/**\n * A handler for consoles.\n */\nexport class ConsoleHandler {\n    /**\n     * Instantiate a new ConsoleHandler.\n     *\n     * @param options The instantiation options for a ConsoleHandler.\n     */\n    constructor(options) {\n        this._debuggerService = options.debuggerService;\n        this._consolePanel = options.widget;\n        this._cellMap = new ObservableMap();\n        const codeConsole = this._consolePanel.console;\n        if (codeConsole.promptCell) {\n            this._addEditorHandler(codeConsole.promptCell);\n        }\n        codeConsole.promptCellCreated.connect((_, cell) => {\n            this._addEditorHandler(cell);\n        });\n        const addHandlers = () => {\n            for (const cell of codeConsole.cells) {\n                this._addEditorHandler(cell);\n            }\n        };\n        addHandlers();\n        this._consolePanel.console.cells.changed.connect(addHandlers);\n    }\n    /**\n     * Dispose the handler.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this.isDisposed = true;\n        this._cellMap.values().forEach(handler => handler.dispose());\n        this._cellMap.dispose();\n        Signal.clearData(this);\n    }\n    /**\n     * Add a new editor handler for the given cell.\n     *\n     * @param cell The cell to add the handler to.\n     */\n    _addEditorHandler(cell) {\n        const modelId = cell.model.id;\n        if (cell.model.type !== 'code' || this._cellMap.has(modelId)) {\n            return;\n        }\n        const codeCell = cell;\n        const editorHandler = new EditorHandler({\n            debuggerService: this._debuggerService,\n            editorReady: async () => {\n                await codeCell.ready;\n                return codeCell.editor;\n            },\n            getEditor: () => codeCell.editor,\n            src: cell.model.sharedModel\n        });\n        codeCell.disposed.connect(() => {\n            this._cellMap.delete(modelId);\n            editorHandler.dispose();\n        });\n        this._cellMap.set(modelId, editorHandler);\n    }\n}\n//# sourceMappingURL=console.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\nimport { EditorHandler } from '../handlers/editor';\n/**\n * A handler for files.\n */\nexport class FileHandler {\n    /**\n     * Instantiate a new FileHandler.\n     *\n     * @param options The instantiation options for a FileHandler.\n     */\n    constructor(options) {\n        var _a;\n        this._debuggerService = options.debuggerService;\n        this._fileEditor = options.widget.content;\n        this._hasLineNumber =\n            (_a = this._fileEditor.editor.getOption('lineNumbers')) !== null && _a !== void 0 ? _a : false;\n        this._editorHandler = new EditorHandler({\n            debuggerService: this._debuggerService,\n            editorReady: () => Promise.resolve(this._fileEditor.editor),\n            getEditor: () => this._fileEditor.editor,\n            src: this._fileEditor.model.sharedModel\n        });\n    }\n    /**\n     * Dispose the handler.\n     */\n    dispose() {\n        var _a, _b;\n        if (this.isDisposed) {\n            return;\n        }\n        this.isDisposed = true;\n        (_a = this._editorHandler) === null || _a === void 0 ? void 0 : _a.dispose();\n        // Restore editor options\n        (_b = this._editorHandler) === null || _b === void 0 ? void 0 : _b.editor.setOptions({\n            lineNumbers: this._hasLineNumber\n        });\n        Signal.clearData(this);\n    }\n}\n//# sourceMappingURL=file.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ObservableMap } from '@jupyterlab/observables';\nimport { Signal } from '@lumino/signaling';\nimport { EditorHandler } from './editor';\n/**\n * A handler for notebooks.\n */\nexport class NotebookHandler {\n    /**\n     * Instantiate a new NotebookHandler.\n     *\n     * @param options The instantiation options for a NotebookHandler.\n     */\n    constructor(options) {\n        this._debuggerService = options.debuggerService;\n        this._notebookPanel = options.widget;\n        this._cellMap = new ObservableMap();\n        const notebook = this._notebookPanel.content;\n        notebook.model.cells.changed.connect(this._onCellsChanged, this);\n        this._onCellsChanged();\n    }\n    /**\n     * Dispose the handler.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this.isDisposed = true;\n        this._cellMap.values().forEach(handler => {\n            var _a;\n            handler.dispose();\n            // Ensure to restore notebook editor settings\n            (_a = handler.editor) === null || _a === void 0 ? void 0 : _a.setOptions({\n                ...this._notebookPanel.content.editorConfig.code\n            });\n        });\n        this._cellMap.dispose();\n        Signal.clearData(this);\n    }\n    /**\n     * Handle a notebook cells changed event.\n     */\n    _onCellsChanged(cells, changes) {\n        var _a;\n        this._notebookPanel.content.widgets.forEach(cell => this._addEditorHandler(cell));\n        if ((changes === null || changes === void 0 ? void 0 : changes.type) === 'move') {\n            for (const cell of changes.newValues) {\n                (_a = this._cellMap.get(cell.id)) === null || _a === void 0 ? void 0 : _a.refreshBreakpoints();\n            }\n        }\n    }\n    /**\n     * Add a new editor handler for the given cell.\n     *\n     * @param cell The cell to add the handler to.\n     */\n    _addEditorHandler(cell) {\n        const modelId = cell.model.id;\n        if (cell.model.type !== 'code' || this._cellMap.has(modelId)) {\n            return;\n        }\n        const codeCell = cell;\n        const editorHandler = new EditorHandler({\n            debuggerService: this._debuggerService,\n            editorReady: async () => {\n                await codeCell.ready;\n                return codeCell.editor;\n            },\n            getEditor: () => codeCell.editor,\n            src: cell.model.sharedModel\n        });\n        codeCell.disposed.connect(() => {\n            this._cellMap.delete(modelId);\n            editorHandler.dispose();\n        });\n        this._cellMap.set(cell.model.id, editorHandler);\n    }\n}\n//# sourceMappingURL=notebook.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { bugDotIcon, bugIcon, ToolbarButton } from '@jupyterlab/ui-components';\nimport { Debugger } from './debugger';\nimport { ConsoleHandler } from './handlers/console';\nimport { FileHandler } from './handlers/file';\nimport { NotebookHandler } from './handlers/notebook';\nconst TOOLBAR_DEBUGGER_ITEM = 'debugger-icon';\n/**\n * Add a bug icon to the widget toolbar to enable and disable debugging.\n *\n * @param widget The widget to add the debug toolbar button to.\n * @param onClick The callback when the toolbar button is clicked.\n */\nfunction updateIconButton(widget, onClick, enabled, pressed, translator = nullTranslator) {\n    const trans = translator.load('jupyterlab');\n    const icon = new ToolbarButton({\n        className: 'jp-DebuggerBugButton',\n        icon: bugIcon,\n        tooltip: trans.__('Enable Debugger'),\n        pressedIcon: bugDotIcon,\n        pressedTooltip: trans.__('Disable Debugger'),\n        disabledTooltip: trans.__('Select a kernel that supports debugging to enable debugger'),\n        enabled,\n        pressed,\n        onClick\n    });\n    if (!widget.toolbar.insertBefore('kernelName', TOOLBAR_DEBUGGER_ITEM, icon)) {\n        widget.toolbar.addItem(TOOLBAR_DEBUGGER_ITEM, icon);\n    }\n    return icon;\n}\n/**\n * Updates button state to on/off,\n * adds/removes css class to update styling\n *\n * @param widget the debug button widget\n * @param pressed true if pressed, false otherwise\n * @param enabled true if widget enabled, false otherwise\n * @param onClick click handler\n */\nfunction updateIconButtonState(widget, pressed, enabled = true, onClick) {\n    if (widget) {\n        widget.enabled = enabled;\n        widget.pressed = pressed;\n        if (onClick) {\n            widget.onClick = onClick;\n        }\n    }\n}\n/**\n * A handler for debugging a widget.\n */\nexport class DebuggerHandler {\n    /**\n     * Instantiate a new DebuggerHandler.\n     *\n     * @param options The instantiation options for a DebuggerHandler.\n     */\n    constructor(options) {\n        this._handlers = {};\n        this._contextKernelChangedHandlers = {};\n        this._kernelChangedHandlers = {};\n        this._statusChangedHandlers = {};\n        this._iopubMessageHandlers = {};\n        this._iconButtons = {};\n        this._type = options.type;\n        this._shell = options.shell;\n        this._service = options.service;\n    }\n    /**\n     * Get the active widget.\n     */\n    get activeWidget() {\n        return this._activeWidget;\n    }\n    /**\n     * Update a debug handler for the given widget, and\n     * handle kernel changed events.\n     *\n     * @param widget The widget to update.\n     * @param connection The session connection.\n     */\n    async update(widget, connection) {\n        if (!connection) {\n            delete this._kernelChangedHandlers[widget.id];\n            delete this._statusChangedHandlers[widget.id];\n            delete this._iopubMessageHandlers[widget.id];\n            return this.updateWidget(widget, connection);\n        }\n        const kernelChanged = () => {\n            void this.updateWidget(widget, connection);\n        };\n        const kernelChangedHandler = this._kernelChangedHandlers[widget.id];\n        if (kernelChangedHandler) {\n            connection.kernelChanged.disconnect(kernelChangedHandler);\n        }\n        this._kernelChangedHandlers[widget.id] = kernelChanged;\n        connection.kernelChanged.connect(kernelChanged);\n        const statusChanged = (_, status) => {\n            if (status.endsWith('restarting')) {\n                void this.updateWidget(widget, connection);\n            }\n        };\n        const statusChangedHandler = this._statusChangedHandlers[widget.id];\n        if (statusChangedHandler) {\n            connection.statusChanged.disconnect(statusChangedHandler);\n        }\n        connection.statusChanged.connect(statusChanged);\n        this._statusChangedHandlers[widget.id] = statusChanged;\n        const iopubMessage = (_, msg) => {\n            if (this._service.isStarted &&\n                !this._service.hasStoppedThreads() &&\n                msg.parent_header.msg_type ===\n                    'execute_request') {\n                void this._service.displayDefinedVariables();\n            }\n        };\n        const iopubMessageHandler = this._iopubMessageHandlers[widget.id];\n        if (iopubMessageHandler) {\n            connection.iopubMessage.disconnect(iopubMessageHandler);\n        }\n        connection.iopubMessage.connect(iopubMessage);\n        this._iopubMessageHandlers[widget.id] = iopubMessage;\n        this._activeWidget = widget;\n        return this.updateWidget(widget, connection);\n    }\n    /**\n     * Update a debug handler for the given widget, and\n     * handle connection kernel changed events.\n     *\n     * @param widget The widget to update.\n     * @param sessionContext The session context.\n     */\n    async updateContext(widget, sessionContext) {\n        const connectionChanged = () => {\n            const { session: connection } = sessionContext;\n            void this.update(widget, connection);\n        };\n        const contextKernelChangedHandlers = this._contextKernelChangedHandlers[widget.id];\n        if (contextKernelChangedHandlers) {\n            sessionContext.kernelChanged.disconnect(contextKernelChangedHandlers);\n        }\n        this._contextKernelChangedHandlers[widget.id] = connectionChanged;\n        sessionContext.kernelChanged.connect(connectionChanged);\n        return this.update(widget, sessionContext.session);\n    }\n    /**\n     * Update a debug handler for the given widget.\n     *\n     * @param widget The widget to update.\n     * @param connection The session connection.\n     */\n    async updateWidget(widget, connection) {\n        var _a, _b, _c, _d;\n        if (!this._service.model || !connection) {\n            return;\n        }\n        const hasFocus = () => {\n            return this._shell.currentWidget === widget;\n        };\n        const updateAttribute = () => {\n            if (!this._handlers[widget.id]) {\n                widget.node.removeAttribute('data-jp-debugger');\n                return;\n            }\n            widget.node.setAttribute('data-jp-debugger', 'true');\n        };\n        const createHandler = () => {\n            if (this._handlers[widget.id]) {\n                return;\n            }\n            switch (this._type) {\n                case 'notebook':\n                    this._handlers[widget.id] = new NotebookHandler({\n                        debuggerService: this._service,\n                        widget: widget\n                    });\n                    break;\n                case 'console':\n                    this._handlers[widget.id] = new ConsoleHandler({\n                        debuggerService: this._service,\n                        widget: widget\n                    });\n                    break;\n                case 'file':\n                    this._handlers[widget.id] = new FileHandler({\n                        debuggerService: this._service,\n                        widget: widget\n                    });\n                    break;\n                default:\n                    throw Error(`No handler for the type ${this._type}`);\n            }\n            updateAttribute();\n        };\n        const removeHandlers = () => {\n            var _a, _b, _c, _d;\n            const handler = this._handlers[widget.id];\n            if (!handler) {\n                return;\n            }\n            handler.dispose();\n            delete this._handlers[widget.id];\n            delete this._kernelChangedHandlers[widget.id];\n            delete this._statusChangedHandlers[widget.id];\n            delete this._iopubMessageHandlers[widget.id];\n            delete this._contextKernelChangedHandlers[widget.id];\n            // Clear the model if the handler being removed corresponds\n            // to the current active debug session, or if the connection\n            // does not have a kernel.\n            if (((_b = (_a = this._service.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.path) === (connection === null || connection === void 0 ? void 0 : connection.path) ||\n                !((_d = (_c = this._service.session) === null || _c === void 0 ? void 0 : _c.connection) === null || _d === void 0 ? void 0 : _d.kernel)) {\n                const model = this._service.model;\n                model.clear();\n            }\n            updateAttribute();\n        };\n        const addToolbarButton = (enabled = true) => {\n            const debugButton = this._iconButtons[widget.id];\n            if (!debugButton) {\n                this._iconButtons[widget.id] = updateIconButton(widget, toggleDebugging, this._service.isStarted, enabled);\n            }\n            else {\n                updateIconButtonState(debugButton, this._service.isStarted, enabled, toggleDebugging);\n            }\n        };\n        const isDebuggerOn = () => {\n            var _a;\n            return (this._service.isStarted &&\n                ((_a = this._previousConnection) === null || _a === void 0 ? void 0 : _a.id) === (connection === null || connection === void 0 ? void 0 : connection.id));\n        };\n        const stopDebugger = async () => {\n            this._service.session.connection = connection;\n            await this._service.stop();\n        };\n        const startDebugger = async () => {\n            var _a, _b;\n            this._service.session.connection = connection;\n            this._previousConnection = connection;\n            await this._service.restoreState(true);\n            await this._service.displayDefinedVariables();\n            if ((_b = (_a = this._service.session) === null || _a === void 0 ? void 0 : _a.capabilities) === null || _b === void 0 ? void 0 : _b.supportsModulesRequest) {\n                await this._service.displayModules();\n            }\n        };\n        const toggleDebugging = async () => {\n            // bail if the widget doesn't have focus\n            if (!hasFocus()) {\n                return;\n            }\n            const debugButton = this._iconButtons[widget.id];\n            if (isDebuggerOn()) {\n                await stopDebugger();\n                removeHandlers();\n                updateIconButtonState(debugButton, false);\n            }\n            else {\n                await startDebugger();\n                createHandler();\n                updateIconButtonState(debugButton, true);\n            }\n        };\n        addToolbarButton(false);\n        // listen to the disposed signals\n        widget.disposed.connect(async () => {\n            if (isDebuggerOn()) {\n                await stopDebugger();\n            }\n            removeHandlers();\n            delete this._iconButtons[widget.id];\n            delete this._contextKernelChangedHandlers[widget.id];\n        });\n        const debuggingEnabled = await this._service.isAvailable(connection);\n        if (!debuggingEnabled) {\n            removeHandlers();\n            updateIconButtonState(this._iconButtons[widget.id], false, false);\n            return;\n        }\n        // update the active debug session\n        if (!this._service.session) {\n            this._service.session = new Debugger.Session({\n                connection,\n                config: this._service.config\n            });\n        }\n        else {\n            this._previousConnection = ((_a = this._service.session.connection) === null || _a === void 0 ? void 0 : _a.kernel)\n                ? this._service.session.connection\n                : null;\n            this._service.session.connection = connection;\n        }\n        await this._service.restoreState(false);\n        if (this._service.isStarted && !this._service.hasStoppedThreads()) {\n            await this._service.displayDefinedVariables();\n            if ((_c = (_b = this._service.session) === null || _b === void 0 ? void 0 : _b.capabilities) === null || _c === void 0 ? void 0 : _c.supportsModulesRequest) {\n                await this._service.displayModules();\n            }\n        }\n        updateIconButtonState(this._iconButtons[widget.id], this._service.isStarted, true);\n        // check the state of the debug session\n        if (!this._service.isStarted) {\n            removeHandlers();\n            this._service.session.connection = (_d = this._previousConnection) !== null && _d !== void 0 ? _d : connection;\n            await this._service.restoreState(false);\n            return;\n        }\n        // if the debugger is started but there is no handler, create a new one\n        createHandler();\n        this._previousConnection = connection;\n    }\n}\n//# sourceMappingURL=handler.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\n/**\n * A model for a list of breakpoints.\n */\nexport class BreakpointsModel {\n    constructor() {\n        this._breakpoints = new Map();\n        this._changed = new Signal(this);\n        this._restored = new Signal(this);\n        this._clicked = new Signal(this);\n    }\n    /**\n     * Signal emitted when the model changes.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Signal emitted when the breakpoints are restored.\n     */\n    get restored() {\n        return this._restored;\n    }\n    /**\n     * Signal emitted when a breakpoint is clicked.\n     */\n    get clicked() {\n        return this._clicked;\n    }\n    /**\n     * Get all the breakpoints.\n     */\n    get breakpoints() {\n        return this._breakpoints;\n    }\n    /**\n     * Set the breakpoints for a given id (path).\n     *\n     * @param id The code id (path).\n     * @param breakpoints The list of breakpoints.\n     */\n    setBreakpoints(id, breakpoints) {\n        this._breakpoints.set(id, breakpoints);\n        this._changed.emit(breakpoints);\n    }\n    /**\n     * Get the breakpoints for a given id (path).\n     *\n     * @param id The code id (path).\n     */\n    getBreakpoints(id) {\n        var _a;\n        return (_a = this._breakpoints.get(id)) !== null && _a !== void 0 ? _a : [];\n    }\n    /**\n     * Restore a map of breakpoints.\n     *\n     * @param breakpoints The map of breakpoints\n     */\n    restoreBreakpoints(breakpoints) {\n        this._breakpoints = breakpoints;\n        this._restored.emit();\n    }\n}\n//# sourceMappingURL=model.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\n/**\n * A model for a callstack.\n */\nexport class CallstackModel {\n    constructor() {\n        this._state = [];\n        this._currentFrame = null;\n        this._framesChanged = new Signal(this);\n        this._currentFrameChanged = new Signal(this);\n    }\n    /**\n     * Get all the frames.\n     */\n    get frames() {\n        return this._state;\n    }\n    /**\n     * Set the frames.\n     */\n    set frames(newFrames) {\n        this._state = newFrames;\n        const currentFrameId = this.frame !== null ? Private.getFrameId(this.frame) : '';\n        const frame = newFrames.find(frame => Private.getFrameId(frame) === currentFrameId);\n        // Default to the first frame if the previous one can't be found.\n        // Otherwise keep the current frame selected.\n        if (!frame) {\n            this.frame = newFrames[0];\n        }\n        this._framesChanged.emit(newFrames);\n    }\n    /**\n     * Get the current frame.\n     */\n    get frame() {\n        return this._currentFrame;\n    }\n    /**\n     * Set the current frame.\n     */\n    set frame(frame) {\n        this._currentFrame = frame;\n        this._currentFrameChanged.emit(frame);\n    }\n    /**\n     * Signal emitted when the frames have changed.\n     */\n    get framesChanged() {\n        return this._framesChanged;\n    }\n    /**\n     * Signal emitted when the current frame has changed.\n     */\n    get currentFrameChanged() {\n        return this._currentFrameChanged;\n    }\n}\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Construct an id for the given frame.\n     *\n     * @param frame The frame.\n     */\n    function getFrameId(frame) {\n        var _a;\n        return `${(_a = frame === null || frame === void 0 ? void 0 : frame.source) === null || _a === void 0 ? void 0 : _a.path}-${frame === null || frame === void 0 ? void 0 : frame.id}`;\n    }\n    Private.getFrameId = getFrameId;\n})(Private || (Private = {}));\n//# sourceMappingURL=model.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\n/**\n * The model to keep track of the current source being displayed.\n */\nexport class SourcesModel {\n    /**\n     * Instantiate a new Sources.Model\n     *\n     * @param options The Sources.Model instantiation options.\n     */\n    constructor(options) {\n        this._currentSourceOpened = new Signal(this);\n        this._currentSourceChanged = new Signal(this);\n        this.currentFrameChanged = options.currentFrameChanged;\n    }\n    /**\n     * Signal emitted when a source should be open in the main area.\n     */\n    get currentSourceOpened() {\n        return this._currentSourceOpened;\n    }\n    /**\n     * Signal emitted when the current source changes.\n     */\n    get currentSourceChanged() {\n        return this._currentSourceChanged;\n    }\n    /**\n     * Return the current source.\n     */\n    get currentSource() {\n        return this._currentSource;\n    }\n    /**\n     * Set the current source.\n     *\n     * @param source The source to set as the current source.\n     */\n    set currentSource(source) {\n        this._currentSource = source;\n        this._currentSourceChanged.emit(source);\n    }\n    /**\n     * Open a source in the main area.\n     */\n    open() {\n        this._currentSourceOpened.emit(this._currentSource);\n    }\n}\n//# sourceMappingURL=model.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\nimport { Debouncer } from '@lumino/polling';\n/**\n * The rate limit for the filter debouncer\n */\nconst DEBOUNCER_RATE_LIMIT_MS = 500;\nconst compare = (a, b) => {\n    if (a.name < b.name) {\n        return -1;\n    }\n    if (a.name > b.name) {\n        return 1;\n    }\n    return 0;\n};\n/**\n * The model to keep track of the current source being displayed.\n */\nexport class KernelSourcesModel {\n    constructor() {\n        this._filteredKernelSources = null;\n        this._filter = '';\n        this._isDisposed = false;\n        this._kernelSources = null;\n        this._changed = new Signal(this);\n        this._filterChanged = new Signal(this);\n        this._kernelSourceOpened = new Signal(this);\n        this.refresh = this.refresh.bind(this);\n        this._refreshDebouncer = new Debouncer(this.refresh, DEBOUNCER_RATE_LIMIT_MS);\n    }\n    /**\n     * Get the filter.\n     */\n    get filter() {\n        return this._filter;\n    }\n    /**\n     * Set the filter.\n     * The update\n     */\n    set filter(filter) {\n        this._filter = filter;\n        this._filterChanged.emit(filter);\n        void this._refreshDebouncer.invoke();\n    }\n    /**\n     * Whether the kernel sources model is disposed or not.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Get the kernel sources.\n     */\n    get kernelSources() {\n        return this._kernelSources;\n    }\n    /**\n     * Set the kernel sources and emit a changed signal.\n     */\n    set kernelSources(kernelSources) {\n        this._kernelSources = kernelSources;\n        this.refresh();\n    }\n    /**\n     * Signal emitted when the current source changes.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Signal emitted when the current source changes.\n     */\n    get filterChanged() {\n        return this._filterChanged;\n    }\n    /**\n     * Signal emitted when a kernel source should be open in the main area.\n     */\n    get kernelSourceOpened() {\n        return this._kernelSourceOpened;\n    }\n    /**\n     * Dispose the kernel sources model\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._refreshDebouncer.dispose();\n        Signal.clearData(this);\n    }\n    /**\n     * Open a source in the main area.\n     */\n    open(kernelSource) {\n        this._kernelSourceOpened.emit(kernelSource);\n    }\n    getFilteredKernelSources() {\n        const regexp = new RegExp(this._filter);\n        return this._kernelSources.filter(module => regexp.test(module.name));\n    }\n    refresh() {\n        if (this._kernelSources) {\n            this._filteredKernelSources = this._filter\n                ? this.getFilteredKernelSources()\n                : this._kernelSources;\n            this._filteredKernelSources.sort(compare);\n        }\n        else {\n            this._kernelSources = new Array();\n            this._filteredKernelSources = new Array();\n        }\n        this._changed.emit(this._filteredKernelSources);\n    }\n}\n//# sourceMappingURL=model.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\n/**\n * A model for a variable explorer.\n */\nexport class VariablesModel {\n    constructor() {\n        this._selectedVariable = null;\n        this._state = [];\n        this._variableExpanded = new Signal(this);\n        this._changed = new Signal(this);\n    }\n    /**\n     * Get all the scopes.\n     */\n    get scopes() {\n        return this._state;\n    }\n    /**\n     * Set the scopes.\n     */\n    set scopes(scopes) {\n        this._state = scopes;\n        this._changed.emit();\n    }\n    /**\n     * Signal emitted when the current variable has changed.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Signal emitted when the current variable has been expanded.\n     */\n    get variableExpanded() {\n        return this._variableExpanded;\n    }\n    get selectedVariable() {\n        return this._selectedVariable;\n    }\n    set selectedVariable(selection) {\n        this._selectedVariable = selection;\n    }\n    /**\n     * Expand a variable.\n     *\n     * @param variable The variable to expand.\n     */\n    expandVariable(variable) {\n        this._variableExpanded.emit(variable);\n    }\n}\n//# sourceMappingURL=model.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\nimport { BreakpointsModel } from './panels/breakpoints/model';\nimport { CallstackModel } from './panels/callstack/model';\nimport { SourcesModel } from './panels/sources/model';\nimport { KernelSourcesModel } from './panels/kernelSources/model';\nimport { VariablesModel } from './panels/variables/model';\n/**\n * A model for a debugger.\n */\nexport class DebuggerModel {\n    /**\n     * Instantiate a new DebuggerModel\n     */\n    constructor() {\n        this._disposed = new Signal(this);\n        this._isDisposed = false;\n        this._hasRichVariableRendering = false;\n        this._supportCopyToGlobals = false;\n        this._stoppedThreads = new Set();\n        this._title = '-';\n        this._titleChanged = new Signal(this);\n        this.breakpoints = new BreakpointsModel();\n        this.callstack = new CallstackModel();\n        this.variables = new VariablesModel();\n        this.sources = new SourcesModel({\n            currentFrameChanged: this.callstack.currentFrameChanged\n        });\n        this.kernelSources = new KernelSourcesModel();\n    }\n    /**\n     * A signal emitted when the debugger widget is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * Whether the kernel support rich variable rendering based on mime type.\n     */\n    get hasRichVariableRendering() {\n        return this._hasRichVariableRendering;\n    }\n    set hasRichVariableRendering(v) {\n        this._hasRichVariableRendering = v;\n    }\n    /**\n     * Whether the kernel supports the copyToGlobals request.\n     */\n    get supportCopyToGlobals() {\n        return this._supportCopyToGlobals;\n    }\n    set supportCopyToGlobals(v) {\n        this._supportCopyToGlobals = v;\n    }\n    /**\n     * Whether the model is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * The set of threads in stopped state.\n     */\n    get stoppedThreads() {\n        return this._stoppedThreads;\n    }\n    /**\n     * Assigns the parameters to the set of threads in stopped state.\n     */\n    set stoppedThreads(threads) {\n        this._stoppedThreads = threads;\n    }\n    /**\n     * The current debugger title.\n     */\n    get title() {\n        return this._title;\n    }\n    /**\n     * Set the current debugger title.\n     */\n    set title(title) {\n        if (title === this._title) {\n            return;\n        }\n        this._title = title !== null && title !== void 0 ? title : '-';\n        this._titleChanged.emit(title);\n    }\n    /**\n     * A signal emitted when the title changes.\n     */\n    get titleChanged() {\n        return this._titleChanged;\n    }\n    /**\n     * Dispose the model.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this.kernelSources.dispose();\n        this._disposed.emit();\n    }\n    /**\n     * Clear the model.\n     */\n    clear() {\n        this._stoppedThreads.clear();\n        const breakpoints = new Map();\n        this.breakpoints.restoreBreakpoints(breakpoints);\n        this.callstack.frames = [];\n        this.variables.scopes = [];\n        this.sources.currentSource = null;\n        this.kernelSources.kernelSources = null;\n        this.title = '-';\n    }\n}\n//# sourceMappingURL=model.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Panel } from '@lumino/widgets';\n/**\n * A data grid that displays variables in a debugger session.\n */\nexport class VariablesBodyGrid extends Panel {\n    /**\n     * Instantiate a new VariablesBodyGrid.\n     *\n     * @param options The instantiation options for a VariablesBodyGrid.\n     */\n    constructor(options) {\n        super();\n        this._filter = new Set();\n        this._grid = null;\n        this._pending = null;\n        this.commands = options.commands;\n        this.model = options.model;\n        this.themeManager = options.themeManager;\n        this.translator = options.translator;\n        this.model.changed.connect(() => this.update(), this);\n        this.addClass('jp-DebuggerVariables-body');\n    }\n    /**\n     * The variable filter list.\n     */\n    get filter() {\n        return this._filter;\n    }\n    set filter(filter) {\n        this._filter = filter;\n        this.update();\n    }\n    /**\n     * The current scope of the variables.\n     */\n    get scope() {\n        return this._scope;\n    }\n    set scope(scope) {\n        this._scope = scope;\n        if (scope !== 'Globals') {\n            this.addClass('jp-debuggerVariables-local');\n        }\n        else {\n            this.removeClass('jp-debuggerVariables-local');\n        }\n        this.update();\n    }\n    /**\n     * Load the grid panel implementation and instantiate a grid.\n     */\n    async initialize() {\n        if (this._grid || this._pending) {\n            return;\n        }\n        // Lazily load the datagrid module when the first grid is requested.\n        const { Grid } = await (this._pending = import('./gridpanel'));\n        const { commands, model, themeManager, translator } = this;\n        this._grid = new Grid({ commands, model, themeManager, translator });\n        this._grid.addClass('jp-DebuggerVariables-grid');\n        this._pending = null;\n        this.addWidget(this._grid);\n        this.update();\n    }\n    /**\n     * Wait until actually displaying the grid to trigger initialization.\n     */\n    onBeforeShow(msg) {\n        if (!this._grid && !this._pending) {\n            void this.initialize();\n        }\n        super.onBeforeShow(msg);\n    }\n    /**\n     * Handle `update-request` messages.\n     */\n    onUpdateRequest(msg) {\n        var _a;\n        if (this._grid) {\n            const { dataModel } = this._grid;\n            dataModel.filter = this._filter;\n            dataModel.scope = this._scope;\n            dataModel.setData((_a = this.model.scopes) !== null && _a !== void 0 ? _a : []);\n        }\n        super.onUpdateRequest(msg);\n    }\n}\n//# sourceMappingURL=grid.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { MainAreaWidget } from '@jupyterlab/apputils';\nimport { MimeModel } from '@jupyterlab/rendermime';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { Panel } from '@lumino/widgets';\nimport { murmur2 } from '../../hash';\nconst RENDERER_PANEL_CLASS = 'jp-VariableRendererPanel';\nconst RENDERER_PANEL_RENDERER_CLASS = 'jp-VariableRendererPanel-renderer';\n/**\n * Debugger variable mime type renderer\n */\nexport class VariableMimeRenderer extends MainAreaWidget {\n    /**\n     * Instantiate a new VariableMimeRenderer.\n     */\n    constructor(options) {\n        const { dataLoader, rendermime, translator } = options;\n        const content = new Panel();\n        const loaded = new PromiseDelegate();\n        super({\n            content,\n            reveal: Promise.all([dataLoader, loaded.promise])\n        });\n        this.content.addClass(RENDERER_PANEL_CLASS);\n        this.trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        this.dataLoader = dataLoader;\n        this.renderMime = rendermime;\n        this._dataHash = null;\n        this.refresh()\n            .then(() => {\n            loaded.resolve();\n        })\n            .catch(reason => loaded.reject(reason));\n    }\n    /**\n     * Refresh the variable view\n     */\n    async refresh(force = false) {\n        let data = await this.dataLoader();\n        if (Object.keys(data.data).length === 0) {\n            data = {\n                data: {\n                    'text/plain': this.trans.__('The variable is undefined in the active context.')\n                },\n                metadata: {}\n            };\n        }\n        if (data.data) {\n            const hash = murmur2(JSON.stringify(data), 17);\n            if (force || this._dataHash !== hash) {\n                if (this.content.layout) {\n                    this.content.widgets.forEach(w => {\n                        this.content.layout.removeWidget(w);\n                    });\n                }\n                // We trust unconditionally the data as the user is required to\n                // execute the code to load a particular variable in memory\n                const mimeType = this.renderMime.preferredMimeType(data.data, 'any');\n                if (mimeType) {\n                    const widget = this.renderMime.createRenderer(mimeType);\n                    widget.addClass(RENDERER_PANEL_RENDERER_CLASS);\n                    const model = new MimeModel({ ...data, trusted: true });\n                    this._dataHash = hash;\n                    await widget.renderModel(model);\n                    this.content.addWidget(widget);\n                }\n                else {\n                    this._dataHash = null;\n                    return Promise.reject('Unable to determine the preferred mime type.');\n                }\n            }\n        }\n        else {\n            this._dataHash = null;\n            return Promise.reject('Unable to get a view on the variable.');\n        }\n    }\n}\n//# sourceMappingURL=mimerenderer.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { Signal } from '@lumino/signaling';\nimport { Debugger } from './debugger';\n/**\n * A concrete implementation of the IDebugger interface.\n */\nexport class DebuggerService {\n    /**\n     * Instantiate a new DebuggerService.\n     *\n     * @param options The instantiation options for a DebuggerService.\n     */\n    constructor(options) {\n        var _a, _b;\n        this._eventMessage = new Signal(this);\n        this._isDisposed = false;\n        this._sessionChanged = new Signal(this);\n        this._pauseOnExceptionChanged = new Signal(this);\n        this._config = options.config;\n        // Avoids setting session with invalid client\n        // session should be set only when a notebook or\n        // a console get the focus.\n        // TODO: also checks that the notebook or console\n        // runs a kernel with debugging ability\n        this._session = null;\n        this._specsManager = (_a = options.specsManager) !== null && _a !== void 0 ? _a : null;\n        this._model = new Debugger.Model();\n        this._debuggerSources = (_b = options.debuggerSources) !== null && _b !== void 0 ? _b : null;\n        this._trans = (options.translator || nullTranslator).load('jupyterlab');\n    }\n    /**\n     * Signal emitted for debug event messages.\n     */\n    get eventMessage() {\n        return this._eventMessage;\n    }\n    /**\n     * Get debugger config.\n     */\n    get config() {\n        return this._config;\n    }\n    /**\n     * Whether the debug service is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Whether the current debugger is started.\n     */\n    get isStarted() {\n        var _a, _b;\n        return (_b = (_a = this._session) === null || _a === void 0 ? void 0 : _a.isStarted) !== null && _b !== void 0 ? _b : false;\n    }\n    /**\n     * A signal emitted when the pause on exception filter changes.\n     */\n    get pauseOnExceptionChanged() {\n        return this._pauseOnExceptionChanged;\n    }\n    /**\n     * Returns the debugger service's model.\n     */\n    get model() {\n        return this._model;\n    }\n    /**\n     * Returns the current debug session.\n     */\n    get session() {\n        return this._session;\n    }\n    /**\n     * Sets the current debug session to the given parameter.\n     *\n     * @param session - the new debugger session.\n     */\n    set session(session) {\n        var _a;\n        if (this._session === session) {\n            return;\n        }\n        if (this._session) {\n            this._session.dispose();\n        }\n        this._session = session;\n        (_a = this._session) === null || _a === void 0 ? void 0 : _a.eventMessage.connect((_, event) => {\n            if (event.event === 'stopped') {\n                this._model.stoppedThreads.add(event.body.threadId);\n                void this._getAllFrames();\n            }\n            else if (event.event === 'continued') {\n                this._model.stoppedThreads.delete(event.body.threadId);\n                this._clearModel();\n                this._clearSignals();\n            }\n            this._eventMessage.emit(event);\n        });\n        this._sessionChanged.emit(session);\n    }\n    /**\n     * Signal emitted upon session changed.\n     */\n    get sessionChanged() {\n        return this._sessionChanged;\n    }\n    /**\n     * Dispose the debug service.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n    }\n    /**\n     * Computes an id based on the given code.\n     *\n     * @param code The source code.\n     */\n    getCodeId(code) {\n        var _a, _b, _c, _d;\n        try {\n            return this._config.getCodeId(code, (_d = (_c = (_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.kernel) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : '');\n        }\n        catch (_e) {\n            return '';\n        }\n    }\n    /**\n     * Whether there exists a thread in stopped state.\n     */\n    hasStoppedThreads() {\n        var _a, _b;\n        return (_b = ((_a = this._model) === null || _a === void 0 ? void 0 : _a.stoppedThreads.size) > 0) !== null && _b !== void 0 ? _b : false;\n    }\n    /**\n     * Request whether debugging is available for the session connection.\n     *\n     * @param connection The session connection.\n     */\n    async isAvailable(connection) {\n        var _a, _b, _c, _d;\n        if (!this._specsManager) {\n            return true;\n        }\n        await this._specsManager.ready;\n        const kernel = connection === null || connection === void 0 ? void 0 : connection.kernel;\n        if (!kernel) {\n            return false;\n        }\n        const name = kernel.name;\n        if (!((_a = this._specsManager.specs) === null || _a === void 0 ? void 0 : _a.kernelspecs[name])) {\n            return true;\n        }\n        return !!((_d = (_c = (_b = this._specsManager.specs.kernelspecs[name]) === null || _b === void 0 ? void 0 : _b.metadata) === null || _c === void 0 ? void 0 : _c['debugger']) !== null && _d !== void 0 ? _d : false);\n    }\n    /**\n     * Clear all the breakpoints for the current session.\n     */\n    async clearBreakpoints() {\n        var _a;\n        if (((_a = this.session) === null || _a === void 0 ? void 0 : _a.isStarted) !== true) {\n            return;\n        }\n        this._model.breakpoints.breakpoints.forEach((_, path, map) => {\n            void this._setBreakpoints([], path);\n        });\n        let bpMap = new Map();\n        this._model.breakpoints.restoreBreakpoints(bpMap);\n    }\n    /**\n     * Continues the execution of the current thread.\n     */\n    async continue() {\n        try {\n            if (!this.session) {\n                throw new Error('No active debugger session');\n            }\n            await this.session.sendRequest('continue', {\n                threadId: this._currentThread()\n            });\n            this._model.stoppedThreads.delete(this._currentThread());\n            this._clearModel();\n            this._clearSignals();\n        }\n        catch (err) {\n            console.error('Error:', err.message);\n        }\n    }\n    /**\n     * Retrieve the content of a source file.\n     *\n     * @param source The source object containing the path to the file.\n     */\n    async getSource(source) {\n        var _a, _b;\n        if (!this.session) {\n            throw new Error('No active debugger session');\n        }\n        const reply = await this.session.sendRequest('source', {\n            source,\n            sourceReference: (_a = source.sourceReference) !== null && _a !== void 0 ? _a : 0\n        });\n        return { ...reply.body, path: (_b = source.path) !== null && _b !== void 0 ? _b : '' };\n    }\n    /**\n     * Evaluate an expression.\n     *\n     * @param expression The expression to evaluate as a string.\n     */\n    async evaluate(expression) {\n        var _a;\n        if (!this.session) {\n            throw new Error('No active debugger session');\n        }\n        const frameId = (_a = this.model.callstack.frame) === null || _a === void 0 ? void 0 : _a.id;\n        const reply = await this.session.sendRequest('evaluate', {\n            context: 'repl',\n            expression,\n            frameId\n        });\n        if (!reply.success) {\n            return null;\n        }\n        // get the frames to retrieve the latest state of the variables\n        this._clearModel();\n        await this._getAllFrames();\n        return reply.body;\n    }\n    /**\n     * Makes the current thread run again for one step.\n     */\n    async next() {\n        try {\n            if (!this.session) {\n                throw new Error('No active debugger session');\n            }\n            await this.session.sendRequest('next', {\n                threadId: this._currentThread()\n            });\n        }\n        catch (err) {\n            console.error('Error:', err.message);\n        }\n    }\n    /**\n     * Request rich representation of a variable.\n     *\n     * @param variableName The variable name to request\n     * @param frameId The current frame id in which to request the variable\n     * @returns The mime renderer data model\n     */\n    async inspectRichVariable(variableName, frameId) {\n        if (!this.session) {\n            throw new Error('No active debugger session');\n        }\n        const reply = await this.session.sendRequest('richInspectVariables', {\n            variableName,\n            frameId\n        });\n        if (reply.success) {\n            return reply.body;\n        }\n        else {\n            throw new Error(reply.message);\n        }\n    }\n    /**\n     * Request variables for a given variable reference.\n     *\n     * @param variablesReference The variable reference to request.\n     */\n    async inspectVariable(variablesReference) {\n        if (!this.session) {\n            throw new Error('No active debugger session');\n        }\n        const reply = await this.session.sendRequest('variables', {\n            variablesReference\n        });\n        if (reply.success) {\n            return reply.body.variables;\n        }\n        else {\n            throw new Error(reply.message);\n        }\n    }\n    /**\n     * Request to set a variable in the global scope.\n     *\n     * @param name The name of the variable.\n     */\n    async copyToGlobals(name) {\n        if (!this.session) {\n            throw new Error('No active debugger session');\n        }\n        if (!this.model.supportCopyToGlobals) {\n            throw new Error('The \"copyToGlobals\" request is not supported by the kernel');\n        }\n        const frames = this.model.callstack.frames;\n        this.session\n            .sendRequest('copyToGlobals', {\n            srcVariableName: name,\n            dstVariableName: name,\n            srcFrameId: frames[0].id\n        })\n            .then(async () => {\n            const scopes = await this._getScopes(frames[0]);\n            const variables = await Promise.all(scopes.map(scope => this._getVariables(scope)));\n            const variableScopes = this._convertScopes(scopes, variables);\n            this._model.variables.scopes = variableScopes;\n        })\n            .catch(reason => {\n            console.error(reason);\n        });\n    }\n    /**\n     * Requests all the defined variables and display them in the\n     * table view.\n     */\n    async displayDefinedVariables() {\n        if (!this.session) {\n            throw new Error('No active debugger session');\n        }\n        const inspectReply = await this.session.sendRequest('inspectVariables', {});\n        const variables = inspectReply.body.variables;\n        const variableScopes = [\n            {\n                name: this._trans.__('Globals'),\n                variables: variables\n            }\n        ];\n        this._model.variables.scopes = variableScopes;\n    }\n    async displayModules() {\n        if (!this.session) {\n            throw new Error('No active debugger session');\n        }\n        const modules = await this.session.sendRequest('modules', {});\n        this._model.kernelSources.kernelSources = modules.body.modules.map(module => {\n            return {\n                name: module.name,\n                path: module.path\n            };\n        });\n    }\n    /**\n     * Restart the debugger.\n     */\n    async restart() {\n        const { breakpoints } = this._model.breakpoints;\n        await this.stop();\n        await this.start();\n        await this._restoreBreakpoints(breakpoints);\n    }\n    /**\n     * Restore the state of a debug session.\n     *\n     * @param autoStart - If true, starts the debugger if it has not been started.\n     */\n    async restoreState(autoStart) {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n        if (!this.model || !this.session) {\n            return;\n        }\n        const reply = await this.session.restoreState();\n        const { body } = reply;\n        const breakpoints = this._mapBreakpoints(body.breakpoints);\n        const stoppedThreads = new Set(body.stoppedThreads);\n        this._model.hasRichVariableRendering = body.richRendering === true;\n        this._model.supportCopyToGlobals = body.copyToGlobals === true;\n        this._config.setHashParams({\n            kernel: (_d = (_c = (_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.kernel) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : '',\n            method: body.hashMethod,\n            seed: body.hashSeed\n        });\n        this._config.setTmpFileParams({\n            kernel: (_h = (_g = (_f = (_e = this.session) === null || _e === void 0 ? void 0 : _e.connection) === null || _f === void 0 ? void 0 : _f.kernel) === null || _g === void 0 ? void 0 : _g.name) !== null && _h !== void 0 ? _h : '',\n            prefix: body.tmpFilePrefix,\n            suffix: body.tmpFileSuffix\n        });\n        this._model.stoppedThreads = stoppedThreads;\n        if (!this.isStarted && (autoStart || stoppedThreads.size !== 0)) {\n            await this.start();\n        }\n        if (this.isStarted || autoStart) {\n            this._model.title = this.isStarted\n                ? ((_k = (_j = this.session) === null || _j === void 0 ? void 0 : _j.connection) === null || _k === void 0 ? void 0 : _k.name) || '-'\n                : '-';\n        }\n        if (this._debuggerSources) {\n            const filtered = this._filterBreakpoints(breakpoints);\n            this._model.breakpoints.restoreBreakpoints(filtered);\n        }\n        else {\n            this._model.breakpoints.restoreBreakpoints(breakpoints);\n        }\n        if (stoppedThreads.size !== 0) {\n            await this._getAllFrames();\n        }\n        else if (this.isStarted) {\n            this._clearModel();\n            this._clearSignals();\n        }\n        // Send the currentExceptionFilters to debugger.\n        if (this.session.currentExceptionFilters) {\n            await this.pauseOnExceptions(this.session.currentExceptionFilters);\n        }\n    }\n    /**\n     * Starts a debugger.\n     * Precondition: !isStarted\n     */\n    start() {\n        if (!this.session) {\n            throw new Error('No active debugger session');\n        }\n        return this.session.start();\n    }\n    /**\n     * Makes the current thread pause if possible.\n     */\n    async pause() {\n        try {\n            if (!this.session) {\n                throw new Error('No active debugger session');\n            }\n            await this.session.sendRequest('pause', {\n                threadId: this._currentThread()\n            });\n        }\n        catch (err) {\n            console.error('Error:', err.message);\n        }\n    }\n    /**\n     * Makes the current thread step in a function / method if possible.\n     */\n    async stepIn() {\n        try {\n            if (!this.session) {\n                throw new Error('No active debugger session');\n            }\n            await this.session.sendRequest('stepIn', {\n                threadId: this._currentThread()\n            });\n        }\n        catch (err) {\n            console.error('Error:', err.message);\n        }\n    }\n    /**\n     * Makes the current thread step out a function / method if possible.\n     */\n    async stepOut() {\n        try {\n            if (!this.session) {\n                throw new Error('No active debugger session');\n            }\n            await this.session.sendRequest('stepOut', {\n                threadId: this._currentThread()\n            });\n        }\n        catch (err) {\n            console.error('Error:', err.message);\n        }\n    }\n    /**\n     * Stops the debugger.\n     * Precondition: isStarted\n     */\n    async stop() {\n        if (!this.session) {\n            throw new Error('No active debugger session');\n        }\n        await this.session.stop();\n        if (this._model) {\n            this._model.clear();\n        }\n    }\n    /**\n     * Update all breakpoints at once.\n     *\n     * @param code - The code in the cell where the breakpoints are set.\n     * @param breakpoints - The list of breakpoints to set.\n     * @param path - Optional path to the file where to set the breakpoints.\n     */\n    async updateBreakpoints(code, breakpoints, path) {\n        var _a;\n        if (!((_a = this.session) === null || _a === void 0 ? void 0 : _a.isStarted)) {\n            return;\n        }\n        if (!path) {\n            path = (await this._dumpCell(code)).body.sourcePath;\n        }\n        const state = await this.session.restoreState();\n        const localBreakpoints = breakpoints\n            .filter(({ line }) => typeof line === 'number')\n            .map(({ line }) => ({ line: line }));\n        const remoteBreakpoints = this._mapBreakpoints(state.body.breakpoints);\n        // Set the local copy of breakpoints to reflect only editors that exist.\n        if (this._debuggerSources) {\n            const filtered = this._filterBreakpoints(remoteBreakpoints);\n            this._model.breakpoints.restoreBreakpoints(filtered);\n        }\n        else {\n            this._model.breakpoints.restoreBreakpoints(remoteBreakpoints);\n        }\n        // Removes duplicated breakpoints. It is better to do it here than\n        // in the editor, because the kernel can change the line of a\n        // breakpoint (when you attempt to set a breakpoint on an empty\n        // line for instance).\n        let addedLines = new Set();\n        // Set the kernel's breakpoints for this path.\n        const reply = await this._setBreakpoints(localBreakpoints, path);\n        const updatedBreakpoints = reply.body.breakpoints.filter((val, _, arr) => {\n            const cond1 = arr.findIndex(el => el.line === val.line) > -1;\n            const cond2 = !addedLines.has(val.line);\n            addedLines.add(val.line);\n            return cond1 && cond2;\n        });\n        // Update the local model and finish kernel configuration.\n        this._model.breakpoints.setBreakpoints(path, updatedBreakpoints);\n        await this.session.sendRequest('configurationDone', {});\n    }\n    /**\n     * Determines if pausing on exceptions is supported by the kernel\n     */\n    pauseOnExceptionsIsValid() {\n        var _a, _b;\n        if (this.isStarted) {\n            if (((_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.exceptionBreakpointFilters) === null || _b === void 0 ? void 0 : _b.length) !== 0) {\n                return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * Add or remove a filter from the current used filters.\n     *\n     * @param exceptionFilter - The filter to add or remove from current filters.\n     */\n    async pauseOnExceptionsFilter(exceptionFilter) {\n        var _a;\n        if (!((_a = this.session) === null || _a === void 0 ? void 0 : _a.isStarted)) {\n            return;\n        }\n        let exceptionFilters = this.session.currentExceptionFilters;\n        if (this.session.isPausingOnException(exceptionFilter)) {\n            const index = exceptionFilters.indexOf(exceptionFilter);\n            exceptionFilters.splice(index, 1);\n        }\n        else {\n            exceptionFilters === null || exceptionFilters === void 0 ? void 0 : exceptionFilters.push(exceptionFilter);\n        }\n        await this.pauseOnExceptions(exceptionFilters);\n    }\n    /**\n     * Enable or disable pausing on exceptions.\n     *\n     * @param exceptionFilters - The filters to use for the current debugging session.\n     */\n    async pauseOnExceptions(exceptionFilters) {\n        var _a, _b;\n        if (!((_a = this.session) === null || _a === void 0 ? void 0 : _a.isStarted)) {\n            return;\n        }\n        const exceptionBreakpointFilters = ((_b = this.session.exceptionBreakpointFilters) === null || _b === void 0 ? void 0 : _b.map(e => e.filter)) || [];\n        let options = {\n            filters: []\n        };\n        exceptionFilters.forEach(filter => {\n            if (exceptionBreakpointFilters.includes(filter)) {\n                options.filters.push(filter);\n            }\n        });\n        this.session.currentExceptionFilters = options.filters;\n        await this.session.sendRequest('setExceptionBreakpoints', options);\n        this._pauseOnExceptionChanged.emit();\n    }\n    /**\n     * Get the debugger state\n     *\n     * @returns Debugger state\n     */\n    getDebuggerState() {\n        var _a, _b, _c, _d, _e, _f, _g;\n        const breakpoints = this._model.breakpoints.breakpoints;\n        let cells = [];\n        if (this._debuggerSources) {\n            for (const id of breakpoints.keys()) {\n                const editorList = this._debuggerSources.find({\n                    focus: false,\n                    kernel: (_d = (_c = (_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.kernel) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : '',\n                    path: (_g = (_f = (_e = this._session) === null || _e === void 0 ? void 0 : _e.connection) === null || _f === void 0 ? void 0 : _f.path) !== null && _g !== void 0 ? _g : '',\n                    source: id\n                });\n                const tmpCells = editorList.map(e => e.src.getSource());\n                cells = cells.concat(tmpCells);\n            }\n        }\n        return { cells, breakpoints };\n    }\n    /**\n     * Restore the debugger state\n     *\n     * @param state Debugger state\n     * @returns Whether the state has been restored successfully or not\n     */\n    async restoreDebuggerState(state) {\n        var _a, _b, _c, _d;\n        await this.start();\n        for (const cell of state.cells) {\n            await this._dumpCell(cell);\n        }\n        const breakpoints = new Map();\n        const kernel = (_d = (_c = (_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.kernel) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : '';\n        const { prefix, suffix } = this._config.getTmpFileParams(kernel);\n        for (const item of state.breakpoints) {\n            const [id, list] = item;\n            const unsuffixedId = id.substr(0, id.length - suffix.length);\n            const codeHash = unsuffixedId.substr(unsuffixedId.lastIndexOf('/') + 1);\n            const newId = prefix.concat(codeHash).concat(suffix);\n            breakpoints.set(newId, list);\n        }\n        await this._restoreBreakpoints(breakpoints);\n        const config = await this.session.sendRequest('configurationDone', {});\n        await this.restoreState(false);\n        return config.success;\n    }\n    /**\n     * Clear the current model.\n     */\n    _clearModel() {\n        this._model.callstack.frames = [];\n        this._model.variables.scopes = [];\n    }\n    /**\n     * Clear the signals set on the model.\n     */\n    _clearSignals() {\n        this._model.callstack.currentFrameChanged.disconnect(this._onCurrentFrameChanged, this);\n        this._model.variables.variableExpanded.disconnect(this._onVariableExpanded, this);\n    }\n    /**\n     * Map a list of scopes to a list of variables.\n     *\n     * @param scopes The list of scopes.\n     * @param variables The list of variables.\n     */\n    _convertScopes(scopes, variables) {\n        if (!variables || !scopes) {\n            return [];\n        }\n        return scopes.map((scope, i) => {\n            return {\n                name: scope.name,\n                variables: variables[i].map(variable => {\n                    return { ...variable };\n                })\n            };\n        });\n    }\n    /**\n     * Get the current thread from the model.\n     */\n    _currentThread() {\n        // TODO: ask the model for the current thread ID\n        return 1;\n    }\n    /**\n     * Dump the content of a cell.\n     *\n     * @param code The source code to dump.\n     */\n    async _dumpCell(code) {\n        if (!this.session) {\n            throw new Error('No active debugger session');\n        }\n        return this.session.sendRequest('dumpCell', { code });\n    }\n    /**\n     * Filter breakpoints and only return those associated with a known editor.\n     *\n     * @param breakpoints - Map of breakpoints.\n     *\n     */\n    _filterBreakpoints(breakpoints) {\n        if (!this._debuggerSources) {\n            return breakpoints;\n        }\n        let bpMapForRestore = new Map();\n        for (const collection of breakpoints) {\n            const [id, list] = collection;\n            list.forEach(() => {\n                var _a, _b, _c, _d, _e, _f, _g;\n                this._debuggerSources.find({\n                    focus: false,\n                    kernel: (_d = (_c = (_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.kernel) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : '',\n                    path: (_g = (_f = (_e = this._session) === null || _e === void 0 ? void 0 : _e.connection) === null || _f === void 0 ? void 0 : _f.path) !== null && _g !== void 0 ? _g : '',\n                    source: id\n                }).forEach(() => {\n                    if (list.length > 0) {\n                        bpMapForRestore.set(id, list);\n                    }\n                });\n            });\n        }\n        return bpMapForRestore;\n    }\n    /**\n     * Get all the frames from the kernel.\n     */\n    async _getAllFrames() {\n        this._model.callstack.currentFrameChanged.connect(this._onCurrentFrameChanged, this);\n        this._model.variables.variableExpanded.connect(this._onVariableExpanded, this);\n        const stackFrames = await this._getFrames(this._currentThread());\n        this._model.callstack.frames = stackFrames;\n    }\n    /**\n     * Get all the frames for the given thread id.\n     *\n     * @param threadId The thread id.\n     */\n    async _getFrames(threadId) {\n        if (!this.session) {\n            throw new Error('No active debugger session');\n        }\n        const reply = await this.session.sendRequest('stackTrace', {\n            threadId\n        });\n        const stackFrames = reply.body.stackFrames;\n        return stackFrames;\n    }\n    /**\n     * Get all the scopes for the given frame.\n     *\n     * @param frame The frame.\n     */\n    async _getScopes(frame) {\n        if (!this.session) {\n            throw new Error('No active debugger session');\n        }\n        if (!frame) {\n            return [];\n        }\n        const reply = await this.session.sendRequest('scopes', {\n            frameId: frame.id\n        });\n        return reply.body.scopes;\n    }\n    /**\n     * Get the variables for a given scope.\n     *\n     * @param scope The scope to get variables for.\n     */\n    async _getVariables(scope) {\n        if (!this.session) {\n            throw new Error('No active debugger session');\n        }\n        if (!scope) {\n            return [];\n        }\n        const reply = await this.session.sendRequest('variables', {\n            variablesReference: scope.variablesReference\n        });\n        return reply.body.variables;\n    }\n    /**\n     * Process the list of breakpoints from the server and return as a map.\n     *\n     * @param breakpoints - The list of breakpoints from the kernel.\n     *\n     */\n    _mapBreakpoints(breakpoints) {\n        if (!breakpoints.length) {\n            return new Map();\n        }\n        return breakpoints.reduce((map, val) => {\n            const { breakpoints, source } = val;\n            map.set(source, breakpoints.map(point => ({\n                ...point,\n                source: { path: source },\n                verified: true\n            })));\n            return map;\n        }, new Map());\n    }\n    /**\n     * Handle a change of the current active frame.\n     *\n     * @param _ The callstack model\n     * @param frame The frame.\n     */\n    async _onCurrentFrameChanged(_, frame) {\n        if (!frame) {\n            return;\n        }\n        const scopes = await this._getScopes(frame);\n        const variables = await Promise.all(scopes.map(scope => this._getVariables(scope)));\n        const variableScopes = this._convertScopes(scopes, variables);\n        this._model.variables.scopes = variableScopes;\n    }\n    /**\n     * Handle a variable expanded event and request variables from the kernel.\n     *\n     * @param _ The variables model.\n     * @param variable The expanded variable.\n     */\n    async _onVariableExpanded(_, variable) {\n        if (!this.session) {\n            throw new Error('No active debugger session');\n        }\n        const reply = await this.session.sendRequest('variables', {\n            variablesReference: variable.variablesReference\n        });\n        let newVariable = { ...variable, expanded: true };\n        reply.body.variables.forEach((variable) => {\n            newVariable = { [variable.name]: variable, ...newVariable };\n        });\n        const newScopes = this._model.variables.scopes.map(scope => {\n            const findIndex = scope.variables.findIndex(ele => ele.variablesReference === variable.variablesReference);\n            scope.variables[findIndex] = newVariable;\n            return { ...scope };\n        });\n        this._model.variables.scopes = [...newScopes];\n        return reply.body.variables;\n    }\n    /**\n     * Set the breakpoints for a given file.\n     *\n     * @param breakpoints The list of breakpoints to set.\n     * @param path The path to where to set the breakpoints.\n     */\n    async _setBreakpoints(breakpoints, path) {\n        if (!this.session) {\n            throw new Error('No active debugger session');\n        }\n        return await this.session.sendRequest('setBreakpoints', {\n            breakpoints: breakpoints,\n            source: { path },\n            sourceModified: false\n        });\n    }\n    /**\n     * Re-send the breakpoints to the kernel and update the model.\n     *\n     * @param breakpoints The map of breakpoints to send\n     */\n    async _restoreBreakpoints(breakpoints) {\n        for (const [source, points] of breakpoints) {\n            await this._setBreakpoints(points\n                .filter(({ line }) => typeof line === 'number')\n                .map(({ line }) => ({ line: line })), source);\n        }\n        this._model.breakpoints.restoreBreakpoints(breakpoints);\n    }\n}\n//# sourceMappingURL=service.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\n/**\n * A concrete implementation of IDebugger.ISession.\n */\nexport class DebuggerSession {\n    /**\n     * Instantiate a new debug session\n     *\n     * @param options - The debug session instantiation options.\n     */\n    constructor(options) {\n        this._seq = 0;\n        this._ready = new PromiseDelegate();\n        this._isDisposed = false;\n        this._isStarted = false;\n        this._exceptionPaths = [];\n        this._exceptionBreakpointFilters = [];\n        this._currentExceptionFilters = {};\n        this._disposed = new Signal(this);\n        this._eventMessage = new Signal(this);\n        this.connection = options.connection;\n        this._config = options.config;\n        this.translator = options.translator || nullTranslator;\n    }\n    /**\n     * Whether the debug session is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Returns the initialize response .\n     */\n    get capabilities() {\n        return this._capabilities;\n    }\n    /**\n     * A signal emitted when the debug session is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * Returns the API session connection to connect to a debugger.\n     */\n    get connection() {\n        return this._connection;\n    }\n    /**\n     * Sets the API session connection to connect to a debugger to\n     * the given parameter.\n     *\n     * @param connection - The new API session connection.\n     */\n    set connection(connection) {\n        var _a, _b;\n        if (this._connection) {\n            this._connection.iopubMessage.disconnect(this._handleEvent, this);\n        }\n        this._connection = connection;\n        if (!this._connection) {\n            this._isStarted = false;\n            return;\n        }\n        this._connection.iopubMessage.connect(this._handleEvent, this);\n        this._ready = new PromiseDelegate();\n        const future = (_b = (_a = this.connection) === null || _a === void 0 ? void 0 : _a.kernel) === null || _b === void 0 ? void 0 : _b.requestDebug({\n            type: 'request',\n            seq: 0,\n            command: 'debugInfo'\n        });\n        if (future) {\n            future.onReply = (msg) => {\n                this._ready.resolve();\n                future.dispose();\n            };\n        }\n    }\n    /**\n     * Whether the debug session is started.\n     */\n    get isStarted() {\n        return this._isStarted;\n    }\n    /**\n     * Exception paths defined by the debugger\n     */\n    get exceptionPaths() {\n        return this._exceptionPaths;\n    }\n    /**\n     * Exception breakpoint filters defined by the debugger\n     */\n    get exceptionBreakpointFilters() {\n        return this._exceptionBreakpointFilters;\n    }\n    /**\n     * Get current exception filters.\n     */\n    get currentExceptionFilters() {\n        var _a, _b, _c;\n        const kernel = (_c = (_b = (_a = this.connection) === null || _a === void 0 ? void 0 : _a.kernel) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : '';\n        if (!kernel) {\n            return [];\n        }\n        const tmpFileParams = this._config.getTmpFileParams(kernel);\n        if (!tmpFileParams) {\n            return [];\n        }\n        let prefix = tmpFileParams.prefix;\n        if (Object.keys(this._currentExceptionFilters).includes(prefix)) {\n            return this._currentExceptionFilters[prefix];\n        }\n        return [];\n    }\n    /**\n     * Set current exception filters.\n     */\n    set currentExceptionFilters(exceptionFilters) {\n        var _a, _b, _c;\n        const kernel = (_c = (_b = (_a = this.connection) === null || _a === void 0 ? void 0 : _a.kernel) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : '';\n        if (!kernel) {\n            return;\n        }\n        const tmpFileParams = this._config.getTmpFileParams(kernel);\n        if (!tmpFileParams) {\n            return;\n        }\n        let prefix = tmpFileParams.prefix;\n        if (exceptionFilters === null) {\n            if (Object.keys(this._currentExceptionFilters).includes(prefix)) {\n                delete this._currentExceptionFilters[prefix];\n            }\n        }\n        else {\n            this._currentExceptionFilters[prefix] = exceptionFilters;\n        }\n    }\n    /**\n     * Signal emitted for debug event messages.\n     */\n    get eventMessage() {\n        return this._eventMessage;\n    }\n    /**\n     * Dispose the debug session.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._disposed.emit();\n        Signal.clearData(this);\n    }\n    /**\n     * Start a new debug session\n     */\n    async start() {\n        var _a, _b, _c, _d;\n        const initializeResponse = await this.sendRequest('initialize', {\n            clientID: 'jupyterlab',\n            clientName: 'JupyterLab',\n            adapterID: (_c = (_b = (_a = this.connection) === null || _a === void 0 ? void 0 : _a.kernel) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : '',\n            pathFormat: 'path',\n            linesStartAt1: true,\n            columnsStartAt1: true,\n            supportsVariableType: true,\n            supportsVariablePaging: true,\n            supportsRunInTerminalRequest: true,\n            locale: document.documentElement.lang\n        });\n        if (!initializeResponse.success) {\n            throw new Error(`Could not start the debugger: ${initializeResponse.message}`);\n        }\n        this._capabilities = initializeResponse.body;\n        this._isStarted = true;\n        this._exceptionBreakpointFilters =\n            (_d = initializeResponse.body) === null || _d === void 0 ? void 0 : _d.exceptionBreakpointFilters;\n        await this.sendRequest('attach', {});\n    }\n    /**\n     * Stop the running debug session.\n     */\n    async stop() {\n        this._isStarted = false;\n        await this.sendRequest('disconnect', {\n            restart: false,\n            terminateDebuggee: false\n        });\n    }\n    /**\n     * Restore the state of a debug session.\n     */\n    async restoreState() {\n        var _a;\n        const message = await this.sendRequest('debugInfo', {});\n        this._isStarted = message.body.isStarted;\n        this._exceptionPaths = (_a = message.body) === null || _a === void 0 ? void 0 : _a.exceptionPaths;\n        return message;\n    }\n    /**\n     * Whether the debugger is pausing on exception.\n     *\n     * @param filter - Specify a filter\n     */\n    isPausingOnException(filter) {\n        var _a, _b;\n        if (filter) {\n            return (_b = (_a = this.currentExceptionFilters) === null || _a === void 0 ? void 0 : _a.includes(filter)) !== null && _b !== void 0 ? _b : false;\n        }\n        else {\n            return this.currentExceptionFilters.length > 0;\n        }\n    }\n    /**\n     * Send a custom debug request to the kernel.\n     *\n     * @param command debug command.\n     * @param args arguments for the debug command.\n     */\n    async sendRequest(command, args) {\n        await this._ready.promise;\n        const message = await this._sendDebugMessage({\n            type: 'request',\n            seq: this._seq++,\n            command,\n            arguments: args\n        });\n        return message.content;\n    }\n    /**\n     * Handle debug events sent on the 'iopub' channel.\n     *\n     * @param sender - the emitter of the event.\n     * @param message - the event message.\n     */\n    _handleEvent(sender, message) {\n        const msgType = message.header.msg_type;\n        if (msgType !== 'debug_event') {\n            return;\n        }\n        const event = message.content;\n        this._eventMessage.emit(event);\n    }\n    /**\n     * Send a debug request message to the kernel.\n     *\n     * @param msg debug request message to send to the kernel.\n     */\n    async _sendDebugMessage(msg) {\n        var _a;\n        const kernel = (_a = this.connection) === null || _a === void 0 ? void 0 : _a.kernel;\n        if (!kernel) {\n            return Promise.reject(new Error('A kernel is required to send debug messages.'));\n        }\n        const reply = new PromiseDelegate();\n        const future = kernel.requestDebug(msg);\n        future.onReply = (msg) => {\n            reply.resolve(msg);\n        };\n        await future.done;\n        return reply.promise;\n    }\n}\n//# sourceMappingURL=session.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ReactWidget } from '@jupyterlab/ui-components';\nimport React, { useEffect, useState } from 'react';\n/**\n * The body for a Breakpoints Panel.\n */\nexport class BreakpointsBody extends ReactWidget {\n    /**\n     * Instantiate a new Body for the Breakpoints Panel.\n     *\n     * @param model The model for the breakpoints.\n     */\n    constructor(model) {\n        super();\n        this._model = model;\n        this.addClass('jp-DebuggerBreakpoints-body');\n    }\n    /**\n     * Render the BreakpointsComponent.\n     */\n    render() {\n        return React.createElement(BreakpointsComponent, { model: this._model });\n    }\n}\n/**\n * A React component to display a list of breakpoints.\n *\n * @param {object} props The component props.\n * @param props.model The model for the breakpoints.\n */\nconst BreakpointsComponent = ({ model }) => {\n    const [breakpoints, setBreakpoints] = useState(Array.from(model.breakpoints.entries()));\n    useEffect(() => {\n        const updateBreakpoints = (_, updates) => {\n            setBreakpoints(Array.from(model.breakpoints.entries()));\n        };\n        const restoreBreakpoints = (_) => {\n            setBreakpoints(Array.from(model.breakpoints.entries()));\n        };\n        model.changed.connect(updateBreakpoints);\n        model.restored.connect(restoreBreakpoints);\n        return () => {\n            model.changed.disconnect(updateBreakpoints);\n            model.restored.disconnect(restoreBreakpoints);\n        };\n    });\n    return (React.createElement(React.Fragment, null, breakpoints.map(entry => (React.createElement(BreakpointCellComponent, { key: entry[0], breakpoints: entry[1], model: model })))));\n};\n/**\n * A React Component to display breakpoints grouped by source file.\n *\n * @param {object} props The component props.\n * @param props.breakpoints The list of breakpoints.\n * @param props.model The model for the breakpoints.\n */\nconst BreakpointCellComponent = ({ breakpoints, model }) => {\n    return (React.createElement(React.Fragment, null, breakpoints\n        .sort((a, b) => {\n        var _a, _b;\n        return ((_a = a.line) !== null && _a !== void 0 ? _a : 0) - ((_b = b.line) !== null && _b !== void 0 ? _b : 0);\n    })\n        .map((breakpoint, index) => {\n        var _a, _b;\n        return (React.createElement(BreakpointComponent, { key: ((_b = (_a = breakpoint.source) === null || _a === void 0 ? void 0 : _a.path) !== null && _b !== void 0 ? _b : '') + index, breakpoint: breakpoint, model: model }));\n    })));\n};\n/**\n * A React Component to display a single breakpoint.\n *\n * @param {object} props The component props.\n * @param props.breakpoint The breakpoint.\n * @param props.model The model for the breakpoints.\n */\nconst BreakpointComponent = ({ breakpoint, model }) => {\n    var _a, _b, _c;\n    const moveToEndFirstCharIfSlash = (breakpointSourcePath) => {\n        return breakpointSourcePath[0] === '/'\n            ? breakpointSourcePath.slice(1) + '/'\n            : breakpointSourcePath;\n    };\n    return (React.createElement(\"div\", { className: 'jp-DebuggerBreakpoint', onClick: () => model.clicked.emit(breakpoint), title: (_a = breakpoint.source) === null || _a === void 0 ? void 0 : _a.path },\n        React.createElement(\"span\", { className: 'jp-DebuggerBreakpoint-marker' }, \"\\u25CF\"),\n        React.createElement(\"span\", { className: 'jp-DebuggerBreakpoint-source jp-left-truncated' }, moveToEndFirstCharIfSlash((_c = (_b = breakpoint.source) === null || _b === void 0 ? void 0 : _b.path) !== null && _c !== void 0 ? _c : '')),\n        React.createElement(\"span\", { className: 'jp-DebuggerBreakpoint-line' }, breakpoint.line)));\n};\n//# sourceMappingURL=body.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport * as React from 'react';\nimport { MenuSvg, ToolbarButton, ToolbarButtonComponent } from '@jupyterlab/ui-components';\nconst PAUSE_ON_EXCEPTION_CLASS = 'jp-debugger-pauseOnExceptions';\nconst PAUSE_ON_EXCEPTION_BUTTON_CLASS = 'jp-PauseOnExceptions';\nconst PAUSE_ON_EXCEPTION_MENU_CLASS = 'jp-PauseOnExceptions-menu';\n/**\n * A button which display a menu on click, to select the filter.\n */\nexport class PauseOnExceptionsWidget extends ToolbarButton {\n    /**\n     * Constructor of the button.\n     */\n    constructor(props) {\n        super();\n        /**\n         * open menu on click.\n         */\n        this.onclick = () => {\n            this._menu.open(this.node.getBoundingClientRect().left, this.node.getBoundingClientRect().bottom);\n        };\n        this._menu = new PauseOnExceptionsMenu({\n            service: props.service,\n            commands: {\n                registry: props.commands.registry,\n                pauseOnExceptions: props.commands.pauseOnExceptions\n            }\n        });\n        this.node.className = PAUSE_ON_EXCEPTION_CLASS;\n        this._props = props;\n        this._props.className = PAUSE_ON_EXCEPTION_BUTTON_CLASS;\n        this._props.service.eventMessage.connect((_, event) => {\n            if (event.event === 'initialized' || event.event === 'terminated') {\n                this.onChange();\n            }\n        }, this);\n        this._props.enabled = this._props.service.pauseOnExceptionsIsValid();\n        this._props.service.pauseOnExceptionChanged.connect(this.onChange, this);\n    }\n    /**\n     * Called when the debugger is initialized or the filter changed.\n     */\n    onChange() {\n        var _a;\n        const session = this._props.service.session;\n        const exceptionBreakpointFilters = session === null || session === void 0 ? void 0 : session.exceptionBreakpointFilters;\n        this._props.className = PAUSE_ON_EXCEPTION_BUTTON_CLASS;\n        if (((_a = this._props.service.session) === null || _a === void 0 ? void 0 : _a.isStarted) && exceptionBreakpointFilters) {\n            this._props.pressed = session.isPausingOnException();\n            this._props.enabled = true;\n        }\n        else {\n            this._props.enabled = false;\n        }\n        this.update();\n    }\n    render() {\n        return React.createElement(ToolbarButtonComponent, { ...this._props, onClick: this.onclick });\n    }\n}\n/**\n * A menu with all the available filter from the debugger as entries.\n */\nexport class PauseOnExceptionsMenu extends MenuSvg {\n    /**\n     * The constructor of the menu.\n     */\n    constructor(props) {\n        super({ commands: props.commands.registry });\n        this._service = props.service;\n        this._command = props.commands.pauseOnExceptions;\n        props.service.eventMessage.connect((_, event) => {\n            if (event.event === 'initialized') {\n                this._build();\n            }\n        }, this);\n        this._build();\n        this.addClass(PAUSE_ON_EXCEPTION_MENU_CLASS);\n    }\n    _build() {\n        var _a, _b;\n        this.clearItems();\n        const exceptionsBreakpointFilters = (_b = (_a = this._service.session) === null || _a === void 0 ? void 0 : _a.exceptionBreakpointFilters) !== null && _b !== void 0 ? _b : [];\n        exceptionsBreakpointFilters.map((filter, _) => {\n            this.addItem({\n                command: this._command,\n                args: {\n                    filter: filter.filter,\n                    description: filter.description\n                }\n            });\n        });\n    }\n}\n//# sourceMappingURL=pauseonexceptions.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Dialog, showDialog } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { closeAllIcon, exceptionsIcon, PanelWithToolbar, ToolbarButton } from '@jupyterlab/ui-components';\nimport { Signal } from '@lumino/signaling';\nimport { BreakpointsBody } from './body';\nimport { PauseOnExceptionsWidget } from './pauseonexceptions';\n/**\n * A Panel to show a list of breakpoints.\n */\nexport class Breakpoints extends PanelWithToolbar {\n    /**\n     * Instantiate a new Breakpoints Panel.\n     *\n     * @param options The instantiation options for a Breakpoints Panel.\n     */\n    constructor(options) {\n        var _a;\n        super(options);\n        this.clicked = new Signal(this);\n        const { model, service, commands } = options;\n        const trans = ((_a = options.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n        this.title.label = trans.__('Breakpoints');\n        const body = new BreakpointsBody(model);\n        this.toolbar.node.setAttribute('aria-label', trans.__('Breakpoints panel toolbar'));\n        this.toolbar.addItem('pauseOnException', new PauseOnExceptionsWidget({\n            service: service,\n            commands: commands,\n            icon: exceptionsIcon,\n            tooltip: trans.__('Pause on exception filter')\n        }));\n        this.toolbar.addItem('closeAll', new ToolbarButton({\n            icon: closeAllIcon,\n            onClick: async () => {\n                if (model.breakpoints.size === 0) {\n                    return;\n                }\n                const result = await showDialog({\n                    title: trans.__('Remove All Breakpoints'),\n                    body: trans.__('Are you sure you want to remove all breakpoints?'),\n                    buttons: [\n                        Dialog.okButton({ label: trans.__('Remove breakpoints') }),\n                        Dialog.cancelButton()\n                    ],\n                    hasClose: true\n                });\n                if (result.button.accept) {\n                    return service.clearBreakpoints();\n                }\n            },\n            tooltip: trans.__('Remove All Breakpoints')\n        }));\n        this.addWidget(body);\n        this.addClass('jp-DebuggerBreakpoints');\n    }\n}\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { ReactWidget } from '@jupyterlab/ui-components';\nimport React, { useEffect, useState } from 'react';\n/**\n * The body for a Callstack Panel.\n */\nexport class CallstackBody extends ReactWidget {\n    /**\n     * Instantiate a new Body for the Callstack Panel.\n     *\n     * @param model The model for the callstack.\n     */\n    constructor(model) {\n        super();\n        this._model = model;\n        this.addClass('jp-DebuggerCallstack-body');\n    }\n    /**\n     * Render the FramesComponent.\n     */\n    render() {\n        return React.createElement(FramesComponent, { model: this._model });\n    }\n}\n/**\n * A React component to display a list of frames in a callstack.\n *\n * @param {object} props The component props.\n * @param props.model The model for the callstack.\n */\nconst FramesComponent = ({ model }) => {\n    const [frames, setFrames] = useState(model.frames);\n    const [selected, setSelected] = useState(model.frame);\n    const onSelected = (frame) => {\n        setSelected(frame);\n        model.frame = frame;\n    };\n    useEffect(() => {\n        const updateFrames = () => {\n            setSelected(model.frame);\n            setFrames(model.frames);\n        };\n        model.framesChanged.connect(updateFrames);\n        return () => {\n            model.framesChanged.disconnect(updateFrames);\n        };\n    }, [model]);\n    const toShortLocation = (el) => {\n        var _a;\n        const path = ((_a = el.source) === null || _a === void 0 ? void 0 : _a.path) || '';\n        const base = PathExt.basename(PathExt.dirname(path));\n        const filename = PathExt.basename(path);\n        const shortname = PathExt.join(base, filename);\n        return `${shortname}:${el.line}`;\n    };\n    return (React.createElement(\"ul\", null, frames.map(ele => {\n        var _a;\n        return (React.createElement(\"li\", { key: ele.id, onClick: () => onSelected(ele), className: (selected === null || selected === void 0 ? void 0 : selected.id) === ele.id\n                ? 'selected jp-DebuggerCallstackFrame'\n                : 'jp-DebuggerCallstackFrame' },\n            React.createElement(\"span\", { className: 'jp-DebuggerCallstackFrame-name' }, ele.name),\n            React.createElement(\"span\", { className: 'jp-DebuggerCallstackFrame-location', title: (_a = ele.source) === null || _a === void 0 ? void 0 : _a.path }, toShortLocation(ele))));\n    })));\n};\n//# sourceMappingURL=body.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { CommandToolbarButton, PanelWithToolbar } from '@jupyterlab/ui-components';\nimport { CallstackBody } from './body';\n/**\n * A Panel to show a callstack.\n */\nexport class Callstack extends PanelWithToolbar {\n    /**\n     * Instantiate a new Callstack Panel.\n     *\n     * @param options The instantiation options for a Callstack Panel.\n     */\n    constructor(options) {\n        var _a;\n        super(options);\n        const { commands, model } = options;\n        const trans = ((_a = options.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n        this.title.label = trans.__('Callstack');\n        const body = new CallstackBody(model);\n        this.toolbar.node.setAttribute('aria-label', trans.__('Callstack panel toolbar'));\n        this.toolbar.addItem('continue', new CommandToolbarButton({\n            commands: commands.registry,\n            id: commands.continue,\n            label: ''\n        }));\n        this.toolbar.addItem('terminate', new CommandToolbarButton({\n            commands: commands.registry,\n            id: commands.terminate,\n            label: ''\n        }));\n        this.toolbar.addItem('step-over', new CommandToolbarButton({\n            commands: commands.registry,\n            id: commands.next,\n            label: ''\n        }));\n        this.toolbar.addItem('step-in', new CommandToolbarButton({\n            commands: commands.registry,\n            id: commands.stepIn,\n            label: ''\n        }));\n        this.toolbar.addItem('step-out', new CommandToolbarButton({\n            commands: commands.registry,\n            id: commands.stepOut,\n            label: ''\n        }));\n        this.toolbar.addItem('evaluate', new CommandToolbarButton({\n            commands: commands.registry,\n            id: commands.evaluate,\n            label: ''\n        }));\n        this.addWidget(body);\n        this.addClass('jp-DebuggerCallstack');\n    }\n}\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\nimport { PanelLayout, Widget } from '@lumino/widgets';\nimport { Debugger } from '../..';\nimport { EditorHandler } from '../../handlers/editor';\n/**\n * The body for a Sources Panel.\n */\nexport class SourcesBody extends Widget {\n    /**\n     * Instantiate a new Body for the SourcesBody widget.\n     *\n     * @param options The instantiation options for a SourcesBody.\n     */\n    constructor(options) {\n        super();\n        this._model = options.model;\n        this._debuggerService = options.service;\n        this._mimeTypeService = options.editorServices.mimeTypeService;\n        const factory = new Debugger.ReadOnlyEditorFactory({\n            editorServices: options.editorServices\n        });\n        this._editor = factory.createNewEditor({\n            content: '',\n            mimeType: '',\n            path: ''\n        });\n        this._editor.hide();\n        this._model.currentFrameChanged.connect(async (_, frame) => {\n            if (!frame) {\n                this._clearEditor();\n                return;\n            }\n            void this._showSource(frame);\n        });\n        const layout = new PanelLayout();\n        layout.addWidget(this._editor);\n        this.layout = layout;\n        this.addClass('jp-DebuggerSources-body');\n    }\n    /**\n     * Dispose the sources body widget.\n     */\n    dispose() {\n        var _a;\n        if (this.isDisposed) {\n            return;\n        }\n        (_a = this._editorHandler) === null || _a === void 0 ? void 0 : _a.dispose();\n        Signal.clearData(this);\n        super.dispose();\n    }\n    /**\n     * Clear the content of the source read-only editor.\n     */\n    _clearEditor() {\n        this._model.currentSource = null;\n        this._editor.hide();\n    }\n    /**\n     * Show the content of the source for the given frame.\n     *\n     * @param frame The current frame.\n     */\n    async _showSource(frame) {\n        var _a;\n        const path = (_a = frame.source) === null || _a === void 0 ? void 0 : _a.path;\n        const source = await this._debuggerService.getSource({\n            sourceReference: 0,\n            path\n        });\n        if (!(source === null || source === void 0 ? void 0 : source.content)) {\n            this._clearEditor();\n            return;\n        }\n        if (this._editorHandler) {\n            this._editorHandler.dispose();\n        }\n        const { content, mimeType } = source;\n        const editorMimeType = mimeType || this._mimeTypeService.getMimeTypeByFilePath(path !== null && path !== void 0 ? path : '');\n        this._editor.model.sharedModel.setSource(content);\n        this._editor.model.mimeType = editorMimeType;\n        this._editorHandler = new EditorHandler({\n            debuggerService: this._debuggerService,\n            editorReady: () => Promise.resolve(this._editor.editor),\n            getEditor: () => this._editor.editor,\n            path,\n            src: this._editor.model.sharedModel\n        });\n        this._model.currentSource = {\n            content,\n            mimeType: editorMimeType,\n            path: path !== null && path !== void 0 ? path : ''\n        };\n        requestAnimationFrame(() => {\n            EditorHandler.showCurrentLine(this._editor.editor, frame.line);\n        });\n        this._editor.show();\n    }\n}\n//# sourceMappingURL=body.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { UseSignal } from '@jupyterlab/ui-components';\nimport React from 'react';\n/**\n * A React component to display the path to a source.\n *\n * @param {object} props The component props.\n * @param props.model The model for the sources.\n */\nexport const SourcePathComponent = ({ model, trans }) => {\n    return (React.createElement(UseSignal, { signal: model.currentSourceChanged, initialSender: model }, (model) => {\n        var _a, _b;\n        return (React.createElement(\"span\", { onClick: (event) => {\n                if (event.ctrlKey) {\n                    model === null || model === void 0 ? void 0 : model.open();\n                }\n            }, title: trans.__('Ctrl + click to open in the Main Area'), className: \"jp-DebuggerSources-header-path\" }, (_b = (_a = model === null || model === void 0 ? void 0 : model.currentSource) === null || _a === void 0 ? void 0 : _a.path) !== null && _b !== void 0 ? _b : ''));\n    }));\n};\n//# sourceMappingURL=sourcepath.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { PanelWithToolbar, ReactWidget, ToolbarButton, viewBreakpointIcon } from '@jupyterlab/ui-components';\nimport React from 'react';\nimport { SourcesBody } from './body';\nimport { SourcePathComponent } from './sourcepath';\n/**\n * A Panel that shows a preview of the source code while debugging.\n */\nexport class Sources extends PanelWithToolbar {\n    /**\n     * Instantiate a new Sources preview Panel.\n     *\n     * @param options The Sources instantiation options.\n     */\n    constructor(options) {\n        var _a;\n        super();\n        const { model, service, editorServices } = options;\n        const trans = ((_a = options.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n        this.title.label = trans.__('Source');\n        this.toolbar.addClass('jp-DebuggerSources-header');\n        this.toolbar.node.setAttribute('aria-label', trans.__('Sources preview panel toolbar'));\n        const body = new SourcesBody({\n            service,\n            model,\n            editorServices\n        });\n        this.toolbar.addItem('open', new ToolbarButton({\n            icon: viewBreakpointIcon,\n            onClick: () => model.open(),\n            tooltip: trans.__('Open in the Main Area')\n        }));\n        const sourcePath = ReactWidget.create(React.createElement(SourcePathComponent, { model: model, trans: trans }));\n        this.toolbar.addItem('sourcePath', sourcePath);\n        this.addClass('jp-DebuggerSources-header');\n        this.addWidget(body);\n        this.addClass('jp-DebuggerSources');\n    }\n}\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { UseSignal } from '@jupyterlab/ui-components';\nimport React from 'react';\nimport { Search } from '@jupyter/react-components';\nconst FilterBox = (props) => {\n    const onFilterChange = (e) => {\n        const filter = e.target.value;\n        props.model.filter = filter;\n    };\n    return (React.createElement(Search, { onChange: onFilterChange, placeholder: props.trans.__('Filter the kernel sources'), value: props.model.filter }));\n};\n/**\n * A widget which hosts a input textbox to filter on file names.\n */\nexport const KernelSourcesFilter = (props) => {\n    return (React.createElement(UseSignal, { signal: props.model.filterChanged, initialArgs: props.model.filter }, model => React.createElement(FilterBox, { model: props.model, trans: props.trans })));\n};\n//# sourceMappingURL=filter.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport React from 'react';\nimport { classes, LabIcon, openKernelSourceIcon, ReactWidget } from '@jupyterlab/ui-components';\nimport { showErrorMessage } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { KernelSourcesFilter } from './filter';\nimport { UseSignal } from '@jupyterlab/ui-components';\n/**\n * The class name added to the filterbox node.\n */\nconst FILTERBOX_CLASS = 'jp-DebuggerKernelSource-filterBox';\n/**\n * The class name added to hide the filterbox node.\n */\nconst FILTERBOX_HIDDEN_CLASS = 'jp-DebuggerKernelSource-filterBox-hidden';\n/**\n * The class for each source row.\n */\nconst SOURCE_CLASS = 'jp-DebuggerKernelSource-source';\n/**\n * The body for a Sources Panel.\n */\nexport class KernelSourcesBody extends ReactWidget {\n    /**\n     * Instantiate a new Body for the KernelSourcesBody widget.\n     *\n     * @param options The instantiation options for a KernelSourcesBody.\n     */\n    constructor(options) {\n        var _a;\n        super();\n        this._showFilter = false;\n        this._model = options.model;\n        this._debuggerService = options.service;\n        this._trans = ((_a = options.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n        this.addClass('jp-DebuggerKernelSources-body');\n    }\n    render() {\n        let filterClass = FILTERBOX_CLASS;\n        if (!this._showFilter) {\n            filterClass += ' ' + FILTERBOX_HIDDEN_CLASS;\n        }\n        return (React.createElement(React.Fragment, null,\n            React.createElement(\"div\", { className: filterClass, key: 'filter' },\n                React.createElement(KernelSourcesFilter, { model: this._model, trans: this._trans })),\n            React.createElement(UseSignal, { signal: this._model.changed }, (_, kernelSources) => {\n                const keymap = {};\n                return (kernelSources !== null && kernelSources !== void 0 ? kernelSources : []).map(module => {\n                    var _a;\n                    const name = module.name;\n                    const path = module.path;\n                    const key = name + (keymap[name] = ((_a = keymap[name]) !== null && _a !== void 0 ? _a : 0) + 1).toString();\n                    return (React.createElement(\"div\", { key: key, title: path, className: SOURCE_CLASS, onClick: () => {\n                            this._debuggerService\n                                .getSource({\n                                sourceReference: 0,\n                                path: path\n                            })\n                                .then(source => {\n                                this._model.open(source);\n                            })\n                                .catch(reason => {\n                                void showErrorMessage(this._trans.__('Fail to get source'), this._trans.__(\"Fail to get '%1' source:\\n%2\", path, reason));\n                            });\n                        } },\n                        React.createElement(LabIcon.resolveReact, { icon: openKernelSourceIcon, iconClass: classes('jp-Icon'), tag: null }),\n                        name));\n                });\n            })));\n    }\n    /**\n     * Show or hide the filter box.\n     */\n    toggleFilterbox() {\n        this._showFilter = !this._showFilter;\n        this.update();\n    }\n}\n//# sourceMappingURL=body.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { showErrorMessage } from '@jupyterlab/apputils';\nimport { PanelWithToolbar, refreshIcon, searchIcon, ToolbarButton } from '@jupyterlab/ui-components';\nimport { KernelSourcesBody } from './body';\n/**\n * A Panel that shows a preview of the source code while debugging.\n */\nexport class KernelSources extends PanelWithToolbar {\n    /**\n     * Instantiate a new Sources preview Panel.\n     *\n     * @param options The Sources instantiation options.\n     */\n    constructor(options) {\n        var _a;\n        super();\n        const { model, service } = options;\n        this._model = model;\n        const trans = ((_a = options.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n        this.title.label = trans.__('Kernel Sources');\n        this.toolbar.addClass('jp-DebuggerKernelSources-header');\n        this.toolbar.node.setAttribute('aria-label', trans.__('Kernel sources panel toolbar'));\n        this._body = new KernelSourcesBody({\n            service,\n            model,\n            translator: options.translator\n        });\n        this.toolbar.addItem('open-filter', new ToolbarButton({\n            icon: searchIcon,\n            onClick: async () => {\n                this._body.toggleFilterbox();\n            },\n            tooltip: trans.__('Toggle search filter')\n        }));\n        this.toolbar.addItem('refresh', new ToolbarButton({\n            icon: refreshIcon,\n            onClick: () => {\n                this._model.kernelSources = [];\n                void service.displayModules().catch(reason => {\n                    void showErrorMessage(trans.__('Fail to get kernel sources'), trans.__('Fail to get kernel sources:\\n%2', reason));\n                });\n            },\n            tooltip: trans.__('Refresh kernel sources')\n        }));\n        this.addClass('jp-DebuggerKernelSources-header');\n        this.addWidget(this._body);\n        this.addClass('jp-DebuggerKenelSources');\n    }\n    set filter(filter) {\n        this._model.filter = filter;\n    }\n}\n//# sourceMappingURL=index.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { HTMLSelect, ReactWidget, UseSignal } from '@jupyterlab/ui-components';\nimport React, { useState } from 'react';\n/**\n * A React component to handle scope changes.\n *\n * @param {object} props The component props.\n * @param props.model The variables model.\n * @param props.tree The variables tree widget.\n * @param props.grid The variables grid widget.\n * @param props.trans The translation bundle.\n */\nconst ScopeSwitcherComponent = ({ model, tree, grid, trans }) => {\n    const [value, setValue] = useState('-');\n    const scopes = model.scopes;\n    const onChange = (event) => {\n        const value = event.target.value;\n        setValue(value);\n        tree.scope = value;\n        grid.scope = value;\n    };\n    return (React.createElement(HTMLSelect, { onChange: onChange, value: value, \"aria-label\": trans.__('Scope') }, scopes.map(scope => (React.createElement(\"option\", { key: scope.name, value: scope.name }, trans.__(scope.name))))));\n};\n/**\n * A widget to switch between scopes.\n */\nexport class ScopeSwitcher extends ReactWidget {\n    /**\n     * Instantiate a new scope switcher.\n     *\n     * @param options The instantiation options for a ScopeSwitcher\n     */\n    constructor(options) {\n        super();\n        const { translator, model, tree, grid } = options;\n        this._model = model;\n        this._tree = tree;\n        this._grid = grid;\n        this._trans = (translator || nullTranslator).load('jupyterlab');\n    }\n    /**\n     * Render the scope switcher.\n     */\n    render() {\n        return (React.createElement(UseSignal, { signal: this._model.changed, initialSender: this._model }, () => (React.createElement(ScopeSwitcherComponent, { model: this._model, trans: this._trans, tree: this._tree, grid: this._grid }))));\n    }\n}\n//# sourceMappingURL=scope.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { getTreeItemElement, ReactWidget, searchIcon } from '@jupyterlab/ui-components';\nimport { Button, TreeItem, TreeView } from '@jupyter/react-components';\nimport { ArrayExt } from '@lumino/algorithm';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { convertType } from '.';\nimport { Debugger } from '../../debugger';\n/**\n * The body for tree of variables.\n */\nexport class VariablesBodyTree extends ReactWidget {\n    /**\n     * Instantiate a new Body for the tree of variables.\n     *\n     * @param options The instantiation options for a VariablesBodyTree.\n     */\n    constructor(options) {\n        super();\n        this._scope = '';\n        this._scopes = [];\n        this._filter = new Set();\n        this._commands = options.commands;\n        this._service = options.service;\n        this._translator = options.translator;\n        const model = (this.model = options.model);\n        model.changed.connect(this._updateScopes, this);\n        this.addClass('jp-DebuggerVariables-body');\n    }\n    /**\n     * Render the VariablesBodyTree.\n     */\n    render() {\n        var _a;\n        const scope = (_a = this._scopes.find(scope => scope.name === this._scope)) !== null && _a !== void 0 ? _a : this._scopes[0];\n        const handleSelectVariable = (variable) => {\n            this.model.selectedVariable = variable;\n        };\n        if ((scope === null || scope === void 0 ? void 0 : scope.name) !== 'Globals') {\n            this.addClass('jp-debuggerVariables-local');\n        }\n        else {\n            this.removeClass('jp-debuggerVariables-local');\n        }\n        return scope ? (React.createElement(React.Fragment, null,\n            React.createElement(TreeView, { className: \"jp-TreeView\" },\n                React.createElement(VariablesBranch, { key: scope.name, commands: this._commands, service: this._service, data: scope.variables, filter: this._filter, translator: this._translator, handleSelectVariable: handleSelectVariable })))) : (React.createElement(\"div\", null));\n    }\n    /**\n     * Set the variable filter list.\n     */\n    set filter(filter) {\n        this._filter = filter;\n        this.update();\n    }\n    /**\n     * Set the current scope\n     */\n    set scope(scope) {\n        this._scope = scope;\n        this.update();\n    }\n    /**\n     * Update the scopes and the tree of variables.\n     *\n     * @param model The variables model.\n     */\n    _updateScopes(model) {\n        if (ArrayExt.shallowEqual(this._scopes, model.scopes)) {\n            return;\n        }\n        this._scopes = model.scopes;\n        this.update();\n    }\n}\n/**\n * A React component to display a list of variables.\n *\n * @param {object} props The component props.\n * @param props.data An array of variables.\n * @param props.service The debugger service.\n * @param props.filter Optional variable filter list.\n */\nconst VariablesBranch = (props) => {\n    const { commands, data, service, filter, translator, handleSelectVariable } = props;\n    const [variables, setVariables] = useState(data);\n    useEffect(() => {\n        setVariables(data);\n    }, [data]);\n    return (React.createElement(React.Fragment, null, variables\n        .filter(variable => !(filter || new Set()).has(variable.evaluateName || ''))\n        .map(variable => {\n        const key = `${variable.name}-${variable.evaluateName}-${variable.type}-${variable.value}-${variable.variablesReference}`;\n        return (React.createElement(VariableComponent, { key: key, commands: commands, data: variable, service: service, filter: filter, translator: translator, onSelect: handleSelectVariable }));\n    })));\n};\nfunction _prepareDetail(variable) {\n    if (variable.type === 'float' &&\n        (variable.value == 'inf' || variable.value == '-inf')) {\n        return variable.value;\n    }\n    const detail = convertType(variable);\n    if (variable.type === 'float' && isNaN(detail)) {\n        // silence React warning:\n        // `Received NaN for the `children` attribute. If this is expected, cast the value to a string`\n        return 'NaN';\n    }\n    return detail;\n}\n/**\n * A React component to display one node variable in tree.\n *\n * @param {object} props The component props.\n * @param props.data An array of variables.\n * @param props.service The debugger service.\n * @param props.filter Optional variable filter list.\n */\nconst VariableComponent = (props) => {\n    var _a, _b;\n    const { commands, data, service, filter, translator, onSelect } = props;\n    const [variable] = useState(data);\n    const [showDetailsButton, setShowDetailsButton] = useState(false);\n    const [expanded, setExpanded] = useState(false);\n    const [variables, setVariables] = useState(null);\n    const trans = useMemo(() => (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab'), [translator]);\n    const onSelection = onSelect !== null && onSelect !== void 0 ? onSelect : (() => void 0);\n    const expandable = useMemo(() => variable.variablesReference !== 0 || variable.type === 'function', [variable.variablesReference, variable.type]);\n    const details = useMemo(() => _prepareDetail(variable), [variable]);\n    const hasMimeRenderer = useMemo(() => ![\n        'special variables',\n        'protected variables',\n        'function variables',\n        'class variables'\n    ].includes(variable.name), [variable.name]);\n    const disableMimeRenderer = useMemo(() => {\n        var _a;\n        return !service.model.hasRichVariableRendering ||\n            !commands.isEnabled(Debugger.CommandIDs.renderMimeVariable, {\n                name: variable.name,\n                frameID: (_a = service.model.callstack.frame) === null || _a === void 0 ? void 0 : _a.id\n            });\n    }, [\n        service.model.hasRichVariableRendering,\n        variable.name,\n        (_a = service.model.callstack.frame) === null || _a === void 0 ? void 0 : _a.id\n    ]);\n    const fetchChildren = useCallback(async () => {\n        if (expandable && !variables) {\n            setVariables(await service.inspectVariable(variable.variablesReference));\n        }\n    }, [expandable, service, variable.variablesReference, variables]);\n    const onVariableClicked = useCallback(async (event) => {\n        const item = getTreeItemElement(event.target);\n        if (event.currentTarget !== item) {\n            return;\n        }\n        if (!expandable) {\n            return;\n        }\n        setExpanded(!expanded);\n    }, [expandable, expanded]);\n    const onSelectChange = useCallback((event) => {\n        if (event.currentTarget === event.detail && event.detail.selected) {\n            onSelection(variable);\n        }\n    }, [variable]);\n    const renderVariable = useCallback(() => {\n        var _a;\n        commands\n            .execute(Debugger.CommandIDs.renderMimeVariable, {\n            name: variable.name,\n            frameID: (_a = service.model.callstack.frame) === null || _a === void 0 ? void 0 : _a.id\n        })\n            .catch(reason => {\n            console.error(`Failed to render variable ${variable === null || variable === void 0 ? void 0 : variable.name}`, reason);\n        });\n    }, [commands, variable.name, (_b = service.model.callstack.frame) === null || _b === void 0 ? void 0 : _b.id]);\n    const onContextMenu = useCallback((event) => {\n        const item = getTreeItemElement(event.target);\n        if (event.currentTarget !== item) {\n            return;\n        }\n        onSelection(variable);\n    }, [variable]);\n    return (React.createElement(TreeItem, { className: \"jp-TreeItem nested\", expanded: expanded, onSelect: onSelectChange, onExpand: fetchChildren, onClick: (e) => onVariableClicked(e), onContextMenu: onContextMenu, onKeyDown: event => {\n            if (event.key == 'Enter') {\n                if (hasMimeRenderer && showDetailsButton) {\n                    onSelection(variable);\n                    renderVariable();\n                }\n            }\n        }, onFocus: event => {\n            setShowDetailsButton(!event.defaultPrevented);\n            event.preventDefault();\n        }, onBlur: event => {\n            setShowDetailsButton(false);\n        }, onMouseOver: (event) => {\n            setShowDetailsButton(!event.defaultPrevented);\n            event.preventDefault();\n        }, onMouseLeave: (event) => {\n            setShowDetailsButton(false);\n        } },\n        React.createElement(\"span\", { className: \"jp-DebuggerVariables-name\" }, variable.name),\n        details && (React.createElement(\"span\", { className: \"jp-DebuggerVariables-detail\" }, details)),\n        hasMimeRenderer && showDetailsButton && (React.createElement(Button, { className: \"jp-DebuggerVariables-renderVariable\", appearance: \"stealth\", slot: \"end\", disabled: disableMimeRenderer, onClick: e => {\n                e.stopPropagation();\n                renderVariable();\n            }, title: trans.__('Render variable: %1', variable === null || variable === void 0 ? void 0 : variable.name) },\n            React.createElement(searchIcon.react, { tag: null }))),\n        variables ? (React.createElement(VariablesBranch, { key: variable.name, commands: commands, data: variables, service: service, filter: filter, translator: translator, handleSelectVariable: onSelect })) : (\n        /* Trick to ensure collapse button is displayed\n           when variables are not loaded yet */\n        expandable && React.createElement(TreeItem, null))));\n};\n//# sourceMappingURL=tree.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { PanelWithToolbar, tableRowsIcon, ToolbarButton, treeViewIcon } from '@jupyterlab/ui-components';\nimport { VariablesBodyGrid } from './grid';\nimport { ScopeSwitcher } from './scope';\nimport { VariablesBodyTree } from './tree';\n/**\n * A Panel to show a variable explorer.\n */\nexport class Variables extends PanelWithToolbar {\n    /**\n     * Instantiate a new Variables Panel.\n     *\n     * @param options The instantiation options for a Variables Panel.\n     */\n    constructor(options) {\n        super(options);\n        const { model, service, commands, themeManager } = options;\n        const translator = options.translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        this.title.label = trans.__('Variables');\n        this.toolbar.addClass('jp-DebuggerVariables-toolbar');\n        this.toolbar.node.setAttribute('aria-label', trans.__('Variables toolbar'));\n        this._tree = new VariablesBodyTree({\n            model,\n            service,\n            commands,\n            translator\n        });\n        this._table = new VariablesBodyGrid({\n            model,\n            commands,\n            themeManager,\n            translator\n        });\n        this._table.hide();\n        this.toolbar.addItem('scope-switcher', new ScopeSwitcher({\n            translator,\n            model,\n            tree: this._tree,\n            grid: this._table\n        }));\n        const onViewChange = () => {\n            if (this._table.isHidden) {\n                this._tree.hide();\n                this._table.show();\n                this.node.setAttribute('data-jp-table', 'true');\n                markViewButtonSelection('table');\n            }\n            else {\n                this._tree.show();\n                this._table.hide();\n                this.node.removeAttribute('data-jp-table');\n                markViewButtonSelection('tree');\n            }\n            this.update();\n        };\n        const treeViewButton = new ToolbarButton({\n            icon: treeViewIcon,\n            className: 'jp-TreeView-Button',\n            onClick: onViewChange,\n            tooltip: trans.__('Tree View')\n        });\n        const tableViewButton = new ToolbarButton({\n            icon: tableRowsIcon,\n            className: 'jp-TableView-Button',\n            onClick: onViewChange,\n            tooltip: trans.__('Table View')\n        });\n        const markViewButtonSelection = (selectedView) => {\n            tableViewButton.pressed = selectedView !== 'tree';\n            treeViewButton.pressed = !tableViewButton.pressed;\n        };\n        markViewButtonSelection(this._table.isHidden ? 'tree' : 'table');\n        this.toolbar.addItem('view-VariableTreeView', treeViewButton);\n        this.toolbar.addItem('view-VariableTableView', tableViewButton);\n        this.addWidget(this._tree);\n        this.addWidget(this._table);\n        this.addClass('jp-DebuggerVariables');\n    }\n    /**\n     * Set the variable filter for both the tree and table views.\n     */\n    set filter(filter) {\n        this._tree.filter = filter;\n        this._table.filter = filter;\n    }\n    /**\n     * A message handler invoked on a `'resize'` message.\n     *\n     * @param msg The Lumino message to process.\n     */\n    onResize(msg) {\n        super.onResize(msg);\n        this._resizeBody(msg);\n    }\n    /**\n     * Resize the body.\n     *\n     * @param msg The resize message.\n     */\n    _resizeBody(msg) {\n        const height = msg.height - this.toolbar.node.offsetHeight;\n        this._tree.node.style.height = `${height}px`;\n    }\n}\n/**\n * Convert a variable to a primitive type.\n *\n * @param variable The variable.\n */\nexport const convertType = (variable) => {\n    var _a, _b;\n    const { type, value } = variable;\n    switch (type) {\n        case 'int':\n            return parseInt(value, 10);\n        case 'float':\n            return parseFloat(value);\n        case 'bool':\n            return value;\n        case 'str':\n            if ((_b = (_a = variable.presentationHint) === null || _a === void 0 ? void 0 : _a.attributes) === null || _b === void 0 ? void 0 : _b.includes('rawString')) {\n                return value.slice(1, value.length - 1);\n            }\n            else {\n                return value;\n            }\n        default:\n            return type !== null && type !== void 0 ? type : value;\n    }\n};\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { bugIcon, SidePanel } from '@jupyterlab/ui-components';\nimport { Widget } from '@lumino/widgets';\nimport { Breakpoints as BreakpointsPanel } from './panels/breakpoints';\nimport { Callstack as CallstackPanel } from './panels/callstack';\nimport { Sources as SourcesPanel } from './panels/sources';\nimport { KernelSources as KernelSourcesPanel } from './panels/kernelSources';\nimport { Variables as VariablesPanel } from './panels/variables';\n/**\n * A debugger sidebar.\n */\nexport class DebuggerSidebar extends SidePanel {\n    /**\n     * Instantiate a new Debugger.Sidebar\n     *\n     * @param options The instantiation options for a Debugger.Sidebar\n     */\n    constructor(options) {\n        const translator = options.translator || nullTranslator;\n        super({ translator });\n        this.id = 'jp-debugger-sidebar';\n        this.title.icon = bugIcon;\n        this.addClass('jp-DebuggerSidebar');\n        const { callstackCommands, breakpointsCommands, editorServices, service, themeManager } = options;\n        const model = service.model;\n        this.variables = new VariablesPanel({\n            model: model.variables,\n            commands: callstackCommands.registry,\n            service,\n            themeManager,\n            translator\n        });\n        this.callstack = new CallstackPanel({\n            commands: callstackCommands,\n            model: model.callstack,\n            translator\n        });\n        this.breakpoints = new BreakpointsPanel({\n            service,\n            commands: breakpointsCommands,\n            model: model.breakpoints,\n            translator\n        });\n        this.sources = new SourcesPanel({\n            model: model.sources,\n            service,\n            editorServices,\n            translator\n        });\n        this.kernelSources = new KernelSourcesPanel({\n            model: model.kernelSources,\n            service,\n            translator\n        });\n        const header = new DebuggerSidebar.Header();\n        this.header.addWidget(header);\n        model.titleChanged.connect((_, title) => {\n            header.title.label = title;\n        });\n        this.content.addClass('jp-DebuggerSidebar-body');\n        this.addWidget(this.variables);\n        this.addWidget(this.callstack);\n        this.addWidget(this.breakpoints);\n        this.addWidget(this.sources);\n        this.addWidget(this.kernelSources);\n    }\n}\n/**\n * A namespace for DebuggerSidebar statics\n */\n(function (DebuggerSidebar) {\n    /**\n     * The header for a debugger sidebar.\n     */\n    class Header extends Widget {\n        /**\n         * Instantiate a new sidebar header.\n         */\n        constructor() {\n            super({ node: Private.createHeader() });\n            this.title.changed.connect(_ => {\n                this.node.textContent = this.title.label;\n            });\n        }\n    }\n    DebuggerSidebar.Header = Header;\n})(DebuggerSidebar || (DebuggerSidebar = {}));\n/**\n * A namespace for private module data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Create a sidebar header node.\n     */\n    function createHeader() {\n        const title = document.createElement('h2');\n        title.textContent = '-';\n        title.classList.add('jp-text-truncated');\n        return title;\n    }\n    Private.createHeader = createHeader;\n})(Private || (Private = {}));\n//# sourceMappingURL=sidebar.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { DOMUtils, MainAreaWidget, WidgetTracker } from '@jupyterlab/apputils';\nimport { textEditorIcon } from '@jupyterlab/ui-components';\n/**\n * The source and editor manager for a debugger instance.\n */\nexport class DebuggerSources {\n    /**\n     * Create a new DebuggerSources instance.\n     *\n     * @param options The instantiation options for a DebuggerSources instance.\n     */\n    constructor(options) {\n        var _a, _b, _c;\n        this._config = options.config;\n        this._shell = options.shell;\n        this._notebookTracker = (_a = options.notebookTracker) !== null && _a !== void 0 ? _a : null;\n        this._consoleTracker = (_b = options.consoleTracker) !== null && _b !== void 0 ? _b : null;\n        this._editorTracker = (_c = options.editorTracker) !== null && _c !== void 0 ? _c : null;\n        this._readOnlyEditorTracker = new WidgetTracker({ namespace: '@jupyterlab/debugger' });\n    }\n    /**\n     * Returns an array of editors for a source matching the current debug\n     * session by iterating through all the widgets in each of the supported\n     * debugger types (i.e., consoles, files, notebooks).\n     *\n     * @param params - The editor search parameters.\n     */\n    find(params) {\n        return [\n            ...this._findInConsoles(params),\n            ...this._findInEditors(params),\n            ...this._findInNotebooks(params),\n            ...this._findInReadOnlyEditors(params)\n        ];\n    }\n    /**\n     * Open a read-only editor in the main area.\n     *\n     * @param params The editor open parameters.\n     */\n    open(params) {\n        const { editorWrapper, label, caption } = params;\n        const widget = new MainAreaWidget({\n            content: editorWrapper\n        });\n        widget.id = DOMUtils.createDomID();\n        widget.title.label = label;\n        widget.title.closable = true;\n        widget.title.caption = caption;\n        widget.title.icon = textEditorIcon;\n        this._shell.add(widget, 'main', { type: 'Debugger Sources' });\n        void this._readOnlyEditorTracker.add(widget);\n    }\n    /**\n     * Find relevant editors matching the search params in the notebook tracker.\n     *\n     * @param params - The editor search parameters.\n     */\n    _findInNotebooks(params) {\n        if (!this._notebookTracker) {\n            return [];\n        }\n        const { focus, kernel, path, source } = params;\n        const editors = [];\n        this._notebookTracker.forEach(notebookPanel => {\n            const sessionContext = notebookPanel.sessionContext;\n            if (path !== sessionContext.path) {\n                return;\n            }\n            const notebook = notebookPanel.content;\n            if (focus) {\n                notebook.mode = 'command';\n            }\n            const cells = notebookPanel.content.widgets;\n            cells.forEach((cell, i) => {\n                // check the event is for the correct cell\n                const code = cell.model.sharedModel.getSource();\n                const codeId = this._getCodeId(code, kernel);\n                if (!codeId) {\n                    return;\n                }\n                if (source !== codeId) {\n                    return;\n                }\n                if (focus) {\n                    notebook.activeCellIndex = i;\n                    if (notebook.activeCell) {\n                        notebook\n                            .scrollToItem(notebook.activeCellIndex, 'smart')\n                            .catch(reason => {\n                            // no-op\n                        });\n                    }\n                    this._shell.activateById(notebookPanel.id);\n                }\n                editors.push(Object.freeze({\n                    get: () => cell.editor,\n                    reveal: () => notebook.scrollToItem(i, 'smart'),\n                    src: cell.model.sharedModel\n                }));\n            });\n        });\n        return editors;\n    }\n    /**\n     * Find relevant editors matching the search params in the console tracker.\n     *\n     * @param params - The editor search parameters.\n     */\n    _findInConsoles(params) {\n        if (!this._consoleTracker) {\n            return [];\n        }\n        const { focus, kernel, path, source } = params;\n        const editors = [];\n        this._consoleTracker.forEach(consoleWidget => {\n            const sessionContext = consoleWidget.sessionContext;\n            if (path !== sessionContext.path) {\n                return;\n            }\n            const cells = consoleWidget.console.cells;\n            for (const cell of cells) {\n                const code = cell.model.sharedModel.getSource();\n                const codeId = this._getCodeId(code, kernel);\n                if (!codeId) {\n                    break;\n                }\n                if (source !== codeId) {\n                    break;\n                }\n                editors.push(Object.freeze({\n                    get: () => cell.editor,\n                    reveal: () => Promise.resolve(this._shell.activateById(consoleWidget.id)),\n                    src: cell.model.sharedModel\n                }));\n                if (focus) {\n                    this._shell.activateById(consoleWidget.id);\n                }\n            }\n        });\n        return editors;\n    }\n    /**\n     * Find relevant editors matching the search params in the editor tracker.\n     *\n     * @param params - The editor search parameters.\n     */\n    _findInEditors(params) {\n        if (!this._editorTracker) {\n            return [];\n        }\n        const { focus, kernel, path, source } = params;\n        const editors = [];\n        this._editorTracker.forEach(doc => {\n            const fileEditor = doc.content;\n            if (path !== fileEditor.context.path) {\n                return;\n            }\n            const editor = fileEditor.editor;\n            if (!editor) {\n                return;\n            }\n            const code = editor.model.sharedModel.getSource();\n            const codeId = this._getCodeId(code, kernel);\n            if (!codeId) {\n                return;\n            }\n            if (source !== codeId) {\n                return;\n            }\n            editors.push(Object.freeze({\n                get: () => editor,\n                reveal: () => Promise.resolve(this._shell.activateById(doc.id)),\n                src: fileEditor.model.sharedModel\n            }));\n            if (focus) {\n                this._shell.activateById(doc.id);\n            }\n        });\n        return editors;\n    }\n    /**\n     * Find relevant editors matching the search params in the read-only tracker.\n     *\n     * @param params - The editor search parameters.\n     */\n    _findInReadOnlyEditors(params) {\n        const { focus, kernel, source } = params;\n        const editors = [];\n        this._readOnlyEditorTracker.forEach(widget => {\n            var _a;\n            const editor = (_a = widget.content) === null || _a === void 0 ? void 0 : _a.editor;\n            if (!editor) {\n                return;\n            }\n            const code = editor.model.sharedModel.getSource();\n            const codeId = this._getCodeId(code, kernel);\n            if (!codeId) {\n                return;\n            }\n            if (widget.title.caption !== source && source !== codeId) {\n                return;\n            }\n            editors.push(Object.freeze({\n                get: () => editor,\n                reveal: () => Promise.resolve(this._shell.activateById(widget.id)),\n                src: editor.model.sharedModel\n            }));\n            if (focus) {\n                this._shell.activateById(widget.id);\n            }\n        });\n        return editors;\n    }\n    /**\n     * Get the code id for a given source and kernel,\n     * and handle the case of a kernel without parameters.\n     *\n     * @param code The source code.\n     * @param kernel The name of the kernel.\n     */\n    _getCodeId(code, kernel) {\n        try {\n            return this._config.getCodeId(code, kernel);\n        }\n        catch (_a) {\n            return '';\n        }\n    }\n}\n//# sourceMappingURL=sources.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { closeAllIcon as closeAll, codeIcon, pauseIcon as pause, runIcon, stepIntoIcon as stepInto, stepOutIcon as stepOut, stepOverIcon as stepOver, stopIcon, variableIcon as variable, viewBreakpointIcon as viewBreakpoint } from '@jupyterlab/ui-components';\nimport { DebuggerConfig } from './config';\nimport { DebuggerEvaluateDialog } from './dialogs/evaluate';\nimport { ReadOnlyEditorFactory as EditorFactory } from './factory';\nimport { DebuggerHandler } from './handler';\nimport { EditorHandler as DebuggerEditorHandler } from './handlers/editor';\nimport { DebuggerModel } from './model';\nimport { VariablesBodyGrid } from './panels/variables/grid';\nimport { VariableMimeRenderer } from './panels/variables/mimerenderer';\nimport { DebuggerService } from './service';\nimport { DebuggerSession } from './session';\nimport { DebuggerSidebar } from './sidebar';\nimport { DebuggerSources } from './sources';\n/**\n * A namespace for `Debugger` statics.\n */\nexport var Debugger;\n(function (Debugger) {\n    /**\n     * Debugger configuration for all kernels.\n     */\n    class Config extends DebuggerConfig {\n    }\n    Debugger.Config = Config;\n    /**\n     * A handler for a CodeEditor.IEditor.\n     */\n    class EditorHandler extends DebuggerEditorHandler {\n    }\n    Debugger.EditorHandler = EditorHandler;\n    /**\n     * A handler for debugging a widget.\n     */\n    class Handler extends DebuggerHandler {\n    }\n    Debugger.Handler = Handler;\n    /**\n     * A model for a debugger.\n     */\n    class Model extends DebuggerModel {\n    }\n    Debugger.Model = Model;\n    /**\n     * A widget factory for read only editors.\n     */\n    class ReadOnlyEditorFactory extends EditorFactory {\n    }\n    Debugger.ReadOnlyEditorFactory = ReadOnlyEditorFactory;\n    /**\n     * The main IDebugger implementation.\n     */\n    class Service extends DebuggerService {\n    }\n    Debugger.Service = Service;\n    /**\n     * A concrete implementation of IDebugger.ISession.\n     */\n    class Session extends DebuggerSession {\n    }\n    Debugger.Session = Session;\n    /**\n     * The debugger sidebar UI.\n     */\n    class Sidebar extends DebuggerSidebar {\n    }\n    Debugger.Sidebar = Sidebar;\n    /**\n     * The source and editor manager for a debugger instance.\n     */\n    class Sources extends DebuggerSources {\n    }\n    Debugger.Sources = Sources;\n    /**\n     * A data grid that displays variables in a debugger session.\n     */\n    class VariablesGrid extends VariablesBodyGrid {\n    }\n    Debugger.VariablesGrid = VariablesGrid;\n    /**\n     * A widget to display data according to its mime type\n     */\n    class VariableRenderer extends VariableMimeRenderer {\n    }\n    Debugger.VariableRenderer = VariableRenderer;\n    /**\n     * The command IDs used by the debugger plugin.\n     */\n    let CommandIDs;\n    (function (CommandIDs) {\n        CommandIDs.debugContinue = 'debugger:continue';\n        CommandIDs.terminate = 'debugger:terminate';\n        CommandIDs.next = 'debugger:next';\n        CommandIDs.showPanel = 'debugger:show-panel';\n        CommandIDs.stepIn = 'debugger:stepIn';\n        CommandIDs.stepOut = 'debugger:stepOut';\n        CommandIDs.inspectVariable = 'debugger:inspect-variable';\n        CommandIDs.renderMimeVariable = 'debugger:render-mime-variable';\n        CommandIDs.evaluate = 'debugger:evaluate';\n        CommandIDs.restartDebug = 'debugger:restart-debug';\n        CommandIDs.pauseOnExceptions = 'debugger:pause-on-exceptions';\n        CommandIDs.copyToClipboard = 'debugger:copy-to-clipboard';\n        CommandIDs.copyToGlobals = 'debugger:copy-to-globals';\n        CommandIDs.openSource = 'debugger:open-source';\n    })(CommandIDs = Debugger.CommandIDs || (Debugger.CommandIDs = {}));\n    /**\n     * The debugger user interface icons.\n     */\n    let Icons;\n    (function (Icons) {\n        Icons.closeAllIcon = closeAll;\n        Icons.evaluateIcon = codeIcon;\n        Icons.continueIcon = runIcon;\n        Icons.pauseIcon = pause;\n        Icons.stepIntoIcon = stepInto;\n        Icons.stepOutIcon = stepOut;\n        Icons.stepOverIcon = stepOver;\n        Icons.terminateIcon = stopIcon;\n        Icons.variableIcon = variable;\n        Icons.viewBreakpointIcon = viewBreakpoint;\n        Icons.pauseOnExceptionsIcon = pause;\n    })(Icons = Debugger.Icons || (Debugger.Icons = {}));\n    /**\n     * The debugger dialog helpers.\n     */\n    let Dialogs;\n    (function (Dialogs) {\n        /**\n         * Open a code prompt in a dialog.\n         */\n        Dialogs.getCode = DebuggerEvaluateDialog.getCode;\n    })(Dialogs = Debugger.Dialogs || (Debugger.Dialogs = {}));\n})(Debugger || (Debugger = {}));\n//# sourceMappingURL=debugger.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The visual debugger token.\n */\nexport const IDebugger = new Token('@jupyterlab/debugger:IDebugger', 'A debugger user interface.');\n/**\n * The debugger configuration token.\n */\nexport const IDebuggerConfig = new Token('@jupyterlab/debugger:IDebuggerConfig', 'A service to handle the debugger configuration.');\n/**\n * The debugger sources utility token.\n */\nexport const IDebuggerSources = new Token('@jupyterlab/debugger:IDebuggerSources', 'A service to display sources in debug mode.');\n/**\n * The debugger sidebar token.\n */\nexport const IDebuggerSidebar = new Token('@jupyterlab/debugger:IDebuggerSidebar', 'A service for the debugger sidebar.');\n/**\n * The debugger handler token.\n */\nexport const IDebuggerHandler = new Token('@jupyterlab/debugger:IDebuggerHandler', 'A service for handling notebook debugger.');\n/**\n * The source viewer token.\n */\nexport const IDebuggerSourceViewer = new Token('@jupyterlab/debugger:IDebuggerSourceViewer', 'A debugger source viewer.');\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module debugger\n */\nexport { Debugger } from './debugger';\nexport { IDebugger, IDebuggerConfig, IDebuggerSources, IDebuggerSidebar, IDebuggerHandler, IDebuggerSourceViewer } from './tokens';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { BasicKeyHandler, BasicMouseHandler, BasicSelectionModel, DataGrid, DataModel, TextRenderer } from '@lumino/datagrid';\nimport { Signal } from '@lumino/signaling';\nimport { Panel } from '@lumino/widgets';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { Debugger } from '../../';\n/**\n * A class wrapping the underlying variables datagrid.\n */\nexport class Grid extends Panel {\n    /**\n     * Instantiate a new VariablesGrid.\n     *\n     * @param options The instantiation options for a VariablesGrid.\n     */\n    constructor(options) {\n        super();\n        const { commands, model, themeManager } = options;\n        this.model = model;\n        const dataModel = new GridModel(options.translator);\n        const grid = new DataGrid();\n        const mouseHandler = new Private.MouseHandler();\n        mouseHandler.doubleClicked.connect((_, hit) => commands.execute(Debugger.CommandIDs.inspectVariable, {\n            variableReference: dataModel.getVariableReference(hit.row),\n            name: dataModel.getVariableName(hit.row)\n        }));\n        mouseHandler.selected.connect((_, hit) => {\n            const { row } = hit;\n            this.model.selectedVariable = {\n                name: dataModel.getVariableName(row),\n                value: dataModel.data('body', row, 1),\n                type: dataModel.data('body', row, 2),\n                variablesReference: dataModel.getVariableReference(row)\n            };\n        });\n        grid.dataModel = dataModel;\n        grid.keyHandler = new BasicKeyHandler();\n        grid.mouseHandler = mouseHandler;\n        grid.selectionModel = new BasicSelectionModel({\n            dataModel\n        });\n        grid.stretchLastColumn = true;\n        grid.node.style.height = '100%';\n        this._grid = grid;\n        // Compute the grid's styles based on the current theme.\n        if (themeManager) {\n            themeManager.themeChanged.connect(this._updateStyles, this);\n        }\n        this.addWidget(grid);\n    }\n    /**\n     * Set the variable filter list.\n     *\n     * @param filter The variable filter to apply.\n     */\n    set filter(filter) {\n        this._grid.dataModel.filter = filter;\n        this.update();\n    }\n    /**\n     * Set the scope for the variables data model.\n     *\n     * @param scope The scopes for the variables\n     */\n    set scope(scope) {\n        this._grid.dataModel.scope = scope;\n        this.update();\n    }\n    /**\n     * Get the data model for the data grid.\n     */\n    get dataModel() {\n        return this._grid.dataModel;\n    }\n    /**\n     * Handle `after-attach` messages.\n     *\n     * @param message - The `after-attach` message.\n     */\n    onAfterAttach(message) {\n        super.onAfterAttach(message);\n        this._updateStyles();\n    }\n    /**\n     * Update the computed style for the data grid on theme change.\n     */\n    _updateStyles() {\n        const { style, textRenderer } = Private.computeStyle();\n        this._grid.cellRenderers.update({}, textRenderer);\n        this._grid.style = style;\n    }\n}\n/**\n * A data grid model for variables.\n */\nexport class GridModel extends DataModel {\n    /**\n     * Create grid model\n     * @param translator optional translator\n     */\n    constructor(translator) {\n        super();\n        this._filter = new Set();\n        this._scope = '';\n        this._data = {\n            name: [],\n            type: [],\n            value: [],\n            variablesReference: []\n        };\n        this._trans = (translator || nullTranslator).load('jupyterlab');\n    }\n    /**\n     * The variable filter list.\n     */\n    get filter() {\n        return this._filter;\n    }\n    set filter(filter) {\n        this._filter = filter;\n    }\n    /**\n     * The current scope for the variables.\n     */\n    get scope() {\n        return this._scope;\n    }\n    set scope(scope) {\n        this._scope = scope;\n    }\n    /**\n     * Get the row count for a particular region in the data grid.\n     *\n     * @param region The datagrid region.\n     */\n    rowCount(region) {\n        return region === 'body' ? this._data.name.length : 1;\n    }\n    /**\n     * Get the column count for a particular region in the data grid.\n     *\n     * @param region The datagrid region.\n     */\n    columnCount(region) {\n        return region === 'body' ? 2 : 1;\n    }\n    /**\n     * Get the data count for a particular region, row and column in the data grid.\n     *\n     * @param region The datagrid region.\n     * @param row The datagrid row\n     * @param column The datagrid column\n     */\n    data(region, row, column) {\n        if (region === 'row-header') {\n            return this._data.name[row];\n        }\n        if (region === 'column-header') {\n            return column === 1 ? this._trans.__('Value') : this._trans.__('Type');\n        }\n        if (region === 'corner-header') {\n            return this._trans.__('Name');\n        }\n        return column === 1 ? this._data.value[row] : this._data.type[row];\n    }\n    /**\n     * Get the variable reference for a given row\n     *\n     * @param row The row in the datagrid.\n     */\n    getVariableReference(row) {\n        return this._data.variablesReference[row];\n    }\n    /**\n     * Get the variable name for a given row\n     *\n     * @param row The row in the datagrid.\n     */\n    getVariableName(row) {\n        return this._data.name[row];\n    }\n    /**\n     * Set the datagrid model data from the list of variables.\n     *\n     * @param scopes The list of variables.\n     */\n    setData(scopes) {\n        var _a, _b;\n        this._clearData();\n        this.emitChanged({\n            type: 'model-reset'\n        });\n        const scope = (_a = scopes.find(scope => scope.name === this._scope)) !== null && _a !== void 0 ? _a : scopes[0];\n        const variables = (_b = scope === null || scope === void 0 ? void 0 : scope.variables) !== null && _b !== void 0 ? _b : [];\n        const filtered = variables.filter(variable => variable.name && !this._filter.has(variable.name));\n        filtered.forEach((variable, index) => {\n            var _a;\n            this._data.name[index] = variable.name;\n            this._data.type[index] = (_a = variable.type) !== null && _a !== void 0 ? _a : '';\n            this._data.value[index] = variable.value;\n            this._data.variablesReference[index] = variable.variablesReference;\n        });\n        this.emitChanged({\n            type: 'rows-inserted',\n            region: 'body',\n            index: 1,\n            span: filtered.length\n        });\n    }\n    /**\n     * Clear all the data in the datagrid.\n     */\n    _clearData() {\n        this._data = {\n            name: [],\n            type: [],\n            value: [],\n            variablesReference: []\n        };\n    }\n}\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Create a color palette element.\n     */\n    function createPalette() {\n        const div = document.createElement('div');\n        div.className = 'jp-DebuggerVariables-colorPalette';\n        div.innerHTML = `\n        <div class=\"jp-mod-void\"></div>\n        <div class=\"jp-mod-background\"></div>\n        <div class=\"jp-mod-header-background\"></div>\n        <div class=\"jp-mod-grid-line\"></div>\n        <div class=\"jp-mod-header-grid-line\"></div>\n        <div class=\"jp-mod-selection\"></div>\n        <div class=\"jp-mod-text\"></div>\n      `;\n        return div;\n    }\n    /**\n     * Compute the style and renderer for a data grid.\n     */\n    function computeStyle() {\n        const palette = createPalette();\n        document.body.appendChild(palette);\n        let node;\n        node = palette.querySelector('.jp-mod-void');\n        const voidColor = getComputedStyle(node).color;\n        node = palette.querySelector('.jp-mod-background');\n        const backgroundColor = getComputedStyle(node).color;\n        node = palette.querySelector('.jp-mod-header-background');\n        const headerBackgroundColor = getComputedStyle(node).color;\n        node = palette.querySelector('.jp-mod-grid-line');\n        const gridLineColor = getComputedStyle(node).color;\n        node = palette.querySelector('.jp-mod-header-grid-line');\n        const headerGridLineColor = getComputedStyle(node).color;\n        node = palette.querySelector('.jp-mod-selection');\n        const selectionFillColor = getComputedStyle(node).color;\n        node = palette.querySelector('.jp-mod-text');\n        const textColor = getComputedStyle(node).color;\n        document.body.removeChild(palette);\n        return {\n            style: {\n                voidColor,\n                backgroundColor,\n                headerBackgroundColor,\n                gridLineColor,\n                headerGridLineColor,\n                rowBackgroundColor: (i) => i % 2 === 0 ? voidColor : backgroundColor,\n                selectionFillColor\n            },\n            textRenderer: new TextRenderer({\n                font: '12px sans-serif',\n                textColor,\n                backgroundColor: '',\n                verticalAlignment: 'center',\n                horizontalAlignment: 'left'\n            })\n        };\n    }\n    Private.computeStyle = computeStyle;\n    /**\n     * A custom click handler to handle clicks on the variables grid.\n     */\n    class MouseHandler extends BasicMouseHandler {\n        constructor() {\n            super(...arguments);\n            this._doubleClicked = new Signal(this);\n            this._selected = new Signal(this);\n        }\n        /**\n         * A signal emitted when the variables grid is double clicked.\n         */\n        get doubleClicked() {\n            return this._doubleClicked;\n        }\n        /**\n         * A signal emitted when the variables grid received mouse down or context menu event.\n         */\n        get selected() {\n            return this._selected;\n        }\n        /**\n         * Dispose of the resources held by the mouse handler.\n         */\n        dispose() {\n            if (this.isDisposed) {\n                return;\n            }\n            Signal.disconnectSender(this);\n            super.dispose();\n        }\n        /**\n         * Handle a mouse double-click event.\n         *\n         * @param grid The datagrid clicked.\n         * @param event The mouse event.\n         */\n        onMouseDoubleClick(grid, event) {\n            const hit = grid.hitTest(event.clientX, event.clientY);\n            this._doubleClicked.emit(hit);\n        }\n        /**\n         * Handle the mouse down event for the data grid.\n         *\n         * @param grid - The data grid of interest.\n         *\n         * @param event - The mouse down event of interest.\n         */\n        onMouseDown(grid, event) {\n            // Unpack the event.\n            let { clientX, clientY } = event;\n            // Hit test the grid.\n            let hit = grid.hitTest(clientX, clientY);\n            this._selected.emit(hit);\n            // Propagate event to Lumino DataGrid BasicMouseHandler.\n            super.onMouseDown(grid, event);\n        }\n        /**\n         * Handle the context menu event for the data grid.\n         *\n         * @param grid - The data grid of interest.\n         *\n         * @param event - The context menu event of interest.\n         */\n        onContextMenu(grid, event) {\n            // Unpack the event.\n            let { clientX, clientY } = event;\n            // Hit test the grid.\n            let hit = grid.hitTest(clientX, clientY);\n            this._selected.emit(hit);\n        }\n    }\n    Private.MouseHandler = MouseHandler;\n})(Private || (Private = {}));\n//# sourceMappingURL=gridpanel.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { IRecentsManager, RecentsManager } from '@jupyterlab/docmanager';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { IStateDB } from '@jupyterlab/statedb';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\n/**\n * A namespace for command IDs.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.clearRecents = 'docmanager:clear-recents';\n})(CommandIDs || (CommandIDs = {}));\nvar PluginIDs;\n(function (PluginIDs) {\n    PluginIDs.recentsManager = '@jupyterlab/docmanager-extension:recents';\n    PluginIDs.reopenClosed = '@jupyterlab/docmanager-extension:reopen-recently-closed';\n    PluginIDs.mainPlugin = '@jupyterlab/docmanager-extension:plugin';\n})(PluginIDs || (PluginIDs = {}));\nexport const recentsManagerPlugin = {\n    id: PluginIDs.recentsManager,\n    description: 'Provides a manager of recently opened and closed documents.',\n    autoStart: true,\n    requires: [IStateDB],\n    optional: [ISettingRegistry, ITranslator],\n    provides: IRecentsManager,\n    activate: (app, stateDB, settingRegistry, translator) => {\n        const { serviceManager } = app;\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        // Create the manager\n        const recentsManager = new RecentsManager({\n            stateDB: stateDB,\n            contents: serviceManager.contents\n        });\n        const updateSettings = (settings) => {\n            recentsManager.maximalRecentsLength = settings.get('maxNumberRecents')\n                .composite;\n        };\n        if (settingRegistry) {\n            void Promise.all([\n                app.restored,\n                settingRegistry.load(PluginIDs.mainPlugin)\n            ]).then(([_, settings]) => {\n                settings.changed.connect(updateSettings);\n                updateSettings(settings);\n            });\n        }\n        app.commands.addCommand(CommandIDs.clearRecents, {\n            execute: () => {\n                recentsManager.clearRecents();\n            },\n            isEnabled: () => recentsManager.recentlyOpened.length != 0 ||\n                recentsManager.recentlyClosed.length != 0,\n            label: trans.__('Clear Recent Documents'),\n            caption: trans.__('Clear the list of recently opened items.')\n        });\n        return recentsManager;\n    }\n};\n//# sourceMappingURL=recents.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module docmanager-extension\n */\nimport { ILabShell, ILabStatus, JupyterLab } from '@jupyterlab/application';\nimport { addCommandToolbarButtonClass, CommandToolbarButtonComponent, Dialog, ICommandPalette, InputDialog, ISessionContextDialogs, Notification, ReactWidget, SessionContextDialogs, showDialog, showErrorMessage, UseSignal } from '@jupyterlab/apputils';\nimport { PathExt, Time } from '@jupyterlab/coreutils';\nimport { DocumentManager, IDocumentManager, IDocumentWidgetOpener, IRecentsManager, PathStatus, renameDialog, SavingStatus } from '@jupyterlab/docmanager';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { IStatusBar } from '@jupyterlab/statusbar';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { saveIcon } from '@jupyterlab/ui-components';\nimport { some } from '@lumino/algorithm';\nimport { JSONExt } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\nimport { Widget } from '@lumino/widgets';\nimport * as React from 'react';\nimport { recentsManagerPlugin } from './recents';\n/**\n * The command IDs used by the document manager plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.clone = 'docmanager:clone';\n    CommandIDs.deleteFile = 'docmanager:delete-file';\n    CommandIDs.newUntitled = 'docmanager:new-untitled';\n    CommandIDs.open = 'docmanager:open';\n    CommandIDs.openBrowserTab = 'docmanager:open-browser-tab';\n    CommandIDs.reload = 'docmanager:reload';\n    CommandIDs.rename = 'docmanager:rename';\n    CommandIDs.del = 'docmanager:delete';\n    CommandIDs.duplicate = 'docmanager:duplicate';\n    CommandIDs.restoreCheckpoint = 'docmanager:restore-checkpoint';\n    CommandIDs.save = 'docmanager:save';\n    CommandIDs.saveAll = 'docmanager:save-all';\n    CommandIDs.saveAs = 'docmanager:save-as';\n    CommandIDs.download = 'docmanager:download';\n    CommandIDs.toggleAutosave = 'docmanager:toggle-autosave';\n    CommandIDs.showInFileBrowser = 'docmanager:show-in-file-browser';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The id of the document manager plugin.\n */\nconst docManagerPluginId = '@jupyterlab/docmanager-extension:plugin';\n/**\n * A plugin to open documents in the main area.\n *\n */\nconst openerPlugin = {\n    id: '@jupyterlab/docmanager-extension:opener',\n    description: 'Provides the widget opener.',\n    autoStart: true,\n    provides: IDocumentWidgetOpener,\n    activate: (app) => {\n        const { shell } = app;\n        return new (class {\n            constructor() {\n                this._opened = new Signal(this);\n            }\n            open(widget, options) {\n                if (!widget.id) {\n                    widget.id = `document-manager-${++Private.id}`;\n                }\n                widget.title.dataset = {\n                    type: 'document-title',\n                    ...widget.title.dataset\n                };\n                if (!widget.isAttached) {\n                    shell.add(widget, 'main', options || {});\n                }\n                shell.activateById(widget.id);\n                this._opened.emit(widget);\n            }\n            get opened() {\n                return this._opened;\n            }\n        })();\n    }\n};\n/**\n * A plugin to handle dirty states for open documents.\n */\nconst contextsPlugin = {\n    id: '@jupyterlab/docmanager-extension:contexts',\n    description: 'Adds the handling of opened documents dirty state.',\n    autoStart: true,\n    requires: [IDocumentManager, IDocumentWidgetOpener],\n    optional: [ILabStatus],\n    activate: (app, docManager, widgetOpener, status) => {\n        const contexts = new WeakSet();\n        widgetOpener.opened.connect((_, widget) => {\n            // Handle dirty state for open documents.\n            const context = docManager.contextForWidget(widget);\n            if (context && !contexts.has(context)) {\n                if (status) {\n                    handleContext(status, context);\n                }\n                contexts.add(context);\n            }\n        });\n    }\n};\n/**\n * A plugin providing the default document manager.\n */\nconst manager = {\n    id: '@jupyterlab/docmanager-extension:manager',\n    description: 'Provides the document manager.',\n    provides: IDocumentManager,\n    requires: [IDocumentWidgetOpener],\n    optional: [\n        ITranslator,\n        ILabStatus,\n        ISessionContextDialogs,\n        JupyterLab.IInfo,\n        IRecentsManager\n    ],\n    activate: (app, widgetOpener, translator_, status, sessionDialogs_, info, recentsManager) => {\n        var _a;\n        const { serviceManager: manager, docRegistry: registry } = app;\n        const translator = translator_ !== null && translator_ !== void 0 ? translator_ : nullTranslator;\n        const sessionDialogs = sessionDialogs_ !== null && sessionDialogs_ !== void 0 ? sessionDialogs_ : new SessionContextDialogs({ translator });\n        const when = app.restored.then(() => void 0);\n        const docManager = new DocumentManager({\n            registry,\n            manager,\n            opener: widgetOpener,\n            when,\n            setBusy: (_a = (status && (() => status.setBusy()))) !== null && _a !== void 0 ? _a : undefined,\n            sessionDialogs,\n            translator: translator !== null && translator !== void 0 ? translator : nullTranslator,\n            isConnectedCallback: () => {\n                if (info) {\n                    return info.isConnected;\n                }\n                return true;\n            },\n            recentsManager: recentsManager !== null && recentsManager !== void 0 ? recentsManager : undefined\n        });\n        return docManager;\n    }\n};\n/**\n * The default document manager provider commands and settings.\n */\nconst docManagerPlugin = {\n    id: docManagerPluginId,\n    description: 'Adds commands and settings to the document manager.',\n    autoStart: true,\n    requires: [IDocumentManager, IDocumentWidgetOpener, ISettingRegistry],\n    optional: [ITranslator, ICommandPalette, ILabShell],\n    activate: (app, docManager, widgetOpener, settingRegistry, translator, palette, labShell) => {\n        translator = translator !== null && translator !== void 0 ? translator : nullTranslator;\n        const trans = translator.load('jupyterlab');\n        const registry = app.docRegistry;\n        // Register the file operations commands.\n        addCommands(app, docManager, widgetOpener, settingRegistry, translator, labShell, palette);\n        // Keep up to date with the settings registry.\n        const onSettingsUpdated = (settings) => {\n            // Handle whether to autosave\n            const autosave = settings.get('autosave').composite;\n            docManager.autosave =\n                autosave === true || autosave === false ? autosave : true;\n            app.commands.notifyCommandChanged(CommandIDs.toggleAutosave);\n            const confirmClosingDocument = settings.get('confirmClosingDocument')\n                .composite;\n            docManager.confirmClosingDocument = confirmClosingDocument !== null && confirmClosingDocument !== void 0 ? confirmClosingDocument : true;\n            // Handle autosave interval\n            const autosaveInterval = settings.get('autosaveInterval').composite;\n            docManager.autosaveInterval = autosaveInterval || 120;\n            // Handle last modified timestamp check margin\n            const lastModifiedCheckMargin = settings.get('lastModifiedCheckMargin')\n                .composite;\n            docManager.lastModifiedCheckMargin = lastModifiedCheckMargin || 500;\n            const renameUntitledFile = settings.get('renameUntitledFileOnSave')\n                .composite;\n            docManager.renameUntitledFileOnSave = renameUntitledFile !== null && renameUntitledFile !== void 0 ? renameUntitledFile : true;\n            // Handle default widget factory overrides.\n            const defaultViewers = settings.get('defaultViewers').composite;\n            const overrides = {};\n            // Filter the defaultViewers and file types for existing ones.\n            Object.keys(defaultViewers).forEach(ft => {\n                if (!registry.getFileType(ft)) {\n                    console.warn(`File Type ${ft} not found`);\n                    return;\n                }\n                if (!registry.getWidgetFactory(defaultViewers[ft])) {\n                    console.warn(`Document viewer ${defaultViewers[ft]} not found`);\n                }\n                overrides[ft] = defaultViewers[ft];\n            });\n            // Set the default factory overrides. If not provided, this has the\n            // effect of unsetting any previous overrides.\n            for (const ft of registry.fileTypes()) {\n                try {\n                    registry.setDefaultWidgetFactory(ft.name, overrides[ft.name]);\n                }\n                catch (_a) {\n                    console.warn(`Failed to set default viewer ${overrides[ft.name]} for file type ${ft.name}`);\n                }\n            }\n        };\n        // Fetch the initial state of the settings.\n        Promise.all([settingRegistry.load(docManagerPluginId), app.restored])\n            .then(([settings]) => {\n            settings.changed.connect(onSettingsUpdated);\n            onSettingsUpdated(settings);\n            const onStateChanged = (sender, change) => {\n                if ([\n                    'autosave',\n                    'autosaveInterval',\n                    'confirmClosingDocument',\n                    'lastModifiedCheckMargin',\n                    'renameUntitledFileOnSave'\n                ].includes(change.name) &&\n                    settings.get(change.name).composite !== change.newValue) {\n                    settings.set(change.name, change.newValue).catch(reason => {\n                        console.error(`Failed to set the setting '${change.name}':\\n${reason}`);\n                    });\n                }\n            };\n            docManager.stateChanged.connect(onStateChanged);\n        })\n            .catch((reason) => {\n            console.error(reason.message);\n        });\n        // Register a fetch transformer for the settings registry,\n        // allowing us to dynamically populate a help string with the\n        // available document viewers and file types for the default\n        // viewer overrides.\n        settingRegistry.transform(docManagerPluginId, {\n            fetch: plugin => {\n                // Get the available file types.\n                const fileTypes = Array.from(registry.fileTypes())\n                    .map(ft => ft.name)\n                    .join('    \\n');\n                // Get the available widget factories.\n                const factories = Array.from(registry.widgetFactories())\n                    .map(f => f.name)\n                    .join('    \\n');\n                // Generate the help string.\n                const description = trans.__(`Overrides for the default viewers for file types.\nSpecify a mapping from file type name to document viewer name, for example:\n\ndefaultViewers: {\n  markdown: \"Markdown Preview\"\n}\n\nIf you specify non-existent file types or viewers, or if a viewer cannot\nopen a given file type, the override will not function.\n\nAvailable viewers:\n%1\n\nAvailable file types:\n%2`, factories, fileTypes);\n                const schema = JSONExt.deepCopy(plugin.schema);\n                schema.properties.defaultViewers.description = description;\n                return { ...plugin, schema };\n            }\n        });\n        // If the document registry gains or loses a factory or file type,\n        // regenerate the settings description with the available options.\n        registry.changed.connect(() => settingRegistry.load(docManagerPluginId, true));\n    }\n};\n/**\n * A plugin for adding a saving status item to the status bar.\n */\nexport const savingStatusPlugin = {\n    id: '@jupyterlab/docmanager-extension:saving-status',\n    description: 'Adds a saving status indicator.',\n    autoStart: true,\n    requires: [IDocumentManager, ILabShell],\n    optional: [ITranslator, IStatusBar],\n    activate: (_, docManager, labShell, translator, statusBar) => {\n        if (!statusBar) {\n            // Automatically disable if statusbar missing\n            return;\n        }\n        const saving = new SavingStatus({\n            docManager,\n            translator: translator !== null && translator !== void 0 ? translator : nullTranslator\n        });\n        // Keep the currently active widget synchronized.\n        saving.model.widget = labShell.currentWidget;\n        labShell.currentChanged.connect(() => {\n            saving.model.widget = labShell.currentWidget;\n        });\n        statusBar.registerStatusItem(savingStatusPlugin.id, {\n            item: saving,\n            align: 'middle',\n            isActive: () => saving.model !== null && saving.model.status !== null,\n            activeStateChanged: saving.model.stateChanged\n        });\n    }\n};\n/**\n * A plugin providing a file path widget to the status bar.\n */\nexport const pathStatusPlugin = {\n    id: '@jupyterlab/docmanager-extension:path-status',\n    description: 'Adds a file path indicator in the status bar.',\n    autoStart: true,\n    requires: [IDocumentManager, ILabShell],\n    optional: [IStatusBar],\n    activate: (_, docManager, labShell, statusBar) => {\n        if (!statusBar) {\n            // Automatically disable if statusbar missing\n            return;\n        }\n        const path = new PathStatus({ docManager });\n        // Keep the file path widget up-to-date with the application active widget.\n        path.model.widget = labShell.currentWidget;\n        labShell.currentChanged.connect(() => {\n            path.model.widget = labShell.currentWidget;\n        });\n        statusBar.registerStatusItem(pathStatusPlugin.id, {\n            item: path,\n            align: 'right',\n            rank: 0\n        });\n    }\n};\n/**\n * A plugin providing download commands in the file menu and command palette.\n */\nexport const downloadPlugin = {\n    id: '@jupyterlab/docmanager-extension:download',\n    description: 'Adds command to download files.',\n    autoStart: true,\n    requires: [IDocumentManager],\n    optional: [ITranslator, ICommandPalette],\n    activate: (app, docManager, translator, palette) => {\n        var _a;\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        const { commands, shell } = app;\n        const isEnabled = () => {\n            const { currentWidget } = shell;\n            return !!(currentWidget && docManager.contextForWidget(currentWidget));\n        };\n        commands.addCommand(CommandIDs.download, {\n            label: trans.__('Download'),\n            caption: trans.__('Download the file to your computer'),\n            isEnabled,\n            execute: () => {\n                // Checks that shell.currentWidget is valid:\n                if (isEnabled()) {\n                    const context = docManager.contextForWidget(shell.currentWidget);\n                    if (!context) {\n                        return showDialog({\n                            title: trans.__('Cannot Download'),\n                            body: trans.__('No context found for current widget!'),\n                            buttons: [Dialog.okButton()]\n                        });\n                    }\n                    return context.download();\n                }\n            }\n        });\n        (_a = app.shell.currentChanged) === null || _a === void 0 ? void 0 : _a.connect(() => {\n            app.commands.notifyCommandChanged(CommandIDs.download);\n        });\n        const category = trans.__('File Operations');\n        if (palette) {\n            palette.addItem({ command: CommandIDs.download, category });\n        }\n    }\n};\n/**\n * A plugin providing open-browser-tab commands.\n *\n * This is its own plugin in case you would like to disable this feature.\n * e.g. jupyter labextension disable @jupyterlab/docmanager-extension:open-browser-tab\n *\n * Note: If disabling this, you may also want to disable:\n * @jupyterlab/filebrowser-extension:open-browser-tab\n */\nexport const openBrowserTabPlugin = {\n    id: '@jupyterlab/docmanager-extension:open-browser-tab',\n    description: 'Adds command to open a browser tab.',\n    autoStart: true,\n    requires: [IDocumentManager],\n    optional: [ITranslator],\n    activate: (app, docManager, translator) => {\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        const { commands } = app;\n        commands.addCommand(CommandIDs.openBrowserTab, {\n            execute: args => {\n                const path = typeof args['path'] === 'undefined' ? '' : args['path'];\n                if (!path) {\n                    return;\n                }\n                return docManager.services.contents.getDownloadUrl(path).then(url => {\n                    const opened = window.open();\n                    if (opened) {\n                        opened.opener = null;\n                        opened.location.href = url;\n                    }\n                    else {\n                        throw new Error('Failed to open new browser tab.');\n                    }\n                });\n            },\n            iconClass: args => args['icon'] || '',\n            label: () => trans.__('Open in New Browser Tab')\n        });\n    }\n};\n/**\n * Export the plugins as default.\n */\nconst plugins = [\n    manager,\n    docManagerPlugin,\n    contextsPlugin,\n    pathStatusPlugin,\n    savingStatusPlugin,\n    downloadPlugin,\n    openBrowserTabPlugin,\n    openerPlugin,\n    recentsManagerPlugin\n];\nexport default plugins;\n/**\n * Toolbar item factory\n */\nexport var ToolbarItems;\n(function (ToolbarItems) {\n    /**\n     * Create save button toolbar item.\n     *\n     */\n    function createSaveButton(commands, fileChanged) {\n        return addCommandToolbarButtonClass(ReactWidget.create(React.createElement(UseSignal, { signal: fileChanged }, () => (React.createElement(CommandToolbarButtonComponent, { commands: commands, id: CommandIDs.save, label: '', args: { toolbar: true } })))));\n    }\n    ToolbarItems.createSaveButton = createSaveButton;\n})(ToolbarItems || (ToolbarItems = {}));\n/* Widget to display the revert to checkpoint confirmation. */\nclass RevertConfirmWidget extends Widget {\n    /**\n     * Construct a new revert confirmation widget.\n     */\n    constructor(checkpoint, trans, fileType = 'notebook') {\n        super({\n            node: Private.createRevertConfirmNode(checkpoint, fileType, trans)\n        });\n    }\n}\n// Returns the file type for a widget.\nfunction fileType(widget, docManager) {\n    if (!widget) {\n        return 'File';\n    }\n    const context = docManager.contextForWidget(widget);\n    if (!context) {\n        return '';\n    }\n    const fts = docManager.registry.getFileTypesForPath(context.path);\n    return fts.length && fts[0].displayName ? fts[0].displayName : 'File';\n}\n/**\n * Add the file operations commands to the application's command registry.\n */\nfunction addCommands(app, docManager, widgetOpener, settingRegistry, translator, labShell, palette) {\n    var _a;\n    const trans = translator.load('jupyterlab');\n    const { commands, shell } = app;\n    const category = trans.__('File Operations');\n    const isEnabled = () => {\n        const { currentWidget } = shell;\n        return !!(currentWidget && docManager.contextForWidget(currentWidget));\n    };\n    const isWritable = () => {\n        var _a;\n        const { currentWidget } = shell;\n        if (!currentWidget) {\n            return false;\n        }\n        const context = docManager.contextForWidget(currentWidget);\n        return !!((_a = context === null || context === void 0 ? void 0 : context.contentsModel) === null || _a === void 0 ? void 0 : _a.writable);\n    };\n    const readonlyNotification = (contextPath) => {\n        return Notification.warning(trans.__(`%1 is read-only. Use \"Save as…\" instead.`, contextPath), { autoClose: 5000 });\n    };\n    // If inside a rich application like JupyterLab, add additional functionality.\n    if (labShell) {\n        addLabCommands(app, docManager, labShell, widgetOpener, translator);\n    }\n    commands.addCommand(CommandIDs.deleteFile, {\n        label: () => `Delete ${fileType(shell.currentWidget, docManager)}`,\n        execute: args => {\n            const path = typeof args['path'] === 'undefined' ? '' : args['path'];\n            if (!path) {\n                const command = CommandIDs.deleteFile;\n                throw new Error(`A non-empty path is required for ${command}.`);\n            }\n            return docManager.deleteFile(path);\n        }\n    });\n    commands.addCommand(CommandIDs.newUntitled, {\n        execute: async (args) => {\n            const errorTitle = args['error'] || trans.__('Error');\n            const path = typeof args['path'] === 'undefined' ? '' : args['path'];\n            const options = {\n                type: args['type'],\n                path\n            };\n            if (args['type'] === 'file') {\n                options.ext = args['ext'] || '.txt';\n            }\n            return docManager.services.contents\n                .newUntitled(options)\n                .catch(error => showErrorMessage(errorTitle, error));\n        },\n        label: args => args['label'] || `New ${args['type']}`\n    });\n    commands.addCommand(CommandIDs.open, {\n        execute: async (args) => {\n            const path = typeof args['path'] === 'undefined' ? '' : args['path'];\n            const factory = args['factory'] || void 0;\n            const kernel = args === null || args === void 0 ? void 0 : args.kernel;\n            const options = args['options'] || void 0;\n            return docManager.services.contents\n                .get(path, { content: false })\n                .then(() => docManager.openOrReveal(path, factory, kernel, options));\n        },\n        iconClass: args => args['icon'] || '',\n        label: args => {\n            var _a;\n            return ((_a = (args['label'] || args['factory'])) !== null && _a !== void 0 ? _a : trans.__('Open the provided `path`.'));\n        },\n        mnemonic: args => args['mnemonic'] || -1\n    });\n    commands.addCommand(CommandIDs.reload, {\n        label: () => trans.__('Reload %1 from Disk', fileType(shell.currentWidget, docManager)),\n        caption: trans.__('Reload contents from disk'),\n        isEnabled,\n        execute: () => {\n            // Checks that shell.currentWidget is valid:\n            if (!isEnabled()) {\n                return;\n            }\n            const context = docManager.contextForWidget(shell.currentWidget);\n            const type = fileType(shell.currentWidget, docManager);\n            if (!context) {\n                return showDialog({\n                    title: trans.__('Cannot Reload'),\n                    body: trans.__('No context found for current widget!'),\n                    buttons: [Dialog.okButton()]\n                });\n            }\n            if (context.model.dirty) {\n                return showDialog({\n                    title: trans.__('Reload %1 from Disk', type),\n                    body: trans.__('Are you sure you want to reload the %1 from the disk?', type),\n                    buttons: [\n                        Dialog.cancelButton(),\n                        Dialog.warnButton({ label: trans.__('Reload') })\n                    ]\n                }).then(result => {\n                    if (result.button.accept && !context.isDisposed) {\n                        return context.revert();\n                    }\n                });\n            }\n            else {\n                if (!context.isDisposed) {\n                    return context.revert();\n                }\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.restoreCheckpoint, {\n        label: () => trans.__('Revert %1 to Checkpoint…', fileType(shell.currentWidget, docManager)),\n        caption: trans.__('Revert contents to previous checkpoint'),\n        isEnabled,\n        execute: () => {\n            // Checks that shell.currentWidget is valid:\n            if (!isEnabled()) {\n                return;\n            }\n            const context = docManager.contextForWidget(shell.currentWidget);\n            if (!context) {\n                return showDialog({\n                    title: trans.__('Cannot Revert'),\n                    body: trans.__('No context found for current widget!'),\n                    buttons: [Dialog.okButton()]\n                });\n            }\n            return context.listCheckpoints().then(async (checkpoints) => {\n                const type = fileType(shell.currentWidget, docManager);\n                if (checkpoints.length < 1) {\n                    await showErrorMessage(trans.__('No checkpoints'), trans.__('No checkpoints are available for this %1.', type));\n                    return;\n                }\n                const targetCheckpoint = checkpoints.length === 1\n                    ? checkpoints[0]\n                    : await Private.getTargetCheckpoint(checkpoints.reverse(), trans);\n                if (!targetCheckpoint) {\n                    return;\n                }\n                return showDialog({\n                    title: trans.__('Revert %1 to checkpoint', type),\n                    body: new RevertConfirmWidget(targetCheckpoint, trans, type),\n                    buttons: [\n                        Dialog.cancelButton(),\n                        Dialog.warnButton({\n                            label: trans.__('Revert'),\n                            ariaLabel: trans.__('Revert to Checkpoint')\n                        })\n                    ]\n                }).then(result => {\n                    if (context.isDisposed) {\n                        return;\n                    }\n                    if (result.button.accept) {\n                        if (context.model.readOnly) {\n                            return context.revert();\n                        }\n                        return context\n                            .restoreCheckpoint(targetCheckpoint.id)\n                            .then(() => context.revert());\n                    }\n                });\n            });\n        }\n    });\n    const caption = () => {\n        if (shell.currentWidget) {\n            const context = docManager.contextForWidget(shell.currentWidget);\n            if (context === null || context === void 0 ? void 0 : context.model.collaborative) {\n                return trans.__('In collaborative mode, the document is saved automatically after every change');\n            }\n            if (!isWritable()) {\n                return trans.__(`Document is read-only. \"Save\" is disabled; use \"Save as…\" instead`);\n            }\n        }\n        return trans.__('Save and create checkpoint');\n    };\n    const saveInProgress = new WeakSet();\n    commands.addCommand(CommandIDs.save, {\n        label: () => trans.__('Save %1', fileType(shell.currentWidget, docManager)),\n        caption,\n        icon: args => (args.toolbar ? saveIcon : undefined),\n        isEnabled: args => {\n            if (args._luminoEvent) {\n                return args._luminoEvent.type ===\n                    'keybinding'\n                    ? true\n                    : isWritable();\n            }\n            else {\n                return isWritable();\n            }\n        },\n        execute: async (args) => {\n            var _a, _b, _c, _d, _e;\n            // Checks that shell.currentWidget is valid:\n            const widget = shell.currentWidget;\n            const context = docManager.contextForWidget(widget);\n            if (isEnabled()) {\n                if (!context) {\n                    return showDialog({\n                        title: trans.__('Cannot Save'),\n                        body: trans.__('No context found for current widget!'),\n                        buttons: [Dialog.okButton()]\n                    });\n                }\n                else {\n                    if (saveInProgress.has(context)) {\n                        return;\n                    }\n                    if (!((_a = context.contentsModel) === null || _a === void 0 ? void 0 : _a.writable)) {\n                        let type = (_b = args._luminoEvent) === null || _b === void 0 ? void 0 : _b.type;\n                        if (args._luminoEvent && type === 'keybinding') {\n                            readonlyNotification(context.path);\n                            return;\n                        }\n                        else {\n                            return showDialog({\n                                title: trans.__('Cannot Save'),\n                                body: trans.__('Document is read-only'),\n                                buttons: [Dialog.okButton()]\n                            });\n                        }\n                    }\n                    saveInProgress.add(context);\n                    const oldName = PathExt.basename((_d = (_c = context.contentsModel) === null || _c === void 0 ? void 0 : _c.path) !== null && _d !== void 0 ? _d : '');\n                    let newName = oldName;\n                    if (docManager.renameUntitledFileOnSave &&\n                        widget.isUntitled === true) {\n                        const result = await InputDialog.getText({\n                            title: trans.__('Rename file'),\n                            okLabel: trans.__('Rename and Save'),\n                            placeholder: trans.__('File name'),\n                            text: oldName,\n                            selectionRange: oldName.length - PathExt.extname(oldName).length,\n                            checkbox: {\n                                label: trans.__('Do not ask for rename on first save.'),\n                                caption: trans.__('If checked, you will not be asked to rename future untitled files when saving them.')\n                            }\n                        });\n                        if (result.button.accept) {\n                            newName = (_e = result.value) !== null && _e !== void 0 ? _e : oldName;\n                            widget.isUntitled = false;\n                            if (typeof result.isChecked === 'boolean') {\n                                const currentSetting = (await settingRegistry.get(docManagerPluginId, 'renameUntitledFileOnSave')).composite;\n                                if (result.isChecked === currentSetting) {\n                                    settingRegistry\n                                        .set(docManagerPluginId, 'renameUntitledFileOnSave', !result.isChecked)\n                                        .catch(reason => {\n                                        console.error(`Fail to set 'renameUntitledFileOnSave:\\n${reason}`);\n                                    });\n                                }\n                            }\n                        }\n                    }\n                    try {\n                        await context.save();\n                        if (!(widget === null || widget === void 0 ? void 0 : widget.isDisposed)) {\n                            return context.createCheckpoint();\n                        }\n                    }\n                    catch (err) {\n                        // If the save was canceled by user-action, do nothing.\n                        if (err.name === 'ModalCancelError') {\n                            return;\n                        }\n                        throw err;\n                    }\n                    finally {\n                        saveInProgress.delete(context);\n                        if (newName !== oldName) {\n                            await context.rename(newName);\n                        }\n                    }\n                }\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.saveAll, {\n        label: () => trans.__('Save All'),\n        caption: trans.__('Save all open documents'),\n        isEnabled: () => {\n            return some(shell.widgets('main'), w => { var _a, _b, _c; return (_c = (_b = (_a = docManager.contextForWidget(w)) === null || _a === void 0 ? void 0 : _a.contentsModel) === null || _b === void 0 ? void 0 : _b.writable) !== null && _c !== void 0 ? _c : false; });\n        },\n        execute: () => {\n            var _a;\n            const promises = [];\n            const paths = new Set(); // Cache so we don't double save files.\n            for (const widget of shell.widgets('main')) {\n                const context = docManager.contextForWidget(widget);\n                if (context && !paths.has(context.path)) {\n                    if ((_a = context.contentsModel) === null || _a === void 0 ? void 0 : _a.writable) {\n                        paths.add(context.path);\n                        promises.push(context.save());\n                    }\n                    else {\n                        readonlyNotification(context.path);\n                    }\n                }\n            }\n            return Promise.all(promises);\n        }\n    });\n    commands.addCommand(CommandIDs.saveAs, {\n        label: () => trans.__('Save %1 As…', fileType(shell.currentWidget, docManager)),\n        caption: trans.__('Save with new path'),\n        isEnabled,\n        execute: () => {\n            // Checks that shell.currentWidget is valid:\n            if (isEnabled()) {\n                const context = docManager.contextForWidget(shell.currentWidget);\n                if (!context) {\n                    return showDialog({\n                        title: trans.__('Cannot Save'),\n                        body: trans.__('No context found for current widget!'),\n                        buttons: [Dialog.okButton()]\n                    });\n                }\n                const onChange = (sender, args) => {\n                    if (args.type === 'save' &&\n                        args.newValue &&\n                        args.newValue.path !== context.path) {\n                        void docManager.closeFile(context.path);\n                        void commands.execute(CommandIDs.open, {\n                            path: args.newValue.path\n                        });\n                    }\n                };\n                docManager.services.contents.fileChanged.connect(onChange);\n                void context\n                    .saveAs()\n                    .finally(() => docManager.services.contents.fileChanged.disconnect(onChange));\n            }\n        }\n    });\n    (_a = app.shell.currentChanged) === null || _a === void 0 ? void 0 : _a.connect(() => {\n        [\n            CommandIDs.reload,\n            CommandIDs.restoreCheckpoint,\n            CommandIDs.save,\n            CommandIDs.saveAll,\n            CommandIDs.saveAs\n        ].forEach(cmd => {\n            app.commands.notifyCommandChanged(cmd);\n        });\n    });\n    commands.addCommand(CommandIDs.toggleAutosave, {\n        label: trans.__('Autosave Documents'),\n        isToggled: () => docManager.autosave,\n        execute: () => {\n            const value = !docManager.autosave;\n            const key = 'autosave';\n            return settingRegistry\n                .set(docManagerPluginId, key, value)\n                .catch((reason) => {\n                console.error(`Failed to set ${docManagerPluginId}:${key} - ${reason.message}`);\n            });\n        }\n    });\n    if (palette) {\n        [\n            CommandIDs.reload,\n            CommandIDs.restoreCheckpoint,\n            CommandIDs.save,\n            CommandIDs.saveAs,\n            CommandIDs.toggleAutosave,\n            CommandIDs.duplicate\n        ].forEach(command => {\n            palette.addItem({ command, category });\n        });\n    }\n}\nfunction addLabCommands(app, docManager, labShell, widgetOpener, translator) {\n    const trans = translator.load('jupyterlab');\n    const { commands } = app;\n    // Returns the doc widget associated with the most recent contextmenu event.\n    const contextMenuWidget = () => {\n        var _a;\n        const pathRe = /[Pp]ath:\\s?(.*)\\n?/;\n        const test = (node) => { var _a; return !!((_a = node['title']) === null || _a === void 0 ? void 0 : _a.match(pathRe)); };\n        const node = app.contextMenuHitTest(test);\n        const pathMatch = node === null || node === void 0 ? void 0 : node['title'].match(pathRe);\n        return ((_a = (pathMatch && docManager.findWidget(pathMatch[1], null))) !== null && _a !== void 0 ? _a : \n        // Fall back to active doc widget if path cannot be obtained from event.\n        labShell.currentWidget);\n    };\n    // Returns `true` if the current widget has a document context.\n    const isEnabled = () => {\n        const { currentWidget } = labShell;\n        return !!(currentWidget && docManager.contextForWidget(currentWidget));\n    };\n    commands.addCommand(CommandIDs.clone, {\n        label: () => trans.__('New View for %1', fileType(contextMenuWidget(), docManager)),\n        isEnabled,\n        execute: args => {\n            const widget = contextMenuWidget();\n            const options = args['options'] || {\n                mode: 'split-right'\n            };\n            if (!widget) {\n                return;\n            }\n            // Clone the widget.\n            const child = docManager.cloneWidget(widget);\n            if (child) {\n                widgetOpener.open(child, options);\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.rename, {\n        label: () => {\n            let t = fileType(contextMenuWidget(), docManager);\n            if (t) {\n                t = ' ' + t;\n            }\n            return trans.__('Rename%1…', t);\n        },\n        isEnabled,\n        execute: () => {\n            // Implies contextMenuWidget() !== null\n            if (isEnabled()) {\n                const context = docManager.contextForWidget(contextMenuWidget());\n                return renameDialog(docManager, context);\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.duplicate, {\n        label: () => trans.__('Duplicate %1', fileType(contextMenuWidget(), docManager)),\n        isEnabled,\n        execute: () => {\n            if (isEnabled()) {\n                const context = docManager.contextForWidget(contextMenuWidget());\n                if (!context) {\n                    return;\n                }\n                return docManager.duplicate(context.path);\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.del, {\n        label: () => trans.__('Delete %1', fileType(contextMenuWidget(), docManager)),\n        isEnabled,\n        execute: async () => {\n            // Implies contextMenuWidget() !== null\n            if (isEnabled()) {\n                const context = docManager.contextForWidget(contextMenuWidget());\n                if (!context) {\n                    return;\n                }\n                const result = await showDialog({\n                    title: trans.__('Delete'),\n                    body: trans.__('Are you sure you want to delete %1', context.path),\n                    buttons: [\n                        Dialog.cancelButton(),\n                        Dialog.warnButton({ label: trans.__('Delete') })\n                    ]\n                });\n                if (result.button.accept) {\n                    await app.commands.execute('docmanager:delete-file', {\n                        path: context.path\n                    });\n                }\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.showInFileBrowser, {\n        label: () => trans.__('Show in File Browser'),\n        isEnabled,\n        execute: async () => {\n            const widget = contextMenuWidget();\n            const context = widget && docManager.contextForWidget(widget);\n            if (!context) {\n                return;\n            }\n            // 'activate' is needed if this command is selected in the \"open tabs\" sidebar\n            await commands.execute('filebrowser:activate', { path: context.path });\n            await commands.execute('filebrowser:go-to-path', { path: context.path });\n        }\n    });\n    labShell.currentChanged.connect(() => {\n        [\n            CommandIDs.clone,\n            CommandIDs.rename,\n            CommandIDs.duplicate,\n            CommandIDs.del,\n            CommandIDs.showInFileBrowser\n        ].forEach(cmd => {\n            app.commands.notifyCommandChanged(cmd);\n        });\n    });\n}\n/**\n * Handle dirty state for a context.\n */\nfunction handleContext(status, context) {\n    let disposable = null;\n    const onStateChanged = (sender, args) => {\n        if (args.name === 'dirty') {\n            if (args.newValue === true) {\n                if (!disposable) {\n                    disposable = status.setDirty();\n                }\n            }\n            else if (disposable) {\n                disposable.dispose();\n                disposable = null;\n            }\n        }\n    };\n    void context.ready.then(() => {\n        context.model.stateChanged.connect(onStateChanged);\n        if (context.model.dirty) {\n            disposable = status.setDirty();\n        }\n    });\n    context.disposed.connect(() => {\n        if (disposable) {\n            disposable.dispose();\n        }\n    });\n}\n/**\n * A namespace for private module data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * A counter for unique IDs.\n     */\n    Private.id = 0;\n    function createRevertConfirmNode(checkpoint, fileType, trans) {\n        const body = document.createElement('div');\n        const confirmMessage = document.createElement('p');\n        const confirmText = document.createTextNode(trans.__('Are you sure you want to revert the %1 to checkpoint? ', fileType));\n        const cannotUndoText = document.createElement('strong');\n        cannotUndoText.textContent = trans.__('This cannot be undone.');\n        confirmMessage.appendChild(confirmText);\n        confirmMessage.appendChild(cannotUndoText);\n        const lastCheckpointMessage = document.createElement('p');\n        const lastCheckpointText = document.createTextNode(trans.__('The checkpoint was last updated at: '));\n        const lastCheckpointDate = document.createElement('p');\n        const date = new Date(checkpoint.last_modified);\n        lastCheckpointDate.style.textAlign = 'center';\n        lastCheckpointDate.textContent =\n            Time.format(date) + ' (' + Time.formatHuman(date) + ')';\n        lastCheckpointMessage.appendChild(lastCheckpointText);\n        lastCheckpointMessage.appendChild(lastCheckpointDate);\n        body.appendChild(confirmMessage);\n        body.appendChild(lastCheckpointMessage);\n        return body;\n    }\n    Private.createRevertConfirmNode = createRevertConfirmNode;\n    /**\n     * Ask user for a checkpoint to revert to.\n     */\n    async function getTargetCheckpoint(checkpoints, trans) {\n        // the id could be too long to show so use the index instead\n        const indexSeparator = '.';\n        const items = checkpoints.map((checkpoint, index) => {\n            const isoDate = Time.format(checkpoint.last_modified);\n            const humanDate = Time.formatHuman(checkpoint.last_modified);\n            return `${index}${indexSeparator} ${isoDate} (${humanDate})`;\n        });\n        const selectedItem = (await InputDialog.getItem({\n            items: items,\n            title: trans.__('Choose a checkpoint')\n        })).value;\n        if (!selectedItem) {\n            return;\n        }\n        const selectedIndex = selectedItem.split(indexSeparator, 1)[0];\n        return checkpoints[parseInt(selectedIndex, 10)];\n    }\n    Private.getTargetCheckpoint = getTargetCheckpoint;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/statusbar/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/docmanager/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Dialog, showDialog, showErrorMessage } from '@jupyterlab/apputils';\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { Widget } from '@lumino/widgets';\n/**\n * The class name added to file dialogs.\n */\nconst FILE_DIALOG_CLASS = 'jp-FileDialog';\n/**\n * The class name added for the new name label in the rename dialog\n */\nconst RENAME_NEW_NAME_TITLE_CLASS = 'jp-new-name-title';\n/**\n * Rename a file with a dialog.\n */\nexport function renameDialog(manager, context, translator) {\n    translator = translator || nullTranslator;\n    const trans = translator.load('jupyterlab');\n    const localPath = context.localPath.split('/');\n    const fileName = localPath.pop() || context.localPath;\n    return showDialog({\n        title: trans.__('Rename File'),\n        body: new RenameHandler(fileName),\n        focusNodeSelector: 'input',\n        buttons: [\n            Dialog.cancelButton(),\n            Dialog.okButton({\n                label: trans.__('Rename'),\n                ariaLabel: trans.__('Rename File')\n            })\n        ]\n    }).then(result => {\n        if (!result.value) {\n            return null;\n        }\n        if (!isValidFileName(result.value)) {\n            void showErrorMessage(trans.__('Rename Error'), Error(trans.__('\"%1\" is not a valid name for a file. Names must have nonzero length, and cannot include \"/\", \"\\\\\", or \":\"', result.value)));\n            return null;\n        }\n        return context.rename(result.value);\n    });\n}\n/**\n * Rename a file, asking for confirmation if it is overwriting another.\n */\nexport function renameFile(manager, oldPath, newPath) {\n    return manager.rename(oldPath, newPath).catch(error => {\n        if (error.response.status !== 409) {\n            // if it's not caused by an already existing file, rethrow\n            throw error;\n        }\n        // otherwise, ask for confirmation\n        return shouldOverwrite(newPath).then((value) => {\n            if (value) {\n                return manager.overwrite(oldPath, newPath);\n            }\n            return Promise.reject('File not renamed');\n        });\n    });\n}\n/**\n * Ask the user whether to overwrite a file.\n */\nexport function shouldOverwrite(path, translator) {\n    translator = translator || nullTranslator;\n    const trans = translator.load('jupyterlab');\n    const options = {\n        title: trans.__('Overwrite file?'),\n        body: trans.__('\"%1\" already exists, overwrite?', path),\n        buttons: [\n            Dialog.cancelButton(),\n            Dialog.warnButton({\n                label: trans.__('Overwrite'),\n                ariaLabel: trans.__('Overwrite Existing File')\n            })\n        ]\n    };\n    return showDialog(options).then(result => {\n        return Promise.resolve(result.button.accept);\n    });\n}\n/**\n * Test whether a name is a valid file name\n *\n * Disallows \"/\", \"\\\", and \":\" in file names, as well as names with zero length.\n */\nexport function isValidFileName(name) {\n    const validNameExp = /[\\/\\\\:]/;\n    return name.length > 0 && !validNameExp.test(name);\n}\n/**\n * A widget used to rename a file.\n */\nclass RenameHandler extends Widget {\n    /**\n     * Construct a new \"rename\" dialog.\n     */\n    constructor(oldPath) {\n        super({ node: Private.createRenameNode(oldPath) });\n        this.addClass(FILE_DIALOG_CLASS);\n        const ext = PathExt.extname(oldPath);\n        const value = (this.inputNode.value = PathExt.basename(oldPath));\n        this.inputNode.setSelectionRange(0, value.length - ext.length);\n    }\n    /**\n     * Get the input text node.\n     */\n    get inputNode() {\n        return this.node.getElementsByTagName('input')[0];\n    }\n    /**\n     * Get the value of the widget.\n     */\n    getValue() {\n        return this.inputNode.value;\n    }\n}\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Create the node for a rename handler.\n     */\n    function createRenameNode(oldPath, translator) {\n        translator = translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        const body = document.createElement('div');\n        const existingLabel = document.createElement('label');\n        existingLabel.textContent = trans.__('File Path');\n        const existingPath = document.createElement('span');\n        existingPath.textContent = oldPath;\n        const nameTitle = document.createElement('label');\n        nameTitle.textContent = trans.__('New Name');\n        nameTitle.className = RENAME_NEW_NAME_TITLE_CLASS;\n        const name = document.createElement('input');\n        body.appendChild(existingLabel);\n        body.appendChild(existingPath);\n        body.appendChild(nameTitle);\n        body.appendChild(name);\n        return body;\n    }\n    Private.createRenameNode = createRenameNode;\n})(Private || (Private = {}));\n//# sourceMappingURL=dialogs.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\n/**\n * A class that manages the auto saving of a document.\n *\n * #### Notes\n * Implements https://github.com/ipython/ipython/wiki/IPEP-15:-Autosaving-the-IPython-Notebook.\n */\nexport class SaveHandler {\n    /**\n     * Construct a new save handler.\n     */\n    constructor(options) {\n        this._autosaveTimer = -1;\n        this._minInterval = -1;\n        this._interval = -1;\n        this._isActive = false;\n        this._inDialog = false;\n        this._isDisposed = false;\n        this._multiplier = 10;\n        this._context = options.context;\n        this._isConnectedCallback = options.isConnectedCallback || (() => true);\n        const interval = options.saveInterval || 120;\n        this._minInterval = interval * 1000;\n        this._interval = this._minInterval;\n        // Restart the timer when the contents model is updated.\n        this._context.fileChanged.connect(this._setTimer, this);\n        this._context.disposed.connect(this.dispose, this);\n    }\n    /**\n     * The save interval used by the timer (in seconds).\n     */\n    get saveInterval() {\n        return this._interval / 1000;\n    }\n    set saveInterval(value) {\n        this._minInterval = this._interval = value * 1000;\n        if (this._isActive) {\n            this._setTimer();\n        }\n    }\n    /**\n     * Get whether the handler is active.\n     */\n    get isActive() {\n        return this._isActive;\n    }\n    /**\n     * Get whether the save handler is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources used by the save handler.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        clearTimeout(this._autosaveTimer);\n        Signal.clearData(this);\n    }\n    /**\n     * Start the autosaver.\n     */\n    start() {\n        this._isActive = true;\n        this._setTimer();\n    }\n    /**\n     * Stop the autosaver.\n     */\n    stop() {\n        this._isActive = false;\n        clearTimeout(this._autosaveTimer);\n    }\n    /**\n     * Set the timer.\n     */\n    _setTimer() {\n        clearTimeout(this._autosaveTimer);\n        if (!this._isActive) {\n            return;\n        }\n        this._autosaveTimer = window.setTimeout(() => {\n            if (this._isConnectedCallback()) {\n                this._save();\n            }\n            else {\n                this._setTimer();\n            }\n        }, this._interval);\n    }\n    /**\n     * Handle an autosave timeout.\n     */\n    _save() {\n        var _a;\n        const context = this._context;\n        // Trigger the next update.\n        this._setTimer();\n        if (!context) {\n            return;\n        }\n        // Bail if the model is not dirty or the file is not non-savable, or the dialog\n        // is already showing.\n        if (!((_a = context.canSave) !== null && _a !== void 0 ? _a : true) || !context.model.dirty || this._inDialog) {\n            return;\n        }\n        const start = new Date().getTime();\n        context\n            .save()\n            .then(() => {\n            if (this.isDisposed) {\n                return;\n            }\n            const duration = new Date().getTime() - start;\n            // New save interval: higher of 10x save duration or min interval.\n            this._interval = Math.max(this._multiplier * duration, this._minInterval);\n            // Restart the update to pick up the new interval.\n            this._setTimer();\n        })\n            .catch(err => {\n            // If the user canceled the save, do nothing.\n            const { name } = err;\n            if (name === 'ModalCancelError' || name === 'ModalDuplicateError') {\n                return;\n            }\n            // Otherwise, log the error.\n            console.error('Error in Auto-Save', err.message);\n        });\n    }\n}\n//# sourceMappingURL=savehandler.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Dialog, showDialog } from '@jupyterlab/apputils';\nimport { Time } from '@jupyterlab/coreutils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { ArrayExt, find } from '@lumino/algorithm';\nimport { DisposableSet } from '@lumino/disposable';\nimport { MessageLoop } from '@lumino/messaging';\nimport { AttachedProperty } from '@lumino/properties';\nimport { Signal } from '@lumino/signaling';\n/**\n * The class name added to document widgets.\n */\nconst DOCUMENT_CLASS = 'jp-Document';\n/**\n * A class that maintains the lifecycle of file-backed widgets.\n */\nexport class DocumentWidgetManager {\n    /**\n     * Construct a new document widget manager.\n     */\n    constructor(options) {\n        this._activateRequested = new Signal(this);\n        this._confirmClosingTab = false;\n        this._isDisposed = false;\n        this._stateChanged = new Signal(this);\n        this._registry = options.registry;\n        this.translator = options.translator || nullTranslator;\n        this._recentsManager = options.recentsManager || null;\n    }\n    /**\n     * A signal emitted when one of the documents is activated.\n     */\n    get activateRequested() {\n        return this._activateRequested;\n    }\n    /**\n     * Whether to ask confirmation to close a tab or not.\n     */\n    get confirmClosingDocument() {\n        return this._confirmClosingTab;\n    }\n    set confirmClosingDocument(v) {\n        if (this._confirmClosingTab !== v) {\n            const oldValue = this._confirmClosingTab;\n            this._confirmClosingTab = v;\n            this._stateChanged.emit({\n                name: 'confirmClosingDocument',\n                oldValue,\n                newValue: v\n            });\n        }\n    }\n    /**\n     * Signal triggered when an attribute changes.\n     */\n    get stateChanged() {\n        return this._stateChanged;\n    }\n    /**\n     * Test whether the document widget manager is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources used by the widget manager.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.disconnectReceiver(this);\n    }\n    /**\n     * Create a widget for a document and handle its lifecycle.\n     *\n     * @param factory - The widget factory.\n     *\n     * @param context - The document context object.\n     *\n     * @returns A widget created by the factory.\n     *\n     * @throws If the factory is not registered.\n     */\n    createWidget(factory, context) {\n        const widget = factory.createNew(context);\n        this._initializeWidget(widget, factory, context);\n        return widget;\n    }\n    /**\n     * When a new widget is created, we need to hook it up\n     * with some signals, update the widget extensions (for\n     * this kind of widget) in the docregistry, among\n     * other things.\n     */\n    _initializeWidget(widget, factory, context) {\n        Private.factoryProperty.set(widget, factory);\n        // Handle widget extensions.\n        const disposables = new DisposableSet();\n        for (const extender of this._registry.widgetExtensions(factory.name)) {\n            const disposable = extender.createNew(widget, context);\n            if (disposable) {\n                disposables.add(disposable);\n            }\n        }\n        Private.disposablesProperty.set(widget, disposables);\n        widget.disposed.connect(this._onWidgetDisposed, this);\n        this.adoptWidget(context, widget);\n        context.fileChanged.connect(this._onFileChanged, this);\n        context.pathChanged.connect(this._onPathChanged, this);\n        void context.ready.then(() => {\n            void this.setCaption(widget);\n        });\n    }\n    /**\n     * Install the message hook for the widget and add to list\n     * of known widgets.\n     *\n     * @param context - The document context object.\n     *\n     * @param widget - The widget to adopt.\n     */\n    adoptWidget(context, widget) {\n        const widgets = Private.widgetsProperty.get(context);\n        widgets.push(widget);\n        MessageLoop.installMessageHook(widget, this);\n        widget.addClass(DOCUMENT_CLASS);\n        widget.title.closable = true;\n        widget.disposed.connect(this._widgetDisposed, this);\n        Private.contextProperty.set(widget, context);\n    }\n    /**\n     * See if a widget already exists for the given context and widget name.\n     *\n     * @param context - The document context object.\n     *\n     * @returns The found widget, or `undefined`.\n     *\n     * #### Notes\n     * This can be used to use an existing widget instead of opening\n     * a new widget.\n     */\n    findWidget(context, widgetName) {\n        const widgets = Private.widgetsProperty.get(context);\n        if (!widgets) {\n            return undefined;\n        }\n        return find(widgets, widget => {\n            const factory = Private.factoryProperty.get(widget);\n            if (!factory) {\n                return false;\n            }\n            return factory.name === widgetName;\n        });\n    }\n    /**\n     * Get the document context for a widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @returns The context associated with the widget, or `undefined`.\n     */\n    contextForWidget(widget) {\n        return Private.contextProperty.get(widget);\n    }\n    /**\n     * Clone a widget.\n     *\n     * @param widget - The source widget.\n     *\n     * @returns A new widget or `undefined`.\n     *\n     * #### Notes\n     *  Uses the same widget factory and context as the source, or throws\n     *  if the source widget is not managed by this manager.\n     */\n    cloneWidget(widget) {\n        const context = Private.contextProperty.get(widget);\n        if (!context) {\n            return undefined;\n        }\n        const factory = Private.factoryProperty.get(widget);\n        if (!factory) {\n            return undefined;\n        }\n        const newWidget = factory.createNew(context, widget);\n        this._initializeWidget(newWidget, factory, context);\n        return newWidget;\n    }\n    /**\n     * Close the widgets associated with a given context.\n     *\n     * @param context - The document context object.\n     */\n    closeWidgets(context) {\n        const widgets = Private.widgetsProperty.get(context);\n        return Promise.all(widgets.map(widget => this.onClose(widget))).then(() => undefined);\n    }\n    /**\n     * Dispose of the widgets associated with a given context\n     * regardless of the widget's dirty state.\n     *\n     * @param context - The document context object.\n     */\n    deleteWidgets(context) {\n        const widgets = Private.widgetsProperty.get(context);\n        return Promise.all(widgets.map(widget => this.onDelete(widget))).then(() => undefined);\n    }\n    /**\n     * Filter a message sent to a message handler.\n     *\n     * @param handler - The target handler of the message.\n     *\n     * @param msg - The message dispatched to the handler.\n     *\n     * @returns `false` if the message should be filtered, of `true`\n     *   if the message should be dispatched to the handler as normal.\n     */\n    messageHook(handler, msg) {\n        switch (msg.type) {\n            case 'close-request':\n                void this.onClose(handler);\n                return false;\n            case 'activate-request': {\n                const widget = handler;\n                const context = this.contextForWidget(widget);\n                if (context) {\n                    context.ready\n                        .then(() => {\n                        // contentsModel is null until the context is ready\n                        this._recordAsRecentlyOpened(widget, context.contentsModel);\n                    })\n                        .catch(() => {\n                        console.warn('Could not record the recents status for', context);\n                    });\n                    this._activateRequested.emit(context.path);\n                }\n                break;\n            }\n            default:\n                break;\n        }\n        return true;\n    }\n    /**\n     * Set the caption for widget title.\n     *\n     * @param widget - The target widget.\n     */\n    async setCaption(widget) {\n        const trans = this.translator.load('jupyterlab');\n        const context = Private.contextProperty.get(widget);\n        if (!context) {\n            return;\n        }\n        const model = context.contentsModel;\n        if (!model) {\n            widget.title.caption = '';\n            return;\n        }\n        return context\n            .listCheckpoints()\n            .then((checkpoints) => {\n            if (widget.isDisposed) {\n                return;\n            }\n            const last = checkpoints[checkpoints.length - 1];\n            const checkpoint = last ? Time.format(last.last_modified) : 'None';\n            let caption = trans.__('Name: %1\\nPath: %2\\n', model.name, model.path);\n            if (context.model.readOnly) {\n                caption += trans.__('Read-only');\n            }\n            else {\n                caption +=\n                    trans.__('Last Saved: %1\\n', Time.format(model.last_modified)) +\n                        trans.__('Last Checkpoint: %1', checkpoint);\n            }\n            widget.title.caption = caption;\n        });\n    }\n    /**\n     * Handle `'close-request'` messages.\n     *\n     * @param widget - The target widget.\n     *\n     * @returns A promise that resolves with whether the widget was closed.\n     */\n    async onClose(widget) {\n        var _a;\n        // Handle dirty state.\n        const [shouldClose, ignoreSave] = await this._maybeClose(widget, this.translator);\n        if (widget.isDisposed) {\n            return true;\n        }\n        if (shouldClose) {\n            const context = Private.contextProperty.get(widget);\n            if (!ignoreSave) {\n                if (!context) {\n                    return true;\n                }\n                if ((_a = context.contentsModel) === null || _a === void 0 ? void 0 : _a.writable) {\n                    await context.save();\n                }\n                else {\n                    await context.saveAs();\n                }\n            }\n            if (context) {\n                const result = await Promise.race([\n                    context.ready,\n                    new Promise(resolve => setTimeout(resolve, 3000, 'timeout'))\n                ]);\n                if (result === 'timeout') {\n                    console.warn('Could not record the widget as recently closed because the context did not become ready in 3 seconds');\n                }\n                else {\n                    // Note: `contentsModel` is null until the the context is ready;\n                    // we have to handle it after `await` rather than in a `then`\n                    // to ensure we record it as recent before the widget gets disposed.\n                    this._recordAsRecentlyClosed(widget, context.contentsModel);\n                }\n            }\n            if (widget.isDisposed) {\n                return true;\n            }\n            widget.dispose();\n        }\n        return shouldClose;\n    }\n    /**\n     * Dispose of widget regardless of widget's dirty state.\n     *\n     * @param widget - The target widget.\n     */\n    onDelete(widget) {\n        widget.dispose();\n        return Promise.resolve(void 0);\n    }\n    /**\n     * Record the activated file, and its parent directory, as recently opened.\n     */\n    _recordAsRecentlyOpened(widget, model) {\n        var _a;\n        const recents = this._recentsManager;\n        if (!recents) {\n            // no-op\n            return;\n        }\n        const path = model.path;\n        const fileType = this._registry.getFileTypeForModel(model);\n        const contentType = fileType.contentType;\n        const factory = (_a = Private.factoryProperty.get(widget)) === null || _a === void 0 ? void 0 : _a.name;\n        recents.addRecent({ path, contentType, factory }, 'opened');\n        // Add the containing directory, too\n        if (contentType !== 'directory') {\n            const parent = path.lastIndexOf('/') > 0 ? path.slice(0, path.lastIndexOf('/')) : '';\n            recents.addRecent({ path: parent, contentType: 'directory' }, 'opened');\n        }\n    }\n    /**\n     * Record the activated file, and its parent directory, as recently opened.\n     */\n    _recordAsRecentlyClosed(widget, model) {\n        var _a;\n        const recents = this._recentsManager;\n        if (!recents) {\n            // no-op\n            return;\n        }\n        const path = model.path;\n        const fileType = this._registry.getFileTypeForModel(model);\n        const contentType = fileType.contentType;\n        const factory = (_a = Private.factoryProperty.get(widget)) === null || _a === void 0 ? void 0 : _a.name;\n        recents.addRecent({ path, contentType, factory }, 'closed');\n    }\n    /**\n     * Ask the user whether to close an unsaved file.\n     */\n    async _maybeClose(widget, translator) {\n        var _a, _b;\n        translator = translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        // Bail if the model is not dirty or other widgets are using the model.)\n        const context = Private.contextProperty.get(widget);\n        if (!context) {\n            return Promise.resolve([true, true]);\n        }\n        let widgets = Private.widgetsProperty.get(context);\n        if (!widgets) {\n            return Promise.resolve([true, true]);\n        }\n        // Filter by whether the factories are read only.\n        widgets = widgets.filter(widget => {\n            const factory = Private.factoryProperty.get(widget);\n            if (!factory) {\n                return false;\n            }\n            return factory.readOnly === false;\n        });\n        const fileName = widget.title.label;\n        const factory = Private.factoryProperty.get(widget);\n        const isDirty = context.model.dirty &&\n            widgets.length <= 1 &&\n            !((_a = factory === null || factory === void 0 ? void 0 : factory.readOnly) !== null && _a !== void 0 ? _a : true);\n        // Ask confirmation\n        if (this.confirmClosingDocument) {\n            const buttons = [\n                Dialog.cancelButton(),\n                Dialog.okButton({\n                    label: isDirty ? trans.__('Close and save') : trans.__('Close'),\n                    ariaLabel: isDirty\n                        ? trans.__('Close and save Document')\n                        : trans.__('Close Document')\n                })\n            ];\n            if (isDirty) {\n                buttons.splice(1, 0, Dialog.warnButton({\n                    label: trans.__('Close without saving'),\n                    ariaLabel: trans.__('Close Document without saving')\n                }));\n            }\n            const confirm = await showDialog({\n                title: trans.__('Confirmation'),\n                body: trans.__('Please confirm you want to close \"%1\".', fileName),\n                checkbox: isDirty\n                    ? null\n                    : {\n                        label: trans.__('Do not ask me again.'),\n                        caption: trans.__('If checked, no confirmation to close a document will be asked in the future.')\n                    },\n                buttons\n            });\n            if (confirm.isChecked) {\n                this.confirmClosingDocument = false;\n            }\n            return Promise.resolve([\n                confirm.button.accept,\n                isDirty ? confirm.button.displayType === 'warn' : true\n            ]);\n        }\n        else {\n            if (!isDirty) {\n                return Promise.resolve([true, true]);\n            }\n            const saveLabel = ((_b = context.contentsModel) === null || _b === void 0 ? void 0 : _b.writable)\n                ? trans.__('Save')\n                : trans.__('Save as');\n            const result = await showDialog({\n                title: trans.__('Save your work'),\n                body: trans.__('Save changes in \"%1\" before closing?', fileName),\n                buttons: [\n                    Dialog.cancelButton(),\n                    Dialog.warnButton({\n                        label: trans.__('Discard'),\n                        ariaLabel: trans.__('Discard changes to file')\n                    }),\n                    Dialog.okButton({ label: saveLabel })\n                ]\n            });\n            return [result.button.accept, result.button.displayType === 'warn'];\n        }\n    }\n    /**\n     * Handle the disposal of a widget.\n     */\n    _widgetDisposed(widget) {\n        const context = Private.contextProperty.get(widget);\n        if (!context) {\n            return;\n        }\n        const widgets = Private.widgetsProperty.get(context);\n        if (!widgets) {\n            return;\n        }\n        // Remove the widget.\n        ArrayExt.removeFirstOf(widgets, widget);\n        // Dispose of the context if this is the last widget using it.\n        if (!widgets.length) {\n            context.dispose();\n        }\n    }\n    /**\n     * Handle the disposal of a widget.\n     */\n    _onWidgetDisposed(widget) {\n        const disposables = Private.disposablesProperty.get(widget);\n        disposables.dispose();\n    }\n    /**\n     * Handle a file changed signal for a context.\n     */\n    _onFileChanged(context) {\n        const widgets = Private.widgetsProperty.get(context);\n        for (const widget of widgets) {\n            void this.setCaption(widget);\n        }\n    }\n    /**\n     * Handle a path changed signal for a context.\n     */\n    _onPathChanged(context) {\n        const widgets = Private.widgetsProperty.get(context);\n        for (const widget of widgets) {\n            void this.setCaption(widget);\n        }\n    }\n}\n/**\n * A private namespace for DocumentManager data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * A private attached property for a widget context.\n     */\n    Private.contextProperty = new AttachedProperty({\n        name: 'context',\n        create: () => undefined\n    });\n    /**\n     * A private attached property for a widget factory.\n     */\n    Private.factoryProperty = new AttachedProperty({\n        name: 'factory',\n        create: () => undefined\n    });\n    /**\n     * A private attached property for the widgets associated with a context.\n     */\n    Private.widgetsProperty = new AttachedProperty({\n        name: 'widgets',\n        create: () => []\n    });\n    /**\n     * A private attached property for a widget's disposables.\n     */\n    Private.disposablesProperty = new AttachedProperty({\n        name: 'disposables',\n        create: () => new DisposableSet()\n    });\n})(Private || (Private = {}));\n//# sourceMappingURL=widgetmanager.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { SessionContextDialogs } from '@jupyterlab/apputils';\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { Context } from '@jupyterlab/docregistry';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { ArrayExt, find } from '@lumino/algorithm';\nimport { UUID } from '@lumino/coreutils';\nimport { AttachedProperty } from '@lumino/properties';\nimport { Signal } from '@lumino/signaling';\nimport { SaveHandler } from './savehandler';\nimport { DocumentWidgetManager } from './widgetmanager';\n/**\n * The document manager.\n *\n * #### Notes\n * The document manager is used to register model and widget creators,\n * and the file browser uses the document manager to create widgets. The\n * document manager maintains a context for each path and model type that is\n * open, and a list of widgets for each context. The document manager is in\n * control of the proper closing and disposal of the widgets and contexts.\n */\nexport class DocumentManager {\n    /**\n     * Construct a new document manager.\n     */\n    constructor(options) {\n        var _a;\n        this._activateRequested = new Signal(this);\n        this._contexts = [];\n        this._isDisposed = false;\n        this._autosave = true;\n        this._autosaveInterval = 120;\n        this._lastModifiedCheckMargin = 500;\n        this._renameUntitledFileOnSave = true;\n        this._stateChanged = new Signal(this);\n        this.translator = options.translator || nullTranslator;\n        this.registry = options.registry;\n        this.services = options.manager;\n        this._dialogs =\n            (_a = options.sessionDialogs) !== null && _a !== void 0 ? _a : new SessionContextDialogs({ translator: options.translator });\n        this._isConnectedCallback = options.isConnectedCallback || (() => true);\n        this._opener = options.opener;\n        this._when = options.when || options.manager.ready;\n        const widgetManager = new DocumentWidgetManager({\n            registry: this.registry,\n            translator: this.translator,\n            recentsManager: options.recentsManager\n        });\n        widgetManager.activateRequested.connect(this._onActivateRequested, this);\n        widgetManager.stateChanged.connect(this._onWidgetStateChanged, this);\n        this._widgetManager = widgetManager;\n        this._setBusy = options.setBusy;\n    }\n    /**\n     * A signal emitted when one of the documents is activated.\n     */\n    get activateRequested() {\n        return this._activateRequested;\n    }\n    /**\n     * Whether to autosave documents.\n     */\n    get autosave() {\n        return this._autosave;\n    }\n    set autosave(value) {\n        if (this._autosave !== value) {\n            const oldValue = this._autosave;\n            this._autosave = value;\n            // For each existing context, start/stop the autosave handler as needed.\n            this._contexts.forEach(context => {\n                const handler = Private.saveHandlerProperty.get(context);\n                if (!handler) {\n                    return;\n                }\n                if (value === true && !handler.isActive) {\n                    handler.start();\n                }\n                else if (value === false && handler.isActive) {\n                    handler.stop();\n                }\n            });\n            this._stateChanged.emit({\n                name: 'autosave',\n                oldValue,\n                newValue: value\n            });\n        }\n    }\n    /**\n     * Determines the time interval for autosave in seconds.\n     */\n    get autosaveInterval() {\n        return this._autosaveInterval;\n    }\n    set autosaveInterval(value) {\n        if (this._autosaveInterval !== value) {\n            const oldValue = this._autosaveInterval;\n            this._autosaveInterval = value;\n            // For each existing context, set the save interval as needed.\n            this._contexts.forEach(context => {\n                const handler = Private.saveHandlerProperty.get(context);\n                if (!handler) {\n                    return;\n                }\n                handler.saveInterval = value || 120;\n            });\n            this._stateChanged.emit({\n                name: 'autosaveInterval',\n                oldValue,\n                newValue: value\n            });\n        }\n    }\n    /**\n     * Whether to ask confirmation to close a tab or not.\n     */\n    get confirmClosingDocument() {\n        return this._widgetManager.confirmClosingDocument;\n    }\n    set confirmClosingDocument(value) {\n        if (this._widgetManager.confirmClosingDocument !== value) {\n            const oldValue = this._widgetManager.confirmClosingDocument;\n            this._widgetManager.confirmClosingDocument = value;\n            this._stateChanged.emit({\n                name: 'confirmClosingDocument',\n                oldValue,\n                newValue: value\n            });\n        }\n    }\n    /**\n     * Defines max acceptable difference, in milliseconds, between last modified timestamps on disk and client\n     */\n    get lastModifiedCheckMargin() {\n        return this._lastModifiedCheckMargin;\n    }\n    set lastModifiedCheckMargin(value) {\n        if (this._lastModifiedCheckMargin !== value) {\n            const oldValue = this._lastModifiedCheckMargin;\n            this._lastModifiedCheckMargin = value;\n            // For each existing context, update the margin value.\n            this._contexts.forEach(context => {\n                context.lastModifiedCheckMargin = value;\n            });\n            this._stateChanged.emit({\n                name: 'lastModifiedCheckMargin',\n                oldValue,\n                newValue: value\n            });\n        }\n    }\n    /**\n     * Whether to ask the user to rename untitled file on first manual save.\n     */\n    get renameUntitledFileOnSave() {\n        return this._renameUntitledFileOnSave;\n    }\n    set renameUntitledFileOnSave(value) {\n        if (this._renameUntitledFileOnSave !== value) {\n            const oldValue = this._renameUntitledFileOnSave;\n            this._renameUntitledFileOnSave = value;\n            this._stateChanged.emit({\n                name: 'renameUntitledFileOnSave',\n                oldValue,\n                newValue: value\n            });\n        }\n    }\n    /**\n     * Signal triggered when an attribute changes.\n     */\n    get stateChanged() {\n        return this._stateChanged;\n    }\n    /**\n     * Get whether the document manager has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the document manager.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        // Clear any listeners for our signals.\n        Signal.clearData(this);\n        // Close all the widgets for our contexts and dispose the widget manager.\n        this._contexts.forEach(context => {\n            return this._widgetManager.closeWidgets(context);\n        });\n        this._widgetManager.dispose();\n        // Clear the context list.\n        this._contexts.length = 0;\n    }\n    /**\n     * Clone a widget.\n     *\n     * @param widget - The source widget.\n     *\n     * @returns A new widget or `undefined`.\n     *\n     * #### Notes\n     *  Uses the same widget factory and context as the source, or returns\n     *  `undefined` if the source widget is not managed by this manager.\n     */\n    cloneWidget(widget) {\n        return this._widgetManager.cloneWidget(widget);\n    }\n    /**\n     * Close all of the open documents.\n     *\n     * @returns A promise resolving when the widgets are closed.\n     */\n    closeAll() {\n        return Promise.all(this._contexts.map(context => this._widgetManager.closeWidgets(context))).then(() => undefined);\n    }\n    /**\n     * Close the widgets associated with a given path.\n     *\n     * @param path - The target path.\n     *\n     * @returns A promise resolving when the widgets are closed.\n     */\n    closeFile(path) {\n        const close = this._contextsForPath(path).map(c => this._widgetManager.closeWidgets(c));\n        return Promise.all(close).then(x => undefined);\n    }\n    /**\n     * Get the document context for a widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @returns The context associated with the widget, or `undefined` if no such\n     * context exists.\n     */\n    contextForWidget(widget) {\n        return this._widgetManager.contextForWidget(widget);\n    }\n    /**\n     * Copy a file.\n     *\n     * @param fromFile - The full path of the original file.\n     *\n     * @param toDir - The full path to the target directory.\n     *\n     * @returns A promise which resolves to the contents of the file.\n     */\n    copy(fromFile, toDir) {\n        return this.services.contents.copy(fromFile, toDir);\n    }\n    /**\n     * Create a new file and return the widget used to view it.\n     *\n     * @param path - The file path to create.\n     *\n     * @param widgetName - The name of the widget factory to use. 'default' will use the default widget.\n     *\n     * @param kernel - An optional kernel name/id to override the default.\n     *\n     * @returns The created widget, or `undefined`.\n     *\n     * #### Notes\n     * This function will return `undefined` if a valid widget factory\n     * cannot be found.\n     */\n    createNew(path, widgetName = 'default', kernel) {\n        return this._createOrOpenDocument('create', path, widgetName, kernel);\n    }\n    /**\n     * Delete a file.\n     *\n     * @param path - The full path to the file to be deleted.\n     *\n     * @returns A promise which resolves when the file is deleted.\n     *\n     * #### Notes\n     * If there is a running session associated with the file and no other\n     * sessions are using the kernel, the session will be shut down.\n     */\n    deleteFile(path) {\n        return this.services.sessions\n            .stopIfNeeded(path)\n            .then(() => {\n            return this.services.contents.delete(path);\n        })\n            .then(() => {\n            this._contextsForPath(path).forEach(context => this._widgetManager.deleteWidgets(context));\n            return Promise.resolve(void 0);\n        });\n    }\n    /**\n     * Duplicate a file.\n     *\n     * @param path - The full path to the file to be duplicated.\n     *\n     * @returns A promise which resolves when the file is duplicated.\n     */\n    duplicate(path) {\n        const basePath = PathExt.dirname(path);\n        return this.services.contents.copy(path, basePath);\n    }\n    /**\n     * See if a widget already exists for the given path and widget name.\n     *\n     * @param path - The file path to use.\n     *\n     * @param widgetName - The name of the widget factory to use. 'default' will use the default widget.\n     *\n     * @returns The found widget, or `undefined`.\n     *\n     * #### Notes\n     * This can be used to find an existing widget instead of opening\n     * a new widget.\n     */\n    findWidget(path, widgetName = 'default') {\n        const newPath = PathExt.normalize(path);\n        let widgetNames = [widgetName];\n        if (widgetName === 'default') {\n            const factory = this.registry.defaultWidgetFactory(newPath);\n            if (!factory) {\n                return undefined;\n            }\n            widgetNames = [factory.name];\n        }\n        else if (widgetName === null) {\n            widgetNames = this.registry\n                .preferredWidgetFactories(newPath)\n                .map(f => f.name);\n        }\n        for (const context of this._contextsForPath(newPath)) {\n            for (const widgetName of widgetNames) {\n                if (widgetName !== null) {\n                    const widget = this._widgetManager.findWidget(context, widgetName);\n                    if (widget) {\n                        return widget;\n                    }\n                }\n            }\n        }\n        return undefined;\n    }\n    /**\n     * Create a new untitled file.\n     *\n     * @param options - The file content creation options.\n     */\n    newUntitled(options) {\n        if (options.type === 'file') {\n            options.ext = options.ext || '.txt';\n        }\n        return this.services.contents.newUntitled(options);\n    }\n    /**\n     * Open a file and return the widget used to view it.\n     *\n     * @param path - The file path to open.\n     *\n     * @param widgetName - The name of the widget factory to use. 'default' will use the default widget.\n     *\n     * @param kernel - An optional kernel name/id to override the default.\n     *\n     * @returns The created widget, or `undefined`.\n     *\n     * #### Notes\n     * This function will return `undefined` if a valid widget factory\n     * cannot be found.\n     */\n    open(path, widgetName = 'default', kernel, options) {\n        return this._createOrOpenDocument('open', path, widgetName, kernel, options);\n    }\n    /**\n     * Open a file and return the widget used to view it.\n     * Reveals an already existing editor.\n     *\n     * @param path - The file path to open.\n     *\n     * @param widgetName - The name of the widget factory to use. 'default' will use the default widget.\n     *\n     * @param kernel - An optional kernel name/id to override the default.\n     *\n     * @returns The created widget, or `undefined`.\n     *\n     * #### Notes\n     * This function will return `undefined` if a valid widget factory\n     * cannot be found.\n     */\n    openOrReveal(path, widgetName = 'default', kernel, options) {\n        const widget = this.findWidget(path, widgetName);\n        if (widget) {\n            this._opener.open(widget, {\n                type: widgetName,\n                ...options\n            });\n            return widget;\n        }\n        return this.open(path, widgetName, kernel, options !== null && options !== void 0 ? options : {});\n    }\n    /**\n     * Overwrite a file.\n     *\n     * @param oldPath - The full path to the original file.\n     *\n     * @param newPath - The full path to the new file.\n     *\n     * @returns A promise containing the new file contents model.\n     */\n    overwrite(oldPath, newPath) {\n        // Cleanly overwrite the file by moving it, making sure the original does\n        // not exist, and then renaming to the new path.\n        const tempPath = `${newPath}.${UUID.uuid4()}`;\n        const cb = () => this.rename(tempPath, newPath);\n        return this.rename(oldPath, tempPath)\n            .then(() => {\n            return this.deleteFile(newPath);\n        })\n            .then(cb, cb);\n    }\n    /**\n     * Rename a file or directory.\n     *\n     * @param oldPath - The full path to the original file.\n     *\n     * @param newPath - The full path to the new file.\n     *\n     * @returns A promise containing the new file contents model.  The promise\n     * will reject if the newPath already exists.  Use [[overwrite]] to overwrite\n     * a file.\n     */\n    rename(oldPath, newPath) {\n        return this.services.contents.rename(oldPath, newPath);\n    }\n    /**\n     * Find a context for a given path and factory name.\n     */\n    _findContext(path, factoryName) {\n        const normalizedPath = this.services.contents.normalize(path);\n        return find(this._contexts, context => {\n            return (context.path === normalizedPath && context.factoryName === factoryName);\n        });\n    }\n    /**\n     * Get the contexts for a given path.\n     *\n     * #### Notes\n     * There may be more than one context for a given path if the path is open\n     * with multiple model factories (for example, a notebook can be open with a\n     * notebook model factory and a text model factory).\n     */\n    _contextsForPath(path) {\n        const normalizedPath = this.services.contents.normalize(path);\n        return this._contexts.filter(context => context.path === normalizedPath);\n    }\n    /**\n     * Create a context from a path and a model factory.\n     */\n    _createContext(path, factory, kernelPreference, contentProviderId) {\n        // TODO: Make it impossible to open two different contexts for the same\n        // path. Or at least prompt the closing of all widgets associated with the\n        // old context before opening the new context. This will make things much\n        // more consistent for the users, at the cost of some confusion about what\n        // models are and why sometimes they cannot open the same file in different\n        // widgets that have different models.\n        // Allow options to be passed when adding a sibling.\n        const adopter = (widget, options) => {\n            this._widgetManager.adoptWidget(context, widget);\n            // TODO should we pass the type for layout customization\n            this._opener.open(widget, options);\n        };\n        const context = new Context({\n            opener: adopter,\n            manager: this.services,\n            factory,\n            path,\n            kernelPreference,\n            setBusy: this._setBusy,\n            sessionDialogs: this._dialogs,\n            lastModifiedCheckMargin: this._lastModifiedCheckMargin,\n            translator: this.translator,\n            contentProviderId\n        });\n        const handler = new SaveHandler({\n            context,\n            isConnectedCallback: this._isConnectedCallback,\n            saveInterval: this.autosaveInterval\n        });\n        Private.saveHandlerProperty.set(context, handler);\n        void context.ready.then(() => {\n            if (this.autosave) {\n                handler.start();\n            }\n        });\n        context.disposed.connect(this._onContextDisposed, this);\n        this._contexts.push(context);\n        return context;\n    }\n    /**\n     * Handle a context disposal.\n     */\n    _onContextDisposed(context) {\n        ArrayExt.removeFirstOf(this._contexts, context);\n    }\n    /**\n     * Get the widget factory for a given widget name.\n     */\n    _widgetFactoryFor(path, widgetName) {\n        const { registry } = this;\n        if (widgetName === 'default') {\n            const factory = registry.defaultWidgetFactory(path);\n            if (!factory) {\n                return undefined;\n            }\n            widgetName = factory.name;\n        }\n        return registry.getWidgetFactory(widgetName);\n    }\n    /**\n     * Creates a new document, or loads one from disk, depending on the `which` argument.\n     * If `which==='create'`, then it creates a new document. If `which==='open'`,\n     * then it loads the document from disk.\n     *\n     * The two cases differ in how the document context is handled, but the creation\n     * of the widget and launching of the kernel are identical.\n     */\n    _createOrOpenDocument(which, path, widgetName = 'default', kernel, options) {\n        const widgetFactory = this._widgetFactoryFor(path, widgetName);\n        if (!widgetFactory) {\n            return undefined;\n        }\n        const modelName = widgetFactory.modelName || 'text';\n        const factory = this.registry.getModelFactory(modelName);\n        if (!factory) {\n            return undefined;\n        }\n        // Handle the kernel preference.\n        const preference = this.registry.getKernelPreference(path, widgetFactory.name, kernel);\n        let context;\n        let ready = Promise.resolve(undefined);\n        // Handle the load-from-disk case\n        if (which === 'open') {\n            // Use an existing context if available.\n            context = this._findContext(path, factory.name) || null;\n            if (!context) {\n                context = this._createContext(path, factory, preference, widgetFactory.contentProviderId);\n                // Populate the model, either from disk or a\n                // model backend.\n                ready = this._when.then(() => context.initialize(false));\n            }\n        }\n        else if (which === 'create') {\n            context = this._createContext(path, factory, preference, widgetFactory.contentProviderId);\n            // Immediately save the contents to disk.\n            ready = this._when.then(() => context.initialize(true));\n        }\n        else {\n            throw new Error(`Invalid argument 'which': ${which}`);\n        }\n        const widget = this._widgetManager.createWidget(widgetFactory, context);\n        this._opener.open(widget, { type: widgetFactory.name, ...options });\n        // If the initial opening of the context fails, dispose of the widget.\n        ready.catch(err => {\n            console.error(`Failed to initialize the context with '${factory.name}' for ${path}`, err);\n            widget.close();\n        });\n        return widget;\n    }\n    /**\n     * Handle an activateRequested signal from the widget manager.\n     */\n    _onActivateRequested(sender, args) {\n        this._activateRequested.emit(args);\n    }\n    _onWidgetStateChanged(sender, args) {\n        if (args.name === 'confirmClosingDocument') {\n            this._stateChanged.emit(args);\n        }\n    }\n}\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * An attached property for a context save handler.\n     */\n    Private.saveHandlerProperty = new AttachedProperty({\n        name: 'saveHandler',\n        create: () => undefined\n    });\n})(Private || (Private = {}));\n//# sourceMappingURL=manager.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { TextItem } from '@jupyterlab/statusbar';\nimport { VDomModel, VDomRenderer } from '@jupyterlab/ui-components';\nimport React from 'react';\n/**\n * A pure component for rendering a file path (or activity name).\n *\n * @param props - the props for the component.\n *\n * @returns a tsx component for a file path.\n */\nfunction PathStatusComponent(props) {\n    return React.createElement(TextItem, { source: props.name, title: props.fullPath });\n}\n/**\n * A status bar item for the current file path (or activity name).\n */\nexport class PathStatus extends VDomRenderer {\n    /**\n     * Construct a new PathStatus status item.\n     */\n    constructor(opts) {\n        super(new PathStatus.Model(opts.docManager));\n        this.node.title = this.model.path;\n    }\n    /**\n     * Render the status item.\n     */\n    render() {\n        return (React.createElement(PathStatusComponent, { fullPath: this.model.path, name: this.model.name }));\n    }\n}\n/**\n * A namespace for PathStatus statics.\n */\n(function (PathStatus) {\n    /**\n     * A VDomModel for rendering the PathStatus status item.\n     */\n    class Model extends VDomModel {\n        /**\n         * Construct a new model.\n         *\n         * @param docManager the application document manager. Used to check\n         *   whether the current widget is a document.\n         */\n        constructor(docManager) {\n            super();\n            /**\n             * React to a title change for the current widget.\n             */\n            this._onTitleChange = (title) => {\n                const oldState = this._getAllState();\n                this._name = title.label;\n                this._triggerChange(oldState, this._getAllState());\n            };\n            /**\n             * React to a path change for the current document.\n             */\n            this._onPathChange = (_documentModel, newPath) => {\n                const oldState = this._getAllState();\n                this._path = newPath;\n                this._name = PathExt.basename(newPath);\n                this._triggerChange(oldState, this._getAllState());\n            };\n            this._path = '';\n            this._name = '';\n            this._widget = null;\n            this._docManager = docManager;\n        }\n        /**\n         * The current path for the application.\n         */\n        get path() {\n            return this._path;\n        }\n        /**\n         * The name of the current activity.\n         */\n        get name() {\n            return this._name;\n        }\n        /**\n         * The current widget for the application.\n         */\n        get widget() {\n            return this._widget;\n        }\n        set widget(widget) {\n            const oldWidget = this._widget;\n            if (oldWidget !== null) {\n                const oldContext = this._docManager.contextForWidget(oldWidget);\n                if (oldContext) {\n                    oldContext.pathChanged.disconnect(this._onPathChange);\n                }\n                else {\n                    oldWidget.title.changed.disconnect(this._onTitleChange);\n                }\n            }\n            const oldState = this._getAllState();\n            this._widget = widget;\n            if (this._widget === null) {\n                this._path = '';\n                this._name = '';\n            }\n            else {\n                const widgetContext = this._docManager.contextForWidget(this._widget);\n                if (widgetContext) {\n                    this._path = widgetContext.path;\n                    this._name = PathExt.basename(widgetContext.path);\n                    widgetContext.pathChanged.connect(this._onPathChange);\n                }\n                else {\n                    this._path = '';\n                    this._name = this._widget.title.label;\n                    this._widget.title.changed.connect(this._onTitleChange);\n                }\n            }\n            this._triggerChange(oldState, this._getAllState());\n        }\n        /**\n         * Get the current state of the model.\n         */\n        _getAllState() {\n            return [this._path, this._name];\n        }\n        /**\n         * Trigger a state change to rerender.\n         */\n        _triggerChange(oldState, newState) {\n            if (oldState[0] !== newState[0] || oldState[1] !== newState[1]) {\n                this.stateChanged.emit(void 0);\n            }\n        }\n    }\n    PathStatus.Model = Model;\n})(PathStatus || (PathStatus = {}));\n//# sourceMappingURL=pathstatus.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { TextItem } from '@jupyterlab/statusbar';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { VDomModel, VDomRenderer } from '@jupyterlab/ui-components';\nimport React from 'react';\n/**\n * A pure functional component for a Saving status item.\n *\n * @param props - the props for the component.\n *\n * @returns a tsx component for rendering the saving state.\n */\nfunction SavingStatusComponent(props) {\n    return React.createElement(TextItem, { source: props.fileStatus });\n}\n/**\n * The amount of time (in ms) to retain the saving completed message\n * before hiding the status item.\n */\nconst SAVING_COMPLETE_MESSAGE_MILLIS = 2000;\n/**\n * A VDomRenderer for a saving status item.\n */\nexport class SavingStatus extends VDomRenderer {\n    /**\n     * Create a new SavingStatus item.\n     */\n    constructor(opts) {\n        super(new SavingStatus.Model(opts.docManager));\n        const translator = opts.translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        this._statusMap = {\n            completed: trans.__('Saving completed'),\n            started: trans.__('Saving started'),\n            failed: trans.__('Saving failed')\n        };\n    }\n    /**\n     * Render the SavingStatus item.\n     */\n    render() {\n        if (this.model === null || this.model.status === null) {\n            return null;\n        }\n        else {\n            return (React.createElement(SavingStatusComponent, { fileStatus: this._statusMap[this.model.status] }));\n        }\n    }\n}\n/**\n * A namespace for SavingStatus statics.\n */\n(function (SavingStatus) {\n    /**\n     * A VDomModel for the SavingStatus item.\n     */\n    class Model extends VDomModel {\n        /**\n         * Create a new SavingStatus model.\n         */\n        constructor(docManager) {\n            super();\n            /**\n             * React to a saving status change from the current document widget.\n             */\n            this._onStatusChange = (_, newStatus) => {\n                this._status = newStatus;\n                if (this._status === 'completed') {\n                    setTimeout(() => {\n                        this._status = null;\n                        this.stateChanged.emit(void 0);\n                    }, SAVING_COMPLETE_MESSAGE_MILLIS);\n                    this.stateChanged.emit(void 0);\n                }\n                else {\n                    this.stateChanged.emit(void 0);\n                }\n            };\n            this._status = null;\n            this._widget = null;\n            this._status = null;\n            this.widget = null;\n            this._docManager = docManager;\n        }\n        /**\n         * The current status of the model.\n         */\n        get status() {\n            return this._status;\n        }\n        /**\n         * The current widget for the model. Any widget can be assigned,\n         * but it only has any effect if the widget is an IDocument widget\n         * known to the application document manager.\n         */\n        get widget() {\n            return this._widget;\n        }\n        set widget(widget) {\n            var _a, _b;\n            const oldWidget = this._widget;\n            if (oldWidget !== null) {\n                const oldContext = this._docManager.contextForWidget(oldWidget);\n                if (oldContext) {\n                    oldContext.saveState.disconnect(this._onStatusChange);\n                }\n                else if ((_a = this._widget.content) === null || _a === void 0 ? void 0 : _a.saveStateChanged) {\n                    this._widget.content.saveStateChanged.disconnect(this._onStatusChange);\n                }\n            }\n            this._widget = widget;\n            if (this._widget === null) {\n                this._status = null;\n            }\n            else {\n                const widgetContext = this._docManager.contextForWidget(this._widget);\n                if (widgetContext) {\n                    widgetContext.saveState.connect(this._onStatusChange);\n                }\n                else if ((_b = this._widget.content) === null || _b === void 0 ? void 0 : _b.saveStateChanged) {\n                    this._widget.content.saveStateChanged.connect(this._onStatusChange);\n                }\n            }\n        }\n    }\n    SavingStatus.Model = Model;\n})(SavingStatus || (SavingStatus = {}));\n//# sourceMappingURL=savingstatus.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The document registry token.\n */\nexport const IDocumentManager = new Token('@jupyterlab/docmanager:IDocumentManager', `A service for the manager for all\n  documents used by the application. Use this if you want to open and close documents,\n  create and delete files, and otherwise interact with the file system.`);\n/**\n * The document widget opener token.\n */\nexport const IDocumentWidgetOpener = new Token('@jupyterlab/docmanager:IDocumentWidgetOpener', `A service to open a widget.`);\n/**\n * The recent documents database token.\n */\nexport const IRecentsManager = new Token('@jupyterlab/docmanager:IRecentsManager', `A service providing information about recently opened and closed documents`);\n//# sourceMappingURL=tokens.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { PageConfig } from '@jupyterlab/coreutils';\nimport { Debouncer } from '@lumino/polling';\nimport { Signal } from '@lumino/signaling';\n/**\n * Manager for recently opened and closed documents.\n */\nexport class RecentsManager {\n    constructor(options) {\n        this._recentsChanged = new Signal(this);\n        this._recents = {\n            opened: [],\n            closed: []\n        };\n        this._isDisposed = false;\n        this._maxRecentsLength = 10;\n        this._saveDebouncer = new Debouncer(this._save.bind(this), 500);\n        this._stateDB = options.stateDB;\n        this._contentsManager = options.contents;\n        this.updateRootDir();\n        this._loadRecents().catch(r => {\n            console.error(`Failed to load recent list from state:\\n${r}`);\n        });\n    }\n    /**\n     * Whether the manager is disposed or not.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * List of recently opened items\n     */\n    get recentlyOpened() {\n        const recents = this._recents.opened || [];\n        return recents.filter(r => r.root === this._serverRoot);\n    }\n    /**\n     * List of recently opened items\n     */\n    get recentlyClosed() {\n        const recents = this._recents.closed || [];\n        return recents.filter(r => r.root === this._serverRoot);\n    }\n    /**\n     * Signal emitted when the recent list changes.\n     */\n    get changed() {\n        return this._recentsChanged;\n    }\n    /**\n     * Maximal number of recent items to list.\n     */\n    get maximalRecentsLength() {\n        return this._maxRecentsLength;\n    }\n    set maximalRecentsLength(value) {\n        this._maxRecentsLength = Math.round(Math.max(1, value));\n        let changed = false;\n        for (const type of ['opened', 'closed']) {\n            if (this._recents[type].length > this._maxRecentsLength) {\n                this._recents[type].length = this._maxRecentsLength;\n                changed = true;\n            }\n        }\n        if (changed) {\n            this._recentsChanged.emit(undefined);\n        }\n    }\n    /**\n     * Dispose recent manager resources\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n        this._saveDebouncer.dispose();\n    }\n    /**\n     * Add a new path to the recent list.\n     */\n    addRecent(document, event) {\n        const recent = {\n            ...document,\n            root: this._serverRoot\n        };\n        const recents = this._recents[event];\n        // Check if it's already present; if so remove it\n        const existingIndex = recents.findIndex(r => r.path === document.path);\n        if (existingIndex >= 0) {\n            recents.splice(existingIndex, 1);\n        }\n        // Add to the front of the list\n        recents.unshift(recent);\n        this._setRecents(recents, event);\n        this._recentsChanged.emit(undefined);\n    }\n    /**\n     * Clear the recents list\n     */\n    clearRecents() {\n        this._setRecents([], 'opened');\n        this._setRecents([], 'closed');\n        this._recentsChanged.emit(undefined);\n    }\n    /**\n     * Remove the document from recents list.\n     */\n    removeRecent(document, event) {\n        this._removeRecent(document.path, [event]);\n    }\n    /**\n     * Check if the recent item is valid, remove if it from both lists if it is not.\n     */\n    async validate(recent) {\n        const valid = await this._isValid(recent);\n        if (!valid) {\n            this._removeRecent(recent.path);\n        }\n        return valid;\n    }\n    /**\n     * Set server root dir.\n     *\n     * Note: protected to allow unit-testing.\n     */\n    updateRootDir() {\n        this._serverRoot = PageConfig.getOption('serverRoot');\n    }\n    /**\n     * Remove a path from both lists (opened and closed).\n     */\n    _removeRecent(path, lists = ['opened', 'closed']) {\n        let changed = false;\n        for (const type of lists) {\n            const recents = this._recents[type];\n            const newRecents = recents.filter(r => path !== r.path);\n            if (recents.length !== newRecents.length) {\n                this._setRecents(newRecents, type);\n                changed = true;\n            }\n        }\n        if (changed) {\n            this._recentsChanged.emit(undefined);\n        }\n    }\n    /**\n     * Check if the path of a given recent document exists.\n     */\n    async _isValid(recent) {\n        var _a;\n        try {\n            await this._contentsManager.get(recent.path, { content: false });\n        }\n        catch (e) {\n            if (((_a = e.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Set the recent list\n     * @param recents The new recent list\n     */\n    _setRecents(recents, type) {\n        this._recents[type] = recents\n            .slice(0, this.maximalRecentsLength)\n            .sort((a, b) => {\n            if (a.root === b.root) {\n                return 0;\n            }\n            else {\n                return a.root !== this._serverRoot ? 1 : -1;\n            }\n        });\n        this._saveDebouncer.invoke().catch(console.warn);\n    }\n    /**\n     * Load the recent items from the state.\n     */\n    async _loadRecents() {\n        const recents = (await this._stateDB.fetch(Private.stateDBKey)) || {\n            opened: [],\n            closed: []\n        };\n        const allRecents = [...recents.opened, ...recents.closed];\n        const invalidPaths = new Set(await this._getInvalidPaths(allRecents));\n        for (const type of ['opened', 'closed']) {\n            this._setRecents(recents[type].filter(r => !invalidPaths.has(r.path)), type);\n        }\n        this._recentsChanged.emit(undefined);\n    }\n    /**\n     * Get the list of invalid path in recents.\n     */\n    async _getInvalidPaths(recents) {\n        const invalidPathsOrNulls = await Promise.all(recents.map(async (r) => {\n            if (await this._isValid(r)) {\n                return null;\n            }\n            else {\n                return r.path;\n            }\n        }));\n        return invalidPathsOrNulls.filter(x => typeof x === 'string');\n    }\n    /**\n     * Save the recent items to the state.\n     */\n    async _save() {\n        try {\n            await this._stateDB.save(Private.stateDBKey, this._recents);\n        }\n        catch (e) {\n            console.log('Saving recents failed', e);\n        }\n    }\n}\nvar Private;\n(function (Private) {\n    /**\n     * Key reserved in the state database.\n     */\n    Private.stateDBKey = 'docmanager:recents';\n})(Private || (Private = {}));\n//# sourceMappingURL=recents.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module docmanager\n */\nexport * from './dialogs';\nexport * from './manager';\nexport * from './pathstatus';\nexport * from './savehandler';\nexport * from './savingstatus';\nexport * from './tokens';\nexport * from './widgetmanager';\nexport * from './recents';\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Dialog, SessionContext, SessionContextDialogs, showDialog, showErrorMessage } from '@jupyterlab/apputils';\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { RenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Signal } from '@lumino/signaling';\nimport { Widget } from '@lumino/widgets';\n/**\n * An implementation of a document context.\n *\n * This class is typically instantiated by the document manager.\n */\nexport class Context {\n    /**\n     * Construct a new document context.\n     */\n    constructor(options) {\n        var _a, _b;\n        this._isReady = false;\n        this._isDisposed = false;\n        this._isPopulated = false;\n        this._path = '';\n        this._lineEnding = null;\n        this._contentsModel = null;\n        this._populatedPromise = new PromiseDelegate();\n        this._pathChanged = new Signal(this);\n        this._fileChanged = new Signal(this);\n        this._saveState = new Signal(this);\n        this._disposed = new Signal(this);\n        this._lastModifiedCheckMargin = 500;\n        this._conflictModalIsOpen = false;\n        const manager = (this._manager = options.manager);\n        this.translator = options.translator || nullTranslator;\n        this._contentProviderId = options.contentProviderId;\n        this._trans = this.translator.load('jupyterlab');\n        this._factory = options.factory;\n        this._dialogs =\n            (_a = options.sessionDialogs) !== null && _a !== void 0 ? _a : new SessionContextDialogs({ translator: options.translator });\n        this._opener = options.opener || Private.noOp;\n        this._path = this._manager.contents.normalize(options.path);\n        this._lastModifiedCheckMargin = options.lastModifiedCheckMargin || 500;\n        const localPath = this._manager.contents.localPath(this._path);\n        const lang = this._factory.preferredLanguage(PathExt.basename(localPath));\n        const sharedFactory = this._manager.contents.getSharedModelFactory(this._path, { contentProviderId: options.contentProviderId });\n        const sharedModel = sharedFactory === null || sharedFactory === void 0 ? void 0 : sharedFactory.createNew({\n            path: localPath,\n            format: this._factory.fileFormat,\n            contentType: this._factory.contentType,\n            collaborative: this._factory.collaborative\n        });\n        this._model = this._factory.createNew({\n            languagePreference: lang,\n            sharedModel,\n            collaborationEnabled: (_b = sharedFactory === null || sharedFactory === void 0 ? void 0 : sharedFactory.collaborative) !== null && _b !== void 0 ? _b : false\n        });\n        this._readyPromise = manager.ready.then(() => {\n            return this._populatedPromise.promise;\n        });\n        const ext = PathExt.extname(this._path);\n        this.sessionContext = new SessionContext({\n            kernelManager: manager.kernels,\n            sessionManager: manager.sessions,\n            specsManager: manager.kernelspecs,\n            path: localPath,\n            type: ext === '.ipynb' ? 'notebook' : 'file',\n            name: PathExt.basename(localPath),\n            kernelPreference: options.kernelPreference || { shouldStart: false },\n            setBusy: options.setBusy\n        });\n        this.sessionContext.propertyChanged.connect(this._onSessionChanged, this);\n        manager.contents.fileChanged.connect(this._onFileChanged, this);\n        this.urlResolver = new RenderMimeRegistry.UrlResolver({\n            path: this._path,\n            contents: manager.contents\n        });\n    }\n    /**\n     * A signal emitted when the path changes.\n     */\n    get pathChanged() {\n        return this._pathChanged;\n    }\n    /**\n     * A signal emitted when the model is saved or reverted.\n     */\n    get fileChanged() {\n        return this._fileChanged;\n    }\n    /**\n     * A signal emitted on the start and end of a saving operation.\n     */\n    get saveState() {\n        return this._saveState;\n    }\n    /**\n     * A signal emitted when the context is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * Configurable margin used to detect document modification conflicts, in milliseconds\n     */\n    get lastModifiedCheckMargin() {\n        return this._lastModifiedCheckMargin;\n    }\n    set lastModifiedCheckMargin(value) {\n        this._lastModifiedCheckMargin = value;\n    }\n    /**\n     * Get the model associated with the document.\n     */\n    get model() {\n        return this._model;\n    }\n    /**\n     * The current path associated with the document.\n     */\n    get path() {\n        return this._path;\n    }\n    /**\n     * The current local path associated with the document.\n     * If the document is in the default notebook file browser,\n     * this is the same as the path.\n     */\n    get localPath() {\n        return this._manager.contents.localPath(this._path);\n    }\n    /**\n     * The document metadata, stored as a services contents model.\n     *\n     * #### Notes\n     * The contents model will be `null` until the context is populated.\n     * It will not have a `content` field.\n     */\n    get contentsModel() {\n        return this._contentsModel ? { ...this._contentsModel } : null;\n    }\n    /**\n     * Get the model factory name.\n     *\n     * #### Notes\n     * This is not part of the `IContext` API.\n     */\n    get factoryName() {\n        return this.isDisposed ? '' : this._factory.name;\n    }\n    /**\n     * Test whether the context is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the context.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this.sessionContext.dispose();\n        this._model.dispose();\n        // Ensure we dispose the `sharedModel` as it may have been generated in the context\n        // through the shared model factory.\n        this._model.sharedModel.dispose();\n        this._disposed.emit(void 0);\n        Signal.clearData(this);\n    }\n    /**\n     * Whether the context is ready.\n     */\n    get isReady() {\n        return this._isReady;\n    }\n    /**\n     * A promise that is fulfilled when the context is ready.\n     */\n    get ready() {\n        return this._readyPromise;\n    }\n    /**\n     * Whether the document can be saved via the Contents API.\n     */\n    get canSave() {\n        var _a;\n        return !!(((_a = this._contentsModel) === null || _a === void 0 ? void 0 : _a.writable) && !this._model.collaborative);\n    }\n    /**\n     * Initialize the context.\n     *\n     * @param isNew - Whether it is a new file.\n     *\n     * @returns a promise that resolves upon initialization.\n     */\n    async initialize(isNew) {\n        if (isNew) {\n            await this._save();\n        }\n        else {\n            await this._revert();\n        }\n        this.model.sharedModel.clearUndoHistory();\n    }\n    /**\n     * Rename the document.\n     *\n     * @param newName - the new name for the document.\n     */\n    rename(newName) {\n        return this.ready.then(() => {\n            return this._manager.ready.then(() => {\n                return this._rename(newName);\n            });\n        });\n    }\n    /**\n     * Save the document contents to disk.\n     */\n    async save() {\n        await this.ready;\n        await this._save();\n    }\n    /**\n     * Save the document to a different path chosen by the user.\n     *\n     * It will be rejected if the user abort providing a new path.\n     */\n    async saveAs() {\n        await this.ready;\n        const localPath = this._manager.contents.localPath(this.path);\n        const newLocalPath = await Private.getSavePath(localPath);\n        if (this.isDisposed || !newLocalPath) {\n            return;\n        }\n        const drive = this._manager.contents.driveName(this.path);\n        const newPath = drive == '' ? newLocalPath : `${drive}:${newLocalPath}`;\n        if (newPath === this._path) {\n            return this.save();\n        }\n        // Make sure the path does not exist.\n        try {\n            await this._manager.ready;\n            await this._manager.contents.get(newPath, {\n                contentProviderId: this._contentProviderId\n            });\n            await this._maybeOverWrite(newPath);\n        }\n        catch (err) {\n            if (!err.response || err.response.status !== 404) {\n                throw err;\n            }\n            await this._finishSaveAs(newPath);\n        }\n    }\n    /**\n     * Download a file.\n     *\n     * @returns A promise which resolves when the file has begun\n     *   downloading.\n     */\n    async download() {\n        const url = await this._manager.contents.getDownloadUrl(this._path);\n        const element = document.createElement('a');\n        element.href = url;\n        element.download = '';\n        document.body.appendChild(element);\n        element.click();\n        document.body.removeChild(element);\n        return void 0;\n    }\n    /**\n     * Revert the document contents to disk contents.\n     */\n    async revert() {\n        await this.ready;\n        await this._revert();\n    }\n    /**\n     * Create a checkpoint for the file.\n     */\n    createCheckpoint() {\n        const contents = this._manager.contents;\n        return this._manager.ready.then(() => {\n            return contents.createCheckpoint(this._path);\n        });\n    }\n    /**\n     * Delete a checkpoint for the file.\n     */\n    deleteCheckpoint(checkpointId) {\n        const contents = this._manager.contents;\n        return this._manager.ready.then(() => {\n            return contents.deleteCheckpoint(this._path, checkpointId);\n        });\n    }\n    /**\n     * Restore the file to a known checkpoint state.\n     */\n    restoreCheckpoint(checkpointId) {\n        const contents = this._manager.contents;\n        const path = this._path;\n        return this._manager.ready.then(() => {\n            if (checkpointId) {\n                return contents.restoreCheckpoint(path, checkpointId);\n            }\n            return this.listCheckpoints().then(checkpoints => {\n                if (this.isDisposed || !checkpoints.length) {\n                    return;\n                }\n                checkpointId = checkpoints[checkpoints.length - 1].id;\n                return contents.restoreCheckpoint(path, checkpointId);\n            });\n        });\n    }\n    /**\n     * List available checkpoints for a file.\n     */\n    listCheckpoints() {\n        const contents = this._manager.contents;\n        return this._manager.ready.then(() => {\n            return contents.listCheckpoints(this._path);\n        });\n    }\n    /**\n     * Add a sibling widget to the document manager.\n     *\n     * @param widget - The widget to add to the document manager.\n     *\n     * @param options - The desired options for adding the sibling.\n     *\n     * @returns A disposable used to remove the sibling if desired.\n     *\n     * #### Notes\n     * It is assumed that the widget has the same model and context\n     * as the original widget.\n     */\n    addSibling(widget, options = {}) {\n        const opener = this._opener;\n        if (opener) {\n            opener(widget, options);\n        }\n        return new DisposableDelegate(() => {\n            widget.close();\n        });\n    }\n    /**\n     * Handle a change on the contents manager.\n     */\n    _onFileChanged(sender, change) {\n        var _a, _b, _c;\n        if (change.type === 'save' && this._model.collaborative) {\n            // Skip if the change isn't related to current file.\n            if (((_a = this._contentsModel) === null || _a === void 0 ? void 0 : _a.path) !== ((_b = change.newValue) === null || _b === void 0 ? void 0 : _b.path)) {\n                return;\n            }\n            // Update the contents model with the new values provided on save.\n            // This is needed for save operations performed on the server-side\n            // by the collaborative drive which needs to update the `hash`\n            // of the content when it changes on the backend.\n            this._updateContentsModel({\n                ...this._contentsModel,\n                ...change.newValue\n            });\n            return;\n        }\n        if (change.type !== 'rename') {\n            return;\n        }\n        let oldPath = change.oldValue && change.oldValue.path;\n        let newPath = change.newValue && change.newValue.path;\n        if (newPath && this._path.indexOf(oldPath || '') === 0) {\n            let changeModel = change.newValue;\n            // When folder name changed, `oldPath` is `foo`, `newPath` is `bar` and `this._path` is `foo/test`,\n            // we should update `foo/test` to `bar/test` as well\n            if (oldPath !== this._path) {\n                newPath = this._path.replace(new RegExp(`^${oldPath}/`), `${newPath}/`);\n                oldPath = this._path;\n                // Update client file model from folder change\n                changeModel = {\n                    last_modified: (_c = change.newValue) === null || _c === void 0 ? void 0 : _c.created,\n                    path: newPath\n                };\n            }\n            this._updateContentsModel({\n                ...this._contentsModel,\n                ...changeModel\n            });\n            this._updatePath(newPath);\n        }\n    }\n    /**\n     * Handle a change to a session property.\n     */\n    _onSessionChanged(sender, type) {\n        if (type !== 'path') {\n            return;\n        }\n        // The session uses local paths.\n        // We need to convert it to a global path.\n        const driveName = this._manager.contents.driveName(this.path);\n        let newPath = this.sessionContext.session.path;\n        if (driveName) {\n            newPath = `${driveName}:${newPath}`;\n        }\n        this._updatePath(newPath);\n    }\n    /**\n     * Update our contents model, without the content.\n     */\n    _updateContentsModel(model) {\n        var _a, _b, _c, _d;\n        const newModel = {\n            path: model.path,\n            name: model.name,\n            type: model.type,\n            writable: model.writable,\n            created: model.created,\n            last_modified: model.last_modified,\n            mimetype: model.mimetype,\n            format: model.format,\n            hash: model.hash,\n            hash_algorithm: model.hash_algorithm\n        };\n        const mod = (_b = (_a = this._contentsModel) === null || _a === void 0 ? void 0 : _a.last_modified) !== null && _b !== void 0 ? _b : null;\n        const hash = (_d = (_c = this._contentsModel) === null || _c === void 0 ? void 0 : _c.hash) !== null && _d !== void 0 ? _d : null;\n        this._contentsModel = newModel;\n        if (\n        // If neither modification date nor hash available, assume the file has changed\n        (!mod && !hash) ||\n            // Compare last_modified if no hash\n            (!hash && newModel.last_modified !== mod) ||\n            // Compare hash if available\n            (hash && newModel.hash !== hash)) {\n            this._fileChanged.emit(newModel);\n        }\n    }\n    _updatePath(newPath) {\n        var _a, _b, _c, _d;\n        if (this._path === newPath) {\n            return;\n        }\n        this._path = newPath;\n        const localPath = this._manager.contents.localPath(newPath);\n        const name = PathExt.basename(localPath);\n        if (((_a = this.sessionContext.session) === null || _a === void 0 ? void 0 : _a.path) !== localPath) {\n            void ((_b = this.sessionContext.session) === null || _b === void 0 ? void 0 : _b.setPath(localPath));\n        }\n        if (((_c = this.sessionContext.session) === null || _c === void 0 ? void 0 : _c.name) !== name) {\n            void ((_d = this.sessionContext.session) === null || _d === void 0 ? void 0 : _d.setName(name));\n        }\n        if (this.urlResolver.path !== newPath) {\n            this.urlResolver.path = newPath;\n        }\n        if (this._contentsModel &&\n            (this._contentsModel.path !== newPath ||\n                this._contentsModel.name !== name)) {\n            const contentsModel = {\n                ...this._contentsModel,\n                name: name,\n                path: newPath\n            };\n            this._updateContentsModel(contentsModel);\n        }\n        this._pathChanged.emit(newPath);\n    }\n    /**\n     * Handle an initial population.\n     */\n    async _populate() {\n        this._isPopulated = true;\n        this._isReady = true;\n        this._populatedPromise.resolve(void 0);\n        // Add a checkpoint if none exists and the file is writable.\n        await this._maybeCheckpoint(false);\n        if (this.isDisposed) {\n            return;\n        }\n        // Update the kernel preference.\n        const name = this._model.defaultKernelName ||\n            this.sessionContext.kernelPreference.name;\n        this.sessionContext.kernelPreference = {\n            ...this.sessionContext.kernelPreference,\n            name,\n            language: this._model.defaultKernelLanguage\n        };\n        // Note: we don't wait on the session to initialize\n        // so that the user can be shown the content before\n        // any kernel has started.\n        void this.sessionContext.initialize().then(shouldSelect => {\n            if (shouldSelect) {\n                void this._dialogs.selectKernel(this.sessionContext);\n            }\n        });\n    }\n    /**\n     * Rename the document.\n     *\n     * @param newName - the new name for the document.\n     */\n    async _rename(newName) {\n        const splitPath = this.localPath.split('/');\n        splitPath[splitPath.length - 1] = newName;\n        let newPath = PathExt.join(...splitPath);\n        const driveName = this._manager.contents.driveName(this.path);\n        if (driveName) {\n            newPath = `${driveName}:${newPath}`;\n        }\n        // rename triggers a fileChanged which updates the contents model\n        await this._manager.contents.rename(this.path, newPath);\n    }\n    /**\n     * Save the document contents to disk.\n     */\n    async _save() {\n        this._saveState.emit('started');\n        const options = this._createSaveOptions();\n        try {\n            await this._manager.ready;\n            if (this._model.collaborative) {\n                // Files cannot be saved in collaborative mode. The \"save\" command\n                // is disabled in the UI, but if the user tries to save anyway, act\n                // as though it succeeded.\n                this._saveState.emit('completed');\n                return Promise.resolve();\n            }\n            const value = await this._maybeSave(options);\n            if (this.isDisposed) {\n                return;\n            }\n            this._model.dirty = false;\n            this._updateContentsModel(value);\n            if (!this._isPopulated) {\n                await this._populate();\n            }\n            // Emit completion.\n            this._saveState.emit('completed');\n        }\n        catch (err) {\n            // If the save has been canceled by the user, throw the error\n            // so that whoever called save() can decide what to do.\n            const { name } = err;\n            if (name === 'ModalCancelError' || name === 'ModalDuplicateError') {\n                throw err;\n            }\n            // Otherwise show an error message and throw the error.\n            const localPath = this._manager.contents.localPath(this._path);\n            const file = PathExt.basename(localPath);\n            void this._handleError(err, this._trans.__('File Save Error for %1', file));\n            // Emit failure.\n            this._saveState.emit('failed');\n            throw err;\n        }\n    }\n    /**\n     * Revert the document contents to disk contents.\n     *\n     * @param initializeModel - call the model's initialization function after\n     * deserializing the content.\n     */\n    _revert(initializeModel = false) {\n        const opts = {\n            type: this._factory.contentType,\n            content: this._factory.fileFormat !== null,\n            hash: this._factory.fileFormat !== null,\n            ...(this._factory.fileFormat !== null\n                ? { format: this._factory.fileFormat }\n                : {}),\n            contentProviderId: this._contentProviderId\n        };\n        const path = this._path;\n        const model = this._model;\n        return this._manager.ready\n            .then(() => {\n            return this._manager.contents.get(path, opts);\n        })\n            .then(contents => {\n            if (this.isDisposed) {\n                return;\n            }\n            if (contents.content) {\n                if (contents.format === 'json') {\n                    model.fromJSON(contents.content);\n                }\n                else {\n                    let content = contents.content;\n                    // Convert line endings if necessary, marking the file\n                    // as dirty.\n                    if (content.indexOf('\\r\\n') !== -1) {\n                        this._lineEnding = '\\r\\n';\n                        content = content.replace(/\\r\\n/g, '\\n');\n                    }\n                    else if (content.indexOf('\\r') !== -1) {\n                        this._lineEnding = '\\r';\n                        content = content.replace(/\\r/g, '\\n');\n                    }\n                    else {\n                        this._lineEnding = null;\n                    }\n                    model.fromString(content);\n                }\n            }\n            this._updateContentsModel(contents);\n            model.dirty = false;\n            if (!this._isPopulated) {\n                return this._populate();\n            }\n        })\n            .catch(async (err) => {\n            const localPath = this._manager.contents.localPath(this._path);\n            const name = PathExt.basename(localPath);\n            void this._handleError(err, this._trans.__('File Load Error for %1', name));\n            throw err;\n        });\n    }\n    /**\n     * Save a file, dealing with conflicts.\n     */\n    _maybeSave(options) {\n        const path = this._path;\n        // Make sure the file has not changed on disk.\n        const promise = this._manager.contents.get(path, {\n            content: false,\n            hash: true,\n            contentProviderId: this._contentProviderId\n        });\n        return promise.then(model => {\n            var _a, _b, _c, _d;\n            if (this.isDisposed) {\n                return Promise.reject(new Error('Disposed'));\n            }\n            // Since jupyter server may provide hash in model, we compare hash first\n            const hashAvailable = ((_a = this.contentsModel) === null || _a === void 0 ? void 0 : _a.hash) !== undefined &&\n                ((_b = this.contentsModel) === null || _b === void 0 ? void 0 : _b.hash) !== null &&\n                model.hash !== undefined &&\n                model.hash !== null;\n            const hClient = (_c = this.contentsModel) === null || _c === void 0 ? void 0 : _c.hash;\n            const hDisk = model.hash;\n            if (hashAvailable && hClient !== hDisk) {\n                console.warn(`Different hash found for ${this.path}`);\n                return this._raiseConflict(model, options);\n            }\n            // When hash is not provided, we compare last_modified\n            // We want to check last_modified (disk) > last_modified (client)\n            // (our last save)\n            // In some cases the filesystem reports an inconsistent time, so we allow buffer when comparing.\n            const lastModifiedCheckMargin = this._lastModifiedCheckMargin;\n            const modified = (_d = this.contentsModel) === null || _d === void 0 ? void 0 : _d.last_modified;\n            const tClient = modified ? new Date(modified) : new Date();\n            const tDisk = new Date(model.last_modified);\n            if (!hashAvailable &&\n                modified &&\n                tDisk.getTime() - tClient.getTime() > lastModifiedCheckMargin) {\n                console.warn(`Last saving performed ${tClient} ` +\n                    `while the current file seems to have been saved ` +\n                    `${tDisk}`);\n                return this._raiseConflict(model, options);\n            }\n            return this._manager.contents\n                .save(path, options)\n                .then(async (contentsModel) => {\n                const model = await this._manager.contents.get(path, {\n                    content: false,\n                    hash: true,\n                    contentProviderId: this._contentProviderId\n                });\n                return {\n                    ...contentsModel,\n                    hash: model.hash,\n                    hash_algorithm: model.hash_algorithm\n                };\n            });\n        }, err => {\n            if (err.response && err.response.status === 404) {\n                return this._manager.contents\n                    .save(path, options)\n                    .then(async (contentsModel) => {\n                    const model = await this._manager.contents.get(path, {\n                        content: false,\n                        hash: true,\n                        contentProviderId: this._contentProviderId\n                    });\n                    return {\n                        ...contentsModel,\n                        hash: model.hash,\n                        hash_algorithm: model.hash_algorithm\n                    };\n                });\n            }\n            throw err;\n        });\n    }\n    /**\n     * Handle a save/load error with a dialog.\n     */\n    async _handleError(err, title) {\n        await showErrorMessage(title, err);\n        return;\n    }\n    /**\n     * Add a checkpoint if the file is writable.\n     */\n    _maybeCheckpoint(force) {\n        let promise = Promise.resolve(void 0);\n        if (!this.canSave) {\n            return promise;\n        }\n        if (force) {\n            promise = this.createCheckpoint().then( /* no-op */);\n        }\n        else {\n            promise = this.listCheckpoints().then(checkpoints => {\n                if (!this.isDisposed && !checkpoints.length && this.canSave) {\n                    return this.createCheckpoint().then( /* no-op */);\n                }\n            });\n        }\n        return promise.catch(err => {\n            // Handle a read-only folder.\n            if (!err.response || err.response.status !== 403) {\n                throw err;\n            }\n        });\n    }\n    /**\n     * Handle a time conflict.\n     */\n    _raiseConflict(model, options) {\n        if (this._conflictModalIsOpen) {\n            const error = new Error('Modal is already displayed');\n            error.name = 'ModalDuplicateError';\n            return Promise.reject(error);\n        }\n        const body = this._trans.__(`\"%1\" has changed on disk since the last time it was opened or saved.\nDo you want to overwrite the file on disk with the version open here,\nor load the version on disk (revert)?`, this.path);\n        const revertBtn = Dialog.okButton({\n            label: this._trans.__('Revert'),\n            actions: ['revert']\n        });\n        const overwriteBtn = Dialog.warnButton({\n            label: this._trans.__('Overwrite'),\n            actions: ['overwrite']\n        });\n        this._conflictModalIsOpen = true;\n        return showDialog({\n            title: this._trans.__('File Changed'),\n            body,\n            buttons: [Dialog.cancelButton(), revertBtn, overwriteBtn]\n        }).then(result => {\n            this._conflictModalIsOpen = false;\n            if (this.isDisposed) {\n                return Promise.reject(new Error('Disposed'));\n            }\n            if (result.button.actions.includes('overwrite')) {\n                return this._manager.contents.save(this._path, {\n                    ...options,\n                    contentProviderId: this._contentProviderId\n                });\n            }\n            if (result.button.actions.includes('revert')) {\n                return this.revert().then(() => {\n                    return model;\n                });\n            }\n            const error = new Error('Cancel');\n            error.name = 'ModalCancelError';\n            return Promise.reject(error); // Otherwise cancel the save.\n        });\n    }\n    /**\n     * Handle a time conflict.\n     */\n    _maybeOverWrite(path) {\n        const body = this._trans.__('\"%1\" already exists. Do you want to replace it?', path);\n        const overwriteBtn = Dialog.warnButton({\n            label: this._trans.__('Overwrite'),\n            accept: true\n        });\n        return showDialog({\n            title: this._trans.__('File Overwrite?'),\n            body,\n            buttons: [Dialog.cancelButton(), overwriteBtn]\n        }).then(result => {\n            if (this.isDisposed) {\n                return Promise.reject(new Error('Disposed'));\n            }\n            if (result.button.accept) {\n                return this._manager.contents.delete(path).then(() => {\n                    return this._finishSaveAs(path);\n                });\n            }\n        });\n    }\n    /**\n     * Finish a saveAs operation given a new path.\n     */\n    async _finishSaveAs(newPath) {\n        this._saveState.emit('started');\n        try {\n            await this._manager.ready;\n            const options = this._createSaveOptions();\n            await this._manager.contents.save(newPath, options);\n            await this._maybeCheckpoint(true);\n            // Emit completion.\n            this._saveState.emit('completed');\n        }\n        catch (err) {\n            // If the save has been canceled by the user,\n            // throw the error so that whoever called save()\n            // can decide what to do.\n            if (err.message === 'Cancel' ||\n                err.message === 'Modal is already displayed') {\n                throw err;\n            }\n            // Otherwise show an error message and throw the error.\n            const localPath = this._manager.contents.localPath(this._path);\n            const name = PathExt.basename(localPath);\n            void this._handleError(err, this._trans.__('File Save Error for %1', name));\n            // Emit failure.\n            this._saveState.emit('failed');\n            return;\n        }\n    }\n    _createSaveOptions() {\n        let content = null;\n        if (this._factory.fileFormat === 'json') {\n            content = this._model.toJSON();\n        }\n        else {\n            content = this._model.toString();\n            if (this._lineEnding) {\n                content = content.replace(/\\n/g, this._lineEnding);\n            }\n        }\n        return {\n            type: this._factory.contentType,\n            format: this._factory.fileFormat,\n            content\n        };\n    }\n}\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Get a new file path from the user.\n     */\n    function getSavePath(path, translator) {\n        translator = translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        const saveBtn = Dialog.okButton({ label: trans.__('Save'), accept: true });\n        return showDialog({\n            title: trans.__('Save File As…'),\n            body: new SaveWidget(path),\n            buttons: [Dialog.cancelButton(), saveBtn]\n        }).then(result => {\n            var _a;\n            if (result.button.accept) {\n                return (_a = result.value) !== null && _a !== void 0 ? _a : undefined;\n            }\n            return;\n        });\n    }\n    Private.getSavePath = getSavePath;\n    /**\n     * A no-op function.\n     */\n    function noOp() {\n        /* no-op */\n    }\n    Private.noOp = noOp;\n    /*\n     * A widget that gets a file path from a user.\n     */\n    class SaveWidget extends Widget {\n        /**\n         * Construct a new save widget.\n         */\n        constructor(path) {\n            super({ node: createSaveNode(path) });\n        }\n        /**\n         * Get the value for the widget.\n         */\n        getValue() {\n            return this.node.value;\n        }\n    }\n    /**\n     * Create the node for a save widget.\n     */\n    function createSaveNode(path) {\n        const input = document.createElement('input');\n        input.value = path;\n        return input;\n    }\n})(Private || (Private = {}));\n//# sourceMappingURL=context.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { ReactWidget } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport * as React from 'react';\n/**\n * create readonly label toolbar item\n */\nexport function createReadonlyLabel(panel, translator) {\n    var _a;\n    let trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n    return ReactWidget.create(React.createElement(\"div\", null,\n        React.createElement(\"span\", { className: \"jp-ToolbarLabelComponent\", title: trans.__(`Document is read-only. \"Save\" is disabled; use \"Save as…\" instead`) }, trans.__(`%1 is read-only`, (_a = panel.context.contentsModel) === null || _a === void 0 ? void 0 : _a.type))));\n}\n//# sourceMappingURL=components.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { MainAreaWidget, setToolbar } from '@jupyterlab/apputils';\nimport { CodeEditor } from '@jupyterlab/codeeditor';\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { Signal } from '@lumino/signaling';\nimport { createReadonlyLabel } from './components';\n/**\n * The default implementation of a document model.\n */\nexport class DocumentModel extends CodeEditor.Model {\n    /**\n     * Construct a new document model.\n     */\n    constructor(options = {}) {\n        var _a;\n        super({ sharedModel: options.sharedModel });\n        this._defaultLang = '';\n        this._dirty = false;\n        this._readOnly = false;\n        this._contentChanged = new Signal(this);\n        this._stateChanged = new Signal(this);\n        this._defaultLang = (_a = options.languagePreference) !== null && _a !== void 0 ? _a : '';\n        this._collaborationEnabled = !!options.collaborationEnabled;\n        this.sharedModel.changed.connect(this._onStateChanged, this);\n    }\n    /**\n     * A signal emitted when the document content changes.\n     */\n    get contentChanged() {\n        return this._contentChanged;\n    }\n    /**\n     * A signal emitted when the document state changes.\n     */\n    get stateChanged() {\n        return this._stateChanged;\n    }\n    /**\n     * The dirty state of the document.\n     */\n    get dirty() {\n        return this._dirty;\n    }\n    set dirty(newValue) {\n        const oldValue = this._dirty;\n        if (newValue === oldValue) {\n            return;\n        }\n        this._dirty = newValue;\n        this.triggerStateChange({\n            name: 'dirty',\n            oldValue,\n            newValue\n        });\n    }\n    /**\n     * The read only state of the document.\n     */\n    get readOnly() {\n        return this._readOnly;\n    }\n    set readOnly(newValue) {\n        if (newValue === this._readOnly) {\n            return;\n        }\n        const oldValue = this._readOnly;\n        this._readOnly = newValue;\n        this.triggerStateChange({ name: 'readOnly', oldValue, newValue });\n    }\n    /**\n     * The default kernel name of the document.\n     *\n     * #### Notes\n     * This is a read-only property.\n     */\n    get defaultKernelName() {\n        return '';\n    }\n    /**\n     * The default kernel language of the document.\n     *\n     * #### Notes\n     * This is a read-only property.\n     */\n    get defaultKernelLanguage() {\n        return this._defaultLang;\n    }\n    /**\n     * Whether the model is collaborative or not.\n     */\n    get collaborative() {\n        return this._collaborationEnabled;\n    }\n    /**\n     * Serialize the model to a string.\n     */\n    toString() {\n        return this.sharedModel.getSource();\n    }\n    /**\n     * Deserialize the model from a string.\n     *\n     * #### Notes\n     * Should emit a [contentChanged] signal.\n     */\n    fromString(value) {\n        this.sharedModel.setSource(value);\n    }\n    /**\n     * Serialize the model to JSON.\n     */\n    toJSON() {\n        return JSON.parse(this.sharedModel.getSource() || 'null');\n    }\n    /**\n     * Deserialize the model from JSON.\n     *\n     * #### Notes\n     * Should emit a [contentChanged] signal.\n     */\n    fromJSON(value) {\n        this.fromString(JSON.stringify(value));\n    }\n    /**\n     * Initialize the model with its current state.\n     */\n    initialize() {\n        return;\n    }\n    /**\n     * Trigger a state change signal.\n     */\n    triggerStateChange(args) {\n        this._stateChanged.emit(args);\n    }\n    /**\n     * Trigger a content changed signal.\n     */\n    triggerContentChange() {\n        this._contentChanged.emit(void 0);\n        this.dirty = true;\n    }\n    _onStateChanged(sender, changes) {\n        if (changes.sourceChange) {\n            this.triggerContentChange();\n        }\n        if (changes.stateChange) {\n            changes.stateChange.forEach(value => {\n                if (value.name === 'dirty') {\n                    // Setting `dirty` will trigger the state change.\n                    // We always set `dirty` because the shared model state\n                    // and the local attribute are synchronized one way shared model -> _dirty\n                    this.dirty = value.newValue;\n                }\n                else if (value.oldValue !== value.newValue) {\n                    this.triggerStateChange({\n                        newValue: undefined,\n                        oldValue: undefined,\n                        ...value\n                    });\n                }\n            });\n        }\n    }\n}\n/**\n * An implementation of a model factory for text files.\n */\nexport class TextModelFactory {\n    /**\n     * Instantiates a TextModelFactory.\n     */\n    constructor(collaborative) {\n        this._isDisposed = false;\n        this._collaborative = collaborative !== null && collaborative !== void 0 ? collaborative : true;\n    }\n    /**\n     * The name of the model type.\n     *\n     * #### Notes\n     * This is a read-only property.\n     */\n    get name() {\n        return 'text';\n    }\n    /**\n     * The type of the file.\n     *\n     * #### Notes\n     * This is a read-only property.\n     */\n    get contentType() {\n        return 'file';\n    }\n    /**\n     * The format of the file.\n     *\n     * This is a read-only property.\n     */\n    get fileFormat() {\n        return 'text';\n    }\n    /**\n     * Whether the model is collaborative or not.\n     */\n    get collaborative() {\n        return this._collaborative;\n    }\n    /**\n     * Get whether the model factory has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the model factory.\n     */\n    dispose() {\n        this._isDisposed = true;\n    }\n    /**\n     * Create a new model.\n     *\n     * @param options - Model options.\n     *\n     * @returns A new document model.\n     */\n    createNew(options = {}) {\n        const collaborative = options.collaborationEnabled && this.collaborative;\n        return new DocumentModel({\n            ...options,\n            collaborationEnabled: collaborative\n        });\n    }\n    /**\n     * Get the preferred kernel language given a file path.\n     */\n    preferredLanguage(path) {\n        return '';\n    }\n}\n/**\n * An implementation of a model factory for base64 files.\n */\nexport class Base64ModelFactory extends TextModelFactory {\n    /**\n     * The name of the model type.\n     *\n     * #### Notes\n     * This is a read-only property.\n     */\n    get name() {\n        return 'base64';\n    }\n    /**\n     * The type of the file.\n     *\n     * #### Notes\n     * This is a read-only property.\n     */\n    get contentType() {\n        return 'file';\n    }\n    /**\n     * The format of the file.\n     *\n     * This is a read-only property.\n     */\n    get fileFormat() {\n        return 'base64';\n    }\n}\n/**\n * The default implementation of a widget factory.\n */\nexport class ABCWidgetFactory {\n    /**\n     * Construct a new `ABCWidgetFactory`.\n     */\n    constructor(options) {\n        this._isDisposed = false;\n        this._widgetCreated = new Signal(this);\n        this._translator = options.translator || nullTranslator;\n        this._name = options.name;\n        this._label = options.label || options.name;\n        this._readOnly = options.readOnly === undefined ? false : options.readOnly;\n        this._defaultFor = options.defaultFor ? options.defaultFor.slice() : [];\n        this._defaultRendered = (options.defaultRendered || []).slice();\n        this._fileTypes = options.fileTypes.slice();\n        this._modelName = options.modelName || 'text';\n        this._preferKernel = !!options.preferKernel;\n        this._canStartKernel = !!options.canStartKernel;\n        this._shutdownOnClose = !!options.shutdownOnClose;\n        this._autoStartDefault = !!options.autoStartDefault;\n        this._toolbarFactory = options.toolbarFactory;\n        this._contentProviderId = options.contentProviderId;\n    }\n    /**\n     * A signal emitted when a widget is created.\n     */\n    get widgetCreated() {\n        return this._widgetCreated;\n    }\n    /**\n     * Get whether the model factory has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources used by the document manager.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n    }\n    /**\n     * Whether the widget factory is read only.\n     */\n    get readOnly() {\n        return this._readOnly;\n    }\n    /**\n     * A unique name identifying of the widget.\n     */\n    get name() {\n        return this._name;\n    }\n    /**\n     * The label of the widget to display in dialogs.\n     * If not given, name is used instead.\n     */\n    get label() {\n        return this._label;\n    }\n    /**\n     * The file types the widget can view.\n     */\n    get fileTypes() {\n        return this._fileTypes.slice();\n    }\n    /**\n     * The registered name of the model type used to create the widgets.\n     */\n    get modelName() {\n        return this._modelName;\n    }\n    /**\n     * The file types for which the factory should be the default.\n     */\n    get defaultFor() {\n        return this._defaultFor.slice();\n    }\n    /**\n     * The file types for which the factory should be the default for\n     * rendering a document model, if different from editing.\n     */\n    get defaultRendered() {\n        return this._defaultRendered.slice();\n    }\n    /**\n     * Whether the widgets prefer having a kernel started.\n     */\n    get preferKernel() {\n        return this._preferKernel;\n    }\n    /**\n     * Whether the widgets can start a kernel when opened.\n     */\n    get canStartKernel() {\n        return this._canStartKernel;\n    }\n    /**\n     * The application language translator.\n     */\n    get translator() {\n        return this._translator;\n    }\n    /**\n     * Whether the kernel should be shutdown when the widget is closed.\n     */\n    get shutdownOnClose() {\n        return this._shutdownOnClose;\n    }\n    set shutdownOnClose(value) {\n        this._shutdownOnClose = value;\n    }\n    /**\n     * Whether to automatically select the preferred kernel during a kernel start\n     */\n    get autoStartDefault() {\n        return this._autoStartDefault;\n    }\n    set autoStartDefault(value) {\n        this._autoStartDefault = value;\n    }\n    /**\n     * Create a new widget given a document model and a context.\n     *\n     * #### Notes\n     * It should emit the [widgetCreated] signal with the new widget.\n     */\n    createNew(context, source) {\n        var _a;\n        // Create the new widget\n        const widget = this.createNewWidget(context, source);\n        // Add toolbar\n        setToolbar(widget, (_a = this._toolbarFactory) !== null && _a !== void 0 ? _a : this.defaultToolbarFactory.bind(this));\n        // Emit widget created signal\n        this._widgetCreated.emit(widget);\n        return widget;\n    }\n    /**\n     * Identifier of the content provider required for the widget (if any).\n     *\n     * Throws Error if the content provider was already set.\n     *\n     * @experimental\n     */\n    get contentProviderId() {\n        return this._contentProviderId;\n    }\n    set contentProviderId(value) {\n        if (this._contentProviderId && value !== this._contentProviderId) {\n            throw Error(`Cannot change content provider on factory with an existing provider: ${this._contentProviderId}`);\n        }\n        this._contentProviderId = value;\n    }\n    /**\n     * Default factory for toolbar items to be added after the widget is created.\n     */\n    defaultToolbarFactory(widget) {\n        return [];\n    }\n}\n/**\n * The class name added to a dirty widget.\n */\nconst DIRTY_CLASS = 'jp-mod-dirty';\n/**\n * A document widget implementation.\n */\nexport class DocumentWidget extends MainAreaWidget {\n    constructor(options) {\n        var _a;\n        // Include the context ready promise in the widget reveal promise\n        options.reveal = Promise.all([options.reveal, options.context.ready]);\n        super(options);\n        this._trans = ((_a = options.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n        this.context = options.context;\n        // Handle context path changes\n        this.context.pathChanged.connect(this._onPathChanged, this);\n        this._onPathChanged(this.context, this.context.path);\n        // Listen for changes in the dirty state.\n        this.context.model.stateChanged.connect(this._onModelStateChanged, this);\n        void this.context.ready.then(() => {\n            this._handleDirtyState();\n        });\n        // listen for changes to the title object\n        this.title.changed.connect(this._onTitleChanged, this);\n    }\n    /**\n     * Set URI fragment identifier.\n     */\n    setFragment(fragment) {\n        /* no-op */\n    }\n    /**\n     * Handle a title change.\n     */\n    async _onTitleChanged(_sender) {\n        const validNameExp = /[\\/\\\\:]/;\n        const name = this.title.label;\n        // Use localPath to avoid the drive name\n        const filename = this.context.localPath.split('/').pop() || this.context.localPath;\n        if (name === filename) {\n            return;\n        }\n        if (name.length > 0 && !validNameExp.test(name)) {\n            const oldPath = this.context.path;\n            await this.context.rename(name);\n            if (this.context.path !== oldPath) {\n                // Rename succeeded\n                return;\n            }\n        }\n        // Reset title if name is invalid or rename fails\n        this.title.label = filename;\n    }\n    /**\n     * Handle a path change.\n     */\n    _onPathChanged(sender, path) {\n        this.title.label = PathExt.basename(sender.localPath);\n        // The document is not untitled any more.\n        this.isUntitled = false;\n    }\n    /**\n     * Handle a change to the context model state.\n     */\n    _onModelStateChanged(sender, args) {\n        var _a;\n        if (args.name === 'dirty') {\n            this._handleDirtyState();\n        }\n        if (!this.context.model.dirty) {\n            if (((_a = this.context.contentsModel) === null || _a === void 0 ? void 0 : _a.writable) === false) {\n                const readOnlyIndicator = createReadonlyLabel(this);\n                let roi = this.toolbar.insertBefore('kernelName', 'read-only-indicator', readOnlyIndicator);\n                if (!roi) {\n                    this.toolbar.addItem('read-only-indicator', readOnlyIndicator);\n                }\n            }\n        }\n    }\n    /**\n     * Handle the dirty state of the context model.\n     */\n    _handleDirtyState() {\n        if (this.context.model.dirty &&\n            !this.title.className.includes(DIRTY_CLASS)) {\n            this.title.className += ` ${DIRTY_CLASS}`;\n        }\n        else {\n            this.title.className = this.title.className.replace(DIRTY_CLASS, '');\n        }\n    }\n}\n//# sourceMappingURL=default.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Printing, showErrorMessage } from '@jupyterlab/apputils';\nimport { IEditorMimeTypeService } from '@jupyterlab/codeeditor';\nimport { ActivityMonitor } from '@jupyterlab/coreutils';\nimport { MimeModel } from '@jupyterlab/rendermime';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { JSONExt, PromiseDelegate } from '@lumino/coreutils';\nimport { MessageLoop } from '@lumino/messaging';\nimport { StackedLayout, Widget } from '@lumino/widgets';\nimport { ABCWidgetFactory, DocumentWidget } from './default';\n/**\n * A content widget for a rendered mimetype document.\n */\nexport class MimeContent extends Widget {\n    /**\n     * Construct a new widget.\n     */\n    constructor(options) {\n        super();\n        /**\n         * A bound change callback.\n         */\n        this._changeCallback = (options) => {\n            if (!options.data || !options.data[this.mimeType]) {\n                return;\n            }\n            const data = options.data[this.mimeType];\n            if (typeof data === 'string') {\n                if (data !== this._context.model.toString()) {\n                    this._context.model.fromString(data);\n                }\n            }\n            else if (data !== null &&\n                data !== undefined &&\n                !JSONExt.deepEqual(data, this._context.model.toJSON())) {\n                this._context.model.fromJSON(data);\n            }\n        };\n        this._fragment = '';\n        this._ready = new PromiseDelegate();\n        this._isRendering = false;\n        this._renderRequested = false;\n        this.addClass('jp-MimeDocument');\n        this.translator = options.translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        this.mimeType = options.mimeType;\n        this._dataType = options.dataType || 'string';\n        this._context = options.context;\n        this.renderer = options.renderer;\n        const layout = (this.layout = new StackedLayout());\n        layout.addWidget(this.renderer);\n        this._context.ready\n            .then(() => {\n            return this._render();\n        })\n            .then(() => {\n            // After rendering for the first time, send an activation request if we\n            // are currently focused.\n            if (this.node === document.activeElement) {\n                // We want to synchronously send (not post) the activate message, while\n                // we know this node still has focus.\n                MessageLoop.sendMessage(this.renderer, Widget.Msg.ActivateRequest);\n            }\n            // Throttle the rendering rate of the widget.\n            this._monitor = new ActivityMonitor({\n                signal: this._context.model.contentChanged,\n                timeout: options.renderTimeout\n            });\n            this._monitor.activityStopped.connect(this.update, this);\n            this._ready.resolve(undefined);\n        })\n            .catch(reason => {\n            // Dispose the document if rendering fails.\n            requestAnimationFrame(() => {\n                this.dispose();\n            });\n            void showErrorMessage(this._trans.__('Renderer Failure: %1', this._context.path), reason);\n        });\n    }\n    /**\n     * Print method. Deferred to the renderer.\n     */\n    [Printing.symbol]() {\n        return Printing.getPrintFunction(this.renderer);\n    }\n    /**\n     * A promise that resolves when the widget is ready.\n     */\n    get ready() {\n        return this._ready.promise;\n    }\n    /**\n     * Set URI fragment identifier.\n     */\n    setFragment(fragment) {\n        this._fragment = fragment;\n        this.update();\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        if (this._monitor) {\n            this._monitor.dispose();\n        }\n        this._monitor = null;\n        super.dispose();\n    }\n    /**\n     * Handle an `update-request` message to the widget.\n     */\n    onUpdateRequest(msg) {\n        if (this._context.isReady) {\n            void this._render();\n            this._fragment = '';\n        }\n    }\n    /**\n     * Render the mime content.\n     */\n    async _render() {\n        if (this.isDisposed) {\n            return;\n        }\n        // Since rendering is async, we note render requests that happen while we\n        // actually are rendering for a future rendering.\n        if (this._isRendering) {\n            this._renderRequested = true;\n            return;\n        }\n        // Set up for this rendering pass.\n        this._renderRequested = false;\n        const context = this._context;\n        const model = context.model;\n        const data = {};\n        if (this._dataType === 'string') {\n            data[this.mimeType] = model.toString();\n        }\n        else {\n            data[this.mimeType] = model.toJSON();\n        }\n        const mimeModel = new MimeModel({\n            data,\n            callback: this._changeCallback,\n            metadata: { fragment: this._fragment }\n        });\n        try {\n            // Do the rendering asynchronously.\n            this._isRendering = true;\n            await this.renderer.renderModel(mimeModel);\n            this._isRendering = false;\n            // If there is an outstanding request to render, go ahead and render\n            if (this._renderRequested) {\n                return this._render();\n            }\n        }\n        catch (reason) {\n            // Dispose the document if rendering fails.\n            requestAnimationFrame(() => {\n                this.dispose();\n            });\n            void showErrorMessage(this._trans.__('Renderer Failure: %1', context.path), reason);\n        }\n    }\n}\n/**\n * A document widget for mime content.\n */\nexport class MimeDocument extends DocumentWidget {\n    setFragment(fragment) {\n        this.content.setFragment(fragment);\n    }\n}\n/**\n * An implementation of a widget factory for a rendered mimetype document.\n */\nexport class MimeDocumentFactory extends ABCWidgetFactory {\n    /**\n     * Construct a new mimetype widget factory.\n     */\n    constructor(options) {\n        super(Private.createRegistryOptions(options));\n        this._rendermime = options.rendermime;\n        this._renderTimeout = options.renderTimeout || 1000;\n        this._dataType = options.dataType || 'string';\n        this._fileType = options.primaryFileType;\n        this._factory = options.factory;\n    }\n    /**\n     * Create a new widget given a context.\n     */\n    createNewWidget(context) {\n        var _a, _b;\n        const ft = this._fileType;\n        const mimeType = (ft === null || ft === void 0 ? void 0 : ft.mimeTypes.length)\n            ? ft.mimeTypes[0]\n            : IEditorMimeTypeService.defaultMimeType;\n        const rendermime = this._rendermime.clone({\n            resolver: context.urlResolver\n        });\n        let renderer;\n        if (this._factory && this._factory.mimeTypes.includes(mimeType)) {\n            renderer = this._factory.createRenderer({\n                mimeType,\n                resolver: rendermime.resolver,\n                sanitizer: rendermime.sanitizer,\n                linkHandler: rendermime.linkHandler,\n                latexTypesetter: rendermime.latexTypesetter,\n                markdownParser: rendermime.markdownParser\n            });\n        }\n        else {\n            renderer = rendermime.createRenderer(mimeType);\n        }\n        const content = new MimeContent({\n            context,\n            renderer,\n            mimeType,\n            renderTimeout: this._renderTimeout,\n            dataType: this._dataType\n        });\n        content.title.icon = ft === null || ft === void 0 ? void 0 : ft.icon;\n        content.title.iconClass = (_a = ft === null || ft === void 0 ? void 0 : ft.iconClass) !== null && _a !== void 0 ? _a : '';\n        content.title.iconLabel = (_b = ft === null || ft === void 0 ? void 0 : ft.iconLabel) !== null && _b !== void 0 ? _b : '';\n        const widget = new MimeDocument({ content, context });\n        return widget;\n    }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Create the document registry options.\n     */\n    function createRegistryOptions(options) {\n        return {\n            ...options,\n            readOnly: true\n        };\n    }\n    Private.createRegistryOptions = createRegistryOptions;\n})(Private || (Private = {}));\n//# sourceMappingURL=mimedocument.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { fileIcon, folderIcon, imageIcon, jsonIcon, juliaIcon, markdownIcon, notebookIcon, pdfIcon, pythonIcon, rKernelIcon, spreadsheetIcon, yamlIcon } from '@jupyterlab/ui-components';\nimport { ArrayExt, find } from '@lumino/algorithm';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Signal } from '@lumino/signaling';\nimport { TextModelFactory } from './default';\n/**\n * The document registry.\n */\nexport class DocumentRegistry {\n    /**\n     * Construct a new document registry.\n     */\n    constructor(options = {}) {\n        this._modelFactories = Object.create(null);\n        this._widgetFactories = Object.create(null);\n        this._defaultWidgetFactory = '';\n        this._defaultWidgetFactoryOverrides = Object.create(null);\n        this._defaultWidgetFactories = Object.create(null);\n        this._defaultRenderedWidgetFactories = Object.create(null);\n        this._widgetFactoriesForFileType = Object.create(null);\n        this._fileTypes = [];\n        this._extenders = Object.create(null);\n        this._changed = new Signal(this);\n        this._isDisposed = false;\n        const factory = options.textModelFactory;\n        this.translator = options.translator || nullTranslator;\n        if (factory && factory.name !== 'text') {\n            throw new Error('Text model factory must have the name `text`');\n        }\n        this._modelFactories['text'] = factory || new TextModelFactory(true);\n        const fts = options.initialFileTypes ||\n            DocumentRegistry.getDefaultFileTypes(this.translator);\n        fts.forEach(ft => {\n            const value = {\n                ...DocumentRegistry.getFileTypeDefaults(this.translator),\n                ...ft\n            };\n            this._fileTypes.push(value);\n        });\n    }\n    /**\n     * A signal emitted when the registry has changed.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Get whether the document registry has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the document registry.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        for (const modelName in this._modelFactories) {\n            this._modelFactories[modelName].dispose();\n        }\n        for (const widgetName in this._widgetFactories) {\n            this._widgetFactories[widgetName].dispose();\n        }\n        for (const widgetName in this._extenders) {\n            this._extenders[widgetName].length = 0;\n        }\n        this._fileTypes.length = 0;\n        Signal.clearData(this);\n    }\n    /**\n     * Add a widget factory to the registry.\n     *\n     * @param factory - The factory instance to register.\n     *\n     * @returns A disposable which will unregister the factory.\n     *\n     * #### Notes\n     * If a factory with the given `'name'` is already registered,\n     * a warning will be logged, and this will be a no-op.\n     * If `'*'` is given as a default extension, the factory will be registered\n     * as the global default.\n     * If an extension or global default is already registered, this factory\n     * will override the existing default.\n     * The factory cannot be named an empty string or the string `'default'`.\n     */\n    addWidgetFactory(factory) {\n        const name = factory.name.toLowerCase();\n        if (!name || name === 'default') {\n            throw Error('Invalid factory name');\n        }\n        if (this._widgetFactories[name]) {\n            console.warn(`Duplicate registered factory ${name}`);\n            return new DisposableDelegate(Private.noOp);\n        }\n        this._widgetFactories[name] = factory;\n        for (const ft of factory.defaultFor || []) {\n            if (factory.fileTypes.indexOf(ft) === -1) {\n                continue;\n            }\n            if (ft === '*') {\n                this._defaultWidgetFactory = name;\n            }\n            else {\n                this._defaultWidgetFactories[ft] = name;\n            }\n        }\n        for (const ft of factory.defaultRendered || []) {\n            if (factory.fileTypes.indexOf(ft) === -1) {\n                continue;\n            }\n            this._defaultRenderedWidgetFactories[ft] = name;\n        }\n        // For convenience, store a mapping of file type name -> name\n        for (const ft of factory.fileTypes) {\n            if (!this._widgetFactoriesForFileType[ft]) {\n                this._widgetFactoriesForFileType[ft] = [];\n            }\n            this._widgetFactoriesForFileType[ft].push(name);\n        }\n        this._changed.emit({\n            type: 'widgetFactory',\n            name,\n            change: 'added'\n        });\n        return new DisposableDelegate(() => {\n            delete this._widgetFactories[name];\n            if (this._defaultWidgetFactory === name) {\n                this._defaultWidgetFactory = '';\n            }\n            for (const ext of Object.keys(this._defaultWidgetFactories)) {\n                if (this._defaultWidgetFactories[ext] === name) {\n                    delete this._defaultWidgetFactories[ext];\n                }\n            }\n            for (const ext of Object.keys(this._defaultRenderedWidgetFactories)) {\n                if (this._defaultRenderedWidgetFactories[ext] === name) {\n                    delete this._defaultRenderedWidgetFactories[ext];\n                }\n            }\n            for (const ext of Object.keys(this._widgetFactoriesForFileType)) {\n                ArrayExt.removeFirstOf(this._widgetFactoriesForFileType[ext], name);\n                if (this._widgetFactoriesForFileType[ext].length === 0) {\n                    delete this._widgetFactoriesForFileType[ext];\n                }\n            }\n            for (const ext of Object.keys(this._defaultWidgetFactoryOverrides)) {\n                if (this._defaultWidgetFactoryOverrides[ext] === name) {\n                    delete this._defaultWidgetFactoryOverrides[ext];\n                }\n            }\n            this._changed.emit({\n                type: 'widgetFactory',\n                name,\n                change: 'removed'\n            });\n        });\n    }\n    /**\n     * Add a model factory to the registry.\n     *\n     * @param factory - The factory instance.\n     *\n     * @returns A disposable which will unregister the factory.\n     *\n     * #### Notes\n     * If a factory with the given `name` is already registered, or\n     * the given factory is already registered, a warning will be logged\n     * and this will be a no-op.\n     */\n    addModelFactory(factory) {\n        const name = factory.name.toLowerCase();\n        if (this._modelFactories[name]) {\n            console.warn(`Duplicate registered factory ${name}`);\n            return new DisposableDelegate(Private.noOp);\n        }\n        this._modelFactories[name] = factory;\n        this._changed.emit({\n            type: 'modelFactory',\n            name,\n            change: 'added'\n        });\n        return new DisposableDelegate(() => {\n            delete this._modelFactories[name];\n            this._changed.emit({\n                type: 'modelFactory',\n                name,\n                change: 'removed'\n            });\n        });\n    }\n    /**\n     * Add a widget extension to the registry.\n     *\n     * @param widgetName - The name of the widget factory.\n     *\n     * @param extension - A widget extension.\n     *\n     * @returns A disposable which will unregister the extension.\n     *\n     * #### Notes\n     * If the extension is already registered for the given\n     * widget name, a warning will be logged and this will be a no-op.\n     */\n    addWidgetExtension(widgetName, extension) {\n        widgetName = widgetName.toLowerCase();\n        if (!(widgetName in this._extenders)) {\n            this._extenders[widgetName] = [];\n        }\n        const extenders = this._extenders[widgetName];\n        const index = ArrayExt.firstIndexOf(extenders, extension);\n        if (index !== -1) {\n            console.warn(`Duplicate registered extension for ${widgetName}`);\n            return new DisposableDelegate(Private.noOp);\n        }\n        this._extenders[widgetName].push(extension);\n        this._changed.emit({\n            type: 'widgetExtension',\n            name: widgetName,\n            change: 'added'\n        });\n        return new DisposableDelegate(() => {\n            ArrayExt.removeFirstOf(this._extenders[widgetName], extension);\n            this._changed.emit({\n                type: 'widgetExtension',\n                name: widgetName,\n                change: 'removed'\n            });\n        });\n    }\n    /**\n     * Add a file type to the document registry.\n     *\n     * @param fileType - The file type object to register.\n     * @param factories - Optional factories to use for the file type.\n     *\n     * @returns A disposable which will unregister the command.\n     *\n     * #### Notes\n     * These are used to populate the \"Create New\" dialog.\n     *\n     * If no default factory exists for the file type, the first factory will\n     * be defined as default factory.\n     */\n    addFileType(fileType, factories) {\n        const value = {\n            ...DocumentRegistry.getFileTypeDefaults(this.translator),\n            ...fileType,\n            // fall back to fileIcon if needed\n            ...(!(fileType.icon || fileType.iconClass) && { icon: fileIcon })\n        };\n        this._fileTypes.push(value);\n        // Add the filetype to the factory - filetype mapping\n        //  We do not change the factory itself\n        if (factories) {\n            const fileTypeName = value.name.toLowerCase();\n            factories\n                .map(factory => factory.toLowerCase())\n                .forEach(factory => {\n                if (!this._widgetFactoriesForFileType[fileTypeName]) {\n                    this._widgetFactoriesForFileType[fileTypeName] = [];\n                }\n                if (!this._widgetFactoriesForFileType[fileTypeName].includes(factory)) {\n                    this._widgetFactoriesForFileType[fileTypeName].push(factory);\n                }\n            });\n            if (!this._defaultWidgetFactories[fileTypeName]) {\n                this._defaultWidgetFactories[fileTypeName] =\n                    this._widgetFactoriesForFileType[fileTypeName][0];\n            }\n        }\n        this._changed.emit({\n            type: 'fileType',\n            name: value.name,\n            change: 'added'\n        });\n        return new DisposableDelegate(() => {\n            ArrayExt.removeFirstOf(this._fileTypes, value);\n            if (factories) {\n                const fileTypeName = value.name.toLowerCase();\n                for (const name of factories.map(factory => factory.toLowerCase())) {\n                    ArrayExt.removeFirstOf(this._widgetFactoriesForFileType[fileTypeName], name);\n                }\n                if (this._defaultWidgetFactories[fileTypeName] ===\n                    factories[0].toLowerCase()) {\n                    delete this._defaultWidgetFactories[fileTypeName];\n                }\n            }\n            this._changed.emit({\n                type: 'fileType',\n                name: fileType.name,\n                change: 'removed'\n            });\n        });\n    }\n    /**\n     * Get a list of the preferred widget factories.\n     *\n     * @param path - The file path to filter the results.\n     *\n     * @returns A new array of widget factories.\n     *\n     * #### Notes\n     * Only the widget factories whose associated model factory have\n     * been registered will be returned.\n     * The first item is considered the default. The returned array\n     * has widget factories in the following order:\n     * - path-specific default factory\n     * - path-specific default rendered factory\n     * - global default factory\n     * - all other path-specific factories\n     * - all other global factories\n     */\n    preferredWidgetFactories(path) {\n        const factories = new Set();\n        // Get the ordered matching file types.\n        const fts = this.getFileTypesForPath(PathExt.basename(path));\n        // Start with any user overrides for the defaults.\n        fts.forEach(ft => {\n            if (ft.name in this._defaultWidgetFactoryOverrides) {\n                factories.add(this._defaultWidgetFactoryOverrides[ft.name]);\n            }\n        });\n        // Next add the file type default factories.\n        fts.forEach(ft => {\n            if (ft.name in this._defaultWidgetFactories) {\n                factories.add(this._defaultWidgetFactories[ft.name]);\n            }\n        });\n        // Add the file type default rendered factories.\n        fts.forEach(ft => {\n            if (ft.name in this._defaultRenderedWidgetFactories) {\n                factories.add(this._defaultRenderedWidgetFactories[ft.name]);\n            }\n        });\n        // Add the global default factory.\n        if (this._defaultWidgetFactory) {\n            factories.add(this._defaultWidgetFactory);\n        }\n        // Add the file type factories in registration order.\n        for (const ft of fts) {\n            if (ft.name in this._widgetFactoriesForFileType) {\n                for (const n of this._widgetFactoriesForFileType[ft.name]) {\n                    factories.add(n);\n                }\n            }\n        }\n        // Add the rest of the global factories, in registration order.\n        if ('*' in this._widgetFactoriesForFileType) {\n            for (const n of this._widgetFactoriesForFileType['*']) {\n                factories.add(n);\n            }\n        }\n        // Construct the return list, checking to make sure the corresponding\n        // model factories are registered.\n        const factoryList = [];\n        for (const name of factories) {\n            const factory = this._widgetFactories[name];\n            if (!factory) {\n                continue;\n            }\n            const modelName = factory.modelName || 'text';\n            if (modelName in this._modelFactories) {\n                factoryList.push(factory);\n            }\n        }\n        return factoryList;\n    }\n    /**\n     * Get the default rendered widget factory for a path.\n     *\n     * @param path - The path to for which to find a widget factory.\n     *\n     * @returns The default rendered widget factory for the path.\n     *\n     * ### Notes\n     * If the widget factory has registered a separate set of `defaultRendered`\n     * file types and there is a match in that set, this returns that.\n     * Otherwise, this returns the same widget factory as\n     * [[defaultWidgetFactory]].\n     *\n     * The user setting `defaultViewers` took precedence on this one too.\n     */\n    defaultRenderedWidgetFactory(path) {\n        // Get the matching file types.\n        const ftNames = this.getFileTypesForPath(PathExt.basename(path)).map(ft => ft.name);\n        // Start with any user overrides for the defaults.\n        for (const name in ftNames) {\n            if (name in this._defaultWidgetFactoryOverrides) {\n                return this._widgetFactories[this._defaultWidgetFactoryOverrides[name]];\n            }\n        }\n        // Find if a there is a default rendered factory for this type.\n        for (const name in ftNames) {\n            if (name in this._defaultRenderedWidgetFactories) {\n                return this._widgetFactories[this._defaultRenderedWidgetFactories[name]];\n            }\n        }\n        // Fallback to the default widget factory\n        return this.defaultWidgetFactory(path);\n    }\n    /**\n     * Get the default widget factory for a path.\n     *\n     * @param path - An optional file path to filter the results.\n     *\n     * @returns The default widget factory for an path.\n     *\n     * #### Notes\n     * This is equivalent to the first value in [[preferredWidgetFactories]].\n     */\n    defaultWidgetFactory(path) {\n        if (!path) {\n            return this._widgetFactories[this._defaultWidgetFactory];\n        }\n        return this.preferredWidgetFactories(path)[0];\n    }\n    /**\n     * Set overrides for the default widget factory for a file type.\n     *\n     * Normally, a widget factory informs the document registry which file types\n     * it should be the default for using the `defaultFor` option in the\n     * IWidgetFactoryOptions. This function can be used to override that after\n     * the fact.\n     *\n     * @param fileType The name of the file type.\n     *\n     * @param factory The name of the factory.\n     *\n     * #### Notes\n     * If `factory` is undefined, then any override will be unset, and the\n     * default factory will revert to the original value.\n     *\n     * If `factory` or `fileType` are not known to the docregistry, or\n     * if `factory` cannot open files of type `fileType`, this will throw\n     * an error.\n     */\n    setDefaultWidgetFactory(fileType, factory) {\n        fileType = fileType.toLowerCase();\n        if (!this.getFileType(fileType)) {\n            throw Error(`Cannot find file type ${fileType}`);\n        }\n        if (!factory) {\n            if (this._defaultWidgetFactoryOverrides[fileType]) {\n                delete this._defaultWidgetFactoryOverrides[fileType];\n            }\n            return;\n        }\n        if (!this.getWidgetFactory(factory)) {\n            throw Error(`Cannot find widget factory ${factory}`);\n        }\n        factory = factory.toLowerCase();\n        const factories = this._widgetFactoriesForFileType[fileType];\n        if (factory !== this._defaultWidgetFactory &&\n            !(factories && factories.includes(factory))) {\n            throw Error(`Factory ${factory} cannot view file type ${fileType}`);\n        }\n        this._defaultWidgetFactoryOverrides[fileType] = factory;\n    }\n    /**\n     * Create an iterator over the widget factories that have been registered.\n     *\n     * @returns A new iterator of widget factories.\n     */\n    *widgetFactories() {\n        for (const name in this._widgetFactories) {\n            yield this._widgetFactories[name];\n        }\n    }\n    /**\n     * Create an iterator over the model factories that have been registered.\n     *\n     * @returns A new iterator of model factories.\n     */\n    *modelFactories() {\n        for (const name in this._modelFactories) {\n            yield this._modelFactories[name];\n        }\n    }\n    /**\n     * Create an iterator over the registered extensions for a given widget.\n     *\n     * @param widgetName - The name of the widget factory.\n     *\n     * @returns A new iterator over the widget extensions.\n     */\n    *widgetExtensions(widgetName) {\n        widgetName = widgetName.toLowerCase();\n        if (widgetName in this._extenders) {\n            for (const extension of this._extenders[widgetName]) {\n                yield extension;\n            }\n        }\n    }\n    /**\n     * Create an iterator over the file types that have been registered.\n     *\n     * @returns A new iterator of file types.\n     */\n    *fileTypes() {\n        for (const type of this._fileTypes) {\n            yield type;\n        }\n    }\n    /**\n     * Get a widget factory by name.\n     *\n     * @param widgetName - The name of the widget factory.\n     *\n     * @returns A widget factory instance.\n     */\n    getWidgetFactory(widgetName) {\n        return this._widgetFactories[widgetName.toLowerCase()];\n    }\n    /**\n     * Get a model factory by name.\n     *\n     * @param name - The name of the model factory.\n     *\n     * @returns A model factory instance.\n     */\n    getModelFactory(name) {\n        return this._modelFactories[name.toLowerCase()];\n    }\n    /**\n     * Get a file type by name.\n     */\n    getFileType(name) {\n        name = name.toLowerCase();\n        return find(this._fileTypes, fileType => {\n            return fileType.name.toLowerCase() === name;\n        });\n    }\n    /**\n     * Get a kernel preference.\n     *\n     * @param path - The file path.\n     *\n     * @param widgetName - The name of the widget factory.\n     *\n     * @param kernel - An optional existing kernel model.\n     *\n     * @returns A kernel preference.\n     */\n    getKernelPreference(path, widgetName, kernel) {\n        widgetName = widgetName.toLowerCase();\n        const widgetFactory = this._widgetFactories[widgetName];\n        if (!widgetFactory) {\n            return void 0;\n        }\n        const modelFactory = this.getModelFactory(widgetFactory.modelName || 'text');\n        if (!modelFactory) {\n            return void 0;\n        }\n        const language = modelFactory.preferredLanguage(PathExt.basename(path));\n        const name = kernel && kernel.name;\n        const id = kernel && kernel.id;\n        return {\n            id,\n            name,\n            language,\n            shouldStart: widgetFactory.preferKernel,\n            canStart: widgetFactory.canStartKernel,\n            shutdownOnDispose: widgetFactory.shutdownOnClose,\n            autoStartDefault: widgetFactory.autoStartDefault\n        };\n    }\n    /**\n     * Get the best file type given a contents model.\n     *\n     * @param model - The contents model of interest.\n     *\n     * @returns The best matching file type.\n     */\n    getFileTypeForModel(model) {\n        let ft = null;\n        if (model.name || model.path) {\n            const name = model.name || PathExt.basename(model.path);\n            const fts = this.getFileTypesForPath(name);\n            if (fts.length > 0) {\n                ft = fts[0];\n            }\n        }\n        switch (model.type) {\n            case 'directory':\n                if (ft !== null && ft.contentType === 'directory') {\n                    return ft;\n                }\n                return (find(this._fileTypes, ft => ft.contentType === 'directory') ||\n                    DocumentRegistry.getDefaultDirectoryFileType(this.translator));\n            case 'notebook':\n                if (ft !== null && ft.contentType === 'notebook') {\n                    return ft;\n                }\n                return (find(this._fileTypes, ft => ft.contentType === 'notebook') ||\n                    DocumentRegistry.getDefaultNotebookFileType(this.translator));\n            default:\n                // Find the best matching extension.\n                if (ft !== null) {\n                    return ft;\n                }\n                return (this.getFileType('text') ||\n                    DocumentRegistry.getDefaultTextFileType(this.translator));\n        }\n    }\n    /**\n     * Get the file types that match a file name.\n     *\n     * @param path - The path of the file.\n     *\n     * @returns An ordered list of matching file types.\n     */\n    getFileTypesForPath(path) {\n        const fts = [];\n        const name = PathExt.basename(path);\n        // Look for a pattern match first.\n        let ft = find(this._fileTypes, ft => {\n            return !!(ft.pattern && name.match(ft.pattern) !== null);\n        });\n        if (ft) {\n            fts.push(ft);\n        }\n        // Then look by extension name, starting with the longest\n        let ext = Private.extname(name);\n        while (ext.length > 1) {\n            const ftSubset = this._fileTypes.filter(ft => \n            // In Private.extname, the extension is transformed to lower case\n            ft.extensions.map(extension => extension.toLowerCase()).includes(ext));\n            fts.push(...ftSubset);\n            ext = '.' + ext.split('.').slice(2).join('.');\n        }\n        return fts;\n    }\n}\n/**\n * The namespace for the `DocumentRegistry` class statics.\n */\n(function (DocumentRegistry) {\n    /**\n     * The defaults used for a file type.\n     *\n     * @param translator - The application language translator.\n     *\n     * @returns The default file type.\n     */\n    function getFileTypeDefaults(translator) {\n        translator = translator || nullTranslator;\n        const trans = translator === null || translator === void 0 ? void 0 : translator.load('jupyterlab');\n        return {\n            name: 'default',\n            displayName: trans.__('default'),\n            extensions: [],\n            mimeTypes: [],\n            contentType: 'file',\n            fileFormat: 'text'\n        };\n    }\n    DocumentRegistry.getFileTypeDefaults = getFileTypeDefaults;\n    /**\n     * The default text file type used by the document registry.\n     *\n     * @param translator - The application language translator.\n     *\n     * @returns The default text file type.\n     */\n    function getDefaultTextFileType(translator) {\n        translator = translator || nullTranslator;\n        const trans = translator === null || translator === void 0 ? void 0 : translator.load('jupyterlab');\n        const fileTypeDefaults = getFileTypeDefaults(translator);\n        return {\n            ...fileTypeDefaults,\n            name: 'text',\n            displayName: trans.__('Text'),\n            mimeTypes: ['text/plain'],\n            extensions: ['.txt'],\n            icon: fileIcon\n        };\n    }\n    DocumentRegistry.getDefaultTextFileType = getDefaultTextFileType;\n    /**\n     * The default notebook file type used by the document registry.\n     *\n     * @param translator - The application language translator.\n     *\n     * @returns The default notebook file type.\n     */\n    function getDefaultNotebookFileType(translator) {\n        translator = translator || nullTranslator;\n        const trans = translator === null || translator === void 0 ? void 0 : translator.load('jupyterlab');\n        return {\n            ...getFileTypeDefaults(translator),\n            name: 'notebook',\n            displayName: trans.__('Notebook'),\n            mimeTypes: ['application/x-ipynb+json'],\n            extensions: ['.ipynb'],\n            contentType: 'notebook',\n            fileFormat: 'json',\n            icon: notebookIcon\n        };\n    }\n    DocumentRegistry.getDefaultNotebookFileType = getDefaultNotebookFileType;\n    /**\n     * The default directory file type used by the document registry.\n     *\n     * @param translator - The application language translator.\n     *\n     * @returns The default directory file type.\n     */\n    function getDefaultDirectoryFileType(translator) {\n        translator = translator || nullTranslator;\n        const trans = translator === null || translator === void 0 ? void 0 : translator.load('jupyterlab');\n        return {\n            ...getFileTypeDefaults(translator),\n            name: 'directory',\n            displayName: trans.__('Directory'),\n            extensions: [],\n            mimeTypes: ['text/directory'],\n            contentType: 'directory',\n            icon: folderIcon\n        };\n    }\n    DocumentRegistry.getDefaultDirectoryFileType = getDefaultDirectoryFileType;\n    /**\n     * The default file types used by the document registry.\n     *\n     * @param translator - The application language translator.\n     *\n     * @returns The default directory file types.\n     */\n    function getDefaultFileTypes(translator) {\n        translator = translator || nullTranslator;\n        const trans = translator === null || translator === void 0 ? void 0 : translator.load('jupyterlab');\n        return [\n            getDefaultTextFileType(translator),\n            getDefaultNotebookFileType(translator),\n            getDefaultDirectoryFileType(translator),\n            {\n                name: 'markdown',\n                displayName: trans.__('Markdown File'),\n                extensions: ['.md'],\n                mimeTypes: ['text/markdown'],\n                icon: markdownIcon\n            },\n            {\n                name: 'PDF',\n                displayName: trans.__('PDF File'),\n                extensions: ['.pdf'],\n                mimeTypes: ['application/pdf'],\n                icon: pdfIcon\n            },\n            {\n                name: 'python',\n                displayName: trans.__('Python File'),\n                extensions: ['.py'],\n                mimeTypes: ['text/x-python'],\n                icon: pythonIcon\n            },\n            {\n                name: 'json',\n                displayName: trans.__('JSON File'),\n                extensions: ['.json'],\n                mimeTypes: ['application/json'],\n                icon: jsonIcon\n            },\n            {\n                name: 'jsonl',\n                displayName: trans.__('JSONLines File'),\n                extensions: ['.jsonl', '.ndjson'],\n                mimeTypes: [\n                    'text/jsonl',\n                    'application/jsonl',\n                    'application/json-lines'\n                ],\n                icon: jsonIcon\n            },\n            {\n                name: 'julia',\n                displayName: trans.__('Julia File'),\n                extensions: ['.jl'],\n                mimeTypes: ['text/x-julia'],\n                icon: juliaIcon\n            },\n            {\n                name: 'csv',\n                displayName: trans.__('CSV File'),\n                extensions: ['.csv'],\n                mimeTypes: ['text/csv'],\n                icon: spreadsheetIcon\n            },\n            {\n                name: 'tsv',\n                displayName: trans.__('TSV File'),\n                extensions: ['.tsv'],\n                mimeTypes: ['text/csv'],\n                icon: spreadsheetIcon\n            },\n            {\n                name: 'r',\n                displayName: trans.__('R File'),\n                mimeTypes: ['text/x-rsrc'],\n                extensions: ['.R'],\n                icon: rKernelIcon\n            },\n            {\n                name: 'yaml',\n                displayName: trans.__('YAML File'),\n                mimeTypes: ['text/x-yaml', 'text/yaml'],\n                extensions: ['.yaml', '.yml'],\n                icon: yamlIcon\n            },\n            {\n                name: 'svg',\n                displayName: trans.__('Image'),\n                mimeTypes: ['image/svg+xml'],\n                extensions: ['.svg'],\n                icon: imageIcon,\n                fileFormat: 'base64'\n            },\n            {\n                name: 'tiff',\n                displayName: trans.__('Image'),\n                mimeTypes: ['image/tiff'],\n                extensions: ['.tif', '.tiff'],\n                icon: imageIcon,\n                fileFormat: 'base64'\n            },\n            {\n                name: 'jpeg',\n                displayName: trans.__('Image'),\n                mimeTypes: ['image/jpeg'],\n                extensions: ['.jpg', '.jpeg'],\n                icon: imageIcon,\n                fileFormat: 'base64'\n            },\n            {\n                name: 'gif',\n                displayName: trans.__('Image'),\n                mimeTypes: ['image/gif'],\n                extensions: ['.gif'],\n                icon: imageIcon,\n                fileFormat: 'base64'\n            },\n            {\n                name: 'png',\n                displayName: trans.__('Image'),\n                mimeTypes: ['image/png'],\n                extensions: ['.png'],\n                icon: imageIcon,\n                fileFormat: 'base64'\n            },\n            {\n                name: 'bmp',\n                displayName: trans.__('Image'),\n                mimeTypes: ['image/bmp'],\n                extensions: ['.bmp'],\n                icon: imageIcon,\n                fileFormat: 'base64'\n            },\n            {\n                name: 'webp',\n                displayName: trans.__('Image'),\n                mimeTypes: ['image/webp'],\n                extensions: ['.webp'],\n                icon: imageIcon,\n                fileFormat: 'base64'\n            }\n        ];\n    }\n    DocumentRegistry.getDefaultFileTypes = getDefaultFileTypes;\n})(DocumentRegistry || (DocumentRegistry = {}));\n/**\n * A private namespace for DocumentRegistry data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Get the extension name of a path.\n     *\n     * @param path - string.\n     *\n     * #### Notes\n     * Dotted filenames (e.g. `\".table.json\"` are allowed).\n     */\n    function extname(path) {\n        const parts = PathExt.basename(path).split('.');\n        parts.shift();\n        const ext = '.' + parts.join('.');\n        return ext.toLowerCase();\n    }\n    Private.extname = extname;\n    /**\n     * A no-op function.\n     */\n    function noOp() {\n        /* no-op */\n    }\n    Private.noOp = noOp;\n})(Private || (Private = {}));\n//# sourceMappingURL=registry.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module docregistry\n */\nexport * from './context';\nexport * from './default';\nexport * from './mimedocument';\nexport * from './registry';\nexport * from './components';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module documentsearch-extension\n */\nimport { ILabShell } from '@jupyterlab/application';\nimport { ICommandPalette, MainAreaWidget } from '@jupyterlab/apputils';\nimport { ISearchProviderRegistry, SearchDocumentModel, SearchDocumentView, SearchProviderRegistry } from '@jupyterlab/documentsearch';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator } from '@jupyterlab/translation';\nimport { Widget } from '@lumino/widgets';\n/**\n * Class added to widgets that can be searched (have a search provider).\n */\nconst SEARCHABLE_CLASS = 'jp-mod-searchable';\n/**\n * Class added to widgets with open search view (not necessarily focused).\n */\nconst SEARCH_ACTIVE_CLASS = 'jp-mod-search-active';\nvar CommandIDs;\n(function (CommandIDs) {\n    /**\n     * Start search in a document\n     */\n    CommandIDs.search = 'documentsearch:start';\n    /**\n     * Start search and replace in a document\n     */\n    CommandIDs.searchAndReplace = 'documentsearch:startWithReplace';\n    /**\n     * Find next search match\n     */\n    CommandIDs.findNext = 'documentsearch:highlightNext';\n    /**\n     * Find previous search match\n     */\n    CommandIDs.findPrevious = 'documentsearch:highlightPrevious';\n    /**\n     * End search in a document\n     */\n    CommandIDs.end = 'documentsearch:end';\n    /**\n     * Toggle search in selection\n     */\n    CommandIDs.toggleSearchInSelection = 'documentsearch:toggleSearchInSelection';\n})(CommandIDs || (CommandIDs = {}));\nconst labShellWidgetListener = {\n    id: '@jupyterlab/documentsearch-extension:labShellWidgetListener',\n    description: 'Active search on valid document',\n    requires: [ILabShell, ISearchProviderRegistry],\n    autoStart: true,\n    activate: (app, labShell, registry) => {\n        // If a given widget is searchable, apply the searchable class.\n        // If it's not searchable, remove the class.\n        const transformWidgetSearchability = (widget) => {\n            if (!widget) {\n                return;\n            }\n            if (registry.hasProvider(widget)) {\n                widget.addClass(SEARCHABLE_CLASS);\n            }\n            else {\n                widget.removeClass(SEARCHABLE_CLASS);\n            }\n        };\n        // Update searchability of the active widget when the registry\n        // changes, in case a provider for the current widget was added\n        // or removed\n        registry.changed.connect(() => transformWidgetSearchability(labShell.activeWidget));\n        // Apply the searchable class only to the active widget if it is actually\n        // searchable. Remove the searchable class from a widget when it's\n        // no longer active.\n        labShell.activeChanged.connect((_, args) => {\n            const oldWidget = args.oldValue;\n            if (oldWidget) {\n                oldWidget.removeClass(SEARCHABLE_CLASS);\n            }\n            transformWidgetSearchability(args.newValue);\n        });\n    }\n};\n/**\n * Exposes the current keybindings to search box view.\n */\nclass SearchKeyBindings {\n    constructor(_commandRegistry) {\n        this._commandRegistry = _commandRegistry;\n        this._cache = this._buildCache();\n        this._commandRegistry.keyBindingChanged.connect(this._rebuildCache, this);\n    }\n    get next() {\n        return this._cache.next;\n    }\n    get previous() {\n        return this._cache.previous;\n    }\n    get toggleSearchInSelection() {\n        return this._cache.toggleSearchInSelection;\n    }\n    _rebuildCache() {\n        this._cache = this._buildCache();\n    }\n    _buildCache() {\n        const next = this._commandRegistry.keyBindings.find(binding => binding.command === CommandIDs.findNext);\n        const previous = this._commandRegistry.keyBindings.find(binding => binding.command === CommandIDs.findPrevious);\n        const toggleSearchInSelection = this._commandRegistry.keyBindings.find(binding => binding.command === CommandIDs.toggleSearchInSelection);\n        return {\n            next,\n            previous,\n            toggleSearchInSelection\n        };\n    }\n    dispose() {\n        this._commandRegistry.keyBindingChanged.disconnect(this._rebuildCache, this);\n    }\n}\n/**\n * Initialization data for the document-search extension.\n */\nconst extension = {\n    id: '@jupyterlab/documentsearch-extension:plugin',\n    description: 'Provides the document search registry.',\n    provides: ISearchProviderRegistry,\n    requires: [ITranslator],\n    optional: [ICommandPalette, ISettingRegistry],\n    autoStart: true,\n    activate: (app, translator, palette, settingRegistry) => {\n        var _a;\n        const trans = translator.load('jupyterlab');\n        let searchDebounceTime = 500;\n        let autoSearchInSelection = 'never';\n        // Create registry\n        const registry = new SearchProviderRegistry(translator);\n        const searchViews = new Map();\n        if (settingRegistry) {\n            const loadSettings = settingRegistry.load(extension.id);\n            const updateSettings = (settings) => {\n                searchDebounceTime = settings.get('searchDebounceTime')\n                    .composite;\n                autoSearchInSelection = settings.get('autoSearchInSelection')\n                    .composite;\n            };\n            Promise.all([loadSettings, app.restored])\n                .then(([settings]) => {\n                updateSettings(settings);\n                settings.changed.connect(settings => {\n                    updateSettings(settings);\n                });\n            })\n                .catch((reason) => {\n                console.error(reason.message);\n            });\n        }\n        const isEnabled = () => {\n            const widget = app.shell.currentWidget;\n            if (!widget) {\n                return false;\n            }\n            return registry.hasProvider(widget);\n        };\n        const getSearchWidget = (widget) => {\n            if (!widget) {\n                return;\n            }\n            const widgetId = widget.id;\n            let searchView = searchViews.get(widgetId);\n            if (!searchView) {\n                const searchProvider = registry.getProvider(widget);\n                if (!searchProvider) {\n                    return;\n                }\n                const searchModel = new SearchDocumentModel(searchProvider, searchDebounceTime);\n                const keyBingingsInfo = new SearchKeyBindings(app.commands);\n                const newView = new SearchDocumentView(searchModel, translator, keyBingingsInfo);\n                searchViews.set(widgetId, newView);\n                // find next, previous and end are now enabled\n                [\n                    CommandIDs.findNext,\n                    CommandIDs.findPrevious,\n                    CommandIDs.end,\n                    CommandIDs.toggleSearchInSelection\n                ].forEach(id => {\n                    app.commands.notifyCommandChanged(id);\n                });\n                /**\n                 * Activate the target widget when the search panel is closing\n                 */\n                newView.closed.connect(() => {\n                    if (!widget.isDisposed) {\n                        widget.activate();\n                        widget.removeClass(SEARCH_ACTIVE_CLASS);\n                    }\n                });\n                /**\n                 * Remove from mapping when the search view is disposed.\n                 */\n                newView.disposed.connect(() => {\n                    if (!widget.isDisposed) {\n                        widget.activate();\n                        widget.removeClass(SEARCH_ACTIVE_CLASS);\n                    }\n                    searchViews.delete(widgetId);\n                    // find next, previous and end are now disabled\n                    [\n                        CommandIDs.findNext,\n                        CommandIDs.findPrevious,\n                        CommandIDs.end,\n                        CommandIDs.toggleSearchInSelection\n                    ].forEach(id => {\n                        app.commands.notifyCommandChanged(id);\n                    });\n                });\n                /**\n                 * Dispose resources when the widget is disposed.\n                 */\n                widget.disposed.connect(() => {\n                    newView.dispose();\n                    searchModel.dispose();\n                    searchProvider.dispose();\n                    keyBingingsInfo.dispose();\n                });\n                searchView = newView;\n            }\n            if (!searchView.isAttached) {\n                Widget.attach(searchView, widget.node);\n                widget.addClass(SEARCH_ACTIVE_CLASS);\n                if (widget instanceof MainAreaWidget) {\n                    // Offset the position of the search widget to not cover the toolbar nor the content header.\n                    // TODO this does not update once the search widget is displayed.\n                    searchView.node.style.top = `${widget.toolbar.node.getBoundingClientRect().height +\n                        widget.contentHeader.node.getBoundingClientRect().height}px`;\n                }\n                if (searchView.model.searchExpression) {\n                    searchView.model.refresh();\n                }\n            }\n            return searchView;\n        };\n        app.commands.addCommand(CommandIDs.search, {\n            label: trans.__('Find…'),\n            isEnabled: isEnabled,\n            execute: async (args) => {\n                const searchWidget = getSearchWidget(app.shell.currentWidget);\n                if (searchWidget) {\n                    const searchText = args['searchText'];\n                    if (searchText) {\n                        searchWidget.setSearchText(searchText);\n                    }\n                    else {\n                        searchWidget.setSearchText(searchWidget.model.suggestedInitialQuery);\n                    }\n                    const selectionState = searchWidget.model.selectionState;\n                    let enableSelectionMode = false;\n                    switch (autoSearchInSelection) {\n                        case 'multiple-selected':\n                            enableSelectionMode = selectionState === 'multiple';\n                            break;\n                        case 'any-selected':\n                            enableSelectionMode =\n                                selectionState === 'multiple' || selectionState === 'single';\n                            break;\n                        case 'never':\n                            // no-op\n                            break;\n                    }\n                    if (enableSelectionMode) {\n                        await searchWidget.model.setFilter('selection', true);\n                    }\n                    searchWidget.focusSearchInput();\n                }\n            }\n        });\n        app.commands.addCommand(CommandIDs.searchAndReplace, {\n            label: trans.__('Find and Replace…'),\n            isEnabled: isEnabled,\n            execute: args => {\n                const searchWidget = getSearchWidget(app.shell.currentWidget);\n                if (searchWidget) {\n                    const searchText = args['searchText'];\n                    if (searchText) {\n                        searchWidget.setSearchText(searchText);\n                    }\n                    else {\n                        searchWidget.setSearchText(searchWidget.model.suggestedInitialQuery);\n                    }\n                    const replaceText = args['replaceText'];\n                    if (replaceText) {\n                        searchWidget.setReplaceText(replaceText);\n                    }\n                    searchWidget.showReplace();\n                    searchWidget.focusSearchInput();\n                }\n            }\n        });\n        app.commands.addCommand(CommandIDs.findNext, {\n            label: trans.__('Find Next'),\n            isEnabled: () => !!app.shell.currentWidget &&\n                searchViews.has(app.shell.currentWidget.id),\n            execute: async () => {\n                var _a;\n                const currentWidget = app.shell.currentWidget;\n                if (!currentWidget) {\n                    return;\n                }\n                await ((_a = searchViews.get(currentWidget.id)) === null || _a === void 0 ? void 0 : _a.model.highlightNext());\n            }\n        });\n        app.commands.addCommand(CommandIDs.findPrevious, {\n            label: trans.__('Find Previous'),\n            isEnabled: () => !!app.shell.currentWidget &&\n                searchViews.has(app.shell.currentWidget.id),\n            execute: async () => {\n                var _a;\n                const currentWidget = app.shell.currentWidget;\n                if (!currentWidget) {\n                    return;\n                }\n                await ((_a = searchViews.get(currentWidget.id)) === null || _a === void 0 ? void 0 : _a.model.highlightPrevious());\n            }\n        });\n        app.commands.addCommand(CommandIDs.end, {\n            label: trans.__('End Search'),\n            isEnabled: () => !!app.shell.currentWidget &&\n                searchViews.has(app.shell.currentWidget.id),\n            execute: async () => {\n                var _a;\n                const currentWidget = app.shell.currentWidget;\n                if (!currentWidget) {\n                    return;\n                }\n                (_a = searchViews.get(currentWidget.id)) === null || _a === void 0 ? void 0 : _a.close();\n            }\n        });\n        app.commands.addCommand(CommandIDs.toggleSearchInSelection, {\n            label: trans.__('Search in Selection'),\n            isEnabled: () => !!app.shell.currentWidget &&\n                searchViews.has(app.shell.currentWidget.id) &&\n                'selection' in\n                    searchViews.get(app.shell.currentWidget.id).model.filtersDefinition,\n            execute: async () => {\n                var _a;\n                const currentWidget = app.shell.currentWidget;\n                if (!currentWidget) {\n                    return;\n                }\n                const model = (_a = searchViews.get(currentWidget.id)) === null || _a === void 0 ? void 0 : _a.model;\n                if (!model) {\n                    return;\n                }\n                const currentValue = model.filters['selection'];\n                return model.setFilter('selection', !currentValue);\n            }\n        });\n        (_a = app.shell.currentChanged) === null || _a === void 0 ? void 0 : _a.connect(() => {\n            Object.values(CommandIDs).forEach(cmd => {\n                app.commands.notifyCommandChanged(cmd);\n            });\n        });\n        // Add the command to the palette.\n        if (palette) {\n            [\n                CommandIDs.search,\n                CommandIDs.findNext,\n                CommandIDs.findPrevious,\n                CommandIDs.end,\n                CommandIDs.toggleSearchInSelection\n            ].forEach(command => {\n                palette.addItem({\n                    command,\n                    category: trans.__('Main Area')\n                });\n            });\n        }\n        // Provide the registry to the system.\n        return registry;\n    }\n};\nexport default [extension, labShellWidgetListener];\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/documentsearch/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\n/**\n * Abstract class implementing the search provider interface.\n */\nexport class SearchProvider {\n    /**\n     * Constructor\n     *\n     * @param widget The widget to search in\n     */\n    constructor(widget) {\n        this.widget = widget;\n        this._stateChanged = new Signal(this);\n        this._filtersChanged = new Signal(this);\n        this._disposed = false;\n    }\n    /**\n     * Signal indicating that something in the search has changed, so the UI should update\n     */\n    get stateChanged() {\n        return this._stateChanged;\n    }\n    /**\n     * Signal indicating that filter definition changed.\n     */\n    get filtersChanged() {\n        return this._filtersChanged;\n    }\n    /**\n     * The current index of the selected match.\n     */\n    get currentMatchIndex() {\n        return null;\n    }\n    /**\n     * Whether the search provider is disposed or not.\n     */\n    get isDisposed() {\n        return this._disposed;\n    }\n    /**\n     * The number of matches.\n     */\n    get matchesCount() {\n        return null;\n    }\n    /**\n     * Dispose of the resources held by the search provider.\n     *\n     * #### Notes\n     * If the object's `dispose` method is called more than once, all\n     * calls made after the first will be a no-op.\n     *\n     * #### Undefined Behavior\n     * It is undefined behavior to use any functionality of the object\n     * after it has been disposed unless otherwise explicitly noted.\n     */\n    dispose() {\n        if (this._disposed) {\n            return;\n        }\n        this._disposed = true;\n        Signal.clearData(this);\n    }\n    /**\n     * Get an initial query value if applicable so that it can be entered\n     * into the search box as an initial query\n     *\n     * @returns Initial value used to populate the search box.\n     */\n    getInitialQuery() {\n        return '';\n    }\n    /**\n     * Get the filters for the given provider.\n     *\n     * @returns The filters.\n     *\n     * ### Notes\n     * TODO For now it only supports boolean filters (represented with checkboxes)\n     */\n    getFilters() {\n        return {};\n    }\n    /**\n     * Utility for copying the letter case from old to new text.\n     */\n    static preserveCase(oldText, newText) {\n        if (oldText.toUpperCase() === oldText) {\n            return newText.toUpperCase();\n        }\n        if (oldText.toLowerCase() === oldText) {\n            return newText.toLowerCase();\n        }\n        if (toSentenceCase(oldText) === oldText) {\n            return toSentenceCase(newText);\n        }\n        return newText;\n    }\n}\n/**\n * Capitalise first letter of provided word.\n */\nfunction toSentenceCase([first = '', ...suffix]) {\n    return first.toUpperCase() + '' + suffix.join('').toLowerCase();\n}\n//# sourceMappingURL=searchprovider.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Widget } from '@lumino/widgets';\nimport { SearchProvider } from '../searchprovider';\nexport const FOUND_CLASSES = ['cm-string', 'cm-overlay', 'cm-searching'];\nconst SELECTED_CLASSES = ['CodeMirror-selectedtext'];\n/**\n * HTML search engine\n */\nexport class HTMLSearchEngine {\n    /**\n     * Search for a `query` in a DOM tree.\n     *\n     * @param query Regular expression to search\n     * @param rootNode DOM root node to search in\n     * @returns The list of matches\n     */\n    static search(query, rootNode) {\n        if (!(rootNode instanceof Node)) {\n            console.warn('Unable to search with HTMLSearchEngine the provided object.', rootNode);\n            return Promise.resolve([]);\n        }\n        if (!query.global) {\n            query = new RegExp(query.source, query.flags + 'g');\n        }\n        const matches = [];\n        const walker = document.createTreeWalker(rootNode, NodeFilter.SHOW_TEXT, {\n            acceptNode: node => {\n                // Filter subtrees of UNSUPPORTED_ELEMENTS and nodes that\n                // do not contain our search text\n                let parentElement = node.parentElement;\n                while (parentElement !== rootNode) {\n                    if (parentElement.nodeName in HTMLSearchEngine.UNSUPPORTED_ELEMENTS) {\n                        return NodeFilter.FILTER_REJECT;\n                    }\n                    parentElement = parentElement.parentElement;\n                }\n                return query.test(node.textContent)\n                    ? NodeFilter.FILTER_ACCEPT\n                    : NodeFilter.FILTER_REJECT;\n            }\n        });\n        let node = null;\n        while ((node = walker.nextNode()) !== null) {\n            // Reset query index\n            query.lastIndex = 0;\n            let match = null;\n            while ((match = query.exec(node.textContent)) !== null) {\n                matches.push({\n                    text: match[0],\n                    position: match.index,\n                    node: node\n                });\n            }\n        }\n        return Promise.resolve(matches);\n    }\n}\n/**\n * We choose opt out as most node types should be searched (e.g. script).\n * Even nodes like <data>, could have textContent we care about.\n *\n * Note:\n * We will be checking each node's nodeName attribute in the Node interface.\n * ref: https://dom.spec.whatwg.org/#dom-node-nodename\n *\n * Specifically for Element nodes, where nodeName is stated as the\n * 'HTML-uppercased qualified name'. However, that does not mean that HTML\n * elements qualified name is guaranteed to be uppercased even when the\n * content type is HTML, i.e. XML tags like <svg>. This only applies when the\n * node's namespace is in HTML and the node document is a HTML document.\n * ref: https://dom.spec.whatwg.org/#element-html-uppercased-qualified-name\n */\nHTMLSearchEngine.UNSUPPORTED_ELEMENTS = {\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element#Document_metadata\n    BASE: true,\n    HEAD: true,\n    LINK: true,\n    META: true,\n    STYLE: true,\n    TITLE: true,\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element#Sectioning_root\n    BODY: true,\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element#Content_sectioning\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element#Text_content\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element#Inline_text_semantics\n    // Above is searched\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element#Image_and_multimedia\n    AREA: true,\n    AUDIO: true,\n    IMG: true,\n    MAP: true,\n    TRACK: true,\n    VIDEO: true,\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element#Embedded_content\n    APPLET: true,\n    EMBED: true,\n    IFRAME: true,\n    NOEMBED: true,\n    OBJECT: true,\n    PARAM: true,\n    PICTURE: true,\n    SOURCE: true,\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element#Scripting\n    CANVAS: true,\n    NOSCRIPT: true,\n    SCRIPT: true,\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element#Demarcating_edits\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element#Table_content\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element#Forms\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element#Interactive_elements\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element#Web_Components\n    // Above is searched\n    /*\n     * While XML tags local name is case sensitive, XHTML tags need to be\n     * lowercased.\n     * ref: https://www.w3.org/TR/xhtml1/#h-4.2\n     *\n     * Which in practice means I've seen SVG tags local name to be lowercased.\n     * I don't believe enumerating all possible cases would be useful as such,\n     * and similarly transforming the nodeName to uppercase would seem like\n     * unnecessary overhead.\n     */\n    svg: true,\n    SVG: true\n};\n/**\n * Generic DOM tree search provider.\n */\nexport class GenericSearchProvider extends SearchProvider {\n    constructor() {\n        super(...arguments);\n        /**\n         * Set to true if the widget under search is read-only, false\n         * if it is editable.  Will be used to determine whether to show\n         * the replace option.\n         */\n        this.isReadOnly = true;\n        this._matches = [];\n        this._mutationObserver = new MutationObserver(this._onWidgetChanged.bind(this));\n        this._markNodes = new Array();\n    }\n    /**\n     * Report whether or not this provider has the ability to search on the given object\n     */\n    static isApplicable(domain) {\n        return domain instanceof Widget;\n    }\n    /**\n     * Instantiate a generic search provider for the widget.\n     *\n     * #### Notes\n     * The widget provided is always checked using `isApplicable` before calling\n     * this factory.\n     *\n     * @param widget The widget to search on\n     * @param registry The search provider registry\n     * @param translator [optional] The translator object\n     *\n     * @returns The search provider on the widget\n     */\n    static createNew(widget, registry, translator) {\n        return new GenericSearchProvider(widget);\n    }\n    /**\n     * The current index of the selected match.\n     */\n    get currentMatchIndex() {\n        return this._currentMatchIndex >= 0 ? this._currentMatchIndex : null;\n    }\n    /**\n     * The current match\n     */\n    get currentMatch() {\n        var _a;\n        return (_a = this._matches[this._currentMatchIndex]) !== null && _a !== void 0 ? _a : null;\n    }\n    /**\n     * The current matches\n     */\n    get matches() {\n        // Ensure that no other fn can overwrite matches index property\n        // We shallow clone each node\n        return this._matches\n            ? this._matches.map(m => Object.assign({}, m))\n            : this._matches;\n    }\n    /**\n     * The number of matches.\n     */\n    get matchesCount() {\n        return this._matches.length;\n    }\n    /**\n     * Clear currently highlighted match.\n     */\n    clearHighlight() {\n        if (this._currentMatchIndex >= 0) {\n            const hit = this._markNodes[this._currentMatchIndex];\n            hit.classList.remove(...SELECTED_CLASSES);\n        }\n        this._currentMatchIndex = -1;\n        return Promise.resolve();\n    }\n    /**\n     * Dispose of the resources held by the search provider.\n     *\n     * #### Notes\n     * If the object's `dispose` method is called more than once, all\n     * calls made after the first will be a no-op.\n     *\n     * #### Undefined Behavior\n     * It is undefined behavior to use any functionality of the object\n     * after it has been disposed unless otherwise explicitly noted.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this.endQuery().catch(reason => {\n            console.error(`Failed to end search query.`, reason);\n        });\n        super.dispose();\n    }\n    /**\n     * Move the current match indicator to the next match.\n     *\n     * @param loop Whether to loop within the matches list.\n     *\n     * @returns A promise that resolves once the action has completed.\n     */\n    async highlightNext(loop) {\n        var _a;\n        return (_a = this._highlightNext(false, loop !== null && loop !== void 0 ? loop : true)) !== null && _a !== void 0 ? _a : undefined;\n    }\n    /**\n     * Move the current match indicator to the previous match.\n     *\n     * @param loop Whether to loop within the matches list.\n     *\n     * @returns A promise that resolves once the action has completed.\n     */\n    async highlightPrevious(loop) {\n        var _a;\n        return (_a = this._highlightNext(true, loop !== null && loop !== void 0 ? loop : true)) !== null && _a !== void 0 ? _a : undefined;\n    }\n    /**\n     * Replace the currently selected match with the provided text\n     *\n     * @param newText The replacement text\n     * @param loop Whether to loop within the matches list.\n     *\n     * @returns A promise that resolves with a boolean indicating whether a replace occurred.\n     */\n    async replaceCurrentMatch(newText, loop) {\n        return Promise.resolve(false);\n    }\n    /**\n     * Replace all matches in the notebook with the provided text\n     *\n     * @param newText The replacement text\n     *\n     * @returns A promise that resolves with a boolean indicating whether a replace occurred.\n     */\n    async replaceAllMatches(newText) {\n        // This is read only, but we could loosen this in theory for input boxes...\n        return Promise.resolve(false);\n    }\n    /**\n     * Initialize the search using the provided options.  Should update the UI\n     * to highlight all matches and \"select\" whatever the first match should be.\n     *\n     * @param query A RegExp to be use to perform the search\n     * @param filters Filter parameters to pass to provider\n     */\n    async startQuery(query, filters = {}) {\n        await this.endQuery();\n        this._query = query;\n        if (query === null) {\n            return Promise.resolve();\n        }\n        const matches = await HTMLSearchEngine.search(query, this.widget.node);\n        // Transform the DOM\n        let nodeIdx = 0;\n        while (nodeIdx < matches.length) {\n            let activeNode = matches[nodeIdx].node;\n            let parent = activeNode.parentNode;\n            let subMatches = [matches[nodeIdx]];\n            while (++nodeIdx < matches.length &&\n                matches[nodeIdx].node === activeNode) {\n                subMatches.unshift(matches[nodeIdx]);\n            }\n            const markedNodes = subMatches.map(match => {\n                // TODO: support tspan for svg when svg support is added\n                const markedNode = document.createElement('mark');\n                markedNode.classList.add(...FOUND_CLASSES);\n                markedNode.textContent = match.text;\n                const newNode = activeNode.splitText(match.position);\n                newNode.textContent = newNode.textContent.slice(match.text.length);\n                parent.insertBefore(markedNode, newNode);\n                return markedNode;\n            });\n            // Insert node in reverse order as we replace from last to first\n            // to maintain match position.\n            for (let i = markedNodes.length - 1; i >= 0; i--) {\n                this._markNodes.push(markedNodes[i]);\n            }\n        }\n        // Watch for future changes:\n        this._mutationObserver.observe(this.widget.node, \n        // https://developer.mozilla.org/en-US/docs/Web/API/MutationObserverInit\n        {\n            attributes: false,\n            characterData: true,\n            childList: true,\n            subtree: true\n        });\n        this._matches = matches;\n    }\n    /**\n     * Clear the highlighted matches and any internal state.\n     */\n    async endQuery() {\n        this._mutationObserver.disconnect();\n        this._markNodes.forEach(el => {\n            const parent = el.parentNode;\n            parent.replaceChild(document.createTextNode(el.textContent), el);\n            parent.normalize();\n        });\n        this._markNodes = [];\n        this._matches = [];\n        this._currentMatchIndex = -1;\n    }\n    _highlightNext(reverse, loop) {\n        if (this._matches.length === 0) {\n            return null;\n        }\n        if (this._currentMatchIndex === -1) {\n            this._currentMatchIndex = reverse ? this.matches.length - 1 : 0;\n        }\n        else {\n            const hit = this._markNodes[this._currentMatchIndex];\n            hit.classList.remove(...SELECTED_CLASSES);\n            this._currentMatchIndex = reverse\n                ? this._currentMatchIndex - 1\n                : this._currentMatchIndex + 1;\n            if (loop &&\n                (this._currentMatchIndex < 0 ||\n                    this._currentMatchIndex >= this._matches.length)) {\n                // Cheap way to make this a circular buffer\n                this._currentMatchIndex =\n                    (this._currentMatchIndex + this._matches.length) %\n                        this._matches.length;\n            }\n        }\n        if (this._currentMatchIndex >= 0 &&\n            this._currentMatchIndex < this._matches.length) {\n            const hit = this._markNodes[this._currentMatchIndex];\n            hit.classList.add(...SELECTED_CLASSES);\n            // If not in view, scroll just enough to see it\n            if (!elementInViewport(hit)) {\n                hit.scrollIntoView(reverse);\n            }\n            hit.focus();\n            return this._matches[this._currentMatchIndex];\n        }\n        else {\n            this._currentMatchIndex = -1;\n            return null;\n        }\n    }\n    async _onWidgetChanged(mutations, observer) {\n        this._currentMatchIndex = -1;\n        // This is typically cheap, but we do not control the rate of change or size of the output\n        await this.startQuery(this._query);\n        this._stateChanged.emit();\n    }\n}\nfunction elementInViewport(el) {\n    const boundingClientRect = el.getBoundingClientRect();\n    return (boundingClientRect.top >= 0 &&\n        boundingClientRect.bottom <=\n            (window.innerHeight || document.documentElement.clientHeight) &&\n        boundingClientRect.left >= 0 &&\n        boundingClientRect.right <=\n            (window.innerWidth || document.documentElement.clientWidth));\n}\n//# sourceMappingURL=genericsearchprovider.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * Search provider for text/plain\n */\nexport const TextSearchEngine = {\n    /**\n     * Search for regular expression matches in a string.\n     *\n     * @param query Query regular expression\n     * @param data String to look into\n     * @returns List of matches\n     */\n    search(query, data) {\n        // If data is not a string, try to JSON serialize the data.\n        if (typeof data !== 'string') {\n            try {\n                data = JSON.stringify(data);\n            }\n            catch (reason) {\n                console.warn('Unable to search with TextSearchEngine non-JSON serializable object.', reason, data);\n                return Promise.resolve([]);\n            }\n        }\n        if (!query.global) {\n            query = new RegExp(query.source, query.flags + 'g');\n        }\n        const matches = new Array();\n        let match = null;\n        while ((match = query.exec(data)) !== null) {\n            matches.push({\n                text: match[0],\n                position: match.index\n            });\n        }\n        return Promise.resolve(matches);\n    }\n};\n//# sourceMappingURL=textprovider.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { VDomModel } from '@jupyterlab/ui-components';\nimport { Debouncer } from '@lumino/polling';\nimport { Signal } from '@lumino/signaling';\n/**\n * Search in a document model.\n */\nexport class SearchDocumentModel extends VDomModel {\n    /**\n     * Search document model\n     * @param searchProvider Provider for the current document\n     * @param searchDebounceTime Debounce search time\n     */\n    constructor(searchProvider, searchDebounceTime) {\n        super();\n        this.searchProvider = searchProvider;\n        this._caseSensitive = false;\n        this._disposed = new Signal(this);\n        this._parsingError = '';\n        this._preserveCase = false;\n        this._initialQuery = '';\n        this._filters = {};\n        this._replaceText = '';\n        this._searchActive = false;\n        this._searchExpression = '';\n        this._useRegex = false;\n        this._wholeWords = false;\n        this._filters = {};\n        if (this.searchProvider.getFilters) {\n            const filters = this.searchProvider.getFilters();\n            for (const filter in filters) {\n                this._filters[filter] = filters[filter].default;\n            }\n        }\n        searchProvider.stateChanged.connect(this._onProviderStateChanged, this);\n        this._searchDebouncer = new Debouncer(() => {\n            this._updateSearch().catch(reason => {\n                console.error('Failed to update search on document.', reason);\n            });\n        }, searchDebounceTime);\n    }\n    /**\n     * Whether the search is case sensitive or not.\n     */\n    get caseSensitive() {\n        return this._caseSensitive;\n    }\n    set caseSensitive(v) {\n        if (this._caseSensitive !== v) {\n            this._caseSensitive = v;\n            this.stateChanged.emit();\n            this.refresh();\n        }\n    }\n    /**\n     * Current highlighted match index.\n     */\n    get currentIndex() {\n        return this.searchProvider.currentMatchIndex;\n    }\n    /**\n     * A signal emitted when the object is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * Filter values.\n     */\n    get filters() {\n        return this._filters;\n    }\n    /**\n     * Filter definitions for the current provider.\n     */\n    get filtersDefinition() {\n        var _a, _b, _c;\n        return (_c = (_b = (_a = this.searchProvider).getFilters) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : {};\n    }\n    /**\n     * Filter definitions changed.\n     */\n    get filtersDefinitionChanged() {\n        return this.searchProvider.filtersChanged || null;\n    }\n    /**\n     * The initial query string.\n     */\n    get initialQuery() {\n        return this._initialQuery;\n    }\n    set initialQuery(v) {\n        // The value comes from user selection (set by search provider).\n        this._initialQuery = v;\n    }\n    /**\n     * Initial query as suggested by provider.\n     *\n     * A common choice is the text currently selected by the user.\n     */\n    get suggestedInitialQuery() {\n        return this.searchProvider.getInitialQuery();\n    }\n    /**\n     * Whether the selection includes a single item or multiple items;\n     * this is used by the heuristic auto-enabling \"search in selection\" mode.\n     *\n     * Returns `undefined` if the provider does not expose this information.\n     */\n    get selectionState() {\n        return this.searchProvider.getSelectionState\n            ? this.searchProvider.getSelectionState()\n            : undefined;\n    }\n    /**\n     * Whether the document is read-only or not.\n     */\n    get isReadOnly() {\n        return this.searchProvider.isReadOnly;\n    }\n    /**\n     * Replace options support.\n     */\n    get replaceOptionsSupport() {\n        return this.searchProvider.replaceOptionsSupport;\n    }\n    /**\n     * Parsing regular expression error message.\n     */\n    get parsingError() {\n        return this._parsingError;\n    }\n    /**\n     * Whether to preserve case when replacing.\n     */\n    get preserveCase() {\n        return this._preserveCase;\n    }\n    set preserveCase(v) {\n        if (this._preserveCase !== v) {\n            this._preserveCase = v;\n            this.stateChanged.emit();\n            this.refresh();\n        }\n    }\n    /**\n     * Replacement expression\n     */\n    get replaceText() {\n        return this._replaceText;\n    }\n    set replaceText(v) {\n        if (this._replaceText !== v) {\n            this._replaceText = v;\n            this.stateChanged.emit();\n        }\n    }\n    /**\n     * Search expression\n     */\n    get searchExpression() {\n        return this._searchExpression;\n    }\n    set searchExpression(v) {\n        if (this._searchExpression !== v) {\n            this._searchExpression = v;\n            this.stateChanged.emit();\n            this.refresh();\n        }\n    }\n    /**\n     * Total number of matches.\n     */\n    get totalMatches() {\n        return this.searchProvider.matchesCount;\n    }\n    /**\n     * Whether to use regular expression or not.\n     */\n    get useRegex() {\n        return this._useRegex;\n    }\n    set useRegex(v) {\n        if (this._useRegex !== v) {\n            this._useRegex = v;\n            this.stateChanged.emit();\n            this.refresh();\n        }\n    }\n    /**\n     * Whether to match whole words or not.\n     */\n    get wholeWords() {\n        return this._wholeWords;\n    }\n    set wholeWords(v) {\n        if (this._wholeWords !== v) {\n            this._wholeWords = v;\n            this.stateChanged.emit();\n            this.refresh();\n        }\n    }\n    /**\n     * Dispose the model.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        if (this._searchExpression) {\n            this.endQuery().catch(reason => {\n                console.error(`Failed to end query '${this._searchExpression}.`, reason);\n            });\n        }\n        this.searchProvider.stateChanged.disconnect(this._onProviderStateChanged, this);\n        this._searchDebouncer.dispose();\n        super.dispose();\n    }\n    /**\n     * End the query.\n     */\n    async endQuery() {\n        this._searchActive = false;\n        await this.searchProvider.endQuery();\n        this.stateChanged.emit();\n    }\n    /**\n     * Highlight the next match.\n     */\n    async highlightNext() {\n        await this.searchProvider.highlightNext();\n        // Emit state change as the index needs to be updated\n        this.stateChanged.emit();\n    }\n    /**\n     * Highlight the previous match\n     */\n    async highlightPrevious() {\n        await this.searchProvider.highlightPrevious();\n        // Emit state change as the index needs to be updated\n        this.stateChanged.emit();\n    }\n    /**\n     * Refresh search\n     */\n    refresh() {\n        this._searchDebouncer.invoke().catch(reason => {\n            console.error('Failed to invoke search document debouncer.', reason);\n        });\n    }\n    /**\n     * Replace all matches.\n     */\n    async replaceAllMatches() {\n        await this.searchProvider.replaceAllMatches(this._replaceText, {\n            preserveCase: this.preserveCase,\n            regularExpression: this.useRegex\n        });\n        // Emit state change as the index needs to be updated\n        this.stateChanged.emit();\n    }\n    /**\n     * Replace the current match.\n     */\n    async replaceCurrentMatch() {\n        await this.searchProvider.replaceCurrentMatch(this._replaceText, true, {\n            preserveCase: this.preserveCase,\n            regularExpression: this.useRegex\n        });\n        // Emit state change as the index needs to be updated\n        this.stateChanged.emit();\n    }\n    /**\n     * Set the value of a given filter.\n     *\n     * @param name Filter name\n     * @param v Filter value\n     */\n    async setFilter(name, v) {\n        if (this._filters[name] !== v) {\n            if (this.searchProvider.validateFilter) {\n                this._filters[name] = await this.searchProvider.validateFilter(name, v);\n                // If the value was changed\n                if (this._filters[name] === v) {\n                    this.stateChanged.emit();\n                    this.refresh();\n                }\n            }\n            else {\n                this._filters[name] = v;\n                this.stateChanged.emit();\n                this.refresh();\n            }\n        }\n    }\n    async _updateSearch() {\n        if (this._parsingError) {\n            this._parsingError = '';\n            this.stateChanged.emit();\n        }\n        try {\n            const query = this.searchExpression\n                ? Private.parseQuery(this.searchExpression, this.caseSensitive, this.useRegex, this.wholeWords)\n                : null;\n            if (query) {\n                this._searchActive = true;\n                await this.searchProvider.startQuery(query, this._filters);\n            }\n            else {\n                this._searchActive = false;\n                await this.searchProvider.endQuery();\n            }\n            // Emit state change as the index needs to be updated\n            this.stateChanged.emit();\n        }\n        catch (reason) {\n            this._parsingError = reason.toString();\n            this.stateChanged.emit();\n            console.error(`Failed to parse expression ${this.searchExpression}`, reason);\n        }\n    }\n    _onProviderStateChanged() {\n        if (this._searchActive) {\n            this.refresh();\n        }\n    }\n}\nvar Private;\n(function (Private) {\n    /**\n     * Build the regular expression to use for searching.\n     *\n     * @param queryString Query string\n     * @param caseSensitive Whether the search is case sensitive or not\n     * @param regex Whether the expression is a regular expression\n     * @returns The regular expression to use\n     */\n    function parseQuery(queryString, caseSensitive, regex, wholeWords) {\n        const flag = caseSensitive ? 'gm' : 'gim';\n        // escape regex characters in query if its a string search\n        let queryText = regex\n            ? queryString\n            : queryString.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&');\n        if (wholeWords) {\n            queryText = '\\\\b' + queryText + '\\\\b';\n        }\n        const ret = new RegExp(queryText, flag);\n        // If the empty string is hit, the search logic will freeze the browser tab\n        //  Trying /^/ or /$/ on the codemirror search demo, does not find anything.\n        //  So this is a limitation of the editor.\n        if (ret.test('')) {\n            return null;\n        }\n        return ret;\n    }\n    Private.parseQuery = parseQuery;\n})(Private || (Private = {}));\n//# sourceMappingURL=searchmodel.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { caretDownEmptyThinIcon, caretDownIcon, caretRightIcon, caretUpEmptyThinIcon, caseSensitiveIcon, classes, closeIcon, filterDotIcon, filterIcon, regexIcon, VDomRenderer, wordIcon } from '@jupyterlab/ui-components';\nimport { Signal } from '@lumino/signaling';\nimport { CommandRegistry } from '@lumino/commands';\nimport { UseSignal } from '@jupyterlab/apputils';\nimport * as React from 'react';\nimport { useCallback, useEffect, useState } from 'react';\nconst OVERLAY_CLASS = 'jp-DocumentSearch-overlay';\nconst OVERLAY_ROW_CLASS = 'jp-DocumentSearch-overlay-row';\nconst INPUT_CLASS = 'jp-DocumentSearch-input';\nconst INPUT_LABEL_CLASS = 'jp-DocumentSearch-input-label';\nconst INPUT_WRAPPER_CLASS = 'jp-DocumentSearch-input-wrapper';\nconst INPUT_BUTTON_CLASS_OFF = 'jp-DocumentSearch-input-button-off';\nconst INPUT_BUTTON_CLASS_ON = 'jp-DocumentSearch-input-button-on';\nconst INDEX_COUNTER_CLASS = 'jp-DocumentSearch-index-counter';\nconst UP_DOWN_BUTTON_WRAPPER_CLASS = 'jp-DocumentSearch-up-down-wrapper';\nconst UP_DOWN_BUTTON_CLASS = 'jp-DocumentSearch-up-down-button';\nconst FILTER_BUTTON_CLASS = 'jp-DocumentSearch-filter-button';\nconst FILTER_BUTTON_ENABLED_CLASS = 'jp-DocumentSearch-filter-button-enabled';\nconst REGEX_ERROR_CLASS = 'jp-DocumentSearch-regex-error';\nconst SEARCH_OPTIONS_CLASS = 'jp-DocumentSearch-search-options';\nconst SEARCH_FILTER_DISABLED_CLASS = 'jp-DocumentSearch-search-filter-disabled';\nconst SEARCH_FILTER_CLASS = 'jp-DocumentSearch-search-filter';\nconst REPLACE_BUTTON_CLASS = 'jp-DocumentSearch-replace-button';\nconst REPLACE_BUTTON_WRAPPER_CLASS = 'jp-DocumentSearch-replace-button-wrapper';\nconst REPLACE_WRAPPER_CLASS = 'jp-DocumentSearch-replace-wrapper-class';\nconst REPLACE_TOGGLE_CLASS = 'jp-DocumentSearch-replace-toggle';\nconst TOGGLE_WRAPPER = 'jp-DocumentSearch-toggle-wrapper';\nconst TOGGLE_PLACEHOLDER = 'jp-DocumentSearch-toggle-placeholder';\nconst BUTTON_CONTENT_CLASS = 'jp-DocumentSearch-button-content';\nconst BUTTON_WRAPPER_CLASS = 'jp-DocumentSearch-button-wrapper';\nconst SPACER_CLASS = 'jp-DocumentSearch-spacer';\nfunction SearchInput(props) {\n    const [rows, setRows] = useState(1);\n    const updateDimensions = useCallback((event) => {\n        var _a;\n        const element = event\n            ? event.target\n            : (_a = props.inputRef) === null || _a === void 0 ? void 0 : _a.current;\n        if (element) {\n            const split = element.value.split(/\\n/);\n            // use the longest string out of all lines to compute the width.\n            let longest = split.reduce((a, b) => (a.length > b.length ? a : b), '');\n            if (element.parentNode && element.parentNode instanceof HTMLElement) {\n                element.parentNode.dataset.value = longest;\n            }\n            setRows(split.length);\n        }\n    }, []);\n    useEffect(() => {\n        var _a, _b;\n        // For large part, `focusSearchInput()` is responsible for focusing and\n        // selecting the search input, however when `initialValue` changes, this\n        // triggers React re-render to update `defaultValue` (implemented via `key`)\n        // which means that `focusSearchInput` is no longer effective as it has\n        // already fired before the re-render, hence we use this conditional effect.\n        (_b = (_a = props.inputRef) === null || _a === void 0 ? void 0 : _a.current) === null || _b === void 0 ? void 0 : _b.select();\n        // After any change to initial value we also want to update rows in case if\n        // multi-line text was selected.\n        updateDimensions();\n    }, [props.initialValue]);\n    return (React.createElement(\"label\", { className: INPUT_LABEL_CLASS },\n        React.createElement(\"textarea\", { onChange: e => {\n                props.onChange(e);\n                updateDimensions(e);\n            }, onKeyDown: e => {\n                props.onKeyDown(e);\n                updateDimensions(e);\n            }, rows: rows, placeholder: props.placeholder, className: INPUT_CLASS, \n            // Setting a key ensures that `defaultValue` will become updated\n            // when the initial value changes.\n            key: props.autoUpdate ? props.initialValue : null, tabIndex: 0, ref: props.inputRef, title: props.title, defaultValue: props.initialValue || props.lastSearchText, autoFocus: props.autoFocus })));\n}\nfunction SearchEntry(props) {\n    var _a;\n    const trans = ((_a = props.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n    const caseButtonToggleClass = classes(props.caseSensitive ? INPUT_BUTTON_CLASS_ON : INPUT_BUTTON_CLASS_OFF, BUTTON_CONTENT_CLASS);\n    const regexButtonToggleClass = classes(props.useRegex ? INPUT_BUTTON_CLASS_ON : INPUT_BUTTON_CLASS_OFF, BUTTON_CONTENT_CLASS);\n    const wordButtonToggleClass = classes(props.wholeWords ? INPUT_BUTTON_CLASS_ON : INPUT_BUTTON_CLASS_OFF, BUTTON_CONTENT_CLASS);\n    const wrapperClass = INPUT_WRAPPER_CLASS;\n    return (React.createElement(\"div\", { className: wrapperClass },\n        React.createElement(SearchInput, { placeholder: trans.__('Find'), onChange: e => props.onChange(e), onKeyDown: e => props.onKeydown(e), inputRef: props.inputRef, initialValue: props.initialSearchText, lastSearchText: props.lastSearchText, title: trans.__('Find'), autoFocus: true, autoUpdate: true }),\n        React.createElement(\"button\", { className: BUTTON_WRAPPER_CLASS, onClick: () => {\n                props.onCaseSensitiveToggled();\n            }, tabIndex: 0, title: trans.__('Match Case') },\n            React.createElement(caseSensitiveIcon.react, { className: caseButtonToggleClass, tag: \"span\" })),\n        React.createElement(\"button\", { className: BUTTON_WRAPPER_CLASS, onClick: () => props.onWordToggled(), tabIndex: 0, title: trans.__('Match Whole Word') },\n            React.createElement(wordIcon.react, { className: wordButtonToggleClass, tag: \"span\" })),\n        React.createElement(\"button\", { className: BUTTON_WRAPPER_CLASS, onClick: () => props.onRegexToggled(), tabIndex: 0, title: trans.__('Use Regular Expression') },\n            React.createElement(regexIcon.react, { className: regexButtonToggleClass, tag: \"span\" }))));\n}\nfunction ReplaceEntry(props) {\n    var _a, _b, _c;\n    const trans = ((_a = props.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n    const preserveCaseButtonToggleClass = classes(props.preserveCase ? INPUT_BUTTON_CLASS_ON : INPUT_BUTTON_CLASS_OFF, BUTTON_CONTENT_CLASS);\n    return (React.createElement(\"div\", { className: REPLACE_WRAPPER_CLASS },\n        React.createElement(\"div\", { className: INPUT_WRAPPER_CLASS },\n            React.createElement(SearchInput, { placeholder: trans.__('Replace'), initialValue: (_b = props.replaceText) !== null && _b !== void 0 ? _b : '', onKeyDown: e => props.onReplaceKeydown(e), onChange: e => props.onChange(e), title: trans.__('Replace'), autoFocus: false, autoUpdate: false }),\n            ((_c = props.replaceOptionsSupport) === null || _c === void 0 ? void 0 : _c.preserveCase) ? (React.createElement(\"button\", { className: BUTTON_WRAPPER_CLASS, onClick: () => props.onPreserveCaseToggled(), tabIndex: 0, title: trans.__('Preserve Case') },\n                React.createElement(caseSensitiveIcon.react, { className: preserveCaseButtonToggleClass, tag: \"span\" }))) : null),\n        React.createElement(\"button\", { className: REPLACE_BUTTON_WRAPPER_CLASS, onClick: () => props.onReplaceCurrent(), tabIndex: 0 },\n            React.createElement(\"span\", { className: `${REPLACE_BUTTON_CLASS} ${BUTTON_CONTENT_CLASS}`, tabIndex: 0 }, trans.__('Replace'))),\n        React.createElement(\"button\", { className: REPLACE_BUTTON_WRAPPER_CLASS, tabIndex: 0, onClick: () => props.onReplaceAll() },\n            React.createElement(\"span\", { className: `${REPLACE_BUTTON_CLASS} ${BUTTON_CONTENT_CLASS}`, tabIndex: -1 }, trans.__('Replace All')))));\n}\nfunction UpDownButtons(props) {\n    var _a, _b;\n    const nextBinding = (_a = props.keyBindings) === null || _a === void 0 ? void 0 : _a.next;\n    const prevBinding = (_b = props.keyBindings) === null || _b === void 0 ? void 0 : _b.previous;\n    const nextKeys = nextBinding\n        ? CommandRegistry.formatKeystroke(nextBinding.keys)\n        : '';\n    const prevKeys = prevBinding\n        ? CommandRegistry.formatKeystroke(prevBinding.keys)\n        : '';\n    const prevShortcut = prevKeys ? ` (${prevKeys})` : '';\n    const nextShortcut = nextKeys ? ` (${nextKeys})` : '';\n    const upButton = (React.createElement(\"button\", { className: BUTTON_WRAPPER_CLASS, onClick: () => (props.isEnabled ? props.onHighlightPrevious() : false), tabIndex: 0, title: `${props.trans.__('Previous Match')}${prevShortcut}`, disabled: !props.isEnabled },\n        React.createElement(caretUpEmptyThinIcon.react, { className: classes(UP_DOWN_BUTTON_CLASS, BUTTON_CONTENT_CLASS), tag: \"span\" })));\n    const downButton = (React.createElement(\"button\", { className: BUTTON_WRAPPER_CLASS, onClick: () => (props.isEnabled ? props.onHighlightNext() : false), tabIndex: 0, title: `${props.trans.__('Next Match')}${nextShortcut}`, disabled: !props.isEnabled },\n        React.createElement(caretDownEmptyThinIcon.react, { className: classes(UP_DOWN_BUTTON_CLASS, BUTTON_CONTENT_CLASS), tag: \"span\" })));\n    return (React.createElement(\"div\", { className: UP_DOWN_BUTTON_WRAPPER_CLASS },\n        upButton,\n        downButton));\n}\nfunction SearchIndices(props) {\n    return (React.createElement(\"div\", { className: INDEX_COUNTER_CLASS }, props.totalMatches === 0\n        ? '-/-'\n        : `${props.currentIndex === null ? '-' : props.currentIndex + 1}/${props.totalMatches}`));\n}\nfunction FilterToggle(props) {\n    let className = `${FILTER_BUTTON_CLASS} ${BUTTON_CONTENT_CLASS}`;\n    if (props.visible) {\n        className = `${className} ${FILTER_BUTTON_ENABLED_CLASS}`;\n    }\n    const icon = props.anyEnabled ? filterDotIcon : filterIcon;\n    return (React.createElement(\"button\", { className: BUTTON_WRAPPER_CLASS, onClick: () => props.toggleVisible(), tabIndex: 0, title: props.visible\n            ? props.trans.__('Hide Search Filters')\n            : props.trans.__('Show Search Filters') },\n        React.createElement(icon.react, { className: className, tag: \"span\", height: \"20px\", width: \"20px\" })));\n}\nfunction FilterSelection(props) {\n    return (React.createElement(\"label\", { className: props.isEnabled\n            ? SEARCH_FILTER_CLASS\n            : `${SEARCH_FILTER_CLASS} ${SEARCH_FILTER_DISABLED_CLASS}`, title: props.description },\n        React.createElement(\"input\", { type: \"checkbox\", className: \"jp-mod-styled\", disabled: !props.isEnabled, checked: props.value, onChange: props.onToggle }),\n        props.title));\n}\nclass SearchOverlay extends React.Component {\n    constructor(props) {\n        super(props);\n        this.translator = props.translator || nullTranslator;\n    }\n    _onSearchChange(event) {\n        const searchText = event.target.value;\n        this.props.onSearchChanged(searchText);\n    }\n    _onSearchKeydown(event) {\n        if (event.keyCode === 13) {\n            // Enter pressed\n            event.stopPropagation();\n            event.preventDefault();\n            if (event.ctrlKey) {\n                const textarea = event.target;\n                this._insertNewLine(textarea);\n                this.props.onSearchChanged(textarea.value);\n            }\n            else {\n                event.shiftKey\n                    ? this.props.onHighlightPrevious()\n                    : this.props.onHighlightNext();\n            }\n        }\n    }\n    _onReplaceKeydown(event) {\n        if (event.keyCode === 13) {\n            // Enter pressed\n            event.stopPropagation();\n            event.preventDefault();\n            if (event.ctrlKey) {\n                this._insertNewLine(event.target);\n            }\n            else {\n                this.props.onReplaceCurrent();\n            }\n        }\n    }\n    _insertNewLine(textarea) {\n        const [start, end] = [textarea.selectionStart, textarea.selectionEnd];\n        textarea.setRangeText('\\n', start, end, 'end');\n    }\n    _onClose() {\n        // Clean up and close widget.\n        this.props.onClose();\n    }\n    _onReplaceToggled() {\n        // Deactivate invalid replace filters\n        if (!this.props.replaceEntryVisible) {\n            for (const key in this.props.filtersDefinition) {\n                const filter = this.props.filtersDefinition[key];\n                if (!filter.supportReplace) {\n                    this.props.onFilterChanged(key, false).catch(reason => {\n                        console.error(`Fail to update filter value for ${filter.title}:\\n${reason}`);\n                    });\n                }\n            }\n        }\n        this.props.onReplaceEntryShown(!this.props.replaceEntryVisible);\n    }\n    _toggleFiltersVisibility() {\n        this.props.onFiltersVisibilityChanged(!this.props.filtersVisible);\n    }\n    render() {\n        var _a, _b, _c;\n        const trans = this.translator.load('jupyterlab');\n        const showReplace = !this.props.isReadOnly && this.props.replaceEntryVisible;\n        const filters = this.props.filtersDefinition;\n        const hasFilters = Object.keys(filters).length > 0;\n        const filterToggle = hasFilters ? (React.createElement(FilterToggle, { visible: this.props.filtersVisible, anyEnabled: Object.keys(filters).some(name => {\n                var _a;\n                const filter = filters[name];\n                return (_a = this.props.filters[name]) !== null && _a !== void 0 ? _a : filter.default;\n            }), toggleVisible: () => this._toggleFiltersVisibility(), trans: trans })) : null;\n        const selectionBinding = (_a = this.props.keyBindings) === null || _a === void 0 ? void 0 : _a.toggleSearchInSelection;\n        const selectionKeys = selectionBinding\n            ? CommandRegistry.formatKeystroke(selectionBinding.keys)\n            : '';\n        const selectionKeyHint = selectionKeys ? ` (${selectionKeys})` : '';\n        const filter = hasFilters ? (React.createElement(\"div\", { className: SEARCH_OPTIONS_CLASS }, Object.keys(filters).map(name => {\n            var _a, _b;\n            const filter = filters[name];\n            const isEnabled = !showReplace || filter.supportReplace;\n            // Show an alternate description, if one exists, when a filter is disabled in replace mode.\n            const description = isEnabled\n                ? filter.description\n                : (_a = filter.disabledDescription) !== null && _a !== void 0 ? _a : filter.description;\n            return (React.createElement(FilterSelection, { key: name, title: filter.title, description: description + (name == 'selection' ? selectionKeyHint : ''), isEnabled: isEnabled, onToggle: async () => {\n                    await this.props.onFilterChanged(name, !this.props.filters[name]);\n                }, value: (_b = this.props.filters[name]) !== null && _b !== void 0 ? _b : filter.default }));\n        }))) : null;\n        const icon = this.props.replaceEntryVisible\n            ? caretDownIcon\n            : caretRightIcon;\n        // TODO: Error messages from regex are not currently localizable.\n        return (React.createElement(React.Fragment, null,\n            React.createElement(\"div\", { className: OVERLAY_ROW_CLASS },\n                this.props.isReadOnly ? (React.createElement(\"div\", { className: TOGGLE_PLACEHOLDER })) : (React.createElement(\"button\", { className: TOGGLE_WRAPPER, onClick: () => this._onReplaceToggled(), tabIndex: 0, title: showReplace\n                        ? trans.__('Hide Replace')\n                        : trans.__('Show Replace') },\n                    React.createElement(icon.react, { className: `${REPLACE_TOGGLE_CLASS} ${BUTTON_CONTENT_CLASS}`, tag: \"span\", elementPosition: \"center\", height: \"20px\", width: \"20px\" }))),\n                React.createElement(SearchEntry, { inputRef: this.props.searchInputRef, useRegex: this.props.useRegex, caseSensitive: this.props.caseSensitive, wholeWords: this.props.wholeWords, onCaseSensitiveToggled: this.props.onCaseSensitiveToggled, onRegexToggled: this.props.onRegexToggled, onWordToggled: this.props.onWordToggled, onKeydown: (e) => this._onSearchKeydown(e), onChange: (e) => this._onSearchChange(e), initialSearchText: this.props.initialSearchText, lastSearchText: this.props.lastSearchText, translator: this.translator }),\n                filterToggle,\n                React.createElement(SearchIndices, { currentIndex: this.props.currentIndex, totalMatches: (_b = this.props.totalMatches) !== null && _b !== void 0 ? _b : 0 }),\n                React.createElement(UpDownButtons, { onHighlightPrevious: () => {\n                        this.props.onHighlightPrevious();\n                    }, onHighlightNext: () => {\n                        this.props.onHighlightNext();\n                    }, trans: trans, keyBindings: this.props.keyBindings, isEnabled: !!((_c = this.props.searchInputRef.current) === null || _c === void 0 ? void 0 : _c.value) }),\n                React.createElement(\"button\", { className: BUTTON_WRAPPER_CLASS, onClick: () => this._onClose(), tabIndex: 0, title: trans.__('Close Search Box') },\n                    React.createElement(closeIcon.react, { className: \"jp-icon-hover\", elementPosition: \"center\", height: \"16px\", width: \"16px\" }))),\n            React.createElement(\"div\", { className: OVERLAY_ROW_CLASS }, showReplace ? (React.createElement(React.Fragment, null,\n                React.createElement(ReplaceEntry, { onPreserveCaseToggled: this.props.onPreserveCaseToggled, onReplaceKeydown: (e) => this._onReplaceKeydown(e), onChange: (e) => this.props.onReplaceChanged(e.target.value), onReplaceCurrent: () => this.props.onReplaceCurrent(), onReplaceAll: () => this.props.onReplaceAll(), replaceOptionsSupport: this.props.replaceOptionsSupport, replaceText: this.props.replaceText, preserveCase: this.props.preserveCase, translator: this.translator }),\n                React.createElement(\"div\", { className: SPACER_CLASS }))) : null),\n            this.props.filtersVisible ? filter : null,\n            !!this.props.errorMessage && (React.createElement(\"div\", { className: REGEX_ERROR_CLASS }, this.props.errorMessage))));\n    }\n}\n/**\n * Search document widget\n */\nexport class SearchDocumentView extends VDomRenderer {\n    /**\n     * Search document widget constructor.\n     *\n     * @param model Search document model\n     * @param translator Application translator object\n     * @param keyBindings Search keybindings\n     *\n     */\n    constructor(model, translator, keyBindings) {\n        super(model);\n        this.translator = translator;\n        this._showReplace = false;\n        this._showFilters = false;\n        this._closed = new Signal(this);\n        this.addClass(OVERLAY_CLASS);\n        this._searchInput = React.createRef();\n        this._keyBindings = keyBindings;\n    }\n    /**\n     * A signal emitted when the widget is closed.\n     *\n     * Closing the widget detached it from the DOM but does not dispose it.\n     */\n    get closed() {\n        return this._closed;\n    }\n    /**\n     * Focus search input.\n     */\n    focusSearchInput() {\n        var _a;\n        (_a = this._searchInput.current) === null || _a === void 0 ? void 0 : _a.select();\n    }\n    /**\n     * Set the initial search text.\n     */\n    setSearchText(search) {\n        this.model.initialQuery = search;\n        // Only set the new search text to search expression if there is any\n        // to avoid nullifying the one that was remembered from last time.\n        if (search) {\n            this.model.searchExpression = search;\n        }\n    }\n    /**\n     * Set the replace text\n     *\n     * It does not trigger a view update.\n     */\n    setReplaceText(replace) {\n        this.model.replaceText = replace;\n    }\n    /**\n     * Show the replacement input box.\n     */\n    showReplace() {\n        this.setReplaceInputVisibility(true);\n    }\n    /**\n     * A message handler invoked on a `'close-request'` message.\n     *\n     * #### Notes\n     * On top of the default implementation emit closed signal and end model query.\n     */\n    onCloseRequest(msg) {\n        super.onCloseRequest(msg);\n        this._closed.emit();\n        void this.model.endQuery();\n    }\n    setReplaceInputVisibility(v) {\n        if (this._showReplace !== v) {\n            this._showReplace = v;\n            this.update();\n        }\n    }\n    setFiltersVisibility(v) {\n        if (this._showFilters !== v) {\n            this._showFilters = v;\n            this.update();\n        }\n    }\n    render() {\n        return this.model.filtersDefinitionChanged ? (React.createElement(UseSignal, { signal: this.model.filtersDefinitionChanged }, () => this._renderOverlay())) : (this._renderOverlay());\n    }\n    _renderOverlay() {\n        return (React.createElement(SearchOverlay, { caseSensitive: this.model.caseSensitive, currentIndex: this.model.currentIndex, isReadOnly: this.model.isReadOnly, errorMessage: this.model.parsingError, filters: this.model.filters, filtersDefinition: this.model.filtersDefinition, preserveCase: this.model.preserveCase, replaceEntryVisible: this._showReplace, filtersVisible: this._showFilters, replaceOptionsSupport: this.model.replaceOptionsSupport, replaceText: this.model.replaceText, initialSearchText: this.model.initialQuery, lastSearchText: this.model.searchExpression, searchInputRef: this._searchInput, totalMatches: this.model.totalMatches, translator: this.translator, useRegex: this.model.useRegex, wholeWords: this.model.wholeWords, onCaseSensitiveToggled: () => {\n                this.model.caseSensitive = !this.model.caseSensitive;\n            }, onRegexToggled: () => {\n                this.model.useRegex = !this.model.useRegex;\n            }, onWordToggled: () => {\n                this.model.wholeWords = !this.model.wholeWords;\n            }, onFilterChanged: async (name, value) => {\n                await this.model.setFilter(name, value);\n            }, onFiltersVisibilityChanged: (v) => {\n                this.setFiltersVisibility(v);\n            }, onHighlightNext: () => {\n                void this.model.highlightNext();\n            }, onHighlightPrevious: () => {\n                void this.model.highlightPrevious();\n            }, onPreserveCaseToggled: () => {\n                this.model.preserveCase = !this.model.preserveCase;\n            }, onSearchChanged: (q) => {\n                this.model.searchExpression = q;\n            }, onClose: () => {\n                this.close();\n            }, onReplaceEntryShown: (v) => {\n                this.setReplaceInputVisibility(v);\n            }, onReplaceChanged: (q) => {\n                this.model.replaceText = q;\n            }, onReplaceCurrent: () => {\n                void this.model.replaceCurrentMatch();\n            }, onReplaceAll: () => {\n                void this.model.replaceAllMatches();\n            }, keyBindings: this._keyBindings }));\n    }\n}\n//# sourceMappingURL=searchview.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Signal } from '@lumino/signaling';\n/**\n * Search provider registry\n */\nexport class SearchProviderRegistry {\n    /**\n     * Constructor\n     *\n     * @param translator Application translator object\n     */\n    constructor(translator = nullTranslator) {\n        this.translator = translator;\n        this._changed = new Signal(this);\n        this._providerMap = new Map();\n    }\n    /**\n     * Add a provider to the registry.\n     *\n     * @param key - The provider key.\n     * @returns A disposable delegate that, when disposed, deregisters the given search provider\n     */\n    add(key, provider) {\n        this._providerMap.set(key, provider);\n        this._changed.emit();\n        return new DisposableDelegate(() => {\n            this._providerMap.delete(key);\n            this._changed.emit();\n        });\n    }\n    /**\n     * Returns a matching provider for the widget.\n     *\n     * @param widget - The widget to search over.\n     * @returns the search provider, or undefined if none exists.\n     */\n    getProvider(widget) {\n        // iterate through all providers and ask each one if it can search on the\n        // widget.\n        for (const P of this._providerMap.values()) {\n            if (P.isApplicable(widget)) {\n                return P.createNew(widget, this.translator);\n            }\n        }\n        return undefined;\n    }\n    /**\n     * Whether the registry as a matching provider for the widget.\n     *\n     * @param widget - The widget to search over.\n     * @returns Provider existence\n     */\n    hasProvider(widget) {\n        for (const P of this._providerMap.values()) {\n            if (P.isApplicable(widget)) {\n                return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * Signal that emits when a new search provider has been registered\n     * or removed.\n     */\n    get changed() {\n        return this._changed;\n    }\n}\n//# sourceMappingURL=searchproviderregistry.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The search provider registry token.\n */\nexport const ISearchProviderRegistry = new Token('@jupyterlab/documentsearch:ISearchProviderRegistry', `A service for a registry of search\n  providers for the application. Plugins can register their UI elements with this registry\n  to provide find/replace support.`);\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module documentsearch\n */\nexport * from './providers/genericsearchprovider';\nexport * from './providers/textprovider';\nexport * from './searchmodel';\nexport * from './searchview';\nexport * from './searchprovider';\nexport * from './searchproviderregistry';\nexport * from './tokens';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module extensionmanager-extension\n */\nimport { ILayoutRestorer } from '@jupyterlab/application';\nimport { Dialog, ICommandPalette, showDialog } from '@jupyterlab/apputils';\nimport { ExtensionsPanel, ListModel } from '@jupyterlab/extensionmanager';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { extensionIcon } from '@jupyterlab/ui-components';\nconst PLUGIN_ID = '@jupyterlab/extensionmanager-extension:plugin';\n/**\n * IDs of the commands added by this extension.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.showPanel = 'extensionmanager:show-panel';\n    CommandIDs.toggle = 'extensionmanager:toggle';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The extension manager plugin.\n */\nconst plugin = {\n    id: PLUGIN_ID,\n    description: 'Adds the extension manager plugin.',\n    autoStart: true,\n    requires: [ISettingRegistry],\n    optional: [ITranslator, ILayoutRestorer, ICommandPalette],\n    activate: async (app, registry, translator, restorer, palette) => {\n        const { commands, shell, serviceManager } = app;\n        translator = translator !== null && translator !== void 0 ? translator : nullTranslator;\n        const trans = translator.load('jupyterlab');\n        const model = new ListModel(serviceManager, translator);\n        const createView = () => {\n            const v = new ExtensionsPanel({ model, translator: translator });\n            v.id = 'extensionmanager.main-view';\n            v.title.icon = extensionIcon;\n            v.title.caption = trans.__('Extension Manager');\n            v.node.setAttribute('role', 'region');\n            v.node.setAttribute('aria-label', trans.__('Extension Manager section'));\n            if (restorer) {\n                restorer.add(v, v.id);\n            }\n            shell.add(v, 'left', { rank: 1000 });\n            return v;\n        };\n        // Create a view by default, so it can be restored when loading the workspace.\n        let view = createView();\n        // If the extension is enabled or disabled,\n        // add or remove it from the left area.\n        Promise.all([app.restored, registry.load(PLUGIN_ID)])\n            .then(([, settings]) => {\n            model.isDisclaimed = settings.get('disclaimed').composite;\n            model.isEnabled = settings.get('enabled').composite;\n            model.stateChanged.connect(() => {\n                if (model.isDisclaimed !==\n                    settings.get('disclaimed').composite) {\n                    settings.set('disclaimed', model.isDisclaimed).catch(reason => {\n                        console.error(`Failed to set setting 'disclaimed'.\\n${reason}`);\n                    });\n                }\n                if (model.isEnabled !== settings.get('enabled').composite) {\n                    settings.set('enabled', model.isEnabled).catch(reason => {\n                        console.error(`Failed to set setting 'enabled'.\\n${reason}`);\n                    });\n                }\n            });\n            if (model.isEnabled) {\n                view = view !== null && view !== void 0 ? view : createView();\n            }\n            else {\n                view === null || view === void 0 ? void 0 : view.dispose();\n                view = null;\n            }\n            settings.changed.connect(async () => {\n                model.isDisclaimed = settings.get('disclaimed').composite;\n                model.isEnabled = settings.get('enabled').composite;\n                app.commands.notifyCommandChanged(CommandIDs.toggle);\n                if (model.isEnabled) {\n                    if (view === null || !view.isAttached) {\n                        const accepted = await Private.showWarning(trans);\n                        if (!accepted) {\n                            void settings.set('enabled', false);\n                            return;\n                        }\n                    }\n                    view = view !== null && view !== void 0 ? view : createView();\n                }\n                else {\n                    view === null || view === void 0 ? void 0 : view.dispose();\n                    view = null;\n                }\n            });\n        })\n            .catch(reason => {\n            console.error(`Something went wrong when reading the settings.\\n${reason}`);\n        });\n        commands.addCommand(CommandIDs.showPanel, {\n            label: trans.__('Extension Manager'),\n            execute: () => {\n                if (view) {\n                    shell.activateById(view.id);\n                }\n            },\n            isVisible: () => model.isEnabled\n        });\n        commands.addCommand(CommandIDs.toggle, {\n            label: trans.__('Enable Extension Manager'),\n            execute: () => {\n                if (registry) {\n                    void registry.set(plugin.id, 'enabled', !model.isEnabled);\n                }\n            },\n            isToggled: () => model.isEnabled\n        });\n        if (palette) {\n            palette.addItem({\n                command: CommandIDs.toggle,\n                category: trans.__('Extension Manager')\n            });\n        }\n    }\n};\n/**\n * Export the plugin as the default.\n */\nexport default plugin;\n/**\n * A namespace for module-private functions.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Show a warning dialog about extension security.\n     *\n     * @returns whether the user accepted the dialog.\n     */\n    async function showWarning(trans) {\n        const result = await showDialog({\n            title: trans.__('Enable Extension Manager?'),\n            body: trans.__(`Thanks for trying out JupyterLab's extension manager.\nThe JupyterLab development team is excited to have a robust\nthird-party extension community.\nHowever, we cannot vouch for every extension,\nand some may introduce security risks.\nDo you want to continue?`),\n            buttons: [\n                Dialog.cancelButton({ label: trans.__('Disable') }),\n                Dialog.warnButton({ label: trans.__('Enable') })\n            ]\n        });\n        return result.button.accept;\n    }\n    Private.showWarning = showWarning;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\n\nimport './base.css';\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/extensionmanager/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Dialog, showDialog } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport * as React from 'react';\n/**\n * Show a dialog box reporting an error during installation of an extension.\n *\n * @param name The name of the extension\n * @param errorMessage Any error message giving details about the failure.\n */\nexport function reportInstallError(name, errorMessage, translator) {\n    translator = translator || nullTranslator;\n    const trans = translator.load('jupyterlab');\n    const entries = [];\n    entries.push(React.createElement(\"p\", null, trans.__(`An error occurred installing \"${name}\".`)));\n    if (errorMessage) {\n        entries.push(React.createElement(\"p\", null,\n            React.createElement(\"span\", { className: \"jp-extensionmanager-dialog-subheader\" }, trans.__('Error message:'))), React.createElement(\"pre\", null, errorMessage.trim()));\n    }\n    const body = React.createElement(\"div\", { className: \"jp-extensionmanager-dialog\" }, entries);\n    void showDialog({\n        title: trans.__('Extension Installation Error'),\n        body,\n        buttons: [Dialog.warnButton({ label: trans.__('Ok') })]\n    });\n}\n//# sourceMappingURL=dialog.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/* global RequestInit */\nimport { Dialog, showDialog } from '@jupyterlab/apputils';\nimport { PageConfig, URLExt } from '@jupyterlab/coreutils';\nimport { ServerConnection } from '@jupyterlab/services';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { VDomModel } from '@jupyterlab/ui-components';\nimport { Debouncer } from '@lumino/polling';\nimport * as semver from 'semver';\nimport { reportInstallError } from './dialog';\n/**\n * The server API path for querying/modifying installed extensions.\n */\nconst EXTENSION_API_PATH = 'lab/api/extensions';\n/**\n * Model for an extension list.\n */\nexport class ListModel extends VDomModel {\n    constructor(serviceManager, translator) {\n        super();\n        this.actionError = null;\n        /**\n         * Contains an error message if an error occurred when querying installed extensions.\n         */\n        this.installedError = null;\n        /**\n         * Contains an error message if an error occurred when searching for extensions.\n         */\n        this.searchError = null;\n        /**\n         * Whether a reload should be considered due to actions taken.\n         */\n        this.promptReload = false;\n        this._isDisclaimed = false;\n        this._isEnabled = false;\n        this._isLoadingInstalledExtensions = false;\n        this._isSearching = false;\n        this._query = '';\n        this._page = 1;\n        this._pagination = 30;\n        this._lastPage = 1;\n        this._pendingActions = [];\n        const metadata = JSON.parse(\n        // The page config option may not be defined; e.g. in the federated example\n        PageConfig.getOption('extensionManager') || '{}');\n        this.name = metadata.name;\n        this.canInstall = metadata.can_install;\n        this.installPath = metadata.install_path;\n        this.translator = translator || nullTranslator;\n        this._installed = [];\n        this._lastSearchResult = [];\n        this.serviceManager = serviceManager;\n        this._debouncedSearch = new Debouncer(this.search.bind(this), 1000);\n    }\n    /**\n     * A readonly array of the installed extensions.\n     */\n    get installed() {\n        return this._installed;\n    }\n    /**\n     * Whether the warning is disclaimed or not.\n     */\n    get isDisclaimed() {\n        return this._isDisclaimed;\n    }\n    set isDisclaimed(v) {\n        if (v !== this._isDisclaimed) {\n            this._isDisclaimed = v;\n            this.stateChanged.emit();\n            void this._debouncedSearch.invoke();\n        }\n    }\n    /**\n     * Whether the extension manager is enabled or not.\n     */\n    get isEnabled() {\n        return this._isEnabled;\n    }\n    set isEnabled(v) {\n        if (v !== this._isEnabled) {\n            this._isEnabled = v;\n            this.stateChanged.emit();\n        }\n    }\n    get isLoadingInstalledExtensions() {\n        return this._isLoadingInstalledExtensions;\n    }\n    get isSearching() {\n        return this._isSearching;\n    }\n    /**\n     * A readonly array containing the latest search result\n     */\n    get searchResult() {\n        return this._lastSearchResult;\n    }\n    /**\n     * The search query.\n     *\n     * Setting its value triggers a new search.\n     */\n    get query() {\n        return this._query;\n    }\n    set query(value) {\n        if (this._query !== value) {\n            this._query = value;\n            this._page = 1;\n            void this._debouncedSearch.invoke();\n        }\n    }\n    /**\n     * The current search page.\n     *\n     * Setting its value triggers a new search.\n     *\n     * ### Note\n     * First page is 1.\n     */\n    get page() {\n        return this._page;\n    }\n    set page(value) {\n        if (this._page !== value) {\n            this._page = value;\n            void this._debouncedSearch.invoke();\n        }\n    }\n    /**\n     * The search pagination.\n     *\n     * Setting its value triggers a new search.\n     */\n    get pagination() {\n        return this._pagination;\n    }\n    set pagination(value) {\n        if (this._pagination !== value) {\n            this._pagination = value;\n            void this._debouncedSearch.invoke();\n        }\n    }\n    /**\n     * The last page of results in the current search.\n     */\n    get lastPage() {\n        return this._lastPage;\n    }\n    /**\n     * Dispose the extensions list model.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._debouncedSearch.dispose();\n        super.dispose();\n    }\n    /**\n     * Whether there are currently any actions pending.\n     */\n    hasPendingActions() {\n        return this._pendingActions.length > 0;\n    }\n    /**\n     * Install an extension.\n     *\n     * @param entry An entry indicating which extension to install.\n     * @param options Additional options for the action.\n     */\n    async install(entry, options = {}) {\n        await this.performAction('install', entry, options).then(data => {\n            if (data.status !== 'ok') {\n                reportInstallError(entry.name, data.message, this.translator);\n            }\n            return this.update(true);\n        });\n    }\n    /**\n     * Uninstall an extension.\n     *\n     * @param entry An entry indicating which extension to uninstall.\n     */\n    async uninstall(entry) {\n        if (!entry.installed) {\n            throw new Error(`Not installed, cannot uninstall: ${entry.name}`);\n        }\n        await this.performAction('uninstall', entry);\n        return this.update(true);\n    }\n    /**\n     * Enable an extension.\n     *\n     * @param entry An entry indicating which extension to enable.\n     */\n    async enable(entry) {\n        if (entry.enabled) {\n            throw new Error(`Already enabled: ${entry.name}`);\n        }\n        await this.performAction('enable', entry);\n        await this.refreshInstalled(true);\n    }\n    /**\n     * Disable an extension.\n     *\n     * @param entry An entry indicating which extension to disable.\n     */\n    async disable(entry) {\n        if (!entry.enabled) {\n            throw new Error(`Already disabled: ${entry.name}`);\n        }\n        await this.performAction('disable', entry);\n        await this.refreshInstalled(true);\n    }\n    /**\n     * Refresh installed packages\n     *\n     * @param force Force refreshing the list of installed packages\n     */\n    async refreshInstalled(force = false) {\n        this.installedError = null;\n        this._isLoadingInstalledExtensions = true;\n        this.stateChanged.emit();\n        try {\n            const [extensions] = await Private.requestAPI({\n                refresh: force ? 1 : 0\n            });\n            this._installed = extensions.sort(Private.installedComparator);\n        }\n        catch (reason) {\n            this.installedError = reason.toString();\n        }\n        finally {\n            this._isLoadingInstalledExtensions = false;\n            this.stateChanged.emit();\n        }\n    }\n    /**\n     * Search with current query.\n     *\n     * Sets searchError and totalEntries as appropriate.\n     *\n     * @returns The extensions matching the current query.\n     */\n    async search(force = false) {\n        var _a, _b;\n        if (!this.isDisclaimed) {\n            return Promise.reject('Installation warning is not disclaimed.');\n        }\n        this.searchError = null;\n        this._isSearching = true;\n        this.stateChanged.emit();\n        try {\n            const [extensions, links] = await Private.requestAPI({\n                query: (_a = this.query) !== null && _a !== void 0 ? _a : '',\n                page: this.page,\n                per_page: this.pagination,\n                refresh: force ? 1 : 0\n            });\n            const lastURL = links['last'];\n            if (lastURL) {\n                const lastPage = URLExt.queryStringToObject((_b = URLExt.parse(lastURL).search) !== null && _b !== void 0 ? _b : '')['page'];\n                if (lastPage) {\n                    this._lastPage = parseInt(lastPage, 10);\n                }\n            }\n            const installedNames = this._installed.map(pkg => pkg.name);\n            this._lastSearchResult = extensions.filter(pkg => !installedNames.includes(pkg.name));\n        }\n        catch (reason) {\n            this.searchError = reason.toString();\n        }\n        finally {\n            this._isSearching = false;\n            this.stateChanged.emit();\n        }\n    }\n    /**\n     * Update the current model.\n     *\n     * This will query the packages repository, and the notebook server.\n     *\n     * Emits the `stateChanged` signal on successful completion.\n     */\n    async update(force = false) {\n        if (this.isDisclaimed) {\n            // First refresh the installed list - so the search results are correctly filtered\n            await this.refreshInstalled(force);\n            await this.search();\n        }\n    }\n    /**\n     * Send a request to the server to perform an action on an extension.\n     *\n     * @param action A valid action to perform.\n     * @param entry The extension to perform the action on.\n     * @param actionOptions Additional options for the action.\n     */\n    performAction(action, entry, actionOptions = {}) {\n        const bodyJson = {\n            cmd: action,\n            extension_name: entry.name\n        };\n        if (actionOptions.useVersion) {\n            bodyJson['extension_version'] = actionOptions.useVersion;\n        }\n        const actionRequest = Private.requestAPI({}, {\n            method: 'POST',\n            body: JSON.stringify(bodyJson)\n        });\n        actionRequest.then(([reply]) => {\n            const trans = this.translator.load('jupyterlab');\n            if (reply.needs_restart.includes('server')) {\n                void showDialog({\n                    title: trans.__('Information'),\n                    body: trans.__('You will need to restart JupyterLab to apply the changes.'),\n                    buttons: [Dialog.okButton({ label: trans.__('Ok') })]\n                });\n            }\n            else {\n                const followUps = [];\n                if (reply.needs_restart.includes('frontend')) {\n                    followUps.push(\n                    // @ts-expect-error isElectron is not a standard attribute\n                    window.isElectron\n                        ? trans.__('reload JupyterLab')\n                        : trans.__('refresh the web page'));\n                }\n                if (reply.needs_restart.includes('kernel')) {\n                    followUps.push(trans.__('install the extension in all kernels and restart them'));\n                }\n                void showDialog({\n                    title: trans.__('Information'),\n                    body: trans.__('You will need to %1 to apply the changes.', followUps.join(trans.__(' and '))),\n                    buttons: [Dialog.okButton({ label: trans.__('Ok') })]\n                });\n            }\n            this.actionError = null;\n        }, reason => {\n            this.actionError = reason.toString();\n        });\n        this.addPendingAction(actionRequest);\n        return actionRequest.then(([reply]) => reply);\n    }\n    /**\n     * Add a pending action.\n     *\n     * @param pending A promise that resolves when the action is completed.\n     */\n    addPendingAction(pending) {\n        // Add to pending actions collection\n        this._pendingActions.push(pending);\n        // Ensure action is removed when resolved\n        const remove = () => {\n            const i = this._pendingActions.indexOf(pending);\n            this._pendingActions.splice(i, 1);\n            this.stateChanged.emit(undefined);\n        };\n        pending.then(remove, remove);\n        // Signal changed state\n        this.stateChanged.emit(undefined);\n    }\n}\n/**\n * ListModel statics.\n */\n(function (ListModel) {\n    /**\n     * Utility function to check whether an entry can be updated.\n     *\n     * @param entry The entry to check.\n     */\n    function entryHasUpdate(entry) {\n        if (!entry.installed || !entry.latest_version) {\n            return false;\n        }\n        return semver.lt(entry.installed_version, entry.latest_version);\n    }\n    ListModel.entryHasUpdate = entryHasUpdate;\n})(ListModel || (ListModel = {}));\n/**\n * A namespace for private functionality.\n */\nvar Private;\n(function (Private) {\n    /**\n     * A comparator function that sorts installed extensions.\n     *\n     * In past it used to sort allowedExtensions orgs to the top,\n     * which needs to be restored (or documentation updated).\n     */\n    function installedComparator(a, b) {\n        return a.name.localeCompare(b.name);\n    }\n    Private.installedComparator = installedComparator;\n    const LINK_PARSER = /<([^>]+)>; rel=\"([^\"]+)\",?/g;\n    /**\n     * Call the API extension\n     *\n     * @param queryArgs Query arguments\n     * @param init Initial values for the request\n     * @returns The response body interpreted as JSON and the response link header\n     */\n    async function requestAPI(queryArgs = {}, init = {}) {\n        var _a;\n        // Make request to Jupyter API\n        const settings = ServerConnection.makeSettings();\n        const requestUrl = URLExt.join(settings.baseUrl, EXTENSION_API_PATH // API Namespace\n        );\n        let response;\n        try {\n            response = await ServerConnection.makeRequest(requestUrl + URLExt.objectToQueryString(queryArgs), init, settings);\n        }\n        catch (error) {\n            throw new ServerConnection.NetworkError(error);\n        }\n        let data = await response.text();\n        if (data.length > 0) {\n            try {\n                data = JSON.parse(data);\n            }\n            catch (error) {\n                console.log('Not a JSON response body.', response);\n            }\n        }\n        if (!response.ok) {\n            throw new ServerConnection.ResponseError(response, data.message || data);\n        }\n        const link = (_a = response.headers.get('Link')) !== null && _a !== void 0 ? _a : '';\n        const links = {};\n        let match = null;\n        while ((match = LINK_PARSER.exec(link)) !== null) {\n            links[match[2]] = match[1];\n        }\n        return [data, links];\n    }\n    Private.requestAPI = requestAPI;\n})(Private || (Private = {}));\n//# sourceMappingURL=model.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Button, FilterBox, infoIcon, jupyterIcon, PanelWithToolbar, ReactWidget, refreshIcon, SidePanel, ToolbarButton, ToolbarButtonComponent } from '@jupyterlab/ui-components';\nimport * as React from 'react';\nimport ReactPaginate from 'react-paginate';\nimport { ListModel } from './model';\nconst BADGE_SIZE = 32;\nconst BADGE_QUERY_SIZE = Math.floor(devicePixelRatio * BADGE_SIZE);\nfunction getExtensionGitHubUser(entry) {\n    if (entry.homepage_url &&\n        entry.homepage_url.startsWith('https://github.com/')) {\n        return entry.homepage_url.split('/')[3];\n    }\n    else if (entry.repository_url &&\n        entry.repository_url.startsWith('https://github.com/')) {\n        return entry.repository_url.split('/')[3];\n    }\n    return null;\n}\n/**\n * VDOM for visualizing an extension entry.\n */\nfunction ListEntry(props) {\n    const { canFetch, entry, supportInstallation, trans } = props;\n    const flagClasses = [];\n    if (entry.status && ['ok', 'warning', 'error'].indexOf(entry.status) !== -1) {\n        flagClasses.push(`jp-extensionmanager-entry-${entry.status}`);\n    }\n    const githubUser = canFetch ? getExtensionGitHubUser(entry) : null;\n    if (!entry.allowed) {\n        flagClasses.push(`jp-extensionmanager-entry-should-be-uninstalled`);\n    }\n    return (React.createElement(\"li\", { className: `jp-extensionmanager-entry ${flagClasses.join(' ')}`, style: { display: 'flex' } },\n        React.createElement(\"div\", { style: { marginRight: '8px' } }, githubUser ? (React.createElement(\"img\", { src: `https://github.com/${githubUser}.png?size=${BADGE_QUERY_SIZE}`, style: { width: '32px', height: '32px' } })) : (React.createElement(\"div\", { style: { width: `${BADGE_SIZE}px`, height: `${BADGE_SIZE}px` } }))),\n        React.createElement(\"div\", { className: \"jp-extensionmanager-entry-description\" },\n            React.createElement(\"div\", { className: \"jp-extensionmanager-entry-title\" },\n                React.createElement(\"div\", { className: \"jp-extensionmanager-entry-name\" }, entry.homepage_url ? (React.createElement(\"a\", { href: entry.homepage_url, target: \"_blank\", rel: \"noopener noreferrer\", title: trans.__('%1 extension home page', entry.name) }, entry.name)) : (React.createElement(\"div\", null, entry.name))),\n                React.createElement(\"div\", { className: \"jp-extensionmanager-entry-version\" },\n                    React.createElement(\"div\", { title: trans.__('Version: %1', entry.installed_version) }, entry.installed_version)),\n                entry.installed && !entry.allowed && (React.createElement(ToolbarButtonComponent, { icon: infoIcon, iconLabel: trans.__('%1 extension is not allowed anymore. Please uninstall it immediately or contact your administrator.', entry.name), onClick: () => window.open('https://jupyterlab.readthedocs.io/en/stable/user/extensions.html') })),\n                entry.approved && (React.createElement(jupyterIcon.react, { className: \"jp-extensionmanager-is-approved\", top: \"1px\", height: \"auto\", width: \"1em\", title: trans.__('This extension is approved by your security team.') }))),\n            React.createElement(\"div\", { className: \"jp-extensionmanager-entry-content\" },\n                React.createElement(\"div\", { className: \"jp-extensionmanager-entry-description\" }, entry.description),\n                props.performAction && (React.createElement(\"div\", { className: \"jp-extensionmanager-entry-buttons\" }, entry.installed ? (React.createElement(React.Fragment, null,\n                    supportInstallation && (React.createElement(React.Fragment, null,\n                        ListModel.entryHasUpdate(entry) && (React.createElement(Button, { onClick: () => props.performAction('install', entry, {\n                                useVersion: entry.latest_version\n                            }), title: trans.__('Update \"%1\" to \"%2\"', entry.name, entry.latest_version), minimal: true, small: true }, trans.__('Update to %1', entry.latest_version))),\n                        React.createElement(Button, { onClick: () => props.performAction('uninstall', entry), title: trans.__('Uninstall \"%1\"', entry.name), minimal: true, small: true }, trans.__('Uninstall')))),\n                    entry.enabled ? (React.createElement(Button, { onClick: () => props.performAction('disable', entry), title: trans.__('Disable \"%1\"', entry.name), minimal: true, small: true }, trans.__('Disable'))) : (React.createElement(Button, { onClick: () => props.performAction('enable', entry), title: trans.__('Enable \"%1\"', entry.name), minimal: true, small: true }, trans.__('Enable'))))) : (supportInstallation && (React.createElement(Button, { onClick: () => props.performAction('install', entry), title: trans.__('Install \"%1\"', entry.name), minimal: true, small: true }, trans.__('Install'))))))))));\n}\n/**\n * List view widget for extensions\n */\nfunction ListView(props) {\n    var _a;\n    const { canFetch, performAction, supportInstallation, trans } = props;\n    return (React.createElement(\"div\", { className: \"jp-extensionmanager-listview-wrapper\" },\n        props.entries.length > 0 ? (React.createElement(\"ul\", { className: \"jp-extensionmanager-listview\" }, props.entries.map(entry => (React.createElement(ListEntry, { key: entry.name, canFetch: canFetch, entry: entry, performAction: performAction, supportInstallation: supportInstallation, trans: trans }))))) : (React.createElement(\"div\", { key: \"message\", className: \"jp-extensionmanager-listview-message\" }, trans.__('No entries'))),\n        props.numPages > 1 && (React.createElement(\"div\", { className: \"jp-extensionmanager-pagination\" },\n            React.createElement(ReactPaginate, { previousLabel: '<', nextLabel: '>', breakLabel: \"...\", breakClassName: 'break', initialPage: ((_a = props.initialPage) !== null && _a !== void 0 ? _a : 1) - 1, pageCount: props.numPages, marginPagesDisplayed: 2, pageRangeDisplayed: 3, onPageChange: (data) => props.onPage(data.selected + 1), activeClassName: 'active' })))));\n}\nfunction ErrorMessage(props) {\n    return React.createElement(\"div\", { className: \"jp-extensionmanager-error\" }, props.children);\n}\nclass Header extends ReactWidget {\n    constructor(model, trans, searchInputRef) {\n        super();\n        this.model = model;\n        this.trans = trans;\n        this.searchInputRef = searchInputRef;\n        model.stateChanged.connect(this.update, this);\n        this.addClass('jp-extensionmanager-header');\n    }\n    render() {\n        return (React.createElement(React.Fragment, null,\n            React.createElement(\"div\", { className: \"jp-extensionmanager-title\" },\n                React.createElement(\"span\", null, this.trans.__('%1 Manager', this.model.name)),\n                this.model.installPath && (React.createElement(infoIcon.react, { className: \"jp-extensionmanager-path\", tag: \"span\", title: this.trans.__('Extension installation path: %1', this.model.installPath) }))),\n            React.createElement(FilterBox, { placeholder: this.trans.__('Search extensions'), disabled: !this.model.isDisclaimed, updateFilter: (fn, query) => {\n                    this.model.query = query !== null && query !== void 0 ? query : '';\n                }, useFuzzyFilter: false, inputRef: this.searchInputRef }),\n            React.createElement(\"div\", { className: `jp-extensionmanager-pending ${this.model.hasPendingActions() ? 'jp-mod-hasPending' : ''}` }),\n            this.model.actionError && (React.createElement(ErrorMessage, null,\n                React.createElement(\"p\", null, this.trans.__('Error when performing an action.')),\n                React.createElement(\"p\", null, this.trans.__('Reason given:')),\n                React.createElement(\"pre\", null, this.model.actionError)))));\n    }\n}\nclass Warning extends ReactWidget {\n    constructor(model, trans) {\n        super();\n        this.model = model;\n        this.trans = trans;\n        this.addClass('jp-extensionmanager-disclaimer');\n        model.stateChanged.connect(this.update, this);\n    }\n    render() {\n        return (React.createElement(React.Fragment, null,\n            React.createElement(\"p\", null,\n                this.trans\n                    .__(`The JupyterLab development team is excited to have a robust\nthird-party extension community. However, we do not review\nthird-party extensions, and some extensions may introduce security\nrisks or contain malicious code that runs on your machine. Moreover in order\nto work, this panel needs to fetch data from web services. Do you agree to\nactivate this feature?`),\n                React.createElement(\"br\", null),\n                React.createElement(\"a\", { href: \"https://jupyterlab.readthedocs.io/en/stable/privacy_policies.html\", target: \"_blank\", rel: \"noreferrer\" }, this.trans.__('Please read the privacy policy.'))),\n            this.model.isDisclaimed ? (React.createElement(Button, { className: \"jp-extensionmanager-disclaimer-disable\", onClick: (e) => {\n                    this.model.isDisclaimed = false;\n                }, title: this.trans.__('This will withdraw your consent.') }, this.trans.__('No'))) : (React.createElement(\"div\", null,\n                React.createElement(Button, { className: \"jp-extensionmanager-disclaimer-enable\", onClick: () => {\n                        this.model.isDisclaimed = true;\n                    } }, this.trans.__('Yes')),\n                React.createElement(Button, { className: \"jp-extensionmanager-disclaimer-disable\", onClick: () => {\n                        this.model.isEnabled = false;\n                    }, title: this.trans.__('This will disable the extension manager panel; including the listing of installed extension.') }, this.trans.__('No, disable'))))));\n    }\n}\nclass InstalledList extends ReactWidget {\n    constructor(model, trans) {\n        super();\n        this.model = model;\n        this.trans = trans;\n        model.stateChanged.connect(this.update, this);\n    }\n    render() {\n        return (React.createElement(React.Fragment, null, this.model.installedError !== null ? (React.createElement(ErrorMessage, null, `Error querying installed extensions${this.model.installedError ? `: ${this.model.installedError}` : '.'}`)) : this.model.isLoadingInstalledExtensions ? (React.createElement(\"div\", { className: \"jp-extensionmanager-loader\" }, this.trans.__('Updating extensions list…'))) : (React.createElement(ListView, { canFetch: this.model.isDisclaimed, entries: this.model.installed.filter(pkg => new RegExp(this.model.query.toLowerCase()).test(pkg.name)), numPages: 1, trans: this.trans, onPage: value => {\n                /* no-op */\n            }, performAction: this.model.isDisclaimed ? this.onAction.bind(this) : null, supportInstallation: this.model.canInstall && this.model.isDisclaimed }))));\n    }\n    /**\n     * Callback handler for when the user wants to perform an action on an extension.\n     *\n     * @param action The action to perform.\n     * @param entry The entry to perform the action on.\n     * @param actionOptions Additional options for the action.\n     */\n    onAction(action, entry, actionOptions = {}) {\n        switch (action) {\n            case 'install':\n                return this.model.install(entry, actionOptions);\n            case 'uninstall':\n                return this.model.uninstall(entry);\n            case 'enable':\n                return this.model.enable(entry);\n            case 'disable':\n                return this.model.disable(entry);\n            default:\n                throw new Error(`Invalid action: ${action}`);\n        }\n    }\n}\nclass SearchResult extends ReactWidget {\n    constructor(model, trans) {\n        super();\n        this.model = model;\n        this.trans = trans;\n        model.stateChanged.connect(this.update, this);\n    }\n    /**\n     * Callback handler for the user changes the page of the search result pagination.\n     *\n     * @param value The pagination page number.\n     */\n    onPage(value) {\n        this.model.page = value;\n    }\n    /**\n     * Callback handler for when the user wants to perform an action on an extension.\n     *\n     * @param action The action to perform.\n     * @param entry The entry to perform the action on.\n     * @param actionOptions Additional options for the action.\n     */\n    onAction(action, entry, actionOptions = {}) {\n        switch (action) {\n            case 'install':\n                return this.model.install(entry, actionOptions);\n            case 'uninstall':\n                return this.model.uninstall(entry);\n            case 'enable':\n                return this.model.enable(entry);\n            case 'disable':\n                return this.model.disable(entry);\n            default:\n                throw new Error(`Invalid action: ${action}`);\n        }\n    }\n    render() {\n        return (React.createElement(React.Fragment, null, this.model.searchError !== null ? (React.createElement(ErrorMessage, null, `Error searching for extensions${this.model.searchError ? `: ${this.model.searchError}` : '.'}`)) : this.model.isSearching ? (React.createElement(\"div\", { className: \"jp-extensionmanager-loader\" }, this.trans.__('Updating extensions list…'))) : (React.createElement(ListView, { canFetch: this.model.isDisclaimed, entries: this.model.searchResult, initialPage: this.model.page, numPages: this.model.lastPage, onPage: value => {\n                this.onPage(value);\n            }, performAction: this.model.isDisclaimed ? this.onAction.bind(this) : null, supportInstallation: this.model.canInstall && this.model.isDisclaimed, trans: this.trans }))));\n    }\n    update() {\n        this.title.label = this.model.query\n            ? this.trans.__('Search Results')\n            : this.trans.__('Discover');\n        super.update();\n    }\n}\nexport class ExtensionsPanel extends SidePanel {\n    constructor(options) {\n        const { model, translator } = options;\n        super({ translator });\n        this._wasInitialized = false;\n        this._wasDisclaimed = true;\n        this.model = model;\n        this._searchInputRef = React.createRef();\n        this.addClass('jp-extensionmanager-view');\n        this.trans = translator.load('jupyterlab');\n        this.header.addWidget(new Header(model, this.trans, this._searchInputRef));\n        const warning = new Warning(model, this.trans);\n        warning.title.label = this.trans.__('Warning');\n        this.addWidget(warning);\n        const installed = new PanelWithToolbar();\n        installed.addClass('jp-extensionmanager-installedlist');\n        installed.toolbar.node.setAttribute('aria-label', this.trans.__('Extensions panel toolbar'));\n        installed.title.label = this.trans.__('Installed');\n        installed.toolbar.addItem('refresh', new ToolbarButton({\n            icon: refreshIcon,\n            onClick: () => {\n                model.refreshInstalled(true).catch(reason => {\n                    console.error(`Failed to refresh the installed extensions list:\\n${reason}`);\n                });\n            },\n            tooltip: this.trans.__('Refresh extensions list')\n        }));\n        installed.addWidget(new InstalledList(model, this.trans));\n        this.addWidget(installed);\n        if (this.model.canInstall) {\n            const searchResults = new SearchResult(model, this.trans);\n            searchResults.addClass('jp-extensionmanager-searchresults');\n            this.addWidget(searchResults);\n        }\n        this._wasDisclaimed = this.model.isDisclaimed;\n        if (this.model.isDisclaimed) {\n            this.content.collapse(0);\n            this.content.layout.setRelativeSizes([0, 1, 1]);\n        }\n        else {\n            // If warning is not disclaimed expand only the warning panel\n            this.content.expand(0);\n            this.content.collapse(1);\n            this.content.collapse(2);\n        }\n        this.model.stateChanged.connect(this._onStateChanged, this);\n    }\n    /**\n     * Dispose of the widget and its descendant widgets.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this.model.stateChanged.disconnect(this._onStateChanged, this);\n        super.dispose();\n    }\n    /**\n     * Handle the DOM events for the extension manager search bar.\n     *\n     * @param event - The DOM event sent to the extension manager search bar.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the search bar's DOM node.\n     * It should not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'focus':\n            case 'blur':\n                this._toggleFocused();\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     */\n    onBeforeAttach(msg) {\n        this.node.addEventListener('focus', this, true);\n        this.node.addEventListener('blur', this, true);\n        super.onBeforeAttach(msg);\n    }\n    onBeforeShow(msg) {\n        if (!this._wasInitialized) {\n            this._wasInitialized = true;\n            this.model.refreshInstalled().catch(reason => {\n                console.log(`Failed to refresh installed extension list:\\n${reason}`);\n            });\n        }\n    }\n    /**\n     * A message handler invoked on an `'after-detach'` message.\n     */\n    onAfterDetach(msg) {\n        super.onAfterDetach(msg);\n        this.node.removeEventListener('focus', this, true);\n        this.node.removeEventListener('blur', this, true);\n    }\n    /**\n     * A message handler invoked on an `'activate-request'` message.\n     */\n    onActivateRequest(msg) {\n        if (this.isAttached) {\n            const input = this._searchInputRef.current;\n            if (input) {\n                // Cover the cases, mainly on initial startup, where the input ref is not an input element\n                if (input.focus) {\n                    input.focus();\n                }\n                if (input.select) {\n                    input.select();\n                }\n            }\n        }\n        super.onActivateRequest(msg);\n    }\n    _onStateChanged() {\n        if (!this._wasDisclaimed && this.model.isDisclaimed) {\n            this.content.collapse(0);\n            this.content.expand(1);\n            this.content.expand(2);\n        }\n        this._wasDisclaimed = this.model.isDisclaimed;\n    }\n    /**\n     * Toggle the focused modifier based on the input node focus state.\n     */\n    _toggleFocused() {\n        const focused = document.activeElement === this._searchInputRef.current;\n        this.toggleClass('lm-mod-focused', focused);\n    }\n}\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module extensionmanager\n */\nexport * from './model';\nexport * from './widget';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module filebrowser-extension\n */\nimport { ILabShell, ILayoutRestorer, IRouter, ITreePathUpdater, JupyterFrontEnd, JupyterLab } from '@jupyterlab/application';\nimport { Clipboard, createToolbarFactory, ICommandPalette, InputDialog, IToolbarWidgetRegistry, setToolbar, showErrorMessage, WidgetTracker } from '@jupyterlab/apputils';\nimport { PageConfig, PathExt } from '@jupyterlab/coreutils';\nimport { IDocumentManager } from '@jupyterlab/docmanager';\nimport { FileBrowser, FileUploadStatus, FilterFileBrowserModel, IDefaultFileBrowser, IFileBrowserCommands, IFileBrowserFactory, Uploader } from '@jupyterlab/filebrowser';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { IStateDB } from '@jupyterlab/statedb';\nimport { IStatusBar } from '@jupyterlab/statusbar';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { addIcon, closeIcon, copyIcon, cutIcon, downloadIcon, editIcon, fileIcon, filterIcon, folderIcon, linkIcon, markdownIcon, newFolderIcon, pasteIcon, refreshIcon, stopIcon, textEditorIcon } from '@jupyterlab/ui-components';\nimport { map } from '@lumino/algorithm';\nimport { CommandRegistry } from '@lumino/commands';\n/**\n * Toolbar factory for the top toolbar in the widget\n */\nconst FILE_BROWSER_FACTORY = 'FileBrowser';\nconst FILE_BROWSER_PLUGIN_ID = '@jupyterlab/filebrowser-extension:browser';\n/**\n * The command IDs used by the file browser plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.copy = 'filebrowser:copy';\n    CommandIDs.copyDownloadLink = 'filebrowser:copy-download-link';\n    CommandIDs.cut = 'filebrowser:cut';\n    CommandIDs.del = 'filebrowser:delete';\n    CommandIDs.download = 'filebrowser:download';\n    CommandIDs.duplicate = 'filebrowser:duplicate';\n    // For main browser only.\n    CommandIDs.hideBrowser = 'filebrowser:hide-main';\n    CommandIDs.goToPath = 'filebrowser:go-to-path';\n    CommandIDs.goUp = 'filebrowser:go-up';\n    CommandIDs.openPath = 'filebrowser:open-path';\n    CommandIDs.openUrl = 'filebrowser:open-url';\n    CommandIDs.open = 'filebrowser:open';\n    CommandIDs.openBrowserTab = 'filebrowser:open-browser-tab';\n    CommandIDs.paste = 'filebrowser:paste';\n    CommandIDs.createNewDirectory = 'filebrowser:create-new-directory';\n    CommandIDs.createNewFile = 'filebrowser:create-new-file';\n    CommandIDs.createNewMarkdownFile = 'filebrowser:create-new-markdown-file';\n    CommandIDs.refresh = 'filebrowser:refresh';\n    CommandIDs.rename = 'filebrowser:rename';\n    // For main browser only.\n    CommandIDs.copyShareableLink = 'filebrowser:share-main';\n    // For main browser only.\n    CommandIDs.copyPath = 'filebrowser:copy-path';\n    CommandIDs.showBrowser = 'filebrowser:activate';\n    CommandIDs.shutdown = 'filebrowser:shutdown';\n    // For main browser only.\n    CommandIDs.toggleBrowser = 'filebrowser:toggle-main';\n    CommandIDs.toggleFileFilter = 'filebrowser:toggle-file-filter';\n    CommandIDs.toggleNavigateToCurrentDirectory = 'filebrowser:toggle-navigate-to-current-directory';\n    CommandIDs.toggleLastModified = 'filebrowser:toggle-last-modified';\n    CommandIDs.toggleShowFullPath = 'filebrowser:toggle-show-full-path';\n    CommandIDs.toggleFileSize = 'filebrowser:toggle-file-size';\n    CommandIDs.toggleSortNotebooksFirst = 'filebrowser:toggle-sort-notebooks-first';\n    CommandIDs.search = 'filebrowser:search';\n    CommandIDs.toggleHiddenFiles = 'filebrowser:toggle-hidden-files';\n    CommandIDs.toggleSingleClick = 'filebrowser:toggle-single-click-navigation';\n    CommandIDs.toggleFileCheckboxes = 'filebrowser:toggle-file-checkboxes';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The file browser namespace token.\n */\nconst namespace = 'filebrowser';\n/**\n * The default file browser extension.\n */\nconst browser = {\n    id: FILE_BROWSER_PLUGIN_ID,\n    description: 'Set up the default file browser commands and state restoration',\n    requires: [IDefaultFileBrowser, IFileBrowserFactory, ITranslator],\n    optional: [\n        ILayoutRestorer,\n        ISettingRegistry,\n        ITreePathUpdater,\n        ICommandPalette\n    ],\n    provides: IFileBrowserCommands,\n    autoStart: true,\n    activate: async (app, defaultFileBrowser, factory, translator, restorer, settingRegistry, treePathUpdater, commandPalette) => {\n        const browser = defaultFileBrowser;\n        // Let the application restorer track the primary file browser (that is\n        // automatically created) for restoration of application state (e.g. setting\n        // the file browser as the current side bar widget).\n        //\n        // All other file browsers created by using the factory function are\n        // responsible for their own restoration behavior, if any.\n        if (restorer) {\n            restorer.add(browser, namespace);\n        }\n        // Navigate to preferred-dir trait if found\n        const preferredPath = PageConfig.getOption('preferredPath');\n        if (preferredPath) {\n            await browser.model.cd(preferredPath);\n        }\n        addCommands(app, browser, factory, translator, settingRegistry, commandPalette);\n        void Promise.all([app.restored, browser.model.restored]).then(() => {\n            if (treePathUpdater) {\n                browser.model.pathChanged.connect((sender, args) => {\n                    treePathUpdater(args.newValue);\n                });\n            }\n        });\n        return {\n            openPath: CommandIDs.openPath\n        };\n    }\n};\n/**\n * Handle the file browser settings taking into account user defined settings.\n */\nconst browserSettings = {\n    id: '@jupyterlab/filebrowser-extension:settings',\n    description: 'Set up the default file browser settings',\n    requires: [IDefaultFileBrowser],\n    optional: [ISettingRegistry],\n    autoStart: true,\n    activate: (app, browser, settingRegistry) => {\n        if (settingRegistry) {\n            void settingRegistry.load(FILE_BROWSER_PLUGIN_ID).then(settings => {\n                /**\n                 * File browser default configuration.\n                 */\n                const defaultFileBrowserConfig = {\n                    navigateToCurrentDirectory: false,\n                    singleClickNavigation: false,\n                    showLastModifiedColumn: true,\n                    showFileSizeColumn: false,\n                    showHiddenFiles: false,\n                    showFileCheckboxes: false,\n                    sortNotebooksFirst: false,\n                    showFullPath: false\n                };\n                function onSettingsChanged(settings) {\n                    let key;\n                    for (key in defaultFileBrowserConfig) {\n                        const value = settings.get(key).composite;\n                        browser[key] = value;\n                    }\n                    const filterDirectories = settings.get('filterDirectories')\n                        .composite;\n                    const useFuzzyFilter = settings.get('useFuzzyFilter')\n                        .composite;\n                    browser.model.filterDirectories = filterDirectories;\n                    browser.model.useFuzzyFilter = useFuzzyFilter;\n                }\n                settings.changed.connect(onSettingsChanged);\n                onSettingsChanged(settings);\n            });\n        }\n    }\n};\n/**\n * The default file browser factory provider.\n */\nconst factory = {\n    id: '@jupyterlab/filebrowser-extension:factory',\n    description: 'Provides the file browser factory.',\n    provides: IFileBrowserFactory,\n    requires: [IDocumentManager, ITranslator],\n    optional: [IStateDB, JupyterLab.IInfo],\n    activate: async (app, docManager, translator, stateDB, info) => {\n        const tracker = new WidgetTracker({ namespace });\n        const createFileBrowser = (id, options = {}) => {\n            var _a;\n            const state = options.state === null\n                ? undefined\n                : options.state || stateDB || undefined;\n            const model = new FilterFileBrowserModel({\n                translator: translator,\n                auto: (_a = options.auto) !== null && _a !== void 0 ? _a : true,\n                manager: docManager,\n                driveName: options.driveName || '',\n                refreshInterval: options.refreshInterval,\n                refreshStandby: () => {\n                    if (info) {\n                        return !info.isConnected || 'when-hidden';\n                    }\n                    return 'when-hidden';\n                },\n                state\n            });\n            const restore = options.restore;\n            const widget = new FileBrowser({ id, model, restore, translator, state });\n            // Track the newly created file browser.\n            void tracker.add(widget);\n            return widget;\n        };\n        return { createFileBrowser, tracker };\n    }\n};\n/**\n * The default file browser factory provider.\n */\nconst defaultFileBrowser = {\n    id: '@jupyterlab/filebrowser-extension:default-file-browser',\n    description: 'Provides the default file browser',\n    provides: IDefaultFileBrowser,\n    requires: [IFileBrowserFactory],\n    optional: [IRouter, JupyterFrontEnd.ITreeResolver, ILabShell, ITranslator],\n    activate: async (app, fileBrowserFactory, router, tree, labShell, translator) => {\n        const { commands } = app;\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        // Manually restore and load the default file browser.\n        const defaultBrowser = fileBrowserFactory.createFileBrowser('filebrowser', {\n            auto: false,\n            restore: false\n        });\n        // Set attributes when adding the browser to the UI\n        defaultBrowser.node.setAttribute('role', 'region');\n        defaultBrowser.node.setAttribute('aria-label', trans.__('File Browser Section'));\n        defaultBrowser.title.icon = folderIcon;\n        // Show the current file browser shortcut in its title.\n        const updateBrowserTitle = () => {\n            const binding = app.commands.keyBindings.find(b => b.command === CommandIDs.toggleBrowser);\n            if (binding) {\n                const ks = binding.keys.map(CommandRegistry.formatKeystroke).join(', ');\n                defaultBrowser.title.caption = trans.__('File Browser (%1)', ks);\n            }\n            else {\n                defaultBrowser.title.caption = trans.__('File Browser');\n            }\n        };\n        updateBrowserTitle();\n        app.commands.keyBindingChanged.connect(() => {\n            updateBrowserTitle();\n        });\n        void Private.restoreBrowser(defaultBrowser, commands, router, tree, app, labShell);\n        return defaultBrowser;\n    }\n};\n/**\n * A plugin providing download + copy download link commands in the context menu.\n *\n * Disabling this plugin will NOT disable downloading files from the server.\n * Users will still be able to retrieve files from the file download URLs the\n * server provides.\n */\nconst downloadPlugin = {\n    id: '@jupyterlab/filebrowser-extension:download',\n    description: 'Adds the download file commands. Disabling this plugin will NOT disable downloading files from the server, if the user enters the appropriate download URLs.',\n    requires: [IFileBrowserFactory, ITranslator],\n    autoStart: true,\n    activate: (app, factory, translator) => {\n        const trans = translator.load('jupyterlab');\n        const { commands } = app;\n        const { tracker } = factory;\n        commands.addCommand(CommandIDs.download, {\n            execute: () => {\n                const widget = tracker.currentWidget;\n                if (widget) {\n                    return widget.download();\n                }\n            },\n            icon: downloadIcon.bindprops({ stylesheet: 'menuItem' }),\n            label: trans.__('Download')\n        });\n        commands.addCommand(CommandIDs.copyDownloadLink, {\n            execute: () => {\n                const widget = tracker.currentWidget;\n                if (!widget) {\n                    return;\n                }\n                return widget.model.manager.services.contents\n                    .getDownloadUrl(widget.selectedItems().next().value.path)\n                    .then(url => {\n                    Clipboard.copyToSystem(url);\n                });\n            },\n            isVisible: () => \n            // So long as this command only handles one file at time, don't show it\n            // if multiple files are selected.\n            !!tracker.currentWidget &&\n                Array.from(tracker.currentWidget.selectedItems()).length === 1,\n            icon: copyIcon.bindprops({ stylesheet: 'menuItem' }),\n            label: trans.__('Copy Download Link'),\n            mnemonic: 0\n        });\n    }\n};\n/**\n * A plugin to add the file browser widget to an ILabShell\n */\nconst browserWidget = {\n    id: '@jupyterlab/filebrowser-extension:widget',\n    description: 'Adds the file browser to the application shell.',\n    requires: [\n        IDocumentManager,\n        IDefaultFileBrowser,\n        IFileBrowserFactory,\n        ISettingRegistry,\n        IToolbarWidgetRegistry,\n        ITranslator,\n        ILabShell,\n        IFileBrowserCommands\n    ],\n    optional: [ICommandPalette],\n    autoStart: true,\n    activate: (app, docManager, browser, factory, settingRegistry, toolbarRegistry, translator, labShell, \n    // Wait until file browser commands are ready before activating file browser widget\n    fileBrowserCommands, commandPalette) => {\n        const { commands } = app;\n        const { tracker } = factory;\n        const trans = translator.load('jupyterlab');\n        // Top-level toolbar\n        toolbarRegistry.addFactory(FILE_BROWSER_FACTORY, 'uploader', (browser) => new Uploader({ model: browser.model, translator }));\n        setToolbar(browser, createToolbarFactory(toolbarRegistry, settingRegistry, FILE_BROWSER_FACTORY, browserWidget.id, translator));\n        labShell.add(browser, 'left', { rank: 100, type: 'File Browser' });\n        commands.addCommand(CommandIDs.toggleBrowser, {\n            label: trans.__('File Browser'),\n            execute: () => {\n                if (browser.isHidden) {\n                    return commands.execute(CommandIDs.showBrowser, void 0);\n                }\n                return commands.execute(CommandIDs.hideBrowser, void 0);\n            }\n        });\n        commands.addCommand(CommandIDs.showBrowser, {\n            label: trans.__('Open the file browser for the provided `path`.'),\n            execute: args => {\n                const path = args.path || '';\n                const browserForPath = Private.getBrowserForPath(path, browser, factory);\n                // Check for browser not found\n                if (!browserForPath) {\n                    return;\n                }\n                // Shortcut if we are using the main file browser\n                if (browser === browserForPath) {\n                    labShell.activateById(browser.id);\n                    return;\n                }\n                else {\n                    const areas = ['left', 'right'];\n                    for (const area of areas) {\n                        for (const widget of labShell.widgets(area)) {\n                            if (widget.contains(browserForPath)) {\n                                labShell.activateById(widget.id);\n                                return;\n                            }\n                        }\n                    }\n                }\n            }\n        });\n        commands.addCommand(CommandIDs.hideBrowser, {\n            label: trans.__('Hide the file browser.'),\n            execute: () => {\n                const widget = tracker.currentWidget;\n                if (widget && !widget.isHidden) {\n                    labShell.collapseLeft();\n                }\n            }\n        });\n        commands.addCommand(CommandIDs.toggleNavigateToCurrentDirectory, {\n            label: trans.__('Show Active File in File Browser'),\n            isToggled: () => browser.navigateToCurrentDirectory,\n            execute: () => {\n                const value = !browser.navigateToCurrentDirectory;\n                const key = 'navigateToCurrentDirectory';\n                return settingRegistry\n                    .set(FILE_BROWSER_PLUGIN_ID, key, value)\n                    .catch((reason) => {\n                    console.error(`Failed to set navigateToCurrentDirectory setting`);\n                });\n            }\n        });\n        if (commandPalette) {\n            commandPalette.addItem({\n                command: CommandIDs.toggleNavigateToCurrentDirectory,\n                category: trans.__('File Operations')\n            });\n        }\n        // If the layout is a fresh session without saved data and not in single document\n        // mode, open file browser.\n        void labShell.restored.then(layout => {\n            if (layout.fresh && labShell.mode !== 'single-document') {\n                void commands.execute(CommandIDs.showBrowser, void 0);\n            }\n        });\n        void Promise.all([app.restored, browser.model.restored]).then(() => {\n            // Whether to automatically navigate to a document's current directory\n            labShell.currentChanged.connect(async (_, change) => {\n                if (browser.navigateToCurrentDirectory && change.newValue) {\n                    const { newValue } = change;\n                    const context = docManager.contextForWidget(newValue);\n                    if (context) {\n                        const { path } = context;\n                        try {\n                            await Private.navigateToPath(path, browser, factory, translator);\n                        }\n                        catch (reason) {\n                            console.warn(`${CommandIDs.goToPath} failed to open: ${path}`, reason);\n                        }\n                    }\n                }\n            });\n        });\n    }\n};\n/**\n * The default file browser share-file plugin\n *\n * This extension adds a \"Copy Shareable Link\" command that generates a copy-\n * pastable URL. This url can be used to open a particular file in JupyterLab,\n * handy for emailing links or bookmarking for reference.\n *\n * If you need to change how this link is generated (for instance, to copy a\n * /user-redirect URL for JupyterHub), disable this plugin and replace it\n * with another implementation.\n */\nconst shareFile = {\n    id: '@jupyterlab/filebrowser-extension:share-file',\n    description: 'Adds the \"Copy Shareable Link\" command; useful for JupyterHub deployment for example.',\n    requires: [IFileBrowserFactory, ITranslator],\n    autoStart: true,\n    activate: (app, factory, translator) => {\n        const trans = translator.load('jupyterlab');\n        const { commands } = app;\n        const { tracker } = factory;\n        commands.addCommand(CommandIDs.copyShareableLink, {\n            execute: () => {\n                const widget = tracker.currentWidget;\n                const model = widget === null || widget === void 0 ? void 0 : widget.selectedItems().next();\n                if (model === undefined || model.done) {\n                    return;\n                }\n                Clipboard.copyToSystem(PageConfig.getUrl({\n                    workspace: PageConfig.defaultWorkspace,\n                    treePath: model.value.path,\n                    toShare: true\n                }));\n            },\n            isVisible: () => !!tracker.currentWidget &&\n                Array.from(tracker.currentWidget.selectedItems()).length === 1,\n            icon: linkIcon.bindprops({ stylesheet: 'menuItem' }),\n            label: trans.__('Copy Shareable Link')\n        });\n    }\n};\n/**\n * The \"Open With\" context menu.\n *\n * This is its own plugin in case you would like to disable this feature.\n * e.g. jupyter labextension disable @jupyterlab/filebrowser-extension:open-with\n */\nconst openWithPlugin = {\n    id: '@jupyterlab/filebrowser-extension:open-with',\n    description: 'Adds the open-with feature allowing an user to pick the non-preferred document viewer.',\n    requires: [IFileBrowserFactory],\n    autoStart: true,\n    activate: (app, factory) => {\n        const { docRegistry } = app;\n        const { tracker } = factory;\n        let items = [];\n        function updateOpenWithMenu(contextMenu) {\n            var _a, _b;\n            const openWith = (_b = (_a = contextMenu.menu.items.find(item => {\n                var _a;\n                return item.type === 'submenu' &&\n                    ((_a = item.submenu) === null || _a === void 0 ? void 0 : _a.id) === 'jp-contextmenu-open-with';\n            })) === null || _a === void 0 ? void 0 : _a.submenu) !== null && _b !== void 0 ? _b : null;\n            if (!openWith) {\n                return; // Bail early if the open with menu is not displayed\n            }\n            // clear the current menu items\n            items.forEach(item => item.dispose());\n            items.length = 0;\n            // Ensure that the menu is empty\n            openWith.clearItems();\n            // get the widget factories that could be used to open all of the items\n            // in the current filebrowser selection\n            const factories = tracker.currentWidget\n                ? Private.OpenWith.intersection(map(tracker.currentWidget.selectedItems(), i => {\n                    return Private.OpenWith.getFactories(docRegistry, i);\n                }))\n                : new Set();\n            // make new menu items from the widget factories\n            items = [...factories].map(factory => openWith.addItem({\n                args: { factory: factory.name, label: factory.label || factory.name },\n                command: CommandIDs.open\n            }));\n        }\n        app.contextMenu.opened.connect(updateOpenWithMenu);\n    }\n};\n/**\n * The \"Open in New Browser Tab\" context menu.\n *\n * This is its own plugin in case you would like to disable this feature.\n * e.g. jupyter labextension disable @jupyterlab/filebrowser-extension:open-browser-tab\n *\n * Note: If disabling this, you may also want to disable:\n * @jupyterlab/docmanager-extension:open-browser-tab\n */\nconst openBrowserTabPlugin = {\n    id: '@jupyterlab/filebrowser-extension:open-browser-tab',\n    description: 'Adds the open-in-new-browser-tab features.',\n    requires: [IFileBrowserFactory, ITranslator],\n    autoStart: true,\n    activate: (app, factory, translator) => {\n        const { commands } = app;\n        const trans = translator.load('jupyterlab');\n        const { tracker } = factory;\n        commands.addCommand(CommandIDs.openBrowserTab, {\n            execute: args => {\n                const widget = tracker.currentWidget;\n                if (!widget) {\n                    return;\n                }\n                const mode = args['mode'];\n                return Promise.all(Array.from(map(widget.selectedItems(), item => {\n                    if (mode === 'single-document') {\n                        const url = PageConfig.getUrl({\n                            mode: 'single-document',\n                            treePath: item.path\n                        });\n                        const opened = window.open();\n                        if (opened) {\n                            opened.opener = null;\n                            opened.location.href = url;\n                        }\n                        else {\n                            throw new Error('Failed to open new browser tab.');\n                        }\n                    }\n                    else {\n                        return commands.execute('docmanager:open-browser-tab', {\n                            path: item.path\n                        });\n                    }\n                })));\n            },\n            icon: addIcon.bindprops({ stylesheet: 'menuItem' }),\n            label: args => args['mode'] === 'single-document'\n                ? trans.__('Open in Simple Mode')\n                : trans.__('Open in New Browser Tab'),\n            mnemonic: 0\n        });\n    }\n};\n/**\n * A plugin providing file upload status.\n */\nexport const fileUploadStatus = {\n    id: '@jupyterlab/filebrowser-extension:file-upload-status',\n    description: 'Adds a file upload status widget.',\n    autoStart: true,\n    requires: [IFileBrowserFactory, ITranslator],\n    optional: [IStatusBar],\n    activate: (app, browser, translator, statusBar) => {\n        if (!statusBar) {\n            // Automatically disable if statusbar missing\n            return;\n        }\n        const item = new FileUploadStatus({\n            tracker: browser.tracker,\n            translator\n        });\n        statusBar.registerStatusItem('@jupyterlab/filebrowser-extension:file-upload-status', {\n            item,\n            align: 'middle',\n            isActive: () => {\n                return !!item.model && item.model.items.length > 0;\n            },\n            activeStateChanged: item.model.stateChanged\n        });\n    }\n};\n/**\n * A plugin to open files from remote URLs\n */\nconst openUrlPlugin = {\n    id: '@jupyterlab/filebrowser-extension:open-url',\n    description: 'Adds the feature \"Open files from remote URLs\".',\n    autoStart: true,\n    requires: [IDefaultFileBrowser, ITranslator],\n    optional: [ICommandPalette],\n    activate: (app, browser, translator, palette) => {\n        const { commands } = app;\n        const trans = translator.load('jupyterlab');\n        const command = CommandIDs.openUrl;\n        commands.addCommand(command, {\n            label: args => args.url ? trans.__('Open %1', args.url) : trans.__('Open from URL…'),\n            caption: args => args.url ? trans.__('Open %1', args.url) : trans.__('Open from URL'),\n            execute: async (args) => {\n                var _a, _b, _c;\n                let url = (_a = args === null || args === void 0 ? void 0 : args.url) !== null && _a !== void 0 ? _a : '';\n                if (!url) {\n                    url =\n                        (_b = (await InputDialog.getText({\n                            label: trans.__('URL'),\n                            placeholder: 'https://example.com/path/to/file',\n                            title: trans.__('Open URL'),\n                            okLabel: trans.__('Open')\n                        })).value) !== null && _b !== void 0 ? _b : undefined;\n                }\n                if (!url) {\n                    return;\n                }\n                let type = '';\n                let blob;\n                // fetch the file from the URL\n                try {\n                    const req = await fetch(url);\n                    blob = await req.blob();\n                    type = (_c = req.headers.get('Content-Type')) !== null && _c !== void 0 ? _c : '';\n                }\n                catch (reason) {\n                    if (reason.response && reason.response.status !== 200) {\n                        reason.message = trans.__('Could not open URL: %1', url);\n                    }\n                    return showErrorMessage(trans.__('Cannot fetch'), reason);\n                }\n                // upload the content of the file to the server\n                try {\n                    const name = PathExt.basename(url);\n                    const file = new File([blob], name, { type });\n                    const model = await browser.model.upload(file);\n                    return commands.execute('docmanager:open', {\n                        path: model.path\n                    });\n                }\n                catch (error) {\n                    return showErrorMessage(trans._p('showErrorMessage', 'Upload Error'), error);\n                }\n            }\n        });\n        if (palette) {\n            palette.addItem({\n                command,\n                category: trans.__('File Operations')\n            });\n        }\n    }\n};\n/**\n * Add the main file browser commands to the application's command registry.\n */\nfunction addCommands(app, browser, factory, translator, settingRegistry, commandPalette) {\n    const trans = translator.load('jupyterlab');\n    const { docRegistry: registry, commands } = app;\n    const { tracker } = factory;\n    const deleteToTrash = PageConfig.getOption('delete_to_trash') === 'true';\n    commands.addCommand(CommandIDs.del, {\n        execute: () => {\n            const widget = tracker.currentWidget;\n            if (widget) {\n                return widget.delete();\n            }\n        },\n        icon: closeIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: deleteToTrash ? trans.__('Move to Trash') : trans.__('Delete'),\n        mnemonic: 0\n    });\n    commands.addCommand(CommandIDs.copy, {\n        execute: () => {\n            const widget = tracker.currentWidget;\n            if (widget) {\n                return widget.copy();\n            }\n        },\n        icon: copyIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: trans.__('Copy'),\n        mnemonic: 0\n    });\n    commands.addCommand(CommandIDs.cut, {\n        execute: () => {\n            const widget = tracker.currentWidget;\n            if (widget) {\n                return widget.cut();\n            }\n        },\n        icon: cutIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: trans.__('Cut')\n    });\n    commands.addCommand(CommandIDs.duplicate, {\n        execute: () => {\n            const widget = tracker.currentWidget;\n            if (widget) {\n                return widget.duplicate();\n            }\n        },\n        icon: copyIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: trans.__('Duplicate')\n    });\n    commands.addCommand(CommandIDs.goToPath, {\n        label: trans.__('Update the file browser to display the provided `path`.'),\n        execute: async (args) => {\n            var _a;\n            const path = args.path || '';\n            const showBrowser = !((_a = args === null || args === void 0 ? void 0 : args.dontShowBrowser) !== null && _a !== void 0 ? _a : false);\n            try {\n                const item = await Private.navigateToPath(path, browser, factory, translator);\n                if (item.type !== 'directory' && showBrowser) {\n                    const browserForPath = Private.getBrowserForPath(path, browser, factory);\n                    if (browserForPath) {\n                        browserForPath.clearSelectedItems();\n                        const parts = path.split('/');\n                        const name = parts[parts.length - 1];\n                        if (name) {\n                            await browserForPath.selectItemByName(name);\n                        }\n                    }\n                }\n            }\n            catch (reason) {\n                console.warn(`${CommandIDs.goToPath} failed to go to: ${path}`, reason);\n            }\n            if (showBrowser) {\n                return commands.execute(CommandIDs.showBrowser, { path });\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.goUp, {\n        label: 'go up',\n        execute: async () => {\n            const browserForPath = Private.getBrowserForPath('', browser, factory);\n            if (!browserForPath) {\n                return;\n            }\n            const { model } = browserForPath;\n            await model.restored;\n            void browserForPath.goUp();\n        }\n    });\n    commands.addCommand(CommandIDs.openPath, {\n        label: args => args.path ? trans.__('Open %1', args.path) : trans.__('Open from Path…'),\n        caption: args => args.path ? trans.__('Open %1', args.path) : trans.__('Open from path'),\n        execute: async (args) => {\n            var _a;\n            let path;\n            if (args === null || args === void 0 ? void 0 : args.path) {\n                path = args.path;\n            }\n            else {\n                path =\n                    (_a = (await InputDialog.getText({\n                        label: trans.__('Path'),\n                        placeholder: '/path/relative/to/jlab/root',\n                        title: trans.__('Open Path'),\n                        okLabel: trans.__('Open')\n                    })).value) !== null && _a !== void 0 ? _a : undefined;\n            }\n            if (!path) {\n                return;\n            }\n            try {\n                const trailingSlash = path !== '/' && path.endsWith('/');\n                if (trailingSlash) {\n                    // The normal contents service errors on paths ending in slash\n                    path = path.slice(0, path.length - 1);\n                }\n                const browserForPath = Private.getBrowserForPath(path, browser, factory);\n                const { services } = browserForPath.model.manager;\n                const item = await services.contents.get(path, {\n                    content: false\n                });\n                if (trailingSlash && item.type !== 'directory') {\n                    throw new Error(`Path ${path}/ is not a directory`);\n                }\n                await commands.execute(CommandIDs.goToPath, {\n                    path,\n                    dontShowBrowser: args.dontShowBrowser\n                });\n                if (item.type === 'directory') {\n                    return;\n                }\n                return commands.execute('docmanager:open', { path });\n            }\n            catch (reason) {\n                if (reason.response && reason.response.status === 404) {\n                    reason.message = trans.__('Could not find path: %1', path);\n                }\n                return showErrorMessage(trans.__('Cannot open'), reason);\n            }\n        }\n    });\n    // Add the openPath command to the command palette\n    if (commandPalette) {\n        commandPalette.addItem({\n            command: CommandIDs.openPath,\n            category: trans.__('File Operations')\n        });\n    }\n    commands.addCommand(CommandIDs.open, {\n        execute: args => {\n            const factory = args['factory'] || void 0;\n            const widget = tracker.currentWidget;\n            if (!widget) {\n                return;\n            }\n            const { contents } = widget.model.manager.services;\n            return Promise.all(Array.from(map(widget.selectedItems(), item => {\n                if (item.type === 'directory') {\n                    const localPath = contents.localPath(item.path);\n                    return widget.model.cd(`/${localPath}`);\n                }\n                return commands.execute('docmanager:open', {\n                    factory: factory,\n                    path: item.path\n                });\n            })));\n        },\n        icon: args => {\n            var _a;\n            const factory = args['factory'] || void 0;\n            if (factory) {\n                // if an explicit factory is passed...\n                const ft = registry.getFileType(factory);\n                // ...set an icon if the factory name corresponds to a file type name...\n                // ...or leave the icon blank\n                return (_a = ft === null || ft === void 0 ? void 0 : ft.icon) === null || _a === void 0 ? void 0 : _a.bindprops({ stylesheet: 'menuItem' });\n            }\n            else {\n                return folderIcon.bindprops({ stylesheet: 'menuItem' });\n            }\n        },\n        label: args => (args['label'] || args['factory'] || trans.__('Open')),\n        mnemonic: 0\n    });\n    commands.addCommand(CommandIDs.paste, {\n        execute: () => {\n            const widget = tracker.currentWidget;\n            if (widget) {\n                return widget.paste();\n            }\n        },\n        icon: pasteIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: trans.__('Paste'),\n        mnemonic: 0\n    });\n    commands.addCommand(CommandIDs.createNewDirectory, {\n        execute: () => {\n            const widget = tracker.currentWidget;\n            if (widget) {\n                return widget.createNewDirectory();\n            }\n        },\n        icon: newFolderIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: trans.__('New Folder')\n    });\n    commands.addCommand(CommandIDs.createNewFile, {\n        execute: () => {\n            const widget = tracker.currentWidget;\n            if (widget) {\n                return widget.createNewFile({ ext: 'txt' });\n            }\n        },\n        icon: textEditorIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: trans.__('New File')\n    });\n    commands.addCommand(CommandIDs.createNewMarkdownFile, {\n        execute: () => {\n            const widget = tracker.currentWidget;\n            if (widget) {\n                return widget.createNewFile({ ext: 'md' });\n            }\n        },\n        icon: markdownIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: trans.__('New Markdown File')\n    });\n    commands.addCommand(CommandIDs.refresh, {\n        execute: args => {\n            const widget = tracker.currentWidget;\n            if (widget) {\n                return widget.model.refresh();\n            }\n        },\n        icon: refreshIcon.bindprops({ stylesheet: 'menuItem' }),\n        caption: trans.__('Refresh the file browser.'),\n        label: trans.__('Refresh File List')\n    });\n    commands.addCommand(CommandIDs.rename, {\n        execute: args => {\n            const widget = tracker.currentWidget;\n            if (widget) {\n                return widget.rename();\n            }\n        },\n        isVisible: () => \n        // So long as this command only handles one file at time, don't show it\n        // if multiple files are selected.\n        !!tracker.currentWidget &&\n            Array.from(tracker.currentWidget.selectedItems()).length === 1,\n        icon: editIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: trans.__('Rename'),\n        mnemonic: 0\n    });\n    commands.addCommand(CommandIDs.copyPath, {\n        execute: () => {\n            var _a;\n            const widget = tracker.currentWidget;\n            if (!widget) {\n                return;\n            }\n            const item = widget.selectedItems().next();\n            if (item.done) {\n                return;\n            }\n            if (PageConfig.getOption('copyAbsolutePath') === 'true') {\n                const absolutePath = PathExt.joinWithLeadingSlash((_a = PageConfig.getOption('serverRoot')) !== null && _a !== void 0 ? _a : '', item.value.path);\n                Clipboard.copyToSystem(absolutePath);\n            }\n            else {\n                Clipboard.copyToSystem(item.value.path);\n            }\n        },\n        isVisible: () => \n        // So long as this command only handles one file at time, don't show it\n        // if multiple files are selected.\n        !!tracker.currentWidget &&\n            Array.from(tracker.currentWidget.selectedItems()).length === 1,\n        icon: fileIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: trans.__('Copy Path')\n    });\n    commands.addCommand(CommandIDs.shutdown, {\n        execute: () => {\n            const widget = tracker.currentWidget;\n            if (widget) {\n                return widget.shutdownKernels();\n            }\n        },\n        icon: stopIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: trans.__('Shut Down Kernel')\n    });\n    commands.addCommand(CommandIDs.toggleFileFilter, {\n        execute: () => {\n            // Update toggled state, then let the toolbar button update\n            browser.showFileFilter = !browser.showFileFilter;\n            commands.notifyCommandChanged(CommandIDs.toggleFileFilter);\n        },\n        isToggled: () => {\n            const toggled = browser.showFileFilter;\n            return toggled;\n        },\n        icon: filterIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: trans.__('Toggle File Filter')\n    });\n    commands.addCommand(CommandIDs.toggleLastModified, {\n        label: trans.__('Show Last Modified Column'),\n        isToggled: () => browser.showLastModifiedColumn,\n        execute: () => {\n            const value = !browser.showLastModifiedColumn;\n            const key = 'showLastModifiedColumn';\n            if (settingRegistry) {\n                return settingRegistry\n                    .set(FILE_BROWSER_PLUGIN_ID, key, value)\n                    .catch((reason) => {\n                    console.error(`Failed to set ${key} setting`);\n                });\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.toggleShowFullPath, {\n        label: trans.__('Show Full Path'),\n        isToggled: () => browser.showFullPath,\n        execute: () => {\n            const value = !browser.showFullPath;\n            const key = 'showFullPath';\n            if (settingRegistry) {\n                return settingRegistry\n                    .set(FILE_BROWSER_PLUGIN_ID, key, value)\n                    .catch((reason) => {\n                    console.error(`Failed to set ${key} setting`);\n                });\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.toggleSortNotebooksFirst, {\n        label: trans.__('Sort Notebooks Above Files'),\n        isToggled: () => browser.sortNotebooksFirst,\n        execute: () => {\n            const value = !browser.sortNotebooksFirst;\n            const key = 'sortNotebooksFirst';\n            if (settingRegistry) {\n                return settingRegistry\n                    .set(FILE_BROWSER_PLUGIN_ID, key, value)\n                    .catch((reason) => {\n                    console.error(`Failed to set ${key} setting`);\n                });\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.toggleFileSize, {\n        label: trans.__('Show File Size Column'),\n        isToggled: () => browser.showFileSizeColumn,\n        execute: () => {\n            const value = !browser.showFileSizeColumn;\n            const key = 'showFileSizeColumn';\n            if (settingRegistry) {\n                return settingRegistry\n                    .set(FILE_BROWSER_PLUGIN_ID, key, value)\n                    .catch((reason) => {\n                    console.error(`Failed to set ${key} setting`);\n                });\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.toggleSingleClick, {\n        label: trans.__('Enable Single Click Navigation'),\n        isToggled: () => browser.singleClickNavigation,\n        execute: () => {\n            const value = !browser.singleClickNavigation;\n            const key = 'singleClickNavigation';\n            if (settingRegistry) {\n                return settingRegistry\n                    .set(FILE_BROWSER_PLUGIN_ID, key, value)\n                    .catch((reason) => {\n                    console.error(`Failed to set singleClickNavigation setting`);\n                });\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.toggleHiddenFiles, {\n        label: trans.__('Show Hidden Files'),\n        isToggled: () => browser.showHiddenFiles,\n        isVisible: () => PageConfig.getOption('allow_hidden_files') === 'true',\n        execute: () => {\n            const value = !browser.showHiddenFiles;\n            const key = 'showHiddenFiles';\n            if (settingRegistry) {\n                return settingRegistry\n                    .set(FILE_BROWSER_PLUGIN_ID, key, value)\n                    .catch((reason) => {\n                    console.error(`Failed to set showHiddenFiles setting`);\n                });\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.toggleFileCheckboxes, {\n        label: trans.__('Show File Checkboxes'),\n        isToggled: () => browser.showFileCheckboxes,\n        execute: () => {\n            const value = !browser.showFileCheckboxes;\n            const key = 'showFileCheckboxes';\n            if (settingRegistry) {\n                return settingRegistry\n                    .set(FILE_BROWSER_PLUGIN_ID, key, value)\n                    .catch((reason) => {\n                    console.error(`Failed to set showFileCheckboxes setting`);\n                });\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.search, {\n        label: trans.__('Search on File Names'),\n        execute: () => alert('search')\n    });\n}\n/**\n * Export the plugins as default.\n */\nconst plugins = [\n    factory,\n    defaultFileBrowser,\n    browser,\n    browserSettings,\n    shareFile,\n    fileUploadStatus,\n    downloadPlugin,\n    browserWidget,\n    openWithPlugin,\n    openBrowserTabPlugin,\n    openUrlPlugin\n];\nexport default plugins;\n/**\n * A namespace for private module data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Get browser object given file path.\n     */\n    function getBrowserForPath(path, browser, factory) {\n        const { tracker } = factory;\n        const driveName = browser.model.manager.services.contents.driveName(path);\n        if (driveName) {\n            const browserForPath = tracker.find(_path => _path.model.driveName === driveName);\n            if (!browserForPath) {\n                // warn that no filebrowser could be found for this driveName\n                console.warn(`${CommandIDs.goToPath} failed to find filebrowser for path: ${path}`);\n                return;\n            }\n            return browserForPath;\n        }\n        // if driveName is empty, assume the main filebrowser\n        return browser;\n    }\n    Private.getBrowserForPath = getBrowserForPath;\n    /**\n     * Navigate to a path or the path containing a file.\n     */\n    async function navigateToPath(path, browser, factory, translator) {\n        const trans = translator.load('jupyterlab');\n        const browserForPath = Private.getBrowserForPath(path, browser, factory);\n        if (!browserForPath) {\n            throw new Error(trans.__('No browser for path'));\n        }\n        const { services } = browserForPath.model.manager;\n        const localPath = services.contents.localPath(path);\n        await services.ready;\n        const item = await services.contents.get(path, { content: false });\n        const { model } = browserForPath;\n        await model.restored;\n        if (item.type === 'directory') {\n            await model.cd(`/${localPath}`);\n        }\n        else {\n            await model.cd(`/${PathExt.dirname(localPath)}`);\n        }\n        return item;\n    }\n    Private.navigateToPath = navigateToPath;\n    /**\n     * Restores file browser state and overrides state if tree resolver resolves.\n     */\n    async function restoreBrowser(browser, commands, router, tree, app, labShell) {\n        const restoring = 'jp-mod-restoring';\n        browser.addClass(restoring);\n        if (!router) {\n            await browser.model.restore(browser.id);\n            await browser.model.refresh();\n            browser.removeClass(restoring);\n            return;\n        }\n        const listener = async () => {\n            router.routed.disconnect(listener);\n            const paths = await (tree === null || tree === void 0 ? void 0 : tree.paths);\n            if ((paths === null || paths === void 0 ? void 0 : paths.file) || (paths === null || paths === void 0 ? void 0 : paths.browser)) {\n                // Restore the model without populating it.\n                await browser.model.restore(browser.id, false);\n                if (paths.file) {\n                    await commands.execute(CommandIDs.openPath, {\n                        path: paths.file,\n                        dontShowBrowser: true\n                    });\n                }\n                if (paths.browser) {\n                    await commands.execute(CommandIDs.openPath, {\n                        path: paths.browser,\n                        dontShowBrowser: true\n                    });\n                }\n            }\n            else {\n                await browser.model.restore(browser.id);\n                await browser.model.refresh();\n            }\n            browser.removeClass(restoring);\n            if (labShell === null || labShell === void 0 ? void 0 : labShell.isEmpty('main')) {\n                void commands.execute('launcher:create');\n            }\n        };\n        router.routed.connect(listener);\n    }\n    Private.restoreBrowser = restoreBrowser;\n    let OpenWith;\n    (function (OpenWith) {\n        /**\n         * Get the factories for the selected item\n         *\n         * @param docRegistry Application document registry\n         * @param item Selected item model\n         * @returns Available factories for the model\n         */\n        function getFactories(docRegistry, item) {\n            const factories = docRegistry.preferredWidgetFactories(item.path);\n            const notebookFactory = docRegistry.getWidgetFactory('notebook');\n            if (notebookFactory &&\n                item.type === 'notebook' &&\n                factories.indexOf(notebookFactory) === -1) {\n                factories.unshift(notebookFactory);\n            }\n            return factories;\n        }\n        OpenWith.getFactories = getFactories;\n        /**\n         * Return the intersection of multiple iterables.\n         *\n         * @param iterables Iterator of iterables\n         * @returns Set of common elements to all iterables\n         */\n        function intersection(iterables) {\n            let accumulator = undefined;\n            for (const current of iterables) {\n                // Initialize accumulator.\n                if (accumulator === undefined) {\n                    accumulator = new Set(current);\n                    continue;\n                }\n                // Return early if empty.\n                if (accumulator.size === 0) {\n                    return accumulator;\n                }\n                // Keep the intersection of accumulator and current.\n                let intersection = new Set();\n                for (const value of current) {\n                    if (accumulator.has(value)) {\n                        intersection.add(value);\n                    }\n                }\n                accumulator = intersection;\n            }\n            return accumulator !== null && accumulator !== void 0 ? accumulator : new Set();\n        }\n        OpenWith.intersection = intersection;\n    })(OpenWith = Private.OpenWith || (Private.OpenWith = {}));\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/statusbar/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/docmanager/style/index.js';\nimport '@jupyterlab/filebrowser/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { DOMUtils, showErrorMessage } from '@jupyterlab/apputils';\nimport { PageConfig, PathExt } from '@jupyterlab/coreutils';\nimport { renameFile } from '@jupyterlab/docmanager';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { ellipsesIcon, homeIcon as preferredIcon, folderIcon as rootIcon } from '@jupyterlab/ui-components';\nimport { ArrayExt } from '@lumino/algorithm';\nimport { JSONExt } from '@lumino/coreutils';\nimport { ElementExt } from '@lumino/domutils';\nimport { Widget } from '@lumino/widgets';\n/**\n * The class name added to the breadcrumb node.\n */\nconst BREADCRUMB_CLASS = 'jp-BreadCrumbs';\n/**\n * The class name for the breadcrumbs home node\n */\nconst BREADCRUMB_ROOT_CLASS = 'jp-BreadCrumbs-home';\n/**\n * The class name for the breadcrumbs preferred node\n */\nconst BREADCRUMB_PREFERRED_CLASS = 'jp-BreadCrumbs-preferred';\n/**\n * The class name added to the breadcrumb node.\n */\nconst BREADCRUMB_ITEM_CLASS = 'jp-BreadCrumbs-item';\n/**\n * Bread crumb paths.\n */\nconst BREAD_CRUMB_PATHS = ['/', '../../', '../', ''];\n/**\n * The mime type for a contents drag object.\n */\nconst CONTENTS_MIME = 'application/x-jupyter-icontents';\n/**\n * The class name added to drop targets.\n */\nconst DROP_TARGET_CLASS = 'jp-mod-dropTarget';\n/**\n * A class which hosts folder breadcrumbs.\n */\nexport class BreadCrumbs extends Widget {\n    /**\n     * Construct a new file browser crumb widget.\n     *\n     * @param options Constructor options.\n     */\n    constructor(options) {\n        super();\n        this._previousState = null;\n        this.translator = options.translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        this._model = options.model;\n        this._fullPath = options.fullPath || false;\n        this.addClass(BREADCRUMB_CLASS);\n        this._crumbs = Private.createCrumbs();\n        this._crumbSeps = Private.createCrumbSeparators();\n        const hasPreferred = PageConfig.getOption('preferredPath');\n        this._hasPreferred = hasPreferred && hasPreferred !== '/' ? true : false;\n        if (this._hasPreferred) {\n            this.node.appendChild(this._crumbs[Private.Crumb.Preferred]);\n        }\n        this.node.appendChild(this._crumbs[Private.Crumb.Home]);\n        this._model.refreshed.connect(this.update, this);\n    }\n    /**\n     * Handle the DOM events for the bread crumbs.\n     *\n     * @param event - The DOM event sent to the widget.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the panel's DOM node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'click':\n                this._evtClick(event);\n                break;\n            case 'lm-dragenter':\n                this._evtDragEnter(event);\n                break;\n            case 'lm-dragleave':\n                this._evtDragLeave(event);\n                break;\n            case 'lm-dragover':\n                this._evtDragOver(event);\n                break;\n            case 'lm-drop':\n                this._evtDrop(event);\n                break;\n            default:\n                return;\n        }\n    }\n    /**\n     * Whether to show the full path in the breadcrumbs\n     */\n    get fullPath() {\n        return this._fullPath;\n    }\n    set fullPath(value) {\n        this._fullPath = value;\n    }\n    /**\n     * A message handler invoked on an `'after-attach'` message.\n     */\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        this.update();\n        const node = this.node;\n        node.addEventListener('click', this);\n        node.addEventListener('lm-dragenter', this);\n        node.addEventListener('lm-dragleave', this);\n        node.addEventListener('lm-dragover', this);\n        node.addEventListener('lm-drop', this);\n    }\n    /**\n     * A message handler invoked on a `'before-detach'` message.\n     */\n    onBeforeDetach(msg) {\n        super.onBeforeDetach(msg);\n        const node = this.node;\n        node.removeEventListener('click', this);\n        node.removeEventListener('lm-dragenter', this);\n        node.removeEventListener('lm-dragleave', this);\n        node.removeEventListener('lm-dragover', this);\n        node.removeEventListener('lm-drop', this);\n    }\n    /**\n     * A handler invoked on an `'update-request'` message.\n     */\n    onUpdateRequest(msg) {\n        // Update the breadcrumb list.\n        const contents = this._model.manager.services.contents;\n        const localPath = contents.localPath(this._model.path);\n        const state = {\n            path: localPath,\n            hasPreferred: this._hasPreferred,\n            fullPath: this._fullPath\n        };\n        if (this._previousState && JSONExt.deepEqual(state, this._previousState)) {\n            return;\n        }\n        this._previousState = state;\n        Private.updateCrumbs(this._crumbs, this._crumbSeps, state);\n    }\n    /**\n     * Handle the `'click'` event for the widget.\n     */\n    _evtClick(event) {\n        // Do nothing if it's not a left mouse press.\n        if (event.button !== 0) {\n            return;\n        }\n        // Find a valid click target.\n        let node = event.target;\n        while (node && node !== this.node) {\n            if (node.classList.contains(BREADCRUMB_PREFERRED_CLASS)) {\n                this._model\n                    .cd(PageConfig.getOption('preferredPath'))\n                    .catch(error => showErrorMessage(this._trans.__('Open Error'), error));\n                // Stop the event propagation.\n                event.preventDefault();\n                event.stopPropagation();\n                return;\n            }\n            if (node.classList.contains(BREADCRUMB_ITEM_CLASS) ||\n                node.classList.contains(BREADCRUMB_ROOT_CLASS)) {\n                let index = ArrayExt.findFirstIndex(this._crumbs, value => value === node);\n                let destination = BREAD_CRUMB_PATHS[index];\n                if (this._fullPath &&\n                    index < 0 &&\n                    !node.classList.contains(BREADCRUMB_ROOT_CLASS)) {\n                    destination = node.title;\n                }\n                this._model\n                    .cd(destination)\n                    .catch(error => showErrorMessage(this._trans.__('Open Error'), error));\n                // Stop the event propagation.\n                event.preventDefault();\n                event.stopPropagation();\n                return;\n            }\n            node = node.parentElement;\n        }\n    }\n    /**\n     * Handle the `'lm-dragenter'` event for the widget.\n     */\n    _evtDragEnter(event) {\n        if (event.mimeData.hasData(CONTENTS_MIME)) {\n            const index = ArrayExt.findFirstIndex(this._crumbs, node => ElementExt.hitTest(node, event.clientX, event.clientY));\n            if (index !== -1) {\n                if (index !== Private.Crumb.Current) {\n                    this._crumbs[index].classList.add(DROP_TARGET_CLASS);\n                    event.preventDefault();\n                    event.stopPropagation();\n                }\n            }\n        }\n    }\n    /**\n     * Handle the `'lm-dragleave'` event for the widget.\n     */\n    _evtDragLeave(event) {\n        event.preventDefault();\n        event.stopPropagation();\n        const dropTarget = DOMUtils.findElement(this.node, DROP_TARGET_CLASS);\n        if (dropTarget) {\n            dropTarget.classList.remove(DROP_TARGET_CLASS);\n        }\n    }\n    /**\n     * Handle the `'lm-dragover'` event for the widget.\n     */\n    _evtDragOver(event) {\n        event.preventDefault();\n        event.stopPropagation();\n        event.dropAction = event.proposedAction;\n        const dropTarget = DOMUtils.findElement(this.node, DROP_TARGET_CLASS);\n        if (dropTarget) {\n            dropTarget.classList.remove(DROP_TARGET_CLASS);\n        }\n        const index = ArrayExt.findFirstIndex(this._crumbs, node => ElementExt.hitTest(node, event.clientX, event.clientY));\n        if (index !== -1) {\n            this._crumbs[index].classList.add(DROP_TARGET_CLASS);\n        }\n    }\n    /**\n     * Handle the `'lm-drop'` event for the widget.\n     */\n    _evtDrop(event) {\n        event.preventDefault();\n        event.stopPropagation();\n        if (event.proposedAction === 'none') {\n            event.dropAction = 'none';\n            return;\n        }\n        if (!event.mimeData.hasData(CONTENTS_MIME)) {\n            return;\n        }\n        event.dropAction = event.proposedAction;\n        let target = event.target;\n        while (target && target.parentElement) {\n            if (target.classList.contains(DROP_TARGET_CLASS)) {\n                target.classList.remove(DROP_TARGET_CLASS);\n                break;\n            }\n            target = target.parentElement;\n        }\n        // Get the path based on the target node.\n        const index = ArrayExt.findFirstIndex(this._crumbs, node => node === target);\n        if (index === -1) {\n            return;\n        }\n        const model = this._model;\n        const path = PathExt.resolve(model.path, BREAD_CRUMB_PATHS[index]);\n        const manager = model.manager;\n        // Move all of the items.\n        const promises = [];\n        const oldPaths = event.mimeData.getData(CONTENTS_MIME);\n        for (const oldPath of oldPaths) {\n            const localOldPath = manager.services.contents.localPath(oldPath);\n            const name = PathExt.basename(localOldPath);\n            const newPath = PathExt.join(path, name);\n            promises.push(renameFile(manager, oldPath, newPath));\n        }\n        void Promise.all(promises).catch(err => {\n            return showErrorMessage(this._trans.__('Move Error'), err);\n        });\n    }\n}\n/**\n * The namespace for the crumbs private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Breadcrumb item list enum.\n     */\n    let Crumb;\n    (function (Crumb) {\n        Crumb[Crumb[\"Home\"] = 0] = \"Home\";\n        Crumb[Crumb[\"Ellipsis\"] = 1] = \"Ellipsis\";\n        Crumb[Crumb[\"Parent\"] = 2] = \"Parent\";\n        Crumb[Crumb[\"Current\"] = 3] = \"Current\";\n        Crumb[Crumb[\"Preferred\"] = 4] = \"Preferred\";\n    })(Crumb = Private.Crumb || (Private.Crumb = {}));\n    /**\n     * Populate the breadcrumb node.\n     */\n    function updateCrumbs(breadcrumbs, separators, state) {\n        const node = breadcrumbs[0].parentNode;\n        // Remove all but the home or preferred node.\n        const firstChild = node.firstChild;\n        while (firstChild && firstChild.nextSibling) {\n            node.removeChild(firstChild.nextSibling);\n        }\n        if (state.hasPreferred) {\n            node.appendChild(breadcrumbs[Crumb.Home]);\n            node.appendChild(separators[0]);\n        }\n        else {\n            node.appendChild(separators[0]);\n        }\n        const parts = state.path.split('/');\n        if (!state.fullPath && parts.length > 2) {\n            node.appendChild(breadcrumbs[Crumb.Ellipsis]);\n            const grandParent = parts.slice(0, parts.length - 2).join('/');\n            breadcrumbs[Crumb.Ellipsis].title = grandParent;\n            node.appendChild(separators[1]);\n        }\n        if (state.path) {\n            if (!state.fullPath) {\n                if (parts.length >= 2) {\n                    breadcrumbs[Crumb.Parent].textContent = parts[parts.length - 2];\n                    node.appendChild(breadcrumbs[Crumb.Parent]);\n                    const parent = parts.slice(0, parts.length - 1).join('/');\n                    breadcrumbs[Crumb.Parent].title = parent;\n                    node.appendChild(separators[2]);\n                }\n                breadcrumbs[Crumb.Current].textContent = parts[parts.length - 1];\n                node.appendChild(breadcrumbs[Crumb.Current]);\n                breadcrumbs[Crumb.Current].title = state.path;\n                node.appendChild(separators[3]);\n            }\n            else {\n                for (let i = 0; i < parts.length; i++) {\n                    const elem = document.createElement('span');\n                    elem.className = BREADCRUMB_ITEM_CLASS;\n                    elem.textContent = parts[i];\n                    const elemPath = `/${parts.slice(0, i + 1).join('/')}`;\n                    elem.title = elemPath;\n                    node.appendChild(elem);\n                    const separator = document.createElement('span');\n                    separator.textContent = '/';\n                    node.appendChild(separator);\n                }\n            }\n        }\n    }\n    Private.updateCrumbs = updateCrumbs;\n    /**\n     * Create the breadcrumb nodes.\n     */\n    function createCrumbs() {\n        const home = rootIcon.element({\n            className: BREADCRUMB_ROOT_CLASS,\n            tag: 'span',\n            title: PageConfig.getOption('serverRoot') || 'Jupyter Server Root',\n            stylesheet: 'breadCrumb'\n        });\n        const ellipsis = ellipsesIcon.element({\n            className: BREADCRUMB_ITEM_CLASS,\n            tag: 'span',\n            stylesheet: 'breadCrumb'\n        });\n        const parent = document.createElement('span');\n        parent.className = BREADCRUMB_ITEM_CLASS;\n        const current = document.createElement('span');\n        current.className = BREADCRUMB_ITEM_CLASS;\n        const preferred = preferredIcon.element({\n            className: BREADCRUMB_PREFERRED_CLASS,\n            tag: 'span',\n            title: PageConfig.getOption('preferredPath') || 'Jupyter Preferred Path',\n            stylesheet: 'breadCrumb'\n        });\n        return [home, ellipsis, parent, current, preferred];\n    }\n    Private.createCrumbs = createCrumbs;\n    /**\n     * Create the breadcrumb separator nodes.\n     */\n    function createCrumbSeparators() {\n        const items = [];\n        // The maximum number of directories that will be shown in the crumbs\n        const MAX_DIRECTORIES = 2;\n        // Make separators for after each directory, one at the beginning, and one\n        // after a possible ellipsis.\n        for (let i = 0; i < MAX_DIRECTORIES + 2; i++) {\n            const item = document.createElement('span');\n            item.textContent = '/';\n            items.push(item);\n        }\n        return items;\n    }\n    Private.createCrumbSeparators = createCrumbSeparators;\n})(Private || (Private = {}));\n//# sourceMappingURL=crumbs.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Dialog, DOMUtils, showDialog, showErrorMessage } from '@jupyterlab/apputils';\nimport { PageConfig, PathExt, Time } from '@jupyterlab/coreutils';\nimport { isValidFileName, renameFile } from '@jupyterlab/docmanager';\nimport { DocumentRegistry } from '@jupyterlab/docregistry';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { caretDownIcon, caretUpIcon, classes, LabIcon } from '@jupyterlab/ui-components';\nimport { ArrayExt, filter, StringExt } from '@lumino/algorithm';\nimport { MimeData, PromiseDelegate } from '@lumino/coreutils';\nimport { ElementExt } from '@lumino/domutils';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Drag } from '@lumino/dragdrop';\nimport { MessageLoop } from '@lumino/messaging';\nimport { Signal } from '@lumino/signaling';\nimport { h, VirtualDOM } from '@lumino/virtualdom';\nimport { Widget } from '@lumino/widgets';\n/**\n * The class name added to DirListing widget.\n */\nconst DIR_LISTING_CLASS = 'jp-DirListing';\n/**\n * The class name added to a dir listing header node.\n */\nconst HEADER_CLASS = 'jp-DirListing-header';\n/**\n * The class name added to a dir listing list header cell.\n */\nconst HEADER_ITEM_CLASS = 'jp-DirListing-headerItem';\n/**\n * The class name added to a header cell text node.\n */\nconst HEADER_ITEM_TEXT_CLASS = 'jp-DirListing-headerItemText';\n/**\n * The class name added to a header cell icon node.\n */\nconst HEADER_ITEM_ICON_CLASS = 'jp-DirListing-headerItemIcon';\n/**\n * The class name added to the dir listing content node.\n */\nconst CONTENT_CLASS = 'jp-DirListing-content';\n/**\n * The class name added to dir listing content item.\n */\nconst ITEM_CLASS = 'jp-DirListing-item';\n/**\n * The class name added to the listing item text cell.\n */\nconst ITEM_TEXT_CLASS = 'jp-DirListing-itemText';\n/**\n * The class name added to the listing item text cell.\n */\nconst ITEM_NAME_COLUMN_CLASS = 'jp-DirListing-itemName';\n/**\n * The class name added to the listing item icon cell.\n */\nconst ITEM_ICON_CLASS = 'jp-DirListing-itemIcon';\n/**\n * The class name added to the listing item modified cell.\n */\nconst ITEM_MODIFIED_CLASS = 'jp-DirListing-itemModified';\n/**\n * The class name added to the listing item file size cell.\n */\nconst ITEM_FILE_SIZE_CLASS = 'jp-DirListing-itemFileSize';\n/**\n * The class name added to the label element that wraps each item's checkbox and\n * the header's check-all checkbox.\n */\nconst CHECKBOX_WRAPPER_CLASS = 'jp-DirListing-checkboxWrapper';\n/**\n * The class name added to the dir listing editor node.\n */\nconst EDITOR_CLASS = 'jp-DirListing-editor';\n/**\n * The class name added to the name column header cell.\n */\nconst NAME_ID_CLASS = 'jp-id-name';\n/**\n * The class name added to the modified column header cell.\n */\nconst MODIFIED_ID_CLASS = 'jp-id-modified';\n/**\n * The class name added to the file size column header cell.\n */\nconst FILE_SIZE_ID_CLASS = 'jp-id-filesize';\n/**\n * The mime type for a contents drag object.\n */\nconst CONTENTS_MIME = 'application/x-jupyter-icontents';\n/**\n * The mime type for a rich contents drag object.\n */\nconst CONTENTS_MIME_RICH = 'application/x-jupyter-icontentsrich';\n/**\n * The class name added to drop targets.\n */\nconst DROP_TARGET_CLASS = 'jp-mod-dropTarget';\n/**\n * The class name added to selected rows.\n */\nconst SELECTED_CLASS = 'jp-mod-selected';\n/**\n * The class name added to drag state icons to add space between the icon and the file name\n */\nconst DRAG_ICON_CLASS = 'jp-DragIcon';\n/**\n * The class name added to column resize handle.\n */\nconst RESIZE_HANDLE_CLASS = 'jp-DirListing-resizeHandle';\n/**\n * The class name added to the widget when there are items on the clipboard.\n */\nconst CLIPBOARD_CLASS = 'jp-mod-clipboard';\n/**\n * The class name added to cut rows.\n */\nconst CUT_CLASS = 'jp-mod-cut';\n/**\n * The class name added when there are more than one selected rows.\n */\nconst MULTI_SELECTED_CLASS = 'jp-mod-multiSelected';\n/**\n * The class name added to indicate running notebook.\n */\nconst RUNNING_CLASS = 'jp-mod-running';\n/**\n * The class name added to indicate the active element.\n */\nconst ACTIVE_CLASS = 'jp-mod-active';\n/**\n * The class name added for a descending sort.\n */\nconst DESCENDING_CLASS = 'jp-mod-descending';\n/**\n * The maximum duration between two key presses when selecting files by prefix.\n */\nconst PREFIX_APPEND_DURATION = 1000;\n/**\n * The default width of the resize handle.\n */\nconst DEFAULT_HANDLE_WIDTH = 5;\n/**\n * The threshold in pixels to start a drag event.\n */\nconst DRAG_THRESHOLD = 5;\n/**\n * A boolean indicating whether the platform is Mac.\n */\nconst IS_MAC = !!navigator.platform.match(/Mac/i);\n/**\n * The factory MIME type supported by lumino dock panels.\n */\nconst FACTORY_MIME = 'application/vnd.lumino.widget-factory';\n/**\n * A widget which hosts a file list area.\n */\nexport class DirListing extends Widget {\n    /**\n     * Construct a new file browser directory listing widget.\n     *\n     * @param options The constructor options\n     */\n    constructor(options) {\n        super({\n            node: (options.renderer || DirListing.defaultRenderer).createNode()\n        });\n        this._items = [];\n        this._sortedItems = [];\n        this._sortState = {\n            direction: 'ascending',\n            key: 'name'\n        };\n        this._onItemOpened = new Signal(this);\n        this._drag = null;\n        this._dragData = null;\n        this._resizeData = null;\n        this._selectTimer = -1;\n        this._isCut = false;\n        this._prevPath = '';\n        this._clipboard = [];\n        this._softSelection = '';\n        this.selection = Object.create(null);\n        this._searchPrefix = '';\n        this._searchPrefixTimer = -1;\n        this._inRename = false;\n        this._isDirty = false;\n        this._hiddenColumns = new Set();\n        this._columnSizes = {\n            name: null,\n            file_size: null,\n            is_selected: null,\n            last_modified: null\n        };\n        this._sortNotebooksFirst = false;\n        this._allowSingleClick = false;\n        // _focusIndex should never be set outside the range [0, this._items.length - 1]\n        this._focusIndex = 0;\n        this._allUploaded = new Signal(this);\n        this._width = null;\n        this._state = null;\n        this._contentScrollbarWidth = 0;\n        this._contentSizeObserver = new ResizeObserver(this._onContentResize.bind(this));\n        this._paddingWidth = 0;\n        this._handleWidth = DEFAULT_HANDLE_WIDTH;\n        this._lastRenderedState = new WeakMap();\n        this.addClass(DIR_LISTING_CLASS);\n        this.translator = options.translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        this._model = options.model;\n        this._model.fileChanged.connect(this._onFileChanged, this);\n        this._model.refreshed.connect(this._onModelRefreshed, this);\n        this._model.pathChanged.connect(this._onPathChanged, this);\n        this._editNode = document.createElement('input');\n        this._editNode.className = EDITOR_CLASS;\n        this._manager = this._model.manager;\n        this._renderer = options.renderer || DirListing.defaultRenderer;\n        this._state = options.state || null;\n        // Get the width of the \"modified\" column\n        this._updateModifiedSize(this.node);\n        const headerNode = DOMUtils.findElement(this.node, HEADER_CLASS);\n        // hide the file size column by default\n        this._hiddenColumns.add('file_size');\n        this._renderer.populateHeaderNode(headerNode, this.translator, this._hiddenColumns, this._columnSizes);\n        this._manager.activateRequested.connect(this._onActivateRequested, this);\n    }\n    /**\n     * Dispose of the resources held by the directory listing.\n     */\n    dispose() {\n        this._items.length = 0;\n        this._sortedItems.length = 0;\n        this._clipboard.length = 0;\n        super.dispose();\n    }\n    /**\n     * Get the model used by the listing.\n     */\n    get model() {\n        return this._model;\n    }\n    /**\n     * Get the dir listing header node.\n     *\n     * #### Notes\n     * This is the node which holds the header cells.\n     *\n     * Modifying this node directly can lead to undefined behavior.\n     */\n    get headerNode() {\n        return DOMUtils.findElement(this.node, HEADER_CLASS);\n    }\n    /**\n     * Get the dir listing content node.\n     *\n     * #### Notes\n     * This is the node which holds the item nodes.\n     *\n     * Modifying this node directly can lead to undefined behavior.\n     */\n    get contentNode() {\n        return DOMUtils.findElement(this.node, CONTENT_CLASS);\n    }\n    /**\n     * The renderer instance used by the directory listing.\n     */\n    get renderer() {\n        return this._renderer;\n    }\n    /**\n     * The current sort state.\n     */\n    get sortState() {\n        return this._sortState;\n    }\n    /**\n     * A signal fired when an item is opened.\n     */\n    get onItemOpened() {\n        return this._onItemOpened;\n    }\n    /**\n     * Create an iterator over the listing's selected items.\n     *\n     * @returns A new iterator over the listing's selected items.\n     */\n    selectedItems() {\n        const items = this._sortedItems;\n        return filter(items, item => this.selection[item.path]);\n    }\n    /**\n     * Create an iterator over the listing's sorted items.\n     *\n     * @returns A new iterator over the listing's sorted items.\n     */\n    sortedItems() {\n        return this._sortedItems[Symbol.iterator]();\n    }\n    /**\n     * Sort the items using a sort condition.\n     */\n    sort(state) {\n        this._sortedItems = Private.sort(this.model.items(), state, this._sortNotebooksFirst, this.translator);\n        this._sortState = state;\n        this.update();\n    }\n    /**\n     * Rename the first currently selected item.\n     *\n     * @returns A promise that resolves with the new name of the item.\n     */\n    rename() {\n        return this._doRename();\n    }\n    /**\n     * Cut the selected items.\n     */\n    cut() {\n        this._isCut = true;\n        this._copy();\n        this.update();\n    }\n    /**\n     * Copy the selected items.\n     */\n    copy() {\n        this._copy();\n    }\n    /**\n     * Paste the items from the clipboard.\n     *\n     * @returns A promise that resolves when the operation is complete.\n     */\n    paste() {\n        if (!this._clipboard.length) {\n            this._isCut = false;\n            return Promise.resolve(undefined);\n        }\n        const basePath = this._model.path;\n        const promises = [];\n        for (const path of this._clipboard) {\n            if (this._isCut) {\n                const localPath = this._manager.services.contents.localPath(path);\n                const parts = localPath.split('/');\n                const name = parts[parts.length - 1];\n                const newPath = PathExt.join(basePath, name);\n                promises.push(this._model.manager.rename(path, newPath));\n            }\n            else {\n                promises.push(this._model.manager.copy(path, basePath));\n            }\n        }\n        // Remove any cut modifiers.\n        for (const item of this._items) {\n            item.classList.remove(CUT_CLASS);\n        }\n        this._clipboard.length = 0;\n        this._isCut = false;\n        this.removeClass(CLIPBOARD_CLASS);\n        return Promise.all(promises)\n            .then(() => {\n            return undefined;\n        })\n            .catch(error => {\n            void showErrorMessage(this._trans._p('showErrorMessage', 'Paste Error'), error);\n        });\n    }\n    /**\n     * Delete the currently selected item(s).\n     *\n     * @returns A promise that resolves when the operation is complete.\n     */\n    async delete() {\n        const deleteToTrash = PageConfig.getOption('delete_to_trash') === 'true';\n        const items = this._sortedItems.filter(item => this.selection[item.path]);\n        if (!items.length) {\n            return;\n        }\n        const moveToTrashActionMessage = this._trans.__('Are you sure you want to move to trash: %1?', items[0].name);\n        const deleteActionMessage = this._trans.__('Are you sure you want to permanently delete: %1?', items[0].name);\n        const moveToTrashItemsActionMessage = this._trans._n('Are you sure you want to move to trash the %1 selected item?', 'Are you sure you want to move to trash the %1 selected items?', items.length);\n        const deleteActionItemsMessage = this._trans._n('Are you sure you want to permanently delete the %1 selected item?', 'Are you sure you want to permanently delete the %1 selected items?', items.length);\n        const actionMessage = deleteToTrash\n            ? moveToTrashActionMessage\n            : deleteActionMessage;\n        const itemsActionMessage = deleteToTrash\n            ? moveToTrashItemsActionMessage\n            : deleteActionItemsMessage;\n        const actionName = deleteToTrash\n            ? this._trans.__('Move to Trash')\n            : this._trans.__('Delete');\n        const message = items.length === 1 ? actionMessage : itemsActionMessage;\n        const result = await showDialog({\n            title: actionName,\n            body: message,\n            buttons: [\n                Dialog.cancelButton({ label: this._trans.__('Cancel') }),\n                Dialog.warnButton({ label: actionName })\n            ],\n            // By default focus on \"Cancel\" to protect from accidental deletion\n            // (\"delete\" and \"Enter\" are next to each other on many keyboards).\n            defaultButton: 0\n        });\n        if (!this.isDisposed && result.button.accept) {\n            await this._delete(items.map(item => item.path));\n        }\n        // Re-focus\n        let focusIndex = this._focusIndex;\n        const lastIndexAfterDelete = this._sortedItems.length - items.length - 1;\n        if (focusIndex > lastIndexAfterDelete) {\n            // If the focus index after deleting items is out of bounds, set it to the\n            // last item.\n            focusIndex = Math.max(0, lastIndexAfterDelete);\n        }\n        this._focusItem(focusIndex);\n    }\n    /**\n     * Duplicate the currently selected item(s).\n     *\n     * @returns A promise that resolves when the operation is complete.\n     */\n    duplicate() {\n        const basePath = this._model.path;\n        const promises = [];\n        for (const item of this.selectedItems()) {\n            if (item.type !== 'directory') {\n                promises.push(this._model.manager.copy(item.path, basePath));\n            }\n        }\n        return Promise.all(promises)\n            .then(() => {\n            return undefined;\n        })\n            .catch(error => {\n            void showErrorMessage(this._trans._p('showErrorMessage', 'Duplicate file'), error);\n        });\n    }\n    /**\n     * Download the currently selected item(s).\n     */\n    async download() {\n        await Promise.all(Array.from(this.selectedItems())\n            .filter(item => item.type !== 'directory')\n            .map(item => this._model.download(item.path)));\n    }\n    /**\n     * Restore the state of the file browser listing.\n     *\n     * @param id - The unique ID that is used to construct a state database key.\n     *\n     */\n    async restore(id) {\n        const key = `file-browser-${id}:columns`;\n        const state = this._state;\n        this._stateColumnsKey = key;\n        if (!state) {\n            return;\n        }\n        try {\n            const columns = await state.fetch(key);\n            if (!columns) {\n                return;\n            }\n            const sizes = columns['sizes'];\n            if (!sizes) {\n                return;\n            }\n            for (const [key, size] of Object.entries(sizes)) {\n                this._columnSizes[key] = size;\n            }\n            this._updateColumnSizes();\n        }\n        catch (error) {\n            await state.remove(key);\n        }\n    }\n    /**\n     * Shut down kernels on the applicable currently selected items.\n     *\n     * @returns A promise that resolves when the operation is complete.\n     */\n    shutdownKernels() {\n        const model = this._model;\n        const items = this._sortedItems;\n        const paths = items.map(item => item.path);\n        const promises = Array.from(this._model.sessions())\n            .filter(session => {\n            const index = ArrayExt.firstIndexOf(paths, session.path);\n            return this.selection[items[index].path];\n        })\n            .map(session => model.manager.services.sessions.shutdown(session.id));\n        return Promise.all(promises)\n            .then(() => {\n            return undefined;\n        })\n            .catch(error => {\n            void showErrorMessage(this._trans._p('showErrorMessage', 'Shut down kernel'), error);\n        });\n    }\n    /**\n     * Select next item.\n     *\n     * @param keepExisting - Whether to keep the current selection and add to it.\n     */\n    selectNext(keepExisting = false) {\n        let index = -1;\n        const selected = Object.keys(this.selection);\n        const items = this._sortedItems;\n        if (selected.length === 1 || keepExisting) {\n            // Select the next item.\n            const path = selected[selected.length - 1];\n            index = ArrayExt.findFirstIndex(items, value => value.path === path);\n            index += 1;\n            if (index === this._items.length) {\n                index = 0;\n            }\n        }\n        else if (selected.length === 0) {\n            // Select the first item.\n            index = 0;\n        }\n        else {\n            // Select the last selected item.\n            const path = selected[selected.length - 1];\n            index = ArrayExt.findFirstIndex(items, value => value.path === path);\n        }\n        if (index !== -1) {\n            this._selectItem(index, keepExisting);\n            ElementExt.scrollIntoViewIfNeeded(this.contentNode, this._items[index]);\n        }\n    }\n    /**\n     * Select previous item.\n     *\n     * @param keepExisting - Whether to keep the current selection and add to it.\n     */\n    selectPrevious(keepExisting = false) {\n        let index = -1;\n        const selected = Object.keys(this.selection);\n        const items = this._sortedItems;\n        if (selected.length === 1 || keepExisting) {\n            // Select the previous item.\n            const path = selected[0];\n            index = ArrayExt.findFirstIndex(items, value => value.path === path);\n            index -= 1;\n            if (index === -1) {\n                index = this._items.length - 1;\n            }\n        }\n        else if (selected.length === 0) {\n            // Select the last item.\n            index = this._items.length - 1;\n        }\n        else {\n            // Select the first selected item.\n            const path = selected[0];\n            index = ArrayExt.findFirstIndex(items, value => value.path === path);\n        }\n        if (index !== -1) {\n            this._selectItem(index, keepExisting);\n            ElementExt.scrollIntoViewIfNeeded(this.contentNode, this._items[index]);\n        }\n    }\n    /**\n     * Select the first item that starts with prefix being typed.\n     */\n    selectByPrefix() {\n        const prefix = this._searchPrefix.toLowerCase();\n        const items = this._sortedItems;\n        const index = ArrayExt.findFirstIndex(items, value => {\n            return value.name.toLowerCase().substr(0, prefix.length) === prefix;\n        });\n        if (index !== -1) {\n            this._selectItem(index, false);\n            ElementExt.scrollIntoViewIfNeeded(this.contentNode, this._items[index]);\n        }\n    }\n    /**\n     * Get whether an item is selected by name.\n     *\n     * @param name - The name of of the item.\n     *\n     * @returns Whether the item is selected.\n     */\n    isSelected(name) {\n        const items = this._sortedItems;\n        return (Array.from(filter(items, item => item.name === name && this.selection[item.path])).length !== 0);\n    }\n    /**\n     * Find a model given a click.\n     *\n     * @param event - The mouse event.\n     *\n     * @returns The model for the selected file.\n     */\n    modelForClick(event) {\n        const items = this._sortedItems;\n        const index = Private.hitTestNodes(this._items, event);\n        if (index !== -1) {\n            return items[index];\n        }\n        return undefined;\n    }\n    /**\n     * Clear the selected items.\n     */\n    clearSelectedItems() {\n        this.selection = Object.create(null);\n    }\n    /**\n     * Select an item by name.\n     *\n     * @param name - The name of the item to select.\n     * @param focus - Whether to move focus to the selected item.\n     *\n     * @returns A promise that resolves when the name is selected.\n     */\n    async selectItemByName(name, focus = false) {\n        return this._selectItemByName(name, focus);\n    }\n    /**\n     * Select an item by name.\n     *\n     * @param name - The name of the item to select.\n     * @param focus - Whether to move focus to the selected item.\n     * @param force - Whether to proceed with selection even if the file was already selected.\n     *\n     * @returns A promise that resolves when the name is selected.\n     */\n    async _selectItemByName(name, focus = false, force = false) {\n        if (!force && this.isSelected(name)) {\n            // Avoid API polling and DOM updates if already selected\n            return;\n        }\n        // Make sure the file is available.\n        await this.model.refresh();\n        if (this.isDisposed) {\n            throw new Error('File browser is disposed.');\n        }\n        const items = this._sortedItems;\n        const index = ArrayExt.findFirstIndex(items, value => value.name === name);\n        if (index === -1) {\n            throw new Error('Item does not exist.');\n        }\n        this._selectItem(index, false, focus);\n        MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n        ElementExt.scrollIntoViewIfNeeded(this.contentNode, this._items[index]);\n    }\n    /**\n     * Handle the DOM events for the directory listing.\n     *\n     * @param event - The DOM event sent to the widget.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the panel's DOM node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'mousedown':\n                this._evtMousedown(event);\n                break;\n            case 'mouseup':\n                this._evtMouseup(event);\n                break;\n            case 'mousemove':\n                this._evtMousemove(event);\n                break;\n            case 'keydown':\n                this.evtKeydown(event);\n                break;\n            case 'click':\n                this._evtClick(event);\n                break;\n            case 'dblclick':\n                this.evtDblClick(event);\n                break;\n            case 'dragenter':\n            case 'dragover':\n                this.addClass('jp-mod-native-drop');\n                event.preventDefault();\n                break;\n            case 'dragleave':\n            case 'dragend':\n                this.removeClass('jp-mod-native-drop');\n                break;\n            case 'drop':\n                this.removeClass('jp-mod-native-drop');\n                this.evtNativeDrop(event);\n                break;\n            case 'scroll':\n                this._evtScroll(event);\n                break;\n            case 'lm-dragenter':\n                this.evtDragEnter(event);\n                break;\n            case 'lm-dragleave':\n                this.evtDragLeave(event);\n                break;\n            case 'lm-dragover':\n                this.evtDragOver(event);\n                break;\n            case 'lm-drop':\n                this.evtDrop(event);\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * A message handler invoked on an `'after-attach'` message.\n     */\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        const node = this.node;\n        this._width = this._computeContentWidth();\n        const content = DOMUtils.findElement(node, CONTENT_CLASS);\n        node.addEventListener('mousedown', this);\n        node.addEventListener('keydown', this);\n        node.addEventListener('click', this);\n        node.addEventListener('dblclick', this);\n        this._contentSizeObserver.observe(content);\n        content.addEventListener('dragenter', this);\n        content.addEventListener('dragover', this);\n        content.addEventListener('dragleave', this);\n        content.addEventListener('dragend', this);\n        content.addEventListener('drop', this);\n        content.addEventListener('scroll', this);\n        content.addEventListener('lm-dragenter', this);\n        content.addEventListener('lm-dragleave', this);\n        content.addEventListener('lm-dragover', this);\n        content.addEventListener('lm-drop', this);\n    }\n    /**\n     * A message handler invoked on a `'before-detach'` message.\n     */\n    onBeforeDetach(msg) {\n        super.onBeforeDetach(msg);\n        const node = this.node;\n        const content = DOMUtils.findElement(node, CONTENT_CLASS);\n        node.removeEventListener('mousedown', this);\n        node.removeEventListener('keydown', this);\n        node.removeEventListener('click', this);\n        node.removeEventListener('dblclick', this);\n        this._contentSizeObserver.disconnect();\n        content.removeEventListener('scroll', this);\n        content.removeEventListener('dragover', this);\n        content.removeEventListener('dragover', this);\n        content.removeEventListener('dragleave', this);\n        content.removeEventListener('dragend', this);\n        content.removeEventListener('drop', this);\n        content.removeEventListener('lm-dragenter', this);\n        content.removeEventListener('lm-dragleave', this);\n        content.removeEventListener('lm-dragover', this);\n        content.removeEventListener('lm-drop', this);\n        document.removeEventListener('mousemove', this, true);\n        document.removeEventListener('mouseup', this, true);\n    }\n    /**\n     * A message handler invoked on an `'after-show'` message.\n     */\n    onAfterShow(msg) {\n        if (this._isDirty) {\n            // Update the sorted items.\n            this.sort(this.sortState);\n            this.update();\n        }\n    }\n    _onContentResize() {\n        const content = DOMUtils.findElement(this.node, CONTENT_CLASS);\n        const scrollbarWidth = content.offsetWidth - content.clientWidth;\n        if (scrollbarWidth != this._contentScrollbarWidth) {\n            this._contentScrollbarWidth = scrollbarWidth;\n            this._width = this._computeContentWidth();\n            this._updateColumnSizes();\n        }\n    }\n    _computeContentWidth(width = null) {\n        if (!width) {\n            width = this.node.getBoundingClientRect().width;\n        }\n        this._paddingWidth = parseFloat(window\n            .getComputedStyle(this.node)\n            .getPropertyValue('--jp-dirlisting-padding-width'));\n        const handle = this.node.querySelector(`.${RESIZE_HANDLE_CLASS}`);\n        this._handleWidth = handle\n            ? handle.getBoundingClientRect().width\n            : DEFAULT_HANDLE_WIDTH;\n        return width - this._paddingWidth * 2 - this._contentScrollbarWidth;\n    }\n    /**\n     * Update the modified column's size\n     */\n    _updateModifiedSize(node) {\n        var _a, _b;\n        // Look for the modified column's header\n        const modified = DOMUtils.findElement(node, MODIFIED_ID_CLASS);\n        this._modifiedWidth =\n            (_b = (_a = this._columnSizes['last_modified']) !== null && _a !== void 0 ? _a : modified === null || modified === void 0 ? void 0 : modified.getBoundingClientRect().width) !== null && _b !== void 0 ? _b : 83;\n        this._modifiedStyle =\n            this._modifiedWidth < 100\n                ? 'narrow'\n                : this._modifiedWidth > 120\n                    ? 'long'\n                    : 'short';\n    }\n    /**\n     * Rerender item nodes' modified dates, if the modified style has changed.\n     */\n    _updateModifiedStyleAndSize() {\n        const oldModifiedStyle = this._modifiedStyle;\n        // Update both size and style\n        this._updateModifiedSize(this.node);\n        if (oldModifiedStyle !== this._modifiedStyle) {\n            this.updateModified(this._sortedItems, this._items);\n        }\n    }\n    /**\n     * Update only the modified dates.\n     */\n    updateModified(items, nodes) {\n        items.forEach((item, i) => {\n            const node = nodes[i];\n            if (node && item.last_modified) {\n                const modified = DOMUtils.findElement(node, ITEM_MODIFIED_CLASS);\n                if (this.renderer.updateItemModified !== undefined) {\n                    this.renderer.updateItemModified(modified, item.last_modified, this._modifiedStyle);\n                }\n                else {\n                    DirListing.defaultRenderer.updateItemModified(modified, item.last_modified, this._modifiedStyle);\n                }\n            }\n        });\n    }\n    // Update item nodes based on widget state.\n    updateNodes(items, nodes, sizeOnly = false) {\n        var _a;\n        items.forEach((item, i) => {\n            const node = nodes[i];\n            if (sizeOnly && this.renderer.updateItemSize) {\n                if (!node) {\n                    // short-circuit in case if node is not yet ready\n                    return;\n                }\n                return this.renderer.updateItemSize(node, item, this._modifiedStyle, this._columnSizes);\n            }\n            const ft = this._manager.registry.getFileTypeForModel(item);\n            this.renderer.updateItemNode(node, item, ft, this.translator, this._hiddenColumns, this.selection[item.path], this._modifiedStyle, this._columnSizes);\n            if (this.selection[item.path] &&\n                this._isCut &&\n                this._model.path === this._prevPath) {\n                node.classList.add(CUT_CLASS);\n            }\n            // add metadata to the node\n            node.setAttribute('data-isdir', item.type === 'directory' ? 'true' : 'false');\n        });\n        // Handle the selectors on the widget node.\n        const selected = Object.keys(this.selection).length;\n        if (selected) {\n            this.addClass(SELECTED_CLASS);\n            if (selected > 1) {\n                this.addClass(MULTI_SELECTED_CLASS);\n            }\n        }\n        // Handle file session statuses.\n        const paths = items.map(item => item.path);\n        for (const session of this._model.sessions()) {\n            const index = ArrayExt.firstIndexOf(paths, session.path);\n            const node = nodes[index];\n            // Node may have been filtered out.\n            if (node) {\n                let name = (_a = session.kernel) === null || _a === void 0 ? void 0 : _a.name;\n                const specs = this._model.specs;\n                node.classList.add(RUNNING_CLASS);\n                if (specs && name) {\n                    const spec = specs.kernelspecs[name];\n                    name = spec ? spec.display_name : this._trans.__('unknown');\n                }\n                // Update node title only if it has changed.\n                const prevState = this._lastRenderedState.get(node);\n                if (prevState !== node.title) {\n                    node.title = this._trans.__('%1\\nKernel: %2', node.title, name);\n                    this._lastRenderedState.set(node, node.title);\n                }\n            }\n        }\n    }\n    /**\n     * A handler invoked on an `'update-request'` message.\n     */\n    onUpdateRequest(msg) {\n        this._isDirty = false;\n        // Fetch common variables.\n        const items = this._sortedItems;\n        const nodes = this._items;\n        const content = DOMUtils.findElement(this.node, CONTENT_CLASS);\n        const renderer = this._renderer;\n        this.removeClass(MULTI_SELECTED_CLASS);\n        this.removeClass(SELECTED_CLASS);\n        // Remove any excess item nodes.\n        while (nodes.length > items.length) {\n            content.removeChild(nodes.pop());\n        }\n        // Add any missing item nodes.\n        while (nodes.length < items.length) {\n            const node = renderer.createItemNode(this._hiddenColumns, this._columnSizes);\n            node.classList.add(ITEM_CLASS);\n            nodes.push(node);\n            content.appendChild(node);\n        }\n        nodes.forEach((node, i) => {\n            // Remove extra classes from the nodes.\n            node.classList.remove(SELECTED_CLASS);\n            node.classList.remove(RUNNING_CLASS);\n            node.classList.remove(CUT_CLASS);\n            // Uncheck each file checkbox\n            const checkbox = renderer.getCheckboxNode(node);\n            if (checkbox) {\n                checkbox.checked = false;\n            }\n            // Handle `tabIndex`\n            const nameNode = renderer.getNameNode(node);\n            if (nameNode) {\n                // Must check if the name node is there because it gets replaced by the\n                // edit node when editing the name of the file or directory.\n                nameNode.tabIndex = i === this._focusIndex ? 0 : -1;\n            }\n        });\n        // Put the check-all checkbox in the header into the correct state\n        const checkAllCheckbox = renderer.getCheckboxNode(this.headerNode);\n        if (checkAllCheckbox) {\n            const totalSelected = Object.keys(this.selection).length;\n            const allSelected = items.length > 0 && totalSelected === items.length;\n            const someSelected = !allSelected && totalSelected > 0;\n            checkAllCheckbox.checked = allSelected;\n            checkAllCheckbox.indeterminate = someSelected;\n            // Stash the state in data attributes so we can access them in the click\n            // handler (because in the click handler, checkbox.checked and\n            // checkbox.indeterminate do not hold the previous value; they hold the\n            // next value).\n            checkAllCheckbox.dataset.checked = String(allSelected);\n            checkAllCheckbox.dataset.indeterminate = String(someSelected);\n            const trans = this.translator.load('jupyterlab');\n            checkAllCheckbox === null || checkAllCheckbox === void 0 ? void 0 : checkAllCheckbox.setAttribute('aria-label', allSelected || someSelected\n                ? trans.__('Deselect all files and directories')\n                : trans.__('Select all files and directories'));\n        }\n        this.updateNodes(items, nodes);\n        this._prevPath = this._model.path;\n    }\n    onResize(msg) {\n        const { width } = msg.width === -1 ? this.node.getBoundingClientRect() : msg;\n        this._width = this._computeContentWidth(width);\n        this._updateColumnSizes();\n    }\n    setColumnVisibility(name, visible) {\n        if (visible) {\n            this._hiddenColumns.delete(name);\n        }\n        else {\n            this._hiddenColumns.add(name);\n        }\n        this.headerNode.innerHTML = '';\n        this._renderer.populateHeaderNode(this.headerNode, this.translator, this._hiddenColumns, this._columnSizes);\n        this._updateColumnSizes();\n    }\n    _updateColumnSizes(doNotGrowBeforeInclusive = null) {\n        // Adjust column sizes so that they add up to the total width available, preserving ratios\n        const visibleColumns = this._visibleColumns\n            .map(column => ({\n            ...column,\n            element: DOMUtils.findElement(this.node, column.className)\n        }))\n            .filter(column => {\n            // While all visible column will have an element, some extensions like jupyter-unfold\n            // do not render columns even if user requests them to be visible; this filter exists\n            // to ensure backward compatibility with such extensions and may be removed in the future.\n            return column.element;\n        });\n        // read from DOM\n        let total = 0;\n        for (const column of visibleColumns) {\n            let size = this._columnSizes[column.id];\n            if (size === null) {\n                size = column.element.getBoundingClientRect().width;\n            }\n            // restrict the minimum and maximum width\n            size = Math.max(size, column.minWidth);\n            if (this._width) {\n                let reservedForOtherColumns = 0;\n                for (const other of visibleColumns) {\n                    if (other.id === column.id) {\n                        continue;\n                    }\n                    reservedForOtherColumns += other.minWidth;\n                }\n                size = Math.min(size, this._width - reservedForOtherColumns);\n            }\n            this._columnSizes[column.id] = size;\n            total += size;\n        }\n        // Ensure that total fits\n        if (this._width) {\n            // Distribute the excess/shortfall over the columns which should stretch.\n            const excess = this._width - total;\n            let growAllowed = doNotGrowBeforeInclusive === null;\n            const growColumns = visibleColumns.filter(c => {\n                if (growAllowed) {\n                    return true;\n                }\n                if (c.id === doNotGrowBeforeInclusive) {\n                    growAllowed = true;\n                }\n                return false;\n            });\n            const totalWeight = growColumns\n                .map(c => c.grow)\n                .reduce((a, b) => a + b, 0);\n            for (const column of growColumns) {\n                // The value of `growBy` will be negative when the down-sizing\n                const growBy = (excess * column.grow) / totalWeight;\n                this._columnSizes[column.id] = this._columnSizes[column.id] + growBy;\n            }\n        }\n        const resizeHandles = this.node.getElementsByClassName(RESIZE_HANDLE_CLASS);\n        const resizableColumns = visibleColumns.map(column => Private.isResizable(column));\n        // Write to DOM\n        let i = 0;\n        for (const column of visibleColumns) {\n            let size = this._columnSizes[column.id];\n            if (Private.isResizable(column) && size) {\n                size -=\n                    (this._handleWidth * resizeHandles.length) / resizableColumns.length;\n                // if this is first resizable or last resizable column\n                if (i === 0 || i === resizableColumns.length - 1) {\n                    size += this._paddingWidth;\n                }\n                i += 1;\n            }\n            column.element.style.width = size === null ? '' : size + 'px';\n        }\n        this._updateModifiedStyleAndSize();\n        // Refresh sizes on the per item widths\n        if (this.isVisible) {\n            const items = this._items;\n            if (items.length !== 0) {\n                this.updateNodes(this._sortedItems, this._items, true);\n            }\n        }\n        if (this._state && this._stateColumnsKey) {\n            void this._state.save(this._stateColumnsKey, {\n                sizes: this._columnSizes\n            });\n        }\n    }\n    get _visibleColumns() {\n        return DirListing.columns.filter(column => { var _a; return column.id === 'name' || !((_a = this._hiddenColumns) === null || _a === void 0 ? void 0 : _a.has(column.id)); });\n    }\n    _setColumnSize(name, size) {\n        var _a;\n        const previousSize = this._columnSizes[name];\n        if (previousSize && size && size > previousSize) {\n            // check if we can resize up\n            let total = 0;\n            let before = true;\n            for (const column of this._visibleColumns) {\n                if (column.id === name) {\n                    // add proposed size for the current columns\n                    total += size;\n                    before = false;\n                    continue;\n                }\n                if (before) {\n                    // add size as-is for columns before\n                    const element = DOMUtils.findElement(this.node, column.className);\n                    total +=\n                        (_a = this._columnSizes[column.id]) !== null && _a !== void 0 ? _a : element.getBoundingClientRect().width;\n                }\n                else {\n                    // add minimum acceptable size for columns after\n                    total += column.minWidth;\n                }\n            }\n            if (this._width && total > this._width) {\n                // up sizing is no longer possible\n                return;\n            }\n        }\n        this._columnSizes[name] = size;\n        this._updateColumnSizes(name);\n    }\n    /**\n     * Update the setting to sort notebooks above files.\n     * This sorts the items again if the internal value is modified.\n     */\n    setNotebooksFirstSorting(isEnabled) {\n        let previousValue = this._sortNotebooksFirst;\n        this._sortNotebooksFirst = isEnabled;\n        if (this._sortNotebooksFirst !== previousValue) {\n            this.sort(this._sortState);\n        }\n    }\n    /**\n     * Update the setting to allow single click navigation.\n     * This enables opening files/directories with a single click.\n     */\n    setAllowSingleClickNavigation(isEnabled) {\n        this._allowSingleClick = isEnabled;\n    }\n    /**\n     * Would this click (or other event type) hit the checkbox by default?\n     */\n    isWithinCheckboxHitArea(event) {\n        let element = event.target;\n        while (element) {\n            if (element.classList.contains(CHECKBOX_WRAPPER_CLASS)) {\n                return true;\n            }\n            element = element.parentElement;\n        }\n        return false;\n    }\n    /**\n     * Handle the `'click'` event for the widget.\n     */\n    _evtClick(event) {\n        const target = event.target;\n        const header = this.headerNode;\n        const renderer = this._renderer;\n        if (header.contains(target)) {\n            const checkbox = renderer.getCheckboxNode(header);\n            if (checkbox && this.isWithinCheckboxHitArea(event)) {\n                const previouslyUnchecked = checkbox.dataset.indeterminate === 'false' &&\n                    checkbox.dataset.checked === 'false';\n                // The only time a click on the check-all checkbox should check all is\n                // when it was previously unchecked; otherwise, if the checkbox was\n                // either checked (all selected) or indeterminate (some selected), the\n                // click should clear all.\n                if (previouslyUnchecked) {\n                    // Select all items\n                    this._sortedItems.forEach((item) => (this.selection[item.path] = true));\n                }\n                else {\n                    // Unselect all items\n                    this.clearSelectedItems();\n                }\n                this.update();\n            }\n            else {\n                const state = this.renderer.handleHeaderClick(header, event);\n                if (state) {\n                    this.sort(state);\n                }\n            }\n            return;\n        }\n        else {\n            // Focus the selected file on click to ensure a couple of things:\n            // 1. If a user clicks on the item node, its name node will receive focus.\n            // 2. If a user clicks on blank space in the directory listing, the\n            //    previously focussed item will be focussed.\n            this._focusItem(this._focusIndex);\n        }\n        if (this._allowSingleClick) {\n            this.evtDblClick(event);\n        }\n    }\n    /**\n     * Handle the `'scroll'` event for the widget.\n     */\n    _evtScroll(event) {\n        this.headerNode.scrollLeft = this.contentNode.scrollLeft;\n    }\n    /**\n     * Handle the `'mousedown'` event for the widget.\n     */\n    _evtMousedown(event) {\n        // Bail if clicking within the edit node\n        if (event.target === this._editNode) {\n            return;\n        }\n        // Blur the edit node if necessary.\n        if (this._editNode.parentNode) {\n            if (this._editNode !== event.target) {\n                this._editNode.focus();\n                this._editNode.blur();\n                clearTimeout(this._selectTimer);\n            }\n            else {\n                return;\n            }\n        }\n        let index = Private.hitTestNodes(this._items, event);\n        if (index === -1) {\n            // Left mouse press for drag or resize start.\n            if (event.button === 0) {\n                const resizeHandle = event.target;\n                if (resizeHandle instanceof HTMLElement &&\n                    resizeHandle.classList.contains(RESIZE_HANDLE_CLASS)) {\n                    const columnId = resizeHandle.dataset.column;\n                    if (!columnId) {\n                        throw Error('Column resize handle is missing data-column attribute');\n                    }\n                    const column = DirListing.columns.find(c => c.id === columnId);\n                    if (!column) {\n                        throw Error(`Column with identifier ${columnId} not found`);\n                    }\n                    const element = DOMUtils.findElement(this.node, column.className);\n                    resizeHandle.classList.add(ACTIVE_CLASS);\n                    const cursorOverride = Drag.overrideCursor('col-resize');\n                    this._resizeData = {\n                        pressX: event.clientX,\n                        column: columnId,\n                        initialSize: element.getBoundingClientRect().width,\n                        overrides: new DisposableDelegate(() => {\n                            cursorOverride.dispose();\n                            resizeHandle.classList.remove(ACTIVE_CLASS);\n                        })\n                    };\n                    document.addEventListener('mouseup', this, true);\n                    document.addEventListener('mousemove', this, true);\n                    return;\n                }\n            }\n            return;\n        }\n        this.handleFileSelect(event);\n        if (event.button !== 0) {\n            clearTimeout(this._selectTimer);\n        }\n        // Check for clearing a context menu.\n        const newContext = (IS_MAC && event.ctrlKey) || event.button === 2;\n        if (newContext) {\n            return;\n        }\n        // Left mouse press for drag or resize start.\n        if (event.button === 0) {\n            this._dragData = {\n                pressX: event.clientX,\n                pressY: event.clientY,\n                index: index\n            };\n            document.addEventListener('mouseup', this, true);\n            document.addEventListener('mousemove', this, true);\n        }\n    }\n    /**\n     * Handle the `'mouseup'` event for the widget.\n     */\n    _evtMouseup(event) {\n        // Handle any soft selection from the previous mouse down.\n        if (this._softSelection) {\n            const altered = event.metaKey || event.shiftKey || event.ctrlKey;\n            // See if we need to clear the other selection.\n            if (!altered && event.button === 0) {\n                this.clearSelectedItems();\n                this.selection[this._softSelection] = true;\n                this.update();\n            }\n            this._softSelection = '';\n        }\n        // Re-focus. This is needed because nodes corresponding to files selected in\n        // mousedown handler will not retain the focus as mousedown event is always\n        // followed by a blur/focus event.\n        if (event.button === 0) {\n            this._focusItem(this._focusIndex);\n        }\n        // Remove the resize listeners if necessary.\n        if (this._resizeData) {\n            this._resizeData.overrides.dispose();\n            this._resizeData = null;\n            document.removeEventListener('mousemove', this, true);\n            document.removeEventListener('mouseup', this, true);\n            return;\n        }\n        // Remove the drag listeners if necessary.\n        if (event.button !== 0 || !this._drag) {\n            document.removeEventListener('mousemove', this, true);\n            document.removeEventListener('mouseup', this, true);\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n    }\n    /**\n     * Handle the `'mousemove'` event for the widget.\n     */\n    _evtMousemove(event) {\n        event.preventDefault();\n        event.stopPropagation();\n        if (this._resizeData) {\n            const { initialSize, column, pressX } = this._resizeData;\n            this._setColumnSize(column, initialSize + event.clientX - pressX);\n            return;\n        }\n        // Bail if we are the one dragging.\n        if (this._drag || !this._dragData) {\n            return;\n        }\n        // Check for a drag initialization.\n        const data = this._dragData;\n        const dx = Math.abs(event.clientX - data.pressX);\n        const dy = Math.abs(event.clientY - data.pressY);\n        if (dx < DRAG_THRESHOLD && dy < DRAG_THRESHOLD) {\n            return;\n        }\n        this._startDrag(data.index, event.clientX, event.clientY);\n    }\n    /**\n     * Handle the opening of an item.\n     */\n    handleOpen(item) {\n        this._onItemOpened.emit(item);\n        if (item.type === 'directory') {\n            const localPath = this._manager.services.contents.localPath(item.path);\n            this._model\n                .cd(`/${localPath}`)\n                .catch(error => showErrorMessage(this._trans._p('showErrorMessage', 'Open directory'), error));\n        }\n        else {\n            const path = item.path;\n            this._manager.openOrReveal(path);\n        }\n    }\n    /**\n     * Calculate the next focus index, given the current focus index and a\n     * direction, keeping within the bounds of the directory listing.\n     *\n     * @param index Current focus index\n     * @param direction -1 (up) or 1 (down)\n     * @returns The next focus index, which could be the same as the current focus\n     * index if at the boundary.\n     */\n    _getNextFocusIndex(index, direction) {\n        const nextIndex = index + direction;\n        if (nextIndex === -1 || nextIndex === this._items.length) {\n            // keep focus index within bounds\n            return index;\n        }\n        else {\n            return nextIndex;\n        }\n    }\n    /**\n     * Handle the up or down arrow key.\n     *\n     * @param event The keyboard event\n     * @param direction -1 (up) or 1 (down)\n     */\n    _handleArrowY(event, direction) {\n        // We only handle the `ctrl` and `shift` modifiers. If other modifiers are\n        // present, then do nothing.\n        if (event.altKey || event.metaKey) {\n            return;\n        }\n        // If folder is empty, there's nothing to do with the up/down key.\n        if (!this._items.length) {\n            return;\n        }\n        // Don't handle the arrow key press if it's not on directory item. This\n        // avoids a confusing user experience that can result from when the user\n        // moves the selection and focus index apart (via ctrl + up/down). The last\n        // selected item remains highlighted but the last focussed item loses its\n        // focus ring if it's not actively focussed.  This forces the user to\n        // visibly reveal the last focussed item before moving the focus.\n        if (!event.target.classList.contains(ITEM_TEXT_CLASS)) {\n            return;\n        }\n        event.stopPropagation();\n        event.preventDefault();\n        const focusIndex = this._focusIndex;\n        let nextFocusIndex = this._getNextFocusIndex(focusIndex, direction);\n        // The following if-block allows the first press of the down arrow to select\n        // the first (rather than the second) file/directory in the list. This is\n        // the situation when the page first loads or when a user changes directory.\n        if (direction > 0 &&\n            focusIndex === 0 &&\n            !event.ctrlKey &&\n            Object.keys(this.selection).length === 0) {\n            nextFocusIndex = 0;\n        }\n        // Shift key indicates multi-selection. Either the user is trying to grow\n        // the selection, or shrink it.\n        if (event.shiftKey) {\n            this._handleMultiSelect(nextFocusIndex);\n        }\n        else if (!event.ctrlKey) {\n            // If neither the shift nor ctrl keys were used with the up/down arrow,\n            // then we treat it as a normal, unmodified key press and select the\n            // next item.\n            this._selectItem(nextFocusIndex, event.shiftKey, false /* focus = false because we call focus method directly following this */);\n        }\n        this._focusItem(nextFocusIndex);\n        this.update();\n    }\n    /**\n     * cd ..\n     *\n     * Go up one level in the directory tree.\n     */\n    async goUp() {\n        const model = this.model;\n        if (model.path === model.rootPath) {\n            return;\n        }\n        try {\n            await model.cd('..');\n        }\n        catch (reason) {\n            console.warn(`Failed to go to parent directory of ${model.path}`, reason);\n        }\n    }\n    /**\n     * Handle the `'keydown'` event for the widget.\n     */\n    evtKeydown(event) {\n        // Do not handle any keydown events here if in the middle of a file rename.\n        if (this._inRename) {\n            return;\n        }\n        switch (event.keyCode) {\n            case 13: {\n                // Enter\n                // Do nothing if any modifier keys are pressed.\n                if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n                    return;\n                }\n                event.preventDefault();\n                event.stopPropagation();\n                for (const item of this.selectedItems()) {\n                    this.handleOpen(item);\n                }\n                return;\n            }\n            case 38:\n                // Up arrow\n                this._handleArrowY(event, -1);\n                return;\n            case 40:\n                // Down arrow\n                this._handleArrowY(event, 1);\n                return;\n            case 32: {\n                // Space\n                if (event.ctrlKey) {\n                    // Follow the Windows and Ubuntu convention: you must press `ctrl` +\n                    // `space` in order to toggle whether an item is selected.\n                    // However, do not handle if any other modifiers were pressed.\n                    if (event.metaKey || event.shiftKey || event.altKey) {\n                        return;\n                    }\n                    // Make sure the ctrl+space key stroke was on a valid, focussed target.\n                    const node = this._items[this._focusIndex];\n                    if (!(\n                    // Event must have occurred within a node whose item can be toggled.\n                    (node.contains(event.target) &&\n                        // That node must also contain the currently focussed element.\n                        node.contains(document.activeElement)))) {\n                        return;\n                    }\n                    event.stopPropagation();\n                    // Prevent default, otherwise the container will scroll.\n                    event.preventDefault();\n                    // Toggle item selected\n                    const { path } = this._sortedItems[this._focusIndex];\n                    if (this.selection[path]) {\n                        delete this.selection[path];\n                    }\n                    else {\n                        this.selection[path] = true;\n                    }\n                    this.update();\n                    // Key was handled, so return.\n                    return;\n                }\n                break;\n            }\n        }\n        // Detects printable characters typed by the user.\n        // Not all browsers support .key, but it discharges us from reconstructing\n        // characters from key codes.\n        if (event.key !== undefined &&\n            event.key.length === 1 &&\n            // Don't gobble up the space key on the check-all checkbox (which the\n            // browser treats as a click event).\n            !((event.key === ' ' || event.keyCode === 32) &&\n                event.target.type === 'checkbox')) {\n            if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n                return;\n            }\n            this._searchPrefix += event.key;\n            clearTimeout(this._searchPrefixTimer);\n            this._searchPrefixTimer = window.setTimeout(() => {\n                this._searchPrefix = '';\n            }, PREFIX_APPEND_DURATION);\n            this.selectByPrefix();\n            event.stopPropagation();\n            event.preventDefault();\n        }\n    }\n    /**\n     * Handle the `'dblclick'` event for the widget.\n     */\n    evtDblClick(event) {\n        // Do nothing if it's not a left mouse press.\n        if (event.button !== 0) {\n            return;\n        }\n        // Do nothing if any modifier keys are pressed.\n        if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n            return;\n        }\n        // Do nothing if the double click is on a checkbox. (Otherwise a rapid\n        // check-uncheck on the checkbox will cause the adjacent file/folder to\n        // open, which is probably not what the user intended.)\n        if (this.isWithinCheckboxHitArea(event)) {\n            return;\n        }\n        // Stop the event propagation.\n        event.preventDefault();\n        event.stopPropagation();\n        clearTimeout(this._selectTimer);\n        this._editNode.blur();\n        // Find a valid double click target.\n        const target = event.target;\n        const i = ArrayExt.findFirstIndex(this._items, node => node.contains(target));\n        if (i === -1) {\n            return;\n        }\n        const item = this._sortedItems[i];\n        this.handleOpen(item);\n    }\n    /**\n     * Handle the `drop` event for the widget.\n     */\n    evtNativeDrop(event) {\n        var _a, _b, _c;\n        // Prevent navigation\n        event.preventDefault();\n        const items = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.items;\n        if (!items) {\n            // Fallback to simple upload of files (if any)\n            const files = (_b = event.dataTransfer) === null || _b === void 0 ? void 0 : _b.files;\n            if (!files || files.length === 0) {\n                return;\n            }\n            const promises = [];\n            for (const file of files) {\n                const promise = this._model.upload(file);\n                promises.push(promise);\n            }\n            Promise.all(promises)\n                .then(() => this._allUploaded.emit())\n                .catch(err => {\n                console.error('Error while uploading files: ', err);\n            });\n            return;\n        }\n        const uploadEntry = async (entry, path) => {\n            if (Private.isDirectoryEntry(entry)) {\n                const dirPath = await Private.createDirectory(this._model.manager, path, entry.name);\n                const directoryReader = entry.createReader();\n                const allEntries = await Private.collectEntries(directoryReader);\n                for (const childEntry of allEntries) {\n                    await uploadEntry(childEntry, dirPath);\n                }\n            }\n            else if (Private.isFileEntry(entry)) {\n                const file = await Private.readFile(entry);\n                await this._model.upload(file, path);\n            }\n        };\n        const promises = [];\n        for (const item of items) {\n            const entry = Private.defensiveGetAsEntry(item);\n            if (!entry) {\n                continue;\n            }\n            const promise = uploadEntry(entry, (_c = this._model.path) !== null && _c !== void 0 ? _c : '/');\n            promises.push(promise);\n        }\n        Promise.all(promises)\n            .then(() => this._allUploaded.emit())\n            .catch(err => {\n            console.error('Error while uploading files: ', err);\n        });\n    }\n    /**\n     * Signal emitted on when all files were uploaded after native drag.\n     */\n    get allUploaded() {\n        return this._allUploaded;\n    }\n    /**\n     * Handle the `'lm-dragenter'` event for the widget.\n     */\n    evtDragEnter(event) {\n        if (event.mimeData.hasData(CONTENTS_MIME)) {\n            const index = Private.hitTestNodes(this._items, event);\n            if (index === -1) {\n                return;\n            }\n            const item = this._sortedItems[index];\n            if (item.type !== 'directory' || this.selection[item.path]) {\n                return;\n            }\n            const target = event.target;\n            target.classList.add(DROP_TARGET_CLASS);\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    }\n    /**\n     * Handle the `'lm-dragleave'` event for the widget.\n     */\n    evtDragLeave(event) {\n        event.preventDefault();\n        event.stopPropagation();\n        const dropTarget = DOMUtils.findElement(this.node, DROP_TARGET_CLASS);\n        if (dropTarget) {\n            dropTarget.classList.remove(DROP_TARGET_CLASS);\n        }\n    }\n    /**\n     * Handle the `'lm-dragover'` event for the widget.\n     */\n    evtDragOver(event) {\n        event.preventDefault();\n        event.stopPropagation();\n        event.dropAction = event.proposedAction;\n        const dropTarget = DOMUtils.findElement(this.node, DROP_TARGET_CLASS);\n        if (dropTarget) {\n            dropTarget.classList.remove(DROP_TARGET_CLASS);\n        }\n        const index = Private.hitTestNodes(this._items, event);\n        this._items[index].classList.add(DROP_TARGET_CLASS);\n    }\n    /**\n     * Handle the `'lm-drop'` event for the widget.\n     */\n    evtDrop(event) {\n        event.preventDefault();\n        event.stopPropagation();\n        clearTimeout(this._selectTimer);\n        if (event.proposedAction === 'none') {\n            event.dropAction = 'none';\n            return;\n        }\n        if (!event.mimeData.hasData(CONTENTS_MIME)) {\n            return;\n        }\n        let target = event.target;\n        while (target && target.parentElement) {\n            if (target.classList.contains(DROP_TARGET_CLASS)) {\n                target.classList.remove(DROP_TARGET_CLASS);\n                break;\n            }\n            target = target.parentElement;\n        }\n        // Get the path based on the target node.\n        const index = ArrayExt.firstIndexOf(this._items, target);\n        const items = this._sortedItems;\n        let basePath = this._model.path;\n        if (items[index].type === 'directory') {\n            basePath = PathExt.join(basePath, items[index].name);\n        }\n        const manager = this._manager;\n        // Handle the items.\n        const promises = [];\n        const paths = event.mimeData.getData(CONTENTS_MIME);\n        if (event.ctrlKey && event.proposedAction === 'move') {\n            event.dropAction = 'copy';\n        }\n        else {\n            event.dropAction = event.proposedAction;\n        }\n        for (const path of paths) {\n            const localPath = manager.services.contents.localPath(path);\n            const name = PathExt.basename(localPath);\n            const newPath = PathExt.join(basePath, name);\n            // Skip files that are not moving.\n            if (newPath === path) {\n                continue;\n            }\n            if (event.dropAction === 'copy') {\n                promises.push(manager.copy(path, basePath));\n            }\n            else {\n                promises.push(renameFile(manager, path, newPath));\n            }\n        }\n        Promise.all(promises).catch(error => {\n            void showErrorMessage(this._trans._p('showErrorMessage', 'Error while copying/moving files'), error);\n        });\n    }\n    /**\n     * Start a drag event.\n     */\n    _startDrag(index, clientX, clientY) {\n        let selectedPaths = Object.keys(this.selection);\n        const source = this._items[index];\n        const items = this._sortedItems;\n        let selectedItems;\n        let item;\n        // If the source node is not selected, use just that node.\n        if (!source.classList.contains(SELECTED_CLASS)) {\n            item = items[index];\n            selectedPaths = [item.path];\n            selectedItems = [item];\n        }\n        else {\n            const path = selectedPaths[0];\n            item = items.find(value => value.path === path);\n            selectedItems = this.selectedItems();\n        }\n        if (!item) {\n            return;\n        }\n        // Create the drag image.\n        const ft = this._manager.registry.getFileTypeForModel(item);\n        const dragImage = this.renderer.createDragImage(source, selectedPaths.length, this._trans, ft);\n        // Set up the drag event.\n        this._drag = new Drag({\n            dragImage,\n            mimeData: new MimeData(),\n            supportedActions: 'move',\n            proposedAction: 'move'\n        });\n        this._drag.mimeData.setData(CONTENTS_MIME, selectedPaths);\n        // Add thunks for getting mime data content.\n        // We thunk the content so we don't try to make a network call\n        // when it's not needed. E.g. just moving files around\n        // in a filebrowser\n        const services = this.model.manager.services;\n        for (const item of selectedItems) {\n            this._drag.mimeData.setData(CONTENTS_MIME_RICH, {\n                model: item,\n                withContent: async () => {\n                    return await services.contents.get(item.path);\n                }\n            });\n        }\n        if (item && item.type !== 'directory') {\n            const otherPaths = selectedPaths.slice(1).reverse();\n            this._drag.mimeData.setData(FACTORY_MIME, () => {\n                if (!item) {\n                    return;\n                }\n                const path = item.path;\n                let widget = this._manager.findWidget(path);\n                if (!widget) {\n                    widget = this._manager.open(item.path);\n                }\n                if (otherPaths.length) {\n                    const firstWidgetPlaced = new PromiseDelegate();\n                    void firstWidgetPlaced.promise.then(() => {\n                        let prevWidget = widget;\n                        otherPaths.forEach(path => {\n                            const options = {\n                                ref: prevWidget === null || prevWidget === void 0 ? void 0 : prevWidget.id,\n                                mode: 'tab-after'\n                            };\n                            prevWidget = this._manager.openOrReveal(path, void 0, void 0, options);\n                            this._manager.openOrReveal(item.path);\n                        });\n                    });\n                    firstWidgetPlaced.resolve(void 0);\n                }\n                return widget;\n            });\n        }\n        // Start the drag and remove the mousemove and mouseup listeners.\n        document.removeEventListener('mousemove', this, true);\n        document.removeEventListener('mouseup', this, true);\n        clearTimeout(this._selectTimer);\n        void this._drag.start(clientX, clientY).then(action => {\n            this._drag = null;\n            clearTimeout(this._selectTimer);\n        });\n    }\n    /**\n     * Handle selection on a file node.\n     */\n    handleFileSelect(event) {\n        // Fetch common variables.\n        const items = this._sortedItems;\n        const index = Private.hitTestNodes(this._items, event);\n        clearTimeout(this._selectTimer);\n        if (index === -1) {\n            return;\n        }\n        // Clear any existing soft selection.\n        this._softSelection = '';\n        const path = items[index].path;\n        const selected = Object.keys(this.selection);\n        const isLeftClickOnCheckbox = event.button === 0 &&\n            // On Mac, a left-click with the ctrlKey is treated as a right-click.\n            !(IS_MAC && event.ctrlKey) &&\n            this.isWithinCheckboxHitArea(event);\n        // Handle toggling.\n        if ((IS_MAC && event.metaKey) ||\n            (!IS_MAC && event.ctrlKey) ||\n            isLeftClickOnCheckbox) {\n            if (this.selection[path]) {\n                delete this.selection[path];\n            }\n            else {\n                this.selection[path] = true;\n            }\n            this._focusItem(index);\n            // Handle multiple select.\n        }\n        else if (event.shiftKey) {\n            this._handleMultiSelect(index);\n            this._focusItem(index);\n            // Handle a 'soft' selection\n        }\n        else if (path in this.selection && selected.length > 1) {\n            this._softSelection = path;\n            // Default to selecting the only the item.\n        }\n        else {\n            // Select only the given item.\n            return this._selectItem(index, false, true);\n        }\n        this.update();\n    }\n    /**\n     * (Re-)focus an item in the directory listing.\n     *\n     * @param index The index of the item node to focus\n     */\n    _focusItem(index) {\n        const items = this._items;\n        if (items.length === 0) {\n            // Focus the top node if the folder is empty and therefore there are no\n            // items inside the folder to focus.\n            this._focusIndex = 0;\n            this.node.focus();\n            return;\n        }\n        this._focusIndex = index;\n        const node = items[index];\n        const nameNode = this.renderer.getNameNode(node);\n        if (nameNode) {\n            // Make the filename text node focusable so that it receives keyboard\n            // events; text node was specifically chosen to receive shortcuts because\n            // it gets substituted with input element during file name edits which\n            // conveniently deactivates irrelevant shortcuts.\n            nameNode.tabIndex = 0;\n            nameNode.focus();\n        }\n    }\n    /**\n     * Are all of the items between two provided indices selected?\n     *\n     * The items at the indices are not considered.\n     *\n     * @param j Index of one item.\n     * @param k Index of another item. Note: may be less or greater than first\n     *          index.\n     * @returns True if and only if all items between the j and k are selected.\n     *          Returns undefined if j and k are the same.\n     */\n    _allSelectedBetween(j, k) {\n        if (j === k) {\n            return;\n        }\n        const [start, end] = j < k ? [j + 1, k] : [k + 1, j];\n        return this._sortedItems\n            .slice(start, end)\n            .reduce((result, item) => result && this.selection[item.path], true);\n    }\n    /**\n     * Handle a multiple select on a file item node.\n     */\n    _handleMultiSelect(index) {\n        const items = this._sortedItems;\n        const fromIndex = this._focusIndex;\n        const target = items[index];\n        let shouldAdd = true;\n        if (index === fromIndex) {\n            // This follows the convention in Ubuntu and Windows, which is to allow\n            // the focussed item to gain but not lose selected status on shift-click.\n            // (MacOS is irrelevant here because MacOS Finder has no notion of a\n            // focused-but-not-selected state.)\n            this.selection[target.path] = true;\n            return;\n        }\n        // If the target and all items in-between are selected, then we assume that\n        // the user is trying to shrink rather than grow the group of selected\n        // items.\n        if (this.selection[target.path]) {\n            // However, there is a special case when the distance between the from-\n            // and to- index is just one (for example, when the user is pressing the\n            // shift key plus arrow-up/down). If and only if the situation looks like\n            // the following when going down (or reverse when going up) ...\n            //\n            // - [ante-anchor / previous item] unselected (or boundary)\n            // - [anchor / currently focussed item / item at from-index] selected\n            // - [target / next item / item at to-index] selected\n            //\n            // ... then we shrink the selection / unselect the currently focussed\n            // item.\n            if (Math.abs(index - fromIndex) === 1) {\n                const anchor = items[fromIndex];\n                const anteAnchor = items[fromIndex + (index < fromIndex ? 1 : -1)];\n                if (\n                // Currently focussed item is selected\n                this.selection[anchor.path] &&\n                    // Item on other side of focussed item (away from target) is either a\n                    // boundary or unselected\n                    (!anteAnchor || !this.selection[anteAnchor.path])) {\n                    delete this.selection[anchor.path];\n                }\n            }\n            else if (this._allSelectedBetween(fromIndex, index)) {\n                shouldAdd = false;\n            }\n        }\n        // Select (or unselect) the rows between chosen index (target) and the last\n        // focussed.\n        const step = fromIndex < index ? 1 : -1;\n        for (let i = fromIndex; i !== index + step; i += step) {\n            if (shouldAdd) {\n                if (i === fromIndex) {\n                    // Do not change the selection state of the starting (fromIndex) item.\n                    continue;\n                }\n                this.selection[items[i].path] = true;\n            }\n            else {\n                if (i === index) {\n                    // Do not unselect the target item.\n                    continue;\n                }\n                delete this.selection[items[i].path];\n            }\n        }\n    }\n    /**\n     * Copy the selected items, and optionally cut as well.\n     */\n    _copy() {\n        this._clipboard.length = 0;\n        for (const item of this.selectedItems()) {\n            this._clipboard.push(item.path);\n        }\n    }\n    /**\n     * Delete the files with the given paths.\n     */\n    async _delete(paths) {\n        await Promise.all(paths.map(path => this._model.manager.deleteFile(path).catch(err => {\n            void showErrorMessage(this._trans._p('showErrorMessage', 'Delete Failed'), err);\n        })));\n    }\n    /**\n     * Allow the user to rename item on a given row.\n     */\n    async _doRename() {\n        this._inRename = true;\n        const selectedPaths = Object.keys(this.selection);\n        // Bail out if nothing has been selected.\n        if (selectedPaths.length === 0) {\n            this._inRename = false;\n            return Promise.resolve('');\n        }\n        // Figure out which selected path to use for the rename.\n        const items = this._sortedItems;\n        let { path } = items[this._focusIndex];\n        if (!this.selection[path]) {\n            // If the currently focused item is not selected, then choose the last\n            // selected item.\n            path = selectedPaths.slice(-1)[0];\n        }\n        // Get the corresponding model, nodes, and file name.\n        const index = ArrayExt.findFirstIndex(items, value => value.path === path);\n        const row = this._items[index];\n        const item = items[index];\n        const nameNode = this.renderer.getNameNode(row);\n        const original = item.name;\n        // Seed the text input with current file name, and select and focus it.\n        this._editNode.value = original;\n        this._selectItem(index, false, true);\n        // Wait for user input\n        const newName = await Private.userInputForRename(nameNode, this._editNode, original);\n        // Check if the widget was disposed during the `await`.\n        if (this.isDisposed) {\n            this._inRename = false;\n            throw new Error('File browser is disposed.');\n        }\n        let finalFilename = newName;\n        if (!newName || newName === original) {\n            finalFilename = original;\n        }\n        else if (!isValidFileName(newName)) {\n            void showErrorMessage(this._trans.__('Rename Error'), Error(this._trans._p('showErrorMessage', '\"%1\" is not a valid name for a file. Names must have nonzero length, and cannot include \"/\", \"\\\\\", or \":\"', newName)));\n            finalFilename = original;\n        }\n        else {\n            // Attempt rename at the file system level.\n            const manager = this._manager;\n            const oldPath = PathExt.join(this._model.path, original);\n            const newPath = PathExt.join(this._model.path, newName);\n            try {\n                await renameFile(manager, oldPath, newPath);\n            }\n            catch (error) {\n                if (error !== 'File not renamed') {\n                    void showErrorMessage(this._trans._p('showErrorMessage', 'Rename Error'), error);\n                }\n                finalFilename = original;\n            }\n            // Check if the widget was disposed during the `await`.\n            if (this.isDisposed) {\n                this._inRename = false;\n                throw new Error('File browser is disposed.');\n            }\n        }\n        // If nothing else has been selected, then select the renamed file. In\n        // other words, don't select the renamed file if the user has clicked\n        // away to some other file.\n        if (!this.isDisposed &&\n            Object.keys(this.selection).length === 1 &&\n            // We haven't updated the instance yet to reflect the rename, so unless\n            // the user or something else has updated the selection, the original file\n            // path and not the new file path will be in `this.selection`.\n            this.selection[item.path]) {\n            try {\n                await this._selectItemByName(finalFilename, true, true);\n            }\n            catch (_a) {\n                // do nothing\n                console.warn('After rename, failed to select file', finalFilename);\n            }\n        }\n        this._inRename = false;\n        return finalFilename;\n    }\n    /**\n     * Select a given item.\n     */\n    _selectItem(index, keepExisting, focus = true) {\n        // Selected the given row(s)\n        const items = this._sortedItems;\n        if (!keepExisting) {\n            this.clearSelectedItems();\n        }\n        const path = items[index].path;\n        this.selection[path] = true;\n        if (focus) {\n            this._focusItem(index);\n        }\n        this.update();\n    }\n    /**\n     * Handle the `refreshed` signal from the model.\n     */\n    _onModelRefreshed() {\n        // Update the selection.\n        const existing = Object.keys(this.selection);\n        this.clearSelectedItems();\n        for (const item of this._model.items()) {\n            const path = item.path;\n            if (existing.indexOf(path) !== -1) {\n                this.selection[path] = true;\n            }\n        }\n        if (this.isVisible) {\n            // Update the sorted items.\n            this.sort(this.sortState);\n        }\n        else {\n            this._isDirty = true;\n        }\n    }\n    /**\n     * Handle a `pathChanged` signal from the model.\n     */\n    _onPathChanged() {\n        // Reset the selection.\n        this.clearSelectedItems();\n        // Update the sorted items.\n        this.sort(this.sortState);\n        // Reset focus. But wait until the DOM has been updated (hence\n        // `requestAnimationFrame`).\n        requestAnimationFrame(() => {\n            this._focusItem(0);\n        });\n    }\n    /**\n     * Handle a `fileChanged` signal from the model.\n     */\n    _onFileChanged(sender, args) {\n        const newValue = args.newValue;\n        if (!newValue) {\n            return;\n        }\n        const name = newValue.name;\n        if (args.type !== 'new' || !name) {\n            return;\n        }\n        void this.selectItemByName(name).catch(() => {\n            /* Ignore if file does not exist. */\n        });\n    }\n    /**\n     * Handle an `activateRequested` signal from the manager.\n     */\n    _onActivateRequested(sender, args) {\n        const dirname = PathExt.dirname(args);\n        if (dirname !== this._model.path) {\n            return;\n        }\n        const basename = PathExt.basename(args);\n        this.selectItemByName(basename).catch(() => {\n            /* Ignore if file does not exist. */\n        });\n    }\n}\n/**\n * The namespace for the `DirListing` class statics.\n */\n(function (DirListing) {\n    /**\n     * Column definitions.\n     */\n    DirListing.columns = [\n        {\n            id: 'is_selected',\n            className: CHECKBOX_WRAPPER_CLASS,\n            itemClassName: CHECKBOX_WRAPPER_CLASS,\n            minWidth: 18,\n            resizable: false,\n            sortable: false,\n            grow: 0\n        },\n        {\n            id: 'name',\n            className: NAME_ID_CLASS,\n            itemClassName: ITEM_NAME_COLUMN_CLASS,\n            minWidth: 60,\n            resizable: true,\n            sortable: true,\n            caretSide: 'right',\n            grow: 3\n        },\n        {\n            id: 'last_modified',\n            className: MODIFIED_ID_CLASS,\n            itemClassName: ITEM_MODIFIED_CLASS,\n            minWidth: 60,\n            resizable: true,\n            sortable: true,\n            caretSide: 'left',\n            grow: 1\n        },\n        {\n            id: 'file_size',\n            className: FILE_SIZE_ID_CLASS,\n            itemClassName: ITEM_FILE_SIZE_CLASS,\n            minWidth: 60,\n            resizable: true,\n            sortable: true,\n            caretSide: 'left',\n            grow: 0.5\n        }\n    ];\n    /**\n     * The default implementation of an `IRenderer`.\n     */\n    class Renderer {\n        constructor() {\n            /**\n             * Factories for individual parts of the item.\n             */\n            this.itemFactories = {\n                name: () => {\n                    const name = document.createElement('span');\n                    const icon = document.createElement('span');\n                    const text = document.createElement('span');\n                    icon.className = ITEM_ICON_CLASS;\n                    text.className = ITEM_TEXT_CLASS;\n                    name.className = ITEM_NAME_COLUMN_CLASS;\n                    name.appendChild(icon);\n                    name.appendChild(text);\n                    return name;\n                },\n                last_modified: () => {\n                    const modified = document.createElement('span');\n                    modified.className = ITEM_MODIFIED_CLASS;\n                    return modified;\n                },\n                file_size: () => {\n                    const fileSize = document.createElement('span');\n                    fileSize.className = ITEM_FILE_SIZE_CLASS;\n                    return fileSize;\n                },\n                is_selected: () => this.createCheckboxWrapperNode()\n            };\n            /**\n             * Register of most recent arguments for last modified column update.\n             */\n            this._modifiedColumnLastUpdate = new WeakMap();\n            this._lastRenderedState = new WeakMap();\n        }\n        /**\n         * Create the DOM node for a dir listing.\n         */\n        createNode() {\n            const node = document.createElement('div');\n            const header = document.createElement('div');\n            const content = document.createElement('ul');\n            // Allow the node to scroll while dragging items.\n            content.setAttribute('data-lm-dragscroll', 'true');\n            content.className = CONTENT_CLASS;\n            header.className = HEADER_CLASS;\n            node.appendChild(header);\n            node.appendChild(content);\n            // Set to -1 to allow calling this.node.focus().\n            node.tabIndex = -1;\n            return node;\n        }\n        /**\n         * Populate and empty header node for a dir listing.\n         *\n         * @param node - The header node to populate.\n         */\n        populateHeaderNode(node, translator, hiddenColumns, columnsSizes) {\n            translator = translator || nullTranslator;\n            const trans = translator.load('jupyterlab');\n            const elementCreators = {\n                name: () => this.createHeaderItemNode(trans.__('Name')),\n                last_modified: () => this._createHeaderItemNodeWithSizes({\n                    small: trans.__('Modified'),\n                    large: trans.__('Last Modified')\n                }),\n                file_size: () => this._createHeaderItemNodeWithSizes({\n                    small: trans.__('Size'),\n                    large: trans.__('File Size')\n                }),\n                is_selected: () => this.createCheckboxWrapperNode({\n                    alwaysVisible: true,\n                    headerNode: true\n                })\n            };\n            const visibleColumns = DirListing.columns.filter(column => column.id === 'name' || !(hiddenColumns === null || hiddenColumns === void 0 ? void 0 : hiddenColumns.has(column.id)));\n            for (const column of visibleColumns) {\n                const createElement = elementCreators[column.id];\n                const element = createElement();\n                element.classList.add(column.className);\n                const isLastVisible = column.id === visibleColumns[visibleColumns.length - 1].id;\n                if (columnsSizes) {\n                    const size = columnsSizes[column.id];\n                    if (!isLastVisible) {\n                        element.style.width = size + 'px';\n                    }\n                }\n                node.appendChild(element);\n                if (Private.isResizable(column) && !isLastVisible) {\n                    const resizer = document.createElement('div');\n                    resizer.classList.add(RESIZE_HANDLE_CLASS);\n                    resizer.dataset.column = column.id;\n                    node.appendChild(resizer);\n                }\n            }\n            const name = DOMUtils.findElement(node, NAME_ID_CLASS);\n            name.classList.add(SELECTED_CLASS);\n            // set the initial caret icon\n            Private.updateCaret(DOMUtils.findElement(name, HEADER_ITEM_ICON_CLASS), 'right', 'up');\n        }\n        /**\n         * Handle a header click.\n         *\n         * @param node - A node populated by [[populateHeaderNode]].\n         *\n         * @param event - A click event on the node.\n         *\n         * @returns The sort state of the header after the click event.\n         */\n        handleHeaderClick(node, event) {\n            const state = { direction: 'ascending', key: 'name' };\n            const target = event.target;\n            const sortableColumns = DirListing.columns.filter(Private.isSortable);\n            for (const column of sortableColumns) {\n                const header = node.querySelector(`.${column.className}`);\n                if (!header) {\n                    // skip if the column is hidden\n                    continue;\n                }\n                if (header.contains(target)) {\n                    state.key = column.id;\n                    const headerIcon = DOMUtils.findElement(header, HEADER_ITEM_ICON_CLASS);\n                    if (header.classList.contains(SELECTED_CLASS)) {\n                        if (!header.classList.contains(DESCENDING_CLASS)) {\n                            state.direction = 'descending';\n                            header.classList.add(DESCENDING_CLASS);\n                            Private.updateCaret(headerIcon, column.caretSide, 'down');\n                        }\n                        else {\n                            header.classList.remove(DESCENDING_CLASS);\n                            Private.updateCaret(headerIcon, column.caretSide, 'up');\n                        }\n                    }\n                    else {\n                        header.classList.remove(DESCENDING_CLASS);\n                        Private.updateCaret(headerIcon, column.caretSide, 'up');\n                    }\n                    header.classList.add(SELECTED_CLASS);\n                    for (const otherColumn of sortableColumns) {\n                        if (otherColumn.id === column.id) {\n                            continue;\n                        }\n                        const otherHeader = node.querySelector(`.${otherColumn.className}`);\n                        if (!otherHeader) {\n                            // skip if hidden\n                            continue;\n                        }\n                        otherHeader.classList.remove(SELECTED_CLASS);\n                        otherHeader.classList.remove(DESCENDING_CLASS);\n                        const otherHeaderIcon = DOMUtils.findElement(otherHeader, HEADER_ITEM_ICON_CLASS);\n                        Private.updateCaret(otherHeaderIcon, otherColumn.caretSide);\n                    }\n                    return state;\n                }\n            }\n            return state;\n        }\n        /**\n         * Create a new item node for a dir listing.\n         *\n         * @returns A new DOM node to use as a content item.\n         */\n        createItemNode(hiddenColumns, columnsSizes) {\n            const node = document.createElement('li');\n            for (const column of DirListing.columns) {\n                if (column.id != 'name' && (hiddenColumns === null || hiddenColumns === void 0 ? void 0 : hiddenColumns.has(column.id))) {\n                    continue;\n                }\n                const createElement = this.itemFactories[column.id];\n                const element = createElement();\n                node.appendChild(element);\n                if (columnsSizes) {\n                    const size = columnsSizes[column.id];\n                    element.style.width = size + 'px';\n                }\n            }\n            return node;\n        }\n        /**\n         * Creates a node containing a checkbox.\n         *\n         * We wrap the checkbox in a label element in order to increase its hit\n         * area. This is because the padding of the checkbox itself cannot be\n         * increased via CSS, as the CSS/form compatibility table at the following\n         * url from MDN shows:\n         * https://developer.mozilla.org/en-US/docs/Learn/Forms/Property_compatibility_table_for_form_controls#check_boxes_and_radio_buttons\n         *\n         * @param [options]\n         * @params options.alwaysVisible Should the checkbox be visible even when\n         * not hovered?\n         * @returns A new DOM node that contains a checkbox.\n         */\n        createCheckboxWrapperNode(options) {\n            // Wrap the checkbox in a label element in order to increase its hit area.\n            const labelWrapper = document.createElement('label');\n            labelWrapper.classList.add(CHECKBOX_WRAPPER_CLASS);\n            const checkbox = document.createElement('input');\n            checkbox.type = 'checkbox';\n            // Prevent the user from clicking (via mouse, keyboard, or touch) the\n            // checkbox since other code handles the mouse and keyboard events and\n            // controls the checked state of the checkbox.\n            if (!(options === null || options === void 0 ? void 0 : options.headerNode)) {\n                checkbox.addEventListener('click', event => {\n                    event.preventDefault();\n                });\n            }\n            // The individual file checkboxes are visible on hover, but the header\n            // check-all checkbox is always visible.\n            if (options === null || options === void 0 ? void 0 : options.alwaysVisible) {\n                labelWrapper.classList.add('jp-mod-visible');\n            }\n            else {\n                // Disable tabbing to all other checkboxes.\n                checkbox.tabIndex = -1;\n            }\n            labelWrapper.appendChild(checkbox);\n            return labelWrapper;\n        }\n        /**\n         * Update an item's last modified date.\n         *\n         * @param modified - Element containing the file's last modified date.\n         *\n         * @param modifiedDate - String representation of the last modified date.\n         *\n         * @param modifiedStyle - The date style for the modified column: narrow, short, or long\n         */\n        updateItemModified(modified, modifiedDate, modifiedStyle) {\n            // Formatting dates is expensive (0.1-0.2ms per call,\n            // so over 150 files can easily already choke the renderer),\n            // let's do the bare minimum check of comparing if an update\n            // is needed using a last update cache:\n            const previousUpdate = this._modifiedColumnLastUpdate.get(modified);\n            if ((previousUpdate === null || previousUpdate === void 0 ? void 0 : previousUpdate.date) === modifiedDate &&\n                (previousUpdate === null || previousUpdate === void 0 ? void 0 : previousUpdate.style) === modifiedStyle) {\n                return;\n            }\n            const parsedDate = new Date(modifiedDate);\n            // Render the date in one of multiple formats, depending on the container's size\n            const modText = Time.formatHuman(parsedDate, modifiedStyle);\n            const modTitle = Time.format(parsedDate);\n            modified.textContent = modText;\n            modified.title = modTitle;\n            this._modifiedColumnLastUpdate.set(modified, {\n                date: modifiedDate,\n                style: modifiedStyle\n            });\n        }\n        /**\n         * Update an item node to reflect the current state of a model.\n         *\n         * @param node - A node created by [[createItemNode]].\n         *\n         * @param model - The model object to use for the item state.\n         *\n         * @param fileType - The file type of the item, if applicable.\n         *\n         */\n        updateItemNode(node, model, fileType, translator, hiddenColumns, selected, modifiedStyle, columnsSizes) {\n            if (selected) {\n                node.classList.add(SELECTED_CLASS);\n            }\n            fileType =\n                fileType || DocumentRegistry.getDefaultTextFileType(translator);\n            const { icon, iconClass, name } = fileType;\n            translator = translator || nullTranslator;\n            const trans = translator.load('jupyterlab');\n            const prevState = this._lastRenderedState.get(node);\n            const newState = JSON.stringify({\n                name: model.name,\n                selected,\n                lastModified: model.last_modified,\n                modifiedStyle,\n                hiddenColumns,\n                columnsSizes,\n                fileSize: model.size\n            });\n            const checkboxWrapper = DOMUtils.findElement(node, CHECKBOX_WRAPPER_CLASS);\n            const checkbox = checkboxWrapper === null || checkboxWrapper === void 0 ? void 0 : checkboxWrapper.querySelector('input[type=\"checkbox\"]');\n            if (checkbox)\n                checkbox.checked = selected !== null && selected !== void 0 ? selected : false;\n            if (prevState === newState)\n                return;\n            this._lastRenderedState.set(node, newState);\n            const iconContainer = DOMUtils.findElement(node, ITEM_ICON_CLASS);\n            const text = DOMUtils.findElement(node, ITEM_TEXT_CLASS);\n            const nameColumn = DOMUtils.findElement(node, ITEM_NAME_COLUMN_CLASS);\n            let modified = DOMUtils.findElement(node, ITEM_MODIFIED_CLASS);\n            let fileSize = DOMUtils.findElement(node, ITEM_FILE_SIZE_CLASS);\n            const showFileCheckboxes = !(hiddenColumns === null || hiddenColumns === void 0 ? void 0 : hiddenColumns.has('is_selected'));\n            if (checkboxWrapper && !showFileCheckboxes) {\n                node.removeChild(checkboxWrapper);\n            }\n            else if (showFileCheckboxes && !checkboxWrapper) {\n                const checkboxWrapper = this.createCheckboxWrapperNode();\n                nameColumn.insertAdjacentElement('beforebegin', checkboxWrapper);\n            }\n            const showModified = !(hiddenColumns === null || hiddenColumns === void 0 ? void 0 : hiddenColumns.has('last_modified'));\n            if (modified && !showModified) {\n                node.removeChild(modified);\n            }\n            else if (showModified && !modified) {\n                modified = this.itemFactories.last_modified();\n                nameColumn.insertAdjacentElement('afterend', modified);\n            }\n            const showFileSize = !(hiddenColumns === null || hiddenColumns === void 0 ? void 0 : hiddenColumns.has('file_size'));\n            if (fileSize && !showFileSize) {\n                node.removeChild(fileSize);\n            }\n            else if (showFileSize && !fileSize) {\n                fileSize = this.itemFactories.file_size();\n                (modified !== null && modified !== void 0 ? modified : nameColumn).insertAdjacentElement('afterend', fileSize);\n            }\n            // render the file item's icon\n            requestAnimationFrame(() => {\n                LabIcon.resolveElement({\n                    icon,\n                    iconClass: classes(iconClass, 'jp-Icon'),\n                    container: iconContainer,\n                    className: ITEM_ICON_CLASS,\n                    stylesheet: 'listing'\n                });\n            });\n            let hoverText = trans.__('Name: %1', model.name);\n            // add file size to pop up if its available\n            if (model.size !== null && model.size !== undefined) {\n                const fileSizeText = Private.formatFileSize(model.size, 1, 1024);\n                if (fileSize) {\n                    fileSize.textContent = fileSizeText;\n                }\n                hoverText += trans.__('\\nSize: %1', Private.formatFileSize(model.size, 1, 1024));\n            }\n            else if (fileSize) {\n                fileSize.textContent = '';\n            }\n            if (model.path) {\n                const dirname = PathExt.dirname(model.path);\n                if (dirname) {\n                    hoverText += trans.__('\\nPath: %1', dirname.substr(0, 50));\n                    if (dirname.length > 50) {\n                        hoverText += '...';\n                    }\n                }\n            }\n            if (model.created) {\n                hoverText += trans.__('\\nCreated: %1', Time.format(new Date(model.created)));\n            }\n            if (model.last_modified) {\n                hoverText += trans.__('\\nModified: %1', Time.format(new Date(model.last_modified)));\n            }\n            hoverText += trans.__('\\nWritable: %1', model.writable);\n            node.title = hoverText;\n            node.setAttribute('data-file-type', name);\n            if (model.name.startsWith('.')) {\n                node.setAttribute('data-is-dot', 'true');\n            }\n            else {\n                node.removeAttribute('data-is-dot');\n            }\n            // If an item is being edited currently, its text node is unavailable.\n            const indices = !model.indices ? [] : model.indices;\n            let highlightedName = StringExt.highlight(model.name, indices, h.mark);\n            if (text) {\n                VirtualDOM.render(h.span(highlightedName), text);\n            }\n            // Adds an aria-label to the checkbox element.\n            if (checkbox) {\n                let ariaLabel;\n                if (fileType.contentType === 'directory') {\n                    ariaLabel = selected\n                        ? trans.__('Deselect directory \"%1\"', highlightedName)\n                        : trans.__('Select directory \"%1\"', highlightedName);\n                }\n                else {\n                    ariaLabel = selected\n                        ? trans.__('Deselect file \"%1\"', highlightedName)\n                        : trans.__('Select file \"%1\"', highlightedName);\n                }\n                checkbox.setAttribute('aria-label', ariaLabel);\n                checkbox.checked = selected !== null && selected !== void 0 ? selected : false;\n            }\n            this.updateItemSize(node, model, modifiedStyle, columnsSizes);\n        }\n        /**\n         * Update size of item nodes, assuming that model has not changed.\n         */\n        updateItemSize(node, model, modifiedStyle, columnsSizes) {\n            if (columnsSizes) {\n                for (const column of DirListing.columns) {\n                    const element = DOMUtils.findElement(node, column.itemClassName);\n                    if (!element) {\n                        continue;\n                    }\n                    const sizeSpec = columnsSizes[column.id];\n                    const newWidth = sizeSpec === null ? '' : sizeSpec + 'px';\n                    if (newWidth !== element.style.width) {\n                        element.style.width = newWidth;\n                    }\n                }\n            }\n            let modified = DOMUtils.findElement(node, ITEM_MODIFIED_CLASS);\n            if (model.last_modified && modified) {\n                this.updateItemModified(modified, model.last_modified, modifiedStyle !== null && modifiedStyle !== void 0 ? modifiedStyle : 'short');\n            }\n        }\n        /**\n         * Get the node containing the file name.\n         *\n         * @param node - A node created by [[createItemNode]].\n         *\n         * @returns The node containing the file name.\n         */\n        getNameNode(node) {\n            return DOMUtils.findElement(node, ITEM_TEXT_CLASS);\n        }\n        /**\n         * Get the checkbox input element node.\n         *\n         * @param node A node created by [[createItemNode]] or\n         * [[createHeaderItemNode]]\n         *\n         * @returns The checkbox node.\n         */\n        getCheckboxNode(node) {\n            return node.querySelector(`.${CHECKBOX_WRAPPER_CLASS} input[type=checkbox]`);\n        }\n        /**\n         * Create a drag image for an item.\n         *\n         * @param node - A node created by [[createItemNode]].\n         *\n         * @param count - The number of items being dragged.\n         *\n         * @param fileType - The file type of the item, if applicable.\n         *\n         * @returns An element to use as the drag image.\n         */\n        createDragImage(node, count, trans, fileType) {\n            const dragImage = node.cloneNode(true);\n            const icon = DOMUtils.findElement(dragImage, ITEM_ICON_CLASS);\n            // Hide additional columns from the drag image to keep it unobtrusive.\n            const extraColumns = DirListing.columns.filter(column => column.id !== 'name');\n            for (const extraColumn of extraColumns) {\n                const columnElement = DOMUtils.findElement(dragImage, extraColumn.itemClassName);\n                if (!columnElement) {\n                    // We can only remove columns which are rendered.\n                    continue;\n                }\n                dragImage.removeChild(columnElement);\n            }\n            if (!fileType) {\n                icon.textContent = '';\n                icon.className = '';\n            }\n            else {\n                icon.textContent = fileType.iconLabel || '';\n                icon.className = fileType.iconClass || '';\n            }\n            icon.classList.add(DRAG_ICON_CLASS);\n            if (count > 1) {\n                const nameNode = DOMUtils.findElement(dragImage, ITEM_TEXT_CLASS);\n                nameNode.textContent = trans._n('%1 Item', '%1 Items', count);\n            }\n            return dragImage;\n        }\n        /**\n         * Create a node for a header item.\n         */\n        createHeaderItemNode(label) {\n            const node = document.createElement('div');\n            const text = document.createElement('span');\n            const icon = document.createElement('span');\n            node.className = HEADER_ITEM_CLASS;\n            text.className = HEADER_ITEM_TEXT_CLASS;\n            icon.className = HEADER_ITEM_ICON_CLASS;\n            text.textContent = label;\n            node.appendChild(text);\n            node.appendChild(icon);\n            return node;\n        }\n        /**\n         * Create a node for a header item with multiple sizes.\n         */\n        _createHeaderItemNodeWithSizes(labels) {\n            const node = document.createElement('div');\n            node.className = HEADER_ITEM_CLASS;\n            const icon = document.createElement('span');\n            icon.className = HEADER_ITEM_ICON_CLASS;\n            for (let k of Object.keys(labels)) {\n                const text = document.createElement('span');\n                text.classList.add(HEADER_ITEM_TEXT_CLASS, HEADER_ITEM_TEXT_CLASS + '-' + k);\n                text.textContent = labels[k];\n                node.appendChild(text);\n            }\n            node.appendChild(icon);\n            return node;\n        }\n    }\n    DirListing.Renderer = Renderer;\n    /**\n     * The default `IRenderer` instance.\n     */\n    DirListing.defaultRenderer = new Renderer();\n})(DirListing || (DirListing = {}));\n/**\n * The namespace for the listing private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Handle editing text on a node.\n     *\n     * @returns Boolean indicating whether the name changed.\n     */\n    function userInputForRename(text, edit, original) {\n        const parent = text.parentElement;\n        parent.replaceChild(edit, text);\n        edit.focus();\n        const index = edit.value.lastIndexOf('.');\n        if (index === -1) {\n            edit.setSelectionRange(0, edit.value.length);\n        }\n        else {\n            edit.setSelectionRange(0, index);\n        }\n        return new Promise(resolve => {\n            edit.onblur = () => {\n                parent.replaceChild(text, edit);\n                resolve(edit.value);\n            };\n            edit.onkeydown = (event) => {\n                switch (event.keyCode) {\n                    case 13: // Enter\n                        event.stopPropagation();\n                        event.preventDefault();\n                        edit.blur();\n                        break;\n                    case 27: // Escape\n                        event.stopPropagation();\n                        event.preventDefault();\n                        edit.value = original;\n                        edit.blur();\n                        // Put focus back on the text node. That way the user can, for\n                        // example, press the keyboard shortcut to go back into edit mode,\n                        // and it will work.\n                        text.focus();\n                        break;\n                    default:\n                        break;\n                }\n            };\n        });\n    }\n    Private.userInputForRename = userInputForRename;\n    /**\n     * Sort a list of items by sort state as a new array.\n     */\n    function sort(items, state, sortNotebooksFirst = false, translator) {\n        const copy = Array.from(items);\n        const reverse = state.direction === 'descending' ? 1 : -1;\n        /**\n         * Compares two items and returns whether they should have a fixed priority.\n         * The fixed priority enables to always sort the directories above the other files. And to sort the notebook above other files if the `sortNotebooksFirst` is true.\n         */\n        function isPriorityOverridden(a, b) {\n            if (sortNotebooksFirst) {\n                return a.type !== b.type;\n            }\n            return (a.type === 'directory') !== (b.type === 'directory');\n        }\n        /**\n         * Returns the priority of a file.\n         */\n        function getPriority(item) {\n            if (item.type === 'directory') {\n                return 2;\n            }\n            if (item.type === 'notebook' && sortNotebooksFirst) {\n                return 1;\n            }\n            return 0;\n        }\n        /**\n         * Compare two items by their name using `translator.languageCode`, with fallback to `navigator.language`.\n         */\n        function compareByName(a, b) {\n            var _a;\n            // Wokaround for Chromium invalid language code on CI, see\n            // https://github.com/jupyterlab/jupyterlab/issues/17079\n            const navigatorLanguage = navigator.language.split('@')[0];\n            const languageCode = ((_a = translator.languageCode) !== null && _a !== void 0 ? _a : navigatorLanguage).replace('_', '-');\n            try {\n                return a.name.localeCompare(b.name, languageCode, {\n                    numeric: true,\n                    sensitivity: 'base'\n                });\n            }\n            catch (e) {\n                console.warn(`localeCompare failed to compare ${a.name} and ${b.name} under languageCode: ${languageCode}`);\n                return a.name.localeCompare(b.name, navigatorLanguage, {\n                    numeric: true,\n                    sensitivity: 'base'\n                });\n            }\n        }\n        function compare(compare) {\n            return (a, b) => {\n                // Group directory first, then notebooks, then files\n                if (isPriorityOverridden(a, b)) {\n                    return getPriority(b) - getPriority(a);\n                }\n                const compared = compare(a, b);\n                if (compared !== 0) {\n                    return compared * reverse;\n                }\n                // Default sorting is alphabetical ascending\n                return compareByName(a, b);\n            };\n        }\n        if (state.key === 'last_modified') {\n            // Sort by last modified\n            copy.sort(compare((a, b) => {\n                return (new Date(a.last_modified).getTime() -\n                    new Date(b.last_modified).getTime());\n            }));\n        }\n        else if (state.key === 'file_size') {\n            // Sort by size\n            copy.sort(compare((a, b) => {\n                var _a, _b;\n                return ((_a = b.size) !== null && _a !== void 0 ? _a : 0) - ((_b = a.size) !== null && _b !== void 0 ? _b : 0);\n            }));\n        }\n        else {\n            // Sort by name\n            copy.sort(compare((a, b) => {\n                return compareByName(b, a);\n            }));\n        }\n        return copy;\n    }\n    Private.sort = sort;\n    /**\n     * Check if the column is resizable.\n     */\n    Private.isResizable = (column) => {\n        return 'resizable' in column && column.resizable;\n    };\n    /**\n     * Check if the column is sortable.\n     */\n    Private.isSortable = (column) => {\n        return 'sortable' in column && column.sortable;\n    };\n    /**\n     * Get the index of the node at a client position, or `-1`.\n     */\n    function hitTestNodes(nodes, event) {\n        return ArrayExt.findFirstIndex(nodes, node => ElementExt.hitTest(node, event.clientX, event.clientY) ||\n            event.target === node);\n    }\n    Private.hitTestNodes = hitTestNodes;\n    /**\n     * Format bytes to human readable string.\n     */\n    function formatFileSize(bytes, decimalPoint, k) {\n        // https://www.codexworld.com/how-to/convert-file-size-bytes-kb-mb-gb-javascript/\n        if (bytes === 0) {\n            return '0 B';\n        }\n        const dm = decimalPoint || 2;\n        const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n        const i = Math.floor(Math.log(bytes) / Math.log(k));\n        if (i >= 0 && i < sizes.length) {\n            return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n        }\n        else {\n            return String(bytes);\n        }\n    }\n    Private.formatFileSize = formatFileSize;\n    /**\n     * Update an inline svg caret icon in a node.\n     */\n    function updateCaret(container, float, state) {\n        if (state) {\n            (state === 'down' ? caretDownIcon : caretUpIcon).element({\n                container,\n                tag: 'span',\n                stylesheet: 'listingHeaderItem'\n            });\n            if (float === 'left') {\n                container.style.order = '-1';\n            }\n            else {\n                container.style.order = '';\n            }\n        }\n        else {\n            LabIcon.remove(container);\n            container.className = HEADER_ITEM_ICON_CLASS;\n        }\n    }\n    Private.updateCaret = updateCaret;\n    async function createDirectory(manager, path, name) {\n        const model = await manager.newUntitled({\n            path: path,\n            type: 'directory'\n        });\n        const tmpDirPath = PathExt.join(path, model.name);\n        const dirPath = PathExt.join(path, name);\n        try {\n            await manager.rename(tmpDirPath, dirPath);\n        }\n        catch (e) {\n            // The `dirPath` already exists, remove the temporary new directory\n            await manager.deleteFile(tmpDirPath);\n        }\n        return dirPath;\n    }\n    Private.createDirectory = createDirectory;\n    function isDirectoryEntry(entry) {\n        return entry.isDirectory;\n    }\n    Private.isDirectoryEntry = isDirectoryEntry;\n    function isFileEntry(entry) {\n        return entry.isFile;\n    }\n    Private.isFileEntry = isFileEntry;\n    function defensiveGetAsEntry(item) {\n        if (item.webkitGetAsEntry) {\n            return item.webkitGetAsEntry();\n        }\n        if ('getAsEntry' in item) {\n            // See https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry\n            return item['getAsEntry']();\n        }\n        return null;\n    }\n    Private.defensiveGetAsEntry = defensiveGetAsEntry;\n    function readEntries(reader) {\n        return new Promise((resolve, reject) => reader.readEntries(resolve, reject));\n    }\n    function readFile(entry) {\n        return new Promise((resolve, reject) => entry.file(resolve, reject));\n    }\n    Private.readFile = readFile;\n    async function collectEntries(reader) {\n        // Spec requires calling `readEntries` until these are exhausted;\n        // in practice this is only required in Chromium-based browsers for >100 files.\n        // https://issues.chromium.org/issues/41110876\n        const allEntries = [];\n        let done = false;\n        while (!done) {\n            const entries = await readEntries(reader);\n            if (entries.length === 0) {\n                done = true;\n            }\n            else {\n                allEntries.push(...entries);\n            }\n        }\n        return allEntries;\n    }\n    Private.collectEntries = collectEntries;\n})(Private || (Private = {}));\n//# sourceMappingURL=listing.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { showErrorMessage } from '@jupyterlab/apputils';\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { ServerConnection } from '@jupyterlab/services';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { FilenameSearcher, SidePanel, Toolbar } from '@jupyterlab/ui-components';\nimport { Panel } from '@lumino/widgets';\nimport { createRef } from 'react';\nimport { BreadCrumbs } from './crumbs';\nimport { DirListing } from './listing';\n/**\n * The class name added to file browsers.\n */\nconst FILE_BROWSER_CLASS = 'jp-FileBrowser';\n/**\n * The class name added to file browser panel (gather filter, breadcrumbs and listing).\n */\nconst FILE_BROWSER_PANEL_CLASS = 'jp-FileBrowser-Panel';\n/**\n * The class name added to the filebrowser crumbs node.\n */\nconst CRUMBS_CLASS = 'jp-FileBrowser-crumbs';\n/**\n * The class name added to the filebrowser toolbar node.\n */\nconst TOOLBAR_CLASS = 'jp-FileBrowser-toolbar';\n/**\n * The class name added to the filebrowser filter toolbar node.\n */\nconst FILTER_TOOLBAR_CLASS = 'jp-FileBrowser-filterToolbar';\n/**\n * The class name added to the filebrowser listing node.\n */\nconst LISTING_CLASS = 'jp-FileBrowser-listing';\n/**\n * The class name added to the filebrowser filterbox node.\n */\nconst FILTERBOX_CLASS = 'jp-FileBrowser-filterBox';\n/**\n * A widget which hosts a file browser.\n *\n * The widget uses the Jupyter Contents API to retrieve contents,\n * and presents itself as a flat list of files and directories with\n * breadcrumbs.\n */\nexport class FileBrowser extends SidePanel {\n    /**\n     * Construct a new file browser.\n     *\n     * @param options - The file browser options.\n     */\n    constructor(options) {\n        var _a;\n        super({ content: new Panel(), translator: options.translator });\n        this._directoryPending = null;\n        this._filePending = null;\n        this._fileFilterRef = createRef();\n        this._allowSingleClick = false;\n        this._showFileCheckboxes = false;\n        this._showFileFilter = false;\n        this._showFileSizeColumn = false;\n        this._showHiddenFiles = false;\n        this._showLastModifiedColumn = true;\n        this._sortNotebooksFirst = false;\n        this.addClass(FILE_BROWSER_CLASS);\n        this.toolbar.addClass(TOOLBAR_CLASS);\n        this.id = options.id;\n        const translator = (this.translator = (_a = options.translator) !== null && _a !== void 0 ? _a : nullTranslator);\n        const model = (this.model = options.model);\n        const renderer = options.renderer;\n        model.connectionFailure.connect(this._onConnectionFailure, this);\n        this._manager = model.manager;\n        this.toolbar.node.setAttribute('aria-label', this._trans.__('file browser'));\n        // File browser widgets container\n        this.mainPanel = new Panel();\n        this.mainPanel.addClass(FILE_BROWSER_PANEL_CLASS);\n        this.mainPanel.title.label = this._trans.__('File Browser');\n        this.crumbs = new BreadCrumbs({ model, translator });\n        this.crumbs.addClass(CRUMBS_CLASS);\n        // The filter toolbar appears immediately below the breadcrumbs and above the directory listing.\n        const searcher = FilenameSearcher({\n            updateFilter: (filterFn, query) => {\n                this.model.setFilter(value => {\n                    return filterFn(value.name.toLowerCase());\n                });\n            },\n            useFuzzyFilter: this.model.useFuzzyFilter,\n            placeholder: this._trans.__('Filter files by name'),\n            forceRefresh: false,\n            showIcon: false,\n            inputRef: this._fileFilterRef,\n            filterSettingsChanged: this.model.filterSettingsChanged\n        });\n        searcher.addClass(FILTERBOX_CLASS);\n        this.filterToolbar = new Toolbar();\n        this.filterToolbar.addClass(FILTER_TOOLBAR_CLASS);\n        this.filterToolbar.node.setAttribute('aria-label', this._trans.__('File browser toolbar'));\n        this.filterToolbar.addItem('fileNameSearcher', searcher);\n        this.filterToolbar.setHidden(!this.showFileFilter);\n        this.listing = this.createDirListing({\n            model,\n            renderer,\n            translator,\n            state: options.state\n        });\n        this.listing.addClass(LISTING_CLASS);\n        this.mainPanel.addWidget(this.crumbs);\n        this.mainPanel.addWidget(this.filterToolbar);\n        this.mainPanel.addWidget(this.listing);\n        this.addWidget(this.mainPanel);\n        if (options.restore !== false) {\n            void model.restore(this.id);\n        }\n        // restore listing regardless of the restore option\n        void this.listing.restore(this.id);\n    }\n    /**\n     * Whether to show active file in file browser\n     */\n    get navigateToCurrentDirectory() {\n        return this._navigateToCurrentDirectory;\n    }\n    set navigateToCurrentDirectory(value) {\n        this._navigateToCurrentDirectory = value;\n    }\n    /**\n     * Whether to show the last modified column\n     */\n    get showLastModifiedColumn() {\n        return this._showLastModifiedColumn;\n    }\n    set showLastModifiedColumn(value) {\n        if (this.listing.setColumnVisibility) {\n            this.listing.setColumnVisibility('last_modified', value);\n            this._showLastModifiedColumn = value;\n        }\n        else {\n            console.warn('Listing does not support toggling column visibility');\n        }\n    }\n    /**\n     * Whether to show the full path in the breadcrumbs\n     */\n    get showFullPath() {\n        return this.crumbs.fullPath;\n    }\n    set showFullPath(value) {\n        this.crumbs.fullPath = value;\n    }\n    /**\n     * Whether to show the file size column\n     */\n    get showFileSizeColumn() {\n        return this._showFileSizeColumn;\n    }\n    set showFileSizeColumn(value) {\n        if (this.listing.setColumnVisibility) {\n            this.listing.setColumnVisibility('file_size', value);\n            this._showFileSizeColumn = value;\n        }\n        else {\n            console.warn('Listing does not support toggling column visibility');\n        }\n    }\n    /**\n     * Whether to show hidden files\n     */\n    get showHiddenFiles() {\n        return this._showHiddenFiles;\n    }\n    set showHiddenFiles(value) {\n        this.model.showHiddenFiles(value);\n        this._showHiddenFiles = value;\n    }\n    /**\n     * Whether to show checkboxes next to files and folders\n     */\n    get showFileCheckboxes() {\n        return this._showFileCheckboxes;\n    }\n    set showFileCheckboxes(value) {\n        if (this.listing.setColumnVisibility) {\n            this.listing.setColumnVisibility('is_selected', value);\n            this._showFileCheckboxes = value;\n        }\n        else {\n            console.warn('Listing does not support toggling column visibility');\n        }\n    }\n    /**\n     * Whether to show a text box to filter files by name.\n     */\n    get showFileFilter() {\n        return this._showFileFilter;\n    }\n    set showFileFilter(value) {\n        var _a;\n        // If the old value was true and the new value is false, clear the filter\n        const oldValue = this.showFileFilter;\n        if (oldValue && !value) {\n            // Clear the search box input\n            if (this._fileFilterRef.current) {\n                this._fileFilterRef.current.value = '';\n            }\n            // Set a filter that doesn't exclude anything.\n            this.model.setFilter(value => {\n                return {};\n            });\n            this.model.refresh().catch(console.warn);\n        }\n        this._showFileFilter = value;\n        // Update widget visibility\n        this.filterToolbar.setHidden(!this.showFileFilter);\n        if (this.showFileFilter) {\n            (_a = this._fileFilterRef.current) === null || _a === void 0 ? void 0 : _a.focus();\n        }\n    }\n    /**\n     * Whether to sort notebooks above other files\n     */\n    get sortNotebooksFirst() {\n        return this._sortNotebooksFirst;\n    }\n    set sortNotebooksFirst(value) {\n        if (this.listing.setNotebooksFirstSorting) {\n            this.listing.setNotebooksFirstSorting(value);\n            this._sortNotebooksFirst = value;\n        }\n        else {\n            console.warn('Listing does not support sorting notebooks first');\n        }\n    }\n    /**\n     * Whether to allow single click files and directories\n     */\n    get singleClickNavigation() {\n        return this._allowSingleClick;\n    }\n    set singleClickNavigation(value) {\n        if (this.listing.setAllowSingleClickNavigation) {\n            this.listing.setAllowSingleClickNavigation(value);\n            this._allowSingleClick = value;\n        }\n        else {\n            console.warn('Listing does not support single click navigation');\n        }\n    }\n    /**\n     * Create an iterator over the listing's selected items.\n     *\n     * @returns A new iterator over the listing's selected items.\n     */\n    selectedItems() {\n        return this.listing.selectedItems();\n    }\n    /**\n     * Select an item by name.\n     *\n     * @param name - The name of the item to select.\n     */\n    async selectItemByName(name) {\n        await this.listing.selectItemByName(name);\n    }\n    clearSelectedItems() {\n        this.listing.clearSelectedItems();\n    }\n    /**\n     * Rename the first currently selected item.\n     *\n     * @returns A promise that resolves with the new name of the item.\n     */\n    rename() {\n        return this.listing.rename();\n    }\n    /**\n     * Cut the selected items.\n     */\n    cut() {\n        this.listing.cut();\n    }\n    /**\n     * Copy the selected items.\n     */\n    copy() {\n        this.listing.copy();\n    }\n    /**\n     * Paste the items from the clipboard.\n     *\n     * @returns A promise that resolves when the operation is complete.\n     */\n    paste() {\n        return this.listing.paste();\n    }\n    async _createNew(options) {\n        // normalize the path if the file is created from a custom drive\n        if (options.path) {\n            const localPath = this._manager.services.contents.localPath(options.path);\n            options.path = this._toDrivePath(this.model.driveName, localPath);\n        }\n        try {\n            const model = await this._manager.newUntitled(options);\n            await this.listing.selectItemByName(model.name, true);\n            await this.rename();\n            return model;\n        }\n        catch (err) {\n            void showErrorMessage(this._trans.__('Error'), err);\n            throw err;\n        }\n    }\n    /**\n     * Create a new directory\n     */\n    async createNewDirectory() {\n        if (this._directoryPending) {\n            return this._directoryPending;\n        }\n        this._directoryPending = this._createNew({\n            path: this.model.path,\n            type: 'directory'\n        });\n        try {\n            return await this._directoryPending;\n        }\n        finally {\n            this._directoryPending = null;\n        }\n    }\n    /**\n     * Create a new file\n     */\n    async createNewFile(options) {\n        if (this._filePending) {\n            return this._filePending;\n        }\n        this._filePending = this._createNew({\n            path: this.model.path,\n            type: 'file',\n            ext: options.ext\n        });\n        try {\n            return await this._filePending;\n        }\n        finally {\n            this._filePending = null;\n        }\n    }\n    /**\n     * Delete the currently selected item(s).\n     *\n     * @returns A promise that resolves when the operation is complete.\n     */\n    delete() {\n        return this.listing.delete();\n    }\n    /**\n     * Duplicate the currently selected item(s).\n     *\n     * @returns A promise that resolves when the operation is complete.\n     */\n    duplicate() {\n        return this.listing.duplicate();\n    }\n    /**\n     * Download the currently selected item(s).\n     */\n    download() {\n        return this.listing.download();\n    }\n    /**\n     * cd ..\n     *\n     * Go up one level in the directory tree.\n     */\n    async goUp() {\n        return this.listing.goUp();\n    }\n    /**\n     * Shut down kernels on the applicable currently selected items.\n     *\n     * @returns A promise that resolves when the operation is complete.\n     */\n    shutdownKernels() {\n        return this.listing.shutdownKernels();\n    }\n    /**\n     * Select next item.\n     */\n    selectNext() {\n        this.listing.selectNext();\n    }\n    /**\n     * Select previous item.\n     */\n    selectPrevious() {\n        this.listing.selectPrevious();\n    }\n    /**\n     * Find a model given a click.\n     *\n     * @param event - The mouse event.\n     *\n     * @returns The model for the selected file.\n     */\n    modelForClick(event) {\n        return this.listing.modelForClick(event);\n    }\n    /**\n     * Create the underlying DirListing instance.\n     *\n     * @param options - The DirListing constructor options.\n     *\n     * @returns The created DirListing instance.\n     */\n    createDirListing(options) {\n        return new DirListing(options);\n    }\n    /**\n     * Handle a connection lost signal from the model.\n     */\n    _onConnectionFailure(sender, args) {\n        if (args instanceof ServerConnection.ResponseError &&\n            args.response.status === 404) {\n            const title = this._trans.__('Directory not found');\n            args.message = this._trans.__('Directory not found: \"%1\"', this.model.path);\n            void showErrorMessage(title, args);\n        }\n    }\n    /**\n     * Given a drive name and a local path, return the full\n     * drive path which includes the drive name and the local path.\n     *\n     * @param driveName the name of the drive\n     * @param localPath the local path on the drive.\n     *\n     * @returns the full drive path\n     */\n    _toDrivePath(driveName, localPath) {\n        if (driveName === '') {\n            return localPath;\n        }\n        else {\n            return `${driveName}:${PathExt.removeSlash(localPath)}`;\n        }\n    }\n}\n//# sourceMappingURL=browser.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Dialog, showDialog } from '@jupyterlab/apputils';\nimport { PageConfig, PathExt } from '@jupyterlab/coreutils';\nimport { shouldOverwrite } from '@jupyterlab/docmanager';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { ArrayExt, filter } from '@lumino/algorithm';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { Poll } from '@lumino/polling';\nimport { Signal } from '@lumino/signaling';\n/**\n * The default duration of the auto-refresh in ms\n */\nconst DEFAULT_REFRESH_INTERVAL = 10000;\n/**\n * The maximum upload size (in bytes) for notebook version < 5.1.0\n */\nexport const LARGE_FILE_SIZE = 15 * 1024 * 1024;\n/**\n * The size (in bytes) of the biggest chunk we should upload at once.\n */\nexport const CHUNK_SIZE = 1024 * 1024;\n/**\n * An implementation of a file browser model.\n *\n * #### Notes\n * All paths parameters without a leading `'/'` are interpreted as relative to\n * the current directory.  Supports `'../'` syntax.\n */\nexport class FileBrowserModel {\n    /**\n     * Construct a new file browser model.\n     */\n    constructor(options) {\n        var _a;\n        this._connectionFailure = new Signal(this);\n        this._fileChanged = new Signal(this);\n        this._items = [];\n        this._key = '';\n        this._pathChanged = new Signal(this);\n        this._paths = new Set();\n        this._pending = null;\n        this._pendingPath = null;\n        this._refreshed = new Signal(this);\n        this._sessions = [];\n        this._state = null;\n        this._isDisposed = false;\n        this._restored = new PromiseDelegate();\n        this._uploads = [];\n        this._uploadChanged = new Signal(this);\n        this.manager = options.manager;\n        this.translator = options.translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        this._driveName = options.driveName || '';\n        this._model = {\n            path: this.rootPath,\n            name: PathExt.basename(this.rootPath),\n            type: 'directory',\n            content: undefined,\n            writable: false,\n            created: 'unknown',\n            last_modified: 'unknown',\n            mimetype: 'text/plain',\n            format: 'text'\n        };\n        this._state = options.state || null;\n        const refreshInterval = options.refreshInterval || DEFAULT_REFRESH_INTERVAL;\n        const { services } = options.manager;\n        services.contents.fileChanged.connect(this.onFileChanged, this);\n        services.sessions.runningChanged.connect(this.onRunningChanged, this);\n        this._unloadEventListener = (e) => {\n            if (this._uploads.length > 0) {\n                const confirmationMessage = this._trans.__('Files still uploading');\n                e.returnValue = confirmationMessage;\n                return confirmationMessage;\n            }\n        };\n        window.addEventListener('beforeunload', this._unloadEventListener);\n        this._poll = new Poll({\n            auto: (_a = options.auto) !== null && _a !== void 0 ? _a : true,\n            name: '@jupyterlab/filebrowser:Model',\n            factory: () => this.cd('.'),\n            frequency: {\n                interval: refreshInterval,\n                backoff: true,\n                max: 300 * 1000\n            },\n            standby: options.refreshStandby || 'when-hidden'\n        });\n    }\n    /**\n     * A signal emitted when the file browser model loses connection.\n     */\n    get connectionFailure() {\n        return this._connectionFailure;\n    }\n    /**\n     * The drive name that gets prepended to the path.\n     */\n    get driveName() {\n        return this._driveName;\n    }\n    /**\n     * A promise that resolves when the model is first restored.\n     */\n    get restored() {\n        return this._restored.promise;\n    }\n    /**\n     * Get the file path changed signal.\n     */\n    get fileChanged() {\n        return this._fileChanged;\n    }\n    /**\n     * Get the current path.\n     */\n    get path() {\n        return this._model ? this._model.path : '';\n    }\n    /**\n     * Get the root path\n     */\n    get rootPath() {\n        return this._driveName ? this._driveName + ':' : '';\n    }\n    /**\n     * A signal emitted when the path changes.\n     */\n    get pathChanged() {\n        return this._pathChanged;\n    }\n    /**\n     * A signal emitted when the directory listing is refreshed.\n     */\n    get refreshed() {\n        return this._refreshed;\n    }\n    /**\n     * Get the kernel spec models.\n     */\n    get specs() {\n        return this.manager.services.kernelspecs.specs;\n    }\n    /**\n     * Get whether the model is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * A signal emitted when an upload progresses.\n     */\n    get uploadChanged() {\n        return this._uploadChanged;\n    }\n    /**\n     * Create an iterator over the status of all in progress uploads.\n     */\n    uploads() {\n        return this._uploads[Symbol.iterator]();\n    }\n    /**\n     * Dispose of the resources held by the model.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        window.removeEventListener('beforeunload', this._unloadEventListener);\n        this._isDisposed = true;\n        this._poll.dispose();\n        this._sessions.length = 0;\n        this._items.length = 0;\n        Signal.clearData(this);\n    }\n    /**\n     * Create an iterator over the model's items.\n     *\n     * @returns A new iterator over the model's items.\n     */\n    items() {\n        return this._items[Symbol.iterator]();\n    }\n    /**\n     * Create an iterator over the active sessions in the directory.\n     *\n     * @returns A new iterator over the model's active sessions.\n     */\n    sessions() {\n        return this._sessions[Symbol.iterator]();\n    }\n    /**\n     * Force a refresh of the directory contents.\n     */\n    async refresh() {\n        await this._poll.refresh();\n        await this._poll.tick;\n        this._refreshed.emit(void 0);\n    }\n    /**\n     * Change directory.\n     *\n     * @param path The path to the file or directory.\n     *\n     * @returns A promise with the contents of the directory.\n     */\n    async cd(path = '.') {\n        if (path !== '.') {\n            path = this.manager.services.contents.resolvePath(this._model.path, path);\n        }\n        else {\n            path = this._pendingPath || this._model.path;\n        }\n        if (this._pending) {\n            // Collapse requests to the same directory.\n            if (path === this._pendingPath) {\n                return this._pending;\n            }\n            // Otherwise wait for the pending request to complete before continuing.\n            await this._pending;\n        }\n        const oldValue = this.path;\n        const options = { content: true };\n        this._pendingPath = path;\n        if (oldValue !== path) {\n            this._sessions.length = 0;\n        }\n        const services = this.manager.services;\n        this._pending = services.contents\n            .get(path, options)\n            .then(contents => {\n            if (this.isDisposed) {\n                return;\n            }\n            this.handleContents(contents);\n            this._pendingPath = null;\n            this._pending = null;\n            if (oldValue !== path) {\n                // If there is a state database and a unique key, save the new path.\n                // We don't need to wait on the save to continue.\n                if (this._state && this._key) {\n                    void this._state.save(this._key, { path });\n                }\n                this._pathChanged.emit({\n                    name: 'path',\n                    oldValue,\n                    newValue: path\n                });\n            }\n            this.onRunningChanged(services.sessions, services.sessions.running());\n            this._refreshed.emit(void 0);\n        })\n            .catch(error => {\n            this._pendingPath = null;\n            this._pending = null;\n            if (error.response && error.response.status === 404 && path !== '/') {\n                error.message = this._trans.__('Directory not found: \"%1\"', this._model.path);\n                console.error(error);\n                this._connectionFailure.emit(error);\n                return this.cd('/');\n            }\n            else {\n                this._connectionFailure.emit(error);\n            }\n        });\n        return this._pending;\n    }\n    /**\n     * Download a file.\n     *\n     * @param path - The path of the file to be downloaded.\n     *\n     * @returns A promise which resolves when the file has begun\n     *   downloading.\n     */\n    async download(path) {\n        const url = await this.manager.services.contents.getDownloadUrl(path);\n        const element = document.createElement('a');\n        element.href = url;\n        element.download = '';\n        document.body.appendChild(element);\n        element.click();\n        document.body.removeChild(element);\n        return void 0;\n    }\n    /**\n     * Restore the state of the file browser.\n     *\n     * @param id - The unique ID that is used to construct a state database key.\n     *\n     * @param populate - If `false`, the restoration ID will be set but the file\n     * browser state will not be fetched from the state database.\n     *\n     * @returns A promise when restoration is complete.\n     *\n     * #### Notes\n     * This function will only restore the model *once*. If it is called multiple\n     * times, all subsequent invocations are no-ops.\n     */\n    async restore(id, populate = true) {\n        const { manager } = this;\n        const key = `file-browser-${id}:cwd`;\n        const state = this._state;\n        const restored = !!this._key;\n        if (restored) {\n            return;\n        }\n        // Set the file browser key for state database fetch/save.\n        this._key = key;\n        if (!populate || !state) {\n            this._restored.resolve(undefined);\n            return;\n        }\n        await manager.services.ready;\n        try {\n            const value = await state.fetch(key);\n            if (!value) {\n                this._restored.resolve(undefined);\n                return;\n            }\n            const path = value['path'];\n            // need to return to root path if preferred dir is set\n            if (path) {\n                await this.cd('/');\n            }\n            const localPath = manager.services.contents.localPath(path);\n            await manager.services.contents.get(path);\n            await this.cd(localPath);\n        }\n        catch (error) {\n            await state.remove(key);\n        }\n        this._restored.resolve(undefined);\n    }\n    /**\n     * Upload a `File` object.\n     *\n     * @param file - The `File` object to upload.\n     * @param path - The directory into which the file should be uploaded; defaults to current directory.\n     *\n     * @returns A promise containing the new file contents model.\n     *\n     * #### Notes\n     * On Notebook version < 5.1.0, this will fail to upload files that are too\n     * big to be sent in one request to the server. On newer versions, or on\n     * Jupyter Server, it will ask for confirmation then upload the file in 1 MB\n     * chunks.\n     */\n    async upload(file, path) {\n        // We do not support Jupyter Notebook version less than 4, and Jupyter\n        // Server advertises itself as version 1 and supports chunked\n        // uploading. We assume any version less than 4.0.0 to be Jupyter Server\n        // instead of Jupyter Notebook.\n        const serverVersion = PageConfig.getNotebookVersion();\n        const supportsChunked = serverVersion < [4, 0, 0] /* Jupyter Server */ ||\n            serverVersion >= [5, 1, 0]; /* Jupyter Notebook >= 5.1.0 */\n        const largeFile = file.size > LARGE_FILE_SIZE;\n        if (largeFile && !supportsChunked) {\n            const msg = this._trans.__('Cannot upload file (>%1 MB). %2', LARGE_FILE_SIZE / (1024 * 1024), file.name);\n            console.warn(msg);\n            throw msg;\n        }\n        const err = 'File not uploaded';\n        if (largeFile && !(await this._shouldUploadLarge(file))) {\n            throw 'Cancelled large file upload';\n        }\n        await this._uploadCheckDisposed();\n        await this.refresh();\n        await this._uploadCheckDisposed();\n        if (this._items.find(i => i.name === file.name) &&\n            !(await shouldOverwrite(file.name))) {\n            throw err;\n        }\n        await this._uploadCheckDisposed();\n        const chunkedUpload = supportsChunked && file.size > CHUNK_SIZE;\n        return await this._upload(file, chunkedUpload, path);\n    }\n    async _shouldUploadLarge(file) {\n        const { button } = await showDialog({\n            title: this._trans.__('Large file size warning'),\n            body: this._trans.__('The file size is %1 MB. Do you still want to upload it?', Math.round(file.size / (1024 * 1024))),\n            buttons: [\n                Dialog.cancelButton({ label: this._trans.__('Cancel') }),\n                Dialog.warnButton({ label: this._trans.__('Upload') })\n            ]\n        });\n        return button.accept;\n    }\n    /**\n     * Perform the actual upload.\n     */\n    async _upload(file, chunked, uploadPath) {\n        // Gather the file model parameters.\n        let path = typeof uploadPath === 'undefined' ? this._model.path : uploadPath;\n        path = path ? path + '/' + file.name : file.name;\n        const name = file.name;\n        const type = 'file';\n        const format = 'base64';\n        const uploadInner = async (blob, chunk) => {\n            await this._uploadCheckDisposed();\n            const reader = new FileReader();\n            reader.readAsDataURL(blob);\n            await new Promise((resolve, reject) => {\n                reader.onload = resolve;\n                reader.onerror = event => reject(`Failed to upload \"${file.name}\":` + event);\n            });\n            await this._uploadCheckDisposed();\n            // remove header https://stackoverflow.com/a/24289420/907060\n            const content = reader.result.split(',')[1];\n            const model = {\n                type,\n                format,\n                name,\n                chunk,\n                content\n            };\n            return await this.manager.services.contents.save(path, model);\n        };\n        if (!chunked) {\n            try {\n                return await uploadInner(file);\n            }\n            catch (err) {\n                ArrayExt.removeFirstWhere(this._uploads, uploadIndex => {\n                    return file.name === uploadIndex.path;\n                });\n                throw err;\n            }\n        }\n        let finalModel;\n        let upload = { path, progress: 0 };\n        this._uploadChanged.emit({\n            name: 'start',\n            newValue: upload,\n            oldValue: null\n        });\n        for (let start = 0; !finalModel; start += CHUNK_SIZE) {\n            const end = start + CHUNK_SIZE;\n            const lastChunk = end >= file.size;\n            const chunk = lastChunk ? -1 : end / CHUNK_SIZE;\n            const newUpload = { path, progress: start / file.size };\n            this._uploads.splice(this._uploads.indexOf(upload));\n            this._uploads.push(newUpload);\n            this._uploadChanged.emit({\n                name: 'update',\n                newValue: newUpload,\n                oldValue: upload\n            });\n            upload = newUpload;\n            let currentModel;\n            try {\n                currentModel = await uploadInner(file.slice(start, end), chunk);\n            }\n            catch (err) {\n                ArrayExt.removeFirstWhere(this._uploads, uploadIndex => {\n                    return file.name === uploadIndex.path;\n                });\n                this._uploadChanged.emit({\n                    name: 'failure',\n                    newValue: upload,\n                    oldValue: null\n                });\n                throw err;\n            }\n            if (lastChunk) {\n                finalModel = currentModel;\n            }\n        }\n        this._uploads.splice(this._uploads.indexOf(upload));\n        this._uploadChanged.emit({\n            name: 'finish',\n            newValue: null,\n            oldValue: upload\n        });\n        return finalModel;\n    }\n    _uploadCheckDisposed() {\n        if (this.isDisposed) {\n            return Promise.reject('Filemanager disposed. File upload canceled');\n        }\n        return Promise.resolve();\n    }\n    /**\n     * Handle an updated contents model.\n     */\n    handleContents(contents) {\n        // Update our internal data.\n        this._model = {\n            name: contents.name,\n            path: contents.path,\n            type: contents.type,\n            content: undefined,\n            writable: contents.writable,\n            created: contents.created,\n            last_modified: contents.last_modified,\n            size: contents.size,\n            mimetype: contents.mimetype,\n            format: contents.format\n        };\n        this._items = contents.content;\n        this._paths.clear();\n        contents.content.forEach((model) => {\n            this._paths.add(model.path);\n        });\n    }\n    /**\n     * Handle a change to the running sessions.\n     */\n    onRunningChanged(sender, models) {\n        this._populateSessions(models);\n        this._refreshed.emit(void 0);\n    }\n    /**\n     * Handle a change on the contents manager.\n     */\n    onFileChanged(sender, change) {\n        const path = this._model.path;\n        const { sessions } = this.manager.services;\n        const { oldValue, newValue } = change;\n        const prefix = this.driveName.length > 0 ? this.driveName + ':' : '';\n        const value = oldValue &&\n            oldValue.path &&\n            prefix + PathExt.dirname(oldValue.path) === path\n            ? oldValue\n            : newValue &&\n                newValue.path &&\n                prefix + PathExt.dirname(newValue.path) === path\n                ? newValue\n                : undefined;\n        // If either the old value or the new value is in the current path, update.\n        if (value) {\n            void this._poll.refresh();\n            this._populateSessions(sessions.running());\n            this._fileChanged.emit(change);\n            return;\n        }\n    }\n    /**\n     * Populate the model's sessions collection.\n     */\n    _populateSessions(models) {\n        this._sessions.length = 0;\n        for (const model of models) {\n            if (this._paths.has(model.path)) {\n                this._sessions.push(model);\n            }\n        }\n    }\n}\n/**\n * File browser model where hidden files inclusion can be toggled on/off.\n */\nexport class TogglableHiddenFileBrowserModel extends FileBrowserModel {\n    constructor(options) {\n        super(options);\n        this._includeHiddenFiles = options.includeHiddenFiles || false;\n    }\n    /**\n     * Create an iterator over the model's items filtering hidden files out if necessary.\n     *\n     * @returns A new iterator over the model's items.\n     */\n    items() {\n        return this._includeHiddenFiles\n            ? super.items()\n            : filter(super.items(), value => !value.name.startsWith('.'));\n    }\n    /**\n     * Set the inclusion of hidden files. Triggers a model refresh.\n     */\n    showHiddenFiles(value) {\n        this._includeHiddenFiles = value;\n        void this.refresh();\n    }\n}\n/**\n * File browser model with optional filter on element.\n */\nexport class FilterFileBrowserModel extends TogglableHiddenFileBrowserModel {\n    constructor(options) {\n        var _a, _b, _c;\n        super(options);\n        this._filterSettingsChanged = new Signal(this);\n        this._filter =\n            (_a = options.filter) !== null && _a !== void 0 ? _a : (model => {\n                return {};\n            });\n        this._filterDirectories = (_b = options.filterDirectories) !== null && _b !== void 0 ? _b : true;\n        this._useFuzzyFilter = (_c = options.useFuzzyFilter) !== null && _c !== void 0 ? _c : true;\n    }\n    /**\n     * Whether to filter directories.\n     */\n    get filterDirectories() {\n        return this._filterDirectories;\n    }\n    set filterDirectories(value) {\n        this._filterDirectories = value;\n    }\n    /**\n     * Whether to apply fuzzy filter.\n     */\n    get useFuzzyFilter() {\n        return this._useFuzzyFilter;\n    }\n    set useFuzzyFilter(value) {\n        if (this._useFuzzyFilter === value) {\n            return;\n        }\n        this._useFuzzyFilter = value;\n        this._filterSettingsChanged.emit({ useFuzzyFilter: value });\n    }\n    /**\n     * Signal for settings changed\n     */\n    get filterSettingsChanged() {\n        return this._filterSettingsChanged;\n    }\n    /**\n     * Create an iterator over the filtered model's items.\n     *\n     * @returns A new iterator over the model's items.\n     */\n    items() {\n        return filter(super.items(), value => {\n            if (!this._filterDirectories && value.type === 'directory') {\n                return true;\n            }\n            else {\n                const filtered = this._filter(value);\n                value.indices = filtered === null || filtered === void 0 ? void 0 : filtered.indices;\n                return !!filtered;\n            }\n        });\n    }\n    setFilter(filter) {\n        this._filter = filter;\n        void this.refresh();\n    }\n}\n//# sourceMappingURL=model.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Dialog, setToolbar, ToolbarButton } from '@jupyterlab/apputils';\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { newFolderIcon, refreshIcon } from '@jupyterlab/ui-components';\nimport { PanelLayout, Widget } from '@lumino/widgets';\nimport { FileBrowser } from './browser';\nimport { FilterFileBrowserModel } from './model';\nimport { PromiseDelegate } from '@lumino/coreutils';\n/**\n * The class name added to open file dialog\n */\nconst OPEN_DIALOG_CLASS = 'jp-Open-Dialog';\n/**\n * The class name added to (optional) label in the file dialog\n */\nconst OPEN_DIALOG_LABEL_CLASS = 'jp-Open-Dialog-label';\n/**\n * Namespace for file dialog\n */\nexport var FileDialog;\n(function (FileDialog) {\n    /**\n     * Create and show a open files dialog.\n     *\n     * Note: if nothing is selected when `getValue` will return the browser\n     * model current path.\n     *\n     * @param options - The dialog setup options.\n     *\n     * @returns A promise that resolves with whether the dialog was accepted.\n     */\n    async function getOpenFiles(options) {\n        const translator = options.translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        const openDialog = new OpenDialog(options.manager, options.filter, translator, options.defaultPath, options.label);\n        const dialogOptions = {\n            title: options.title,\n            buttons: [\n                Dialog.cancelButton(),\n                Dialog.okButton({\n                    label: trans.__('Select')\n                })\n            ],\n            focusNodeSelector: options.focusNodeSelector,\n            host: options.host,\n            renderer: options.renderer,\n            body: openDialog\n        };\n        await openDialog.ready;\n        const dialog = new Dialog(dialogOptions);\n        return dialog.launch();\n    }\n    FileDialog.getOpenFiles = getOpenFiles;\n    /**\n     * Create and show a open directory dialog.\n     *\n     * Note: if nothing is selected when `getValue` will return the browser\n     * model current path.\n     *\n     * @param options - The dialog setup options.\n     *\n     * @returns A promise that resolves with whether the dialog was accepted.\n     */\n    function getExistingDirectory(options) {\n        return getOpenFiles({\n            ...options,\n            filter: model => {\n                return model.type === 'directory' ? {} : null;\n            }\n        });\n    }\n    FileDialog.getExistingDirectory = getExistingDirectory;\n})(FileDialog || (FileDialog = {}));\n/**\n * Open dialog widget\n */\nclass OpenDialog extends Widget {\n    constructor(manager, filter, translator, defaultPath, label, filterDirectories) {\n        super();\n        this._ready = new PromiseDelegate();\n        translator = translator !== null && translator !== void 0 ? translator : nullTranslator;\n        const trans = translator.load('jupyterlab');\n        this.addClass(OPEN_DIALOG_CLASS);\n        Private.createFilteredFileBrowser('filtered-file-browser-dialog', manager, filter, {}, translator, defaultPath, filterDirectories)\n            .then(browser => {\n            this._browser = browser;\n            // Add toolbar items\n            setToolbar(this._browser, (browser) => [\n                {\n                    name: 'new-folder',\n                    widget: new ToolbarButton({\n                        icon: newFolderIcon,\n                        onClick: () => {\n                            void browser.createNewDirectory();\n                        },\n                        tooltip: trans.__('New Folder')\n                    })\n                },\n                {\n                    name: 'refresher',\n                    widget: new ToolbarButton({\n                        icon: refreshIcon,\n                        onClick: () => {\n                            browser.model.refresh().catch(reason => {\n                                console.error('Failed to refresh file browser in open dialog.', reason);\n                            });\n                        },\n                        tooltip: trans.__('Refresh File List')\n                    })\n                }\n            ]);\n            // Build the sub widgets\n            const layout = new PanelLayout();\n            if (label) {\n                const labelWidget = new Widget();\n                labelWidget.addClass(OPEN_DIALOG_LABEL_CLASS);\n                labelWidget.node.textContent = label;\n                layout.addWidget(labelWidget);\n            }\n            layout.addWidget(this._browser);\n            /**\n             * Dispose browser model when OpenDialog\n             * is disposed.\n             */\n            this.dispose = () => {\n                if (this.isDisposed) {\n                    return;\n                }\n                this._browser.model.dispose();\n                super.dispose();\n            };\n            // Set Widget content\n            this.layout = layout;\n            this._ready.resolve();\n        })\n            .catch(reason => {\n            console.error('Error while creating file browser in open dialog', reason);\n            this._ready.reject(void 0);\n        });\n    }\n    /**\n     * Get the selected items.\n     */\n    getValue() {\n        const selection = Array.from(this._browser.selectedItems());\n        if (selection.length === 0) {\n            // Return current path\n            return [\n                {\n                    path: this._browser.model.path,\n                    name: PathExt.basename(this._browser.model.path),\n                    type: 'directory',\n                    content: undefined,\n                    writable: false,\n                    created: 'unknown',\n                    last_modified: 'unknown',\n                    mimetype: 'text/plain',\n                    format: 'text'\n                }\n            ];\n        }\n        else {\n            return selection;\n        }\n    }\n    /**\n     * A promise that resolves when openDialog is successfully created.\n     */\n    get ready() {\n        return this._ready.promise;\n    }\n}\nvar Private;\n(function (Private) {\n    /**\n     * Create a new file browser instance.\n     *\n     * @param id - The widget/DOM id of the file browser.\n     *\n     * @param manager - A document manager instance.\n     *\n     * @param filter - function to filter file browser item.\n     *\n     * @param options - The optional file browser configuration object.\n     *\n     * #### Notes\n     * The ID parameter is used to set the widget ID. It is also used as part of\n     * the unique key necessary to store the file browser's restoration data in\n     * the state database if that functionality is enabled.\n     *\n     * If, after the file browser has been generated by the factory, the ID of the\n     * resulting widget is changed by client code, the restoration functionality\n     * will not be disrupted as long as there are no ID collisions, i.e., as long\n     * as the initial ID passed into the factory is used for only one file browser\n     * instance.\n     */\n    Private.createFilteredFileBrowser = async (id, manager, filter, options = {}, translator, defaultPath, filterDirectories) => {\n        translator = translator || nullTranslator;\n        const model = new FilterFileBrowserModel({\n            manager,\n            filter,\n            translator,\n            driveName: options.driveName,\n            refreshInterval: options.refreshInterval,\n            filterDirectories\n        });\n        const widget = new FileBrowser({\n            id,\n            model,\n            translator\n        });\n        if (defaultPath) {\n            await widget.model.cd(defaultPath);\n        }\n        return widget;\n    };\n})(Private || (Private = {}));\n//# sourceMappingURL=opendialog.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The file browser factory token.\n */\nexport const IFileBrowserFactory = new Token('@jupyterlab/filebrowser:IFileBrowserFactory', `A factory object that creates file browsers.\n  Use this if you want to create your own file browser (e.g., for a custom storage backend),\n  or to interact with other file browsers that have been created by extensions.`);\n/**\n * The default file browser token.\n */\nexport const IDefaultFileBrowser = new Token('@jupyterlab/filebrowser:IDefaultFileBrowser', 'A service for the default file browser.');\n/**\n * The token that indicates the default file browser commands are loaded.\n */\nexport const IFileBrowserCommands = new Token('@jupyterlab/filebrowser:IFileBrowserCommands', 'A token to ensure file browser commands are loaded.');\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { showErrorMessage } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { fileUploadIcon, ToolbarButton } from '@jupyterlab/ui-components';\n/**\n * A widget which provides an upload button.\n */\nexport class Uploader extends ToolbarButton {\n    /**\n     * Construct a new file browser buttons widget.\n     */\n    constructor(options) {\n        super({\n            icon: fileUploadIcon,\n            label: options.label,\n            onClick: () => {\n                this._input.click();\n            },\n            tooltip: Private.translateToolTip(options.translator)\n        });\n        /**\n         * The 'change' handler for the input field.\n         */\n        this._onInputChanged = () => {\n            const files = Array.prototype.slice.call(this._input.files);\n            const pending = files.map(file => this.fileBrowserModel.upload(file));\n            void Promise.all(pending).catch(error => {\n                void showErrorMessage(this._trans._p('showErrorMessage', 'Upload Error'), error);\n            });\n        };\n        /**\n         * The 'click' handler for the input field.\n         */\n        this._onInputClicked = () => {\n            // In order to allow repeated uploads of the same file (with delete in between),\n            // we need to clear the input value to trigger a change event.\n            this._input.value = '';\n        };\n        this._input = Private.createUploadInput();\n        this.fileBrowserModel = options.model;\n        this.translator = options.translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        this._input.onclick = this._onInputClicked;\n        this._input.onchange = this._onInputChanged;\n        this.addClass('jp-id-upload');\n    }\n}\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Create the upload input node for a file buttons widget.\n     */\n    function createUploadInput() {\n        const input = document.createElement('input');\n        input.type = 'file';\n        input.multiple = true;\n        return input;\n    }\n    Private.createUploadInput = createUploadInput;\n    /**\n     * Translate upload tooltip.\n     */\n    function translateToolTip(translator) {\n        translator = translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        return trans.__('Upload Files');\n    }\n    Private.translateToolTip = translateToolTip;\n})(Private || (Private = {}));\n//# sourceMappingURL=upload.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n//\nimport { GroupItem, ProgressBar, TextItem } from '@jupyterlab/statusbar';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { VDomModel, VDomRenderer } from '@jupyterlab/ui-components';\nimport { ArrayExt } from '@lumino/algorithm';\nimport React from 'react';\n/**\n * Half-spacing between items in the overall status item.\n */\nconst HALF_SPACING = 4;\n/**\n * A pure function component for a FileUpload status item.\n *\n * @param props the props for the component.\n *\n * @returns a tsx component for the file upload status.\n */\nfunction FileUploadComponent(props) {\n    const translator = props.translator || nullTranslator;\n    const trans = translator.load('jupyterlab');\n    return (React.createElement(GroupItem, { spacing: HALF_SPACING },\n        React.createElement(TextItem, { source: trans.__('Uploading…') }),\n        React.createElement(ProgressBar, { percentage: props.upload })));\n}\n/**\n * The time for which to show the \"Complete!\" message after uploading.\n */\nconst UPLOAD_COMPLETE_MESSAGE_MILLIS = 2000;\n/**\n * Status bar item to display file upload progress.\n */\nexport class FileUploadStatus extends VDomRenderer {\n    /**\n     * Construct a new FileUpload status item.\n     */\n    constructor(opts) {\n        super(new FileUploadStatus.Model(opts.tracker.currentWidget && opts.tracker.currentWidget.model));\n        this._onBrowserChange = (tracker, browser) => {\n            if (browser === null) {\n                this.model.browserModel = null;\n            }\n            else {\n                this.model.browserModel = browser.model;\n            }\n        };\n        this.translator = opts.translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        this._tracker = opts.tracker;\n        this._tracker.currentChanged.connect(this._onBrowserChange);\n    }\n    /**\n     * Render the FileUpload status.\n     */\n    render() {\n        const uploadPaths = this.model.items;\n        if (uploadPaths.length > 0) {\n            const item = this.model.items[0];\n            if (item.complete) {\n                return React.createElement(TextItem, { source: this._trans.__('Complete!') });\n            }\n            else {\n                return (React.createElement(FileUploadComponent, { upload: this.model.items[0].progress, translator: this.translator }));\n            }\n        }\n        else {\n            return React.createElement(FileUploadComponent, { upload: 100, translator: this.translator });\n        }\n    }\n    dispose() {\n        super.dispose();\n        this._tracker.currentChanged.disconnect(this._onBrowserChange);\n    }\n}\n/**\n * A namespace for FileUpload class statics.\n */\n(function (FileUploadStatus) {\n    /**\n     * The VDomModel for the FileUpload renderer.\n     */\n    class Model extends VDomModel {\n        /**\n         * Construct a new model.\n         */\n        constructor(browserModel) {\n            super();\n            /**\n             * Handle an uploadChanged event in the filebrowser model.\n             */\n            this._uploadChanged = (browse, uploads) => {\n                if (uploads.name === 'start') {\n                    this._items.push({\n                        path: uploads.newValue.path,\n                        progress: uploads.newValue.progress * 100,\n                        complete: false\n                    });\n                }\n                else if (uploads.name === 'update') {\n                    const idx = ArrayExt.findFirstIndex(this._items, val => val.path === uploads.oldValue.path);\n                    if (idx !== -1) {\n                        this._items[idx].progress = uploads.newValue.progress * 100;\n                    }\n                }\n                else if (uploads.name === 'finish') {\n                    const finishedItem = ArrayExt.findFirstValue(this._items, val => val.path === uploads.oldValue.path);\n                    if (finishedItem) {\n                        finishedItem.complete = true;\n                        setTimeout(() => {\n                            ArrayExt.removeFirstOf(this._items, finishedItem);\n                            this.stateChanged.emit(void 0);\n                        }, UPLOAD_COMPLETE_MESSAGE_MILLIS);\n                    }\n                }\n                else if (uploads.name === 'failure') {\n                    ArrayExt.removeFirstWhere(this._items, val => val.path === uploads.newValue.path);\n                }\n                this.stateChanged.emit(void 0);\n            };\n            this._items = [];\n            this._browserModel = null;\n            this.browserModel = browserModel;\n        }\n        /**\n         * The currently uploading items.\n         */\n        get items() {\n            return this._items;\n        }\n        /**\n         * The current file browser model.\n         */\n        get browserModel() {\n            return this._browserModel;\n        }\n        set browserModel(browserModel) {\n            const oldBrowserModel = this._browserModel;\n            if (oldBrowserModel) {\n                oldBrowserModel.uploadChanged.disconnect(this._uploadChanged);\n            }\n            this._browserModel = browserModel;\n            this._items = [];\n            if (this._browserModel !== null) {\n                this._browserModel.uploadChanged.connect(this._uploadChanged);\n            }\n            this.stateChanged.emit(void 0);\n        }\n    }\n    FileUploadStatus.Model = Model;\n})(FileUploadStatus || (FileUploadStatus = {}));\n//# sourceMappingURL=uploadstatus.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module filebrowser\n */\nexport * from './browser';\nexport * from './crumbs';\nexport * from './listing';\nexport * from './model';\nexport * from './opendialog';\nexport * from './tokens';\nexport * from './upload';\nexport * from './uploadstatus';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@lumino/dragdrop/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/docmanager/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { selectAll } from '@codemirror/commands';\nimport { findNext, gotoLine } from '@codemirror/search';\nimport { Clipboard, MainAreaWidget } from '@jupyterlab/apputils';\nimport { CodeViewerWidget, IEditorMimeTypeService } from '@jupyterlab/codeeditor';\nimport { MarkdownCodeBlocks, PathExt } from '@jupyterlab/coreutils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { consoleIcon, copyIcon, cutIcon, LabIcon, markdownIcon, pasteIcon, redoIcon, textEditorIcon, undoIcon } from '@jupyterlab/ui-components';\nimport { find } from '@lumino/algorithm';\nconst autoClosingBracketsNotebook = 'notebook:toggle-autoclosing-brackets';\nconst autoClosingBracketsConsole = 'console:toggle-autoclosing-brackets';\n/**\n * The command IDs used by the fileeditor plugin.\n */\nexport var CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.createNew = 'fileeditor:create-new';\n    CommandIDs.createNewMarkdown = 'fileeditor:create-new-markdown-file';\n    CommandIDs.changeFontSize = 'fileeditor:change-font-size';\n    CommandIDs.lineNumbers = 'fileeditor:toggle-line-numbers';\n    CommandIDs.currentLineNumbers = 'fileeditor:toggle-current-line-numbers';\n    CommandIDs.lineWrap = 'fileeditor:toggle-line-wrap';\n    CommandIDs.currentLineWrap = 'fileeditor:toggle-current-line-wrap';\n    CommandIDs.changeTabs = 'fileeditor:change-tabs';\n    CommandIDs.matchBrackets = 'fileeditor:toggle-match-brackets';\n    CommandIDs.currentMatchBrackets = 'fileeditor:toggle-current-match-brackets';\n    CommandIDs.autoClosingBrackets = 'fileeditor:toggle-autoclosing-brackets';\n    CommandIDs.autoClosingBracketsUniversal = 'fileeditor:toggle-autoclosing-brackets-universal';\n    CommandIDs.createConsole = 'fileeditor:create-console';\n    CommandIDs.replaceSelection = 'fileeditor:replace-selection';\n    CommandIDs.restartConsole = 'fileeditor:restart-console';\n    CommandIDs.runCode = 'fileeditor:run-code';\n    CommandIDs.runAllCode = 'fileeditor:run-all';\n    CommandIDs.markdownPreview = 'fileeditor:markdown-preview';\n    CommandIDs.undo = 'fileeditor:undo';\n    CommandIDs.redo = 'fileeditor:redo';\n    CommandIDs.cut = 'fileeditor:cut';\n    CommandIDs.copy = 'fileeditor:copy';\n    CommandIDs.paste = 'fileeditor:paste';\n    CommandIDs.selectAll = 'fileeditor:select-all';\n    CommandIDs.invokeCompleter = 'completer:invoke-file';\n    CommandIDs.selectCompleter = 'completer:select-file';\n    CommandIDs.openCodeViewer = 'code-viewer:open';\n    CommandIDs.changeTheme = 'fileeditor:change-theme';\n    CommandIDs.changeLanguage = 'fileeditor:change-language';\n    CommandIDs.find = 'fileeditor:find';\n    CommandIDs.goToLine = 'fileeditor:go-to-line';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The name of the factory that creates editor widgets.\n */\nexport const FACTORY = 'Editor';\n/**\n * A utility class for adding commands and menu items,\n * for use by the File Editor extension or other Editor extensions.\n */\nexport var Commands;\n(function (Commands) {\n    let config = {};\n    let scrollPastEnd = true;\n    /**\n     * Accessor function that returns the createConsole function for use by Create Console commands\n     */\n    function getCreateConsoleFunction(commands, languages) {\n        return async function createConsole(widget, args) {\n            var _a, _b, _c;\n            const options = args || {};\n            const console = await commands.execute('console:create', {\n                activate: options['activate'],\n                name: (_a = widget.context.contentsModel) === null || _a === void 0 ? void 0 : _a.name,\n                path: widget.context.path,\n                // Default value is an empty string -> using OR operator\n                preferredLanguage: widget.context.model.defaultKernelLanguage ||\n                    ((_c = (_b = languages.findByFileName(widget.context.path)) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : ''),\n                ref: widget.id,\n                insertMode: 'split-bottom'\n            });\n            widget.context.pathChanged.connect((sender, value) => {\n                var _a;\n                console.session.setPath(value);\n                console.session.setName((_a = widget.context.contentsModel) === null || _a === void 0 ? void 0 : _a.name);\n            });\n        };\n    }\n    /**\n     * Update the setting values.\n     */\n    function updateSettings(settings, commands) {\n        var _a;\n        config =\n            (_a = settings.get('editorConfig').composite) !== null && _a !== void 0 ? _a : {};\n        scrollPastEnd = settings.get('scrollPasteEnd').composite;\n        // Trigger a refresh of the rendered commands\n        commands.notifyCommandChanged(CommandIDs.lineNumbers);\n        commands.notifyCommandChanged(CommandIDs.currentLineNumbers);\n        commands.notifyCommandChanged(CommandIDs.lineWrap);\n        commands.notifyCommandChanged(CommandIDs.currentLineWrap);\n        commands.notifyCommandChanged(CommandIDs.changeTabs);\n        commands.notifyCommandChanged(CommandIDs.matchBrackets);\n        commands.notifyCommandChanged(CommandIDs.currentMatchBrackets);\n        commands.notifyCommandChanged(CommandIDs.autoClosingBrackets);\n        commands.notifyCommandChanged(CommandIDs.changeLanguage);\n    }\n    Commands.updateSettings = updateSettings;\n    /**\n     * Update the settings of the current tracker instances.\n     */\n    function updateTracker(tracker) {\n        tracker.forEach(widget => {\n            updateWidget(widget.content);\n        });\n    }\n    Commands.updateTracker = updateTracker;\n    /**\n     * Update the settings of a widget.\n     * Skip global settings for transient editor specific configs.\n     */\n    function updateWidget(widget) {\n        const editor = widget.editor;\n        editor.setOptions({ ...config, scrollPastEnd });\n    }\n    Commands.updateWidget = updateWidget;\n    /**\n     * Wrapper function for adding the default File Editor commands\n     */\n    function addCommands(commands, settingRegistry, trans, id, isEnabled, tracker, defaultBrowser, extensions, languages, consoleTracker, sessionDialogs, shell) {\n        var _a;\n        /**\n         * Add a command to change font size for File Editor\n         */\n        commands.addCommand(CommandIDs.changeFontSize, {\n            execute: args => {\n                var _a;\n                const delta = Number(args['delta']);\n                if (Number.isNaN(delta)) {\n                    console.error(`${CommandIDs.changeFontSize}: delta arg must be a number`);\n                    return;\n                }\n                const style = window.getComputedStyle(document.documentElement);\n                const cssSize = parseInt(style.getPropertyValue('--jp-code-font-size'), 10);\n                if (!config.customStyles) {\n                    config.customStyles = {};\n                }\n                const currentSize = ((_a = config['customStyles']['fontSize']) !== null && _a !== void 0 ? _a : extensions.baseConfiguration['customStyles']['fontSize']) ||\n                    cssSize;\n                config.customStyles.fontSize = currentSize + delta;\n                return settingRegistry\n                    .set(id, 'editorConfig', config)\n                    .catch((reason) => {\n                    console.error(`Failed to set ${id}: ${reason.message}`);\n                });\n            },\n            label: args => {\n                const delta = Number(args['delta']);\n                if (Number.isNaN(delta)) {\n                    console.error(`${CommandIDs.changeFontSize}: delta arg must be a number`);\n                }\n                if (delta > 0) {\n                    return args.isMenu\n                        ? trans.__('Increase Text Editor Font Size')\n                        : trans.__('Increase Font Size');\n                }\n                else {\n                    return args.isMenu\n                        ? trans.__('Decrease Text Editor Font Size')\n                        : trans.__('Decrease Font Size');\n                }\n            }\n        });\n        /**\n         * Add the Line Numbers command\n         */\n        commands.addCommand(CommandIDs.lineNumbers, {\n            execute: async () => {\n                var _a;\n                config.lineNumbers = !((_a = config.lineNumbers) !== null && _a !== void 0 ? _a : extensions.baseConfiguration.lineNumbers);\n                try {\n                    return await settingRegistry.set(id, 'editorConfig', config);\n                }\n                catch (reason) {\n                    console.error(`Failed to set ${id}: ${reason.message}`);\n                }\n            },\n            isEnabled,\n            isToggled: () => { var _a; return (_a = config.lineNumbers) !== null && _a !== void 0 ? _a : extensions.baseConfiguration.lineNumbers; },\n            label: trans.__('Show Line Numbers')\n        });\n        commands.addCommand(CommandIDs.currentLineNumbers, {\n            label: trans.__('Show Line Numbers'),\n            caption: trans.__('Show the line numbers for the current file.'),\n            execute: () => {\n                const widget = tracker.currentWidget;\n                if (!widget) {\n                    return;\n                }\n                const lineNumbers = !widget.content.editor.getOption('lineNumbers');\n                widget.content.editor.setOption('lineNumbers', lineNumbers);\n            },\n            isEnabled,\n            isToggled: () => {\n                var _a;\n                const widget = tracker.currentWidget;\n                return ((_a = widget === null || widget === void 0 ? void 0 : widget.content.editor.getOption('lineNumbers')) !== null && _a !== void 0 ? _a : false);\n            }\n        });\n        /**\n         * Add the Word Wrap command\n         */\n        commands.addCommand(CommandIDs.lineWrap, {\n            execute: async (args) => {\n                var _a;\n                config.lineWrap = (_a = args['mode']) !== null && _a !== void 0 ? _a : false;\n                try {\n                    return await settingRegistry.set(id, 'editorConfig', config);\n                }\n                catch (reason) {\n                    console.error(`Failed to set ${id}: ${reason.message}`);\n                }\n            },\n            isEnabled,\n            isToggled: args => {\n                var _a, _b;\n                const lineWrap = (_a = args['mode']) !== null && _a !== void 0 ? _a : false;\n                return (lineWrap ===\n                    ((_b = config.lineWrap) !== null && _b !== void 0 ? _b : extensions.baseConfiguration.lineWrap));\n            },\n            label: trans.__('Word Wrap')\n        });\n        commands.addCommand(CommandIDs.currentLineWrap, {\n            label: trans.__('Wrap Words'),\n            caption: trans.__('Wrap words for the current file.'),\n            execute: () => {\n                const widget = tracker.currentWidget;\n                if (!widget) {\n                    return;\n                }\n                const oldValue = widget.content.editor.getOption('lineWrap');\n                widget.content.editor.setOption('lineWrap', !oldValue);\n            },\n            isEnabled,\n            isToggled: () => {\n                var _a;\n                const widget = tracker.currentWidget;\n                return ((_a = widget === null || widget === void 0 ? void 0 : widget.content.editor.getOption('lineWrap')) !== null && _a !== void 0 ? _a : false);\n            }\n        });\n        /**\n         * Add command for changing tabs size or type in File Editor\n         */\n        commands.addCommand(CommandIDs.changeTabs, {\n            label: args => {\n                var _a;\n                if (args.size) {\n                    // Use a context to differentiate with string set as plural in 3.x\n                    return trans._p('v4', 'Spaces: %1', (_a = args.size) !== null && _a !== void 0 ? _a : '');\n                }\n                else {\n                    return trans.__('Indent with Tab');\n                }\n            },\n            execute: async (args) => {\n                var _a;\n                config.indentUnit =\n                    args['size'] !== undefined\n                        ? ((_a = args['size']) !== null && _a !== void 0 ? _a : '4').toString()\n                        : 'Tab';\n                try {\n                    return await settingRegistry.set(id, 'editorConfig', config);\n                }\n                catch (reason) {\n                    console.error(`Failed to set ${id}: ${reason.message}`);\n                }\n            },\n            isToggled: args => {\n                var _a;\n                const currentIndentUnit = (_a = config.indentUnit) !== null && _a !== void 0 ? _a : extensions.baseConfiguration.indentUnit;\n                return args['size']\n                    ? args['size'] === currentIndentUnit\n                    : 'Tab' == currentIndentUnit;\n            }\n        });\n        /**\n         * Add the Match Brackets command\n         */\n        commands.addCommand(CommandIDs.matchBrackets, {\n            execute: async () => {\n                var _a;\n                config.matchBrackets = !((_a = config.matchBrackets) !== null && _a !== void 0 ? _a : extensions.baseConfiguration.matchBrackets);\n                try {\n                    return await settingRegistry.set(id, 'editorConfig', config);\n                }\n                catch (reason) {\n                    console.error(`Failed to set ${id}: ${reason.message}`);\n                }\n            },\n            label: trans.__('Match Brackets'),\n            isEnabled,\n            isToggled: () => { var _a; return (_a = config.matchBrackets) !== null && _a !== void 0 ? _a : extensions.baseConfiguration.matchBrackets; }\n        });\n        commands.addCommand(CommandIDs.currentMatchBrackets, {\n            label: trans.__('Match Brackets'),\n            caption: trans.__('Change match brackets for the current file.'),\n            execute: () => {\n                const widget = tracker.currentWidget;\n                if (!widget) {\n                    return;\n                }\n                const matchBrackets = !widget.content.editor.getOption('matchBrackets');\n                widget.content.editor.setOption('matchBrackets', matchBrackets);\n            },\n            isEnabled,\n            isToggled: () => {\n                var _a;\n                const widget = tracker.currentWidget;\n                return ((_a = widget === null || widget === void 0 ? void 0 : widget.content.editor.getOption('matchBrackets')) !== null && _a !== void 0 ? _a : false);\n            }\n        });\n        /**\n         * Add the Auto Close Brackets for Text Editor command\n         */\n        commands.addCommand(CommandIDs.autoClosingBrackets, {\n            execute: async (args) => {\n                var _a, _b;\n                config.autoClosingBrackets = !!((_a = args['force']) !== null && _a !== void 0 ? _a : !((_b = config.autoClosingBrackets) !== null && _b !== void 0 ? _b : extensions.baseConfiguration.autoClosingBrackets));\n                try {\n                    return await settingRegistry.set(id, 'editorConfig', config);\n                }\n                catch (reason) {\n                    console.error(`Failed to set ${id}: ${reason.message}`);\n                }\n            },\n            label: trans.__('Auto Close Brackets in Text Editor'),\n            isToggled: () => {\n                var _a;\n                return (_a = config.autoClosingBrackets) !== null && _a !== void 0 ? _a : extensions.baseConfiguration.autoClosingBrackets;\n            }\n        });\n        commands.addCommand(CommandIDs.autoClosingBracketsUniversal, {\n            execute: () => {\n                const anyToggled = commands.isToggled(CommandIDs.autoClosingBrackets) ||\n                    commands.isToggled(autoClosingBracketsNotebook) ||\n                    commands.isToggled(autoClosingBracketsConsole);\n                // if any auto closing brackets options is toggled, toggle both off\n                if (anyToggled) {\n                    void commands.execute(CommandIDs.autoClosingBrackets, {\n                        force: false\n                    });\n                    void commands.execute(autoClosingBracketsNotebook, { force: false });\n                    void commands.execute(autoClosingBracketsConsole, { force: false });\n                }\n                else {\n                    // both are off, turn them on\n                    void commands.execute(CommandIDs.autoClosingBrackets, {\n                        force: true\n                    });\n                    void commands.execute(autoClosingBracketsNotebook, { force: true });\n                    void commands.execute(autoClosingBracketsConsole, { force: true });\n                }\n            },\n            label: trans.__('Auto Close Brackets'),\n            isToggled: () => commands.isToggled(CommandIDs.autoClosingBrackets) ||\n                commands.isToggled(autoClosingBracketsNotebook) ||\n                commands.isToggled(autoClosingBracketsConsole)\n        });\n        /**\n         * Create a menu for the editor.\n         */\n        commands.addCommand(CommandIDs.changeTheme, {\n            label: args => {\n                var _a, _b, _c, _d;\n                return (_d = (_c = (_b = ((_a = args.displayName) !== null && _a !== void 0 ? _a : args.theme)) !== null && _b !== void 0 ? _b : config.theme) !== null && _c !== void 0 ? _c : extensions.baseConfiguration.theme) !== null && _d !== void 0 ? _d : trans.__('Editor Theme');\n            },\n            execute: async (args) => {\n                var _a;\n                config.theme = (_a = args['theme']) !== null && _a !== void 0 ? _a : config.theme;\n                try {\n                    return await settingRegistry.set(id, 'editorConfig', config);\n                }\n                catch (reason) {\n                    console.error(`Failed to set theme - ${reason.message}`);\n                }\n            },\n            isToggled: args => { var _a; return args['theme'] === ((_a = config.theme) !== null && _a !== void 0 ? _a : extensions.baseConfiguration.theme); }\n        });\n        commands.addCommand(CommandIDs.find, {\n            label: trans.__('Find…'),\n            execute: () => {\n                const widget = tracker.currentWidget;\n                if (!widget) {\n                    return;\n                }\n                const editor = widget.content.editor;\n                editor.execCommand(findNext);\n            },\n            isEnabled\n        });\n        commands.addCommand(CommandIDs.goToLine, {\n            label: trans.__('Go to Line…'),\n            execute: args => {\n                const widget = tracker.currentWidget;\n                if (!widget) {\n                    return;\n                }\n                const editor = widget.content.editor;\n                const line = args['line'];\n                const column = args['column'];\n                if (line !== undefined || column !== undefined) {\n                    editor.setCursorPosition({\n                        line: (line !== null && line !== void 0 ? line : 1) - 1,\n                        column: (column !== null && column !== void 0 ? column : 1) - 1\n                    });\n                }\n                else {\n                    editor.execCommand(gotoLine);\n                }\n            },\n            isEnabled\n        });\n        commands.addCommand(CommandIDs.changeLanguage, {\n            label: args => {\n                var _a, _b;\n                return (_b = ((_a = args['displayName']) !== null && _a !== void 0 ? _a : args['name'])) !== null && _b !== void 0 ? _b : trans.__('Change editor language.');\n            },\n            execute: args => {\n                var _a;\n                const name = args['name'];\n                const widget = tracker.currentWidget;\n                if (name && widget) {\n                    const spec = languages.findByName(name);\n                    if (spec) {\n                        if (Array.isArray(spec.mime)) {\n                            widget.content.model.mimeType =\n                                (_a = spec.mime[0]) !== null && _a !== void 0 ? _a : IEditorMimeTypeService.defaultMimeType;\n                        }\n                        else {\n                            widget.content.model.mimeType = spec.mime;\n                        }\n                    }\n                }\n            },\n            isEnabled,\n            isToggled: args => {\n                const widget = tracker.currentWidget;\n                if (!widget) {\n                    return false;\n                }\n                const mime = widget.content.model.mimeType;\n                const spec = languages.findByMIME(mime);\n                const name = spec && spec.name;\n                return args['name'] === name;\n            }\n        });\n        /**\n         * Add the replace selection for text editor command\n         */\n        commands.addCommand(CommandIDs.replaceSelection, {\n            execute: args => {\n                var _a, _b;\n                const text = args['text'] || '';\n                const widget = tracker.currentWidget;\n                if (!widget) {\n                    return;\n                }\n                (_b = (_a = widget.content.editor).replaceSelection) === null || _b === void 0 ? void 0 : _b.call(_a, text);\n            },\n            isEnabled,\n            label: trans.__('Replace Selection in Editor')\n        });\n        /**\n         * Add the Create Console for Editor command\n         */\n        commands.addCommand(CommandIDs.createConsole, {\n            execute: args => {\n                const widget = tracker.currentWidget;\n                if (!widget) {\n                    return;\n                }\n                return getCreateConsoleFunction(commands, languages)(widget, args);\n            },\n            isEnabled,\n            icon: consoleIcon,\n            label: trans.__('Create Console for Editor')\n        });\n        /**\n         * Restart the Console Kernel linked to the current Editor\n         */\n        commands.addCommand(CommandIDs.restartConsole, {\n            execute: async () => {\n                var _a;\n                const current = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n                if (!current || consoleTracker === null) {\n                    return;\n                }\n                const widget = consoleTracker.find(widget => { var _a; return ((_a = widget.sessionContext.session) === null || _a === void 0 ? void 0 : _a.path) === current.context.path; });\n                if (widget) {\n                    return sessionDialogs.restart(widget.sessionContext);\n                }\n            },\n            label: trans.__('Restart Kernel'),\n            isEnabled: () => consoleTracker !== null && isEnabled()\n        });\n        /**\n         * Add the Run Code command\n         */\n        commands.addCommand(CommandIDs.runCode, {\n            execute: () => {\n                var _a;\n                // Run the appropriate code, taking into account a ```fenced``` code block.\n                const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n                if (!widget) {\n                    return;\n                }\n                let code = '';\n                const editor = widget.editor;\n                const path = widget.context.path;\n                const extension = PathExt.extname(path);\n                const selection = editor.getSelection();\n                const { start, end } = selection;\n                let selected = start.column !== end.column || start.line !== end.line;\n                if (selected) {\n                    // Get the selected code from the editor.\n                    const start = editor.getOffsetAt(selection.start);\n                    const end = editor.getOffsetAt(selection.end);\n                    code = editor.model.sharedModel.getSource().substring(start, end);\n                }\n                else if (MarkdownCodeBlocks.isMarkdown(extension)) {\n                    const text = editor.model.sharedModel.getSource();\n                    const blocks = MarkdownCodeBlocks.findMarkdownCodeBlocks(text);\n                    for (const block of blocks) {\n                        if (block.startLine <= start.line && start.line <= block.endLine) {\n                            code = block.code;\n                            selected = true;\n                            break;\n                        }\n                    }\n                }\n                if (!selected) {\n                    // no selection, submit whole line and advance\n                    code = editor.getLine(selection.start.line);\n                    const cursor = editor.getCursorPosition();\n                    if (cursor.line + 1 === editor.lineCount) {\n                        const text = editor.model.sharedModel.getSource();\n                        editor.model.sharedModel.setSource(text + '\\n');\n                    }\n                    editor.setCursorPosition({\n                        line: cursor.line + 1,\n                        column: cursor.column\n                    });\n                }\n                const activate = false;\n                if (code) {\n                    return commands.execute('console:inject', { activate, code, path });\n                }\n                else {\n                    return Promise.resolve(void 0);\n                }\n            },\n            isEnabled,\n            label: trans.__('Run Selected Code')\n        });\n        /**\n         * Add the Run All Code command\n         */\n        commands.addCommand(CommandIDs.runAllCode, {\n            execute: () => {\n                var _a;\n                const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n                if (!widget) {\n                    return;\n                }\n                let code = '';\n                const editor = widget.editor;\n                const text = editor.model.sharedModel.getSource();\n                const path = widget.context.path;\n                const extension = PathExt.extname(path);\n                if (MarkdownCodeBlocks.isMarkdown(extension)) {\n                    // For Markdown files, run only code blocks.\n                    const blocks = MarkdownCodeBlocks.findMarkdownCodeBlocks(text);\n                    for (const block of blocks) {\n                        code += block.code;\n                    }\n                }\n                else {\n                    code = text;\n                }\n                const activate = false;\n                if (code) {\n                    return commands.execute('console:inject', { activate, code, path });\n                }\n                else {\n                    return Promise.resolve(void 0);\n                }\n            },\n            isEnabled,\n            label: trans.__('Run All Code')\n        });\n        /**\n         * Add markdown preview command\n         */\n        commands.addCommand(CommandIDs.markdownPreview, {\n            execute: () => {\n                const widget = tracker.currentWidget;\n                if (!widget) {\n                    return;\n                }\n                const path = widget.context.path;\n                return commands.execute('markdownviewer:open', {\n                    path,\n                    options: {\n                        mode: 'split-right'\n                    }\n                });\n            },\n            isVisible: () => {\n                const widget = tracker.currentWidget;\n                return ((widget && PathExt.extname(widget.context.path) === '.md') || false);\n            },\n            icon: markdownIcon,\n            label: trans.__('Show Markdown Preview')\n        });\n        /**\n         * Add the New File command\n         *\n         * Defaults to Text/.txt if file type data is not specified\n         */\n        commands.addCommand(CommandIDs.createNew, {\n            label: args => {\n                var _a, _b;\n                if (args.isPalette) {\n                    return (_a = args.paletteLabel) !== null && _a !== void 0 ? _a : trans.__('New Text File');\n                }\n                return (_b = args.launcherLabel) !== null && _b !== void 0 ? _b : trans.__('Text File');\n            },\n            caption: args => { var _a; return (_a = args.caption) !== null && _a !== void 0 ? _a : trans.__('Create a new text file'); },\n            icon: args => {\n                var _a;\n                return args.isPalette\n                    ? undefined\n                    : LabIcon.resolve({\n                        icon: (_a = args.iconName) !== null && _a !== void 0 ? _a : textEditorIcon\n                    });\n            },\n            execute: args => {\n                var _a;\n                const cwd = args.cwd || defaultBrowser.model.path;\n                return createNew(commands, cwd, (_a = args.fileExt) !== null && _a !== void 0 ? _a : 'txt');\n            }\n        });\n        /**\n         * Add the New Markdown File command\n         */\n        commands.addCommand(CommandIDs.createNewMarkdown, {\n            label: args => args['isPalette']\n                ? trans.__('New Markdown File')\n                : trans.__('Markdown File'),\n            caption: trans.__('Create a new markdown file'),\n            icon: args => (args['isPalette'] ? undefined : markdownIcon),\n            execute: args => {\n                const cwd = args['cwd'] || defaultBrowser.model.path;\n                return createNew(commands, cwd, 'md');\n            }\n        });\n        /**\n         * Add undo command\n         */\n        commands.addCommand(CommandIDs.undo, {\n            execute: () => {\n                var _a;\n                const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n                if (!widget) {\n                    return;\n                }\n                widget.editor.undo();\n            },\n            isEnabled: () => {\n                var _a;\n                if (!isEnabled()) {\n                    return false;\n                }\n                const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n                if (!widget) {\n                    return false;\n                }\n                return widget.editor.model.sharedModel.canUndo();\n            },\n            icon: undoIcon.bindprops({ stylesheet: 'menuItem' }),\n            label: trans.__('Undo')\n        });\n        /**\n         * Add redo command\n         */\n        commands.addCommand(CommandIDs.redo, {\n            execute: () => {\n                var _a;\n                const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n                if (!widget) {\n                    return;\n                }\n                widget.editor.redo();\n            },\n            isEnabled: () => {\n                var _a;\n                if (!isEnabled()) {\n                    return false;\n                }\n                const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n                if (!widget) {\n                    return false;\n                }\n                return widget.editor.model.sharedModel.canRedo();\n            },\n            icon: redoIcon.bindprops({ stylesheet: 'menuItem' }),\n            label: trans.__('Redo')\n        });\n        /**\n         * Add cut command\n         */\n        commands.addCommand(CommandIDs.cut, {\n            execute: () => {\n                var _a;\n                const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n                if (!widget) {\n                    return;\n                }\n                const editor = widget.editor;\n                const text = getTextSelection(editor);\n                Clipboard.copyToSystem(text);\n                editor.replaceSelection && editor.replaceSelection('');\n            },\n            isEnabled: () => {\n                var _a;\n                if (!isEnabled()) {\n                    return false;\n                }\n                const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n                if (!widget) {\n                    return false;\n                }\n                // Enable command if there is a text selection in the editor\n                return isSelected(widget.editor);\n            },\n            icon: cutIcon.bindprops({ stylesheet: 'menuItem' }),\n            label: trans.__('Cut')\n        });\n        /**\n         * Add copy command\n         */\n        commands.addCommand(CommandIDs.copy, {\n            execute: () => {\n                var _a;\n                const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n                if (!widget) {\n                    return;\n                }\n                const editor = widget.editor;\n                const text = getTextSelection(editor);\n                Clipboard.copyToSystem(text);\n            },\n            isEnabled: () => {\n                var _a;\n                if (!isEnabled()) {\n                    return false;\n                }\n                const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n                if (!widget) {\n                    return false;\n                }\n                // Enable command if there is a text selection in the editor\n                return isSelected(widget.editor);\n            },\n            icon: copyIcon.bindprops({ stylesheet: 'menuItem' }),\n            label: trans.__('Copy')\n        });\n        /**\n         * Add paste command\n         */\n        commands.addCommand(CommandIDs.paste, {\n            execute: async () => {\n                var _a;\n                const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n                if (!widget) {\n                    return;\n                }\n                const editor = widget.editor;\n                // Get data from clipboard\n                const clipboard = window.navigator.clipboard;\n                const clipboardData = await clipboard.readText();\n                if (clipboardData) {\n                    // Paste data to the editor\n                    editor.replaceSelection && editor.replaceSelection(clipboardData);\n                }\n            },\n            isEnabled: () => { var _a; return Boolean(isEnabled() && ((_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content)); },\n            icon: pasteIcon.bindprops({ stylesheet: 'menuItem' }),\n            label: trans.__('Paste')\n        });\n        /**\n         * Add select all command\n         */\n        commands.addCommand(CommandIDs.selectAll, {\n            execute: () => {\n                var _a;\n                const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n                if (!widget) {\n                    return;\n                }\n                const editor = widget.editor;\n                editor.execCommand(selectAll);\n            },\n            isEnabled: () => { var _a; return Boolean(isEnabled() && ((_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content)); },\n            label: trans.__('Select All')\n        });\n        // All commands with isEnabled defined directly or in a semantic commands\n        const commandIds = [\n            CommandIDs.lineNumbers,\n            CommandIDs.currentLineNumbers,\n            CommandIDs.lineWrap,\n            CommandIDs.currentLineWrap,\n            CommandIDs.matchBrackets,\n            CommandIDs.currentMatchBrackets,\n            CommandIDs.find,\n            CommandIDs.goToLine,\n            CommandIDs.changeLanguage,\n            CommandIDs.replaceSelection,\n            CommandIDs.createConsole,\n            CommandIDs.restartConsole,\n            CommandIDs.runCode,\n            CommandIDs.runAllCode,\n            CommandIDs.undo,\n            CommandIDs.redo,\n            CommandIDs.cut,\n            CommandIDs.copy,\n            CommandIDs.paste,\n            CommandIDs.selectAll,\n            CommandIDs.createConsole\n        ];\n        const notify = () => {\n            commandIds.forEach(id => commands.notifyCommandChanged(id));\n        };\n        tracker.currentChanged.connect(notify);\n        (_a = shell.currentChanged) === null || _a === void 0 ? void 0 : _a.connect(notify);\n    }\n    Commands.addCommands = addCommands;\n    function addCompleterCommands(commands, editorTracker, manager, translator) {\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        commands.addCommand(CommandIDs.invokeCompleter, {\n            label: trans.__('Display the completion helper.'),\n            execute: () => {\n                const id = editorTracker.currentWidget && editorTracker.currentWidget.id;\n                if (id) {\n                    return manager.invoke(id);\n                }\n            }\n        });\n        commands.addCommand(CommandIDs.selectCompleter, {\n            label: trans.__('Select the completion suggestion.'),\n            execute: () => {\n                const id = editorTracker.currentWidget && editorTracker.currentWidget.id;\n                if (id) {\n                    return manager.select(id);\n                }\n            }\n        });\n        commands.addKeyBinding({\n            command: CommandIDs.selectCompleter,\n            keys: ['Enter'],\n            selector: '.jp-FileEditor .jp-mod-completer-active'\n        });\n    }\n    Commands.addCompleterCommands = addCompleterCommands;\n    /**\n     * Helper function to check if there is a text selection in the editor\n     */\n    function isSelected(editor) {\n        const selectionObj = editor.getSelection();\n        const { start, end } = selectionObj;\n        const selected = start.column !== end.column || start.line !== end.line;\n        return selected;\n    }\n    /**\n     * Helper function to get text selection from the editor\n     */\n    function getTextSelection(editor) {\n        const selectionObj = editor.getSelection();\n        const start = editor.getOffsetAt(selectionObj.start);\n        const end = editor.getOffsetAt(selectionObj.end);\n        const text = editor.model.sharedModel.getSource().substring(start, end);\n        return text;\n    }\n    /**\n     * Function to create a new untitled text file, given the current working directory.\n     */\n    async function createNew(commands, cwd, ext = 'txt') {\n        const model = await commands.execute('docmanager:new-untitled', {\n            path: cwd,\n            type: 'file',\n            ext\n        });\n        if (model != undefined) {\n            const widget = (await commands.execute('docmanager:open', {\n                path: model.path,\n                factory: FACTORY\n            }));\n            widget.isUntitled = true;\n            return widget;\n        }\n    }\n    /**\n     * Wrapper function for adding the default launcher items for File Editor\n     */\n    function addLauncherItems(launcher, trans) {\n        addCreateNewToLauncher(launcher, trans);\n        addCreateNewMarkdownToLauncher(launcher, trans);\n    }\n    Commands.addLauncherItems = addLauncherItems;\n    /**\n     * Add Create New Text File to the Launcher\n     */\n    function addCreateNewToLauncher(launcher, trans) {\n        launcher.add({\n            command: CommandIDs.createNew,\n            category: trans.__('Other'),\n            rank: 1\n        });\n    }\n    Commands.addCreateNewToLauncher = addCreateNewToLauncher;\n    /**\n     * Add Create New Markdown to the Launcher\n     */\n    function addCreateNewMarkdownToLauncher(launcher, trans) {\n        launcher.add({\n            command: CommandIDs.createNewMarkdown,\n            category: trans.__('Other'),\n            rank: 2\n        });\n    }\n    Commands.addCreateNewMarkdownToLauncher = addCreateNewMarkdownToLauncher;\n    /**\n     * Add ___ File items to the Launcher for common file types associated with available kernels\n     */\n    function addKernelLanguageLauncherItems(launcher, trans, availableKernelFileTypes) {\n        for (let ext of availableKernelFileTypes) {\n            launcher.add({\n                command: CommandIDs.createNew,\n                category: trans.__('Other'),\n                rank: 3,\n                args: ext\n            });\n        }\n    }\n    Commands.addKernelLanguageLauncherItems = addKernelLanguageLauncherItems;\n    /**\n     * Wrapper function for adding the default items to the File Editor palette\n     */\n    function addPaletteItems(palette, trans) {\n        addChangeTabsCommandsToPalette(palette, trans);\n        addCreateNewCommandToPalette(palette, trans);\n        addCreateNewMarkdownCommandToPalette(palette, trans);\n        addChangeFontSizeCommandsToPalette(palette, trans);\n    }\n    Commands.addPaletteItems = addPaletteItems;\n    /**\n     * Add commands to change the tab indentation to the File Editor palette\n     */\n    function addChangeTabsCommandsToPalette(palette, trans) {\n        const paletteCategory = trans.__('Text Editor');\n        const args = {\n            size: 4\n        };\n        const command = CommandIDs.changeTabs;\n        palette.addItem({ command, args, category: paletteCategory });\n        for (const size of [1, 2, 4, 8]) {\n            const args = {\n                size\n            };\n            palette.addItem({ command, args, category: paletteCategory });\n        }\n    }\n    Commands.addChangeTabsCommandsToPalette = addChangeTabsCommandsToPalette;\n    /**\n     * Add a Create New File command to the File Editor palette\n     */\n    function addCreateNewCommandToPalette(palette, trans) {\n        const paletteCategory = trans.__('Text Editor');\n        palette.addItem({\n            command: CommandIDs.createNew,\n            args: { isPalette: true },\n            category: paletteCategory\n        });\n    }\n    Commands.addCreateNewCommandToPalette = addCreateNewCommandToPalette;\n    /**\n     * Add a Create New Markdown command to the File Editor palette\n     */\n    function addCreateNewMarkdownCommandToPalette(palette, trans) {\n        const paletteCategory = trans.__('Text Editor');\n        palette.addItem({\n            command: CommandIDs.createNewMarkdown,\n            args: { isPalette: true },\n            category: paletteCategory\n        });\n    }\n    Commands.addCreateNewMarkdownCommandToPalette = addCreateNewMarkdownCommandToPalette;\n    /**\n     * Add commands to change the font size to the File Editor palette\n     */\n    function addChangeFontSizeCommandsToPalette(palette, trans) {\n        const paletteCategory = trans.__('Text Editor');\n        const command = CommandIDs.changeFontSize;\n        let args = { delta: 1 };\n        palette.addItem({ command, args, category: paletteCategory });\n        args = { delta: -1 };\n        palette.addItem({ command, args, category: paletteCategory });\n    }\n    Commands.addChangeFontSizeCommandsToPalette = addChangeFontSizeCommandsToPalette;\n    /**\n     * Add New ___ File commands to the File Editor palette for common file types associated with available kernels\n     */\n    function addKernelLanguagePaletteItems(palette, trans, availableKernelFileTypes) {\n        const paletteCategory = trans.__('Text Editor');\n        for (let ext of availableKernelFileTypes) {\n            palette.addItem({\n                command: CommandIDs.createNew,\n                args: { ...ext, isPalette: true },\n                category: paletteCategory\n            });\n        }\n    }\n    Commands.addKernelLanguagePaletteItems = addKernelLanguagePaletteItems;\n    /**\n     * Wrapper function for adding the default menu items for File Editor\n     */\n    function addMenuItems(menu, tracker, consoleTracker, isEnabled) {\n        // Add undo/redo hooks to the edit menu.\n        menu.editMenu.undoers.redo.add({\n            id: CommandIDs.redo,\n            isEnabled\n        });\n        menu.editMenu.undoers.undo.add({\n            id: CommandIDs.undo,\n            isEnabled\n        });\n        // Add editor view options.\n        menu.viewMenu.editorViewers.toggleLineNumbers.add({\n            id: CommandIDs.currentLineNumbers,\n            isEnabled\n        });\n        menu.viewMenu.editorViewers.toggleMatchBrackets.add({\n            id: CommandIDs.currentMatchBrackets,\n            isEnabled\n        });\n        menu.viewMenu.editorViewers.toggleWordWrap.add({\n            id: CommandIDs.currentLineWrap,\n            isEnabled\n        });\n        // Add a console creator the the file menu.\n        menu.fileMenu.consoleCreators.add({\n            id: CommandIDs.createConsole,\n            isEnabled\n        });\n        // Add a code runner to the run menu.\n        if (consoleTracker) {\n            addCodeRunnersToRunMenu(menu, consoleTracker, isEnabled);\n        }\n    }\n    Commands.addMenuItems = addMenuItems;\n    /**\n     * Add Create New ___ File commands to the File menu for common file types associated with available kernels\n     */\n    function addKernelLanguageMenuItems(menu, availableKernelFileTypes) {\n        for (let ext of availableKernelFileTypes) {\n            menu.fileMenu.newMenu.addItem({\n                command: CommandIDs.createNew,\n                args: ext,\n                rank: 31\n            });\n        }\n    }\n    Commands.addKernelLanguageMenuItems = addKernelLanguageMenuItems;\n    /**\n     * Add a File Editor code runner to the Run menu\n     */\n    function addCodeRunnersToRunMenu(menu, consoleTracker, isEnabled) {\n        const isEnabled_ = (current) => isEnabled() &&\n            current.context &&\n            !!consoleTracker.find(widget => { var _a; return ((_a = widget.sessionContext.session) === null || _a === void 0 ? void 0 : _a.path) === current.context.path; });\n        menu.runMenu.codeRunners.restart.add({\n            id: CommandIDs.restartConsole,\n            isEnabled: isEnabled_\n        });\n        menu.runMenu.codeRunners.run.add({\n            id: CommandIDs.runCode,\n            isEnabled: isEnabled_\n        });\n        menu.runMenu.codeRunners.runAll.add({\n            id: CommandIDs.runAllCode,\n            isEnabled: isEnabled_\n        });\n    }\n    Commands.addCodeRunnersToRunMenu = addCodeRunnersToRunMenu;\n    function addOpenCodeViewerCommand(app, editorServices, tracker, trans) {\n        const openCodeViewer = async (args) => {\n            var _a;\n            const func = editorServices.factoryService.newDocumentEditor;\n            const factory = options => {\n                return func(options);\n            };\n            // Derive mimetype from extension\n            let mimetype = args.mimeType;\n            if (!mimetype && args.extension) {\n                mimetype = editorServices.mimeTypeService.getMimeTypeByFilePath(`temp.${args.extension.replace(/\\\\.$/, '')}`);\n            }\n            const widget = CodeViewerWidget.createCodeViewer({\n                factory,\n                content: args.content,\n                mimeType: mimetype\n            });\n            widget.title.label = args.label || trans.__('Code Viewer');\n            widget.title.caption = widget.title.label;\n            // Get the fileType based on the mimetype to determine the icon\n            const fileType = find(app.docRegistry.fileTypes(), fileType => mimetype ? fileType.mimeTypes.includes(mimetype) : false);\n            widget.title.icon = (_a = fileType === null || fileType === void 0 ? void 0 : fileType.icon) !== null && _a !== void 0 ? _a : textEditorIcon;\n            if (args.widgetId) {\n                widget.id = args.widgetId;\n            }\n            const main = new MainAreaWidget({ content: widget });\n            await tracker.add(main);\n            app.shell.add(main, 'main');\n            return widget;\n        };\n        app.commands.addCommand(CommandIDs.openCodeViewer, {\n            label: trans.__('Open Code Viewer'),\n            execute: (args) => {\n                return openCodeViewer(args);\n            }\n        });\n    }\n    Commands.addOpenCodeViewerCommand = addOpenCodeViewerCommand;\n})(Commands || (Commands = {}));\n//# sourceMappingURL=commands.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { ILabShell } from '@jupyterlab/application';\nimport { IEditorLanguageRegistry } from '@jupyterlab/codemirror';\nimport { EditorSyntaxStatus, IEditorTracker } from '@jupyterlab/fileeditor';\nimport { IStatusBar } from '@jupyterlab/statusbar';\nimport { ITranslator } from '@jupyterlab/translation';\n/**\n * The JupyterLab plugin for the EditorSyntax status item.\n */\nexport const editorSyntaxStatus = {\n    id: '@jupyterlab/fileeditor-extension:editor-syntax-status',\n    description: 'Adds a file editor syntax status widget.',\n    autoStart: true,\n    requires: [IEditorTracker, IEditorLanguageRegistry, ILabShell, ITranslator],\n    optional: [IStatusBar],\n    activate: (app, tracker, languages, labShell, translator, statusBar) => {\n        if (!statusBar) {\n            // Automatically disable if statusbar missing\n            return;\n        }\n        const item = new EditorSyntaxStatus({\n            commands: app.commands,\n            languages,\n            translator\n        });\n        labShell.currentChanged.connect(() => {\n            const current = labShell.currentWidget;\n            if (current && tracker.has(current) && item.model) {\n                item.model.editor = current.content.editor;\n            }\n        });\n        statusBar.registerStatusItem(editorSyntaxStatus.id, {\n            item,\n            align: 'left',\n            rank: 0,\n            isActive: () => !!labShell.currentWidget &&\n                !!tracker.currentWidget &&\n                labShell.currentWidget === tracker.currentWidget\n        });\n    }\n};\n//# sourceMappingURL=syntaxstatus.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module fileeditor-extension\n */\nimport { ILayoutRestorer } from '@jupyterlab/application';\nimport { createToolbarFactory, ICommandPalette, ISanitizer, ISessionContextDialogs, IToolbarWidgetRegistry, Sanitizer, SessionContextDialogs, WidgetTracker } from '@jupyterlab/apputils';\nimport { IEditorServices, IPositionModel } from '@jupyterlab/codeeditor';\nimport { IEditorExtensionRegistry, IEditorLanguageRegistry, IEditorThemeRegistry } from '@jupyterlab/codemirror';\nimport { ICompletionProviderManager } from '@jupyterlab/completer';\nimport { IConsoleTracker } from '@jupyterlab/console';\nimport { ISearchProviderRegistry } from '@jupyterlab/documentsearch';\nimport { IDefaultFileBrowser } from '@jupyterlab/filebrowser';\nimport { FileEditorAdapter, FileEditorFactory, FileEditorSearchProvider, IEditorTracker, IEditorWidgetFactory, LaTeXTableOfContentsFactory, MarkdownTableOfContentsFactory, PythonTableOfContentsFactory, TabSpaceStatus } from '@jupyterlab/fileeditor';\nimport { ILauncher } from '@jupyterlab/launcher';\nimport { ILSPCodeExtractorsManager, ILSPDocumentConnectionManager, ILSPFeatureManager, IWidgetLSPAdapterTracker } from '@jupyterlab/lsp';\nimport { IMainMenu } from '@jupyterlab/mainmenu';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { IStatusBar } from '@jupyterlab/statusbar';\nimport { ITableOfContentsRegistry } from '@jupyterlab/toc';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { IFormRendererRegistry, MenuSvg } from '@jupyterlab/ui-components';\nimport { find } from '@lumino/algorithm';\nimport { CommandIDs, Commands, FACTORY } from './commands';\nimport { editorSyntaxStatus } from './syntaxstatus';\nexport { Commands } from './commands';\n/**\n * The editor tracker extension.\n */\nconst plugin = {\n    activate,\n    id: '@jupyterlab/fileeditor-extension:plugin',\n    description: 'Provides the file editor widget tracker.',\n    requires: [\n        IEditorWidgetFactory,\n        IEditorServices,\n        IEditorExtensionRegistry,\n        IEditorLanguageRegistry,\n        IEditorThemeRegistry,\n        IDefaultFileBrowser,\n        ISettingRegistry\n    ],\n    optional: [\n        IConsoleTracker,\n        ICommandPalette,\n        ILauncher,\n        IMainMenu,\n        ILayoutRestorer,\n        ISessionContextDialogs,\n        ITableOfContentsRegistry,\n        ITranslator,\n        IFormRendererRegistry\n    ],\n    provides: IEditorTracker,\n    autoStart: true\n};\n/**\n * The widget factory extension.\n */\nconst widgetFactory = {\n    id: '@jupyterlab/fileeditor-extension:widget-factory',\n    description: 'Provides the factory for creating file editors.',\n    autoStart: true,\n    requires: [IEditorServices, ISettingRegistry],\n    optional: [IToolbarWidgetRegistry, ITranslator],\n    provides: IEditorWidgetFactory,\n    activate: (app, editorServices, settingRegistry, toolbarRegistry, translator_) => {\n        const id = plugin.id;\n        const translator = translator_ !== null && translator_ !== void 0 ? translator_ : nullTranslator;\n        const trans = translator.load('jupyterlab');\n        let toolbarFactory;\n        if (toolbarRegistry) {\n            toolbarFactory = createToolbarFactory(toolbarRegistry, settingRegistry, FACTORY, id, translator);\n        }\n        const factory = new FileEditorFactory({\n            editorServices,\n            factoryOptions: {\n                name: FACTORY,\n                label: trans.__('Editor'),\n                fileTypes: ['markdown', '*'], // Explicitly add the markdown fileType so\n                defaultFor: ['markdown', '*'], // it outranks the defaultRendered viewer.\n                toolbarFactory,\n                translator\n            }\n        });\n        app.docRegistry.addWidgetFactory(factory);\n        return factory;\n    }\n};\n/**\n * A plugin that provides a status item allowing the user to\n * switch tabs vs spaces and tab widths for text editors.\n */\nexport const tabSpaceStatus = {\n    id: '@jupyterlab/fileeditor-extension:tab-space-status',\n    description: 'Adds a file editor indentation status widget.',\n    autoStart: true,\n    requires: [\n        IEditorTracker,\n        IEditorExtensionRegistry,\n        ISettingRegistry,\n        ITranslator\n    ],\n    optional: [IStatusBar],\n    activate: (app, editorTracker, extensions, settingRegistry, translator, statusBar) => {\n        const trans = translator.load('jupyterlab');\n        if (!statusBar) {\n            // Automatically disable if statusbar missing\n            return;\n        }\n        // Create a menu for switching tabs vs spaces.\n        const menu = new MenuSvg({ commands: app.commands });\n        const command = 'fileeditor:change-tabs';\n        const { shell } = app;\n        const args = {\n            name: trans.__('Indent with Tab')\n        };\n        menu.addItem({ command, args });\n        for (const size of ['1', '2', '4', '8']) {\n            const args = {\n                size,\n                // Use a context to differentiate with string set as plural in 3.x\n                name: trans._p('v4', 'Spaces: %1', size)\n            };\n            menu.addItem({ command, args });\n        }\n        // Create the status item.\n        const item = new TabSpaceStatus({ menu, translator });\n        // Keep a reference to the code editor config from the settings system.\n        const updateIndentUnit = (settings) => {\n            var _a, _b, _c;\n            item.model.indentUnit =\n                (_c = (_b = (_a = settings.get('editorConfig').composite) === null || _a === void 0 ? void 0 : _a.indentUnit) !== null && _b !== void 0 ? _b : extensions.baseConfiguration.indentUnit) !== null && _c !== void 0 ? _c : null;\n        };\n        void Promise.all([\n            settingRegistry.load('@jupyterlab/fileeditor-extension:plugin'),\n            app.restored\n        ]).then(([settings]) => {\n            updateIndentUnit(settings);\n            settings.changed.connect(updateIndentUnit);\n        });\n        // Add the status item.\n        statusBar.registerStatusItem('@jupyterlab/fileeditor-extension:tab-space-status', {\n            item,\n            align: 'right',\n            rank: 1,\n            isActive: () => {\n                return (!!shell.currentWidget && editorTracker.has(shell.currentWidget));\n            }\n        });\n    }\n};\n/**\n * Cursor position.\n */\nconst lineColStatus = {\n    id: '@jupyterlab/fileeditor-extension:cursor-position',\n    description: 'Adds a file editor cursor position status widget.',\n    activate: (app, tracker, positionModel) => {\n        positionModel.addEditorProvider((widget) => Promise.resolve(widget && tracker.has(widget)\n            ? widget.content.editor\n            : null));\n    },\n    requires: [IEditorTracker, IPositionModel],\n    autoStart: true\n};\nconst completerPlugin = {\n    id: '@jupyterlab/fileeditor-extension:completer',\n    description: 'Adds the completer capability to the file editor.',\n    requires: [IEditorTracker],\n    optional: [ICompletionProviderManager, ITranslator, ISanitizer],\n    activate: activateFileEditorCompleterService,\n    autoStart: true\n};\n/**\n * A plugin to search file editors\n */\nconst searchProvider = {\n    id: '@jupyterlab/fileeditor-extension:search',\n    description: 'Adds search capability to the file editor.',\n    requires: [ISearchProviderRegistry],\n    autoStart: true,\n    activate: (app, registry) => {\n        registry.add('jp-fileeditorSearchProvider', FileEditorSearchProvider);\n    }\n};\nconst languageServerPlugin = {\n    id: '@jupyterlab/fileeditor-extension:language-server',\n    description: 'Adds Language Server capability to the file editor.',\n    requires: [\n        IEditorTracker,\n        ILSPDocumentConnectionManager,\n        ILSPFeatureManager,\n        ILSPCodeExtractorsManager,\n        IWidgetLSPAdapterTracker\n    ],\n    activate: activateFileEditorLanguageServer,\n    autoStart: true\n};\n/**\n * Export the plugins as default.\n */\nconst plugins = [\n    widgetFactory,\n    plugin,\n    lineColStatus,\n    completerPlugin,\n    languageServerPlugin,\n    searchProvider,\n    editorSyntaxStatus,\n    tabSpaceStatus\n];\nexport default plugins;\n/**\n * Activate the editor tracker plugin.\n */\nfunction activate(app, factory, editorServices, extensions, languages, themes, fileBrowser, settingRegistry, consoleTracker, palette, launcher, menu, restorer, sessionDialogs_, tocRegistry, translator_, formRegistry) {\n    const id = plugin.id;\n    const translator = translator_ !== null && translator_ !== void 0 ? translator_ : nullTranslator;\n    const sessionDialogs = sessionDialogs_ !== null && sessionDialogs_ !== void 0 ? sessionDialogs_ : new SessionContextDialogs({ translator });\n    const trans = translator.load('jupyterlab');\n    const namespace = 'editor';\n    const { commands, restored, shell } = app;\n    const tracker = new WidgetTracker({\n        namespace\n    });\n    const isEnabled = () => tracker.currentWidget !== null &&\n        tracker.currentWidget === shell.currentWidget;\n    const commonLanguageFileTypeData = new Map([\n        [\n            'python',\n            [\n                {\n                    fileExt: 'py',\n                    iconName: 'ui-components:python',\n                    launcherLabel: trans.__('Python File'),\n                    paletteLabel: trans.__('New Python File'),\n                    caption: trans.__('Create a new Python file')\n                }\n            ]\n        ],\n        [\n            'julia',\n            [\n                {\n                    fileExt: 'jl',\n                    iconName: 'ui-components:julia',\n                    launcherLabel: trans.__('Julia File'),\n                    paletteLabel: trans.__('New Julia File'),\n                    caption: trans.__('Create a new Julia file')\n                }\n            ]\n        ],\n        [\n            'R',\n            [\n                {\n                    fileExt: 'r',\n                    iconName: 'ui-components:r-kernel',\n                    launcherLabel: trans.__('R File'),\n                    paletteLabel: trans.__('New R File'),\n                    caption: trans.__('Create a new R file')\n                }\n            ]\n        ]\n    ]);\n    // Use available kernels to determine which common file types should have 'Create New' options in the Launcher, File Editor palette, and File menu\n    const getAvailableKernelFileTypes = async () => {\n        var _a, _b;\n        const specsManager = app.serviceManager.kernelspecs;\n        await specsManager.ready;\n        let fileTypes = new Set();\n        const specs = (_b = (_a = specsManager.specs) === null || _a === void 0 ? void 0 : _a.kernelspecs) !== null && _b !== void 0 ? _b : {};\n        Object.keys(specs).forEach(spec => {\n            const specModel = specs[spec];\n            if (specModel) {\n                const exts = commonLanguageFileTypeData.get(specModel.language);\n                exts === null || exts === void 0 ? void 0 : exts.forEach(ext => fileTypes.add(ext));\n            }\n        });\n        return fileTypes;\n    };\n    // Handle state restoration.\n    if (restorer) {\n        void restorer.restore(tracker, {\n            command: 'docmanager:open',\n            args: widget => ({ path: widget.context.path, factory: FACTORY }),\n            name: widget => widget.context.path\n        });\n    }\n    // Add a console creator to the File menu\n    // Fetch the initial state of the settings.\n    Promise.all([settingRegistry.load(id), restored])\n        .then(([settings]) => {\n        var _a, _b, _c;\n        // As the menu are defined in the settings we must ensure they are loaded\n        // before updating dynamically the submenu\n        if (menu) {\n            const languageMenu = (_a = menu.viewMenu.items.find(item => {\n                var _a;\n                return item.type === 'submenu' &&\n                    ((_a = item.submenu) === null || _a === void 0 ? void 0 : _a.id) === 'jp-mainmenu-view-codemirror-language';\n            })) === null || _a === void 0 ? void 0 : _a.submenu;\n            if (languageMenu) {\n                languages\n                    .getLanguages()\n                    .sort((a, b) => {\n                    const aName = a.name;\n                    const bName = b.name;\n                    return aName.localeCompare(bName);\n                })\n                    .forEach(spec => {\n                    // Avoid mode name with a curse word.\n                    if (spec.name.toLowerCase().indexOf('brainf') === 0) {\n                        return;\n                    }\n                    languageMenu.addItem({\n                        command: CommandIDs.changeLanguage,\n                        args: { ...spec } // TODO: Casting to `any` until lumino typings are fixed\n                    });\n                });\n            }\n            const themeMenu = (_b = menu.settingsMenu.items.find(item => {\n                var _a;\n                return item.type === 'submenu' &&\n                    ((_a = item.submenu) === null || _a === void 0 ? void 0 : _a.id) === 'jp-mainmenu-settings-codemirror-theme';\n            })) === null || _b === void 0 ? void 0 : _b.submenu;\n            if (themeMenu) {\n                for (const theme of themes.themes) {\n                    themeMenu.addItem({\n                        command: CommandIDs.changeTheme,\n                        args: {\n                            theme: theme.name,\n                            displayName: (_c = theme.displayName) !== null && _c !== void 0 ? _c : theme.name\n                        }\n                    });\n                }\n            }\n            // Add go to line capabilities to the edit menu.\n            menu.editMenu.goToLiners.add({\n                id: CommandIDs.goToLine,\n                isEnabled: (w) => tracker.currentWidget !== null && tracker.has(w)\n            });\n        }\n        Commands.updateSettings(settings, commands);\n        Commands.updateTracker(tracker);\n        settings.changed.connect(() => {\n            Commands.updateSettings(settings, commands);\n            Commands.updateTracker(tracker);\n        });\n    })\n        .catch((reason) => {\n        console.error(reason.message);\n        Commands.updateTracker(tracker);\n    });\n    if (formRegistry) {\n        const CMRenderer = formRegistry.getRenderer('@jupyterlab/codemirror-extension:plugin.defaultConfig');\n        if (CMRenderer) {\n            formRegistry.addRenderer('@jupyterlab/fileeditor-extension:plugin.editorConfig', CMRenderer);\n        }\n    }\n    factory.widgetCreated.connect((sender, widget) => {\n        // Notify the widget tracker if restore data needs to update.\n        widget.context.pathChanged.connect(() => {\n            void tracker.save(widget);\n        });\n        void tracker.add(widget);\n        Commands.updateWidget(widget.content);\n    });\n    // Handle the settings of new widgets.\n    tracker.widgetAdded.connect((sender, widget) => {\n        Commands.updateWidget(widget.content);\n    });\n    Commands.addCommands(app.commands, settingRegistry, trans, id, isEnabled, tracker, fileBrowser, extensions, languages, consoleTracker, sessionDialogs, app.shell);\n    const codeViewerTracker = new WidgetTracker({\n        namespace: 'codeviewer'\n    });\n    // Handle state restoration for code viewers\n    if (restorer) {\n        void restorer.restore(codeViewerTracker, {\n            command: CommandIDs.openCodeViewer,\n            args: widget => ({\n                content: widget.content.content,\n                label: widget.content.title.label,\n                mimeType: widget.content.mimeType,\n                widgetId: widget.content.id\n            }),\n            name: widget => widget.content.id\n        });\n    }\n    Commands.addOpenCodeViewerCommand(app, editorServices, codeViewerTracker, trans);\n    // Add a launcher item if the launcher is available.\n    if (launcher) {\n        Commands.addLauncherItems(launcher, trans);\n    }\n    if (palette) {\n        Commands.addPaletteItems(palette, trans);\n    }\n    if (menu) {\n        Commands.addMenuItems(menu, tracker, consoleTracker, isEnabled);\n    }\n    getAvailableKernelFileTypes()\n        .then(availableKernelFileTypes => {\n        if (launcher) {\n            Commands.addKernelLanguageLauncherItems(launcher, trans, availableKernelFileTypes);\n        }\n        if (palette) {\n            Commands.addKernelLanguagePaletteItems(palette, trans, availableKernelFileTypes);\n        }\n        if (menu) {\n            Commands.addKernelLanguageMenuItems(menu, availableKernelFileTypes);\n        }\n    })\n        .catch((reason) => {\n        console.error(reason.message);\n    });\n    if (tocRegistry) {\n        tocRegistry.add(new LaTeXTableOfContentsFactory(tracker));\n        tocRegistry.add(new MarkdownTableOfContentsFactory(tracker));\n        tocRegistry.add(new PythonTableOfContentsFactory(tracker));\n    }\n    return tracker;\n}\n/**\n * Activate the completer service for file editor.\n */\nfunction activateFileEditorCompleterService(app, editorTracker, manager, translator, appSanitizer) {\n    if (!manager) {\n        return;\n    }\n    Commands.addCompleterCommands(app.commands, editorTracker, manager, translator);\n    const sessionManager = app.serviceManager.sessions;\n    const sanitizer = appSanitizer !== null && appSanitizer !== void 0 ? appSanitizer : new Sanitizer();\n    const _activeSessions = new Map();\n    const updateCompleter = async (_, widget) => {\n        const completerContext = {\n            editor: widget.content.editor,\n            widget\n        };\n        await manager.updateCompleter(completerContext);\n        const onRunningChanged = (_, models) => {\n            const oldSession = _activeSessions.get(widget.id);\n            // Search for a matching path.\n            const model = find(models, m => m.path === widget.context.path);\n            if (model) {\n                // If there is a matching path, but it is the same\n                // session as we previously had, do nothing.\n                if (oldSession && oldSession.id === model.id) {\n                    return;\n                }\n                // Otherwise, dispose of the old session and reset to\n                // a new CompletionConnector.\n                if (oldSession) {\n                    _activeSessions.delete(widget.id);\n                    oldSession.dispose();\n                }\n                const session = sessionManager.connectTo({ model });\n                const newCompleterContext = {\n                    editor: widget.content.editor,\n                    widget,\n                    session,\n                    sanitizer\n                };\n                manager.updateCompleter(newCompleterContext).catch(console.error);\n                _activeSessions.set(widget.id, session);\n            }\n            else {\n                // If we didn't find a match, make sure\n                // the connector is the contextConnector and\n                // dispose of any previous connection.\n                if (oldSession) {\n                    _activeSessions.delete(widget.id);\n                    oldSession.dispose();\n                }\n            }\n        };\n        onRunningChanged(sessionManager, Array.from(sessionManager.running()));\n        sessionManager.runningChanged.connect(onRunningChanged);\n        widget.disposed.connect(() => {\n            sessionManager.runningChanged.disconnect(onRunningChanged);\n            const session = _activeSessions.get(widget.id);\n            if (session) {\n                _activeSessions.delete(widget.id);\n                session.dispose();\n            }\n        });\n    };\n    editorTracker.widgetAdded.connect(updateCompleter);\n    manager.activeProvidersChanged.connect(() => {\n        editorTracker.forEach(editorWidget => {\n            updateCompleter(editorTracker, editorWidget).catch(console.error);\n        });\n    });\n}\nfunction activateFileEditorLanguageServer(app, editors, connectionManager, featureManager, extractorManager, adapterTracker) {\n    editors.widgetAdded.connect(async (_, editor) => {\n        const adapter = new FileEditorAdapter(editor, {\n            connectionManager,\n            featureManager,\n            foreignCodeExtractorsManager: extractorManager,\n            docRegistry: app.docRegistry\n        });\n        adapterTracker.add(adapter);\n    });\n}\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/statusbar/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/documentsearch/style/index.js';\nimport '@jupyterlab/codemirror/style/index.js';\nimport '@jupyterlab/completer/style/index.js';\nimport '@jupyterlab/filebrowser/style/index.js';\nimport '@jupyterlab/toc/style/index.js';\nimport '@jupyterlab/console/style/index.js';\nimport '@jupyterlab/lsp/style/index.js';\nimport '@jupyterlab/fileeditor/style/index.js';\nimport '@jupyterlab/launcher/style/index.js';\nimport '@jupyterlab/mainmenu/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { IEditorMimeTypeService } from '@jupyterlab/codeeditor';\nimport { VirtualDocument, WidgetLSPAdapter } from '@jupyterlab/lsp';\nimport { PromiseDelegate } from '@lumino/coreutils';\nexport class FileEditorAdapter extends WidgetLSPAdapter {\n    constructor(editorWidget, options) {\n        const { docRegistry, ...others } = options;\n        super(editorWidget, others);\n        this._readyDelegate = new PromiseDelegate();\n        this.editor = editorWidget.content;\n        this._docRegistry = docRegistry;\n        // Ensure editor uniqueness\n        this._virtualEditor = Object.freeze({\n            getEditor: () => this.editor.editor,\n            ready: () => Promise.resolve(this.editor.editor),\n            reveal: () => Promise.resolve(this.editor.editor)\n        });\n        Promise.all([this.editor.context.ready, this.connectionManager.ready])\n            .then(async () => {\n            await this.initOnceReady();\n            this._readyDelegate.resolve();\n            this._editorAdded.emit({\n                editor: this._virtualEditor\n            });\n        })\n            .catch(console.error);\n    }\n    /**\n     * Promise that resolves once the adapter is initialized\n     */\n    get ready() {\n        return this._readyDelegate.promise;\n    }\n    /**\n     * Get current path of the document.\n     */\n    get documentPath() {\n        return this.widget.context.path;\n    }\n    /**\n     * Get the mime type of the document.\n     */\n    get mimeType() {\n        var _a;\n        const mimeTypeFromModel = this.editor.model.mimeType;\n        const codeMirrorMimeType = Array.isArray(mimeTypeFromModel)\n            ? (_a = mimeTypeFromModel[0]) !== null && _a !== void 0 ? _a : IEditorMimeTypeService.defaultMimeType\n            : mimeTypeFromModel;\n        const contentsModel = this.editor.context.contentsModel;\n        // when MIME type is not known it defaults to 'text/plain',\n        // so if it is different we can accept it as it is\n        if (codeMirrorMimeType != IEditorMimeTypeService.defaultMimeType) {\n            return codeMirrorMimeType;\n        }\n        else if (contentsModel) {\n            // a script that does not have a MIME type known by the editor\n            // (no syntax highlight mode), can still be known by the document\n            // registry (and this is arguably easier to extend).\n            let fileType = this._docRegistry.getFileTypeForModel(contentsModel);\n            return fileType.mimeTypes[0];\n        }\n        else {\n            // \"text/plain\" this is\n            return codeMirrorMimeType;\n        }\n    }\n    /**\n     * Get the file extension of the document.\n     */\n    get languageFileExtension() {\n        let parts = this.documentPath.split('.');\n        return parts[parts.length - 1];\n    }\n    /**\n     * Get the CM editor\n     */\n    get ceEditor() {\n        return this.editor.editor;\n    }\n    /**\n     * Get the activated CM editor.\n     */\n    get activeEditor() {\n        return this._virtualEditor;\n    }\n    /**\n     * Get the inner HTMLElement of the document widget.\n     */\n    get wrapperElement() {\n        return this.widget.node;\n    }\n    /**\n     * Get current path of the document.\n     */\n    get path() {\n        return this.widget.context.path;\n    }\n    /**\n     *  Get the list of CM editors in the document, there is only one editor\n     * in the case of file editor.\n     */\n    get editors() {\n        var _a, _b;\n        return [\n            {\n                ceEditor: this._virtualEditor,\n                type: 'code',\n                value: (_b = (_a = this.editor) === null || _a === void 0 ? void 0 : _a.model.sharedModel.getSource()) !== null && _b !== void 0 ? _b : ''\n            }\n        ];\n    }\n    /**\n     * Dispose the widget.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._editorRemoved.emit({\n            editor: this._virtualEditor\n        });\n        this.editor.model.mimeTypeChanged.disconnect(this.reloadConnection);\n        super.dispose();\n    }\n    /**\n     * Generate the virtual document associated with the document.\n     */\n    createVirtualDocument() {\n        return new VirtualDocument({\n            language: this.language,\n            foreignCodeExtractors: this.options.foreignCodeExtractorsManager,\n            path: this.documentPath,\n            fileExtension: this.languageFileExtension,\n            // notebooks are continuous, each cell is dependent on the previous one\n            standalone: true,\n            // notebooks are not supported by LSP servers\n            hasLspSupportedFile: true\n        });\n    }\n    /**\n     * Get the index of editor from the cursor position in the virtual\n     * document. Since there is only one editor, this method always return\n     * 0\n     * @deprecated This is error-prone and will be removed in JupyterLab 5.0, use `getEditorIndex()` with `virtualDocument.getEditorAtVirtualLine(position)` instead.\n     *\n     * @param position - the position of cursor in the virtual document.\n     * @return  {number} - index of the virtual editor\n     */\n    getEditorIndexAt(position) {\n        return 0;\n    }\n    /**\n     * Get the index of input editor\n     *\n     * @param ceEditor - instance of the code editor\n     */\n    getEditorIndex(ceEditor) {\n        return 0;\n    }\n    /**\n     * Get the wrapper of input editor.\n     *\n     * @param ceEditor\n     * @return  {HTMLElement}\n     */\n    getEditorWrapper(ceEditor) {\n        return this.wrapperElement;\n    }\n    /**\n     * Initialization function called once the editor and the LSP connection\n     * manager is ready. This function will create the virtual document and\n     * connect various signals.\n     */\n    async initOnceReady() {\n        this.initVirtual();\n        // connect the document, but do not open it as the adapter will handle this\n        // after registering all features\n        await this.connectDocument(this.virtualDocument, false);\n        this.editor.model.mimeTypeChanged.connect(this.reloadConnection, this);\n    }\n}\n//# sourceMappingURL=fileeditorlspadapter.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { CodeEditorWrapper } from '@jupyterlab/codeeditor';\nimport { ABCWidgetFactory, DocumentWidget } from '@jupyterlab/docregistry';\nimport { textEditorIcon } from '@jupyterlab/ui-components';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { StackedLayout, Widget } from '@lumino/widgets';\n/**\n * The data attribute added to a widget that can run code.\n */\nconst CODE_RUNNER = 'jpCodeRunner';\n/**\n * The data attribute added to a widget that can undo.\n */\nconst UNDOER = 'jpUndoer';\n/**\n * A widget for editors.\n */\nexport class FileEditor extends Widget {\n    /**\n     * Construct a new editor widget.\n     */\n    constructor(options) {\n        super();\n        this._ready = new PromiseDelegate();\n        this.addClass('jp-FileEditor');\n        const context = (this._context = options.context);\n        this._mimeTypeService = options.mimeTypeService;\n        const editorWidget = (this._editorWidget = new CodeEditorWrapper({\n            factory: options.factory,\n            model: context.model,\n            editorOptions: {\n                config: FileEditor.defaultEditorConfig\n            }\n        }));\n        this._editorWidget.addClass('jp-FileEditorCodeWrapper');\n        this._editorWidget.node.dataset[CODE_RUNNER] = 'true';\n        this._editorWidget.node.dataset[UNDOER] = 'true';\n        this.editor = editorWidget.editor;\n        this.model = editorWidget.model;\n        void context.ready.then(() => {\n            this._onContextReady();\n        });\n        // Listen for changes to the path.\n        this._onPathChanged();\n        context.pathChanged.connect(this._onPathChanged, this);\n        const layout = (this.layout = new StackedLayout());\n        layout.addWidget(editorWidget);\n    }\n    /**\n     * Get the context for the editor widget.\n     */\n    get context() {\n        return this._context;\n    }\n    /**\n     * A promise that resolves when the file editor is ready.\n     */\n    get ready() {\n        return this._ready.promise;\n    }\n    /**\n     * Handle the DOM events for the widget.\n     *\n     * @param event - The DOM event sent to the widget.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the widget's node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        if (!this.model) {\n            return;\n        }\n        switch (event.type) {\n            case 'mousedown':\n                this._ensureFocus();\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Handle `after-attach` messages for the widget.\n     */\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        const node = this.node;\n        node.addEventListener('mousedown', this);\n    }\n    /**\n     * Handle `before-detach` messages for the widget.\n     */\n    onBeforeDetach(msg) {\n        const node = this.node;\n        node.removeEventListener('mousedown', this);\n    }\n    /**\n     * Handle `'activate-request'` messages.\n     */\n    onActivateRequest(msg) {\n        this._ensureFocus();\n    }\n    /**\n     * Ensure that the widget has focus.\n     */\n    _ensureFocus() {\n        if (!this.editor.hasFocus()) {\n            this.editor.focus();\n        }\n    }\n    /**\n     * Handle actions that should be taken when the context is ready.\n     */\n    _onContextReady() {\n        if (this.isDisposed) {\n            return;\n        }\n        // Prevent the initial loading from disk from being in the editor history.\n        this.editor.clearHistory();\n        // Resolve the ready promise.\n        this._ready.resolve(undefined);\n    }\n    /**\n     * Handle a change to the path.\n     */\n    _onPathChanged() {\n        const editor = this.editor;\n        const localPath = this._context.localPath;\n        editor.model.mimeType =\n            this._mimeTypeService.getMimeTypeByFilePath(localPath);\n    }\n}\n/**\n * The namespace for editor widget statics.\n */\n(function (FileEditor) {\n    /**\n     * File editor default configuration.\n     */\n    FileEditor.defaultEditorConfig = {\n        lineNumbers: true,\n        scrollPastEnd: true\n    };\n})(FileEditor || (FileEditor = {}));\n/**\n * A document widget for file editor widgets.\n */\nexport class FileEditorWidget extends DocumentWidget {\n    /**\n     * Set URI fragment identifier for text files\n     */\n    async setFragment(fragment) {\n        const parsedFragments = fragment.split('=');\n        // TODO: expand to allow more schemes of Fragment Identification Syntax\n        // reference: https://datatracker.ietf.org/doc/html/rfc5147#section-3\n        if (parsedFragments[0] !== '#line') {\n            return;\n        }\n        const positionOrRange = parsedFragments[1];\n        let firstLine;\n        if (positionOrRange.includes(',')) {\n            // Only respect range start for now.\n            firstLine = positionOrRange.split(',')[0] || '0';\n        }\n        else {\n            firstLine = positionOrRange;\n        }\n        // Reveal the line\n        return this.context.ready.then(() => {\n            const position = {\n                line: parseInt(firstLine, 10),\n                column: 0\n            };\n            this.content.editor.setCursorPosition(position);\n            this.content.editor.revealPosition(position);\n        });\n    }\n}\n/**\n * A widget factory for editors.\n */\nexport class FileEditorFactory extends ABCWidgetFactory {\n    /**\n     * Construct a new editor widget factory.\n     */\n    constructor(options) {\n        super(options.factoryOptions);\n        this._services = options.editorServices;\n    }\n    /**\n     * Create a new widget given a context.\n     */\n    createNewWidget(context) {\n        const func = this._services.factoryService.newDocumentEditor;\n        const factory = options => {\n            // Use same id as document factory\n            return func(options);\n        };\n        const content = new FileEditor({\n            factory,\n            context,\n            mimeTypeService: this._services.mimeTypeService\n        });\n        content.title.icon = textEditorIcon;\n        const widget = new FileEditorWidget({ content, context });\n        return widget;\n    }\n}\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { MainAreaWidget } from '@jupyterlab/apputils';\nimport { CodeMirrorEditor, EditorSearchProvider } from '@jupyterlab/codemirror';\nimport { FileEditor } from './widget';\n/**\n * File editor search provider\n */\nexport class FileEditorSearchProvider extends EditorSearchProvider {\n    /**\n     * Constructor\n     * @param widget File editor panel\n     */\n    constructor(widget) {\n        super();\n        this.widget = widget;\n        this._searchActive = false;\n    }\n    get isReadOnly() {\n        return this.editor.getOption('readOnly');\n    }\n    /**\n     * Support for options adjusting replacement behavior.\n     */\n    get replaceOptionsSupport() {\n        return {\n            preserveCase: true\n        };\n    }\n    /**\n     * Text editor\n     */\n    get editor() {\n        return this.widget.content.editor;\n    }\n    /**\n     * Editor content model\n     */\n    get model() {\n        return this.widget.content.model;\n    }\n    async startQuery(query, filters) {\n        this._searchActive = true;\n        await super.startQuery(query, filters);\n        await this.highlightNext(true, {\n            from: 'selection-start',\n            scroll: false,\n            select: false\n        });\n    }\n    /**\n     * Stop the search and clean any UI elements.\n     */\n    async endQuery() {\n        this._searchActive = false;\n        await super.endQuery();\n    }\n    /**\n     * Callback on source change\n     *\n     * @param emitter Source of the change\n     * @param changes Source change\n     */\n    async onSharedModelChanged(emitter, changes) {\n        if (this._searchActive) {\n            return super.onSharedModelChanged(emitter, changes);\n        }\n    }\n    /**\n     * Instantiate a search provider for the widget.\n     *\n     * #### Notes\n     * The widget provided is always checked using `isApplicable` before calling\n     * this factory.\n     *\n     * @param widget The widget to search on\n     * @param translator [optional] The translator object\n     *\n     * @returns The search provider on the widget\n     */\n    static createNew(widget, translator) {\n        return new FileEditorSearchProvider(widget);\n    }\n    /**\n     * Report whether or not this provider has the ability to search on the given object\n     */\n    static isApplicable(domain) {\n        return (domain instanceof MainAreaWidget &&\n            domain.content instanceof FileEditor &&\n            domain.content.editor instanceof CodeMirrorEditor);\n    }\n    /**\n     * Get an initial query value if applicable so that it can be entered\n     * into the search box as an initial query\n     *\n     * @returns Initial value used to populate the search box.\n     */\n    getInitialQuery() {\n        const cm = this.editor;\n        const selection = cm.state.sliceDoc(cm.state.selection.main.from, cm.state.selection.main.to);\n        return selection;\n    }\n}\n//# sourceMappingURL=searchprovider.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { IEditorMimeTypeService } from '@jupyterlab/codeeditor';\nimport { showPopup, TextItem } from '@jupyterlab/statusbar';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { VDomModel, VDomRenderer } from '@jupyterlab/ui-components';\nimport { Menu } from '@lumino/widgets';\nimport React from 'react';\n/**\n * A pure function that returns a tsx component for an editor syntax item.\n *\n * @param props the props for the component.\n *\n * @returns an editor syntax component.\n */\nfunction EditorSyntaxComponent(props) {\n    return React.createElement(TextItem, { source: props.language, onClick: props.handleClick });\n}\n/**\n * StatusBar item to change the language syntax highlighting of the file editor.\n */\nexport class EditorSyntaxStatus extends VDomRenderer {\n    /**\n     * Construct a new VDomRenderer for the status item.\n     */\n    constructor(options) {\n        var _a;\n        super(new EditorSyntaxStatus.Model(options.languages));\n        /**\n         * Create a menu for selecting the language of the editor.\n         */\n        this._handleClick = () => {\n            const languageMenu = new Menu({ commands: this._commands });\n            const command = 'fileeditor:change-language';\n            if (this._popup) {\n                this._popup.dispose();\n            }\n            this.model.languages\n                .getLanguages()\n                .sort((a, b) => {\n                var _a, _b;\n                const aName = (_a = a.displayName) !== null && _a !== void 0 ? _a : a.name;\n                const bName = (_b = b.displayName) !== null && _b !== void 0 ? _b : b.name;\n                return aName.localeCompare(bName);\n            })\n                .forEach(spec => {\n                var _a;\n                if (spec.name.toLowerCase().indexOf('brainf') === 0) {\n                    return;\n                }\n                const args = {\n                    name: spec.name,\n                    displayName: (_a = spec.displayName) !== null && _a !== void 0 ? _a : spec.name\n                };\n                languageMenu.addItem({\n                    command,\n                    args\n                });\n            });\n            this._popup = showPopup({\n                body: languageMenu,\n                anchor: this,\n                align: 'left'\n            });\n        };\n        this._popup = null;\n        this._commands = options.commands;\n        this.translator = (_a = options.translator) !== null && _a !== void 0 ? _a : nullTranslator;\n        const trans = this.translator.load('jupyterlab');\n        this.addClass('jp-mod-highlighted');\n        this.title.caption = trans.__('Change text editor syntax highlighting');\n    }\n    /**\n     * Render the status item.\n     */\n    render() {\n        if (!this.model) {\n            return null;\n        }\n        return (React.createElement(EditorSyntaxComponent, { language: this.model.language, handleClick: this._handleClick }));\n    }\n}\n/**\n * A namespace for EditorSyntax statics.\n */\n(function (EditorSyntaxStatus) {\n    /**\n     * A VDomModel for the current editor/mode combination.\n     */\n    class Model extends VDomModel {\n        constructor(languages) {\n            super();\n            this.languages = languages;\n            /**\n             * If the editor mode changes, update the model.\n             */\n            this._onMIMETypeChange = (mode, change) => {\n                var _a;\n                const oldLanguage = this._language;\n                const spec = this.languages.findByMIME(change.newValue);\n                this._language = (_a = spec === null || spec === void 0 ? void 0 : spec.name) !== null && _a !== void 0 ? _a : IEditorMimeTypeService.defaultMimeType;\n                this._triggerChange(oldLanguage, this._language);\n            };\n            this._language = '';\n            this._editor = null;\n        }\n        /**\n         * The current editor language. If no editor is present,\n         * returns the empty string.\n         */\n        get language() {\n            return this._language;\n        }\n        /**\n         * The current editor for the application editor tracker.\n         */\n        get editor() {\n            return this._editor;\n        }\n        set editor(editor) {\n            var _a;\n            const oldEditor = this._editor;\n            if (oldEditor !== null) {\n                oldEditor.model.mimeTypeChanged.disconnect(this._onMIMETypeChange);\n            }\n            const oldLanguage = this._language;\n            this._editor = editor;\n            if (this._editor === null) {\n                this._language = '';\n            }\n            else {\n                const spec = this.languages.findByMIME(this._editor.model.mimeType);\n                this._language = (_a = spec === null || spec === void 0 ? void 0 : spec.name) !== null && _a !== void 0 ? _a : IEditorMimeTypeService.defaultMimeType;\n                this._editor.model.mimeTypeChanged.connect(this._onMIMETypeChange);\n            }\n            this._triggerChange(oldLanguage, this._language);\n        }\n        /**\n         * Trigger a rerender of the model.\n         */\n        _triggerChange(oldState, newState) {\n            if (oldState !== newState) {\n                this.stateChanged.emit(void 0);\n            }\n        }\n    }\n    EditorSyntaxStatus.Model = Model;\n})(EditorSyntaxStatus || (EditorSyntaxStatus = {}));\n//# sourceMappingURL=syntaxstatus.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { showPopup, TextItem } from '@jupyterlab/statusbar';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { VDomModel, VDomRenderer } from '@jupyterlab/ui-components';\nimport React from 'react';\n/**\n * A pure functional component for rendering the TabSpace status.\n */\nfunction TabSpaceComponent(props) {\n    const translator = props.translator || nullTranslator;\n    const trans = translator.load('jupyterlab');\n    const description = typeof props.tabSpace === 'number'\n        ? trans.__('Spaces')\n        : trans.__('Tab Indent');\n    return (React.createElement(TextItem, { onClick: props.handleClick, source: typeof props.tabSpace === 'number'\n            ? `${description}: ${props.tabSpace}`\n            : description, title: trans.__('Change the indentation…') }));\n}\n/**\n * A VDomRenderer for a tabs vs. spaces status item.\n */\nexport class TabSpaceStatus extends VDomRenderer {\n    /**\n     * Create a new tab/space status item.\n     */\n    constructor(options) {\n        super(new TabSpaceStatus.Model());\n        this._popup = null;\n        this._menu = options.menu;\n        this.translator = options.translator || nullTranslator;\n        this.addClass('jp-mod-highlighted');\n    }\n    /**\n     * Render the TabSpace status item.\n     */\n    render() {\n        var _a;\n        if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.indentUnit)) {\n            return null;\n        }\n        else {\n            const tabSpace = this.model.indentUnit === 'Tab'\n                ? null\n                : parseInt(this.model.indentUnit, 10);\n            return (React.createElement(TabSpaceComponent, { tabSpace: tabSpace, handleClick: () => this._handleClick(), translator: this.translator }));\n        }\n    }\n    /**\n     * Handle a click on the status item.\n     */\n    _handleClick() {\n        const menu = this._menu;\n        if (this._popup) {\n            this._popup.dispose();\n        }\n        menu.aboutToClose.connect(this._menuClosed, this);\n        this._popup = showPopup({\n            body: menu,\n            anchor: this,\n            align: 'right'\n        });\n        // Update the menu items\n        menu.update();\n    }\n    _menuClosed() {\n        this.removeClass('jp-mod-clicked');\n    }\n}\n/**\n * A namespace for TabSpace statics.\n */\n(function (TabSpaceStatus) {\n    /**\n     * A VDomModel for the TabSpace status item.\n     */\n    class Model extends VDomModel {\n        /**\n         * Code editor indentation unit\n         */\n        get indentUnit() {\n            return this._indentUnit;\n        }\n        set indentUnit(v) {\n            if (v !== this._indentUnit) {\n                this._indentUnit = v;\n                this.stateChanged.emit();\n            }\n        }\n    }\n    TabSpaceStatus.Model = Model;\n})(TabSpaceStatus || (TabSpaceStatus = {}));\n//# sourceMappingURL=tabspacestatus.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { TableOfContentsFactory } from '@jupyterlab/toc';\n/**\n * Base table of contents model factory for file editor\n */\nexport class EditorTableOfContentsFactory extends TableOfContentsFactory {\n    /**\n     * Create a new table of contents model for the widget\n     *\n     * @param widget - widget\n     * @param configuration - Table of contents configuration\n     * @returns The table of contents model\n     */\n    createNew(widget, configuration) {\n        const model = super.createNew(widget, configuration);\n        const onActiveHeadingChanged = (model, heading) => {\n            if (heading) {\n                widget.content.editor.setCursorPosition({\n                    line: heading.line,\n                    column: 0\n                });\n            }\n        };\n        model.activeHeadingChanged.connect(onActiveHeadingChanged);\n        widget.disposed.connect(() => {\n            model.activeHeadingChanged.disconnect(onActiveHeadingChanged);\n        });\n        return model;\n    }\n}\n//# sourceMappingURL=factory.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { TableOfContentsModel, TableOfContentsUtils } from '@jupyterlab/toc';\nimport { EditorTableOfContentsFactory } from './factory';\n/**\n * Maps LaTeX section headings to HTML header levels.\n *\n * ## Notes\n *\n * -   As `part` and `chapter` section headings appear to be less common, assign them to heading level 1.\n *\n * @private\n */\nconst LATEX_LEVELS = {\n    part: 1, // Only available for report and book classes\n    chapter: 1, // Only available for report and book classes\n    section: 1,\n    subsection: 2,\n    subsubsection: 3,\n    paragraph: 4,\n    subparagraph: 5\n};\n/**\n * Regular expression to create the outline\n */\nconst SECTIONS = /^\\s*\\\\(section|subsection|subsubsection){(.+)}/;\n/**\n * Table of content model for LaTeX files.\n */\nexport class LaTeXTableOfContentsModel extends TableOfContentsModel {\n    /**\n     * Type of document supported by the model.\n     *\n     * #### Notes\n     * A `data-document-type` attribute with this value will be set\n     * on the tree view `.jp-TableOfContents-content[data-document-type=\"...\"]`\n     */\n    get documentType() {\n        return 'latex';\n    }\n    /**\n     * List of configuration options supported by the model.\n     */\n    get supportedOptions() {\n        return ['maximalDepth', 'numberHeaders'];\n    }\n    /**\n     * Produce the headings for a document.\n     *\n     * @returns The list of new headings or `null` if nothing needs to be updated.\n     */\n    getHeadings() {\n        if (!this.isActive) {\n            return Promise.resolve(null);\n        }\n        // Split the text into lines:\n        const lines = this.widget.content.model.sharedModel\n            .getSource()\n            .split('\\n');\n        const levels = new Array();\n        let previousLevel = levels.length;\n        const headings = new Array();\n        for (let i = 0; i < lines.length; i++) {\n            const match = lines[i].match(SECTIONS);\n            if (match) {\n                const level = LATEX_LEVELS[match[1]];\n                if (level <= this.configuration.maximalDepth) {\n                    const prefix = TableOfContentsUtils.getPrefix(level, previousLevel, levels, {\n                        ...this.configuration,\n                        // Force base numbering and numbering first level\n                        baseNumbering: 1,\n                        numberingH1: true\n                    });\n                    previousLevel = level;\n                    headings.push({\n                        text: match[2],\n                        prefix: prefix,\n                        level,\n                        line: i\n                    });\n                }\n            }\n        }\n        return Promise.resolve(headings);\n    }\n}\n/**\n * Table of content model factory for LaTeX files.\n */\nexport class LaTeXTableOfContentsFactory extends EditorTableOfContentsFactory {\n    /**\n     * Whether the factory can handle the widget or not.\n     *\n     * @param widget - widget\n     * @returns boolean indicating a ToC can be generated\n     */\n    isApplicable(widget) {\n        var _a, _b;\n        const isApplicable = super.isApplicable(widget);\n        if (isApplicable) {\n            let mime = (_b = (_a = widget.content) === null || _a === void 0 ? void 0 : _a.model) === null || _b === void 0 ? void 0 : _b.mimeType;\n            return mime && (mime === 'text/x-latex' || mime === 'text/x-stex');\n        }\n        return false;\n    }\n    /**\n     * Create a new table of contents model for the widget\n     *\n     * @param widget - widget\n     * @param configuration - Table of contents configuration\n     * @returns The table of contents model\n     */\n    _createNew(widget, configuration) {\n        return new LaTeXTableOfContentsModel(widget, configuration);\n    }\n}\n//# sourceMappingURL=latex.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { TableOfContentsModel, TableOfContentsUtils } from '@jupyterlab/toc';\nimport { EditorTableOfContentsFactory } from './factory';\n/**\n * Table of content model for Markdown files.\n */\nexport class MarkdownTableOfContentsModel extends TableOfContentsModel {\n    /**\n     * Type of document supported by the model.\n     *\n     * #### Notes\n     * A `data-document-type` attribute with this value will be set\n     * on the tree view `.jp-TableOfContents-content[data-document-type=\"...\"]`\n     */\n    get documentType() {\n        return 'markdown';\n    }\n    /**\n     * Produce the headings for a document.\n     *\n     * @returns The list of new headings or `null` if nothing needs to be updated.\n     */\n    getHeadings() {\n        if (!this.isActive) {\n            return Promise.resolve(null);\n        }\n        const content = this.widget.content.model.sharedModel.getSource();\n        const headings = TableOfContentsUtils.filterHeadings(TableOfContentsUtils.Markdown.getHeadings(content), {\n            ...this.configuration,\n            // Force removing numbering as they cannot be displayed\n            // in the document\n            numberHeaders: false\n        });\n        return Promise.resolve(headings);\n    }\n}\n/**\n * Table of content model factory for Markdown files.\n */\nexport class MarkdownTableOfContentsFactory extends EditorTableOfContentsFactory {\n    /**\n     * Whether the factory can handle the widget or not.\n     *\n     * @param widget - widget\n     * @returns boolean indicating a ToC can be generated\n     */\n    isApplicable(widget) {\n        var _a, _b;\n        const isApplicable = super.isApplicable(widget);\n        if (isApplicable) {\n            let mime = (_b = (_a = widget.content) === null || _a === void 0 ? void 0 : _a.model) === null || _b === void 0 ? void 0 : _b.mimeType;\n            return mime && TableOfContentsUtils.Markdown.isMarkdown(mime);\n        }\n        return false;\n    }\n    /**\n     * Create a new table of contents model for the widget\n     *\n     * @param widget - widget\n     * @param configuration - Table of contents configuration\n     * @returns The table of contents model\n     */\n    _createNew(widget, configuration) {\n        return new MarkdownTableOfContentsModel(widget, configuration);\n    }\n}\n//# sourceMappingURL=markdown.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { TableOfContentsModel } from '@jupyterlab/toc';\nimport { EditorTableOfContentsFactory } from './factory';\n/**\n * Regular expression to create the outline\n */\nlet KEYWORDS;\ntry {\n    // https://github.com/tc39/proposal-regexp-match-indices was accepted\n    // in May 2021 (https://github.com/tc39/proposals/blob/main/finished-proposals.md)\n    // So we will fallback to the polyfill regexp-match-indices if not available\n    KEYWORDS = new RegExp('^\\\\s*(class |def |async def |from |import )', 'd');\n}\ncatch (_a) {\n    KEYWORDS = new RegExp('^\\\\s*(class |def |async def |from |import )');\n}\n/**\n * Table of content model for Python files.\n */\nexport class PythonTableOfContentsModel extends TableOfContentsModel {\n    /**\n     * Type of document supported by the model.\n     *\n     * #### Notes\n     * A `data-document-type` attribute with this value will be set\n     * on the tree view `.jp-TableOfContents-content[data-document-type=\"...\"]`\n     */\n    get documentType() {\n        return 'python';\n    }\n    /**\n     * Produce the headings for a document.\n     *\n     * @returns The list of new headings or `null` if nothing needs to be updated.\n     */\n    async getHeadings() {\n        if (!this.isActive) {\n            return Promise.resolve(null);\n        }\n        // Split the text into lines:\n        const lines = this.widget.content.model.sharedModel\n            .getSource()\n            .split('\\n');\n        // Iterate over the lines to get the heading level and text for each line:\n        let headings = new Array();\n        let processingImports = false;\n        let indent = 1;\n        let lineIdx = -1;\n        for (const line of lines) {\n            lineIdx++;\n            let hasKeyword;\n            if (KEYWORDS.flags.includes('d')) {\n                hasKeyword = KEYWORDS.exec(line);\n            }\n            else {\n                const { default: execWithIndices } = await import('regexp-match-indices');\n                hasKeyword = execWithIndices(KEYWORDS, line);\n            }\n            if (hasKeyword) {\n                // Index 0 contains the spaces, index 1 is the keyword group\n                const [start] = hasKeyword.indices[1];\n                if (indent === 1 && start > 0) {\n                    indent = start;\n                }\n                const isImport = ['from ', 'import '].includes(hasKeyword[1]);\n                if (isImport && processingImports) {\n                    continue;\n                }\n                processingImports = isImport;\n                const level = 1 + start / indent;\n                if (level > this.configuration.maximalDepth) {\n                    continue;\n                }\n                headings.push({\n                    text: line.slice(start),\n                    level,\n                    line: lineIdx\n                });\n            }\n        }\n        return Promise.resolve(headings);\n    }\n}\n/**\n * Table of content model factory for Python files.\n */\nexport class PythonTableOfContentsFactory extends EditorTableOfContentsFactory {\n    /**\n     * Whether the factory can handle the widget or not.\n     *\n     * @param widget - widget\n     * @returns boolean indicating a ToC can be generated\n     */\n    isApplicable(widget) {\n        var _a, _b;\n        const isApplicable = super.isApplicable(widget);\n        if (isApplicable) {\n            let mime = (_b = (_a = widget.content) === null || _a === void 0 ? void 0 : _a.model) === null || _b === void 0 ? void 0 : _b.mimeType;\n            return (mime &&\n                (mime === 'application/x-python-code' || mime === 'text/x-python'));\n        }\n        return false;\n    }\n    /**\n     * Create a new table of contents model for the widget\n     *\n     * @param widget - widget\n     * @param configuration - Table of contents configuration\n     * @returns The table of contents model\n     */\n    _createNew(widget, configuration) {\n        return new PythonTableOfContentsModel(widget, configuration);\n    }\n}\n//# sourceMappingURL=python.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nexport * from './factory';\nexport * from './latex';\nexport * from './markdown';\nexport * from './python';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The editor tracker token.\n */\nexport const IEditorTracker = new Token('@jupyterlab/fileeditor:IEditorTracker', `A widget tracker for file editors.\n  Use this if you want to be able to iterate over and interact with file editors\n  created by the application.`);\n/**\n * The editor widget factory token.\n */\nexport const IEditorWidgetFactory = new Token('@jupyterlab/fileeditor:IEditorWidgetFactory', 'A factory for creating file editors.');\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module fileeditor\n */\nexport * from './fileeditorlspadapter';\nexport * from './searchprovider';\nexport * from './syntaxstatus';\nexport * from './tabspacestatus';\nexport * from './toc';\nexport * from './tokens';\nexport * from './widget';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/documentsearch/style/index.js';\nimport '@jupyterlab/codemirror/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/lsp/style/index.js';\nimport '@jupyterlab/toc/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module help-extension\n */\nimport { ILabShell, ILayoutRestorer } from '@jupyterlab/application';\nimport { Dialog, ICommandPalette, MainAreaWidget, showDialog, WidgetTracker } from '@jupyterlab/apputils';\nimport { URLExt } from '@jupyterlab/coreutils';\nimport { IMainMenu } from '@jupyterlab/mainmenu';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { IFrame, jupyterIcon, jupyterlabWordmarkIcon } from '@jupyterlab/ui-components';\nimport * as React from 'react';\n/**\n * The command IDs used by the help plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.open = 'help:open';\n    CommandIDs.about = 'help:about';\n    CommandIDs.activate = 'help:activate';\n    CommandIDs.close = 'help:close';\n    CommandIDs.show = 'help:show';\n    CommandIDs.hide = 'help:hide';\n    CommandIDs.jupyterForum = 'help:jupyter-forum';\n    // Commands kept for backwards compatibility after the move to the apputils-extension\n    CommandIDs.licenses = 'help:licenses';\n    CommandIDs.licenseReport = 'help:license-report';\n    CommandIDs.refreshLicenses = 'help:licenses-refresh';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * A flag denoting whether the application is loaded over HTTPS.\n */\nconst LAB_IS_SECURE = window.location.protocol === 'https:';\n/**\n * The class name added to the help widget.\n */\nconst HELP_CLASS = 'jp-Help';\n/**\n * A plugin to keep licenses commands that were previously defined in the help-extension.\n * This is mostly for backwards compatibility, in case some other plugins were manually executing these commands.\n */\nconst licensesCommands = {\n    id: '@jupyterlab/help-extension:licenses-commands',\n    autoStart: true,\n    optional: [ITranslator],\n    description: 'Add licenses commands for backwards compatibility.',\n    activate: (app, translator) => {\n        const { commands } = app;\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        const licensesText = trans.__('Licenses');\n        const downloadAsText = trans.__('Download All Licenses');\n        const refreshLicenses = trans.__('Refresh Licenses');\n        const apputilsLicencesCommand = 'apputils:licenses';\n        commands.addCommand(CommandIDs.licenses, {\n            label: licensesText,\n            execute: args => {\n                console.warn(`The command ${CommandIDs.licenses} is deprecated, use ${apputilsLicencesCommand} instead.`);\n                return commands.execute(apputilsLicencesCommand, args);\n            }\n        });\n        const apputilsLicenseReportCommand = 'apputils:license-report';\n        commands.addCommand(CommandIDs.licenseReport, {\n            label: downloadAsText,\n            execute: args => {\n                console.warn(`The command ${CommandIDs.licenseReport} is deprecated, use ${apputilsLicenseReportCommand} instead.`);\n                return commands.execute(apputilsLicenseReportCommand, args);\n            }\n        });\n        const apputilsRefreshLicensesCommand = 'apputils:licenses-refresh';\n        commands.addCommand(CommandIDs.refreshLicenses, {\n            label: refreshLicenses,\n            execute: args => {\n                console.warn(`The command ${CommandIDs.refreshLicenses} is deprecated, use ${apputilsRefreshLicensesCommand} instead.`);\n                return commands.execute(apputilsRefreshLicensesCommand, args);\n            }\n        });\n    }\n};\n/**\n * Add a command to show an About dialog.\n */\nconst about = {\n    id: '@jupyterlab/help-extension:about',\n    description: 'Adds a \"About\" dialog feature.',\n    autoStart: true,\n    requires: [ITranslator],\n    optional: [ICommandPalette],\n    activate: (app, translator, palette) => {\n        const { commands } = app;\n        const trans = translator.load('jupyterlab');\n        const category = trans.__('Help');\n        commands.addCommand(CommandIDs.about, {\n            label: trans.__('About %1', app.name),\n            execute: () => {\n                // Create the header of the about dialog\n                const versionNumber = trans.__('Version %1', app.version);\n                const versionInfo = (React.createElement(\"span\", { className: \"jp-About-version-info\" },\n                    React.createElement(\"span\", { className: \"jp-About-version\" }, versionNumber)));\n                const title = (React.createElement(\"span\", { className: \"jp-About-header\" },\n                    React.createElement(jupyterIcon.react, { margin: \"7px 9.5px\", height: \"auto\", width: \"58px\" }),\n                    React.createElement(\"div\", { className: \"jp-About-header-info\" },\n                        React.createElement(jupyterlabWordmarkIcon.react, { height: \"auto\", width: \"196px\" }),\n                        versionInfo)));\n                // Create the body of the about dialog\n                const jupyterURL = 'https://jupyter.org/about.html';\n                const contributorsURL = 'https://github.com/jupyterlab/jupyterlab/graphs/contributors';\n                const externalLinks = (React.createElement(\"span\", { className: \"jp-About-externalLinks\" },\n                    React.createElement(\"a\", { href: contributorsURL, target: \"_blank\", rel: \"noopener noreferrer\", className: \"jp-Button-flat\" }, trans.__('CONTRIBUTOR LIST')),\n                    React.createElement(\"a\", { href: jupyterURL, target: \"_blank\", rel: \"noopener noreferrer\", className: \"jp-Button-flat\" }, trans.__('ABOUT PROJECT JUPYTER'))));\n                const copyright = (React.createElement(\"span\", { className: \"jp-About-copyright\" }, trans.__('© %1-%2 Project Jupyter Contributors', 2015, 2025)));\n                const body = (React.createElement(\"div\", { className: \"jp-About-body\" },\n                    externalLinks,\n                    copyright));\n                return showDialog({\n                    title,\n                    body,\n                    buttons: [\n                        Dialog.cancelButton({\n                            label: trans.__('Close')\n                        })\n                    ]\n                });\n            }\n        });\n        if (palette) {\n            palette.addItem({ command: CommandIDs.about, category });\n        }\n    }\n};\n/**\n * A plugin to add a command to open the Jupyter Forum.\n */\nconst jupyterForum = {\n    id: '@jupyterlab/help-extension:jupyter-forum',\n    description: 'Adds command to open the Jupyter Forum website.',\n    autoStart: true,\n    requires: [ITranslator],\n    optional: [ICommandPalette],\n    activate: (app, translator, palette) => {\n        const { commands } = app;\n        const trans = translator.load('jupyterlab');\n        const category = trans.__('Help');\n        commands.addCommand(CommandIDs.jupyterForum, {\n            label: trans.__('Jupyter Forum'),\n            execute: () => {\n                window.open('https://discourse.jupyter.org/c/jupyterlab');\n            }\n        });\n        if (palette) {\n            palette.addItem({ command: CommandIDs.jupyterForum, category });\n        }\n    }\n};\n/**\n * A plugin to open resources in IFrames or new browser tabs.\n */\nconst open = {\n    id: '@jupyterlab/help-extension:open',\n    description: 'Add command to open websites as panel or browser tab.',\n    autoStart: true,\n    requires: [ITranslator],\n    optional: [ILayoutRestorer],\n    activate: (app, translator, restorer) => {\n        const { commands, shell } = app;\n        const trans = translator.load('jupyterlab');\n        const namespace = 'help-doc';\n        const tracker = new WidgetTracker({ namespace });\n        let counter = 0;\n        /**\n         * Create a new HelpWidget widget.\n         */\n        function newHelpWidget(url, text) {\n            // Allow scripts and forms so that things like\n            // readthedocs can use their search functionality.\n            // We *don't* allow same origin requests, which\n            // can prevent some content from being loaded onto the\n            // help pages.\n            const content = new IFrame({\n                sandbox: ['allow-scripts', 'allow-forms'],\n                loading: 'lazy'\n            });\n            content.url = url;\n            content.addClass(HELP_CLASS);\n            content.title.label = text;\n            content.id = `${namespace}-${++counter}`;\n            const widget = new MainAreaWidget({ content });\n            widget.addClass('jp-Help');\n            return widget;\n        }\n        commands.addCommand(CommandIDs.open, {\n            label: args => {\n                var _a;\n                return (_a = args['text']) !== null && _a !== void 0 ? _a : trans.__('Open the provided `url` in a tab.');\n            },\n            execute: args => {\n                const url = args['url'];\n                const text = args['text'];\n                const newBrowserTab = args['newBrowserTab'] || false;\n                // If help resource will generate a mixed content error, load externally.\n                if (newBrowserTab ||\n                    (LAB_IS_SECURE && URLExt.parse(url).protocol !== 'https:')) {\n                    window.open(url);\n                    return;\n                }\n                const widget = newHelpWidget(url, text);\n                void tracker.add(widget);\n                shell.add(widget, 'main');\n                return widget;\n            }\n        });\n        // Handle state restoration.\n        if (restorer) {\n            void restorer.restore(tracker, {\n                command: CommandIDs.open,\n                args: widget => ({\n                    url: widget.content.url,\n                    text: widget.content.title.label\n                }),\n                name: widget => widget.content.url\n            });\n        }\n    }\n};\n/**\n * A plugin to add a list of resources to the help menu.\n */\nconst resources = {\n    id: '@jupyterlab/help-extension:resources',\n    description: 'Adds menu entries to Jupyter reference documentation websites.',\n    autoStart: true,\n    requires: [IMainMenu, ITranslator],\n    optional: [ILabShell, ICommandPalette],\n    activate: (app, mainMenu, translator, labShell, palette) => {\n        const trans = translator.load('jupyterlab');\n        const category = trans.__('Help');\n        const { commands, serviceManager } = app;\n        const resources = [\n            {\n                text: trans.__('JupyterLab Reference'),\n                url: 'https://jupyterlab.readthedocs.io/en/stable/'\n            },\n            {\n                text: trans.__('JupyterLab FAQ'),\n                url: 'https://jupyterlab.readthedocs.io/en/stable/getting_started/faq.html'\n            },\n            {\n                text: trans.__('Jupyter Reference'),\n                url: 'https://jupyter.org/documentation'\n            },\n            {\n                text: trans.__('Markdown Reference'),\n                url: 'https://commonmark.org/help/'\n            }\n        ];\n        resources.sort((a, b) => {\n            return a.text.localeCompare(b.text);\n        });\n        // Populate the Help menu.\n        const helpMenu = mainMenu.helpMenu;\n        const resourcesGroup = resources.map(args => ({\n            args,\n            command: CommandIDs.open\n        }));\n        helpMenu.addGroup(resourcesGroup, 10);\n        // Generate a cache of the kernel help links.\n        const kernelInfoCache = new Map();\n        const onSessionRunningChanged = (m, sessions) => {\n            var _a;\n            // If a new session has been added, it is at the back\n            // of the session list. If one has changed or stopped,\n            // it does not hurt to check it.\n            if (!sessions.length) {\n                return;\n            }\n            const sessionModel = sessions[sessions.length - 1];\n            if (!sessionModel.kernel ||\n                kernelInfoCache.has(sessionModel.kernel.name)) {\n                return;\n            }\n            const session = serviceManager.sessions.connectTo({\n                model: sessionModel,\n                kernelConnectionOptions: { handleComms: false }\n            });\n            void ((_a = session.kernel) === null || _a === void 0 ? void 0 : _a.info.then(kernelInfo => {\n                var _a, _b;\n                const name = session.kernel.name;\n                // Check the cache second time so that, if two callbacks get scheduled,\n                // they don't try to add the same commands.\n                if (kernelInfoCache.has(name)) {\n                    return;\n                }\n                const spec = (_b = (_a = serviceManager.kernelspecs) === null || _a === void 0 ? void 0 : _a.specs) === null || _b === void 0 ? void 0 : _b.kernelspecs[name];\n                if (!spec) {\n                    return;\n                }\n                // Set the Kernel Info cache.\n                kernelInfoCache.set(name, kernelInfo);\n                // Utility function to check if the current widget\n                // has registered itself with the help menu.\n                let usesKernel = false;\n                const onCurrentChanged = async () => {\n                    const kernel = await commands.execute('helpmenu:get-kernel');\n                    usesKernel = (kernel === null || kernel === void 0 ? void 0 : kernel.name) === name;\n                };\n                // Set the status for the current widget\n                onCurrentChanged().catch(error => {\n                    console.error('Failed to get the kernel for the current widget.', error);\n                });\n                if (labShell) {\n                    // Update status when current widget changes\n                    labShell.currentChanged.connect(onCurrentChanged);\n                }\n                const isEnabled = () => usesKernel;\n                // Add the kernel banner to the Help Menu.\n                const bannerCommand = `help-menu-${name}:banner`;\n                const kernelName = spec.display_name;\n                const kernelIconUrl = spec.resources['logo-svg'] || spec.resources['logo-64x64'];\n                commands.addCommand(bannerCommand, {\n                    label: trans.__('About the %1 Kernel', kernelName),\n                    isVisible: isEnabled,\n                    isEnabled,\n                    execute: () => {\n                        // Create the header of the about dialog\n                        const headerLogo = (React.createElement(\"img\", { src: kernelIconUrl, alt: trans.__('Kernel Icon') }));\n                        const title = (React.createElement(\"span\", { className: \"jp-About-header\" },\n                            headerLogo,\n                            React.createElement(\"div\", { className: \"jp-About-header-info\" }, kernelName)));\n                        const banner = React.createElement(\"pre\", null, kernelInfo.banner);\n                        const body = React.createElement(\"div\", { className: \"jp-About-body\" }, banner);\n                        return showDialog({\n                            title,\n                            body,\n                            buttons: [\n                                Dialog.cancelButton({\n                                    label: trans.__('Close')\n                                })\n                            ]\n                        });\n                    }\n                });\n                helpMenu.addGroup([{ command: bannerCommand }], 20);\n                // Add the kernel info help_links to the Help menu.\n                const kernelGroup = [];\n                (kernelInfo.help_links || []).forEach(link => {\n                    const commandId = `help-menu-${name}:${link.text}`;\n                    commands.addCommand(commandId, {\n                        label: commands.label(CommandIDs.open, link),\n                        isVisible: isEnabled,\n                        isEnabled,\n                        execute: () => {\n                            return commands.execute(CommandIDs.open, link);\n                        }\n                    });\n                    kernelGroup.push({ command: commandId });\n                });\n                helpMenu.addGroup(kernelGroup, 21);\n            }).then(() => {\n                // Dispose of the session object since we no longer need it.\n                session.dispose();\n            }));\n        };\n        // Create menu items for currently running sessions\n        for (const model of serviceManager.sessions.running()) {\n            onSessionRunningChanged(serviceManager.sessions, [model]);\n        }\n        serviceManager.sessions.runningChanged.connect(onSessionRunningChanged);\n        if (palette) {\n            resources.forEach(args => {\n                palette.addItem({ args, command: CommandIDs.open, category });\n            });\n            palette.addItem({\n                args: { reload: true },\n                command: 'apputils:reset',\n                category\n            });\n        }\n    }\n};\nconst plugins = [\n    about,\n    jupyterForum,\n    licensesCommands,\n    open,\n    resources\n];\nexport default plugins;\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/mainmenu/style/index.js';\n\nimport './base.css';\n","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module htmlviewer-extension\n */\nimport { ILayoutRestorer } from '@jupyterlab/application';\nimport { createToolbarFactory, ICommandPalette, IToolbarWidgetRegistry, WidgetTracker } from '@jupyterlab/apputils';\nimport { HTMLViewerFactory, IHTMLViewerTracker, ToolbarItems } from '@jupyterlab/htmlviewer';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator } from '@jupyterlab/translation';\nimport { html5Icon } from '@jupyterlab/ui-components';\nconst HTML_VIEWER_PLUGIN_ID = '@jupyterlab/htmlviewer-extension:plugin';\n/**\n * Factory name\n */\nconst FACTORY = 'HTML Viewer';\n/**\n * Command IDs used by the plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.trustHTML = 'htmlviewer:trust-html';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The HTML file handler extension.\n */\nconst htmlPlugin = {\n    activate: activateHTMLViewer,\n    id: HTML_VIEWER_PLUGIN_ID,\n    description: 'Adds HTML file viewer and provides its tracker.',\n    provides: IHTMLViewerTracker,\n    requires: [ITranslator],\n    optional: [\n        ICommandPalette,\n        ILayoutRestorer,\n        ISettingRegistry,\n        IToolbarWidgetRegistry\n    ],\n    autoStart: true\n};\n/**\n * Activate the HTMLViewer extension.\n */\nfunction activateHTMLViewer(app, translator, palette, restorer, settingRegistry, toolbarRegistry) {\n    let toolbarFactory;\n    const trans = translator.load('jupyterlab');\n    if (toolbarRegistry) {\n        toolbarRegistry.addFactory(FACTORY, 'refresh', widget => ToolbarItems.createRefreshButton(widget, translator));\n        toolbarRegistry.addFactory(FACTORY, 'trust', widget => ToolbarItems.createTrustButton(widget, translator));\n        if (settingRegistry) {\n            toolbarFactory = createToolbarFactory(toolbarRegistry, settingRegistry, FACTORY, htmlPlugin.id, translator);\n        }\n    }\n    // Add an HTML file type to the docregistry.\n    const ft = {\n        name: 'html',\n        contentType: 'file',\n        fileFormat: 'text',\n        displayName: trans.__('HTML File'),\n        extensions: ['.html'],\n        mimeTypes: ['text/html'],\n        icon: html5Icon\n    };\n    app.docRegistry.addFileType(ft);\n    // Create a new viewer factory.\n    const factory = new HTMLViewerFactory({\n        name: FACTORY,\n        label: trans.__('HTML Viewer'),\n        fileTypes: ['html'],\n        defaultFor: ['html'],\n        readOnly: true,\n        toolbarFactory,\n        translator\n    });\n    // Create a widget tracker for HTML documents.\n    const tracker = new WidgetTracker({\n        namespace: 'htmlviewer'\n    });\n    // Handle state restoration.\n    if (restorer) {\n        void restorer.restore(tracker, {\n            command: 'docmanager:open',\n            args: widget => ({ path: widget.context.path, factory: 'HTML Viewer' }),\n            name: widget => widget.context.path\n        });\n    }\n    let trustByDefault = false;\n    if (settingRegistry) {\n        const loadSettings = settingRegistry.load(HTML_VIEWER_PLUGIN_ID);\n        const updateSettings = (settings) => {\n            trustByDefault = settings.get('trustByDefault').composite;\n        };\n        Promise.all([loadSettings, app.restored])\n            .then(([settings]) => {\n            updateSettings(settings);\n            settings.changed.connect(settings => {\n                updateSettings(settings);\n            });\n        })\n            .catch((reason) => {\n            console.error(reason.message);\n        });\n    }\n    app.docRegistry.addWidgetFactory(factory);\n    factory.widgetCreated.connect((sender, widget) => {\n        var _a, _b;\n        // Track the widget.\n        void tracker.add(widget);\n        // Notify the widget tracker if restore data needs to update.\n        widget.context.pathChanged.connect(() => {\n            void tracker.save(widget);\n        });\n        // Notify the application when the trust state changes so it\n        // can update any renderings of the trust command.\n        widget.trustedChanged.connect(() => {\n            app.commands.notifyCommandChanged(CommandIDs.trustHTML);\n        });\n        widget.trusted = trustByDefault;\n        widget.title.icon = ft.icon;\n        widget.title.iconClass = (_a = ft.iconClass) !== null && _a !== void 0 ? _a : '';\n        widget.title.iconLabel = (_b = ft.iconLabel) !== null && _b !== void 0 ? _b : '';\n    });\n    // Add a command to trust the active HTML document,\n    // allowing script executions in its context.\n    app.commands.addCommand(CommandIDs.trustHTML, {\n        label: trans.__('Trust HTML File'),\n        caption: trans.__(`Whether the HTML file is trusted.\n    Trusting the file allows scripts to run in it,\n    which may result in security risks.\n    Only enable for files you trust.`),\n        isEnabled: () => !!tracker.currentWidget,\n        isToggled: () => {\n            const current = tracker.currentWidget;\n            if (!current) {\n                return false;\n            }\n            const sandbox = current.content.sandbox;\n            return sandbox.indexOf('allow-scripts') !== -1;\n        },\n        execute: () => {\n            const current = tracker.currentWidget;\n            if (!current) {\n                return;\n            }\n            current.trusted = !current.trusted;\n        }\n    });\n    tracker.currentChanged.connect(() => {\n        app.commands.notifyCommandChanged(CommandIDs.trustHTML);\n    });\n    if (palette) {\n        palette.addItem({\n            command: CommandIDs.trustHTML,\n            category: trans.__('File Operations')\n        });\n    }\n    return tracker;\n}\n/**\n * Export the plugins as default.\n */\nexport default htmlPlugin;\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\n\nimport './base.css';\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/htmlviewer/style/index.js';\n","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { Token } from '@lumino/coreutils';\n/**\n * The HTML viewer tracker token.\n */\nexport const IHTMLViewerTracker = new Token('@jupyterlab/htmlviewer:IHTMLViewerTracker', `A widget tracker for rendered HTML documents.\n  Use this if you want to be able to iterate over and interact with HTML documents\n  viewed by the application.`);\n//# sourceMappingURL=tokens.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { ActivityMonitor } from '@jupyterlab/coreutils';\nimport { ABCWidgetFactory, DocumentWidget } from '@jupyterlab/docregistry';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { IFrame, ReactWidget, refreshIcon, ToolbarButton, ToolbarButtonComponent, UseSignal } from '@jupyterlab/ui-components';\nimport { Signal } from '@lumino/signaling';\nimport * as React from 'react';\n/**\n * The timeout to wait for change activity to have ceased before rendering.\n */\nconst RENDER_TIMEOUT = 1000;\n/**\n * The CSS class to add to the HTMLViewer Widget.\n */\nconst CSS_CLASS = 'jp-HTMLViewer';\nconst UNTRUSTED_LINK_STYLE = (options) => `<style>\na[target=\"_blank\"],\narea[target=\"_blank\"],\nform[target=\"_blank\"],\nbutton[formtarget=\"_blank\"],\ninput[formtarget=\"_blank\"][type=\"image\"],\ninput[formtarget=\"_blank\"][type=\"submit\"] {\n  cursor: not-allowed !important;\n}\na[target=\"_blank\"]:hover::after,\narea[target=\"_blank\"]:hover::after,\nform[target=\"_blank\"]:hover::after,\nbutton[formtarget=\"_blank\"]:hover::after,\ninput[formtarget=\"_blank\"][type=\"image\"]:hover::after,\ninput[formtarget=\"_blank\"][type=\"submit\"]:hover::after {\n  content: \"${options.warning}\";\n  box-sizing: border-box;\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  z-index: 1000;\n  border: 2px solid #e65100;\n  background-color: #ffb74d;\n  color: black;\n  font-family: system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI', helvetica, arial, sans-serif;\n  text-align: center;\n}\n</style>`;\n/**\n * A viewer widget for HTML documents.\n *\n * #### Notes\n * The iframed HTML document can pose a potential security risk,\n * since it can execute Javascript, and make same-origin requests\n * to the server, thereby executing arbitrary Javascript.\n *\n * Here, we sandbox the iframe so that it can't execute Javascript\n * or launch any popups. We allow one exception: 'allow-same-origin'\n * requests, so that local HTML documents can access CSS, images,\n * etc from the files system.\n */\nexport class HTMLViewer extends DocumentWidget {\n    /**\n     * Create a new widget for rendering HTML.\n     */\n    constructor(options) {\n        super({\n            ...options,\n            content: new IFrame({\n                sandbox: ['allow-same-origin'],\n                loading: 'lazy'\n            })\n        });\n        this._renderPending = false;\n        this._parser = new DOMParser();\n        this._monitor = null;\n        this._objectUrl = '';\n        this._trustedChanged = new Signal(this);\n        this.translator = options.translator || nullTranslator;\n        this.content.addClass(CSS_CLASS);\n        void this.context.ready.then(() => {\n            this.update();\n            // Throttle the rendering rate of the widget.\n            this._monitor = new ActivityMonitor({\n                signal: this.context.model.contentChanged,\n                timeout: RENDER_TIMEOUT\n            });\n            this._monitor.activityStopped.connect(this.update, this);\n        });\n    }\n    /**\n     * Whether the HTML document is trusted. If trusted,\n     * it can execute Javascript in the iframe sandbox.\n     */\n    get trusted() {\n        return this.content.sandbox.indexOf('allow-scripts') !== -1;\n    }\n    set trusted(value) {\n        if (this.trusted === value) {\n            return;\n        }\n        if (value) {\n            this.content.sandbox = Private.trusted;\n        }\n        else {\n            this.content.sandbox = Private.untrusted;\n        }\n        this.update(); // Force a refresh.\n        this._trustedChanged.emit(value);\n    }\n    /**\n     * Emitted when the trust state of the document changes.\n     */\n    get trustedChanged() {\n        return this._trustedChanged;\n    }\n    /**\n     * Dispose of resources held by the html viewer.\n     */\n    dispose() {\n        if (this._objectUrl) {\n            try {\n                URL.revokeObjectURL(this._objectUrl);\n            }\n            catch (error) {\n                /* no-op */\n            }\n        }\n        super.dispose();\n    }\n    /**\n     * Handle and update request.\n     */\n    onUpdateRequest() {\n        if (this._renderPending) {\n            return;\n        }\n        this._renderPending = true;\n        void this._renderModel().then(() => (this._renderPending = false));\n    }\n    /**\n     * Render HTML in IFrame into this widget's node.\n     */\n    async _renderModel() {\n        let data = this.context.model.toString();\n        data = await this._setupDocument(data);\n        // Set the new iframe url.\n        const blob = new Blob([data], { type: 'text/html' });\n        const oldUrl = this._objectUrl;\n        this._objectUrl = URL.createObjectURL(blob);\n        this.content.url = this._objectUrl;\n        // Release reference to any previous object url.\n        if (oldUrl) {\n            try {\n                URL.revokeObjectURL(oldUrl);\n            }\n            catch (error) {\n                /* no-op */\n            }\n        }\n        return;\n    }\n    /**\n     * Set a <base> element in the HTML string so that the iframe\n     * can correctly dereference relative links.\n     */\n    async _setupDocument(data) {\n        const doc = this._parser.parseFromString(data, 'text/html');\n        let base = doc.querySelector('base');\n        if (!base) {\n            base = doc.createElement('base');\n            doc.head.insertBefore(base, doc.head.firstChild);\n        }\n        const path = this.context.path;\n        const baseUrl = await this.context.urlResolver.getDownloadUrl(path);\n        // Set the base href, plus a fake name for the url of this\n        // document. The fake name doesn't really matter, as long\n        // as the document can dereference relative links to resources\n        // (e.g. CSS and scripts).\n        base.href = baseUrl;\n        base.target = '_self';\n        // Inject dynamic style for links if the document is not trusted\n        if (!this.trusted) {\n            const trans = this.translator.load('jupyterlab');\n            const warning = trans.__('Action disabled as the file is not trusted.');\n            doc.body.insertAdjacentHTML('beforeend', UNTRUSTED_LINK_STYLE({ warning }));\n        }\n        return doc.documentElement.innerHTML;\n    }\n}\n/**\n * A widget factory for HTMLViewers.\n */\nexport class HTMLViewerFactory extends ABCWidgetFactory {\n    /**\n     * Create a new widget given a context.\n     */\n    createNewWidget(context) {\n        return new HTMLViewer({ context });\n    }\n    /**\n     * Default factory for toolbar items to be added after the widget is created.\n     */\n    defaultToolbarFactory(widget) {\n        return [\n            // Make a refresh button for the toolbar.\n            {\n                name: 'refresh',\n                widget: ToolbarItems.createRefreshButton(widget, this.translator)\n            },\n            // Make a trust button for the toolbar.\n            {\n                name: 'trust',\n                widget: ToolbarItems.createTrustButton(widget, this.translator)\n            }\n        ];\n    }\n}\n/**\n * A namespace for toolbar items generator\n */\nexport var ToolbarItems;\n(function (ToolbarItems) {\n    /**\n     * Create the refresh button\n     *\n     * @param widget HTML viewer widget\n     * @param translator Application translator object\n     * @returns Toolbar item button\n     */\n    function createRefreshButton(widget, translator) {\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        return new ToolbarButton({\n            icon: refreshIcon,\n            onClick: async () => {\n                if (!widget.context.model.dirty) {\n                    await widget.context.revert();\n                    widget.update();\n                }\n            },\n            tooltip: trans.__('Rerender HTML Document')\n        });\n    }\n    ToolbarItems.createRefreshButton = createRefreshButton;\n    /**\n     * Create the trust button\n     *\n     * @param document HTML viewer widget\n     * @param translator Application translator object\n     * @returns Toolbar item button\n     */\n    function createTrustButton(document, translator) {\n        return ReactWidget.create(React.createElement(Private.TrustButtonComponent, { htmlDocument: document, translator: translator }));\n    }\n    ToolbarItems.createTrustButton = createTrustButton;\n})(ToolbarItems || (ToolbarItems = {}));\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Sandbox exceptions for untrusted HTML.\n     */\n    Private.untrusted = [];\n    /**\n     * Sandbox exceptions for trusted HTML.\n     */\n    Private.trusted = [\n        'allow-scripts',\n        'allow-popups'\n    ];\n    /**\n     * React component for a trusted button.\n     *\n     * This wraps the ToolbarButtonComponent and watches for trust changes.\n     */\n    function TrustButtonComponent(props) {\n        const translator = props.translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        return (React.createElement(UseSignal, { signal: props.htmlDocument.trustedChanged, initialSender: props.htmlDocument }, () => (React.createElement(ToolbarButtonComponent, { className: \"\", onClick: () => (props.htmlDocument.trusted = !props.htmlDocument.trusted), tooltip: trans.__(`Whether the HTML file is trusted.\nTrusting the file allows opening pop-ups and running scripts\nwhich may result in security risks.\nOnly enable for files you trust.`), label: props.htmlDocument.trusted\n                ? trans.__('Distrust HTML')\n                : trans.__('Trust HTML') }))));\n    }\n    Private.TrustButtonComponent = TrustButtonComponent;\n})(Private || (Private = {}));\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module htmlviewer\n */\nexport * from './tokens';\nexport * from './widget';\n//# sourceMappingURL=index.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module hub-extension\n */\nimport { ConnectionLost, IConnectionLost, JupyterFrontEnd, JupyterLab } from '@jupyterlab/application';\nimport { Dialog, ICommandPalette, showDialog } from '@jupyterlab/apputils';\nimport { URLExt } from '@jupyterlab/coreutils';\nimport { ITranslator } from '@jupyterlab/translation';\n/**\n * The command IDs used by the plugin.\n */\nexport var CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.controlPanel = 'hub:control-panel';\n    CommandIDs.logout = 'hub:logout';\n    CommandIDs.restart = 'hub:restart';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * Activate the jupyterhub extension.\n */\nfunction activateHubExtension(app, paths, translator, palette) {\n    const trans = translator.load('jupyterlab');\n    const hubHost = paths.urls.hubHost || '';\n    const hubPrefix = paths.urls.hubPrefix || '';\n    const hubUser = paths.urls.hubUser || '';\n    const hubServerName = paths.urls.hubServerName || '';\n    const baseUrl = paths.urls.base;\n    // Bail if not running on JupyterHub.\n    if (!hubPrefix) {\n        return;\n    }\n    console.debug('hub-extension: Found configuration ', {\n        hubHost: hubHost,\n        hubPrefix: hubPrefix\n    });\n    // If hubServerName is set, use JupyterHub 1.0 URL.\n    const spawnBase = URLExt.join(hubPrefix, 'spawn');\n    let restartUrl = hubHost + spawnBase;\n    if (hubServerName) {\n        const suffix = URLExt.join(spawnBase, hubUser, hubServerName);\n        if (!suffix.startsWith(spawnBase)) {\n            throw new Error('Can only be used for spawn requests');\n        }\n        restartUrl = hubHost + suffix;\n    }\n    const { commands } = app;\n    commands.addCommand(CommandIDs.restart, {\n        label: trans.__('Restart Server'),\n        caption: trans.__('Request that the Hub restart this server'),\n        execute: () => {\n            window.open(restartUrl, '_blank');\n        }\n    });\n    commands.addCommand(CommandIDs.controlPanel, {\n        label: trans.__('Hub Control Panel'),\n        caption: trans.__('Open the Hub control panel in a new browser tab'),\n        execute: () => {\n            window.open(hubHost + URLExt.join(hubPrefix, 'home'), '_blank');\n        }\n    });\n    commands.addCommand(CommandIDs.logout, {\n        label: trans.__('Log Out'),\n        caption: trans.__('Log out of the Hub'),\n        execute: () => {\n            window.location.href = hubHost + URLExt.join(baseUrl, 'logout');\n        }\n    });\n    // Add palette items.\n    if (palette) {\n        const category = trans.__('Hub');\n        palette.addItem({ category, command: CommandIDs.controlPanel });\n        palette.addItem({ category, command: CommandIDs.logout });\n    }\n}\n/**\n * Initialization data for the hub-extension.\n */\nconst hubExtension = {\n    activate: activateHubExtension,\n    id: '@jupyterlab/hub-extension:plugin',\n    description: 'Registers commands related to the hub server',\n    requires: [JupyterFrontEnd.IPaths, ITranslator],\n    optional: [ICommandPalette],\n    autoStart: true\n};\n/**\n * Plugin to load menu description based on settings file\n */\nconst hubExtensionMenu = {\n    activate: () => void 0,\n    id: '@jupyterlab/hub-extension:menu',\n    description: 'Adds hub related commands to the menu.',\n    autoStart: true\n};\n/**\n * The default JupyterLab connection lost provider. This may be overridden\n * to provide custom behavior when a connection to the server is lost.\n *\n * If the application is being deployed within a JupyterHub context,\n * this will provide a dialog that prompts the user to restart the server.\n * Otherwise, it shows an error dialog.\n */\nconst connectionlost = {\n    id: '@jupyterlab/hub-extension:connectionlost',\n    description: 'Provides a service to be notified when the connection to the hub server is lost.',\n    requires: [JupyterFrontEnd.IPaths, ITranslator],\n    optional: [JupyterLab.IInfo],\n    activate: (app, paths, translator, info) => {\n        const trans = translator.load('jupyterlab');\n        const hubPrefix = paths.urls.hubPrefix || '';\n        const baseUrl = paths.urls.base;\n        // Return the default error message if not running on JupyterHub.\n        if (!hubPrefix) {\n            return ConnectionLost;\n        }\n        // If we are running on JupyterHub, return a dialog\n        // that prompts the user to restart their server.\n        let showingError = false;\n        const onConnectionLost = async (manager, err) => {\n            if (showingError) {\n                return;\n            }\n            showingError = true;\n            if (info) {\n                info.isConnected = false;\n            }\n            const result = await showDialog({\n                title: trans.__('Server unavailable or unreachable'),\n                body: trans.__('Your server at %1 is not running.\\nWould you like to restart it?', baseUrl),\n                buttons: [\n                    Dialog.okButton({ label: trans.__('Restart') }),\n                    Dialog.cancelButton({ label: trans.__('Dismiss') })\n                ]\n            });\n            if (info) {\n                info.isConnected = true;\n            }\n            showingError = false;\n            if (result.button.accept) {\n                await app.commands.execute(CommandIDs.restart);\n            }\n        };\n        return onConnectionLost;\n    },\n    autoStart: true,\n    provides: IConnectionLost\n};\nexport default [\n    hubExtension,\n    hubExtensionMenu,\n    connectionlost\n];\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/application/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module imageviewer-extension\n */\nimport { ILayoutRestorer } from '@jupyterlab/application';\nimport { ICommandPalette, WidgetTracker } from '@jupyterlab/apputils';\nimport { IImageTracker, ImageViewerFactory } from '@jupyterlab/imageviewer';\nimport { ITranslator } from '@jupyterlab/translation';\n/**\n * The command IDs used by the image widget plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.resetImage = 'imageviewer:reset-image';\n    CommandIDs.zoomIn = 'imageviewer:zoom-in';\n    CommandIDs.zoomOut = 'imageviewer:zoom-out';\n    CommandIDs.flipHorizontal = 'imageviewer:flip-horizontal';\n    CommandIDs.flipVertical = 'imageviewer:flip-vertical';\n    CommandIDs.rotateClockwise = 'imageviewer:rotate-clockwise';\n    CommandIDs.rotateCounterclockwise = 'imageviewer:rotate-counterclockwise';\n    CommandIDs.invertColors = 'imageviewer:invert-colors';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The list of file types for images.\n */\nconst FILE_TYPES = ['png', 'gif', 'jpeg', 'bmp', 'ico', 'tiff'];\n/**\n * The name of the factory that creates image widgets.\n */\nconst FACTORY = 'Image';\n/**\n * The name of the factory that creates image widgets.\n */\nconst TEXT_FACTORY = 'Image (Text)';\n/**\n * The list of file types for images with optional text modes.\n */\nconst TEXT_FILE_TYPES = ['svg', 'xbm'];\n/**\n * The test pattern for text file types in paths.\n */\nconst TEXT_FILE_REGEX = new RegExp(`[.](${TEXT_FILE_TYPES.join('|')})$`);\n/**\n * The image file handler extension.\n */\nconst plugin = {\n    activate,\n    description: 'Adds image viewer and provide its tracker.',\n    id: '@jupyterlab/imageviewer-extension:plugin',\n    provides: IImageTracker,\n    requires: [ITranslator],\n    optional: [ICommandPalette, ILayoutRestorer],\n    autoStart: true\n};\n/**\n * Export the plugin as default.\n */\nexport default plugin;\n/**\n * Activate the image widget extension.\n */\nfunction activate(app, translator, palette, restorer) {\n    const trans = translator.load('jupyterlab');\n    const namespace = 'image-widget';\n    function onWidgetCreated(sender, widget) {\n        var _a, _b;\n        // Notify the widget tracker if restore data needs to update.\n        widget.context.pathChanged.connect(() => {\n            void tracker.save(widget);\n        });\n        void tracker.add(widget);\n        const types = app.docRegistry.getFileTypesForPath(widget.context.path);\n        if (types.length > 0) {\n            widget.title.icon = types[0].icon;\n            widget.title.iconClass = (_a = types[0].iconClass) !== null && _a !== void 0 ? _a : '';\n            widget.title.iconLabel = (_b = types[0].iconLabel) !== null && _b !== void 0 ? _b : '';\n        }\n    }\n    const factory = new ImageViewerFactory({\n        name: FACTORY,\n        label: trans.__('Image'),\n        modelName: 'base64',\n        fileTypes: [...FILE_TYPES, ...TEXT_FILE_TYPES],\n        defaultFor: FILE_TYPES,\n        readOnly: true\n    });\n    const textFactory = new ImageViewerFactory({\n        name: TEXT_FACTORY,\n        label: trans.__('Image (Text)'),\n        modelName: 'text',\n        fileTypes: TEXT_FILE_TYPES,\n        defaultFor: TEXT_FILE_TYPES,\n        readOnly: true\n    });\n    [factory, textFactory].forEach(factory => {\n        app.docRegistry.addWidgetFactory(factory);\n        factory.widgetCreated.connect(onWidgetCreated);\n    });\n    const tracker = new WidgetTracker({\n        namespace\n    });\n    if (restorer) {\n        // Handle state restoration.\n        void restorer.restore(tracker, {\n            command: 'docmanager:open',\n            args: widget => ({\n                path: widget.context.path,\n                factory: TEXT_FILE_REGEX.test(widget.context.path)\n                    ? TEXT_FACTORY\n                    : FACTORY\n            }),\n            name: widget => widget.context.path\n        });\n    }\n    addCommands(app, tracker, translator);\n    if (palette) {\n        const category = trans.__('Image Viewer');\n        [\n            CommandIDs.zoomIn,\n            CommandIDs.zoomOut,\n            CommandIDs.resetImage,\n            CommandIDs.rotateClockwise,\n            CommandIDs.rotateCounterclockwise,\n            CommandIDs.flipHorizontal,\n            CommandIDs.flipVertical,\n            CommandIDs.invertColors\n        ].forEach(command => {\n            palette.addItem({ command, category });\n        });\n    }\n    return tracker;\n}\n/**\n * Add the commands for the image widget.\n */\nfunction addCommands(app, tracker, translator) {\n    var _a;\n    const trans = translator.load('jupyterlab');\n    const { commands, shell } = app;\n    /**\n     * Whether there is an active image viewer.\n     */\n    function isEnabled() {\n        return (tracker.currentWidget !== null &&\n            tracker.currentWidget === shell.currentWidget);\n    }\n    commands.addCommand(CommandIDs.zoomIn, {\n        execute: zoomIn,\n        label: trans.__('Zoom In'),\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.zoomOut, {\n        execute: zoomOut,\n        label: trans.__('Zoom Out'),\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.resetImage, {\n        execute: resetImage,\n        label: trans.__('Reset Image'),\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.rotateClockwise, {\n        execute: rotateClockwise,\n        label: trans.__('Rotate Clockwise'),\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.rotateCounterclockwise, {\n        execute: rotateCounterclockwise,\n        label: trans.__('Rotate Counterclockwise'),\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.flipHorizontal, {\n        execute: flipHorizontal,\n        label: trans.__('Flip image horizontally'),\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.flipVertical, {\n        execute: flipVertical,\n        label: trans.__('Flip image vertically'),\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.invertColors, {\n        execute: invertColors,\n        label: trans.__('Invert Colors'),\n        isEnabled\n    });\n    const notify = () => {\n        Object.values(CommandIDs).forEach(id => commands.notifyCommandChanged(id));\n    };\n    // All commands with isEnabled defined directly or in a semantic commands\n    tracker.currentChanged.connect(notify);\n    (_a = shell.currentChanged) === null || _a === void 0 ? void 0 : _a.connect(notify);\n    function zoomIn() {\n        var _a;\n        const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n        if (widget) {\n            widget.scale = widget.scale > 1 ? widget.scale + 0.5 : widget.scale * 2;\n        }\n    }\n    function zoomOut() {\n        var _a;\n        const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n        if (widget) {\n            widget.scale = widget.scale > 1 ? widget.scale - 0.5 : widget.scale / 2;\n        }\n    }\n    function resetImage() {\n        var _a;\n        const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n        if (widget) {\n            widget.scale = 1;\n            widget.colorinversion = 0;\n            widget.resetRotationFlip();\n        }\n    }\n    function rotateClockwise() {\n        var _a;\n        const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n        if (widget) {\n            widget.rotateClockwise();\n        }\n    }\n    function rotateCounterclockwise() {\n        var _a;\n        const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n        if (widget) {\n            widget.rotateCounterclockwise();\n        }\n    }\n    function flipHorizontal() {\n        var _a;\n        const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n        if (widget) {\n            widget.flipHorizontal();\n        }\n    }\n    function flipVertical() {\n        var _a;\n        const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n        if (widget) {\n            widget.flipVertical();\n        }\n    }\n    function invertColors() {\n        var _a;\n        const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n        if (widget) {\n            widget.colorinversion += 1;\n            widget.colorinversion %= 2;\n        }\n    }\n}\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\n\nimport './base.css';\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/imageviewer/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The image tracker token.\n */\nexport const IImageTracker = new Token('@jupyterlab/imageviewer:IImageTracker', `A widget tracker for images.\n  Use this if you want to be able to iterate over and interact with images\n  viewed by the application.`);\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { Printing } from '@jupyterlab/apputils';\nimport { ABCWidgetFactory, DocumentWidget } from '@jupyterlab/docregistry';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { Widget } from '@lumino/widgets';\n/**\n * The class name added to a imageviewer.\n */\nconst IMAGE_CLASS = 'jp-ImageViewer';\n/**\n * A widget for images.\n */\nexport class ImageViewer extends Widget {\n    /**\n     * Construct a new image widget.\n     */\n    constructor(context) {\n        super();\n        this._scale = 1;\n        this._matrix = [1, 0, 0, 1];\n        this._colorinversion = 0;\n        this._ready = new PromiseDelegate();\n        this.context = context;\n        this.node.tabIndex = 0;\n        this.addClass(IMAGE_CLASS);\n        this._img = document.createElement('img');\n        this.node.appendChild(this._img);\n        this._onTitleChanged();\n        context.pathChanged.connect(this._onTitleChanged, this);\n        void context.ready.then(() => {\n            if (this.isDisposed) {\n                return;\n            }\n            const contents = context.contentsModel;\n            this._mimeType = contents.mimetype;\n            this._render();\n            context.model.contentChanged.connect(this.update, this);\n            context.fileChanged.connect(this.update, this);\n            this._ready.resolve(void 0);\n        });\n    }\n    /**\n     * Print in iframe.\n     */\n    [Printing.symbol]() {\n        return () => Printing.printWidget(this);\n    }\n    /**\n     * A promise that resolves when the image viewer is ready.\n     */\n    get ready() {\n        return this._ready.promise;\n    }\n    /**\n     * The scale factor for the image.\n     */\n    get scale() {\n        return this._scale;\n    }\n    set scale(value) {\n        if (value === this._scale) {\n            return;\n        }\n        this._scale = value;\n        this._updateStyle();\n    }\n    /**\n     * The color inversion of the image.\n     */\n    get colorinversion() {\n        return this._colorinversion;\n    }\n    set colorinversion(value) {\n        if (value === this._colorinversion) {\n            return;\n        }\n        this._colorinversion = value;\n        this._updateStyle();\n    }\n    /**\n     * Dispose of resources held by the image viewer.\n     */\n    dispose() {\n        if (this._img.src) {\n            URL.revokeObjectURL(this._img.src || '');\n        }\n        super.dispose();\n    }\n    /**\n     * Reset rotation and flip transformations.\n     */\n    resetRotationFlip() {\n        this._matrix = [1, 0, 0, 1];\n        this._updateStyle();\n    }\n    /**\n     * Rotate the image counter-clockwise (left).\n     */\n    rotateCounterclockwise() {\n        this._matrix = Private.prod(this._matrix, Private.rotateCounterclockwiseMatrix);\n        this._updateStyle();\n    }\n    /**\n     * Rotate the image clockwise (right).\n     */\n    rotateClockwise() {\n        this._matrix = Private.prod(this._matrix, Private.rotateClockwiseMatrix);\n        this._updateStyle();\n    }\n    /**\n     * Flip the image horizontally.\n     */\n    flipHorizontal() {\n        this._matrix = Private.prod(this._matrix, Private.flipHMatrix);\n        this._updateStyle();\n    }\n    /**\n     * Flip the image vertically.\n     */\n    flipVertical() {\n        this._matrix = Private.prod(this._matrix, Private.flipVMatrix);\n        this._updateStyle();\n    }\n    /**\n     * Handle `update-request` messages for the widget.\n     */\n    onUpdateRequest(msg) {\n        if (this.isDisposed || !this.context.isReady) {\n            return;\n        }\n        this._render();\n    }\n    /**\n     * Handle `'activate-request'` messages.\n     */\n    onActivateRequest(msg) {\n        this.node.focus();\n    }\n    /**\n     * Handle a change to the title.\n     */\n    _onTitleChanged() {\n        this.title.label = PathExt.basename(this.context.localPath);\n    }\n    /**\n     * Render the widget content.\n     */\n    _render() {\n        const context = this.context;\n        const cm = context.contentsModel;\n        if (!cm) {\n            return;\n        }\n        const oldurl = this._img.src || '';\n        let content = context.model.toString();\n        if (cm.format === 'base64') {\n            this._img.src = `data:${this._mimeType};base64,${content}`;\n        }\n        else {\n            const a = new Blob([content], { type: this._mimeType });\n            this._img.src = URL.createObjectURL(a);\n        }\n        URL.revokeObjectURL(oldurl);\n    }\n    /**\n     * Update the image CSS style, including the transform and filter.\n     */\n    _updateStyle() {\n        const [a, b, c, d] = this._matrix;\n        const [tX, tY] = Private.prodVec(this._matrix, [1, 1]);\n        const transform = `matrix(${a}, ${b}, ${c}, ${d}, 0, 0) translate(${tX < 0 ? -100 : 0}%, ${tY < 0 ? -100 : 0}%) `;\n        this._img.style.transform = `scale(${this._scale}) ${transform}`;\n        this._img.style.filter = `invert(${this._colorinversion})`;\n    }\n}\n/**\n * A widget factory for images.\n */\nexport class ImageViewerFactory extends ABCWidgetFactory {\n    /**\n     * Create a new widget given a context.\n     */\n    createNewWidget(context) {\n        const content = new ImageViewer(context);\n        const widget = new DocumentWidget({ content, context });\n        return widget;\n    }\n}\n/**\n * A namespace for image widget private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Multiply 2x2 matrices.\n     */\n    function prod([a11, a12, a21, a22], [b11, b12, b21, b22]) {\n        return [\n            a11 * b11 + a12 * b21,\n            a11 * b12 + a12 * b22,\n            a21 * b11 + a22 * b21,\n            a21 * b12 + a22 * b22\n        ];\n    }\n    Private.prod = prod;\n    /**\n     * Multiply a 2x2 matrix and a 2x1 vector.\n     */\n    function prodVec([a11, a12, a21, a22], [b1, b2]) {\n        return [a11 * b1 + a12 * b2, a21 * b1 + a22 * b2];\n    }\n    Private.prodVec = prodVec;\n    /**\n     * Clockwise rotation transformation matrix.\n     */\n    Private.rotateClockwiseMatrix = [0, 1, -1, 0];\n    /**\n     * Counter-clockwise rotation transformation matrix.\n     */\n    Private.rotateCounterclockwiseMatrix = [0, -1, 1, 0];\n    /**\n     * Horizontal flip transformation matrix.\n     */\n    Private.flipHMatrix = [-1, 0, 0, 1];\n    /**\n     * Vertical flip transformation matrix.\n     */\n    Private.flipVMatrix = [1, 0, 0, -1];\n})(Private || (Private = {}));\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module imageviewer\n */\nexport * from './tokens';\nexport * from './widget';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module javascript-extension\n */\nimport { RenderedJavaScript } from '@jupyterlab/rendermime';\nexport const TEXT_JAVASCRIPT_MIMETYPE = 'text/javascript';\nexport const APPLICATION_JAVASCRIPT_MIMETYPE = 'application/javascript';\nfunction evalInContext(code, element, document, window) {\n    // eslint-disable-next-line\n    return eval(code);\n}\nexport class ExperimentalRenderedJavascript extends RenderedJavaScript {\n    render(model) {\n        const trans = this.translator.load('jupyterlab');\n        const renderJavascript = () => {\n            try {\n                const data = model.data[this.mimeType];\n                if (data) {\n                    evalInContext(data, this.node, document, window);\n                }\n                return Promise.resolve();\n            }\n            catch (error) {\n                return Promise.reject(error);\n            }\n        };\n        if (!model.trusted) {\n            // If output is not trusted or if arbitrary Javascript execution is not enabled, render an informative error message\n            const pre = document.createElement('pre');\n            pre.textContent = trans.__('Are you sure that you want to run arbitrary Javascript within your JupyterLab session?');\n            const button = document.createElement('button');\n            button.textContent = trans.__('Run');\n            this.node.appendChild(pre);\n            this.node.appendChild(button);\n            button.onclick = event => {\n                this.node.textContent = '';\n                void renderJavascript();\n            };\n            return Promise.resolve();\n        }\n        return renderJavascript();\n    }\n}\n/**\n * A mime renderer factory for text/javascript data.\n */\nexport const rendererFactory = {\n    safe: false,\n    mimeTypes: [TEXT_JAVASCRIPT_MIMETYPE, APPLICATION_JAVASCRIPT_MIMETYPE],\n    createRenderer: options => new ExperimentalRenderedJavascript(options)\n};\nconst extension = {\n    id: '@jupyterlab/javascript-extension:factory',\n    description: 'Adds renderer for JavaScript content.',\n    rendererFactory,\n    rank: 0,\n    dataType: 'string'\n};\nexport default extension;\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/rendermime/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { jupyterHighlightStyle } from '@jupyterlab/codemirror';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { InputGroup } from '@jupyterlab/ui-components';\nimport { tags } from '@lezer/highlight';\nimport { JSONExt } from '@lumino/coreutils';\nimport * as React from 'react';\nimport Highlighter from 'react-highlight-words';\nimport { JSONTree } from 'react-json-tree';\nimport { StyleModule } from 'style-mod';\n/**\n * Get the CodeMirror style for a given tag.\n */\nfunction getStyle(tag) {\n    var _a;\n    return (_a = jupyterHighlightStyle.style([tag])) !== null && _a !== void 0 ? _a : '';\n}\n/**\n * A component that renders JSON data as a collapsible tree.\n */\nexport class Component extends React.Component {\n    constructor() {\n        super(...arguments);\n        this.state = { filter: '', value: '' };\n        this.timer = 0;\n        this.handleChange = (event) => {\n            const { value } = event.target;\n            this.setState({ value });\n            window.clearTimeout(this.timer);\n            this.timer = window.setTimeout(() => {\n                this.setState({ filter: value });\n            }, 300);\n        };\n    }\n    componentDidMount() {\n        StyleModule.mount(document, jupyterHighlightStyle.module);\n    }\n    render() {\n        const translator = this.props.translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        const { data, metadata, forwardedRef } = this.props;\n        const root = metadata && metadata.root ? metadata.root : 'root';\n        const keyPaths = this.state.filter\n            ? filterPaths(data, this.state.filter, [root])\n            : [root];\n        return (React.createElement(\"div\", { className: \"container\", ref: forwardedRef },\n            React.createElement(InputGroup, { className: \"filter\", type: \"text\", placeholder: trans.__('Find…'), onChange: this.handleChange, value: this.state.value, rightIcon: \"ui-components:search\" }),\n            React.createElement(JSONTree, { data: data, collectionLimit: 100, theme: {\n                    extend: theme,\n                    valueLabel: getStyle(tags.variableName),\n                    valueText: getStyle(tags.string),\n                    nestedNodeItemString: getStyle(tags.comment)\n                }, invertTheme: false, keyPath: [root], getItemString: (type, data, itemType, itemString) => Array.isArray(data) ? (\n                // Always display array type and the number of items i.e. \"[] 2 items\".\n                React.createElement(\"span\", null,\n                    itemType,\n                    \" \",\n                    itemString)) : Object.keys(data).length === 0 ? (\n                // Only display object type when it's empty i.e. \"{}\".\n                React.createElement(\"span\", null, itemType)) : (null // Upstream typings don't accept null, but it should be ok\n                ), labelRenderer: ([label, type]) => {\n                    return (React.createElement(\"span\", { className: getStyle(tags.keyword) },\n                        React.createElement(Highlighter, { searchWords: [this.state.filter], textToHighlight: `${label}`, highlightClassName: \"jp-mod-selected\" })));\n                }, valueRenderer: raw => {\n                    let className = getStyle(tags.string);\n                    if (typeof raw === 'number') {\n                        className = getStyle(tags.number);\n                    }\n                    if (raw === 'true' || raw === 'false') {\n                        className = getStyle(tags.keyword);\n                    }\n                    return (React.createElement(\"span\", { className: className },\n                        React.createElement(Highlighter, { searchWords: [this.state.filter], textToHighlight: `${raw}`, highlightClassName: \"jp-mod-selected\" })));\n                }, shouldExpandNodeInitially: (keyPath, data, level) => metadata && metadata.expanded\n                    ? true\n                    : keyPaths.join(',').includes(keyPath.join(',')) })));\n    }\n}\n// Provide an invalid theme object (this is on purpose!) to invalidate the\n// react-json-tree's inline styles that override CodeMirror CSS classes\nconst theme = {\n    scheme: 'jupyter',\n    base00: 'invalid',\n    base01: 'invalid',\n    base02: 'invalid',\n    base03: 'invalid',\n    base04: 'invalid',\n    base05: 'invalid',\n    base06: 'invalid',\n    base07: 'invalid',\n    base08: 'invalid',\n    base09: 'invalid',\n    base0A: 'invalid',\n    base0B: 'invalid',\n    base0C: 'invalid',\n    base0D: 'invalid',\n    base0E: 'invalid',\n    base0F: 'invalid',\n    author: 'invalid'\n};\nfunction objectIncludes(data, query) {\n    return JSON.stringify(data).includes(query);\n}\nfunction filterPaths(data, query, parent = ['root']) {\n    if (JSONExt.isArray(data)) {\n        return data.reduce((result, item, index) => {\n            if (item && typeof item === 'object' && objectIncludes(item, query)) {\n                return [\n                    ...result,\n                    [index, ...parent].join(','),\n                    ...filterPaths(item, query, [index, ...parent])\n                ];\n            }\n            return result;\n        }, []);\n    }\n    if (JSONExt.isObject(data)) {\n        return Object.keys(data).reduce((result, key) => {\n            const item = data[key];\n            if (item &&\n                typeof item === 'object' &&\n                (key.includes(query) || objectIncludes(item, query))) {\n                return [\n                    ...result,\n                    [key, ...parent].join(','),\n                    ...filterPaths(item, query, [key, ...parent])\n                ];\n            }\n            return result;\n        }, []);\n    }\n    return [];\n}\n//# sourceMappingURL=component.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module json-extension\n */\nimport { Printing } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { Widget } from '@lumino/widgets';\nimport * as React from 'react';\nimport { createRoot } from 'react-dom/client';\n/**\n * The CSS class to add to the JSON Widget.\n */\nconst CSS_CLASS = 'jp-RenderedJSON';\n/**\n * The MIME type for JSON.\n */\nexport const MIME_TYPE = 'application/json';\n// NOTE: not standardized yet\nexport const MIME_TYPES_JSONL = [\n    'text/jsonl',\n    'application/jsonl',\n    'application/json-lines'\n];\n/**\n * A renderer for JSON data.\n */\nexport class RenderedJSON extends Widget {\n    /**\n     * Create a new widget for rendering JSON.\n     */\n    constructor(options) {\n        super();\n        this._rootDOM = null;\n        this.addClass(CSS_CLASS);\n        this.addClass('CodeMirror');\n        this._mimeType = options.mimeType;\n        this.translator = options.translator || nullTranslator;\n    }\n    [Printing.symbol]() {\n        return () => Printing.printWidget(this);\n    }\n    /**\n     * Render JSON into this widget's node.\n     */\n    async renderModel(model) {\n        const { Component } = await import('./component');\n        let data;\n        // handle if json-lines format\n        if (MIME_TYPES_JSONL.indexOf(this._mimeType) >= 0) {\n            // convert into proper json\n            const lines = (model.data[this._mimeType] || '')\n                .trim()\n                .split(/\\n/);\n            data = JSON.parse(`[${lines.join(',')}]`);\n        }\n        else {\n            data = (model.data[this._mimeType] || {});\n        }\n        const metadata = (model.metadata[this._mimeType] || {});\n        if (this._rootDOM === null) {\n            this._rootDOM = createRoot(this.node);\n        }\n        return new Promise((resolve, reject) => {\n            this._rootDOM.render(React.createElement(Component, { data: data, metadata: metadata, translator: this.translator, forwardedRef: () => resolve() }));\n        });\n    }\n    /**\n     * Called before the widget is detached from the DOM.\n     */\n    onBeforeDetach(msg) {\n        // Unmount the component so it can tear down.\n        if (this._rootDOM) {\n            this._rootDOM.unmount();\n            this._rootDOM = null;\n        }\n    }\n}\n/**\n * A mime renderer factory for JSON data.\n */\nexport const rendererFactory = {\n    safe: true,\n    mimeTypes: [MIME_TYPE, ...MIME_TYPES_JSONL],\n    createRenderer: options => new RenderedJSON(options)\n};\nconst extensions = [\n    {\n        id: '@jupyterlab/json-extension:factory',\n        description: 'Adds renderer for JSON content.',\n        rendererFactory,\n        rank: 0,\n        dataType: 'json',\n        documentWidgetFactoryOptions: {\n            name: 'JSON',\n            // TODO: how to translate label of the factory?\n            primaryFileType: 'json',\n            fileTypes: ['json', 'notebook', 'geojson'],\n            defaultFor: ['json']\n        }\n    },\n    {\n        id: '@jupyterlab/json-lines-extension:factory',\n        description: 'Adds renderer for JSONLines content.',\n        rendererFactory,\n        rank: 0,\n        dataType: 'string',\n        documentWidgetFactoryOptions: {\n            name: 'JSONLines',\n            primaryFileType: 'jsonl',\n            fileTypes: ['jsonl', 'ndjson'],\n            defaultFor: ['jsonl', 'ndjson']\n        }\n    }\n];\nexport default extensions;\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/codemirror/style/index.js';\n\nimport './base.css';\n","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { Token } from '@lumino/coreutils';\n/**\n * The launcher token.\n */\nexport const ILauncher = new Token('@jupyterlab/launcher:ILauncher', `A service for the application activity launcher.\n  Use this to add your extension activities to the launcher panel.`);\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { showErrorMessage } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { classes, LabIcon, VDomModel, VDomRenderer } from '@jupyterlab/ui-components';\nimport { ArrayExt, map } from '@lumino/algorithm';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { AttachedProperty } from '@lumino/properties';\nimport { Widget } from '@lumino/widgets';\nimport * as React from 'react';\n/**\n * The class name added to Launcher instances.\n */\nconst LAUNCHER_CLASS = 'jp-Launcher';\n/**\n * LauncherModel keeps track of the path to working directory and has a list of\n * LauncherItems, which the Launcher will render.\n */\nexport class LauncherModel extends VDomModel {\n    constructor() {\n        super(...arguments);\n        this.itemsList = [];\n    }\n    /**\n     * Add a command item to the launcher, and trigger re-render event for parent\n     * widget.\n     *\n     * @param options - The specification options for a launcher item.\n     *\n     * @returns A disposable that will remove the item from Launcher, and trigger\n     * re-render event for parent widget.\n     *\n     */\n    add(options) {\n        // Create a copy of the options to circumvent mutations to the original.\n        const item = Private.createItem(options);\n        this.itemsList.push(item);\n        this.stateChanged.emit(void 0);\n        return new DisposableDelegate(() => {\n            ArrayExt.removeFirstOf(this.itemsList, item);\n            this.stateChanged.emit(void 0);\n        });\n    }\n    /**\n     * Return an iterator of launcher items.\n     */\n    items() {\n        return this.itemsList[Symbol.iterator]();\n    }\n}\n/**\n * A virtual-DOM-based widget for the Launcher.\n */\nexport class Launcher extends VDomRenderer {\n    /**\n     * Construct a new launcher widget.\n     */\n    constructor(options) {\n        super(options.model);\n        this._pending = false;\n        this._cwd = '';\n        this._cwd = options.cwd;\n        this.translator = options.translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        this._callback = options.callback;\n        this._commands = options.commands;\n        this.addClass(LAUNCHER_CLASS);\n    }\n    /**\n     * The cwd of the launcher.\n     */\n    get cwd() {\n        return this._cwd;\n    }\n    set cwd(value) {\n        this._cwd = value;\n        this.update();\n    }\n    /**\n     * Whether there is a pending item being launched.\n     */\n    get pending() {\n        return this._pending;\n    }\n    set pending(value) {\n        this._pending = value;\n    }\n    /**\n     * Render the launcher to virtual DOM nodes.\n     */\n    render() {\n        // Bail if there is no model.\n        if (!this.model) {\n            return null;\n        }\n        const knownCategories = [\n            this._trans.__('Notebook'),\n            this._trans.__('Console'),\n            this._trans.__('Other')\n        ];\n        const kernelCategories = [\n            this._trans.__('Notebook'),\n            this._trans.__('Console')\n        ];\n        // First group-by categories\n        const categories = Object.create(null);\n        for (const item of this.model.items()) {\n            const cat = item.category || this._trans.__('Other');\n            if (!(cat in categories)) {\n                categories[cat] = [];\n            }\n            categories[cat].push(item);\n        }\n        // Within each category sort by rank\n        for (const cat in categories) {\n            categories[cat] = categories[cat].sort((a, b) => {\n                return Private.sortCmp(a, b, this._cwd, this._commands);\n            });\n        }\n        // Variable to help create sections\n        const sections = [];\n        let section;\n        // Assemble the final ordered list of categories, beginning with\n        // KNOWN_CATEGORIES.\n        const orderedCategories = [];\n        for (const cat of knownCategories) {\n            orderedCategories.push(cat);\n        }\n        for (const cat in categories) {\n            if (knownCategories.indexOf(cat) === -1) {\n                orderedCategories.push(cat);\n            }\n        }\n        // Now create the sections for each category\n        orderedCategories.forEach(cat => {\n            if (!categories[cat]) {\n                return;\n            }\n            const item = categories[cat][0];\n            const args = { ...item.args, cwd: this.cwd };\n            const kernel = kernelCategories.indexOf(cat) > -1;\n            const iconClass = this._commands.iconClass(item.command, args);\n            const icon = this._commands.icon(item.command, args);\n            if (cat in categories) {\n                section = (React.createElement(\"div\", { className: \"jp-Launcher-section\", key: cat },\n                    React.createElement(\"div\", { className: \"jp-Launcher-sectionHeader\" },\n                        React.createElement(LabIcon.resolveReact, { icon: icon, iconClass: classes(iconClass, 'jp-Icon-cover'), stylesheet: \"launcherSection\", \"aria-hidden\": \"true\" }),\n                        React.createElement(\"h2\", { className: \"jp-Launcher-sectionTitle\" }, cat)),\n                    React.createElement(\"div\", { className: \"jp-Launcher-cardContainer\" }, Array.from(map(categories[cat], (item) => {\n                        return Card(kernel, item, this, this._commands, this._trans, this._callback);\n                    })))));\n                sections.push(section);\n            }\n        });\n        // Wrap the sections in body and content divs.\n        return (React.createElement(\"div\", { className: \"jp-Launcher-body\" },\n            React.createElement(\"div\", { className: \"jp-Launcher-content\" },\n                React.createElement(\"div\", { className: \"jp-Launcher-cwd\" },\n                    React.createElement(\"h3\", null, this.cwd)),\n                sections)));\n    }\n}\n/**\n * A pure tsx component for a launcher card.\n *\n * @param kernel - whether the item takes uses a kernel.\n *\n * @param item - the launcher item to render.\n *\n * @param launcher - the Launcher instance to which this is added.\n *\n * @param commands - the command registry holding the command of item.\n *\n * @param trans - the translation bundle.\n *\n * @returns a vdom `VirtualElement` for the launcher card.\n */\nfunction Card(kernel, item, launcher, commands, trans, launcherCallback) {\n    // Get some properties of the command\n    const command = item.command;\n    const args = { ...item.args, cwd: launcher.cwd };\n    const caption = commands.caption(command, args);\n    const label = commands.label(command, args);\n    const title = kernel ? label : caption || label;\n    // Build the onclick handler.\n    const onclick = () => {\n        // If an item has already been launched,\n        // don't try to launch another.\n        if (launcher.pending === true) {\n            return;\n        }\n        launcher.pending = true;\n        void commands\n            .execute(command, {\n            ...item.args,\n            cwd: launcher.cwd\n        })\n            .then(value => {\n            launcher.pending = false;\n            if (value instanceof Widget) {\n                launcherCallback(value);\n            }\n        })\n            .catch(err => {\n            console.error(err);\n            launcher.pending = false;\n            void showErrorMessage(trans._p('Error', 'Launcher Error'), err);\n        });\n    };\n    // With tabindex working, you can now pick a kernel by tabbing around and\n    // pressing Enter.\n    const onkeypress = (event) => {\n        if (event.key === 'Enter') {\n            onclick();\n        }\n    };\n    const iconClass = commands.iconClass(command, args);\n    const icon = commands.icon(command, args);\n    // Return the VDOM element.\n    return (React.createElement(\"div\", { className: \"jp-LauncherCard\", title: title, onClick: onclick, onKeyPress: onkeypress, tabIndex: 0, \"data-category\": item.category || trans.__('Other'), key: Private.keyProperty.get(item) },\n        React.createElement(\"div\", { className: \"jp-LauncherCard-icon\" }, kernel ? (item.kernelIconUrl ? (React.createElement(\"img\", { src: item.kernelIconUrl, className: \"jp-Launcher-kernelIcon\", alt: title })) : (React.createElement(\"div\", { className: \"jp-LauncherCard-noKernelIcon\" }, label[0].toUpperCase()))) : (React.createElement(LabIcon.resolveReact, { icon: icon, iconClass: classes(iconClass, 'jp-Icon-cover'), stylesheet: \"launcherCard\" }))),\n        React.createElement(\"div\", { className: \"jp-LauncherCard-label\", title: title },\n            React.createElement(\"p\", null, label))));\n}\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * An incrementing counter for keys.\n     */\n    let id = 0;\n    /**\n     * An attached property for an item's key.\n     */\n    Private.keyProperty = new AttachedProperty({\n        name: 'key',\n        create: () => id++\n    });\n    /**\n     * Create a fully specified item given item options.\n     */\n    function createItem(options) {\n        return {\n            ...options,\n            category: options.category || '',\n            rank: options.rank !== undefined ? options.rank : Infinity\n        };\n    }\n    Private.createItem = createItem;\n    /**\n     * A sort comparison function for a launcher item.\n     */\n    function sortCmp(a, b, cwd, commands) {\n        // First, compare by rank.\n        const r1 = a.rank;\n        const r2 = b.rank;\n        if (r1 !== r2 && r1 !== undefined && r2 !== undefined) {\n            return r1 < r2 ? -1 : 1; // Infinity safe\n        }\n        // Finally, compare by display name.\n        const aLabel = commands.label(a.command, { ...a.args, cwd });\n        const bLabel = commands.label(b.command, { ...b.args, cwd });\n        return aLabel.localeCompare(bLabel);\n    }\n    Private.sortCmp = sortCmp;\n})(Private || (Private = {}));\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module launcher\n */\nexport * from './tokens';\nexport * from './widget';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { GroupItem, TextItem } from '@jupyterlab/statusbar';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { listIcon, VDomModel, VDomRenderer } from '@jupyterlab/ui-components';\nimport { Signal } from '@lumino/signaling';\nimport React from 'react';\n/**\n * A pure functional component for a Log Console status item.\n *\n * @param props - the props for the component.\n *\n * @returns a tsx component for rendering the Log Console status.\n */\nfunction LogConsoleStatusComponent(props) {\n    const translator = props.translator || nullTranslator;\n    const trans = translator.load('jupyterlab');\n    let title = '';\n    if (props.newMessages > 0) {\n        title = trans.__('%1 new messages, %2 log entries for %3', props.newMessages, props.logEntries, props.source);\n    }\n    else {\n        title += trans.__('%1 log entries for %2', props.logEntries, props.source);\n    }\n    return (React.createElement(GroupItem, { spacing: 0, onClick: props.handleClick, title: title },\n        React.createElement(listIcon.react, { top: '2px', stylesheet: 'statusBar' }),\n        props.newMessages > 0 ? React.createElement(TextItem, { source: props.newMessages }) : React.createElement(React.Fragment, null)));\n}\n/**\n * A VDomRenderer widget for displaying the status of Log Console logs.\n */\nexport class LogConsoleStatus extends VDomRenderer {\n    /**\n     * Construct the log console status widget.\n     *\n     * @param options - The status widget initialization options.\n     */\n    constructor(options) {\n        super(new LogConsoleStatus.Model(options.loggerRegistry));\n        this.translator = options.translator || nullTranslator;\n        this._handleClick = options.handleClick;\n        this.addClass('jp-mod-highlighted');\n        this.addClass('jp-LogConsoleStatusItem');\n    }\n    /**\n     * Render the log console status item.\n     */\n    render() {\n        if (this.model === null || this.model.version === 0) {\n            return null;\n        }\n        const { flashEnabled, messages, source, version, versionDisplayed, versionNotified } = this.model;\n        if (source !== null && flashEnabled && version > versionNotified) {\n            this._flashHighlight();\n            this.model.sourceNotified(source, version);\n        }\n        else if (source !== null && flashEnabled && version > versionDisplayed) {\n            this._showHighlighted();\n        }\n        else {\n            this._clearHighlight();\n        }\n        return (React.createElement(LogConsoleStatusComponent, { handleClick: this._handleClick, logEntries: messages, newMessages: version - versionDisplayed, source: this.model.source, translator: this.translator }));\n    }\n    _flashHighlight() {\n        this._showHighlighted();\n        // To make sure the browser triggers the animation, we remove the class,\n        // wait for an animation frame, then add it back\n        this.removeClass('jp-LogConsole-flash');\n        requestAnimationFrame(() => {\n            this.addClass('jp-LogConsole-flash');\n        });\n    }\n    _showHighlighted() {\n        this.addClass('jp-mod-selected');\n    }\n    _clearHighlight() {\n        this.removeClass('jp-LogConsole-flash');\n        this.removeClass('jp-mod-selected');\n    }\n}\n/**\n * A namespace for Log Console log status.\n */\n(function (LogConsoleStatus) {\n    /**\n     * A VDomModel for the LogConsoleStatus item.\n     */\n    class Model extends VDomModel {\n        /**\n         * Create a new LogConsoleStatus model.\n         *\n         * @param loggerRegistry - The logger registry providing the logs.\n         */\n        constructor(loggerRegistry) {\n            super();\n            /**\n             * A signal emitted when the flash enablement changes.\n             */\n            this.flashEnabledChanged = new Signal(this);\n            this._flashEnabled = true;\n            this._source = null;\n            /**\n             * The view status of each source.\n             *\n             * #### Notes\n             * Keys are source names, value is a list of two numbers. The first\n             * represents the version of the messages that was last displayed to the\n             * user, the second represents the version that we last notified the user\n             * about.\n             */\n            this._sourceVersion = new Map();\n            this._loggerRegistry = loggerRegistry;\n            this._loggerRegistry.registryChanged.connect(this._handleLogRegistryChange, this);\n            this._handleLogRegistryChange();\n        }\n        /**\n         * Number of messages currently in the current source.\n         */\n        get messages() {\n            if (this._source === null) {\n                return 0;\n            }\n            const logger = this._loggerRegistry.getLogger(this._source);\n            return logger.length;\n        }\n        /**\n         * The number of messages ever stored by the current source.\n         */\n        get version() {\n            if (this._source === null) {\n                return 0;\n            }\n            const logger = this._loggerRegistry.getLogger(this._source);\n            return logger.version;\n        }\n        /**\n         * The name of the active log source\n         */\n        get source() {\n            return this._source;\n        }\n        set source(name) {\n            if (this._source === name) {\n                return;\n            }\n            this._source = name;\n            // refresh rendering\n            this.stateChanged.emit();\n        }\n        /**\n         * The last source version that was displayed.\n         */\n        get versionDisplayed() {\n            var _a, _b;\n            if (this._source === null) {\n                return 0;\n            }\n            return (_b = (_a = this._sourceVersion.get(this._source)) === null || _a === void 0 ? void 0 : _a.lastDisplayed) !== null && _b !== void 0 ? _b : 0;\n        }\n        /**\n         * The last source version we notified the user about.\n         */\n        get versionNotified() {\n            var _a, _b;\n            if (this._source === null) {\n                return 0;\n            }\n            return (_b = (_a = this._sourceVersion.get(this._source)) === null || _a === void 0 ? void 0 : _a.lastNotified) !== null && _b !== void 0 ? _b : 0;\n        }\n        /**\n         * Flag to toggle flashing when new logs added.\n         */\n        get flashEnabled() {\n            return this._flashEnabled;\n        }\n        set flashEnabled(enabled) {\n            if (this._flashEnabled === enabled) {\n                return;\n            }\n            this._flashEnabled = enabled;\n            this.flashEnabledChanged.emit();\n            // refresh rendering\n            this.stateChanged.emit();\n        }\n        /**\n         * Record the last source version displayed to the user.\n         *\n         * @param source - The name of the log source.\n         * @param version - The version of the log that was displayed.\n         *\n         * #### Notes\n         * This will also update the last notified version so that the last\n         * notified version is always at least the last displayed version.\n         */\n        sourceDisplayed(source, version) {\n            if (source === null || version === null) {\n                return;\n            }\n            const versions = this._sourceVersion.get(source);\n            let change = false;\n            if (versions.lastDisplayed < version) {\n                versions.lastDisplayed = version;\n                change = true;\n            }\n            if (versions.lastNotified < version) {\n                versions.lastNotified = version;\n                change = true;\n            }\n            if (change && source === this._source) {\n                this.stateChanged.emit();\n            }\n        }\n        /**\n         * Record a source version we notified the user about.\n         *\n         * @param source - The name of the log source.\n         * @param version - The version of the log.\n         */\n        sourceNotified(source, version) {\n            if (source === null) {\n                return;\n            }\n            const versions = this._sourceVersion.get(source);\n            if (versions.lastNotified < version) {\n                versions.lastNotified = version;\n                if (source === this._source) {\n                    this.stateChanged.emit();\n                }\n            }\n        }\n        _handleLogRegistryChange() {\n            const loggers = this._loggerRegistry.getLoggers();\n            for (const logger of loggers) {\n                if (!this._sourceVersion.has(logger.source)) {\n                    logger.contentChanged.connect(this._handleLogContentChange, this);\n                    this._sourceVersion.set(logger.source, {\n                        lastDisplayed: 0,\n                        lastNotified: 0\n                    });\n                }\n            }\n        }\n        _handleLogContentChange({ source }, change) {\n            if (source === this._source) {\n                this.stateChanged.emit();\n            }\n        }\n    }\n    LogConsoleStatus.Model = Model;\n})(LogConsoleStatus || (LogConsoleStatus = {}));\n//# sourceMappingURL=status.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module logconsole-extension\n */\nimport { ILabShell, ILayoutRestorer } from '@jupyterlab/application';\nimport { ICommandPalette, MainAreaWidget, WidgetTracker } from '@jupyterlab/apputils';\nimport { DocumentWidget } from '@jupyterlab/docregistry';\nimport { ILoggerRegistry, LogConsolePanel, LoggerRegistry } from '@jupyterlab/logconsole';\nimport { IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { IStatusBar } from '@jupyterlab/statusbar';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { addIcon, clearIcon, CommandToolbarButton, HTMLSelect, listIcon, ReactWidget } from '@jupyterlab/ui-components';\nimport { UUID } from '@lumino/coreutils';\nimport * as React from 'react';\nimport { LogConsoleStatus } from './status';\nconst LOG_CONSOLE_PLUGIN_ID = '@jupyterlab/logconsole-extension:plugin';\n/**\n * The command IDs used by the plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.addCheckpoint = 'logconsole:add-checkpoint';\n    CommandIDs.clear = 'logconsole:clear';\n    CommandIDs.open = 'logconsole:open';\n    CommandIDs.setLevel = 'logconsole:set-level';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The Log Console extension.\n */\nconst logConsolePlugin = {\n    activate: activateLogConsole,\n    id: LOG_CONSOLE_PLUGIN_ID,\n    description: 'Provides the logger registry.',\n    provides: ILoggerRegistry,\n    requires: [IRenderMimeRegistry, ITranslator],\n    optional: [\n        ILabShell,\n        ICommandPalette,\n        ILayoutRestorer,\n        ISettingRegistry,\n        IStatusBar\n    ],\n    autoStart: true\n};\n/**\n * Activate the Log Console extension.\n */\nfunction activateLogConsole(app, rendermime, translator, labShell, palette, restorer, settingRegistry, statusBar) {\n    const trans = translator.load('jupyterlab');\n    let logConsoleWidget = null;\n    let logConsolePanel = null;\n    const loggerRegistry = new LoggerRegistry({\n        defaultRendermime: rendermime,\n        // The maxLength is reset below from settings\n        maxLength: 1000\n    });\n    const tracker = new WidgetTracker({\n        namespace: 'logconsole'\n    });\n    if (restorer) {\n        void restorer.restore(tracker, {\n            command: CommandIDs.open,\n            name: () => 'logconsole'\n        });\n    }\n    const status = new LogConsoleStatus({\n        loggerRegistry: loggerRegistry,\n        handleClick: () => {\n            var _a;\n            if (!logConsoleWidget) {\n                createLogConsoleWidget({\n                    insertMode: 'split-bottom',\n                    ref: (_a = app.shell.currentWidget) === null || _a === void 0 ? void 0 : _a.id\n                });\n            }\n            else {\n                app.shell.activateById(logConsoleWidget.id);\n            }\n        },\n        translator\n    });\n    const getCurrentWidgetPath = () => {\n        const currentWidget = app.shell.currentWidget;\n        if (labShell === null || labShell === void 0 ? void 0 : labShell.currentPath) {\n            return labShell.currentPath;\n        }\n        // For other shells, set the source to the current widget path\n        if (currentWidget && currentWidget instanceof DocumentWidget) {\n            return currentWidget.context.path;\n        }\n        return null;\n    };\n    const createLogConsoleWidget = (options = {}) => {\n        var _a, _b;\n        logConsolePanel = new LogConsolePanel(loggerRegistry, translator);\n        logConsolePanel.source = (_b = (_a = options.source) !== null && _a !== void 0 ? _a : getCurrentWidgetPath()) !== null && _b !== void 0 ? _b : null;\n        logConsoleWidget = new MainAreaWidget({ content: logConsolePanel });\n        logConsoleWidget.addClass('jp-LogConsole');\n        logConsoleWidget.title.closable = true;\n        logConsoleWidget.title.icon = listIcon;\n        logConsoleWidget.title.label = trans.__('Log Console');\n        const addCheckpointButton = new CommandToolbarButton({\n            commands: app.commands,\n            id: CommandIDs.addCheckpoint\n        });\n        const clearButton = new CommandToolbarButton({\n            commands: app.commands,\n            id: CommandIDs.clear\n        });\n        const notifyCommands = () => {\n            app.commands.notifyCommandChanged(CommandIDs.addCheckpoint);\n            app.commands.notifyCommandChanged(CommandIDs.clear);\n            app.commands.notifyCommandChanged(CommandIDs.open);\n            app.commands.notifyCommandChanged(CommandIDs.setLevel);\n        };\n        logConsoleWidget.toolbar.addItem('lab-log-console-add-checkpoint', addCheckpointButton);\n        logConsoleWidget.toolbar.addItem('lab-log-console-clear', clearButton);\n        logConsoleWidget.toolbar.addItem('level', new LogLevelSwitcher(logConsoleWidget.content, translator));\n        logConsolePanel.sourceChanged.connect(() => {\n            notifyCommands();\n        });\n        logConsolePanel.sourceDisplayed.connect((panel, { source, version }) => {\n            status.model.sourceDisplayed(source, version);\n        });\n        logConsoleWidget.disposed.connect(() => {\n            logConsoleWidget = null;\n            logConsolePanel = null;\n            notifyCommands();\n        });\n        app.shell.add(logConsoleWidget, 'down', {\n            ref: options.ref,\n            mode: options.insertMode,\n            type: 'Log Console'\n        });\n        void tracker.add(logConsoleWidget);\n        app.shell.activateById(logConsoleWidget.id);\n        logConsoleWidget.update();\n        notifyCommands();\n    };\n    app.commands.addCommand(CommandIDs.open, {\n        label: trans.__('Show Log Console'),\n        execute: (options = {}) => {\n            // Toggle the display\n            if (logConsoleWidget) {\n                logConsoleWidget.dispose();\n            }\n            else {\n                createLogConsoleWidget(options);\n            }\n        },\n        isToggled: () => {\n            return logConsoleWidget !== null;\n        }\n    });\n    app.commands.addCommand(CommandIDs.addCheckpoint, {\n        execute: () => {\n            var _a;\n            (_a = logConsolePanel === null || logConsolePanel === void 0 ? void 0 : logConsolePanel.logger) === null || _a === void 0 ? void 0 : _a.checkpoint();\n        },\n        icon: addIcon,\n        isEnabled: () => !!logConsolePanel && logConsolePanel.source !== null,\n        label: trans.__('Add Checkpoint')\n    });\n    app.commands.addCommand(CommandIDs.clear, {\n        execute: () => {\n            var _a;\n            (_a = logConsolePanel === null || logConsolePanel === void 0 ? void 0 : logConsolePanel.logger) === null || _a === void 0 ? void 0 : _a.clear();\n        },\n        icon: clearIcon,\n        isEnabled: () => !!logConsolePanel && logConsolePanel.source !== null,\n        label: trans.__('Clear Log')\n    });\n    function toTitleCase(value) {\n        return value.length === 0 ? value : value[0].toUpperCase() + value.slice(1);\n    }\n    app.commands.addCommand(CommandIDs.setLevel, {\n        // TODO: find good icon class\n        execute: (args) => {\n            if (logConsolePanel === null || logConsolePanel === void 0 ? void 0 : logConsolePanel.logger) {\n                logConsolePanel.logger.level = args.level;\n            }\n        },\n        isEnabled: () => !!logConsolePanel && logConsolePanel.source !== null,\n        label: args => args['level']\n            ? trans.__('Set Log Level to %1', toTitleCase(args.level))\n            : trans.__('Set log level to `level`.')\n    });\n    if (palette) {\n        palette.addItem({\n            command: CommandIDs.open,\n            category: trans.__('Main Area')\n        });\n    }\n    if (statusBar) {\n        statusBar.registerStatusItem('@jupyterlab/logconsole-extension:status', {\n            item: status,\n            align: 'left',\n            isActive: () => { var _a; return ((_a = status.model) === null || _a === void 0 ? void 0 : _a.version) > 0; },\n            activeStateChanged: status.model.stateChanged\n        });\n    }\n    function setSource(source) {\n        if (logConsolePanel) {\n            logConsolePanel.source = source;\n        }\n        status.model.source = source;\n    }\n    void app.restored.then(() => {\n        var _a;\n        // Set source only after app is restored in order to allow restorer to\n        // restore previous source first, which may set the renderer\n        if (labShell) {\n            labShell.currentPathChanged.connect((_, { newValue }) => setSource(newValue));\n            setSource((_a = labShell.currentPath) !== null && _a !== void 0 ? _a : null);\n        }\n        else {\n            setSource(getCurrentWidgetPath());\n        }\n    });\n    if (settingRegistry) {\n        const updateSettings = (settings) => {\n            loggerRegistry.maxLength = settings.get('maxLogEntries')\n                .composite;\n            status.model.flashEnabled = settings.get('flash').composite;\n        };\n        Promise.all([settingRegistry.load(LOG_CONSOLE_PLUGIN_ID), app.restored])\n            .then(([settings]) => {\n            updateSettings(settings);\n            settings.changed.connect(settings => {\n                updateSettings(settings);\n            });\n        })\n            .catch((reason) => {\n            console.error(reason.message);\n        });\n    }\n    return loggerRegistry;\n}\n/**\n * A toolbar widget that switches log levels.\n */\nexport class LogLevelSwitcher extends ReactWidget {\n    /**\n     * Construct a new log level switcher.\n     */\n    constructor(widget, translator) {\n        super();\n        /**\n         * Handle `change` events for the HTMLSelect component.\n         */\n        this.handleChange = (event) => {\n            if (this._logConsole.logger) {\n                this._logConsole.logger.level = event.target.value;\n            }\n            this.update();\n        };\n        /**\n         * Handle `keydown` events for the HTMLSelect component.\n         */\n        this.handleKeyDown = (event) => {\n            if (event.keyCode === 13) {\n                this._logConsole.activate();\n            }\n        };\n        this._id = `level-${UUID.uuid4()}`;\n        this.translator = translator !== null && translator !== void 0 ? translator : nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        this.addClass('jp-LogConsole-toolbarLogLevel');\n        this._logConsole = widget;\n        if (widget.source) {\n            this.update();\n        }\n        widget.sourceChanged.connect(this._updateSource, this);\n    }\n    _updateSource(sender, { oldValue, newValue }) {\n        // Transfer stateChanged handler to new source logger\n        if (oldValue !== null) {\n            const logger = sender.loggerRegistry.getLogger(oldValue);\n            logger.stateChanged.disconnect(this.update, this);\n        }\n        if (newValue !== null) {\n            const logger = sender.loggerRegistry.getLogger(newValue);\n            logger.stateChanged.connect(this.update, this);\n        }\n        this.update();\n    }\n    render() {\n        const logger = this._logConsole.logger;\n        return (React.createElement(React.Fragment, null,\n            React.createElement(\"label\", { htmlFor: this._id, className: logger === null\n                    ? 'jp-LogConsole-toolbarLogLevel-disabled'\n                    : undefined }, this._trans.__('Log Level:')),\n            React.createElement(HTMLSelect, { id: this._id, className: \"jp-LogConsole-toolbarLogLevelDropdown\", onChange: this.handleChange, onKeyDown: this.handleKeyDown, value: logger === null || logger === void 0 ? void 0 : logger.level, \"aria-label\": this._trans.__('Log level'), disabled: logger === null, options: logger === null\n                    ? []\n                    : [\n                        [this._trans.__('Critical'), 'Critical'],\n                        [this._trans.__('Error'), 'Error'],\n                        [this._trans.__('Warning'), 'Warning'],\n                        [this._trans.__('Info'), 'Info'],\n                        [this._trans.__('Debug'), 'Debug']\n                    ].map(data => ({\n                        label: data[0],\n                        value: data[1].toLowerCase()\n                    })) })));\n    }\n}\nexport default logConsolePlugin;\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/statusbar/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/logconsole/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { OutputAreaModel } from '@jupyterlab/outputarea';\nimport { OutputModel } from '@jupyterlab/rendermime';\nimport { Signal } from '@lumino/signaling';\n/**\n * Log Output Model with timestamp which provides\n * item information for Output Area Model.\n */\nexport class LogOutputModel extends OutputModel {\n    /**\n     * Construct a LogOutputModel.\n     *\n     * @param options - The model initialization options.\n     */\n    constructor(options) {\n        super(options);\n        this.timestamp = new Date(options.value.timestamp);\n        this.level = options.value.level;\n    }\n}\n/**\n * Implementation of `IContentFactory` for Output Area Model\n * which creates LogOutputModel instances.\n */\nclass LogConsoleModelContentFactory extends OutputAreaModel.ContentFactory {\n    /**\n     * Create a rendermime output model from notebook output.\n     */\n    createOutputModel(options) {\n        return new LogOutputModel(options);\n    }\n}\n/**\n * Output Area Model implementation which is able to\n * limit number of outputs stored.\n */\nexport class LoggerOutputAreaModel extends OutputAreaModel {\n    constructor({ maxLength, ...options }) {\n        super(options);\n        this.maxLength = maxLength;\n    }\n    /**\n     * Add an output, which may be combined with previous output.\n     *\n     * @returns The total number of outputs.\n     *\n     * #### Notes\n     * The output bundle is copied. Contiguous stream outputs of the same `name`\n     * are combined. The oldest outputs are possibly removed to ensure the total\n     * number of outputs is at most `.maxLength`.\n     */\n    add(output) {\n        super.add(output);\n        this._applyMaxLength();\n        return this.length;\n    }\n    /**\n     * Whether an output should combine with the previous output.\n     *\n     * We combine if the two outputs are in the same second, which is the\n     * resolution for our time display.\n     */\n    shouldCombine(options) {\n        const { value, lastModel } = options;\n        const oldSeconds = Math.trunc(lastModel.timestamp.getTime() / 1000);\n        const newSeconds = Math.trunc(value.timestamp / 1000);\n        return oldSeconds === newSeconds;\n    }\n    /**\n     * Get an item at the specified index.\n     */\n    get(index) {\n        return super.get(index);\n    }\n    /**\n     * Maximum number of outputs to store in the model.\n     */\n    get maxLength() {\n        return this._maxLength;\n    }\n    set maxLength(value) {\n        this._maxLength = value;\n        this._applyMaxLength();\n    }\n    /**\n     * Manually apply length limit.\n     */\n    _applyMaxLength() {\n        if (this.list.length > this._maxLength) {\n            this.list.removeRange(0, this.list.length - this._maxLength);\n        }\n    }\n}\n/**\n * A concrete implementation of ILogger.\n */\nexport class Logger {\n    /**\n     * Construct a Logger.\n     *\n     * @param options Constructor options\n     */\n    constructor(options) {\n        this._isDisposed = false;\n        this._contentChanged = new Signal(this);\n        this._stateChanged = new Signal(this);\n        this._rendermime = null;\n        this._version = 0;\n        this._level = 'warning';\n        this.source = options.source;\n        this.outputAreaModel = new LoggerOutputAreaModel({\n            contentFactory: new LogConsoleModelContentFactory(),\n            maxLength: options.maxLength\n        });\n    }\n    /**\n     * The maximum number of outputs stored.\n     *\n     * #### Notes\n     * Oldest entries will be trimmed to ensure the length is at most\n     * `.maxLength`.\n     */\n    get maxLength() {\n        return this.outputAreaModel.maxLength;\n    }\n    set maxLength(value) {\n        this.outputAreaModel.maxLength = value;\n    }\n    /**\n     * The level of outputs logged\n     */\n    get level() {\n        return this._level;\n    }\n    set level(newValue) {\n        const oldValue = this._level;\n        if (oldValue === newValue) {\n            return;\n        }\n        this._level = newValue;\n        this._log({\n            output: {\n                output_type: 'display_data',\n                data: {\n                    'text/plain': `Log level set to ${newValue}`\n                }\n            },\n            level: 'metadata'\n        });\n        this._stateChanged.emit({ name: 'level', oldValue, newValue });\n    }\n    /**\n     * Number of outputs logged.\n     */\n    get length() {\n        return this.outputAreaModel.length;\n    }\n    /**\n     * A signal emitted when the list of log messages changes.\n     */\n    get contentChanged() {\n        return this._contentChanged;\n    }\n    /**\n     * A signal emitted when the log state changes.\n     */\n    get stateChanged() {\n        return this._stateChanged;\n    }\n    /**\n     * Rendermime to use when rendering outputs logged.\n     */\n    get rendermime() {\n        return this._rendermime;\n    }\n    set rendermime(value) {\n        if (value !== this._rendermime) {\n            const oldValue = this._rendermime;\n            const newValue = (this._rendermime = value);\n            this._stateChanged.emit({ name: 'rendermime', oldValue, newValue });\n        }\n    }\n    /**\n     * The number of messages that have ever been stored.\n     */\n    get version() {\n        return this._version;\n    }\n    /**\n     * Log an output to logger.\n     *\n     * @param log - The output to be logged.\n     */\n    log(log) {\n        // Filter by our current log level\n        if (Private.LogLevel[log.level] <\n            Private.LogLevel[this._level]) {\n            return;\n        }\n        let output = null;\n        switch (log.type) {\n            case 'text':\n                output = {\n                    output_type: 'display_data',\n                    data: {\n                        'text/plain': log.data\n                    }\n                };\n                break;\n            case 'html':\n                output = {\n                    output_type: 'display_data',\n                    data: {\n                        'text/html': log.data\n                    }\n                };\n                break;\n            case 'output':\n                output = log.data;\n                break;\n            default:\n                break;\n        }\n        if (output) {\n            this._log({\n                output,\n                level: log.level\n            });\n        }\n    }\n    /**\n     * Clear all outputs logged.\n     */\n    clear() {\n        this.outputAreaModel.clear(false);\n        this._contentChanged.emit('clear');\n    }\n    /**\n     * Add a checkpoint to the log.\n     */\n    checkpoint() {\n        this._log({\n            output: {\n                output_type: 'display_data',\n                data: {\n                    'text/html': '<hr/>'\n                }\n            },\n            level: 'metadata'\n        });\n    }\n    /**\n     * Whether the logger is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose the logger.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this.clear();\n        this._rendermime = null;\n        Signal.clearData(this);\n    }\n    _log(options) {\n        // First, make sure our version reflects the new message so things\n        // triggering from the signals below have the correct version.\n        this._version++;\n        // Next, trigger any displays of the message\n        this.outputAreaModel.add({\n            ...options.output,\n            timestamp: Date.now(),\n            level: options.level\n        });\n        // Finally, tell people that the message was appended (and possibly\n        // already displayed).\n        this._contentChanged.emit('append');\n    }\n}\nvar Private;\n(function (Private) {\n    let LogLevel;\n    (function (LogLevel) {\n        LogLevel[LogLevel[\"debug\"] = 0] = \"debug\";\n        LogLevel[LogLevel[\"info\"] = 1] = \"info\";\n        LogLevel[LogLevel[\"warning\"] = 2] = \"warning\";\n        LogLevel[LogLevel[\"error\"] = 3] = \"error\";\n        LogLevel[LogLevel[\"critical\"] = 4] = \"critical\";\n        LogLevel[LogLevel[\"metadata\"] = 5] = \"metadata\";\n    })(LogLevel = Private.LogLevel || (Private.LogLevel = {}));\n})(Private || (Private = {}));\n//# sourceMappingURL=logger.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\nimport { Logger } from './logger';\n/**\n * A concrete implementation of ILoggerRegistry.\n */\nexport class LoggerRegistry {\n    /**\n     * Construct a LoggerRegistry.\n     *\n     * @param defaultRendermime - Default rendermime to render outputs\n     * with when logger is not supplied with one.\n     */\n    constructor(options) {\n        this._loggers = new Map();\n        this._registryChanged = new Signal(this);\n        this._isDisposed = false;\n        this._defaultRendermime = options.defaultRendermime;\n        this._maxLength = options.maxLength;\n    }\n    /**\n     * Get the logger for the specified source.\n     *\n     * @param source - The name of the log source.\n     *\n     * @returns The logger for the specified source.\n     */\n    getLogger(source) {\n        const loggers = this._loggers;\n        let logger = loggers.get(source);\n        if (logger) {\n            return logger;\n        }\n        logger = new Logger({ source, maxLength: this.maxLength });\n        logger.rendermime = this._defaultRendermime;\n        loggers.set(source, logger);\n        this._registryChanged.emit('append');\n        return logger;\n    }\n    /**\n     * Get all loggers registered.\n     *\n     * @returns The array containing all registered loggers.\n     */\n    getLoggers() {\n        return Array.from(this._loggers.values());\n    }\n    /**\n     * A signal emitted when the logger registry changes.\n     */\n    get registryChanged() {\n        return this._registryChanged;\n    }\n    /**\n     * The max length for loggers.\n     */\n    get maxLength() {\n        return this._maxLength;\n    }\n    set maxLength(value) {\n        this._maxLength = value;\n        this._loggers.forEach(logger => {\n            logger.maxLength = value;\n        });\n    }\n    /**\n     * Whether the register is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose the registry and all loggers.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._loggers.forEach(x => x.dispose());\n        Signal.clearData(this);\n    }\n}\n//# sourceMappingURL=registry.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The Logger Registry token.\n */\nexport const ILoggerRegistry = new Token('@jupyterlab/logconsole:ILoggerRegistry', 'A service providing a logger infrastructure.');\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { OutputArea } from '@jupyterlab/outputarea';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { Signal } from '@lumino/signaling';\nimport { PanelLayout, StackedPanel, Widget } from '@lumino/widgets';\nfunction toTitleCase(value) {\n    return value.length === 0 ? value : value[0].toUpperCase() + value.slice(1);\n}\n/**\n * Log console output prompt implementation\n */\nclass LogConsoleOutputPrompt extends Widget {\n    constructor() {\n        super();\n        this._timestampNode = document.createElement('div');\n        this.node.append(this._timestampNode);\n    }\n    /**\n     * Date & time when output is logged.\n     */\n    set timestamp(value) {\n        this._timestamp = value;\n        this._timestampNode.innerHTML = this._timestamp.toLocaleTimeString();\n        this.update();\n    }\n    /**\n     * Log level\n     */\n    set level(value) {\n        this._level = value;\n        this.node.dataset.logLevel = value;\n        this.update();\n    }\n    update() {\n        if (this._level !== undefined && this._timestamp !== undefined) {\n            this.node.title = `${this._timestamp.toLocaleString()}; ${toTitleCase(this._level)} level`;\n        }\n    }\n}\n/**\n * Output Area implementation displaying log outputs\n * with prompts showing log timestamps.\n */\nclass LogConsoleOutputArea extends OutputArea {\n    /**\n     * Create an output item with a prompt and actual output\n     */\n    createOutputItem(model) {\n        const panel = super.createOutputItem(model);\n        if (panel === null) {\n            // Could not render model\n            return null;\n        }\n        // first widget in panel is prompt of type LoggerOutputPrompt\n        const prompt = panel.widgets[0];\n        prompt.timestamp = model.timestamp;\n        prompt.level = model.level;\n        return panel;\n    }\n    /**\n     * Handle an input request from a kernel by doing nothing.\n     */\n    onInputRequest(msg, future) {\n        return;\n    }\n}\n/**\n * Implementation of `IContentFactory` for Output Area\n * which creates custom output prompts.\n */\nclass LogConsoleContentFactory extends OutputArea.ContentFactory {\n    /**\n     * Create the output prompt for the widget.\n     */\n    createOutputPrompt() {\n        return new LogConsoleOutputPrompt();\n    }\n}\n/**\n * Implements a panel which supports pinning the position to the end if it is\n * scrolled to the end.\n *\n * #### Notes\n * This is useful for log viewing components or chat components that append\n * elements at the end. We would like to automatically scroll when the user\n * has scrolled to the bottom, but not change the scrolling when the user has\n * changed the scroll position.\n */\nexport class ScrollingWidget extends Widget {\n    constructor({ content, ...options }) {\n        super(options);\n        this._observer = null;\n        this.addClass('jp-Scrolling');\n        const layout = (this.layout = new PanelLayout());\n        layout.addWidget(content);\n        this._content = content;\n        this._sentinel = document.createElement('div');\n        this.node.appendChild(this._sentinel);\n    }\n    /**\n     * The content widget.\n     */\n    get content() {\n        return this._content;\n    }\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        // defer so content gets a chance to attach first\n        requestAnimationFrame(() => {\n            this._sentinel.scrollIntoView();\n            this._scrollHeight = this.node.scrollHeight;\n        });\n        // Set up intersection observer for the sentinel\n        if (typeof IntersectionObserver !== 'undefined') {\n            this._observer = new IntersectionObserver(args => {\n                this._handleScroll(args);\n            }, { root: this.node, threshold: 1 });\n            this._observer.observe(this._sentinel);\n        }\n    }\n    onBeforeDetach(msg) {\n        if (this._observer) {\n            this._observer.disconnect();\n        }\n    }\n    onAfterShow(msg) {\n        if (this._tracking) {\n            this._sentinel.scrollIntoView();\n        }\n    }\n    _handleScroll([entry]) {\n        if (entry.isIntersecting) {\n            this._tracking = true;\n        }\n        else if (this.isVisible) {\n            const currentHeight = this.node.scrollHeight;\n            if (currentHeight === this._scrollHeight) {\n                // Likely the user scrolled manually\n                this._tracking = false;\n            }\n            else {\n                // We assume we scrolled because our size changed, so scroll to the end.\n                this._sentinel.scrollIntoView();\n                this._scrollHeight = currentHeight;\n                this._tracking = true;\n            }\n        }\n    }\n}\n/**\n * A StackedPanel implementation that creates Output Areas\n * for each log source and activates as source is switched.\n */\nexport class LogConsolePanel extends StackedPanel {\n    /**\n     * Construct a LogConsolePanel instance.\n     *\n     * @param loggerRegistry - The logger registry that provides\n     * logs to be displayed.\n     */\n    constructor(loggerRegistry, translator) {\n        super();\n        this._outputAreas = new Map();\n        this._source = null;\n        this._sourceChanged = new Signal(this);\n        this._sourceDisplayed = new Signal(this);\n        this._loggersWatched = new Set();\n        this.translator = translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        this._loggerRegistry = loggerRegistry;\n        this.addClass('jp-LogConsolePanel');\n        loggerRegistry.registryChanged.connect((sender, args) => {\n            this._bindLoggerSignals();\n        }, this);\n        this._bindLoggerSignals();\n        this._placeholder = new Widget();\n        this._placeholder.addClass('jp-LogConsoleListPlaceholder');\n        this.addWidget(this._placeholder);\n    }\n    /**\n     * The logger registry providing the logs.\n     */\n    get loggerRegistry() {\n        return this._loggerRegistry;\n    }\n    /**\n     * The current logger.\n     */\n    get logger() {\n        if (this.source === null) {\n            return null;\n        }\n        return this.loggerRegistry.getLogger(this.source);\n    }\n    /**\n     * The log source displayed\n     */\n    get source() {\n        return this._source;\n    }\n    set source(name) {\n        if (name === this._source) {\n            return;\n        }\n        const oldValue = this._source;\n        const newValue = (this._source = name);\n        this._showOutputFromSource(newValue);\n        this._handlePlaceholder();\n        this._sourceChanged.emit({ oldValue, newValue, name: 'source' });\n    }\n    /**\n     * The source version displayed.\n     */\n    get sourceVersion() {\n        const source = this.source;\n        return source !== null\n            ? this._loggerRegistry.getLogger(source).version\n            : null;\n    }\n    /**\n     * Signal for source changes\n     */\n    get sourceChanged() {\n        return this._sourceChanged;\n    }\n    /**\n     * Signal for source changes\n     */\n    get sourceDisplayed() {\n        return this._sourceDisplayed;\n    }\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        this._updateOutputAreas();\n        this._showOutputFromSource(this._source);\n        this._handlePlaceholder();\n    }\n    onAfterShow(msg) {\n        super.onAfterShow(msg);\n        if (this.source !== null) {\n            this._sourceDisplayed.emit({\n                source: this.source,\n                version: this.sourceVersion\n            });\n        }\n    }\n    _bindLoggerSignals() {\n        const loggers = this._loggerRegistry.getLoggers();\n        for (const logger of loggers) {\n            if (this._loggersWatched.has(logger.source)) {\n                continue;\n            }\n            logger.contentChanged.connect((sender, args) => {\n                this._updateOutputAreas();\n                this._handlePlaceholder();\n            }, this);\n            logger.stateChanged.connect((sender, change) => {\n                if (change.name !== 'rendermime') {\n                    return;\n                }\n                const viewId = `source:${sender.source}`;\n                const outputArea = this._outputAreas.get(viewId);\n                if (outputArea) {\n                    if (change.newValue) {\n                        // cast away readonly\n                        outputArea.rendermime = change.newValue;\n                    }\n                    else {\n                        outputArea.dispose();\n                    }\n                }\n            }, this);\n            this._loggersWatched.add(logger.source);\n        }\n    }\n    _showOutputFromSource(source) {\n        // If the source is null, pick a unique name so all output areas hide.\n        const viewId = source === null ? 'null source' : `source:${source}`;\n        this._outputAreas.forEach((outputArea, name) => {\n            var _a, _b;\n            // Show/hide the output area parents, the scrolling windows.\n            if (outputArea.id === viewId) {\n                (_a = outputArea.parent) === null || _a === void 0 ? void 0 : _a.show();\n                if (outputArea.isVisible) {\n                    this._sourceDisplayed.emit({\n                        source: this.source,\n                        version: this.sourceVersion\n                    });\n                }\n            }\n            else {\n                (_b = outputArea.parent) === null || _b === void 0 ? void 0 : _b.hide();\n            }\n        });\n        const title = source === null\n            ? this._trans.__('Log Console')\n            : this._trans.__('Log: %1', source);\n        this.title.label = title;\n        this.title.caption = title;\n    }\n    _handlePlaceholder() {\n        if (this.source === null) {\n            this._placeholder.node.textContent = this._trans.__('No source selected.');\n            this._placeholder.show();\n        }\n        else if (this._loggerRegistry.getLogger(this.source).length === 0) {\n            this._placeholder.node.textContent = this._trans.__('No log messages.');\n            this._placeholder.show();\n        }\n        else {\n            this._placeholder.hide();\n            this._placeholder.node.textContent = '';\n        }\n    }\n    _updateOutputAreas() {\n        const loggerIds = new Set();\n        const loggers = this._loggerRegistry.getLoggers();\n        for (const logger of loggers) {\n            const source = logger.source;\n            const viewId = `source:${source}`;\n            loggerIds.add(viewId);\n            // add view for logger if not exist\n            if (!this._outputAreas.has(viewId)) {\n                const outputArea = new LogConsoleOutputArea({\n                    rendermime: logger.rendermime,\n                    contentFactory: new LogConsoleContentFactory(),\n                    model: logger.outputAreaModel\n                });\n                outputArea.id = viewId;\n                // Attach the output area so it is visible, so the accounting\n                // functions below record the outputs actually displayed.\n                const w = new ScrollingWidget({\n                    content: outputArea\n                });\n                this.addWidget(w);\n                this._outputAreas.set(viewId, outputArea);\n                // This is where the source object is associated with the output area.\n                // We capture the source from this environment in the closure.\n                const outputUpdate = (sender) => {\n                    // If the current log console panel source is the source associated\n                    // with this output area, and the output area is visible, then emit\n                    // the logConsolePanel source displayed signal.\n                    if (this.source === source && sender.isVisible) {\n                        // We assume that the output area has been updated to the current\n                        // version of the source.\n                        this._sourceDisplayed.emit({\n                            source: this.source,\n                            version: this.sourceVersion\n                        });\n                    }\n                };\n                // Notify messages were displayed any time the output area is updated\n                // and update for any outputs rendered on construction.\n                outputArea.outputLengthChanged.connect(outputUpdate, this);\n                // Since the output area was attached above, we can rely on its\n                // visibility to account for the messages displayed.\n                outputUpdate(outputArea);\n            }\n        }\n        // remove output areas that do not have corresponding loggers anymore\n        const viewIds = this._outputAreas.keys();\n        for (const viewId of viewIds) {\n            if (!loggerIds.has(viewId)) {\n                const outputArea = this._outputAreas.get(viewId);\n                outputArea === null || outputArea === void 0 ? void 0 : outputArea.dispose();\n                this._outputAreas.delete(viewId);\n            }\n        }\n    }\n}\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module logconsole\n */\nexport * from './logger';\nexport * from './registry';\nexport * from './tokens';\nexport * from './widget';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@jupyterlab/outputarea/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { closeIcon } from '@jupyterlab/ui-components';\nimport { UUID } from '@lumino/coreutils';\nimport { Debouncer } from '@lumino/polling';\nimport React, { useRef, useState } from 'react';\nimport { DOMUtils } from '@jupyterlab/apputils';\nconst SETTING_NAME = 'languageServers';\nconst SERVER_SETTINGS = 'configuration';\n/**\n * The React component of the setting field\n */\nfunction BuildSettingForm(props) {\n    const { [SERVER_SETTINGS]: serverSettingsSchema, ...otherSettingsSchema } = props.schema;\n    const { [SERVER_SETTINGS]: serverSettings, serverName, ...otherSettings } = props.settings;\n    const [currentServerName, setCurrentServerName] = useState(serverName);\n    /**\n     * Callback on server name field change event\n     */\n    const onServerNameChange = (e) => {\n        props.updateSetting\n            .invoke(props.serverHash, {\n            serverName: e.target.value\n        })\n            .catch(console.error);\n        setCurrentServerName(e.target.value);\n    };\n    const serverSettingWithType = {};\n    Object.entries(serverSettings).forEach(([key, value]) => {\n        const newProps = {\n            property: key,\n            type: typeof value,\n            value\n        };\n        serverSettingWithType[UUID.uuid4()] = newProps;\n    });\n    const [propertyMap, setPropertyMap] = useState(serverSettingWithType);\n    const defaultOtherSettings = {};\n    Object.entries(otherSettingsSchema).forEach(([key, value]) => {\n        if (key in otherSettings) {\n            defaultOtherSettings[key] = otherSettings[key];\n        }\n        else {\n            defaultOtherSettings[key] = value['default'];\n        }\n    });\n    const [otherSettingsComposite, setOtherSettingsComposite] = useState(defaultOtherSettings);\n    /**\n     * Callback on additional setting field change event\n     */\n    const onOtherSettingsChange = (property, value, type) => {\n        let settingValue = value;\n        if (type === 'number') {\n            settingValue = parseFloat(value);\n        }\n        const newProps = {\n            ...otherSettingsComposite,\n            [property]: settingValue\n        };\n        props.updateSetting.invoke(props.serverHash, newProps).catch(console.error);\n        setOtherSettingsComposite(newProps);\n    };\n    /**\n     * Callback on `Add property` button click event.\n     */\n    const addProperty = () => {\n        const hash = UUID.uuid4();\n        const newMap = {\n            ...propertyMap,\n            [hash]: { property: '', type: 'string', value: '' }\n        };\n        const payload = {};\n        Object.values(newMap).forEach(value => {\n            payload[value.property] = value.value;\n        });\n        props.updateSetting\n            .invoke(props.serverHash, {\n            [SERVER_SETTINGS]: payload\n        })\n            .catch(console.error);\n        setPropertyMap(newMap);\n    };\n    /**\n     * Callback on `Remove property` button click event.\n     */\n    const removeProperty = (entryHash) => {\n        const newMap = {};\n        Object.entries(propertyMap).forEach(([hash, value]) => {\n            if (hash !== entryHash) {\n                newMap[hash] = value;\n            }\n            const payload = {};\n            Object.values(newMap).forEach(value => {\n                payload[value.property] = value.value;\n            });\n            props.updateSetting\n                .invoke(props.serverHash, {\n                [SERVER_SETTINGS]: payload\n            })\n                .catch(console.error);\n            setPropertyMap(newMap);\n        });\n    };\n    /**\n     * Save setting to the setting registry on field change event.\n     */\n    const setProperty = (hash, property) => {\n        if (hash in propertyMap) {\n            const newMap = { ...propertyMap, [hash]: property };\n            const payload = {};\n            Object.values(newMap).forEach(value => {\n                payload[value.property] = value.value;\n            });\n            setPropertyMap(newMap);\n            props.updateSetting\n                .invoke(props.serverHash, {\n                [SERVER_SETTINGS]: payload\n            })\n                .catch(console.error);\n        }\n    };\n    const debouncedSetProperty = new Debouncer(setProperty);\n    const textInputId = useRef(DOMUtils.createDomID() + '-line-number-input');\n    return (React.createElement(\"div\", { className: \"array-item\" },\n        React.createElement(\"div\", { className: \"form-group \" },\n            React.createElement(\"div\", { className: \"jp-FormGroup-content\" },\n                React.createElement(\"div\", { className: \"jp-objectFieldWrapper\" },\n                    React.createElement(\"fieldset\", null,\n                        React.createElement(\"div\", { className: \"form-group small-field\" },\n                            React.createElement(\"div\", { className: \"jp-modifiedIndicator jp-errorIndicator\" }),\n                            React.createElement(\"div\", { className: \"jp-FormGroup-content\" },\n                                React.createElement(\"label\", { htmlFor: textInputId.current, className: \"jp-FormGroup-fieldLabel jp-FormGroup-contentItem\" }, props.trans.__('Server name:')),\n                                React.createElement(\"div\", { className: \"jp-inputFieldWrapper jp-FormGroup-contentItem\" },\n                                    React.createElement(\"input\", { id: textInputId.current, className: \"form-control\", type: \"text\", required: true, value: currentServerName, onChange: e => {\n                                            onServerNameChange(e);\n                                        } })),\n                                React.createElement(\"div\", { className: \"validationErrors\" },\n                                    React.createElement(\"div\", null,\n                                        React.createElement(\"ul\", { className: \"error-detail bs-callout bs-callout-info\" },\n                                            React.createElement(\"li\", { className: \"text-danger\" }, props.trans.__('is a required property'))))))),\n                        Object.entries(otherSettingsSchema).map(([property, value], idx) => {\n                            return (React.createElement(\"div\", { key: `${idx}-${property}`, className: \"form-group small-field\" },\n                                React.createElement(\"div\", { className: \"jp-FormGroup-content\" },\n                                    React.createElement(\"h3\", { className: \"jp-FormGroup-fieldLabel jp-FormGroup-contentItem\" }, value.title),\n                                    React.createElement(\"div\", { className: \"jp-inputFieldWrapper jp-FormGroup-contentItem\" },\n                                        React.createElement(\"input\", { className: \"form-control\", placeholder: \"\", type: value.type, value: otherSettingsComposite[property], onChange: e => onOtherSettingsChange(property, e.target.value, value.type) })),\n                                    React.createElement(\"div\", { className: \"jp-FormGroup-description\" }, value.description),\n                                    React.createElement(\"div\", { className: \"validationErrors\" }))));\n                        }),\n                        React.createElement(\"fieldset\", null,\n                            React.createElement(\"legend\", null, serverSettingsSchema['title']),\n                            Object.entries(propertyMap).map(([hash, property]) => {\n                                return (React.createElement(PropertyFrom, { key: hash, hash: hash, property: property, removeProperty: removeProperty, setProperty: debouncedSetProperty }));\n                            }),\n                            React.createElement(\"span\", null, serverSettingsSchema['description'])))))),\n        React.createElement(\"div\", { className: \"jp-ArrayOperations\" },\n            React.createElement(\"button\", { className: \"jp-mod-styled jp-mod-reject\", onClick: addProperty }, props.trans.__('Add property')),\n            React.createElement(\"button\", { className: \"jp-mod-styled jp-mod-warn jp-FormGroup-removeButton\", onClick: () => props.removeSetting(props.serverHash) }, props.trans.__('Remove server')))));\n}\nfunction PropertyFrom(props) {\n    const [state, setState] = useState({ ...props.property });\n    const TYPE_MAP = { string: 'text', number: 'number', boolean: 'checkbox' };\n    const removeItem = () => {\n        props.removeProperty(props.hash);\n    };\n    const changeName = (newName) => {\n        const newState = { ...state, property: newName };\n        props.setProperty.invoke(props.hash, newState).catch(console.error);\n        setState(newState);\n    };\n    const changeValue = (newValue, type) => {\n        let value = newValue;\n        if (type === 'number') {\n            value = parseFloat(newValue);\n        }\n        const newState = { ...state, value };\n        props.setProperty.invoke(props.hash, newState).catch(console.error);\n        setState(newState);\n    };\n    const changeType = (newType) => {\n        let value;\n        if (newType === 'boolean') {\n            value = false;\n        }\n        else if (newType === 'number') {\n            value = 0;\n        }\n        else {\n            value = '';\n        }\n        const newState = { ...state, type: newType, value };\n        setState(newState);\n        props.setProperty.invoke(props.hash, newState).catch(console.error);\n    };\n    return (React.createElement(\"div\", { key: props.hash, className: \"form-group small-field\" },\n        React.createElement(\"div\", { className: \"jp-FormGroup-content jp-LSPExtension-FormGroup-content\" },\n            React.createElement(\"input\", { className: \"form-control\", type: \"text\", required: true, placeholder: 'Property name', value: state.property, onChange: e => {\n                    changeName(e.target.value);\n                } }),\n            React.createElement(\"select\", { className: \"form-control\", value: state.type, onChange: e => changeType(e.target.value) },\n                React.createElement(\"option\", { value: \"string\" }, \"String\"),\n                React.createElement(\"option\", { value: \"number\" }, \"Number\"),\n                React.createElement(\"option\", { value: \"boolean\" }, \"Boolean\")),\n            React.createElement(\"input\", { className: \"form-control\", type: TYPE_MAP[state.type], required: false, placeholder: 'Property value', value: state.type !== 'boolean' ? state.value : undefined, checked: state.type === 'boolean' ? state.value : undefined, onChange: state.type !== 'boolean'\n                    ? e => changeValue(e.target.value, state.type)\n                    : e => changeValue(e.target.checked, state.type) }),\n            React.createElement(\"button\", { className: \"jp-mod-minimal jp-Button\", onClick: removeItem },\n                React.createElement(closeIcon.react, null)))));\n}\n/**\n * React setting component\n */\nclass SettingRenderer extends React.Component {\n    constructor(props) {\n        super(props);\n        /**\n         * Remove a setting item by its hash\n         *\n         * @param hash - hash of the item to be removed.\n         */\n        this.removeSetting = (hash) => {\n            if (hash in this.state.items) {\n                const items = {};\n                for (const key in this.state.items) {\n                    if (key !== hash) {\n                        items[key] = this.state.items[key];\n                    }\n                }\n                this.setState(old => {\n                    return { ...old, items };\n                }, () => {\n                    this.saveServerSetting();\n                });\n            }\n        };\n        /**\n         * Update a setting item by its hash\n         *\n         * @param hash - hash of the item to be updated.\n         * @param newSetting - new setting value.\n         */\n        this.updateSetting = (hash, newSetting) => {\n            if (hash in this.state.items) {\n                const items = {};\n                for (const key in this.state.items) {\n                    if (key === hash) {\n                        items[key] = { ...this.state.items[key], ...newSetting };\n                    }\n                    else {\n                        items[key] = this.state.items[key];\n                    }\n                }\n                this.setState(old => {\n                    return { ...old, items };\n                }, () => {\n                    this.saveServerSetting();\n                });\n            }\n        };\n        /**\n         * Add setting item to the setting component.\n         */\n        this.addServerSetting = () => {\n            let index = 0;\n            let key = 'newKey';\n            while (Object.values(this.state.items)\n                .map(val => val.serverName)\n                .includes(key)) {\n                index += 1;\n                key = `newKey-${index}`;\n            }\n            this.setState(old => ({\n                ...old,\n                items: {\n                    ...old.items,\n                    [UUID.uuid4()]: { ...this._defaultSetting, serverName: key }\n                }\n            }), () => {\n                this.saveServerSetting();\n            });\n        };\n        /**\n         * Save the value of setting items to the setting registry.\n         */\n        this.saveServerSetting = () => {\n            const settings = {};\n            Object.values(this.state.items).forEach(item => {\n                const { serverName, ...setting } = item;\n                settings[serverName] = setting;\n            });\n            this._setting.set(SETTING_NAME, settings).catch(console.error);\n        };\n        this._setting = props.formContext.settings;\n        this._trans = props.translator.load('jupyterlab');\n        const schema = this._setting.schema['definitions'];\n        this._defaultSetting = schema['languageServer']['default'];\n        this._schema = schema['languageServer']['properties'];\n        const title = props.schema.title;\n        const desc = props.schema.description;\n        const settings = props.formContext.settings;\n        const compositeData = settings.get(SETTING_NAME).composite;\n        let items = {};\n        if (compositeData) {\n            Object.entries(compositeData).forEach(([key, value]) => {\n                if (value) {\n                    const hash = UUID.uuid4();\n                    items[hash] = { serverName: key, ...value };\n                }\n            });\n        }\n        this.state = { title, desc, items };\n        this._debouncedUpdateSetting = new Debouncer(this.updateSetting.bind(this));\n    }\n    render() {\n        return (React.createElement(\"div\", null,\n            React.createElement(\"fieldset\", null,\n                React.createElement(\"legend\", null, this.state.title),\n                React.createElement(\"p\", { className: \"field-description\" }, this.state.desc),\n                React.createElement(\"div\", { className: \"field field-array field-array-of-object\" }, Object.entries(this.state.items).map(([hash, value], idx) => {\n                    return (React.createElement(BuildSettingForm, { key: `${idx}-${hash}`, trans: this._trans, removeSetting: this.removeSetting, updateSetting: this._debouncedUpdateSetting, serverHash: hash, settings: value, schema: this._schema }));\n                })),\n                React.createElement(\"div\", null,\n                    React.createElement(\"button\", { style: { margin: 2 }, className: \"jp-mod-styled jp-mod-reject\", onClick: this.addServerSetting }, this._trans.__('Add server'))))));\n    }\n}\n/**\n * Custom setting renderer for language server extension.\n */\nexport function renderServerSetting(props, translator) {\n    return React.createElement(SettingRenderer, { ...props, translator: translator });\n}\n//# sourceMappingURL=renderer.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module lsp-extension\n */\nimport { CodeExtractorsManager, DocumentConnectionManager, FeatureManager, ILSPCodeExtractorsManager, ILSPDocumentConnectionManager, ILSPFeatureManager, IWidgetLSPAdapterTracker, LanguageServerManager, TextForeignCodeExtractor, WidgetLSPAdapterTracker } from '@jupyterlab/lsp';\nimport { IRunningSessionManagers } from '@jupyterlab/running';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator } from '@jupyterlab/translation';\nimport { IFormRendererRegistry, pythonIcon } from '@jupyterlab/ui-components';\nimport { Signal } from '@lumino/signaling';\nimport { renderServerSetting } from './renderer';\nconst plugin = {\n    activate,\n    id: '@jupyterlab/lsp-extension:plugin',\n    description: 'Provides the language server connection manager.',\n    requires: [ITranslator, IWidgetLSPAdapterTracker],\n    optional: [IRunningSessionManagers],\n    provides: ILSPDocumentConnectionManager,\n    autoStart: true\n};\nconst featurePlugin = {\n    id: '@jupyterlab/lsp-extension:feature',\n    description: 'Provides the language server feature manager.',\n    activate: () => new FeatureManager(),\n    provides: ILSPFeatureManager,\n    autoStart: true\n};\nconst settingsPlugin = {\n    activate: activateSettings,\n    id: '@jupyterlab/lsp-extension:settings',\n    description: 'Provides the language server settings.',\n    requires: [ILSPDocumentConnectionManager, ISettingRegistry, ITranslator],\n    optional: [IFormRendererRegistry],\n    autoStart: true\n};\nconst codeExtractorManagerPlugin = {\n    id: '@jupyterlab/lsp-extension:code-extractor-manager',\n    autoStart: true,\n    description: 'Provides the code extractor manager.',\n    provides: ILSPCodeExtractorsManager,\n    activate: app => {\n        const extractorManager = new CodeExtractorsManager();\n        const markdownCellExtractor = new TextForeignCodeExtractor({\n            language: 'markdown',\n            isStandalone: false,\n            file_extension: 'md',\n            cellType: ['markdown']\n        });\n        extractorManager.register(markdownCellExtractor, null);\n        const rawCellExtractor = new TextForeignCodeExtractor({\n            language: 'text',\n            isStandalone: false,\n            file_extension: 'txt',\n            cellType: ['raw']\n        });\n        extractorManager.register(rawCellExtractor, null);\n        return extractorManager;\n    }\n};\n/**\n * Activate the lsp plugin.\n */\nfunction activate(app, translator, tracker, runningSessionManagers) {\n    const languageServerManager = new LanguageServerManager({\n        settings: app.serviceManager.serverSettings\n    });\n    const connectionManager = new DocumentConnectionManager({\n        languageServerManager,\n        adapterTracker: tracker\n    });\n    // Add a sessions manager if the running extension is available\n    if (runningSessionManagers) {\n        addRunningSessionManager(runningSessionManagers, connectionManager, translator);\n    }\n    return connectionManager;\n}\n/**\n * Activate the lsp settings plugin.\n */\nfunction activateSettings(app, connectionManager, settingRegistry, translator, settingRendererRegistry) {\n    const LANGUAGE_SERVERS = 'languageServers';\n    const languageServerManager = connectionManager.languageServerManager;\n    const updateOptions = (settings) => {\n        const options = settings.composite;\n        const languageServerSettings = (options.languageServers ||\n            {});\n        if (options.activate === 'on' && !languageServerManager.isEnabled) {\n            languageServerManager.enable().catch(console.error);\n        }\n        else if (options.activate === 'off' && languageServerManager.isEnabled) {\n            languageServerManager.disable();\n            return;\n        }\n        connectionManager.initialConfigurations = languageServerSettings;\n        // TODO: if priorities changed reset connections\n        connectionManager.updateConfiguration(languageServerSettings);\n        connectionManager.updateServerConfigurations(languageServerSettings);\n        connectionManager.updateLogging(options.logAllCommunication, options.setTrace);\n    };\n    settingRegistry.transform(plugin.id, {\n        fetch: plugin => {\n            const schema = plugin.schema.properties;\n            const defaultValue = {};\n            languageServerManager.sessions.forEach((_, key) => {\n                defaultValue[key] = { rank: 50, configuration: {} };\n            });\n            schema[LANGUAGE_SERVERS]['default'] = defaultValue;\n            return plugin;\n        },\n        compose: plugin => {\n            const properties = plugin.schema.properties;\n            const user = plugin.data.user;\n            const serverDefaultSettings = properties[LANGUAGE_SERVERS]['default'];\n            const serverUserSettings = user[LANGUAGE_SERVERS];\n            let serverComposite = { ...serverDefaultSettings };\n            if (serverUserSettings) {\n                serverComposite = { ...serverComposite, ...serverUserSettings };\n            }\n            const composite = {\n                [LANGUAGE_SERVERS]: serverComposite\n            };\n            Object.entries(properties).forEach(([key, value]) => {\n                if (key !== LANGUAGE_SERVERS) {\n                    if (key in user) {\n                        composite[key] = user[key];\n                    }\n                    else {\n                        composite[key] = value.default;\n                    }\n                }\n            });\n            plugin.data.composite = composite;\n            return plugin;\n        }\n    });\n    languageServerManager.sessionsChanged.connect(async () => {\n        await settingRegistry.load(plugin.id, true);\n    });\n    settingRegistry\n        .load(plugin.id)\n        .then(settings => {\n        updateOptions(settings);\n        settings.changed.connect(() => {\n            updateOptions(settings);\n        });\n        languageServerManager.disable();\n    })\n        .catch((reason) => {\n        console.error(reason.message);\n    });\n    if (settingRendererRegistry) {\n        const renderer = {\n            fieldRenderer: (props) => {\n                return renderServerSetting(props, translator);\n            }\n        };\n        settingRendererRegistry.addRenderer(`${plugin.id}.${LANGUAGE_SERVERS}`, renderer);\n    }\n}\nexport class RunningLanguageServer {\n    constructor(connection, manager) {\n        this._connection = new WeakSet([connection]);\n        this._manager = manager;\n        this._serverIdentifier = connection.serverIdentifier;\n        this._serverLanguage = connection.serverLanguage;\n    }\n    /**\n     * This is no-op because we do not do anything on server click event\n     */\n    open() {\n        /** no-op */\n    }\n    icon() {\n        return pythonIcon;\n    }\n    label() {\n        var _a, _b;\n        return `${(_a = this._serverIdentifier) !== null && _a !== void 0 ? _a : ''} (${(_b = this._serverLanguage) !== null && _b !== void 0 ? _b : ''})`;\n    }\n    shutdown() {\n        for (const [key, value] of this._manager.connections.entries()) {\n            if (this._connection.has(value)) {\n                const { uri } = this._manager.documents.get(key);\n                this._manager.unregisterDocument(uri);\n            }\n        }\n        this._manager.disconnect(this._serverIdentifier);\n    }\n}\n/**\n * Add the running terminal manager to the running panel.\n */\nfunction addRunningSessionManager(managers, lsManager, translator) {\n    const trans = translator.load('jupyterlab');\n    const signal = new Signal(lsManager);\n    lsManager.connected.connect(() => signal.emit(lsManager));\n    lsManager.disconnected.connect(() => signal.emit(lsManager));\n    lsManager.closed.connect(() => signal.emit(lsManager));\n    lsManager.documentsChanged.connect(() => signal.emit(lsManager));\n    let currentRunning = [];\n    managers.add({\n        name: trans.__('Language servers'),\n        supportsMultipleViews: false,\n        running: () => {\n            const connections = new Set([...lsManager.connections.values()]);\n            currentRunning = [...connections].map(conn => new RunningLanguageServer(conn, lsManager));\n            return currentRunning;\n        },\n        shutdownAll: () => {\n            currentRunning.forEach(item => {\n                item.shutdown();\n            });\n        },\n        refreshRunning: () => {\n            return void 0;\n        },\n        runningChanged: signal,\n        shutdownLabel: trans.__('Shut Down'),\n        shutdownAllLabel: trans.__('Shut Down All'),\n        shutdownAllConfirmationText: trans.__('Are you sure you want to permanently shut down all running language servers?')\n    });\n}\nconst adapterTrackerPlugin = {\n    id: '@jupyterlab/lsp-extension:tracker',\n    description: 'Provides the tracker of `WidgetLSPAdapter`.',\n    autoStart: true,\n    provides: IWidgetLSPAdapterTracker,\n    activate: (app) => {\n        return new WidgetLSPAdapterTracker({ shell: app.shell });\n    }\n};\n/**\n * Export the plugin as default.\n */\nexport default [\n    plugin,\n    featurePlugin,\n    settingsPlugin,\n    codeExtractorManagerPlugin,\n    adapterTrackerPlugin\n];\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/lsp/style/index.js';\nimport '@jupyterlab/running/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\n/**\n * The CodeEditor.IEditor adapter.\n */\nexport class EditorAdapter {\n    /**\n     * Instantiate a new EditorAdapter.\n     *\n     * @param options The instantiation options for a EditorAdapter.\n     */\n    constructor(options) {\n        this._widgetAdapter = options.widgetAdapter;\n        this._extensions = options.extensions;\n        void options.editor.ready().then(editor => {\n            this._injectExtensions(options.editor);\n        });\n    }\n    /**\n     * Dispose the handler.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this.isDisposed = true;\n        Signal.clearData(this);\n    }\n    /**\n     * Setup the editor.\n     */\n    _injectExtensions(editor) {\n        const codeEditor = editor.getEditor();\n        if (!codeEditor || codeEditor.isDisposed) {\n            return;\n        }\n        this._extensions.forEach(factory => {\n            const ext = factory.factory({\n                path: this._widgetAdapter.widget.context.path,\n                editor: editor,\n                widgetAdapter: this._widgetAdapter,\n                model: codeEditor.model,\n                inline: true\n            });\n            if (!ext) {\n                return;\n            }\n            codeEditor.injectExtension(ext.instance(codeEditor));\n        });\n    }\n}\n//# sourceMappingURL=editorAdapter.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport mergeWith from 'lodash.mergewith';\nimport { Dialog, showDialog } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { Signal } from '@lumino/signaling';\nimport { EditorAdapter } from './editorAdapter';\nconst createButton = Dialog.createButton;\n/**\n * The values should follow the https://microsoft.github.io/language-server-protocol/specification guidelines\n */\nconst MIME_TYPE_LANGUAGE_MAP = {\n    'text/x-rsrc': 'r',\n    'text/x-r-source': 'r',\n    // currently there are no LSP servers for IPython we are aware of\n    'text/x-ipython': 'python'\n};\n/**\n * Foreign code: low level adapter is not aware of the presence of foreign languages;\n * it operates on the virtual document and must not attempt to infer the language dependencies\n * as this would make the logic of inspections caching impossible to maintain, thus the WidgetAdapter\n * has to handle that, keeping multiple connections and multiple virtual documents.\n */\nexport class WidgetLSPAdapter {\n    // note: it could be using namespace/IOptions pattern,\n    // but I do not know how to make it work with the generic type T\n    // (other than using 'any' in the IOptions interface)\n    constructor(widget, options) {\n        this.widget = widget;\n        this.options = options;\n        /**\n         * Signal emitted when the adapter is connected.\n         */\n        this._adapterConnected = new Signal(this);\n        /**\n         * Signal emitted when the active editor have changed.\n         */\n        this._activeEditorChanged = new Signal(this);\n        /**\n         * Signal emitted when an editor is changed.\n         */\n        this._editorAdded = new Signal(this);\n        /**\n         * Signal emitted when an editor is removed.\n         */\n        this._editorRemoved = new Signal(this);\n        /**\n         * Signal emitted when the adapter is disposed.\n         */\n        this._disposed = new Signal(this);\n        this._isDisposed = false;\n        this._virtualDocument = null;\n        this._connectionManager = options.connectionManager;\n        this._isConnected = false;\n        this._trans = (options.translator || nullTranslator).load('jupyterlab');\n        // set up signal connections\n        this.widget.context.saveState.connect(this.onSaveState, this);\n        this.connectionManager.closed.connect(this.onConnectionClosed, this);\n        this.widget.disposed.connect(this.dispose, this);\n        this._editorToAdapter = new WeakMap();\n        this.editorAdded.connect(this._onEditorAdded, this);\n        this.editorRemoved.connect(this._onEditorRemoved, this);\n        this._connectionManager.languageServerManager.sessionsChanged.connect(this._onLspSessionOrFeatureChanged, this);\n        this.options.featureManager.featureRegistered.connect(this._onLspSessionOrFeatureChanged, this);\n    }\n    /**\n     * Check if the adapter is disposed\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Check if the document contains multiple editors\n     */\n    get hasMultipleEditors() {\n        return this.editors.length > 1;\n    }\n    /**\n     * Get the ID of the internal widget.\n     */\n    get widgetId() {\n        return this.widget.id;\n    }\n    /**\n     * Get the language identifier of the document\n     */\n    get language() {\n        // the values should follow https://microsoft.github.io/language-server-protocol/specification guidelines,\n        // see the table in https://microsoft.github.io/language-server-protocol/specification#textDocumentItem\n        if (MIME_TYPE_LANGUAGE_MAP.hasOwnProperty(this.mimeType)) {\n            return MIME_TYPE_LANGUAGE_MAP[this.mimeType];\n        }\n        else {\n            let withoutParameters = this.mimeType.split(';')[0];\n            let [type, subtype] = withoutParameters.split('/');\n            if (type === 'application' || type === 'text') {\n                if (subtype.startsWith('x-')) {\n                    return subtype.substring(2);\n                }\n                else {\n                    return subtype;\n                }\n            }\n            else {\n                return this.mimeType;\n            }\n        }\n    }\n    /**\n     * Signal emitted when the adapter is connected.\n     */\n    get adapterConnected() {\n        return this._adapterConnected;\n    }\n    /**\n     * Signal emitted when the active editor have changed.\n     */\n    get activeEditorChanged() {\n        return this._activeEditorChanged;\n    }\n    /**\n     * Signal emitted when the adapter is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * Signal emitted when the an editor is changed.\n     */\n    get editorAdded() {\n        return this._editorAdded;\n    }\n    /**\n     * Signal emitted when the an editor is removed.\n     */\n    get editorRemoved() {\n        return this._editorRemoved;\n    }\n    /**\n     * The virtual document is connected or not\n     */\n    get isConnected() {\n        return this._isConnected;\n    }\n    /**\n     * The LSP document and connection manager instance.\n     */\n    get connectionManager() {\n        return this._connectionManager;\n    }\n    /**\n     * The translator provider.\n     */\n    get trans() {\n        return this._trans;\n    }\n    /**\n     * Promise that resolves once the document is updated\n     */\n    get updateFinished() {\n        return this._updateFinished;\n    }\n    /**\n     * Internal virtual document of the adapter.\n     */\n    get virtualDocument() {\n        return this._virtualDocument;\n    }\n    /**\n     * Callback on connection closed event.\n     */\n    onConnectionClosed(_, { virtualDocument }) {\n        if (virtualDocument === this.virtualDocument) {\n            this.dispose();\n        }\n    }\n    /**\n     * Dispose the adapter.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this.editorAdded.disconnect(this._onEditorAdded, this);\n        this.editorRemoved.disconnect(this._onEditorRemoved, this);\n        this._connectionManager.languageServerManager.sessionsChanged.disconnect(this._onLspSessionOrFeatureChanged, this);\n        this.options.featureManager.featureRegistered.disconnect(this._onLspSessionOrFeatureChanged, this);\n        this._isDisposed = true;\n        this.disconnect();\n        this._virtualDocument = null;\n        this._disposed.emit();\n        Signal.clearData(this);\n    }\n    /**\n     * Disconnect virtual document from the language server.\n     */\n    disconnect() {\n        var _a, _b;\n        const uri = (_a = this.virtualDocument) === null || _a === void 0 ? void 0 : _a.uri;\n        const { model } = this.widget.context;\n        if (uri) {\n            this.connectionManager.unregisterDocument(uri);\n        }\n        model.contentChanged.disconnect(this._onContentChanged, this);\n        // pretend that all editors were removed to trigger the disconnection of even handlers\n        // they will be connected again on new connection\n        for (let { ceEditor: editor } of this.editors) {\n            this._editorRemoved.emit({\n                editor: editor\n            });\n        }\n        (_b = this.virtualDocument) === null || _b === void 0 ? void 0 : _b.dispose();\n    }\n    /**\n     * Update the virtual document.\n     */\n    updateDocuments() {\n        if (this._isDisposed) {\n            console.warn('Cannot update documents: adapter disposed');\n            return Promise.reject('Cannot update documents: adapter disposed');\n        }\n        return this.virtualDocument.updateManager.updateDocuments(this.editors);\n    }\n    /**\n     * Callback called on the document changed event.\n     */\n    documentChanged(virtualDocument, document, isInit = false) {\n        if (this._isDisposed) {\n            console.warn('Cannot swap document: adapter disposed');\n            return;\n        }\n        // TODO only send the difference, using connection.sendSelectiveChange()\n        let connection = this.connectionManager.connections.get(virtualDocument.uri);\n        if (!(connection === null || connection === void 0 ? void 0 : connection.isReady)) {\n            console.log('Skipping document update signal: connection not ready');\n            return;\n        }\n        connection.sendFullTextChange(virtualDocument.value, virtualDocument.documentInfo);\n    }\n    // equivalent to triggering didClose and didOpen, as per syncing specification,\n    // but also reloads the connection; used during file rename (or when it was moved)\n    reloadConnection() {\n        // ignore premature calls (before the editor was initialized)\n        if (this.virtualDocument === null) {\n            return;\n        }\n        // disconnect all existing connections (and dispose adapters)\n        this.disconnect();\n        // recreate virtual document using current path and language\n        // as virtual editor assumes it gets the virtual document at init,\n        // just dispose virtual editor (which disposes virtual document too)\n        // and re-initialize both virtual editor and document\n        this.initVirtual();\n        // reconnect\n        this.connectDocument(this.virtualDocument, true).catch(console.warn);\n    }\n    /**\n     * Callback on document saved event.\n     */\n    onSaveState(context, state) {\n        // ignore premature calls (before the editor was initialized)\n        if (this.virtualDocument === null) {\n            return;\n        }\n        if (state === 'completed') {\n            // note: must only be send to the appropriate connections as\n            // some servers (Julia) break if they receive save notification\n            // for a document that was not opened before, see:\n            // https://github.com/jupyter-lsp/jupyterlab-lsp/issues/490\n            const documentsToSave = [this.virtualDocument];\n            for (let virtualDocument of documentsToSave) {\n                let connection = this.connectionManager.connections.get(virtualDocument.uri);\n                if (!connection) {\n                    continue;\n                }\n                connection.sendSaved(virtualDocument.documentInfo);\n                for (let foreign of virtualDocument.foreignDocuments.values()) {\n                    documentsToSave.push(foreign);\n                }\n            }\n        }\n    }\n    /**\n     * Connect the virtual document with the language server.\n     */\n    async onConnected(data) {\n        let { virtualDocument } = data;\n        this._adapterConnected.emit(data);\n        this._isConnected = true;\n        try {\n            await this.updateDocuments();\n        }\n        catch (reason) {\n            console.warn('Could not update documents', reason);\n            return;\n        }\n        // refresh the document on the LSP server\n        this.documentChanged(virtualDocument, virtualDocument, true);\n        data.connection.serverNotifications['$/logTrace'].connect((connection, message) => {\n            console.log(data.connection.serverIdentifier, 'trace', virtualDocument.uri, message);\n        });\n        data.connection.serverNotifications['window/logMessage'].connect((connection, message) => {\n            console.log(connection.serverIdentifier + ': ' + message.message);\n        });\n        data.connection.serverNotifications['window/showMessage'].connect((connection, message) => {\n            void showDialog({\n                title: this.trans.__('Message from ') + connection.serverIdentifier,\n                body: message.message\n            });\n        });\n        data.connection.serverRequests['window/showMessageRequest'].setHandler(async (params) => {\n            const actionItems = params.actions;\n            const buttons = actionItems\n                ? actionItems.map(action => {\n                    return createButton({\n                        label: action.title\n                    });\n                })\n                : [createButton({ label: this.trans.__('Dismiss') })];\n            const result = await showDialog({\n                title: this.trans.__('Message from ') + data.connection.serverIdentifier,\n                body: params.message,\n                buttons: buttons\n            });\n            const choice = buttons.indexOf(result.button);\n            if (choice === -1) {\n                return null;\n            }\n            if (actionItems) {\n                return actionItems[choice];\n            }\n            return null;\n        });\n    }\n    /**\n     * Opens a connection for the document. The connection may or may\n     * not be initialized, yet, and depending on when this is called, the client\n     * may not be fully connected.\n     *\n     * @param virtualDocument a VirtualDocument\n     * @param sendOpen whether to open the document immediately\n     */\n    async connectDocument(virtualDocument, sendOpen = false) {\n        virtualDocument.foreignDocumentOpened.connect(this.onForeignDocumentOpened, this);\n        const connectionContext = await this._connect(virtualDocument).catch(console.error);\n        if (connectionContext && connectionContext.connection) {\n            virtualDocument.changed.connect(this.documentChanged, this);\n            if (sendOpen) {\n                connectionContext.connection.sendOpenWhenReady(virtualDocument.documentInfo);\n            }\n        }\n    }\n    /**\n     * Create the virtual document using current path and language.\n     */\n    initVirtual() {\n        var _a;\n        (_a = this._virtualDocument) === null || _a === void 0 ? void 0 : _a.dispose();\n        this._virtualDocument = this.createVirtualDocument();\n        this._onLspSessionOrFeatureChanged();\n    }\n    /**\n     * Handler for opening a document contained in a parent document. The assumption\n     * is that the editor already exists for this, and as such the document\n     * should be queued for immediate opening.\n     *\n     * @param host the VirtualDocument that contains the VirtualDocument in another language\n     * @param context information about the foreign VirtualDocument\n     */\n    async onForeignDocumentOpened(host, context) {\n        const { foreignDocument } = context;\n        await this.connectDocument(foreignDocument, true);\n        foreignDocument.foreignDocumentClosed.connect(this._onForeignDocumentClosed, this);\n    }\n    _onEditorAdded(sender, change) {\n        const { editor } = change;\n        const editorAdapter = new EditorAdapter({\n            editor: editor,\n            widgetAdapter: this,\n            extensions: this.options.featureManager.extensionFactories()\n        });\n        this._editorToAdapter.set(editor, editorAdapter);\n    }\n    _onEditorRemoved(sender, change) {\n        const { editor } = change;\n        const adapter = this._editorToAdapter.get(editor);\n        adapter === null || adapter === void 0 ? void 0 : adapter.dispose();\n        this._editorToAdapter.delete(editor);\n    }\n    /**\n     * Callback called when a foreign document is closed,\n     * the associated signals with this virtual document\n     * are disconnected.\n     */\n    _onForeignDocumentClosed(_, context) {\n        const { foreignDocument } = context;\n        foreignDocument.foreignDocumentClosed.disconnect(this._onForeignDocumentClosed, this);\n        foreignDocument.foreignDocumentOpened.disconnect(this.onForeignDocumentOpened, this);\n        foreignDocument.changed.disconnect(this.documentChanged, this);\n    }\n    /**\n     * Detect the capabilities for the document type then\n     * open the websocket connection with the language server.\n     */\n    async _connect(virtualDocument) {\n        let language = virtualDocument.language;\n        let capabilities = {\n            textDocument: {\n                synchronization: {\n                    dynamicRegistration: true,\n                    willSave: false,\n                    didSave: true,\n                    willSaveWaitUntil: false\n                }\n            },\n            workspace: {\n                didChangeConfiguration: {\n                    dynamicRegistration: true\n                }\n            }\n        };\n        capabilities = mergeWith(capabilities, this.options.featureManager.clientCapabilities());\n        let options = {\n            capabilities,\n            virtualDocument,\n            language,\n            hasLspSupportedFile: virtualDocument.hasLspSupportedFile\n        };\n        let connection = await this.connectionManager.connect(options);\n        if (connection) {\n            await this.onConnected({ virtualDocument, connection });\n            return {\n                connection,\n                virtualDocument\n            };\n        }\n        else {\n            return undefined;\n        }\n    }\n    /**\n     * Handle content changes and update all virtual documents after a change.\n     *\n     * #### Notes\n     * Update to the state of a notebook may be done without a notice on the\n     * CodeMirror level, e.g. when a cell is deleted. Therefore a\n     * JupyterLab-specific signal is watched instead.\n     *\n     * While by not using the change event of CodeMirror editors we lose an easy\n     * way to send selective (range) updates this can be still implemented by\n     * comparison of before/after states of the virtual documents, which is\n     * more resilient and editor-independent.\n     */\n    async _onContentChanged(_) {\n        // Update the virtual documents.\n        // Sending the updates to LSP is out of scope here.\n        const promise = this.updateDocuments();\n        if (!promise) {\n            console.warn('Could not update documents');\n            return;\n        }\n        this._updateFinished = promise.catch(console.warn);\n        await this.updateFinished;\n    }\n    /**\n     * Check if the virtual document should be updated on content\n     * changed signal. Returns `true` if two following conditions are\n     * are satisfied:\n     *  - The LSP feature is enabled.\n     *  - The LSP features list is not empty.\n     */\n    _shouldUpdateVirtualDocument() {\n        const { languageServerManager } = this.connectionManager;\n        return (languageServerManager.isEnabled &&\n            this.options.featureManager.features.length > 0);\n    }\n    /**\n     * Connect the virtual document update handler with the content\n     * updated signal.This method is invoked at startup and when\n     * the LSP server status changed or when a LSP feature is registered.\n     */\n    _onLspSessionOrFeatureChanged() {\n        if (!this._virtualDocument) {\n            return;\n        }\n        const { model } = this.widget.context;\n        if (this._shouldUpdateVirtualDocument()) {\n            model.contentChanged.connect(this._onContentChanged, this);\n        }\n        else {\n            model.contentChanged.disconnect(this._onContentChanged, this);\n        }\n    }\n}\n//# sourceMappingURL=adapter.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { DocumentWidget } from '@jupyterlab/docregistry';\nimport { Signal } from '@lumino/signaling';\n/**\n * A class that keeps track of widget adapter instances.\n *\n * @typeparam T - The type of widget being tracked. Defaults to `WidgetLSPAdapter`.\n */\nexport class WidgetLSPAdapterTracker {\n    /**\n     * Create a new widget tracker.\n     *\n     * @param options - The instantiation options for a widget tracker.\n     */\n    constructor(options) {\n        this._isDisposed = false;\n        this._current = null;\n        this._adapters = new Set();\n        this._adapterAdded = new Signal(this);\n        this._adapterUpdated = new Signal(this);\n        this._currentChanged = new Signal(this);\n        const shell = (this._shell = options.shell);\n        shell.currentChanged.connect((_, args) => {\n            let newValue = args.newValue;\n            if (!newValue || !(newValue instanceof DocumentWidget)) {\n                return;\n            }\n            const adapter = this.find(value => value.widget === newValue);\n            if (!adapter) {\n                return;\n            }\n            this._current = adapter;\n            this._currentChanged.emit(adapter);\n        });\n    }\n    /**\n     * A signal emitted when the current adapter changes.\n     */\n    get currentChanged() {\n        return this._currentChanged;\n    }\n    /**\n     * The current adapter is the most recently focused or added adapter.\n     *\n     * #### Notes\n     * It is the most recently focused adapter, or the most recently added\n     * adapter if no adapter has taken focus.\n     */\n    get currentAdapter() {\n        return this._current;\n    }\n    /**\n     * The number of adapter held by the tracker.\n     */\n    get size() {\n        return this._adapters.size;\n    }\n    /**\n     * A signal emitted when an adapter is added.\n     */\n    get adapterAdded() {\n        return this._adapterAdded;\n    }\n    /**\n     * A signal emitted when an adapter is updated.\n     */\n    get adapterUpdated() {\n        return this._adapterUpdated;\n    }\n    /**\n     * Add a new adapter to the tracker.\n     *\n     * @param adapter - The adapter being added.\n     *\n     * #### Notes.\n     * The newly added adapter becomes the current adapter unless the shell\n     * already had a DocumentWidget as the activeWidget.\n     */\n    add(adapter) {\n        if (adapter.isDisposed) {\n            const warning = 'A disposed object cannot be added.';\n            console.warn(warning, adapter);\n            throw new Error(warning);\n        }\n        if (this._adapters.has(adapter)) {\n            const warning = 'This object already exists in the pool.';\n            console.warn(warning, adapter);\n            throw new Error(warning);\n        }\n        this._adapters.add(adapter);\n        this._adapterAdded.emit(adapter);\n        adapter.disposed.connect(() => {\n            this._adapters.delete(adapter);\n            if (adapter === this._current) {\n                this._current = null;\n                this._currentChanged.emit(this._current);\n            }\n        }, this);\n        // Only update the current adapter, when there is no shell.activeWidget\n        // or the active widget is not a DocumentWidget\n        // We will be able to use other panels while keeping the current adapter.\n        const active = this._shell.activeWidget;\n        if (!active || !(active instanceof DocumentWidget)) {\n            this._current = adapter;\n            this._currentChanged.emit(adapter);\n        }\n    }\n    /**\n     * Test whether the tracker is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the tracker.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._adapters.clear();\n        Signal.clearData(this);\n    }\n    /**\n     * Find the first adapter in the tracker that satisfies a filter function.\n     *\n     * @param fn The filter function to call on each adapter.\n     *\n     * #### Notes\n     * If no adapter is found, the value returned is `undefined`.\n     */\n    find(fn) {\n        const values = this._adapters.values();\n        for (const value of values) {\n            if (fn(value)) {\n                return value;\n            }\n        }\n        return undefined;\n    }\n    /**\n     * Iterate through each adapter in the tracker.\n     *\n     * @param fn - The function to call on each adapter.\n     */\n    forEach(fn) {\n        this._adapters.forEach(fn);\n    }\n    /**\n     * Filter the adapter in the tracker based on a predicate.\n     *\n     * @param fn - The function by which to filter.\n     */\n    filter(fn) {\n        const filtered = [];\n        this.forEach(value => {\n            if (fn(value)) {\n                filtered.push(value);\n            }\n        });\n        return filtered;\n    }\n    /**\n     * Check if this tracker has the specified adapter.\n     *\n     * @param adapter - The adapter whose existence is being checked.\n     */\n    has(adapter) {\n        return this._adapters.has(adapter);\n    }\n}\n//# sourceMappingURL=tracker.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nexport * from './adapter';\nexport * from './editorAdapter';\nexport * from './tracker';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\nexport var ILanguageServerManager;\n(function (ILanguageServerManager) {\n    /**\n     * LSP endpoint prefix.\n     */\n    ILanguageServerManager.URL_NS = 'lsp';\n})(ILanguageServerManager || (ILanguageServerManager = {}));\n/**\n * @alpha\n *\n * The virtual documents and language server connections manager\n * Require this token in your extension to access the associated virtual\n * document and LS connection of opened documents.\n *\n */\nexport const ILSPDocumentConnectionManager = new Token('@jupyterlab/lsp:ILSPDocumentConnectionManager', 'Provides the virtual documents and language server connections service.');\n/**\n * @alpha\n *\n * The language server feature manager. Require this token in your extension\n * to register the client capabilities implemented by your extension.\n *\n */\nexport const ILSPFeatureManager = new Token('@jupyterlab/lsp:ILSPFeatureManager', 'Provides the language server feature manager. This token is required to register new client capabilities.');\n/**\n * @alpha\n *\n * The code extractor manager. Require this token in your extension to\n * register new code extractors. Code extractor allows creating multiple\n * virtual documents from an opened document.\n *\n */\nexport const ILSPCodeExtractorsManager = new Token('@jupyterlab/lsp:ILSPCodeExtractorsManager', 'Provides the code extractor manager. This token is required in your extension to register code extractor allowing the creation of multiple virtual document from an opened document.');\n/**\n * @alpha\n *\n * The WidgetLSPAdapter tracker. Require this token in your extension to\n * track WidgetLSPAdapters.\n *\n */\nexport const IWidgetLSPAdapterTracker = new Token('@jupyterlab/lsp:IWidgetLSPAdapterTracker', 'Provides the WidgetLSPAdapter tracker. This token is required in your extension to track WidgetLSPAdapters.');\n/**\n * Method strings are reproduced here because a non-typing import of\n * `vscode-languageserver-protocol` is ridiculously expensive.\n */\nexport var Method;\n(function (Method) {\n    /** Server notifications */\n    let ServerNotification;\n    (function (ServerNotification) {\n        ServerNotification[\"PUBLISH_DIAGNOSTICS\"] = \"textDocument/publishDiagnostics\";\n        ServerNotification[\"SHOW_MESSAGE\"] = \"window/showMessage\";\n        ServerNotification[\"LOG_TRACE\"] = \"$/logTrace\";\n        ServerNotification[\"LOG_MESSAGE\"] = \"window/logMessage\";\n    })(ServerNotification = Method.ServerNotification || (Method.ServerNotification = {}));\n    /** Client notifications */\n    let ClientNotification;\n    (function (ClientNotification) {\n        ClientNotification[\"DID_CHANGE\"] = \"textDocument/didChange\";\n        ClientNotification[\"DID_CHANGE_CONFIGURATION\"] = \"workspace/didChangeConfiguration\";\n        ClientNotification[\"DID_OPEN\"] = \"textDocument/didOpen\";\n        ClientNotification[\"DID_SAVE\"] = \"textDocument/didSave\";\n        ClientNotification[\"INITIALIZED\"] = \"initialized\";\n        ClientNotification[\"SET_TRACE\"] = \"$/setTrace\";\n    })(ClientNotification = Method.ClientNotification || (Method.ClientNotification = {}));\n    /** Server requests */\n    let ServerRequest;\n    (function (ServerRequest) {\n        ServerRequest[\"REGISTER_CAPABILITY\"] = \"client/registerCapability\";\n        ServerRequest[\"SHOW_MESSAGE_REQUEST\"] = \"window/showMessageRequest\";\n        ServerRequest[\"UNREGISTER_CAPABILITY\"] = \"client/unregisterCapability\";\n        ServerRequest[\"WORKSPACE_CONFIGURATION\"] = \"workspace/configuration\";\n    })(ServerRequest = Method.ServerRequest || (Method.ServerRequest = {}));\n    /** Client requests */\n    let ClientRequest;\n    (function (ClientRequest) {\n        ClientRequest[\"CODE_ACTION\"] = \"textDocument/codeAction\";\n        ClientRequest[\"COMPLETION\"] = \"textDocument/completion\";\n        ClientRequest[\"COMPLETION_ITEM_RESOLVE\"] = \"completionItem/resolve\";\n        ClientRequest[\"DEFINITION\"] = \"textDocument/definition\";\n        ClientRequest[\"DOCUMENT_COLOR\"] = \"textDocument/documentColor\";\n        ClientRequest[\"DOCUMENT_HIGHLIGHT\"] = \"textDocument/documentHighlight\";\n        ClientRequest[\"DOCUMENT_SYMBOL\"] = \"textDocument/documentSymbol\";\n        ClientRequest[\"HOVER\"] = \"textDocument/hover\";\n        ClientRequest[\"IMPLEMENTATION\"] = \"textDocument/implementation\";\n        ClientRequest[\"INITIALIZE\"] = \"initialize\";\n        ClientRequest[\"REFERENCES\"] = \"textDocument/references\";\n        ClientRequest[\"RENAME\"] = \"textDocument/rename\";\n        ClientRequest[\"SIGNATURE_HELP\"] = \"textDocument/signatureHelp\";\n        ClientRequest[\"TYPE_DEFINITION\"] = \"textDocument/typeDefinition\";\n        ClientRequest[\"LINKED_EDITING_RANGE\"] = \"textDocument/linkedEditingRange\";\n        ClientRequest[\"INLINE_VALUE\"] = \"textDocument/inlineValue\";\n        ClientRequest[\"INLAY_HINT\"] = \"textDocument/inlayHint\";\n        ClientRequest[\"WORKSPACE_SYMBOL\"] = \"workspace/symbol\";\n        ClientRequest[\"WORKSPACE_SYMBOL_RESOLVE\"] = \"workspaceSymbol/resolve\";\n        ClientRequest[\"FORMATTING\"] = \"textDocument/formatting\";\n        ClientRequest[\"RANGE_FORMATTING\"] = \"textDocument/rangeFormatting\";\n    })(ClientRequest = Method.ClientRequest || (Method.ClientRequest = {}));\n})(Method || (Method = {}));\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport mergeWith from 'lodash.mergewith';\n/**\n * Helper to wait for timeout.\n *\n * @param  timeout - time out in ms\n */\nexport async function sleep(timeout) {\n    return new Promise(resolve => {\n        setTimeout(() => {\n            resolve();\n        }, timeout);\n    });\n}\n/**\n * Wait for an event by pooling the `isReady` function.\n */\nexport function untilReady(isReady, maxRetrials = 35, interval = 50, intervalModifier = (i) => i) {\n    return (async () => {\n        let i = 0;\n        while (isReady() !== true) {\n            i += 1;\n            if (maxRetrials !== -1 && i > maxRetrials) {\n                throw Error('Too many retrials');\n            }\n            interval = intervalModifier(interval);\n            await sleep(interval);\n        }\n        return isReady;\n    })();\n}\n/**\n * Convert dotted path into dictionary.\n */\nexport function expandDottedPaths(obj) {\n    const settings = [];\n    for (let key in obj) {\n        const parsed = expandPath(key.split('.'), obj[key]);\n        settings.push(parsed);\n    }\n    return mergeWith({}, ...settings);\n}\n/**\n * The docs for many language servers show settings in the\n * VSCode format, e.g.: \"pyls.plugins.pyflakes.enabled\"\n *\n * VSCode converts that dot notation to JSON behind the scenes,\n * as the language servers themselves don't accept that syntax.\n */\nexport const expandPath = (path, value) => {\n    const obj = Object.create(null);\n    let curr = obj;\n    path.forEach((prop, i) => {\n        curr[prop] = Object.create(null);\n        if (i === path.length - 1) {\n            curr[prop] = value;\n        }\n        else {\n            curr = curr[prop];\n        }\n    });\n    return obj;\n};\n/**\n * An extended map which will create value for key on the fly.\n */\nexport class DefaultMap extends Map {\n    constructor(defaultFactory, entries) {\n        super(entries);\n        this.defaultFactory = defaultFactory;\n    }\n    get(k) {\n        return this.getOrCreate(k);\n    }\n    getOrCreate(k, ...args) {\n        if (this.has(k)) {\n            return super.get(k);\n        }\n        else {\n            let v = this.defaultFactory(k, ...args);\n            this.set(k, v);\n            return v;\n        }\n    }\n}\n//# sourceMappingURL=utils.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n/**\n * Register the capabilities with the server capabilities provider\n *\n * @param serverCapabilities - server capabilities provider.\n * @param registration -  capabilities to be registered.\n * @return - the new server capabilities provider\n */\nfunction registerServerCapability(serverCapabilities, registration) {\n    const serverCapabilitiesCopy = JSON.parse(JSON.stringify(serverCapabilities));\n    const { method, registerOptions } = registration;\n    const providerName = method.substring(13) + 'Provider';\n    if (providerName) {\n        if (!registerOptions) {\n            serverCapabilitiesCopy[providerName] = true;\n        }\n        else {\n            serverCapabilitiesCopy[providerName] = JSON.parse(JSON.stringify(registerOptions));\n        }\n    }\n    else {\n        console.warn('Could not register server capability.', registration);\n        return null;\n    }\n    return serverCapabilitiesCopy;\n}\n/**\n * Unregister the capabilities with the server capabilities provider\n *\n * @param serverCapabilities - server capabilities provider.\n * @param registration -  capabilities to be unregistered.\n * @return - the new server capabilities provider\n */\nfunction unregisterServerCapability(serverCapabilities, unregistration) {\n    const serverCapabilitiesCopy = JSON.parse(JSON.stringify(serverCapabilities));\n    const { method } = unregistration;\n    const providerName = method.substring(13) + 'Provider';\n    delete serverCapabilitiesCopy[providerName];\n    return serverCapabilitiesCopy;\n}\nexport { registerServerCapability, unregisterServerCapability };\n//# sourceMappingURL=server-capability-registration.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n// Disclaimer/acknowledgement: Fragments are based on https://github.com/wylieconlon/lsp-editor-adapter,\n// which is copyright of wylieconlon and contributors and ISC licenced.\n// ISC licence is, quote, \"functionally equivalent to the simplified BSD and MIT licenses,\n// but without language deemed unnecessary following the Berne Convention.\" (Wikipedia).\n// Introduced modifications are BSD licenced, copyright JupyterLab development team.\nimport { ConsoleLogger, listen } from 'vscode-ws-jsonrpc';\nimport { Signal } from '@lumino/signaling';\nimport { registerServerCapability, unregisterServerCapability } from './server-capability-registration';\nexport class LspWsConnection {\n    constructor(options) {\n        /**\n         * Map to track opened virtual documents..\n         */\n        this.openedUris = new Map();\n        /**\n         * The connection is connected?\n         */\n        this._isConnected = false;\n        /**\n         * The connection is initialized?\n         */\n        this._isInitialized = false;\n        /**\n         * Array of LSP callback disposables, it is used to\n         * clear the callbacks when the connection is disposed.\n         */\n        this._disposables = [];\n        this._disposed = new Signal(this);\n        this._isDisposed = false;\n        this._rootUri = options.rootUri;\n    }\n    /**\n     * Is the language server is connected?\n     */\n    get isConnected() {\n        return this._isConnected;\n    }\n    /**\n     * Is the language server is initialized?\n     */\n    get isInitialized() {\n        return this._isInitialized;\n    }\n    /**\n     * Is the language server is connected and initialized?\n     */\n    get isReady() {\n        return this._isConnected && this._isInitialized;\n    }\n    /**\n     * A signal emitted when the connection is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * Check if the connection is disposed\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Initialize a connection over a web socket that speaks the LSP protocol\n     */\n    connect(socket) {\n        this.socket = socket;\n        listen({\n            webSocket: this.socket,\n            logger: new ConsoleLogger(),\n            onConnection: (connection) => {\n                connection.listen();\n                this._isConnected = true;\n                this.connection = connection;\n                this.sendInitialize();\n                const registerCapabilityDisposable = this.connection.onRequest('client/registerCapability', (params) => {\n                    params.registrations.forEach((capabilityRegistration) => {\n                        try {\n                            this.serverCapabilities = registerServerCapability(this.serverCapabilities, capabilityRegistration);\n                        }\n                        catch (err) {\n                            console.error(err);\n                        }\n                    });\n                });\n                this._disposables.push(registerCapabilityDisposable);\n                const unregisterCapabilityDisposable = this.connection.onRequest('client/unregisterCapability', (params) => {\n                    params.unregisterations.forEach((capabilityUnregistration) => {\n                        this.serverCapabilities = unregisterServerCapability(this.serverCapabilities, capabilityUnregistration);\n                    });\n                });\n                this._disposables.push(unregisterCapabilityDisposable);\n                const disposable = this.connection.onClose(() => {\n                    this._isConnected = false;\n                });\n                this._disposables.push(disposable);\n            }\n        });\n    }\n    /**\n     * Close the connection\n     */\n    close() {\n        if (this.connection) {\n            this.connection.dispose();\n        }\n        this.openedUris.clear();\n        this.socket.close();\n    }\n    /**\n     * The initialize request telling the server which options the client supports\n     */\n    sendInitialize() {\n        if (!this._isConnected) {\n            return;\n        }\n        this.openedUris.clear();\n        const message = this.initializeParams();\n        this.connection\n            .sendRequest('initialize', message)\n            .then(params => {\n            this.onServerInitialized(params);\n        }, e => {\n            console.warn('LSP websocket connection initialization failure', e);\n        });\n    }\n    /**\n     * Inform the server that the document was opened\n     */\n    sendOpen(documentInfo) {\n        const textDocumentMessage = {\n            textDocument: {\n                uri: documentInfo.uri,\n                languageId: documentInfo.languageId,\n                text: documentInfo.text,\n                version: documentInfo.version\n            }\n        };\n        this.connection\n            .sendNotification('textDocument/didOpen', textDocumentMessage)\n            .catch(console.error);\n        this.openedUris.set(documentInfo.uri, true);\n        this.sendChange(documentInfo);\n    }\n    /**\n     * Sends the full text of the document to the server\n     */\n    sendChange(documentInfo) {\n        if (!this.isReady) {\n            return;\n        }\n        if (!this.openedUris.get(documentInfo.uri)) {\n            this.sendOpen(documentInfo);\n            return;\n        }\n        const textDocumentChange = {\n            textDocument: {\n                uri: documentInfo.uri,\n                version: documentInfo.version\n            },\n            contentChanges: [{ text: documentInfo.text }]\n        };\n        this.connection\n            .sendNotification('textDocument/didChange', textDocumentChange)\n            .catch(console.error);\n        documentInfo.version++;\n    }\n    /**\n     * Send save notification to the server.\n     */\n    sendSaved(documentInfo) {\n        if (!this.isReady) {\n            return;\n        }\n        const textDocumentChange = {\n            textDocument: {\n                uri: documentInfo.uri,\n                version: documentInfo.version\n            },\n            text: documentInfo.text\n        };\n        this.connection\n            .sendNotification('textDocument/didSave', textDocumentChange)\n            .catch(console.error);\n    }\n    /**\n     * Send configuration change to the server.\n     */\n    sendConfigurationChange(settings) {\n        if (!this.isReady) {\n            return;\n        }\n        this.connection\n            .sendNotification('workspace/didChangeConfiguration', settings)\n            .catch(console.error);\n    }\n    /**\n     * Dispose the connection.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._disposables.forEach(disposable => {\n            disposable.dispose();\n        });\n        this._disposed.emit();\n        Signal.clearData(this);\n    }\n    /**\n     * Callback called when the server is initialized.\n     */\n    onServerInitialized(params) {\n        this._isInitialized = true;\n        this.serverCapabilities = params.capabilities;\n        this.connection.sendNotification('initialized', {}).catch(console.error);\n        this.connection\n            .sendNotification('workspace/didChangeConfiguration', {\n            settings: {}\n        })\n            .catch(console.error);\n    }\n    /**\n     * Initialization parameters to be sent to the language server.\n     * Subclasses should override this when adding more features.\n     */\n    initializeParams() {\n        return {\n            capabilities: {},\n            processId: null,\n            rootUri: this._rootUri,\n            workspaceFolders: null\n        };\n    }\n}\n//# sourceMappingURL=ws-connection.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\nimport { Method } from './tokens';\nimport { untilReady } from './utils';\nimport { registerServerCapability, unregisterServerCapability } from './ws-connection/server-capability-registration';\nimport { LspWsConnection } from './ws-connection/ws-connection';\n/**\n * Helper class to handle client request\n */\nclass ClientRequestHandler {\n    constructor(connection, method, emitter) {\n        this.connection = connection;\n        this.method = method;\n        this.emitter = emitter;\n    }\n    request(params) {\n        // TODO check if is ready?\n        this.emitter.log(MessageKind.clientRequested, {\n            method: this.method,\n            message: params\n        });\n        return this.connection\n            .sendRequest(this.method, params)\n            .then((result) => {\n            this.emitter.log(MessageKind.resultForClient, {\n                method: this.method,\n                message: params\n            });\n            return result;\n        });\n    }\n}\n/**\n * Helper class to handle server responses\n */\nclass ServerRequestHandler {\n    constructor(connection, method, emitter) {\n        this.connection = connection;\n        this.method = method;\n        this.emitter = emitter;\n        // on request accepts \"thenable\"\n        this.connection.onRequest(method, this._handle.bind(this));\n        this._handler = null;\n    }\n    setHandler(handler) {\n        this._handler = handler;\n    }\n    clearHandler() {\n        this._handler = null;\n    }\n    _handle(request) {\n        this.emitter.log(MessageKind.serverRequested, {\n            method: this.method,\n            message: request\n        });\n        if (!this._handler) {\n            return new Promise(() => undefined);\n        }\n        return this._handler(request, this.emitter).then(result => {\n            this.emitter.log(MessageKind.responseForServer, {\n                method: this.method,\n                message: result\n            });\n            return result;\n        });\n    }\n}\nexport const Provider = {\n    TEXT_DOCUMENT_SYNC: 'textDocumentSync',\n    COMPLETION: 'completionProvider',\n    HOVER: 'hoverProvider',\n    SIGNATURE_HELP: 'signatureHelpProvider',\n    DECLARATION: 'declarationProvider',\n    DEFINITION: 'definitionProvider',\n    TYPE_DEFINITION: 'typeDefinitionProvider',\n    IMPLEMENTATION: 'implementationProvider',\n    REFERENCES: 'referencesProvider',\n    DOCUMENT_HIGHLIGHT: 'documentHighlightProvider',\n    DOCUMENT_SYMBOL: 'documentSymbolProvider',\n    CODE_ACTION: 'codeActionProvider',\n    CODE_LENS: 'codeLensProvider',\n    DOCUMENT_LINK: 'documentLinkProvider',\n    COLOR: 'colorProvider',\n    DOCUMENT_FORMATTING: 'documentFormattingProvider',\n    DOCUMENT_RANGE_FORMATTING: 'documentRangeFormattingProvider',\n    DOCUMENT_ON_TYPE_FORMATTING: 'documentOnTypeFormattingProvider',\n    RENAME: 'renameProvider',\n    FOLDING_RANGE: 'foldingRangeProvider',\n    EXECUTE_COMMAND: 'executeCommandProvider',\n    SELECTION_RANGE: 'selectionRangeProvider',\n    WORKSPACE_SYMBOL: 'workspaceSymbolProvider',\n    WORKSPACE: 'workspace'\n};\n/**\n * Create a map between the request method and its handler\n */\nfunction createMethodMap(methods, handlerFactory) {\n    const result = {};\n    for (let method of Object.values(methods)) {\n        result[method] = handlerFactory(method);\n    }\n    return result;\n}\nvar MessageKind;\n(function (MessageKind) {\n    MessageKind[MessageKind[\"clientNotifiedServer\"] = 0] = \"clientNotifiedServer\";\n    MessageKind[MessageKind[\"serverNotifiedClient\"] = 1] = \"serverNotifiedClient\";\n    MessageKind[MessageKind[\"serverRequested\"] = 2] = \"serverRequested\";\n    MessageKind[MessageKind[\"clientRequested\"] = 3] = \"clientRequested\";\n    MessageKind[MessageKind[\"resultForClient\"] = 4] = \"resultForClient\";\n    MessageKind[MessageKind[\"responseForServer\"] = 5] = \"responseForServer\";\n})(MessageKind || (MessageKind = {}));\nexport class LSPConnection extends LspWsConnection {\n    constructor(options) {\n        super(options);\n        /**\n         * Is the connection is closed manually?\n         */\n        this._closingManually = false;\n        this._closeSignal = new Signal(this);\n        this._errorSignal = new Signal(this);\n        this._serverInitialized = new Signal(this);\n        this._options = options;\n        this.logAllCommunication = false;\n        this.serverIdentifier = options.serverIdentifier;\n        this.serverLanguage = options.languageId;\n        this.documentsToOpen = [];\n        this.clientNotifications =\n            this.constructNotificationHandlers(Method.ClientNotification);\n        this.serverNotifications =\n            this.constructNotificationHandlers(Method.ServerNotification);\n    }\n    /**\n     * Signal emitted when the connection is closed.\n     */\n    get closeSignal() {\n        return this._closeSignal;\n    }\n    /**\n     * Signal emitted when the connection receives an error\n     * message.\n     */\n    get errorSignal() {\n        return this._errorSignal;\n    }\n    /**\n     * Signal emitted when the connection is initialized.\n     */\n    get serverInitialized() {\n        return this._serverInitialized;\n    }\n    /**\n     * Dispose the connection.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        if (this.serverRequests) {\n            // `serverRequests` may be undefined if dispose is called during initialization sequence\n            Object.values(this.serverRequests).forEach(request => request.clearHandler());\n        }\n        this.close();\n        super.dispose();\n    }\n    /**\n     * Helper to print the logs to logger, for now we are using\n     * directly the browser's console.\n     */\n    log(kind, message) {\n        if (this.logAllCommunication) {\n            console.log(kind, message);\n        }\n    }\n    /**\n     * Send the open request to the backend when the server is\n     * ready.\n     */\n    sendOpenWhenReady(documentInfo) {\n        if (this.isReady) {\n            this.sendOpen(documentInfo);\n        }\n        else {\n            this.documentsToOpen.push(documentInfo);\n        }\n    }\n    /**\n     * Send the document changes to the server.\n     */\n    sendSelectiveChange(changeEvent, documentInfo) {\n        this._sendChange([changeEvent], documentInfo);\n    }\n    /**\n     * Send all changes to the server.\n     */\n    sendFullTextChange(text, documentInfo) {\n        this._sendChange([{ text }], documentInfo);\n    }\n    /**\n     * Check if a capability is available in the server capabilities.\n     */\n    provides(capability) {\n        return !!(this.serverCapabilities && this.serverCapabilities[capability]);\n    }\n    /**\n     * Close the connection to the server.\n     */\n    close() {\n        try {\n            this._closingManually = true;\n            super.close();\n        }\n        catch (e) {\n            this._closingManually = false;\n        }\n    }\n    /**\n     * Initialize a connection over a web socket that speaks the LSP.\n     */\n    connect(socket) {\n        super.connect(socket);\n        untilReady(() => {\n            return this.isConnected;\n        }, -1)\n            .then(() => {\n            const disposable = this.connection.onClose(() => {\n                this._isConnected = false;\n                this._closeSignal.emit(this._closingManually);\n            });\n            this._disposables.push(disposable);\n        })\n            .catch(() => {\n            console.error('Could not connect onClose signal');\n        });\n    }\n    /**\n     * Get send request to the server to get completion results\n     * from a completion item\n     */\n    async getCompletionResolve(completionItem) {\n        if (!this.isReady) {\n            return;\n        }\n        return this.connection.sendRequest('completionItem/resolve', completionItem);\n    }\n    /**\n     * Generate the notification handlers\n     */\n    constructNotificationHandlers(methods) {\n        const factory = () => new Signal(this);\n        return createMethodMap(methods, factory);\n    }\n    /**\n     * Generate the client request handler\n     */\n    constructClientRequestHandler(methods) {\n        return createMethodMap(methods, method => new ClientRequestHandler(this.connection, method, this));\n    }\n    /**\n     * Generate the server response handler\n     */\n    constructServerRequestHandler(methods) {\n        return createMethodMap(methods, method => new ServerRequestHandler(this.connection, method, this));\n    }\n    /**\n     * Initialization parameters to be sent to the language server.\n     * Subclasses can overload this when adding more features.\n     */\n    initializeParams() {\n        return {\n            ...super.initializeParams(),\n            capabilities: this._options.capabilities,\n            initializationOptions: null,\n            processId: null,\n            workspaceFolders: null\n        };\n    }\n    /**\n     * Callback called when the server is initialized.\n     */\n    onServerInitialized(params) {\n        this.afterInitialized();\n        super.onServerInitialized(params);\n        while (this.documentsToOpen.length) {\n            this.sendOpen(this.documentsToOpen.pop());\n        }\n        this._serverInitialized.emit(this.serverCapabilities);\n    }\n    /**\n     * Once the server is initialized, this method generates the\n     * client and server handlers\n     */\n    afterInitialized() {\n        const disposable = this.connection.onError(e => this._errorSignal.emit(e));\n        this._disposables.push(disposable);\n        for (const method of Object.values(Method.ServerNotification)) {\n            const signal = this.serverNotifications[method];\n            const disposable = this.connection.onNotification(method, params => {\n                this.log(MessageKind.serverNotifiedClient, {\n                    method,\n                    message: params\n                });\n                signal.emit(params);\n            });\n            this._disposables.push(disposable);\n        }\n        for (const method of Object.values(Method.ClientNotification)) {\n            const signal = this.clientNotifications[method];\n            signal.connect((emitter, params) => {\n                this.log(MessageKind.clientNotifiedServer, {\n                    method,\n                    message: params\n                });\n                this.connection.sendNotification(method, params).catch(console.error);\n            });\n        }\n        this.clientRequests = this.constructClientRequestHandler(Method.ClientRequest);\n        this.serverRequests = this.constructServerRequestHandler(Method.ServerRequest);\n        this.serverRequests['client/registerCapability'].setHandler(async (params) => {\n            params.registrations.forEach((capabilityRegistration) => {\n                try {\n                    const updatedCapabilities = registerServerCapability(this.serverCapabilities, capabilityRegistration);\n                    if (updatedCapabilities === null) {\n                        console.error(`Failed to register server capability: ${capabilityRegistration}`);\n                        return;\n                    }\n                    this.serverCapabilities = updatedCapabilities;\n                }\n                catch (err) {\n                    console.error(err);\n                }\n            });\n        });\n        this.serverRequests['client/unregisterCapability'].setHandler(async (params) => {\n            params.unregisterations.forEach((capabilityUnregistration) => {\n                this.serverCapabilities = unregisterServerCapability(this.serverCapabilities, capabilityUnregistration);\n            });\n        });\n        this.serverRequests['workspace/configuration'].setHandler(async (params) => {\n            return params.items.map(item => {\n                // LSP: \"If the client can’t provide a configuration setting for a given scope\n                // then `null` needs to be present in the returned array.\"\n                // for now we do not support configuration, but yaml server does not respect\n                // client capability so we have a handler just for that\n                return null;\n            });\n        });\n    }\n    /**\n     * Send the document changed data to the server.\n     */\n    _sendChange(changeEvents, documentInfo) {\n        if (!this.isReady) {\n            return;\n        }\n        if (documentInfo.uri.length === 0) {\n            return;\n        }\n        if (!this.openedUris.get(documentInfo.uri)) {\n            this.sendOpen(documentInfo);\n        }\n        const textDocumentChange = {\n            textDocument: {\n                uri: documentInfo.uri,\n                version: documentInfo.version\n            },\n            contentChanges: changeEvents\n        };\n        this.connection\n            .sendNotification('textDocument/didChange', textDocumentChange)\n            .catch(console.error);\n        documentInfo.version++;\n    }\n}\n//# sourceMappingURL=connection.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { PageConfig, URLExt } from '@jupyterlab/coreutils';\nimport { Signal } from '@lumino/signaling';\nimport { LSPConnection } from './connection';\nimport { expandDottedPaths, sleep, untilReady } from './utils';\n/**\n * Each Widget with a document (whether file or a notebook) has the same DocumentConnectionManager\n * (see JupyterLabWidgetAdapter). Using id_path instead of uri led to documents being overwritten\n * as two identical id_paths could be created for two different notebooks.\n */\nexport class DocumentConnectionManager {\n    constructor(options) {\n        /**\n         * Fired the first time a connection is opened. These _should_ be the only\n         * invocation of `.on` (once remaining LSPFeature.connection_handlers are made\n         * singletons).\n         */\n        this.onNewConnection = (connection) => {\n            const errorSignalSlot = (_, e) => {\n                console.error(e);\n                let error = e.length && e.length >= 1 ? e[0] : new Error();\n                if (error.message.indexOf('code = 1005') !== -1) {\n                    console.error(`Connection failed for ${connection}`);\n                    this._forEachDocumentOfConnection(connection, virtualDocument => {\n                        console.error('disconnecting ' + virtualDocument.uri);\n                        this._closed.emit({ connection, virtualDocument });\n                        this._ignoredLanguages.add(virtualDocument.language);\n                        console.error(`Cancelling further attempts to connect ${virtualDocument.uri} and other documents for this language (no support from the server)`);\n                    });\n                }\n                else if (error.message.indexOf('code = 1006') !== -1) {\n                    console.error('Connection closed by the server');\n                }\n                else {\n                    console.error('Connection error:', e);\n                }\n            };\n            connection.errorSignal.connect(errorSignalSlot);\n            const serverInitializedSlot = () => {\n                // Initialize using settings stored in the SettingRegistry\n                this._forEachDocumentOfConnection(connection, virtualDocument => {\n                    // TODO: is this still necessary, e.g. for status bar to update responsively?\n                    this._initialized.emit({ connection, virtualDocument });\n                });\n                this.updateServerConfigurations(this.initialConfigurations);\n            };\n            connection.serverInitialized.connect(serverInitializedSlot);\n            const closeSignalSlot = (_, closedManually) => {\n                if (!closedManually) {\n                    console.error('Connection unexpectedly disconnected');\n                }\n                else {\n                    console.log('Connection closed');\n                    this._forEachDocumentOfConnection(connection, virtualDocument => {\n                        this._closed.emit({ connection, virtualDocument });\n                    });\n                }\n            };\n            connection.closeSignal.connect(closeSignalSlot);\n        };\n        this._initialized = new Signal(this);\n        this._connected = new Signal(this);\n        this._disconnected = new Signal(this);\n        this._closed = new Signal(this);\n        this._documentsChanged = new Signal(this);\n        this.connections = new Map();\n        this.documents = new Map();\n        this.adapters = new Map();\n        this._ignoredLanguages = new Set();\n        this.languageServerManager = options.languageServerManager;\n        Private.setLanguageServerManager(options.languageServerManager);\n        options.adapterTracker.adapterAdded.connect((_, adapter) => {\n            const path = adapter.widget.context.path;\n            this.registerAdapter(path, adapter);\n        });\n    }\n    /**\n     * Signal emitted when the manager is initialized.\n     */\n    get initialized() {\n        return this._initialized;\n    }\n    /**\n     * Signal emitted when the manager is connected to the server\n     */\n    get connected() {\n        return this._connected;\n    }\n    /**\n     * Connection temporarily lost or could not be fully established; a re-connection will be attempted;\n     */\n    get disconnected() {\n        return this._disconnected;\n    }\n    /**\n     * Connection was closed permanently and no-reconnection will be attempted, e.g.:\n     *  - there was a serious server error\n     *  - user closed the connection,\n     *  - re-connection attempts exceeded,\n     */\n    get closed() {\n        return this._closed;\n    }\n    /**\n     * Signal emitted when the document is changed.\n     */\n    get documentsChanged() {\n        return this._documentsChanged;\n    }\n    /**\n     * Promise resolved when the language server manager is ready.\n     */\n    get ready() {\n        return Private.getLanguageServerManager().ready;\n    }\n    /**\n     * Helper to connect various virtual document signal with callbacks of\n     * this class.\n     *\n     * @param  virtualDocument - virtual document to be connected.\n     */\n    connectDocumentSignals(virtualDocument) {\n        virtualDocument.foreignDocumentOpened.connect(this.onForeignDocumentOpened, this);\n        virtualDocument.foreignDocumentClosed.connect(this.onForeignDocumentClosed, this);\n        this.documents.set(virtualDocument.uri, virtualDocument);\n        this._documentsChanged.emit(this.documents);\n    }\n    /**\n     * Helper to disconnect various virtual document signal with callbacks of\n     * this class.\n     *\n     * @param  virtualDocument - virtual document to be disconnected.\n     */\n    disconnectDocumentSignals(virtualDocument, emit = true) {\n        virtualDocument.foreignDocumentOpened.disconnect(this.onForeignDocumentOpened, this);\n        virtualDocument.foreignDocumentClosed.disconnect(this.onForeignDocumentClosed, this);\n        this.documents.delete(virtualDocument.uri);\n        for (const foreign of virtualDocument.foreignDocuments.values()) {\n            this.disconnectDocumentSignals(foreign, false);\n        }\n        if (emit) {\n            this._documentsChanged.emit(this.documents);\n        }\n    }\n    /**\n     * Handle foreign document opened event.\n     */\n    onForeignDocumentOpened(_host, context) {\n        /** no-op */\n    }\n    /**\n     * Handle foreign document closed event.\n     */\n    onForeignDocumentClosed(_host, context) {\n        const { foreignDocument } = context;\n        this.unregisterDocument(foreignDocument.uri, false);\n        this.disconnectDocumentSignals(foreignDocument);\n    }\n    /**\n     * @deprecated\n     *\n     * Register a widget adapter with this manager\n     *\n     * @param  path - path to the inner document of the adapter\n     * @param  adapter - the adapter to be registered\n     */\n    registerAdapter(path, adapter) {\n        this.adapters.set(path, adapter);\n        adapter.widget.context.pathChanged.connect((context, newPath) => {\n            this.adapters.delete(path);\n            this.adapters.set(newPath, adapter);\n        });\n        adapter.disposed.connect(() => {\n            if (adapter.virtualDocument) {\n                this.documents.delete(adapter.virtualDocument.uri);\n            }\n            this.adapters.delete(path);\n        });\n    }\n    /**\n     * Handles the settings that do not require an existing connection\n     * with a language server (or can influence to which server the\n     * connection will be created, e.g. `rank`).\n     *\n     * This function should be called **before** initialization of servers.\n     */\n    updateConfiguration(allServerSettings) {\n        this.languageServerManager.setConfiguration(allServerSettings);\n    }\n    /**\n     * Handles the settings that the language servers accept using\n     * `onDidChangeConfiguration` messages, which should be passed under\n     * the \"serverSettings\" keyword in the setting registry.\n     * Other configuration options are handled by `updateConfiguration` instead.\n     *\n     * This function should be called **after** initialization of servers.\n     */\n    updateServerConfigurations(allServerSettings) {\n        let languageServerId;\n        for (languageServerId in allServerSettings) {\n            if (!allServerSettings.hasOwnProperty(languageServerId)) {\n                continue;\n            }\n            const rawSettings = allServerSettings[languageServerId];\n            const parsedSettings = expandDottedPaths(rawSettings.configuration || {});\n            const serverSettings = {\n                settings: parsedSettings\n            };\n            Private.updateServerConfiguration(languageServerId, serverSettings);\n        }\n    }\n    /**\n     * Retry to connect to the server each `reconnectDelay` seconds\n     * and for `retrialsLeft` times.\n     * TODO: presently no longer referenced. A failing connection would close\n     * the socket, triggering the language server on the other end to exit.\n     */\n    async retryToConnect(options, reconnectDelay, retrialsLeft = -1) {\n        let { virtualDocument } = options;\n        if (this._ignoredLanguages.has(virtualDocument.language)) {\n            return;\n        }\n        let interval = reconnectDelay * 1000;\n        let success = false;\n        while (retrialsLeft !== 0 && !success) {\n            await this.connect(options)\n                .then(() => {\n                success = true;\n            })\n                .catch(e => {\n                console.warn(e);\n            });\n            console.log('will attempt to re-connect in ' + interval / 1000 + ' seconds');\n            await sleep(interval);\n            // gradually increase the time delay, up to 5 sec\n            interval = interval < 5 * 1000 ? interval + 500 : interval;\n        }\n    }\n    /**\n     * Disconnect the connection to the language server of the requested\n     * language.\n     */\n    disconnect(languageId) {\n        Private.disconnect(languageId);\n    }\n    /**\n     * Create a new connection to the language server\n     * @return A promise of the LSP connection\n     */\n    async connect(options, firstTimeoutSeconds = 30, secondTimeoutMinutes = 5) {\n        let connection = await this._connectSocket(options);\n        let { virtualDocument } = options;\n        if (!connection) {\n            return;\n        }\n        if (!connection.isReady) {\n            try {\n                // user feedback hinted that 40 seconds was too short and some users are willing to wait more;\n                // to make the best of both worlds we first check frequently (6.6 times a second) for the first\n                // 30 seconds, and show the warning early in case if something is wrong; we then continue retrying\n                // for another 5 minutes, but only once per second.\n                await untilReady(() => connection.isReady, Math.round((firstTimeoutSeconds * 1000) / 150), 150);\n            }\n            catch (_a) {\n                console.log(`Connection to ${virtualDocument.uri} timed out after ${firstTimeoutSeconds} seconds, will continue retrying for another ${secondTimeoutMinutes} minutes`);\n                try {\n                    await untilReady(() => connection.isReady, 60 * secondTimeoutMinutes, 1000);\n                }\n                catch (_b) {\n                    console.log(`Connection to ${virtualDocument.uri} timed out again after ${secondTimeoutMinutes} minutes, giving up`);\n                    return;\n                }\n            }\n        }\n        this._connected.emit({ connection, virtualDocument });\n        return connection;\n    }\n    /**\n     * Disconnect the signals of requested virtual document URI.\n     */\n    unregisterDocument(uri, emit = true) {\n        const connection = this.connections.get(uri);\n        if (connection) {\n            this.connections.delete(uri);\n            const allConnection = new Set(this.connections.values());\n            if (!allConnection.has(connection)) {\n                this.disconnect(connection.serverIdentifier);\n                connection.dispose();\n            }\n            if (emit) {\n                this._documentsChanged.emit(this.documents);\n            }\n        }\n    }\n    /**\n     * Enable or disable the logging of language server communication.\n     */\n    updateLogging(logAllCommunication, setTrace) {\n        for (const connection of this.connections.values()) {\n            connection.logAllCommunication = logAllCommunication;\n            if (setTrace !== null) {\n                connection.clientNotifications['$/setTrace'].emit({ value: setTrace });\n            }\n        }\n    }\n    /**\n     * Create the LSP connection for requested virtual document.\n     *\n     * @return  Return the promise of the LSP connection.\n     */\n    async _connectSocket(options) {\n        let { language, capabilities, virtualDocument } = options;\n        this.connectDocumentSignals(virtualDocument);\n        const uris = DocumentConnectionManager.solveUris(virtualDocument, language);\n        const matchingServers = this.languageServerManager.getMatchingServers({\n            language\n        });\n        // for now use only the server with the highest rank.\n        const languageServerId = matchingServers.length === 0 ? null : matchingServers[0];\n        // lazily load 1) the underlying library (1.5mb) and/or 2) a live WebSocket-\n        // like connection: either already connected or potentially in the process\n        // of connecting.\n        if (!uris) {\n            return;\n        }\n        const connection = await Private.connection(language, languageServerId, uris, this.onNewConnection, capabilities);\n        // if connecting for the first time, all documents subsequent documents will\n        // be re-opened and synced\n        this.connections.set(virtualDocument.uri, connection);\n        return connection;\n    }\n    /**\n     * Helper to apply callback on all documents of a connection.\n     */\n    _forEachDocumentOfConnection(connection, callback) {\n        for (const [virtualDocumentUri, currentConnection] of this.connections.entries()) {\n            if (connection !== currentConnection) {\n                continue;\n            }\n            callback(this.documents.get(virtualDocumentUri));\n        }\n    }\n}\n(function (DocumentConnectionManager) {\n    /**\n     * Generate the URI of a virtual document from input\n     *\n     * @param  virtualDocument - the virtual document\n     * @param  language - language of the document\n     */\n    function solveUris(virtualDocument, language) {\n        var _a;\n        const serverManager = Private.getLanguageServerManager();\n        const wsBase = serverManager.settings.wsUrl;\n        const rootUri = PageConfig.getOption('rootUri');\n        const virtualDocumentsUri = PageConfig.getOption('virtualDocumentsUri');\n        // for now take the best match only\n        const serverOptions = {\n            language\n        };\n        const matchingServers = serverManager.getMatchingServers(serverOptions);\n        const languageServerId = matchingServers.length === 0 ? null : matchingServers[0];\n        if (languageServerId === null) {\n            return;\n        }\n        const specs = serverManager.getMatchingSpecs(serverOptions);\n        const spec = specs.get(languageServerId);\n        if (!spec) {\n            console.warn(`Specification not available for server ${languageServerId}`);\n        }\n        const requiresOnDiskFiles = (_a = spec === null || spec === void 0 ? void 0 : spec.requires_documents_on_disk) !== null && _a !== void 0 ? _a : true;\n        const supportsInMemoryFiles = !requiresOnDiskFiles;\n        const baseUri = virtualDocument.hasLspSupportedFile || supportsInMemoryFiles\n            ? rootUri\n            : virtualDocumentsUri;\n        // workaround url-parse bug(s) (see https://github.com/jupyter-lsp/jupyterlab-lsp/issues/595)\n        let documentUri = URLExt.join(baseUri, virtualDocument.uri);\n        if (!documentUri.startsWith('file:///') &&\n            documentUri.startsWith('file://')) {\n            documentUri = documentUri.replace('file://', 'file:///');\n            if (documentUri.startsWith('file:///users/') &&\n                baseUri.startsWith('file:///Users/')) {\n                documentUri = documentUri.replace('file:///users/', 'file:///Users/');\n            }\n        }\n        return {\n            base: baseUri,\n            document: documentUri,\n            server: URLExt.join('ws://jupyter-lsp', language),\n            socket: URLExt.join(wsBase, 'lsp', 'ws', languageServerId)\n        };\n    }\n    DocumentConnectionManager.solveUris = solveUris;\n})(DocumentConnectionManager || (DocumentConnectionManager = {}));\n/**\n * Namespace primarily for language-keyed cache of LSPConnections\n */\nvar Private;\n(function (Private) {\n    const _connections = new Map();\n    let _languageServerManager;\n    function getLanguageServerManager() {\n        return _languageServerManager;\n    }\n    Private.getLanguageServerManager = getLanguageServerManager;\n    function setLanguageServerManager(languageServerManager) {\n        _languageServerManager = languageServerManager;\n    }\n    Private.setLanguageServerManager = setLanguageServerManager;\n    function disconnect(languageServerId) {\n        const connection = _connections.get(languageServerId);\n        if (connection) {\n            connection.close();\n            _connections.delete(languageServerId);\n        }\n    }\n    Private.disconnect = disconnect;\n    /**\n     * Return (or create and initialize) the WebSocket associated with the language\n     */\n    async function connection(language, languageServerId, uris, onCreate, capabilities) {\n        let connection = _connections.get(languageServerId);\n        if (!connection) {\n            const { settings } = Private.getLanguageServerManager();\n            const socket = new settings.WebSocket(uris.socket);\n            const connection = new LSPConnection({\n                languageId: language,\n                serverUri: uris.server,\n                rootUri: uris.base,\n                serverIdentifier: languageServerId,\n                capabilities: capabilities\n            });\n            _connections.set(languageServerId, connection);\n            connection.connect(socket);\n            onCreate(connection);\n        }\n        connection = _connections.get(languageServerId);\n        return connection;\n    }\n    Private.connection = connection;\n    function updateServerConfiguration(languageServerId, settings) {\n        const connection = _connections.get(languageServerId);\n        if (connection) {\n            connection.sendConfigurationChange(settings);\n        }\n    }\n    Private.updateServerConfiguration = updateServerConfiguration;\n})(Private || (Private = {}));\n//# sourceMappingURL=connection_manager.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * Manager for the code extractors\n */\nexport class CodeExtractorsManager {\n    constructor() {\n        this._extractorMap = new Map();\n        this._extractorMapAnyLanguage = new Map();\n    }\n    /**\n     * Get the extractors for the input cell type and the main language of\n     * the document\n     *\n     * @param  cellType - type of cell\n     * @param  hostLanguage - main language of the document\n     */\n    getExtractors(cellType, hostLanguage) {\n        var _a, _b;\n        if (hostLanguage) {\n            const currentMap = this._extractorMap.get(cellType);\n            if (!currentMap) {\n                return [];\n            }\n            return (_a = currentMap.get(hostLanguage)) !== null && _a !== void 0 ? _a : [];\n        }\n        else {\n            return (_b = this._extractorMapAnyLanguage.get(cellType)) !== null && _b !== void 0 ? _b : [];\n        }\n    }\n    /**\n     * Register an extractor to extract foreign code from host documents of specified language.\n     */\n    register(extractor, hostLanguage) {\n        const cellType = extractor.cellType;\n        if (hostLanguage) {\n            cellType.forEach(type => {\n                if (!this._extractorMap.has(type)) {\n                    this._extractorMap.set(type, new Map());\n                }\n                const currentMap = this._extractorMap.get(type);\n                const extractorList = currentMap.get(hostLanguage);\n                if (!extractorList) {\n                    currentMap.set(hostLanguage, [extractor]);\n                }\n                else {\n                    extractorList.push(extractor);\n                }\n            });\n        }\n        else {\n            cellType.forEach(type => {\n                if (!this._extractorMapAnyLanguage.has(type)) {\n                    this._extractorMapAnyLanguage.set(type, []);\n                }\n                this._extractorMapAnyLanguage.get(type).push(extractor);\n            });\n        }\n    }\n}\n//# sourceMappingURL=manager.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * Compare two `IPosition` variable.\n *\n */\nexport function isEqual(self, other) {\n    return other && self.line === other.line && self.ch === other.ch;\n}\n/**\n * Given a list of line and an offset from the start, compute the corresponding\n * position in form of line and column number\n *\n * @param offset - number of spaces counted from the start of first line\n * @param  lines - list of lines to compute the position\n * @return  - the position of cursor\n */\nexport function positionAtOffset(offset, lines) {\n    let line = 0;\n    let column = 0;\n    for (let textLine of lines) {\n        // each line has a new line symbol which is accounted for in offset!\n        if (textLine.length + 1 <= offset) {\n            offset -= textLine.length + 1;\n            line += 1;\n        }\n        else {\n            column = offset;\n            break;\n        }\n    }\n    return { line, column };\n}\n/**\n * Given a list of line and position in form of line and column number,\n * compute the offset from the start of first line.\n * @param position - position of cursor\n * @param  lines - list of lines to compute the position\n * @param linesIncludeBreaks - should count the line break as space?\n * return - offset number\n */\nexport function offsetAtPosition(position, lines, linesIncludeBreaks = false) {\n    let breakIncrement = linesIncludeBreaks ? 0 : 1;\n    let offset = 0;\n    for (let i = 0; i < lines.length; i++) {\n        let textLine = lines[i];\n        if (position.line > i) {\n            offset += textLine.length + breakIncrement;\n        }\n        else {\n            offset += position.column;\n            break;\n        }\n    }\n    return offset;\n}\nexport var ProtocolCoordinates;\n(function (ProtocolCoordinates) {\n    /**\n     * Check if the position is in the input range\n     *\n     * @param position - position in form of line and character number.\n     * @param  range - range in from of start and end position.\n     */\n    function isWithinRange(position, range) {\n        const { line, character } = position;\n        return (line >= range.start.line &&\n            line <= range.end.line &&\n            // need to be non-overlapping see https://github.com/jupyter-lsp/jupyterlab-lsp/issues/628\n            (line != range.start.line || character > range.start.character) &&\n            (line != range.end.line || character <= range.end.character));\n    }\n    ProtocolCoordinates.isWithinRange = isWithinRange;\n})(ProtocolCoordinates || (ProtocolCoordinates = {}));\n//# sourceMappingURL=positioning.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { positionAtOffset } from '../positioning';\n/**\n * The code extractor for the raw and markdown text.\n */\nexport class TextForeignCodeExtractor {\n    constructor(options) {\n        this.language = options.language;\n        this.standalone = options.isStandalone;\n        this.fileExtension = options.file_extension;\n        this.cellType = options.cellType;\n    }\n    /**\n     * Test if there is any foreign code in provided code snippet.\n     */\n    hasForeignCode(code, cellType) {\n        return this.cellType.includes(cellType);\n    }\n    /**\n     * Split the code into the host and foreign code (if any foreign code was detected)\n     */\n    extractForeignCode(code) {\n        let lines = code.split('\\n');\n        let extracts = new Array();\n        let foreignCodeFragment = code;\n        let start = positionAtOffset(0, lines);\n        let end = positionAtOffset(foreignCodeFragment.length, lines);\n        extracts.push({\n            hostCode: '',\n            foreignCode: foreignCodeFragment,\n            range: { start, end },\n            virtualShift: null\n        });\n        return extracts;\n    }\n}\n//# sourceMappingURL=text_extractor.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nexport * from './manager';\nexport * from './text_extractor';\nexport * from './types';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\nimport mergeWith from 'lodash.mergewith';\n/**\n * Class to manager the registered features of the language servers.\n */\nexport class FeatureManager {\n    constructor() {\n        /**\n         * List of registered features\n         */\n        this.features = [];\n        this._featureRegistered = new Signal(this);\n    }\n    /**\n     * Signal emitted when a new feature is registered.\n     */\n    get featureRegistered() {\n        return this._featureRegistered;\n    }\n    /**\n     * Register a new feature, skip if it is already registered.\n     */\n    register(feature) {\n        if (this.features.some(ft => ft.id === feature.id)) {\n            console.warn(`Feature with id ${feature.id} is already registered, skipping.`);\n        }\n        else {\n            this.features.push(feature);\n            this._featureRegistered.emit(feature);\n        }\n    }\n    /**\n     * Get the capabilities of all clients.\n     */\n    clientCapabilities() {\n        let capabilities = {};\n        for (const feature of this.features) {\n            if (!feature.capabilities) {\n                continue;\n            }\n            capabilities = mergeWith(capabilities, feature.capabilities);\n        }\n        return capabilities;\n    }\n    /**\n     * Get the extension factories of all clients.\n     */\n    extensionFactories() {\n        const factories = [];\n        for (const feature of this.features) {\n            if (!feature.extensionFactory) {\n                continue;\n            }\n            factories.push(feature.extensionFactory);\n        }\n        return factories;\n    }\n}\n//# sourceMappingURL=feature.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { PageConfig, URLExt } from '@jupyterlab/coreutils';\nimport { ServerConnection } from '@jupyterlab/services';\nimport { Signal } from '@lumino/signaling';\nimport { ILanguageServerManager } from './tokens';\nimport { PromiseDelegate } from '@lumino/coreutils';\nexport class LanguageServerManager {\n    constructor(options) {\n        /**\n         * map of language server sessions.\n         */\n        this._sessions = new Map();\n        /**\n         * Map of language server specs.\n         */\n        this._specs = new Map();\n        /**\n         * Set of emitted warning message, message in this set will not be warned again.\n         */\n        this._warningsEmitted = new Set();\n        /**\n         * A promise resolved when this server manager is ready.\n         */\n        this._ready = new PromiseDelegate();\n        /**\n         * Signal emitted when a  language server session is changed\n         */\n        this._sessionsChanged = new Signal(this);\n        this._isDisposed = false;\n        /**\n         * Check if the manager is enabled or disabled\n         */\n        this._enabled = true;\n        this._settings = options.settings || ServerConnection.makeSettings();\n        this._baseUrl = options.baseUrl || PageConfig.getBaseUrl();\n        this._retries = options.retries || 2;\n        this._retriesInterval = options.retriesInterval || 10000;\n        this._statusCode = -1;\n        this._configuration = {};\n        this.fetchSessions().catch(e => console.log(e));\n    }\n    /**\n     * Check if the manager is enabled or disabled\n     */\n    get isEnabled() {\n        return this._enabled;\n    }\n    /**\n     * Check if the manager is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Get server connection settings.\n     */\n    get settings() {\n        return this._settings;\n    }\n    /**\n     * Get the language server specs.\n     */\n    get specs() {\n        return this._specs;\n    }\n    /**\n     * Get the status end point.\n     */\n    get statusUrl() {\n        return URLExt.join(this._baseUrl, ILanguageServerManager.URL_NS, 'status');\n    }\n    /**\n     * Signal emitted when a  language server session is changed\n     */\n    get sessionsChanged() {\n        return this._sessionsChanged;\n    }\n    /**\n     * Get the map of language server sessions.\n     */\n    get sessions() {\n        return this._sessions;\n    }\n    /**\n     * A promise resolved when this server manager is ready.\n     */\n    get ready() {\n        return this._ready.promise;\n    }\n    /**\n     * Get the status code of server's responses.\n     */\n    get statusCode() {\n        return this._statusCode;\n    }\n    /**\n     * Enable the language server services\n     */\n    async enable() {\n        this._enabled = true;\n        await this.fetchSessions();\n    }\n    /**\n     * Disable the language server services\n     */\n    disable() {\n        this._enabled = false;\n        this._sessions = new Map();\n        this._sessionsChanged.emit(void 0);\n    }\n    /**\n     * Dispose the manager.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n    }\n    /**\n     * Update the language server configuration.\n     */\n    setConfiguration(configuration) {\n        this._configuration = configuration;\n    }\n    /**\n     * Get matching language server for input language option.\n     */\n    getMatchingServers(options) {\n        if (!options.language) {\n            console.error('Cannot match server by language: language not available; ensure that kernel and specs provide language and MIME type');\n            return [];\n        }\n        const matchingSessionsKeys = [];\n        for (const [key, session] of this._sessions.entries()) {\n            if (this.isMatchingSpec(options, session.spec)) {\n                matchingSessionsKeys.push(key);\n            }\n        }\n        return matchingSessionsKeys.sort(this.compareRanks.bind(this));\n    }\n    /**\n     * Get matching language server spec for input language option.\n     */\n    getMatchingSpecs(options) {\n        const result = new Map();\n        for (const [key, specification] of this._specs.entries()) {\n            if (this.isMatchingSpec(options, specification)) {\n                result.set(key, specification);\n            }\n        }\n        return result;\n    }\n    /**\n     * Fetch the server session list from the status endpoint. The server\n     * manager is ready once this method finishes.\n     */\n    async fetchSessions() {\n        if (!this._enabled) {\n            return;\n        }\n        let response = await ServerConnection.makeRequest(this.statusUrl, { method: 'GET' }, this._settings);\n        this._statusCode = response.status;\n        if (!response.ok) {\n            if (this._retries > 0) {\n                this._retries -= 1;\n                setTimeout(this.fetchSessions.bind(this), this._retriesInterval);\n            }\n            else {\n                this._ready.resolve(undefined);\n                console.log('Missing jupyter_lsp server extension, skipping.');\n            }\n            return;\n        }\n        let sessions;\n        try {\n            const data = await response.json();\n            sessions = data.sessions;\n            try {\n                this.version = data.version;\n                this._specs = new Map(Object.entries(data.specs));\n            }\n            catch (err) {\n                console.warn(err);\n            }\n        }\n        catch (err) {\n            console.warn(err);\n            this._ready.resolve(undefined);\n            return;\n        }\n        for (let key of Object.keys(sessions)) {\n            let id = key;\n            if (this._sessions.has(id)) {\n                Object.assign(this._sessions.get(id) || {}, sessions[key]);\n            }\n            else {\n                this._sessions.set(id, sessions[key]);\n            }\n        }\n        const oldKeys = this._sessions.keys();\n        for (const oldKey in oldKeys) {\n            if (!sessions[oldKey]) {\n                let oldId = oldKey;\n                this._sessions.delete(oldId);\n            }\n        }\n        this._sessionsChanged.emit(void 0);\n        this._ready.resolve(undefined);\n    }\n    /**\n     * Check if input language option maths the language server spec.\n     */\n    isMatchingSpec(options, spec) {\n        // most things speak language\n        // if language is not known, it is guessed based on MIME type earlier\n        // so some language should be available by now (which can be not so obvious, e.g. \"plain\" for txt documents)\n        const lowerCaseLanguage = options.language.toLocaleLowerCase();\n        return spec.languages.some((language) => language.toLocaleLowerCase() == lowerCaseLanguage);\n    }\n    /**\n     * Helper function to warn a message only once.\n     */\n    warnOnce(arg) {\n        if (!this._warningsEmitted.has(arg)) {\n            this._warningsEmitted.add(arg);\n            console.warn(arg);\n        }\n    }\n    /**\n     * Compare the rank of two servers with the same language.\n     */\n    compareRanks(a, b) {\n        var _a, _b, _c, _d;\n        const DEFAULT_RANK = 50;\n        const aRank = (_b = (_a = this._configuration[a]) === null || _a === void 0 ? void 0 : _a.rank) !== null && _b !== void 0 ? _b : DEFAULT_RANK;\n        const bRank = (_d = (_c = this._configuration[b]) === null || _c === void 0 ? void 0 : _c.rank) !== null && _d !== void 0 ? _d : DEFAULT_RANK;\n        if (aRank == bRank) {\n            this.warnOnce(`Two matching servers: ${a} and ${b} have the same rank; choose which one to use by changing the rank in Advanced Settings Editor`);\n            return a.localeCompare(b);\n        }\n        // higher rank = higher in the list (descending order)\n        return bRank - aRank;\n    }\n}\n//# sourceMappingURL=manager.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\nimport { DocumentConnectionManager } from '../connection_manager';\nimport { DefaultMap, untilReady } from '../utils';\n/**\n * Check if given position is within range.\n * Both start and end are inclusive.\n * @param position\n * @param range\n */\nexport function isWithinRange(position, range) {\n    if (range.start.line === range.end.line) {\n        return (position.line === range.start.line &&\n            position.column >= range.start.column &&\n            position.column <= range.end.column);\n    }\n    return ((position.line === range.start.line &&\n        position.column >= range.start.column &&\n        position.line < range.end.line) ||\n        (position.line > range.start.line &&\n            position.column <= range.end.column &&\n            position.line === range.end.line) ||\n        (position.line > range.start.line && position.line < range.end.line));\n}\n/**\n * A virtual implementation of IDocumentInfo\n */\nexport class VirtualDocumentInfo {\n    /**\n     * Creates an instance of VirtualDocumentInfo.\n     * @param document - the virtual document need to\n     * be wrapped.\n     */\n    constructor(document) {\n        /**\n         * Current version of the virtual document.\n         */\n        this.version = 0;\n        this._document = document;\n    }\n    /**\n     * Get the text content of the virtual document.\n     */\n    get text() {\n        return this._document.value;\n    }\n    /**\n     * Get the uri of the virtual document, if the document is not available,\n     * it returns an empty string, users need to check for the length of returned\n     * value before using it.\n     */\n    get uri() {\n        const uris = DocumentConnectionManager.solveUris(this._document, this.languageId);\n        if (!uris) {\n            return '';\n        }\n        return uris.document;\n    }\n    /**\n     * Get the language identifier of the document.\n     */\n    get languageId() {\n        return this._document.language;\n    }\n}\n/**\n *\n * A notebook can hold one or more virtual documents; there is always one,\n * \"root\" document, corresponding to the language of the kernel. All other\n * virtual documents are extracted out of the notebook, based on magics,\n * or other syntax constructs, depending on the kernel language.\n *\n * Virtual documents represent the underlying code in a single language,\n * which has been parsed excluding interactive kernel commands (magics)\n * which could be misunderstood by the specific LSP server.\n *\n * VirtualDocument has no awareness of the notebook or editor it lives in,\n * however it is able to transform its content back to the notebook space,\n * as it keeps editor coordinates for each virtual line.\n *\n * The notebook/editor aware transformations are preferred to be placed in\n * VirtualEditor descendants rather than here.\n *\n * No dependency on editor implementation (such as CodeMirrorEditor)\n * is allowed for VirtualEditor.\n */\nexport class VirtualDocument {\n    constructor(options) {\n        /**\n         * Number of blank lines appended to the virtual document between\n         * each cell.\n         */\n        this.blankLinesBetweenCells = 2;\n        this._isDisposed = false;\n        this._foreignDocumentClosed = new Signal(this);\n        this._foreignDocumentOpened = new Signal(this);\n        this._changed = new Signal(this);\n        this.options = options;\n        this.path = this.options.path;\n        this.fileExtension = options.fileExtension;\n        this.hasLspSupportedFile = options.hasLspSupportedFile;\n        this.parent = options.parent;\n        this.language = options.language;\n        this.virtualLines = new Map();\n        this.sourceLines = new Map();\n        this.foreignDocuments = new Map();\n        this._editorToSourceLine = new Map();\n        this._foreignCodeExtractors = options.foreignCodeExtractors;\n        this.standalone = options.standalone || false;\n        this.instanceId = VirtualDocument.instancesCount;\n        VirtualDocument.instancesCount += 1;\n        this.unusedStandaloneDocuments = new DefaultMap(() => new Array());\n        this._remainingLifetime = 6;\n        this.documentInfo = new VirtualDocumentInfo(this);\n        this.updateManager = new UpdateManager(this);\n        this.updateManager.updateBegan.connect(this._updateBeganSlot, this);\n        this.updateManager.blockAdded.connect(this._blockAddedSlot, this);\n        this.updateManager.updateFinished.connect(this._updateFinishedSlot, this);\n        this.clear();\n    }\n    /**\n     * Convert from code editor position into code mirror position.\n     */\n    static ceToCm(position) {\n        return { line: position.line, ch: position.column };\n    }\n    /**\n     * Test whether the document is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Signal emitted when the foreign document is closed\n     */\n    get foreignDocumentClosed() {\n        return this._foreignDocumentClosed;\n    }\n    /**\n     * Signal emitted when the foreign document is opened\n     */\n    get foreignDocumentOpened() {\n        return this._foreignDocumentOpened;\n    }\n    /**\n     * Signal emitted when the foreign document is changed\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Id of the virtual document.\n     */\n    get virtualId() {\n        // for easier debugging, the language information is included in the ID:\n        return this.standalone\n            ? this.instanceId + '(' + this.language + ')'\n            : this.language;\n    }\n    /**\n     * Return the ancestry to this document.\n     */\n    get ancestry() {\n        if (!this.parent) {\n            return [this];\n        }\n        return this.parent.ancestry.concat([this]);\n    }\n    /**\n     * Return the id path to the virtual document.\n     */\n    get idPath() {\n        if (!this.parent) {\n            return this.virtualId;\n        }\n        return this.parent.idPath + '-' + this.virtualId;\n    }\n    /**\n     * Get the uri of the virtual document.\n     */\n    get uri() {\n        const encodedPath = encodeURI(this.path);\n        if (!this.parent) {\n            return encodedPath;\n        }\n        return encodedPath + '.' + this.idPath + '.' + this.fileExtension;\n    }\n    /**\n     * Get the text value of the document\n     */\n    get value() {\n        let linesPadding = '\\n'.repeat(this.blankLinesBetweenCells);\n        return this.lineBlocks.join(linesPadding);\n    }\n    /**\n     * Get the last line in the virtual document\n     */\n    get lastLine() {\n        const linesInLastBlock = this.lineBlocks[this.lineBlocks.length - 1].split('\\n');\n        return linesInLastBlock[linesInLastBlock.length - 1];\n    }\n    /**\n     * Get the root document of current virtual document.\n     */\n    get root() {\n        return this.parent ? this.parent.root : this;\n    }\n    /**\n     * Dispose the virtual document.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this.parent = null;\n        this.closeAllForeignDocuments();\n        this.updateManager.dispose();\n        // clear all the maps\n        this.foreignDocuments.clear();\n        this.sourceLines.clear();\n        this.unusedStandaloneDocuments.clear();\n        this.virtualLines.clear();\n        // just to be sure - if anything is accessed after disposal (it should not) we\n        // will get altered by errors in the console AND this will limit memory leaks\n        this.documentInfo = null;\n        this.lineBlocks = null;\n        Signal.clearData(this);\n    }\n    /**\n     * Clear the virtual document and all related stuffs\n     */\n    clear() {\n        this.unusedStandaloneDocuments.clear();\n        for (let document of this.foreignDocuments.values()) {\n            document.clear();\n            if (document.standalone) {\n                let set = this.unusedStandaloneDocuments.get(document.language);\n                set.push(document);\n            }\n        }\n        this.virtualLines.clear();\n        this.sourceLines.clear();\n        this.lastVirtualLine = 0;\n        this.lastSourceLine = 0;\n        this.lineBlocks = [];\n    }\n    /**\n     * Get the virtual document from the cursor position of the source\n     * document\n     * @param position - position in source document\n     */\n    documentAtSourcePosition(position) {\n        let sourceLine = this.sourceLines.get(position.line);\n        if (!sourceLine) {\n            return this;\n        }\n        let sourcePositionCe = {\n            line: sourceLine.editorLine,\n            column: position.ch\n        };\n        for (let [range, { virtualDocument: document }] of sourceLine.foreignDocumentsMap) {\n            if (isWithinRange(sourcePositionCe, range)) {\n                let sourcePositionCm = {\n                    line: sourcePositionCe.line - range.start.line,\n                    ch: sourcePositionCe.column - range.start.column\n                };\n                return document.documentAtSourcePosition(sourcePositionCm);\n            }\n        }\n        return this;\n    }\n    /**\n     * Detect if the input source position is belong to the current\n     * virtual document.\n     *\n     * @param sourcePosition - position in the source document\n     */\n    isWithinForeign(sourcePosition) {\n        let sourceLine = this.sourceLines.get(sourcePosition.line);\n        let sourcePositionCe = {\n            line: sourceLine.editorLine,\n            column: sourcePosition.ch\n        };\n        for (let [range] of sourceLine.foreignDocumentsMap) {\n            if (isWithinRange(sourcePositionCe, range)) {\n                return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * Compute the position in root document from the position of\n     * a child editor.\n     *\n     * @param editor - the active editor.\n     * @param position - position in the active editor.\n     */\n    transformFromEditorToRoot(editor, position) {\n        if (!this._editorToSourceLine.has(editor)) {\n            console.log('Editor not found in _editorToSourceLine map');\n            return null;\n        }\n        let shift = this._editorToSourceLine.get(editor);\n        return {\n            ...position,\n            line: position.line + shift\n        };\n    }\n    /**\n     * Compute the position in the virtual document from the position\n     * if the source document.\n     *\n     * @param sourcePosition - position in source document\n     */\n    virtualPositionAtDocument(sourcePosition) {\n        let sourceLine = this.sourceLines.get(sourcePosition.line);\n        if (sourceLine == null) {\n            throw new Error('Source line not mapped to virtual position');\n        }\n        let virtualLine = sourceLine.virtualLine;\n        // position inside the cell (block)\n        let sourcePositionCe = {\n            line: sourceLine.editorLine,\n            column: sourcePosition.ch\n        };\n        for (let [range, content] of sourceLine.foreignDocumentsMap) {\n            const { virtualLine, virtualDocument: document } = content;\n            if (isWithinRange(sourcePositionCe, range)) {\n                // position inside the foreign document block\n                let sourcePositionCm = {\n                    line: sourcePositionCe.line - range.start.line,\n                    ch: sourcePositionCe.column - range.start.column\n                };\n                if (document.isWithinForeign(sourcePositionCm)) {\n                    return this.virtualPositionAtDocument(sourcePositionCm);\n                }\n                else {\n                    // where in this block in the entire foreign document?\n                    sourcePositionCm.line += virtualLine;\n                    return sourcePositionCm;\n                }\n            }\n        }\n        return {\n            ch: sourcePosition.ch,\n            line: virtualLine\n        };\n    }\n    /**\n     * Append a code block to the end of the virtual document.\n     *\n     * @param  block - block to be appended\n     * @param  editorShift - position shift in source\n     * document\n     * @param  [virtualShift] - position shift in\n     * virtual document.\n     */\n    appendCodeBlock(block, editorShift = { line: 0, column: 0 }, virtualShift) {\n        let cellCode = block.value;\n        let ceEditor = block.ceEditor;\n        if (this.isDisposed) {\n            console.warn('Cannot append code block: document disposed');\n            return;\n        }\n        let sourceCellLines = cellCode.split('\\n');\n        let { lines, foreignDocumentsMap } = this.prepareCodeBlock(block, editorShift);\n        for (let i = 0; i < lines.length; i++) {\n            this.virtualLines.set(this.lastVirtualLine + i, {\n                skipInspect: [],\n                editor: ceEditor,\n                // TODO this is incorrect, won't work if something was extracted\n                sourceLine: this.lastSourceLine + i\n            });\n        }\n        for (let i = 0; i < sourceCellLines.length; i++) {\n            this.sourceLines.set(this.lastSourceLine + i, {\n                editorLine: i,\n                editorShift: {\n                    line: editorShift.line - ((virtualShift === null || virtualShift === void 0 ? void 0 : virtualShift.line) || 0),\n                    column: i === 0 ? editorShift.column - ((virtualShift === null || virtualShift === void 0 ? void 0 : virtualShift.column) || 0) : 0\n                },\n                // TODO: move those to a new abstraction layer (DocumentBlock class)\n                editor: ceEditor,\n                foreignDocumentsMap,\n                // TODO this is incorrect, won't work if something was extracted\n                virtualLine: this.lastVirtualLine + i\n            });\n        }\n        this.lastVirtualLine += lines.length;\n        // one empty line is necessary to separate code blocks, next 'n' lines are to silence linters;\n        // the final cell does not get the additional lines (thanks to the use of join, see below)\n        this.lineBlocks.push(lines.join('\\n') + '\\n');\n        // adding the virtual lines for the blank lines\n        for (let i = 0; i < this.blankLinesBetweenCells; i++) {\n            this.virtualLines.set(this.lastVirtualLine + i, {\n                skipInspect: [this.idPath],\n                editor: ceEditor,\n                sourceLine: null\n            });\n        }\n        this.lastVirtualLine += this.blankLinesBetweenCells;\n        this.lastSourceLine += sourceCellLines.length;\n    }\n    /**\n     * Extract a code block into list of string in supported language and\n     * a map of foreign document if any.\n     * @param  block - block to be appended\n     * @param  editorShift - position shift in source document\n     */\n    prepareCodeBlock(block, editorShift = { line: 0, column: 0 }) {\n        let { cellCodeKept, foreignDocumentsMap } = this.extractForeignCode(block, editorShift);\n        let lines = cellCodeKept.split('\\n');\n        return { lines, foreignDocumentsMap };\n    }\n    /**\n     * Extract the foreign code from input block by using the registered\n     * extractors.\n     * @param  block - block to be appended\n     * @param  editorShift - position shift in source document\n     */\n    extractForeignCode(block, editorShift) {\n        let foreignDocumentsMap = new Map();\n        let cellCode = block.value;\n        const extractorsForAnyLang = this._foreignCodeExtractors.getExtractors(block.type, null);\n        const extractorsForCurrentLang = this._foreignCodeExtractors.getExtractors(block.type, this.language);\n        for (let extractor of [\n            ...extractorsForAnyLang,\n            ...extractorsForCurrentLang\n        ]) {\n            if (!extractor.hasForeignCode(cellCode, block.type)) {\n                continue;\n            }\n            let results = extractor.extractForeignCode(cellCode);\n            let keptCellCode = '';\n            for (let result of results) {\n                if (result.foreignCode !== null) {\n                    // result.range should only be null if result.foregin_code is null\n                    if (result.range === null) {\n                        console.log('Failure in foreign code extraction: `range` is null but `foreign_code` is not!');\n                        continue;\n                    }\n                    let foreignDocument = this._chooseForeignDocument(extractor);\n                    foreignDocumentsMap.set(result.range, {\n                        virtualLine: foreignDocument.lastVirtualLine,\n                        virtualDocument: foreignDocument,\n                        editor: block.ceEditor\n                    });\n                    let foreignShift = {\n                        line: editorShift.line + result.range.start.line,\n                        column: editorShift.column + result.range.start.column\n                    };\n                    foreignDocument.appendCodeBlock({\n                        value: result.foreignCode,\n                        ceEditor: block.ceEditor,\n                        type: 'code'\n                    }, foreignShift, result.virtualShift);\n                }\n                if (result.hostCode != null) {\n                    keptCellCode += result.hostCode;\n                }\n            }\n            // not breaking - many extractors are allowed to process the code, one after each other\n            // (think JS and CSS in HTML, or %R inside of %%timeit).\n            cellCode = keptCellCode;\n        }\n        return { cellCodeKept: cellCode, foreignDocumentsMap };\n    }\n    /**\n     * Close a foreign document and disconnect all associated signals\n     */\n    closeForeign(document) {\n        this._foreignDocumentClosed.emit({\n            foreignDocument: document,\n            parentHost: this\n        });\n        // remove it from foreign documents list\n        this.foreignDocuments.delete(document.virtualId);\n        // and delete the documents within it\n        document.closeAllForeignDocuments();\n        document.foreignDocumentClosed.disconnect(this.forwardClosedSignal, this);\n        document.foreignDocumentOpened.disconnect(this.forwardOpenedSignal, this);\n        document.dispose();\n    }\n    /**\n     * Close all foreign documents.\n     */\n    closeAllForeignDocuments() {\n        for (let document of this.foreignDocuments.values()) {\n            this.closeForeign(document);\n        }\n    }\n    /**\n     * Close all expired documents.\n     */\n    closeExpiredDocuments() {\n        const usedDocuments = new Set();\n        for (const line of this.sourceLines.values()) {\n            for (const block of line.foreignDocumentsMap.values()) {\n                usedDocuments.add(block.virtualDocument);\n            }\n        }\n        const documentIDs = new Map();\n        for (const [id, document] of this.foreignDocuments.entries()) {\n            const ids = documentIDs.get(document);\n            if (typeof ids !== 'undefined') {\n                documentIDs.set(document, [...ids, id]);\n            }\n            documentIDs.set(document, [id]);\n        }\n        const allDocuments = new Set(documentIDs.keys());\n        const unusedVirtualDocuments = new Set([...allDocuments].filter(x => !usedDocuments.has(x)));\n        for (let document of unusedVirtualDocuments.values()) {\n            document.remainingLifetime -= 1;\n            if (document.remainingLifetime <= 0) {\n                document.dispose();\n                const ids = documentIDs.get(document);\n                for (const id of ids) {\n                    this.foreignDocuments.delete(id);\n                }\n            }\n        }\n    }\n    /**\n     * Transform the position of the source to the editor\n     * position.\n     *\n     * @param  pos - position in the source document\n     * @return position in the editor.\n     */\n    transformSourceToEditor(pos) {\n        let sourceLine = this.sourceLines.get(pos.line);\n        let editorLine = sourceLine.editorLine;\n        let editorShift = sourceLine.editorShift;\n        return {\n            // only shift column in the line beginning the virtual document (first list of the editor in cell magics, but might be any line of editor in line magics!)\n            ch: pos.ch + (editorLine === 0 ? editorShift.column : 0),\n            line: editorLine + editorShift.line\n            // TODO or:\n            //  line: pos.line + editor_shift.line - this.first_line_of_the_block(editor)\n        };\n    }\n    /**\n     * Transform the position in the virtual document to the\n     * editor position.\n     * Can be null because some lines are added as padding/anchors\n     * to the virtual document and those do not exist in the source document\n     * and thus they are absent in the editor.\n     */\n    transformVirtualToEditor(virtualPosition) {\n        let sourcePosition = this.transformVirtualToSource(virtualPosition);\n        if (sourcePosition == null) {\n            return null;\n        }\n        return this.transformSourceToEditor(sourcePosition);\n    }\n    /**\n     * Transform the position in the virtual document to the source.\n     * Can be null because some lines are added as padding/anchors\n     * to the virtual document and those do not exist in the source document.\n     */\n    transformVirtualToSource(position) {\n        const line = this.virtualLines.get(position.line).sourceLine;\n        if (line == null) {\n            return null;\n        }\n        return {\n            ch: position.ch,\n            line: line\n        };\n    }\n    /**\n     * Compute the position in root document from the position of\n     * a virtual document.\n     */\n    transformVirtualToRoot(position) {\n        var _a;\n        const editor = (_a = this.virtualLines.get(position.line)) === null || _a === void 0 ? void 0 : _a.editor;\n        const editorPosition = this.transformVirtualToEditor(position);\n        if (!editor || !editorPosition) {\n            return null;\n        }\n        return this.root.transformFromEditorToRoot(editor, editorPosition);\n    }\n    /**\n     * Get the corresponding editor of the virtual line.\n     */\n    getEditorAtVirtualLine(pos) {\n        let line = pos.line;\n        // tolerate overshot by one (the hanging blank line at the end)\n        if (!this.virtualLines.has(line)) {\n            line -= 1;\n        }\n        return this.virtualLines.get(line).editor;\n    }\n    /**\n     * Get the corresponding editor of the source line\n     */\n    getEditorAtSourceLine(pos) {\n        return this.sourceLines.get(pos.line).editor;\n    }\n    /**\n     * Recursively emits changed signal from the document or any descendant foreign document.\n     */\n    maybeEmitChanged() {\n        if (this.value !== this.previousValue) {\n            this._changed.emit(this);\n        }\n        this.previousValue = this.value;\n        for (let document of this.foreignDocuments.values()) {\n            document.maybeEmitChanged();\n        }\n    }\n    /**\n     * When this counter goes down to 0, the document will be destroyed and the associated connection will be closed;\n     * This is meant to reduce the number of open connections when a foreign code snippet was removed from the document.\n     *\n     * Note: top level virtual documents are currently immortal (unless killed by other means); it might be worth\n     * implementing culling of unused documents, but if and only if JupyterLab will also implement culling of\n     * idle kernels - otherwise the user experience could be a bit inconsistent, and we would need to invent our own rules.\n     */\n    get remainingLifetime() {\n        if (!this.parent) {\n            return Infinity;\n        }\n        return this._remainingLifetime;\n    }\n    set remainingLifetime(value) {\n        if (this.parent) {\n            this._remainingLifetime = value;\n        }\n    }\n    /**\n     * Get the foreign document that can be opened with the input extractor.\n     */\n    _chooseForeignDocument(extractor) {\n        let foreignDocument;\n        // if not standalone, try to append to existing document\n        let foreignExists = this.foreignDocuments.has(extractor.language);\n        if (!extractor.standalone && foreignExists) {\n            foreignDocument = this.foreignDocuments.get(extractor.language);\n        }\n        else {\n            // if (previous document does not exists) or (extractor produces standalone documents\n            // and no old standalone document could be reused): create a new document\n            let unusedStandalone = this.unusedStandaloneDocuments.get(extractor.language);\n            if (extractor.standalone && unusedStandalone.length > 0) {\n                foreignDocument = unusedStandalone.pop();\n            }\n            else {\n                foreignDocument = this.openForeign(extractor.language, extractor.standalone, extractor.fileExtension);\n            }\n        }\n        return foreignDocument;\n    }\n    /**\n     * Create a foreign document from input language and file extension.\n     *\n     * @param  language - the required language\n     * @param  standalone - the document type is supported natively by LSP?\n     * @param  fileExtension - File extension.\n     */\n    openForeign(language, standalone, fileExtension) {\n        let document = new this.constructor({\n            ...this.options,\n            parent: this,\n            standalone: standalone,\n            fileExtension: fileExtension,\n            language: language\n        });\n        const context = {\n            foreignDocument: document,\n            parentHost: this\n        };\n        this._foreignDocumentOpened.emit(context);\n        // pass through any future signals\n        document.foreignDocumentClosed.connect(this.forwardClosedSignal, this);\n        document.foreignDocumentOpened.connect(this.forwardOpenedSignal, this);\n        this.foreignDocuments.set(document.virtualId, document);\n        return document;\n    }\n    /**\n     * Forward the closed signal from the foreign document to the host document's\n     * signal\n     */\n    forwardClosedSignal(host, context) {\n        this._foreignDocumentClosed.emit(context);\n    }\n    /**\n     * Forward the opened signal from the foreign document to the host document's\n     * signal\n     */\n    forwardOpenedSignal(host, context) {\n        this._foreignDocumentOpened.emit(context);\n    }\n    /**\n     * Slot of the `updateBegan` signal.\n     */\n    _updateBeganSlot() {\n        this._editorToSourceLineNew = new Map();\n    }\n    /**\n     * Slot of the `blockAdded` signal.\n     */\n    _blockAddedSlot(updateManager, blockData) {\n        this._editorToSourceLineNew.set(blockData.block.ceEditor, blockData.virtualDocument.lastSourceLine);\n    }\n    /**\n     * Slot of the `updateFinished` signal.\n     */\n    _updateFinishedSlot() {\n        this._editorToSourceLine = this._editorToSourceLineNew;\n    }\n}\nVirtualDocument.instancesCount = 0;\n/**\n * Create foreign documents if available from input virtual documents.\n * @param virtualDocument - the virtual document to be collected\n * @return - Set of generated foreign documents\n */\nexport function collectDocuments(virtualDocument) {\n    let collected = new Set();\n    collected.add(virtualDocument);\n    for (let foreign of virtualDocument.foreignDocuments.values()) {\n        let foreignLanguages = collectDocuments(foreign);\n        foreignLanguages.forEach(collected.add, collected);\n    }\n    return collected;\n}\nexport class UpdateManager {\n    constructor(virtualDocument) {\n        this.virtualDocument = virtualDocument;\n        this._isDisposed = false;\n        /**\n         * Promise resolved when the updating process finishes.\n         */\n        this._updateDone = new Promise(resolve => {\n            resolve();\n        });\n        /**\n         * Virtual documents update guard.\n         */\n        this._isUpdateInProgress = false;\n        /**\n         * Update lock to prevent multiple updates are applied at the same time.\n         */\n        this._updateLock = false;\n        this._blockAdded = new Signal(this);\n        this._documentUpdated = new Signal(this);\n        this._updateBegan = new Signal(this);\n        this._updateFinished = new Signal(this);\n        this.documentUpdated.connect(this._onUpdated, this);\n    }\n    /**\n     * Promise resolved when the updating process finishes.\n     */\n    get updateDone() {\n        return this._updateDone;\n    }\n    /**\n     * Test whether the document is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Signal emitted when a code block is added to the document.\n     */\n    get blockAdded() {\n        return this._blockAdded;\n    }\n    /**\n     * Signal emitted by the editor that triggered the update,\n     * providing the root document of the updated documents.\n     */\n    get documentUpdated() {\n        return this._documentUpdated;\n    }\n    /**\n     * Signal emitted when the update is started\n     */\n    get updateBegan() {\n        return this._updateBegan;\n    }\n    /**\n     * Signal emitted when the update is finished\n     */\n    get updateFinished() {\n        return this._updateFinished;\n    }\n    /**\n     * Dispose the class\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this.documentUpdated.disconnect(this._onUpdated);\n        Signal.clearData(this);\n    }\n    /**\n     * Execute provided callback within an update-locked context, which guarantees that:\n     *  - the previous updates must have finished before the callback call, and\n     *  - no update will happen when executing the callback\n     * @param fn - the callback to execute in update lock\n     */\n    async withUpdateLock(fn) {\n        await untilReady(() => this._canUpdate(), 12, 10).then(() => {\n            try {\n                this._updateLock = true;\n                fn();\n            }\n            finally {\n                this._updateLock = false;\n            }\n        });\n    }\n    /**\n     * Update all the virtual documents, emit documents updated with root document if succeeded,\n     * and resolve a void promise. The promise does not contain the text value of the root document,\n     * as to avoid an easy trap of ignoring the changes in the virtual documents.\n     */\n    async updateDocuments(blocks) {\n        let update = new Promise((resolve, reject) => {\n            // defer the update by up to 50 ms (10 retrials * 5 ms break),\n            // awaiting for the previous update to complete.\n            untilReady(() => this._canUpdate(), 10, 5)\n                .then(() => {\n                if (this.isDisposed || !this.virtualDocument) {\n                    resolve();\n                }\n                try {\n                    this._isUpdateInProgress = true;\n                    this._updateBegan.emit(blocks);\n                    this.virtualDocument.clear();\n                    for (let codeBlock of blocks) {\n                        this._blockAdded.emit({\n                            block: codeBlock,\n                            virtualDocument: this.virtualDocument\n                        });\n                        this.virtualDocument.appendCodeBlock(codeBlock);\n                    }\n                    this._updateFinished.emit(blocks);\n                    if (this.virtualDocument) {\n                        this._documentUpdated.emit(this.virtualDocument);\n                        this.virtualDocument.maybeEmitChanged();\n                    }\n                    resolve();\n                }\n                catch (e) {\n                    console.warn('Documents update failed:', e);\n                    reject(e);\n                }\n                finally {\n                    this._isUpdateInProgress = false;\n                }\n            })\n                .catch(console.error);\n        });\n        this._updateDone = update;\n        return update;\n    }\n    /**\n     * Once all the foreign documents were refreshed, the unused documents (and their connections)\n     * should be terminated if their lifetime has expired.\n     */\n    _onUpdated(manager, rootDocument) {\n        try {\n            rootDocument.closeExpiredDocuments();\n        }\n        catch (e) {\n            console.warn('Failed to close expired documents');\n        }\n    }\n    /**\n     * Check if the document can be updated.\n     */\n    _canUpdate() {\n        return !this.isDisposed && !this._isUpdateInProgress && !this._updateLock;\n    }\n}\n//# sourceMappingURL=document.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module lsp\n */\nexport * from './adapters';\nexport * from './connection_manager';\nexport * from './extractors';\nexport * from './feature';\nexport * from './manager';\nexport * from './plugin';\nexport * from './positioning';\nexport * from './tokens';\nexport * from './utils';\nexport * from './virtual/document';\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/codemirror/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\n","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { showErrorMessage } from '@jupyterlab/apputils';\nimport { IRecentsManager } from '@jupyterlab/docmanager';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { IFileBrowserCommands } from '@jupyterlab/filebrowser';\nimport { IMainMenu } from '@jupyterlab/mainmenu';\nimport { Menu } from '@lumino/widgets';\nimport { PromiseDelegate } from '@lumino/coreutils';\nconst PLUGIN_ID = '@jupyterlab/mainmenu-extension:recents';\n/**\n * A namespace for command IDs.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    /**\n     * Open a recent document or directory\n     */\n    CommandIDs.openRecent = 'recentmenu:open-recent';\n    /**\n     * Reopen recently closed tab\n     */\n    CommandIDs.reopenLast = 'recentmenu:reopen-last';\n    /**\n     * Clear recent documents and directories (implemented in docmanager)\n     */\n    CommandIDs.clearRecents = 'docmanager:clear-recents';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * Recents submenu\n *\n * It will trigger validation onBeforeAttach.\n */\nclass RecentsMenu extends Menu {\n    constructor(options) {\n        super(options);\n        this._manager = options.manager;\n        this._showDirectories = options.showDirectories;\n        this.updateItems();\n        this._manager.changed.connect(this.updateItems, this);\n    }\n    async _validateRecentlyOpened() {\n        return void Promise.all(this._manager.recentlyOpened.map(recent => this._manager.validate(recent)));\n    }\n    onBeforeAttach(msg) {\n        const timeout = new PromiseDelegate();\n        setTimeout(() => {\n            timeout.reject('Recents validation timed out.');\n        }, 550);\n        Promise.race([timeout.promise, this._validateRecentlyOpened()])\n            .then(() => {\n            this.update();\n        })\n            .catch(() => {\n            // no-op\n        });\n        super.onBeforeAttach(msg);\n    }\n    updateItems() {\n        // We cannot edit the item list on the fly because it will close\n        // the menu - so we use `isEnabled` in the command and trigger a\n        // UI update to emulate that; while `isVisible` would work too,\n        // that could cause the user to mis-clicks when items move around\n        // because another item was hidden.\n        this.clearItems();\n        this.addItem({\n            command: CommandIDs.reopenLast\n        });\n        this.addItem({ type: 'separator' });\n        let addSeparator = true;\n        let anyDirectory = false;\n        this._manager.recentlyOpened\n            .sort((a, b) => {\n            if (a.contentType === b.contentType) {\n                return 0;\n            }\n            else {\n                return a.contentType !== 'directory' ? 1 : -1;\n            }\n        })\n            .forEach((recent) => {\n            const isDirectory = recent.contentType === 'directory';\n            if (isDirectory) {\n                if (!this._showDirectories) {\n                    return;\n                }\n                anyDirectory = true;\n            }\n            else if (addSeparator && anyDirectory) {\n                addSeparator = false;\n                this.addItem({ type: 'separator' });\n            }\n            this.addItem({\n                command: CommandIDs.openRecent,\n                args: { recent }\n            });\n        });\n        this.addItem({ type: 'separator' });\n        this.addItem({\n            command: CommandIDs.clearRecents\n        });\n    }\n}\n/**\n * Add recent files and directories to sub-menu.\n */\nexport const recentsMenuPlugin = {\n    id: PLUGIN_ID,\n    description: 'Adds sub-menu for opening recent documents to the File section of the main menu.',\n    autoStart: true,\n    requires: [IRecentsManager, IMainMenu],\n    optional: [IFileBrowserCommands, ITranslator],\n    activate: (app, recentsManager, mainMenu, fileBrowserCommands, translator) => {\n        const { commands } = app;\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        // Do not show directories if the file browser is not present\n        const showDirectories = fileBrowserCommands !== null;\n        const validate = async (recent) => {\n            // If path is not found, validating will remove it\n            const isValid = await recentsManager.validate(recent);\n            if (!isValid) {\n                await showErrorMessage(trans.__('Could Not Open Recent'), trans.__('%1 is no longer valid and will be removed from the list', recent.path));\n            }\n            return isValid;\n        };\n        // Commands\n        commands.addCommand(CommandIDs.openRecent, {\n            execute: async (args) => {\n                const recent = args.recent;\n                const path = recent.path === '' ? '/' : recent.path;\n                const isValid = await validate(recent);\n                if (!isValid) {\n                    return;\n                }\n                if (fileBrowserCommands && recent.contentType === 'directory') {\n                    // Note: prefer file browser (if available) to allow opening directories\n                    await commands.execute(fileBrowserCommands.openPath, { path });\n                }\n                else {\n                    await commands.execute('docmanager:open', {\n                        path,\n                        factory: recent.factory\n                    });\n                }\n            },\n            label: args => {\n                const recent = args.recent;\n                if (recent) {\n                    return PathExt.joinWithLeadingSlash(recent.root, recent.path);\n                }\n                else {\n                    return trans.__('Open a Recent Document (given by `recent` argument)');\n                }\n            },\n            isEnabled: args => recentsManager.recentlyOpened.includes(args.recent)\n        });\n        app.commands.addCommand(CommandIDs.reopenLast, {\n            execute: async () => {\n                const recent = recentsManager.recentlyClosed[0];\n                if (!recent) {\n                    return;\n                }\n                const isValid = await validate(recent);\n                if (!isValid) {\n                    return;\n                }\n                await commands.execute('docmanager:open', {\n                    path: recent.path,\n                    factory: recent.factory\n                });\n                recentsManager.removeRecent(recent, 'closed');\n            },\n            label: () => {\n                const recent = recentsManager.recentlyClosed[0];\n                return recent\n                    ? trans.__('Reopen %1', recent.path)\n                    : trans.__('Reopen Closed Document');\n            },\n            isEnabled: () => {\n                return recentsManager.recentlyClosed.length !== 0;\n            },\n            caption: trans.__('Reopen recently closed file or notebook.')\n        });\n        // Menu\n        const submenu = new RecentsMenu({\n            commands,\n            manager: recentsManager,\n            showDirectories\n        });\n        submenu.title.label = trans.__('Open Recent');\n        mainMenu.fileMenu.addItem({\n            type: 'submenu',\n            submenu,\n            rank: 1\n        });\n    }\n};\n//# sourceMappingURL=recents.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module mainmenu-extension\n */\nimport { addSemanticCommand, ILabShell, IRouter } from '@jupyterlab/application';\nimport { Dialog, ICommandPalette, MenuFactory, showDialog } from '@jupyterlab/apputils';\nimport { PageConfig, URLExt } from '@jupyterlab/coreutils';\nimport { IMainMenu, MainMenu } from '@jupyterlab/mainmenu';\nimport { ServerConnection } from '@jupyterlab/services';\nimport { ISettingRegistry, SettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator } from '@jupyterlab/translation';\nimport { fastForwardIcon, refreshIcon, runIcon, stopIcon } from '@jupyterlab/ui-components';\nimport { find } from '@lumino/algorithm';\nimport { JSONExt } from '@lumino/coreutils';\nimport { Widget } from '@lumino/widgets';\nimport { recentsMenuPlugin } from './recents';\nconst PLUGIN_ID = '@jupyterlab/mainmenu-extension:plugin';\n/**\n * A namespace for command IDs of semantic extension points.\n */\nexport var CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.openEdit = 'editmenu:open';\n    CommandIDs.undo = 'editmenu:undo';\n    CommandIDs.redo = 'editmenu:redo';\n    CommandIDs.clearCurrent = 'editmenu:clear-current';\n    CommandIDs.clearAll = 'editmenu:clear-all';\n    CommandIDs.find = 'editmenu:find';\n    CommandIDs.goToLine = 'editmenu:go-to-line';\n    CommandIDs.openFile = 'filemenu:open';\n    CommandIDs.closeAndCleanup = 'filemenu:close-and-cleanup';\n    CommandIDs.createConsole = 'filemenu:create-console';\n    CommandIDs.shutdown = 'filemenu:shutdown';\n    CommandIDs.logout = 'filemenu:logout';\n    CommandIDs.openKernel = 'kernelmenu:open';\n    CommandIDs.interruptKernel = 'kernelmenu:interrupt';\n    CommandIDs.reconnectToKernel = 'kernelmenu:reconnect-to-kernel';\n    CommandIDs.restartKernel = 'kernelmenu:restart';\n    CommandIDs.restartKernelAndClear = 'kernelmenu:restart-and-clear';\n    CommandIDs.changeKernel = 'kernelmenu:change';\n    CommandIDs.shutdownKernel = 'kernelmenu:shutdown';\n    CommandIDs.shutdownAllKernels = 'kernelmenu:shutdownAll';\n    CommandIDs.openView = 'viewmenu:open';\n    CommandIDs.wordWrap = 'viewmenu:word-wrap';\n    CommandIDs.lineNumbering = 'viewmenu:line-numbering';\n    CommandIDs.matchBrackets = 'viewmenu:match-brackets';\n    CommandIDs.openRun = 'runmenu:open';\n    CommandIDs.run = 'runmenu:run';\n    CommandIDs.runAll = 'runmenu:run-all';\n    CommandIDs.restartAndRunAll = 'runmenu:restart-and-run-all';\n    CommandIDs.runAbove = 'runmenu:run-above';\n    CommandIDs.runBelow = 'runmenu:run-below';\n    CommandIDs.openTabs = 'tabsmenu:open';\n    CommandIDs.activateById = 'tabsmenu:activate-by-id';\n    CommandIDs.activatePreviouslyUsedTab = 'tabsmenu:activate-previously-used-tab';\n    CommandIDs.openSettings = 'settingsmenu:open';\n    CommandIDs.openHelp = 'helpmenu:open';\n    CommandIDs.getKernel = 'helpmenu:get-kernel';\n    CommandIDs.openFirst = 'mainmenu:open-first';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * A service providing an interface to the main menu.\n */\nconst plugin = {\n    id: PLUGIN_ID,\n    description: 'Adds and provides the application main menu.',\n    requires: [IRouter, ITranslator],\n    optional: [ICommandPalette, ILabShell, ISettingRegistry],\n    provides: IMainMenu,\n    activate: async (app, router, translator, palette, labShell, registry) => {\n        const { commands } = app;\n        const trans = translator.load('jupyterlab');\n        const menu = new MainMenu(commands);\n        menu.id = 'jp-MainMenu';\n        menu.addClass('jp-scrollbar-tiny');\n        // Built menu from settings\n        if (registry) {\n            await Private.loadSettingsMenu(registry, (aMenu) => {\n                menu.addMenu(aMenu, false, { rank: aMenu.rank });\n            }, options => MainMenu.generateMenu(commands, options, trans), translator);\n            // Trigger single update\n            menu.update();\n        }\n        // Only add quit button if the back-end supports it by checking page config.\n        const quitButton = PageConfig.getOption('quitButton').toLowerCase();\n        menu.fileMenu.quitEntry = quitButton === 'true';\n        // Create the application menus.\n        createEditMenu(app, menu.editMenu, trans);\n        createFileMenu(app, menu.fileMenu, router, trans);\n        createKernelMenu(app, menu.kernelMenu, trans);\n        createRunMenu(app, menu.runMenu, trans);\n        createViewMenu(app, menu.viewMenu, trans);\n        createHelpMenu(app, menu.helpMenu, trans);\n        // The tabs menu relies on lab shell functionality.\n        if (labShell) {\n            createTabsMenu(app, menu.tabsMenu, labShell, trans);\n        }\n        // Create commands to open the main application menus.\n        const activateMenu = (item) => {\n            menu.activeMenu = item;\n            menu.openActiveMenu();\n        };\n        commands.addCommand(CommandIDs.openEdit, {\n            label: trans.__('Open Edit Menu'),\n            execute: () => activateMenu(menu.editMenu)\n        });\n        commands.addCommand(CommandIDs.openFile, {\n            label: trans.__('Open File Menu'),\n            execute: () => activateMenu(menu.fileMenu)\n        });\n        commands.addCommand(CommandIDs.openKernel, {\n            label: trans.__('Open Kernel Menu'),\n            execute: () => activateMenu(menu.kernelMenu)\n        });\n        commands.addCommand(CommandIDs.openRun, {\n            label: trans.__('Open Run Menu'),\n            execute: () => activateMenu(menu.runMenu)\n        });\n        commands.addCommand(CommandIDs.openView, {\n            label: trans.__('Open View Menu'),\n            execute: () => activateMenu(menu.viewMenu)\n        });\n        commands.addCommand(CommandIDs.openSettings, {\n            label: trans.__('Open Settings Menu'),\n            execute: () => activateMenu(menu.settingsMenu)\n        });\n        commands.addCommand(CommandIDs.openTabs, {\n            label: trans.__('Open Tabs Menu'),\n            execute: () => activateMenu(menu.tabsMenu)\n        });\n        commands.addCommand(CommandIDs.openHelp, {\n            label: trans.__('Open Help Menu'),\n            execute: () => activateMenu(menu.helpMenu)\n        });\n        commands.addCommand(CommandIDs.openFirst, {\n            label: trans.__('Open First Menu'),\n            execute: () => {\n                menu.activeIndex = 0;\n                menu.openActiveMenu();\n            }\n        });\n        if (palette) {\n            // Add some of the commands defined here to the command palette.\n            palette.addItem({\n                command: CommandIDs.shutdown,\n                category: trans.__('Main Area')\n            });\n            palette.addItem({\n                command: CommandIDs.logout,\n                category: trans.__('Main Area')\n            });\n            palette.addItem({\n                command: CommandIDs.shutdownAllKernels,\n                category: trans.__('Kernel Operations')\n            });\n            palette.addItem({\n                command: CommandIDs.activatePreviouslyUsedTab,\n                category: trans.__('Main Area')\n            });\n        }\n        app.shell.add(menu, 'menu', { rank: 100 });\n        return menu;\n    }\n};\n/**\n * Create the basic `Edit` menu.\n */\nfunction createEditMenu(app, menu, trans) {\n    const { commands, shell } = app;\n    // Add the undo/redo commands the the Edit menu.\n    addSemanticCommand({\n        id: CommandIDs.undo,\n        commands,\n        shell,\n        semanticCommands: menu.undoers.undo,\n        default: {\n            label: trans.__('Undo')\n        },\n        trans\n    });\n    addSemanticCommand({\n        id: CommandIDs.redo,\n        commands,\n        shell,\n        semanticCommands: menu.undoers.redo,\n        default: {\n            label: trans.__('Redo')\n        },\n        trans\n    });\n    // Add the clear commands to the Edit menu.\n    addSemanticCommand({\n        id: CommandIDs.clearCurrent,\n        commands,\n        shell,\n        semanticCommands: menu.clearers.clearCurrent,\n        default: {\n            label: trans.__('Clear')\n        },\n        trans\n    });\n    addSemanticCommand({\n        id: CommandIDs.clearAll,\n        commands,\n        shell,\n        semanticCommands: menu.clearers.clearAll,\n        default: {\n            label: trans.__('Clear All')\n        },\n        trans\n    });\n    addSemanticCommand({\n        id: CommandIDs.goToLine,\n        commands,\n        shell,\n        semanticCommands: menu.goToLiners,\n        default: {\n            label: trans.__('Go to Line…')\n        },\n        trans\n    });\n}\n/**\n * Create the basic `File` menu.\n */\nfunction createFileMenu(app, menu, router, trans) {\n    const { commands, shell } = app;\n    // Add a delegator command for closing and cleaning up an activity.\n    // This one is a bit different, in that we consider it enabled\n    // even if it cannot find a delegate for the activity.\n    // In that case, we instead call the application `close` command.\n    addSemanticCommand({\n        id: CommandIDs.closeAndCleanup,\n        commands,\n        shell,\n        semanticCommands: menu.closeAndCleaners,\n        default: {\n            execute: 'application:close',\n            label: trans.__('Close and Shut Down'),\n            isEnabled: true\n        },\n        overrides: {\n            isEnabled: () => !!app.shell.currentWidget && !!app.shell.currentWidget.title.closable\n        },\n        trans\n    });\n    // Add a delegator command for creating a console for an activity.\n    addSemanticCommand({\n        id: CommandIDs.createConsole,\n        commands,\n        shell,\n        semanticCommands: menu.consoleCreators,\n        default: {\n            label: trans.__('New Console for Activity')\n        },\n        trans\n    });\n    commands.addCommand(CommandIDs.shutdown, {\n        label: trans.__('Shut Down'),\n        caption: trans.__('Shut down %1', app.name),\n        isVisible: () => menu.quitEntry,\n        isEnabled: () => menu.quitEntry,\n        execute: () => {\n            return showDialog({\n                title: trans.__('Shutdown confirmation'),\n                body: trans.__('Please confirm you want to shut down %1.', app.name),\n                buttons: [\n                    Dialog.cancelButton(),\n                    Dialog.warnButton({ label: trans.__('Shut Down') })\n                ]\n            }).then(async (result) => {\n                if (result.button.accept) {\n                    const setting = ServerConnection.makeSettings();\n                    const apiURL = URLExt.join(setting.baseUrl, 'api/shutdown');\n                    // Shutdown all kernel and terminal sessions before shutting down the server\n                    // If this fails, we continue execution so we can post an api/shutdown request\n                    try {\n                        await Promise.all([\n                            app.serviceManager.sessions.shutdownAll(),\n                            app.serviceManager.terminals.shutdownAll()\n                        ]);\n                    }\n                    catch (e) {\n                        // Do nothing\n                        console.log(`Failed to shutdown sessions and terminals: ${e}`);\n                    }\n                    return ServerConnection.makeRequest(apiURL, { method: 'POST' }, setting)\n                        .then(result => {\n                        if (result.ok) {\n                            // Close this window if the shutdown request has been successful\n                            const body = document.createElement('div');\n                            const p1 = document.createElement('p');\n                            p1.textContent = trans.__('You have shut down the Jupyter server. You can now close this tab.');\n                            const p2 = document.createElement('p');\n                            p2.textContent = trans.__('To use %1 again, you will need to relaunch it.', app.name);\n                            body.appendChild(p1);\n                            body.appendChild(p2);\n                            void showDialog({\n                                title: trans.__('Server stopped'),\n                                body: new Widget({ node: body }),\n                                buttons: []\n                            });\n                            window.close();\n                        }\n                        else {\n                            throw new ServerConnection.ResponseError(result);\n                        }\n                    })\n                        .catch(data => {\n                        throw new ServerConnection.NetworkError(data);\n                    });\n                }\n            });\n        }\n    });\n    commands.addCommand(CommandIDs.logout, {\n        label: trans.__('Log Out'),\n        caption: trans.__('Log out of %1', app.name),\n        isVisible: () => menu.quitEntry,\n        isEnabled: () => menu.quitEntry,\n        execute: () => {\n            router.navigate('/logout', { hard: true });\n        }\n    });\n}\n/**\n * Create the basic `Kernel` menu.\n */\nfunction createKernelMenu(app, menu, trans) {\n    const { commands, shell } = app;\n    addSemanticCommand({\n        id: CommandIDs.interruptKernel,\n        commands,\n        shell,\n        semanticCommands: menu.kernelUsers.interruptKernel,\n        default: {\n            label: trans.__('Interrupt Kernel'),\n            caption: trans.__('Interrupt the kernel')\n        },\n        overrides: { icon: args => (args.toolbar ? stopIcon : undefined) },\n        trans\n    });\n    addSemanticCommand({\n        id: CommandIDs.reconnectToKernel,\n        commands,\n        shell,\n        semanticCommands: menu.kernelUsers.reconnectToKernel,\n        default: {\n            label: trans.__('Reconnect to Kernel')\n        },\n        trans\n    });\n    addSemanticCommand({\n        id: CommandIDs.restartKernel,\n        commands,\n        shell,\n        semanticCommands: menu.kernelUsers.restartKernel,\n        default: {\n            label: trans.__('Restart Kernel…'),\n            caption: trans.__('Restart the kernel')\n        },\n        overrides: { icon: args => (args.toolbar ? refreshIcon : undefined) },\n        trans\n    });\n    addSemanticCommand({\n        id: CommandIDs.restartKernelAndClear,\n        commands,\n        shell,\n        semanticCommands: [\n            menu.kernelUsers.restartKernel,\n            menu.kernelUsers.clearWidget\n        ],\n        default: {\n            label: trans.__('Restart Kernel and Clear…')\n        },\n        trans\n    });\n    addSemanticCommand({\n        id: CommandIDs.changeKernel,\n        commands,\n        shell,\n        semanticCommands: menu.kernelUsers.changeKernel,\n        default: {\n            label: trans.__('Change Kernel…')\n        },\n        trans\n    });\n    addSemanticCommand({\n        id: CommandIDs.shutdownKernel,\n        commands,\n        shell,\n        semanticCommands: menu.kernelUsers.shutdownKernel,\n        default: {\n            label: trans.__('Shut Down Kernel'),\n            caption: trans.__('Shut down kernel')\n        },\n        trans\n    });\n    commands.addCommand(CommandIDs.shutdownAllKernels, {\n        label: trans.__('Shut Down All Kernels…'),\n        isEnabled: () => {\n            return !app.serviceManager.sessions.running().next().done;\n        },\n        execute: () => {\n            return showDialog({\n                title: trans.__('Shut Down All?'),\n                body: trans._n('Are you sure you want to permanently shut down the running kernel?', 'Are you sure you want to permanently shut down the %1 running kernels?', app.serviceManager.kernels.runningCount),\n                buttons: [\n                    Dialog.cancelButton(),\n                    Dialog.warnButton({ label: trans.__('Shut Down All') })\n                ]\n            }).then(result => {\n                if (result.button.accept) {\n                    return app.serviceManager.sessions.shutdownAll();\n                }\n            });\n        }\n    });\n}\n/**\n * Create the basic `View` menu.\n */\nfunction createViewMenu(app, menu, trans) {\n    const { commands, shell } = app;\n    addSemanticCommand({\n        id: CommandIDs.lineNumbering,\n        commands,\n        shell,\n        semanticCommands: menu.editorViewers.toggleLineNumbers,\n        default: {\n            label: trans.__('Show Line Numbers')\n        },\n        trans\n    });\n    addSemanticCommand({\n        id: CommandIDs.matchBrackets,\n        commands,\n        shell,\n        semanticCommands: menu.editorViewers.toggleMatchBrackets,\n        default: {\n            label: trans.__('Match Brackets')\n        },\n        trans\n    });\n    addSemanticCommand({\n        id: CommandIDs.wordWrap,\n        commands,\n        shell,\n        semanticCommands: menu.editorViewers.toggleWordWrap,\n        default: {\n            label: trans.__('Wrap Words')\n        },\n        trans\n    });\n}\n/**\n * Create the basic `Run` menu.\n */\nfunction createRunMenu(app, menu, trans) {\n    const { commands, shell } = app;\n    addSemanticCommand({\n        id: CommandIDs.run,\n        commands,\n        shell,\n        semanticCommands: menu.codeRunners.run,\n        default: {\n            label: trans.__('Run Selected'),\n            caption: trans.__('Run Selected')\n        },\n        overrides: {\n            icon: args => (args.toolbar ? runIcon : undefined)\n        },\n        trans\n    });\n    addSemanticCommand({\n        id: CommandIDs.runAll,\n        commands,\n        shell,\n        semanticCommands: menu.codeRunners.runAll,\n        default: {\n            label: trans.__('Run All'),\n            caption: trans.__('Run All')\n        },\n        trans\n    });\n    addSemanticCommand({\n        id: CommandIDs.restartAndRunAll,\n        commands,\n        shell,\n        semanticCommands: [menu.codeRunners.restart, menu.codeRunners.runAll],\n        default: {\n            label: trans.__('Restart Kernel and Run All'),\n            caption: trans.__('Restart Kernel and Run All')\n        },\n        overrides: {\n            icon: args => (args.toolbar ? fastForwardIcon : undefined)\n        },\n        trans\n    });\n}\n/**\n * Create the basic `Tabs` menu.\n */\nfunction createTabsMenu(app, menu, labShell, trans) {\n    const commands = app.commands;\n    // A list of the active tabs in the main area.\n    const tabGroup = [];\n    // A disposable for getting rid of the out-of-date tabs list.\n    let disposable;\n    // Command to activate a widget by id.\n    commands.addCommand(CommandIDs.activateById, {\n        label: args => {\n            if (args.id === undefined) {\n                return trans.__('Activate a widget by its `id`.');\n            }\n            const id = args['id'] || '';\n            const widget = find(app.shell.widgets('main'), w => w.id === id);\n            return (widget && widget.title.label) || '';\n        },\n        isToggled: args => {\n            const id = args['id'] || '';\n            return !!app.shell.currentWidget && app.shell.currentWidget.id === id;\n        },\n        execute: args => app.shell.activateById(args['id'] || '')\n    });\n    let previousId = '';\n    // Command to toggle between the current\n    // tab and the last modified tab.\n    commands.addCommand(CommandIDs.activatePreviouslyUsedTab, {\n        label: trans.__('Activate Previously Used Tab'),\n        isEnabled: () => !!previousId,\n        execute: () => commands.execute(CommandIDs.activateById, { id: previousId })\n    });\n    if (labShell) {\n        void app.restored.then(() => {\n            // Iterate over the current widgets in the\n            // main area, and add them to the tab group\n            // of the menu.\n            const populateTabs = () => {\n                // remove the previous tab list\n                if (disposable && !disposable.isDisposed) {\n                    disposable.dispose();\n                }\n                tabGroup.length = 0;\n                let isPreviouslyUsedTabAttached = false;\n                for (const widget of app.shell.widgets('main')) {\n                    if (widget.id === previousId) {\n                        isPreviouslyUsedTabAttached = true;\n                    }\n                    tabGroup.push({\n                        command: CommandIDs.activateById,\n                        args: { id: widget.id }\n                    });\n                }\n                disposable = menu.addGroup(tabGroup, 1);\n                previousId = isPreviouslyUsedTabAttached ? previousId : '';\n            };\n            populateTabs();\n            labShell.layoutModified.connect(() => {\n                populateTabs();\n            });\n            // Update the ID of the previous active tab if a new tab is selected.\n            labShell.currentChanged.connect((_, args) => {\n                const widget = args.oldValue;\n                if (!widget) {\n                    return;\n                }\n                previousId = widget.id;\n            });\n        });\n    }\n}\n/**\n * Create the basic `Help` menu.\n */\nfunction createHelpMenu(app, menu, trans) {\n    const { commands, shell } = app;\n    addSemanticCommand({\n        id: CommandIDs.getKernel,\n        commands,\n        shell,\n        semanticCommands: menu.getKernel,\n        default: {\n            label: trans.__('Get Kernel'),\n            isVisible: false\n        },\n        trans\n    });\n}\nexport default [plugin, recentsMenuPlugin];\n/**\n * A namespace for Private data.\n */\nvar Private;\n(function (Private) {\n    async function displayInformation(trans) {\n        const result = await showDialog({\n            title: trans.__('Information'),\n            body: trans.__('Menu customization has changed. You will need to reload JupyterLab to see the changes.'),\n            buttons: [\n                Dialog.cancelButton(),\n                Dialog.okButton({ label: trans.__('Reload') })\n            ]\n        });\n        if (result.button.accept) {\n            location.reload();\n        }\n    }\n    async function loadSettingsMenu(registry, addMenu, menuFactory, translator) {\n        var _a;\n        const trans = translator.load('jupyterlab');\n        let canonical = null;\n        let loaded = {};\n        /**\n         * Populate the plugin's schema defaults.\n         */\n        function populate(schema) {\n            var _a, _b;\n            loaded = {};\n            const pluginDefaults = Object.keys(registry.plugins)\n                .map(plugin => {\n                var _a, _b;\n                const menus = (_b = (_a = registry.plugins[plugin].schema['jupyter.lab.menus']) === null || _a === void 0 ? void 0 : _a.main) !== null && _b !== void 0 ? _b : [];\n                loaded[plugin] = menus;\n                return menus;\n            })\n                .concat([(_b = (_a = schema['jupyter.lab.menus']) === null || _a === void 0 ? void 0 : _a.main) !== null && _b !== void 0 ? _b : []])\n                .reduceRight((acc, val) => SettingRegistry.reconcileMenus(acc, val, true), schema.properties.menus.default);\n            // Apply default value as last step to take into account overrides.json\n            // The standard default being [] as the plugin must use `jupyter.lab.menus.main`\n            // to define their default value.\n            schema.properties.menus.default = SettingRegistry.reconcileMenus(pluginDefaults, schema.properties.menus.default, true)\n                // flatten one level\n                .sort((a, b) => { var _a, _b; return ((_a = a.rank) !== null && _a !== void 0 ? _a : Infinity) - ((_b = b.rank) !== null && _b !== void 0 ? _b : Infinity); });\n        }\n        // Transform the plugin object to return different schema than the default.\n        registry.transform(PLUGIN_ID, {\n            compose: plugin => {\n                var _a, _b, _c, _d;\n                // Only override the canonical schema the first time.\n                if (!canonical) {\n                    canonical = JSONExt.deepCopy(plugin.schema);\n                    populate(canonical);\n                }\n                const defaults = (_c = (_b = (_a = canonical.properties) === null || _a === void 0 ? void 0 : _a.menus) === null || _b === void 0 ? void 0 : _b.default) !== null && _c !== void 0 ? _c : [];\n                const user = {\n                    ...plugin.data.user,\n                    menus: (_d = plugin.data.user.menus) !== null && _d !== void 0 ? _d : []\n                };\n                const composite = {\n                    ...plugin.data.composite,\n                    menus: SettingRegistry.reconcileMenus(defaults, user.menus)\n                };\n                plugin.data = { composite, user };\n                return plugin;\n            },\n            fetch: plugin => {\n                // Only override the canonical schema the first time.\n                if (!canonical) {\n                    canonical = JSONExt.deepCopy(plugin.schema);\n                    populate(canonical);\n                }\n                return {\n                    data: plugin.data,\n                    id: plugin.id,\n                    raw: plugin.raw,\n                    schema: canonical,\n                    version: plugin.version\n                };\n            }\n        });\n        // Repopulate the canonical variable after the setting registry has\n        // preloaded all initial plugins.\n        const settings = await registry.load(PLUGIN_ID);\n        const currentMenus = (_a = JSONExt.deepCopy(settings.composite.menus)) !== null && _a !== void 0 ? _a : [];\n        const menus = new Array();\n        // Create menu for non-disabled element\n        MenuFactory.createMenus(currentMenus\n            .filter(menu => !menu.disabled)\n            .map(menu => {\n            var _a;\n            return {\n                ...menu,\n                items: SettingRegistry.filterDisabledItems((_a = menu.items) !== null && _a !== void 0 ? _a : [])\n            };\n        }), menuFactory).forEach(menu => {\n            menus.push(menu);\n            addMenu(menu);\n        });\n        settings.changed.connect(() => {\n            var _a;\n            // As extension may change menu through API, prompt the user to reload if the\n            // menu has been updated.\n            const newMenus = (_a = settings.composite.menus) !== null && _a !== void 0 ? _a : [];\n            if (!JSONExt.deepEqual(currentMenus, newMenus)) {\n                void displayInformation(trans);\n            }\n        });\n        registry.pluginChanged.connect(async (sender, plugin) => {\n            var _a, _b, _c;\n            if (plugin !== PLUGIN_ID) {\n                // If the plugin changed its menu.\n                const oldMenus = (_a = loaded[plugin]) !== null && _a !== void 0 ? _a : [];\n                const newMenus = (_c = (_b = registry.plugins[plugin].schema['jupyter.lab.menus']) === null || _b === void 0 ? void 0 : _b.main) !== null && _c !== void 0 ? _c : [];\n                if (!JSONExt.deepEqual(oldMenus, newMenus)) {\n                    if (loaded[plugin]) {\n                        // The plugin has changed, request the user to reload the UI - this should not happen\n                        await displayInformation(trans);\n                    }\n                    else {\n                        // The plugin was not yet loaded when the menu was built => update the menu\n                        loaded[plugin] = JSONExt.deepCopy(newMenus);\n                        // Merge potential disabled state\n                        const toAdd = SettingRegistry.reconcileMenus(newMenus, currentMenus, false, false)\n                            .filter(menu => !menu.disabled)\n                            .map(menu => {\n                            var _a;\n                            return {\n                                ...menu,\n                                items: SettingRegistry.filterDisabledItems((_a = menu.items) !== null && _a !== void 0 ? _a : [])\n                            };\n                        });\n                        MenuFactory.updateMenus(menus, toAdd, menuFactory).forEach(menu => {\n                            addMenu(menu);\n                        });\n                    }\n                }\n            }\n        });\n    }\n    Private.loadSettingsMenu = loadSettingsMenu;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/docmanager/style/index.js';\nimport '@jupyterlab/filebrowser/style/index.js';\nimport '@jupyterlab/mainmenu/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { RankedMenu } from '@jupyterlab/ui-components';\nimport { SemanticCommand } from '@jupyterlab/apputils';\n/**\n * An extensible Edit menu for the application.\n */\nexport class EditMenu extends RankedMenu {\n    /**\n     * Construct the edit menu.\n     */\n    constructor(options) {\n        super(options);\n        this.undoers = {\n            redo: new SemanticCommand(),\n            undo: new SemanticCommand()\n        };\n        this.clearers = {\n            clearAll: new SemanticCommand(),\n            clearCurrent: new SemanticCommand()\n        };\n        this.goToLiners = new SemanticCommand();\n    }\n}\n//# sourceMappingURL=edit.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { RankedMenu } from '@jupyterlab/ui-components';\nimport { find } from '@lumino/algorithm';\nimport { SemanticCommand } from '@jupyterlab/apputils';\n/**\n * An extensible FileMenu for the application.\n */\nexport class FileMenu extends RankedMenu {\n    constructor(options) {\n        super(options);\n        this.quitEntry = false;\n        this.closeAndCleaners = new SemanticCommand();\n        this.consoleCreators = new SemanticCommand();\n    }\n    /**\n     * The New submenu.\n     */\n    get newMenu() {\n        var _a, _b;\n        if (!this._newMenu) {\n            this._newMenu =\n                (_b = (_a = find(this.items, menu => { var _a; return ((_a = menu.submenu) === null || _a === void 0 ? void 0 : _a.id) === 'jp-mainmenu-file-new'; })) === null || _a === void 0 ? void 0 : _a.submenu) !== null && _b !== void 0 ? _b : new RankedMenu({\n                    commands: this.commands\n                });\n        }\n        return this._newMenu;\n    }\n    /**\n     * Dispose of the resources held by the file menu.\n     */\n    dispose() {\n        var _a;\n        (_a = this._newMenu) === null || _a === void 0 ? void 0 : _a.dispose();\n        super.dispose();\n    }\n}\n//# sourceMappingURL=file.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { RankedMenu } from '@jupyterlab/ui-components';\nimport { SemanticCommand } from '@jupyterlab/apputils';\n/**\n * An extensible Help menu for the application.\n */\nexport class HelpMenu extends RankedMenu {\n    /**\n     * Construct the help menu.\n     */\n    constructor(options) {\n        super(options);\n        this.getKernel = new SemanticCommand();\n    }\n}\n//# sourceMappingURL=help.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { RankedMenu } from '@jupyterlab/ui-components';\nimport { SemanticCommand } from '@jupyterlab/apputils';\n/**\n * An extensible Kernel menu for the application.\n */\nexport class KernelMenu extends RankedMenu {\n    /**\n     * Construct the kernel menu.\n     */\n    constructor(options) {\n        super(options);\n        this.kernelUsers = {\n            changeKernel: new SemanticCommand(),\n            clearWidget: new SemanticCommand(),\n            interruptKernel: new SemanticCommand(),\n            reconnectToKernel: new SemanticCommand(),\n            restartKernel: new SemanticCommand(),\n            shutdownKernel: new SemanticCommand()\n        };\n    }\n}\n//# sourceMappingURL=kernel.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { RankedMenu } from '@jupyterlab/ui-components';\nimport { SemanticCommand } from '@jupyterlab/apputils';\n/**\n * An extensible Run menu for the application.\n */\nexport class RunMenu extends RankedMenu {\n    /**\n     * Construct the run menu.\n     */\n    constructor(options) {\n        super(options);\n        this.codeRunners = {\n            restart: new SemanticCommand(),\n            run: new SemanticCommand(),\n            runAll: new SemanticCommand()\n        };\n    }\n}\n//# sourceMappingURL=run.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { RankedMenu } from '@jupyterlab/ui-components';\n/**\n * An extensible Settings menu for the application.\n */\nexport class SettingsMenu extends RankedMenu {\n    /**\n     * Construct the settings menu.\n     */\n    constructor(options) {\n        super(options);\n    }\n}\n//# sourceMappingURL=settings.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { RankedMenu } from '@jupyterlab/ui-components';\n/**\n * An extensible Tabs menu for the application.\n */\nexport class TabsMenu extends RankedMenu {\n    /**\n     * Construct the tabs menu.\n     */\n    constructor(options) {\n        super(options);\n    }\n}\n//# sourceMappingURL=tabs.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { RankedMenu } from '@jupyterlab/ui-components';\nimport { SemanticCommand } from '@jupyterlab/apputils';\n/**\n * An extensible View menu for the application.\n */\nexport class ViewMenu extends RankedMenu {\n    /**\n     * Construct the view menu.\n     */\n    constructor(options) {\n        super(options);\n        this.editorViewers = {\n            toggleLineNumbers: new SemanticCommand(),\n            toggleMatchBrackets: new SemanticCommand(),\n            toggleWordWrap: new SemanticCommand()\n        };\n    }\n}\n//# sourceMappingURL=view.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { IRankedMenu, MenuSvg, RankedMenu } from '@jupyterlab/ui-components';\nimport { ArrayExt } from '@lumino/algorithm';\nimport { MenuBar } from '@lumino/widgets';\nimport { EditMenu } from './edit';\nimport { FileMenu } from './file';\nimport { HelpMenu } from './help';\nimport { KernelMenu } from './kernel';\nimport { RunMenu } from './run';\nimport { SettingsMenu } from './settings';\nimport { TabsMenu } from './tabs';\nimport { ViewMenu } from './view';\n/**\n * The main menu class.  It is intended to be used as a singleton.\n */\nexport class MainMenu extends MenuBar {\n    /**\n     * Construct the main menu bar.\n     */\n    constructor(commands) {\n        let options = { forceItemsPosition: { forceX: false, forceY: true } };\n        super(options);\n        this._items = [];\n        this._commands = commands;\n    }\n    /**\n     * The application \"Edit\" menu.\n     */\n    get editMenu() {\n        if (!this._editMenu) {\n            this._editMenu = new EditMenu({\n                commands: this._commands,\n                rank: 2,\n                renderer: MenuSvg.defaultRenderer\n            });\n        }\n        return this._editMenu;\n    }\n    /**\n     * The application \"File\" menu.\n     */\n    get fileMenu() {\n        if (!this._fileMenu) {\n            this._fileMenu = new FileMenu({\n                commands: this._commands,\n                rank: 1,\n                renderer: MenuSvg.defaultRenderer\n            });\n        }\n        return this._fileMenu;\n    }\n    /**\n     * The application \"Help\" menu.\n     */\n    get helpMenu() {\n        if (!this._helpMenu) {\n            this._helpMenu = new HelpMenu({\n                commands: this._commands,\n                rank: 1000,\n                renderer: MenuSvg.defaultRenderer\n            });\n        }\n        return this._helpMenu;\n    }\n    /**\n     * The application \"Kernel\" menu.\n     */\n    get kernelMenu() {\n        if (!this._kernelMenu) {\n            this._kernelMenu = new KernelMenu({\n                commands: this._commands,\n                rank: 5,\n                renderer: MenuSvg.defaultRenderer\n            });\n        }\n        return this._kernelMenu;\n    }\n    /**\n     * The application \"Run\" menu.\n     */\n    get runMenu() {\n        if (!this._runMenu) {\n            this._runMenu = new RunMenu({\n                commands: this._commands,\n                rank: 4,\n                renderer: MenuSvg.defaultRenderer\n            });\n        }\n        return this._runMenu;\n    }\n    /**\n     * The application \"Settings\" menu.\n     */\n    get settingsMenu() {\n        if (!this._settingsMenu) {\n            this._settingsMenu = new SettingsMenu({\n                commands: this._commands,\n                rank: 999,\n                renderer: MenuSvg.defaultRenderer\n            });\n        }\n        return this._settingsMenu;\n    }\n    /**\n     * The application \"View\" menu.\n     */\n    get viewMenu() {\n        if (!this._viewMenu) {\n            this._viewMenu = new ViewMenu({\n                commands: this._commands,\n                rank: 3,\n                renderer: MenuSvg.defaultRenderer\n            });\n        }\n        return this._viewMenu;\n    }\n    /**\n     * The application \"Tabs\" menu.\n     */\n    get tabsMenu() {\n        if (!this._tabsMenu) {\n            this._tabsMenu = new TabsMenu({\n                commands: this._commands,\n                rank: 500,\n                renderer: MenuSvg.defaultRenderer\n            });\n        }\n        return this._tabsMenu;\n    }\n    /**\n     * Add a new menu to the main menu bar.\n     */\n    addMenu(menu, update = true, options = {}) {\n        if (ArrayExt.firstIndexOf(this.menus, menu) > -1) {\n            return;\n        }\n        // override default renderer with svg-supporting renderer\n        MenuSvg.overrideDefaultRenderer(menu);\n        const rank = 'rank' in options\n            ? options.rank\n            : 'rank' in menu\n                ? menu.rank\n                : IRankedMenu.DEFAULT_RANK;\n        const rankItem = { menu, rank };\n        const index = ArrayExt.upperBound(this._items, rankItem, Private.itemCmp);\n        // Upon disposal, remove the menu and its rank reference.\n        menu.disposed.connect(this._onMenuDisposed, this);\n        ArrayExt.insert(this._items, index, rankItem);\n        /**\n         * Create a new menu.\n         */\n        this.insertMenu(index, menu);\n        // Link the menu to the API - backward compatibility when switching to menu description in settings\n        switch (menu.id) {\n            case 'jp-mainmenu-file':\n                if (!this._fileMenu && menu instanceof FileMenu) {\n                    this._fileMenu = menu;\n                }\n                break;\n            case 'jp-mainmenu-edit':\n                if (!this._editMenu && menu instanceof EditMenu) {\n                    this._editMenu = menu;\n                }\n                break;\n            case 'jp-mainmenu-view':\n                if (!this._viewMenu && menu instanceof ViewMenu) {\n                    this._viewMenu = menu;\n                }\n                break;\n            case 'jp-mainmenu-run':\n                if (!this._runMenu && menu instanceof RunMenu) {\n                    this._runMenu = menu;\n                }\n                break;\n            case 'jp-mainmenu-kernel':\n                if (!this._kernelMenu && menu instanceof KernelMenu) {\n                    this._kernelMenu = menu;\n                }\n                break;\n            case 'jp-mainmenu-tabs':\n                if (!this._tabsMenu && menu instanceof TabsMenu) {\n                    this._tabsMenu = menu;\n                }\n                break;\n            case 'jp-mainmenu-settings':\n                if (!this._settingsMenu && menu instanceof SettingsMenu) {\n                    this._settingsMenu = menu;\n                }\n                break;\n            case 'jp-mainmenu-help':\n                if (!this._helpMenu && menu instanceof HelpMenu) {\n                    this._helpMenu = menu;\n                }\n                break;\n        }\n    }\n    /**\n     * Dispose of the resources held by the menu bar.\n     */\n    dispose() {\n        var _a, _b, _c, _d, _e, _f, _g, _h;\n        (_a = this._editMenu) === null || _a === void 0 ? void 0 : _a.dispose();\n        (_b = this._fileMenu) === null || _b === void 0 ? void 0 : _b.dispose();\n        (_c = this._helpMenu) === null || _c === void 0 ? void 0 : _c.dispose();\n        (_d = this._kernelMenu) === null || _d === void 0 ? void 0 : _d.dispose();\n        (_e = this._runMenu) === null || _e === void 0 ? void 0 : _e.dispose();\n        (_f = this._settingsMenu) === null || _f === void 0 ? void 0 : _f.dispose();\n        (_g = this._viewMenu) === null || _g === void 0 ? void 0 : _g.dispose();\n        (_h = this._tabsMenu) === null || _h === void 0 ? void 0 : _h.dispose();\n        super.dispose();\n    }\n    /**\n     * Generate the menu.\n     *\n     * @param commands The command registry\n     * @param options The main menu options.\n     * @param trans - The application language translator.\n     */\n    static generateMenu(commands, options, trans) {\n        let menu;\n        const { id, label, rank } = options;\n        switch (id) {\n            case 'jp-mainmenu-file':\n                menu = new FileMenu({\n                    commands,\n                    rank,\n                    renderer: MenuSvg.defaultRenderer\n                });\n                break;\n            case 'jp-mainmenu-edit':\n                menu = new EditMenu({\n                    commands,\n                    rank,\n                    renderer: MenuSvg.defaultRenderer\n                });\n                break;\n            case 'jp-mainmenu-view':\n                menu = new ViewMenu({\n                    commands,\n                    rank,\n                    renderer: MenuSvg.defaultRenderer\n                });\n                break;\n            case 'jp-mainmenu-run':\n                menu = new RunMenu({\n                    commands,\n                    rank,\n                    renderer: MenuSvg.defaultRenderer\n                });\n                break;\n            case 'jp-mainmenu-kernel':\n                menu = new KernelMenu({\n                    commands,\n                    rank,\n                    renderer: MenuSvg.defaultRenderer\n                });\n                break;\n            case 'jp-mainmenu-tabs':\n                menu = new TabsMenu({\n                    commands,\n                    rank,\n                    renderer: MenuSvg.defaultRenderer\n                });\n                break;\n            case 'jp-mainmenu-settings':\n                menu = new SettingsMenu({\n                    commands,\n                    rank,\n                    renderer: MenuSvg.defaultRenderer\n                });\n                break;\n            case 'jp-mainmenu-help':\n                menu = new HelpMenu({\n                    commands,\n                    rank,\n                    renderer: MenuSvg.defaultRenderer\n                });\n                break;\n            default:\n                menu = new RankedMenu({\n                    commands,\n                    rank,\n                    renderer: MenuSvg.defaultRenderer\n                });\n        }\n        if (label) {\n            menu.title.label = trans._p('menu', label);\n        }\n        return menu;\n    }\n    /**\n     * Handle the disposal of a menu.\n     */\n    _onMenuDisposed(menu) {\n        this.removeMenu(menu);\n        const index = ArrayExt.findFirstIndex(this._items, item => item.menu === menu);\n        if (index !== -1) {\n            ArrayExt.removeAt(this._items, index);\n        }\n    }\n}\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * A comparator function for menu rank items.\n     */\n    function itemCmp(first, second) {\n        return first.rank - second.rank;\n    }\n    Private.itemCmp = itemCmp;\n})(Private || (Private = {}));\n//# sourceMappingURL=mainmenu.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The main menu token.\n */\nexport const IMainMenu = new Token('@jupyterlab/mainmenu:IMainMenu', `A service for the main menu bar for the application.\n  Use this if you want to add your own menu items or provide implementations for standardized menu items for specific activities.`);\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module mainmenu\n */\nexport * from './mainmenu';\nexport * from './edit';\nexport * from './file';\nexport * from './help';\nexport * from './kernel';\nexport * from './run';\nexport * from './settings';\nexport * from './view';\nexport * from './tabs';\nexport * from './tokens';\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module markdownviewer-extension\n */\nimport { ILayoutRestorer } from '@jupyterlab/application';\nimport { ISanitizer, WidgetTracker } from '@jupyterlab/apputils';\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { IMarkdownViewerTracker, MarkdownViewer, MarkdownViewerFactory, MarkdownViewerTableOfContentsFactory } from '@jupyterlab/markdownviewer';\nimport { IRenderMimeRegistry, markdownRendererFactory } from '@jupyterlab/rendermime';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITableOfContentsRegistry } from '@jupyterlab/toc';\nimport { ITranslator } from '@jupyterlab/translation';\n/**\n * The command IDs used by the markdownviewer plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.markdownPreview = 'markdownviewer:open';\n    CommandIDs.markdownEditor = 'markdownviewer:edit';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The name of the factory that creates markdown viewer widgets.\n */\nconst FACTORY = 'Markdown Preview';\n/**\n * The markdown viewer plugin.\n */\nconst plugin = {\n    activate,\n    id: '@jupyterlab/markdownviewer-extension:plugin',\n    description: 'Adds markdown file viewer and provides its tracker.',\n    provides: IMarkdownViewerTracker,\n    requires: [IRenderMimeRegistry, ITranslator],\n    optional: [\n        ILayoutRestorer,\n        ISettingRegistry,\n        ITableOfContentsRegistry,\n        ISanitizer\n    ],\n    autoStart: true\n};\n/**\n * Activate the markdown viewer plugin.\n */\nfunction activate(app, rendermime, translator, restorer, settingRegistry, tocRegistry, sanitizer) {\n    const trans = translator.load('jupyterlab');\n    const { commands, docRegistry } = app;\n    // Add the markdown renderer factory.\n    rendermime.addFactory(markdownRendererFactory);\n    const namespace = 'markdownviewer-widget';\n    const tracker = new WidgetTracker({\n        namespace\n    });\n    let config = {\n        ...MarkdownViewer.defaultConfig\n    };\n    /**\n     * Update the settings of a widget.\n     */\n    function updateWidget(widget) {\n        Object.keys(config).forEach((k) => {\n            var _a;\n            widget.setOption(k, (_a = config[k]) !== null && _a !== void 0 ? _a : null);\n        });\n    }\n    if (settingRegistry) {\n        const updateSettings = (settings) => {\n            config = settings.composite;\n            tracker.forEach(widget => {\n                updateWidget(widget.content);\n            });\n        };\n        // Fetch the initial state of the settings.\n        settingRegistry\n            .load(plugin.id)\n            .then((settings) => {\n            settings.changed.connect(() => {\n                updateSettings(settings);\n            });\n            updateSettings(settings);\n        })\n            .catch((reason) => {\n            console.error(reason.message);\n        });\n    }\n    // Register the MarkdownViewer factory.\n    const factory = new MarkdownViewerFactory({\n        rendermime,\n        name: FACTORY,\n        label: trans.__('Markdown Preview'),\n        primaryFileType: docRegistry.getFileType('markdown'),\n        fileTypes: ['markdown'],\n        defaultRendered: ['markdown']\n    });\n    factory.widgetCreated.connect((sender, widget) => {\n        // Notify the widget tracker if restore data needs to update.\n        widget.context.pathChanged.connect(() => {\n            void tracker.save(widget);\n        });\n        // Handle the settings of new widgets.\n        updateWidget(widget.content);\n        void tracker.add(widget);\n    });\n    docRegistry.addWidgetFactory(factory);\n    // Handle state restoration.\n    if (restorer) {\n        void restorer.restore(tracker, {\n            command: 'docmanager:open',\n            args: widget => ({ path: widget.context.path, factory: FACTORY }),\n            name: widget => widget.context.path\n        });\n    }\n    commands.addCommand(CommandIDs.markdownPreview, {\n        label: trans.__('Markdown Preview'),\n        execute: args => {\n            const path = args['path'];\n            if (typeof path !== 'string') {\n                return;\n            }\n            return commands.execute('docmanager:open', {\n                path,\n                factory: FACTORY,\n                options: args['options']\n            });\n        }\n    });\n    commands.addCommand(CommandIDs.markdownEditor, {\n        execute: () => {\n            const widget = tracker.currentWidget;\n            if (!widget) {\n                return;\n            }\n            const path = widget.context.path;\n            return commands.execute('docmanager:open', {\n                path,\n                factory: 'Editor',\n                options: {\n                    mode: 'split-right'\n                }\n            });\n        },\n        isVisible: () => {\n            const widget = tracker.currentWidget;\n            return ((widget && PathExt.extname(widget.context.path) === '.md') || false);\n        },\n        label: trans.__('Show Markdown Editor')\n    });\n    if (tocRegistry) {\n        tocRegistry.add(new MarkdownViewerTableOfContentsFactory(tracker, rendermime.markdownParser, sanitizer !== null && sanitizer !== void 0 ? sanitizer : rendermime.sanitizer));\n    }\n    return tracker;\n}\n/**\n * Export the plugin as default.\n */\nexport default plugin;\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/toc/style/index.js';\n\nimport './base.css';\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/toc/style/index.js';\nimport '@jupyterlab/markdownviewer/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { TableOfContentsFactory, TableOfContentsModel, TableOfContentsUtils } from '@jupyterlab/toc';\n/**\n * Table of content model for Markdown viewer files.\n */\nexport class MarkdownViewerTableOfContentsModel extends TableOfContentsModel {\n    /**\n     * Constructor\n     *\n     * @param widget The widget to search in\n     * @param parser Markdown parser\n     * @param configuration Default model configuration\n     */\n    constructor(widget, parser, configuration) {\n        super(widget, configuration);\n        this.parser = parser;\n    }\n    /**\n     * Type of document supported by the model.\n     *\n     * #### Notes\n     * A `data-document-type` attribute with this value will be set\n     * on the tree view `.jp-TableOfContents-content[data-document-type=\"...\"]`\n     */\n    get documentType() {\n        return 'markdown-viewer';\n    }\n    /**\n     * Whether the model gets updated even if the table of contents panel\n     * is hidden or not.\n     */\n    get isAlwaysActive() {\n        return true;\n    }\n    /**\n     * List of configuration options supported by the model.\n     */\n    get supportedOptions() {\n        return ['maximalDepth', 'numberingH1', 'numberHeaders'];\n    }\n    /**\n     * Produce the headings for a document.\n     *\n     * @returns The list of new headings or `null` if nothing needs to be updated.\n     */\n    getHeadings() {\n        const content = this.widget.context.model.toString();\n        const headings = TableOfContentsUtils.filterHeadings(TableOfContentsUtils.Markdown.getHeadings(content), {\n            ...this.configuration,\n            // Force base number to be equal to 1\n            baseNumbering: 1\n        });\n        return Promise.resolve(headings);\n    }\n}\n/**\n * Table of content model factory for Markdown viewer files.\n */\nexport class MarkdownViewerTableOfContentsFactory extends TableOfContentsFactory {\n    /**\n     * Constructor\n     *\n     * @param tracker Widget tracker\n     * @param parser Markdown parser\n     */\n    constructor(tracker, parser, sanitizer) {\n        super(tracker);\n        this.parser = parser;\n        this.sanitizer = sanitizer;\n    }\n    /**\n     * Create a new table of contents model for the widget\n     *\n     * @param widget - widget\n     * @param configuration - Table of contents configuration\n     * @returns The table of contents model\n     */\n    _createNew(widget, configuration) {\n        const model = new MarkdownViewerTableOfContentsModel(widget, this.parser, configuration);\n        let headingToElement = new WeakMap();\n        const onActiveHeadingChanged = (model, heading) => {\n            if (heading) {\n                const el = headingToElement.get(heading);\n                if (el) {\n                    const widgetBox = widget.content.node.getBoundingClientRect();\n                    const elementBox = el.getBoundingClientRect();\n                    if (elementBox.top > widgetBox.bottom ||\n                        elementBox.bottom < widgetBox.top) {\n                        el.scrollIntoView({ block: 'center' });\n                    }\n                }\n                else {\n                    console.warn('Heading element not found for heading', heading, 'in widget', widget);\n                }\n            }\n        };\n        const onHeadingsChanged = () => {\n            if (!this.parser) {\n                return;\n            }\n            // Clear all numbering items\n            TableOfContentsUtils.clearNumbering(widget.content.node);\n            // Create a new mapping\n            headingToElement = new WeakMap();\n            model.headings.forEach(async (heading) => {\n                var _a;\n                const elementId = await TableOfContentsUtils.Markdown.getHeadingId(this.parser, heading.raw, heading.level, this.sanitizer);\n                if (!elementId) {\n                    return;\n                }\n                const selector = `h${heading.level}[id=\"${CSS.escape(elementId)}\"]`;\n                headingToElement.set(heading, TableOfContentsUtils.addPrefix(widget.content.node, selector, (_a = heading.prefix) !== null && _a !== void 0 ? _a : ''));\n            });\n        };\n        void widget.content.ready.then(() => {\n            onHeadingsChanged();\n            widget.content.rendered.connect(onHeadingsChanged);\n            model.activeHeadingChanged.connect(onActiveHeadingChanged);\n            model.headingsChanged.connect(onHeadingsChanged);\n            widget.disposed.connect(() => {\n                widget.content.rendered.disconnect(onHeadingsChanged);\n                model.activeHeadingChanged.disconnect(onActiveHeadingChanged);\n                model.headingsChanged.disconnect(onHeadingsChanged);\n            });\n        });\n        return model;\n    }\n}\n//# sourceMappingURL=toc.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The markdownviewer tracker token.\n */\nexport const IMarkdownViewerTracker = new Token('@jupyterlab/markdownviewer:IMarkdownViewerTracker', `A widget tracker for markdown\n  document viewers. Use this if you want to iterate over and interact with rendered markdown documents.`);\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { showErrorMessage } from '@jupyterlab/apputils';\nimport { ActivityMonitor } from '@jupyterlab/coreutils';\nimport { ABCWidgetFactory, DocumentWidget } from '@jupyterlab/docregistry';\nimport { MimeModel } from '@jupyterlab/rendermime';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\nimport { StackedLayout, Widget } from '@lumino/widgets';\n/**\n * The class name added to a markdown viewer.\n */\nconst MARKDOWNVIEWER_CLASS = 'jp-MarkdownViewer';\n/**\n * The markdown MIME type.\n */\nconst MIMETYPE = 'text/markdown';\n/**\n * A widget for markdown documents.\n */\nexport class MarkdownViewer extends Widget {\n    /**\n     * Construct a new markdown viewer widget.\n     */\n    constructor(options) {\n        super();\n        this._config = { ...MarkdownViewer.defaultConfig };\n        this._fragment = '';\n        this._ready = new PromiseDelegate();\n        this._isRendering = false;\n        this._renderRequested = false;\n        this._rendered = new Signal(this);\n        this.context = options.context;\n        this.translator = options.translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        this.renderer = options.renderer;\n        this.node.tabIndex = 0;\n        this.addClass(MARKDOWNVIEWER_CLASS);\n        const layout = (this.layout = new StackedLayout());\n        layout.addWidget(this.renderer);\n        void this.context.ready.then(async () => {\n            await this._render();\n            // Throttle the rendering rate of the widget.\n            this._monitor = new ActivityMonitor({\n                signal: this.context.model.contentChanged,\n                timeout: this._config.renderTimeout\n            });\n            this._monitor.activityStopped.connect(this.update, this);\n            this._ready.resolve(undefined);\n        });\n    }\n    /**\n     * A promise that resolves when the markdown viewer is ready.\n     */\n    get ready() {\n        return this._ready.promise;\n    }\n    /**\n     * Signal emitted when the content has been rendered.\n     */\n    get rendered() {\n        return this._rendered;\n    }\n    /**\n     * Set URI fragment identifier.\n     */\n    setFragment(fragment) {\n        this._fragment = fragment;\n        this.update();\n    }\n    /**\n     * Set a config option for the markdown viewer.\n     */\n    setOption(option, value) {\n        if (this._config[option] === value) {\n            return;\n        }\n        this._config[option] = value;\n        const { style } = this.renderer.node;\n        switch (option) {\n            case 'fontFamily':\n                style.setProperty('font-family', value);\n                break;\n            case 'fontSize':\n                style.setProperty('font-size', value ? value + 'px' : null);\n                break;\n            case 'hideFrontMatter':\n                this.update();\n                break;\n            case 'lineHeight':\n                style.setProperty('line-height', value ? value.toString() : null);\n                break;\n            case 'lineWidth': {\n                const padding = value ? `calc(50% - ${value / 2}ch)` : null;\n                style.setProperty('padding-left', padding);\n                style.setProperty('padding-right', padding);\n                break;\n            }\n            case 'renderTimeout':\n                if (this._monitor) {\n                    this._monitor.timeout = value;\n                }\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        if (this._monitor) {\n            this._monitor.dispose();\n        }\n        this._monitor = null;\n        super.dispose();\n    }\n    /**\n     * Handle an `update-request` message to the widget.\n     */\n    onUpdateRequest(msg) {\n        if (this.context.isReady && !this.isDisposed) {\n            void this._render();\n            this._fragment = '';\n        }\n    }\n    /**\n     * Handle `'activate-request'` messages.\n     */\n    onActivateRequest(msg) {\n        this.node.focus();\n    }\n    /**\n     * Render the mime content.\n     */\n    async _render() {\n        if (this.isDisposed) {\n            return;\n        }\n        // Since rendering is async, we note render requests that happen while we\n        // actually are rendering for a future rendering.\n        if (this._isRendering) {\n            this._renderRequested = true;\n            return;\n        }\n        // Set up for this rendering pass.\n        this._renderRequested = false;\n        const { context } = this;\n        const { model } = context;\n        const source = model.toString();\n        const data = {};\n        // If `hideFrontMatter`is true remove front matter.\n        data[MIMETYPE] = this._config.hideFrontMatter\n            ? Private.removeFrontMatter(source)\n            : source;\n        const mimeModel = new MimeModel({\n            data,\n            metadata: { fragment: this._fragment }\n        });\n        try {\n            // Do the rendering asynchronously.\n            this._isRendering = true;\n            await this.renderer.renderModel(mimeModel);\n            this._isRendering = false;\n            // If there is an outstanding request to render, go ahead and render\n            if (this._renderRequested) {\n                return this._render();\n            }\n            else {\n                this._rendered.emit();\n            }\n        }\n        catch (reason) {\n            // Dispose the document if rendering fails.\n            requestAnimationFrame(() => {\n                this.dispose();\n            });\n            void showErrorMessage(this._trans.__('Renderer Failure: %1', context.path), reason);\n        }\n    }\n}\n/**\n * The namespace for MarkdownViewer class statics.\n */\n(function (MarkdownViewer) {\n    /**\n     * The default configuration options for an editor.\n     */\n    MarkdownViewer.defaultConfig = {\n        fontFamily: null,\n        fontSize: null,\n        lineHeight: null,\n        lineWidth: null,\n        hideFrontMatter: true,\n        renderTimeout: 1000\n    };\n})(MarkdownViewer || (MarkdownViewer = {}));\n/**\n * A document widget for markdown content.\n */\nexport class MarkdownDocument extends DocumentWidget {\n    setFragment(fragment) {\n        this.content.setFragment(fragment);\n    }\n}\n/**\n * A widget factory for markdown viewers.\n */\nexport class MarkdownViewerFactory extends ABCWidgetFactory {\n    /**\n     * Construct a new markdown viewer widget factory.\n     */\n    constructor(options) {\n        super(Private.createRegistryOptions(options));\n        this._fileType = options.primaryFileType;\n        this._rendermime = options.rendermime;\n    }\n    /**\n     * Create a new widget given a context.\n     */\n    createNewWidget(context) {\n        var _a, _b, _c, _d, _e;\n        const rendermime = this._rendermime.clone({\n            resolver: context.urlResolver\n        });\n        const renderer = rendermime.createRenderer(MIMETYPE);\n        const content = new MarkdownViewer({ context, renderer });\n        content.title.icon = (_a = this._fileType) === null || _a === void 0 ? void 0 : _a.icon;\n        content.title.iconClass = (_c = (_b = this._fileType) === null || _b === void 0 ? void 0 : _b.iconClass) !== null && _c !== void 0 ? _c : '';\n        content.title.iconLabel = (_e = (_d = this._fileType) === null || _d === void 0 ? void 0 : _d.iconLabel) !== null && _e !== void 0 ? _e : '';\n        content.title.caption = this.label;\n        const widget = new MarkdownDocument({ content, context });\n        return widget;\n    }\n}\n/**\n * A namespace for markdown viewer widget private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Create the document registry options.\n     */\n    function createRegistryOptions(options) {\n        return {\n            ...options,\n            readOnly: true\n        };\n    }\n    Private.createRegistryOptions = createRegistryOptions;\n    /**\n     * Remove YAML front matter from source.\n     */\n    function removeFrontMatter(source) {\n        const re = /^---\\n[^]*?\\n(---|...)\\n/;\n        const match = source.match(re);\n        if (!match) {\n            return source;\n        }\n        const { length } = match[0];\n        return source.slice(length);\n    }\n    Private.removeFrontMatter = removeFrontMatter;\n})(Private || (Private = {}));\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module markdownviewer\n */\nexport * from './toc';\nexport * from './tokens';\nexport * from './widget';\n//# sourceMappingURL=index.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module markedparser-extension\n */\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { LruCache } from '@jupyterlab/coreutils';\nimport { IEditorLanguageRegistry } from '@jupyterlab/codemirror';\nimport { IMarkdownParser } from '@jupyterlab/rendermime';\nimport { IMermaidMarkdown } from '@jupyterlab/mermaid';\n// highlight cache key separator\nconst FENCE = '```~~~';\n/**\n * Create a markdown parser\n *\n * @param languages Editor languages\n * @returns Markdown parser\n */\nexport function createMarkdownParser(languages, options) {\n    return {\n        render: (content) => {\n            return Private.render(content, languages, options);\n        }\n    };\n}\n/**\n * The markdown parser plugin.\n */\nconst plugin = {\n    id: '@jupyterlab/markedparser-extension:plugin',\n    description: 'Provides the Markdown parser.',\n    autoStart: true,\n    provides: IMarkdownParser,\n    requires: [IEditorLanguageRegistry],\n    optional: [IMermaidMarkdown],\n    activate: (app, languages, mermaidMarkdown) => {\n        return createMarkdownParser(languages, {\n            blocks: mermaidMarkdown ? [mermaidMarkdown] : []\n        });\n    }\n};\n/**\n * Export the plugin as default.\n */\nexport default plugin;\n/**\n * A namespace for private marked functions\n */\nvar Private;\n(function (Private) {\n    let _initializing = null;\n    let _marked = null;\n    let _blocks = [];\n    let _languages = null;\n    let _markedOptions = {};\n    let _highlights = new LruCache();\n    async function render(content, languages, options) {\n        _languages = languages;\n        if (!_marked) {\n            _marked = await initializeMarked(options);\n        }\n        return _marked(content, _markedOptions);\n    }\n    Private.render = render;\n    /**\n     * Load marked lazily and exactly once.\n     */\n    async function initializeMarked(options) {\n        if (_marked) {\n            return _marked;\n        }\n        if (_initializing) {\n            return await _initializing.promise;\n        }\n        // order blocks by `rank`\n        _blocks = (options === null || options === void 0 ? void 0 : options.blocks) || [];\n        _blocks = _blocks.sort((a, b) => { var _a, _b; return ((_a = a.rank) !== null && _a !== void 0 ? _a : Infinity) - ((_b = b.rank) !== null && _b !== void 0 ? _b : Infinity); });\n        _initializing = new PromiseDelegate();\n        // load marked lazily, and exactly once\n        const [{ marked, Renderer }, plugins] = await Promise.all([\n            import('marked'),\n            loadMarkedPlugins()\n        ]);\n        // use load marked plugins\n        for (const plugin of plugins) {\n            marked.use(plugin);\n        }\n        // finish marked configuration\n        _markedOptions = {\n            // use the explicit async paradigm for `walkTokens`\n            async: true,\n            // enable all built-in GitHub-flavored Markdown opinions\n            gfm: true,\n            // asynchronously prepare for any special tokens, like highlighting and mermaid\n            walkTokens,\n            // use custom renderer\n            renderer: makeRenderer(Renderer)\n        };\n        // complete initialization\n        _marked = marked;\n        _initializing.resolve(_marked);\n        return _marked;\n    }\n    Private.initializeMarked = initializeMarked;\n    /**\n     * Load and use marked plugins.\n     *\n     * As of writing, both of these features would work without plugins, but emit\n     * deprecation warnings.\n     */\n    async function loadMarkedPlugins() {\n        // use loaded marked plugins\n        return Promise.all([\n            (async () => (await import('marked-gfm-heading-id')).gfmHeadingId())(),\n            (async () => (await import('marked-mangle')).mangle())()\n        ]);\n    }\n    /**\n     * Build a custom marked renderer.\n     */\n    function makeRenderer(Renderer_) {\n        const renderer = new Renderer_();\n        const originalCode = renderer.code;\n        renderer.code = ({ text, lang, escaped }) => {\n            // handle block renderers\n            for (const block of _blocks) {\n                if (lang && block.languages.includes(lang)) {\n                    const rendered = block.render(text);\n                    if (rendered != null) {\n                        return rendered;\n                    }\n                }\n            }\n            // handle known highlighting\n            const key = `${lang}${FENCE}${text}${FENCE}`;\n            const highlight = _highlights.get(key);\n            if (highlight != null) {\n                return highlight;\n            }\n            // fall back to calling with the renderer as `this`\n            return originalCode.call(renderer, { text, lang, escaped });\n        };\n        return renderer;\n    }\n    /**\n     * Apply and cache syntax highlighting for code blocks.\n     */\n    async function highlight(token) {\n        const { lang, text } = token;\n        if (!lang || !_languages) {\n            // no language(s), no highlight\n            return;\n        }\n        const key = `${lang}${FENCE}${text}${FENCE}`;\n        if (_highlights.get(key)) {\n            // already cached, don't make another DOM element\n            return;\n        }\n        const el = document.createElement('div');\n        try {\n            await _languages.highlight(text, _languages.findBest(lang), el);\n            const html = `<pre><code class=\"language-${lang}\">${el.innerHTML}</code></pre>`;\n            _highlights.set(key, html);\n        }\n        catch (err) {\n            console.error(`Failed to highlight ${lang} code`, err);\n        }\n        finally {\n            el.remove();\n        }\n    }\n    /**\n     * After parsing, lazily load and render or highlight code blocks\n     */\n    async function walkTokens(token) {\n        switch (token.type) {\n            case 'code':\n                if (token.lang) {\n                    for (const block of _blocks) {\n                        if (block.languages.includes(token.lang)) {\n                            await block.walk(token.text);\n                            return;\n                        }\n                    }\n                }\n                await highlight(token);\n        }\n    }\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/codemirror/style/index.js';\nimport '@jupyterlab/mermaid/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module mathjax-extension\n */\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { ILatexTypesetter } from '@jupyterlab/rendermime';\nvar CommandIDs;\n(function (CommandIDs) {\n    /**\n     * Copy raw LaTeX to clipboard.\n     */\n    CommandIDs.copy = 'mathjax:clipboard';\n    /**\n     * Scale MathJax elements.\n     */\n    CommandIDs.scale = 'mathjax:scale';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The MathJax Typesetter.\n */\nexport class MathJaxTypesetter {\n    constructor() {\n        this._initialized = false;\n    }\n    async _ensureInitialized() {\n        if (!this._initialized) {\n            this._mathDocument = await Private.ensureMathDocument();\n            this._initialized = true;\n        }\n    }\n    /**\n     * Get an instance of the MathDocument object.\n     */\n    async mathDocument() {\n        await this._ensureInitialized();\n        return this._mathDocument;\n    }\n    /**\n     * Typeset the math in a node.\n     */\n    async typeset(node) {\n        try {\n            await this._ensureInitialized();\n        }\n        catch (e) {\n            console.error(e);\n            return;\n        }\n        this._mathDocument.options.elements = [node];\n        this._mathDocument.clear().render();\n        delete this._mathDocument.options.elements;\n    }\n}\n/**\n * The MathJax extension.\n */\nconst mathJaxPlugin = {\n    id: '@jupyterlab/mathjax-extension:plugin',\n    description: 'Provides the LaTeX mathematical expression interpreter.',\n    provides: ILatexTypesetter,\n    activate: (app) => {\n        const typesetter = new MathJaxTypesetter();\n        app.commands.addCommand(CommandIDs.copy, {\n            execute: async () => {\n                const md = await typesetter.mathDocument();\n                const oJax = md.outputJax;\n                await navigator.clipboard.writeText(oJax.math.math);\n            },\n            label: 'MathJax Copy Latex'\n        });\n        app.commands.addCommand(CommandIDs.scale, {\n            execute: async (args) => {\n                const md = await typesetter.mathDocument();\n                const scale = args['scale'] || 1.0;\n                md.outputJax.options.scale = scale;\n                md.rerender();\n            },\n            label: args => 'Mathjax Scale ' + (args['scale'] ? `x${args['scale']}` : 'Reset')\n        });\n        return typesetter;\n    },\n    autoStart: true\n};\nexport default mathJaxPlugin;\n/**\n * A namespace for module-private functionality.\n */\nvar Private;\n(function (Private) {\n    let _loading = null;\n    async function ensureMathDocument() {\n        if (!_loading) {\n            _loading = new PromiseDelegate();\n            void import('mathjax-full/js/input/tex/require/RequireConfiguration');\n            const [{ mathjax }, { CHTML }, { TeX }, { TeXFont }, { AllPackages }, { SafeHandler }, { HTMLHandler }, { browserAdaptor }, { AssistiveMmlHandler }] = await Promise.all([\n                import('mathjax-full/js/mathjax'),\n                import('mathjax-full/js/output/chtml'),\n                import('mathjax-full/js/input/tex'),\n                import('mathjax-full/js/output/chtml/fonts/tex'),\n                import('mathjax-full/js/input/tex/AllPackages'),\n                import('mathjax-full/js/ui/safe/SafeHandler'),\n                import('mathjax-full/js/handlers/html/HTMLHandler'),\n                import('mathjax-full/js/adaptors/browserAdaptor'),\n                import('mathjax-full/js/a11y/assistive-mml')\n            ]);\n            mathjax.handlers.register(AssistiveMmlHandler(SafeHandler(new HTMLHandler(browserAdaptor()))));\n            class EmptyFont extends TeXFont {\n            }\n            EmptyFont.defaultFonts = {};\n            const chtml = new CHTML({\n                // Override dynamically generated fonts in favor of our font css\n                font: new EmptyFont()\n            });\n            const tex = new TeX({\n                packages: AllPackages.concat('require'),\n                inlineMath: [\n                    ['$', '$'],\n                    ['\\\\(', '\\\\)']\n                ],\n                displayMath: [\n                    ['$$', '$$'],\n                    ['\\\\[', '\\\\]']\n                ],\n                processEscapes: true,\n                processEnvironments: true\n            });\n            const mathDocument = mathjax.document(window.document, {\n                InputJax: tex,\n                OutputJax: chtml\n            });\n            _loading.resolve(mathDocument);\n        }\n        return _loading.promise;\n    }\n    Private.ensureMathDocument = ensureMathDocument;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@jupyterlab/application/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { IThemeManager } from '@jupyterlab/apputils';\nimport { IMermaidManager, IMermaidMarkdown, MERMAID_CLASS, MERMAID_CODE_CLASS, MermaidManager, MermaidMarkdown, RenderedMermaid } from '@jupyterlab/mermaid';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\n/**\n * A namespace for mermaid text-based diagram commands.\n */\nexport var CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.copySource = 'mermaid:copy-source';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * A plugin for the core rendering/cachine of mermaid text-based diagrams\n */\nconst core = {\n    id: '@jupyterlab/mermaid-extension:core',\n    description: 'Provides the Mermaid manager.',\n    autoStart: true,\n    optional: [IThemeManager],\n    provides: IMermaidManager,\n    activate: (app, themes) => {\n        const manager = new MermaidManager({ themes });\n        RenderedMermaid.manager = manager;\n        return manager;\n    }\n};\n/**\n * A plugin for rendering mermaid text-based diagrams in markdown fenced code blocks\n */\nconst markdown = {\n    id: '@jupyterlab/mermaid-extension:markdown',\n    description: 'Provides the Mermaid markdown renderer.',\n    autoStart: true,\n    requires: [IMermaidManager],\n    provides: IMermaidMarkdown,\n    activate: (app, mermaid) => {\n        return new MermaidMarkdown({ mermaid });\n    }\n};\n/**\n * Contextual commands for mermaid text-based diagrams.\n */\nconst contextCommands = {\n    id: '@jupyterlab/mermaid-extension:context-commands',\n    description: 'Provides context menu commands for mermaid diagrams.',\n    autoStart: true,\n    requires: [IMermaidManager],\n    optional: [ITranslator],\n    activate: (app, mermaid, translator) => {\n        const isMermaid = (node) => node.classList.contains(MERMAID_CLASS);\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        app.commands.addCommand(CommandIDs.copySource, {\n            label: trans.__('Mermaid Copy Diagram Source'),\n            execute: async (args) => {\n                const node = app.contextMenuHitTest(isMermaid);\n                if (!node) {\n                    return;\n                }\n                const code = node.querySelector(`.${MERMAID_CODE_CLASS}`);\n                if (!code || !code.textContent) {\n                    return;\n                }\n                await navigator.clipboard.writeText(code.textContent);\n            }\n        });\n        const options = { selector: `.${MERMAID_CLASS}`, rank: 13 };\n        app.contextMenu.addItem({ command: CommandIDs.copySource, ...options });\n        app.contextMenu.addItem({ type: 'separator', ...options });\n    }\n};\nexport default [core, markdown, contextCommands];\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/mermaid/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n// documented upstream constants\nexport const MERMAID_MIME_TYPE = 'text/vnd.mermaid';\nexport const MERMAID_FILE_EXTENSIONS = ['.mmd', '.mermaid'];\n// layout sniffing\nexport const RE_DEFAULT_RENDERER = /\\bdefaultRenderer[\"']?\\s*:\\s*([\"']?)(\\b[^\"'\\s]+\\b)(\\1)/gm;\n// mermaid themes\nexport const MERMAID_DEFAULT_THEME = 'default';\nexport const MERMAID_DARK_THEME = 'dark';\n// DOM\nexport const MERMAID_CLASS = 'jp-RenderedMermaid';\nexport const MERMAID_CODE_CLASS = 'mermaid';\nexport const WARNING_CLASS = 'jp-mod-warning';\nexport const DETAILS_CLASS = 'jp-RenderedMermaid-Details';\nexport const SUMMARY_CLASS = 'jp-RenderedMermaid-Summary';\n/**\n * The exported token for a mermaid manager\n */\nexport const IMermaidManager = new Token('@jupyterlab/mermaid:IMermaidManager', `a manager for rendering mermaid text-based diagrams`);\n/**\n * The exported token for a mermaid manager\n */\nexport const IMermaidMarkdown = new Token('@jupyterlab/mermaid:IMermaidMarkdown', `a manager for rendering mermaid text-based diagrams in markdown fenced code blocks`);\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { LruCache } from '@jupyterlab/coreutils';\nimport { DETAILS_CLASS, MERMAID_CLASS, MERMAID_CODE_CLASS, MERMAID_DARK_THEME, MERMAID_DEFAULT_THEME, RE_DEFAULT_RENDERER, SUMMARY_CLASS, WARNING_CLASS } from './tokens';\n/**\n * A mermaid diagram manager with cache.\n */\nexport class MermaidManager {\n    constructor(options = {}) {\n        this._diagrams = new LruCache({ maxSize: options.maxCacheSize || null });\n        // handle reacting to themes\n        if (options.themes) {\n            Private.initThemes(options.themes || null);\n            options.themes.themeChanged.connect(this.initialize, this);\n        }\n    }\n    /**\n     * Post-process to ensure mermaid diagrams contain only valid SVG and XHTML.\n     */\n    static cleanMermaidSvg(svg) {\n        svg = svg.replace(Private.RE_VOID_ELEMENT, Private.replaceVoidElement);\n        return `${Private.SVG_XML_HEADER}${svg}`;\n    }\n    /**\n     * Handle (re)-initializing mermaid based on external values.\n     */\n    initialize() {\n        this._diagrams.clear();\n        Private.initMermaid();\n    }\n    /**\n     * Get the underlying, potentially un-initialized mermaid module.\n     */\n    async getMermaid() {\n        return await Private.ensureMermaid();\n    }\n    /**\n     * Get the version of the currently-loaded mermaid module\n     */\n    getMermaidVersion() {\n        return Private.version();\n    }\n    /**\n     * Get a pre-cached mermaid figure.\n     *\n     * This primarily exists for the needs of `marked`, which supports async node\n     * visitors, but not async rendering.\n     */\n    getCachedFigure(text) {\n        return this._diagrams.get(text);\n    }\n    /**\n     * Attempt a raw rendering of mermaid to an SVG string, extracting some metadata.\n     */\n    async renderSvg(text) {\n        const _mermaid = await this.getMermaid();\n        await Private.ensureRenderers(text);\n        const id = `jp-mermaid-${Private.nextMermaidId()}`;\n        // create temporary element into which to render\n        const el = document.createElement('div');\n        document.body.appendChild(el);\n        try {\n            let { svg } = await _mermaid.render(id, text, el);\n            svg = MermaidManager.cleanMermaidSvg(svg);\n            const parser = new DOMParser();\n            const doc = parser.parseFromString(svg, 'image/svg+xml');\n            const info = { text, svg };\n            const svgEl = doc.querySelector('svg');\n            const { maxWidth } = (svgEl === null || svgEl === void 0 ? void 0 : svgEl.style) || {};\n            info.width = maxWidth ? parseFloat(maxWidth) : null;\n            const firstTitle = doc.querySelector('title');\n            const firstDesc = doc.querySelector('desc');\n            if (firstTitle) {\n                info.accessibleTitle = firstTitle.textContent;\n            }\n            if (firstDesc) {\n                info.accessibleDescription = firstDesc.textContent;\n            }\n            return info;\n        }\n        finally {\n            el.remove();\n        }\n    }\n    /**\n     * Provide and cache a fully-rendered element, checking the cache first.\n     */\n    async renderFigure(text) {\n        // bail if already cached\n        let output = this._diagrams.get(text);\n        if (output != null) {\n            return output;\n        }\n        let className = MERMAID_CLASS;\n        let result = null;\n        // the element that will be returned\n        output = document.createElement('div');\n        output.className = className;\n        try {\n            const response = await this.renderSvg(text);\n            result = this.makeMermaidFigure(response);\n        }\n        catch (err) {\n            output.classList.add(WARNING_CLASS);\n            result = await this.makeMermaidError(text);\n        }\n        let version = this.getMermaidVersion();\n        if (version) {\n            result.dataset.jpMermaidVersion = version;\n        }\n        output.appendChild(result);\n        // update the cache for use when rendering synchronously\n        this._diagrams.set(text, output);\n        return output;\n    }\n    /**\n     * Provide a code block with the mermaid source.\n     */\n    makeMermaidCode(text) {\n        // append the source\n        const pre = document.createElement('pre');\n        const code = document.createElement('code');\n        code.innerText = text;\n        pre.appendChild(code);\n        code.className = MERMAID_CODE_CLASS;\n        code.textContent = text;\n        return pre;\n    }\n    /**\n     * Get the parser message element from a failed parse.\n     *\n     * This doesn't do much of anything if the text is successfully parsed.\n     */\n    async makeMermaidError(text) {\n        const _mermaid = await this.getMermaid();\n        let errorMessage = '';\n        try {\n            await _mermaid.parse(text);\n        }\n        catch (err) {\n            errorMessage = `${err}`;\n        }\n        const result = document.createElement('details');\n        result.className = DETAILS_CLASS;\n        const summary = document.createElement('summary');\n        summary.className = SUMMARY_CLASS;\n        summary.appendChild(this.makeMermaidCode(text));\n        result.appendChild(summary);\n        const warning = document.createElement('pre');\n        warning.innerText = errorMessage;\n        result.appendChild(warning);\n        return result;\n    }\n    /**\n     * Extract extra attributes to add to a generated figure.\n     */\n    makeMermaidFigure(info) {\n        const figure = document.createElement('figure');\n        const img = document.createElement('img');\n        figure.appendChild(img);\n        img.setAttribute('src', `data:image/svg+xml,${encodeURIComponent(info.svg)}`);\n        // add dimension information\n        if (info.width) {\n            img.width = info.width;\n        }\n        // add accessible alt title\n        if (info.accessibleTitle) {\n            img.setAttribute('alt', info.accessibleTitle);\n        }\n        figure.appendChild(this.makeMermaidCode(info.text));\n        // add accessible caption, with fallback to raw mermaid source\n        if (info.accessibleDescription) {\n            const caption = document.createElement('figcaption');\n            caption.className = 'sr-only';\n            caption.textContent = info.accessibleDescription;\n            figure.appendChild(caption);\n        }\n        return figure;\n    }\n}\n/**\n * A namespace for global, private mermaid data.\n */\nvar Private;\n(function (Private) {\n    let _themes = null;\n    let _mermaid = null;\n    let _mermaidElk = null;\n    let _loading = null;\n    let _loadingElk = null;\n    let _nextMermaidId = 0;\n    let _version = null;\n    /**\n     * Cache a reference to the theme manager.\n     */\n    function initThemes(themes) {\n        _themes = themes;\n    }\n    Private.initThemes = initThemes;\n    /**\n     * Get the version of mermaid used for rendering.\n     */\n    function version() {\n        return _version;\n    }\n    Private.version = version;\n    /**\n     * (Re-)initialize mermaid with lab-specific theme information\n     */\n    function initMermaid(mermaid = null) {\n        mermaid = _mermaid;\n        if (!mermaid) {\n            return false;\n        }\n        let theme = MERMAID_DEFAULT_THEME;\n        if (_themes) {\n            const jpTheme = _themes.theme;\n            theme =\n                jpTheme && _themes.isLight(jpTheme)\n                    ? MERMAID_DEFAULT_THEME\n                    : MERMAID_DARK_THEME;\n        }\n        const fontFamily = window\n            .getComputedStyle(document.body)\n            .getPropertyValue('--jp-ui-font-family');\n        mermaid.initialize({\n            theme,\n            fontFamily,\n            securityLevel: 'strict',\n            maxTextSize: 100000,\n            maxEdges: 100000,\n            startOnLoad: false\n        });\n        return true;\n    }\n    Private.initMermaid = initMermaid;\n    /**\n     * Determine whether mermaid has been loaded yet.\n     */\n    function getMermaid() {\n        return _mermaid;\n    }\n    Private.getMermaid = getMermaid;\n    /**\n     * Provide a globally-unique, but unstable, ID for disambiguation.\n     */\n    function nextMermaidId() {\n        return _nextMermaidId++;\n    }\n    Private.nextMermaidId = nextMermaidId;\n    /**\n     * Ensure mermaid has been lazily loaded once, initialized, and cached.\n     */\n    async function ensureMermaid() {\n        if (_mermaid != null) {\n            return _mermaid;\n        }\n        if (_loading) {\n            return _loading.promise;\n        }\n        _loading = new PromiseDelegate();\n        _version = (await import('mermaid/package.json')).version;\n        const tmpMermaid = (_mermaid = (await import('mermaid')).default);\n        initMermaid(tmpMermaid);\n        _mermaid = tmpMermaid;\n        _loading.resolve(_mermaid);\n        return _mermaid;\n    }\n    Private.ensureMermaid = ensureMermaid;\n    /** Detect and load any renderers configured via `%init` or YAML front matter.\n     *\n     * The current upstream behavior appears to be last-in wins, but check all.\n     */\n    async function ensureRenderers(text) {\n        let promises = [];\n        for (const match of [...text.matchAll(RE_DEFAULT_RENDERER)]) {\n            switch ((match && match[2]) || null) {\n                case 'elk':\n                    promises.push(Private.ensureMermaidElk());\n                    break;\n            }\n        }\n        if (promises.length) {\n            await Promise.all(promises);\n        }\n    }\n    Private.ensureRenderers = ensureRenderers;\n    /**\n     * Ensure mermaid-elk has been lazily loaded once, initialized, and cached.\n     */\n    async function ensureMermaidElk() {\n        if (_mermaidElk != null) {\n            return _mermaidElk;\n        }\n        if (_loadingElk) {\n            return _loadingElk.promise;\n        }\n        _loadingElk = new PromiseDelegate();\n        const _mermaid = await ensureMermaid();\n        const tmpElk = (await import('@mermaid-js/layout-elk')).default;\n        _mermaid.registerLayoutLoaders(tmpElk);\n        _mermaidElk = tmpElk;\n        _loadingElk.resolve(_mermaidElk);\n        return _mermaidElk;\n    }\n    Private.ensureMermaidElk = ensureMermaidElk;\n    /**\n     * A regular expression for all void elements, which may include attributes and\n     * a slash.\n     *\n     * @see https://developer.mozilla.org/en-US/docs/Glossary/Void_element\n     *\n     * Of these, only `<br>` is generated by Mermaid in place of `\\n`,\n     * but _any_ \"malformed\" tag will break the SVG rendering entirely.\n     */\n    Private.RE_VOID_ELEMENT = /<\\s*(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\\s*([^>]*?)\\s*>/gi;\n    /**\n     * Ensure a void element is closed with a slash, preserving any attributes.\n     */\n    function replaceVoidElement(match, tag, rest) {\n        rest = rest.trim();\n        if (!rest.endsWith('/')) {\n            rest = `${rest} /`;\n        }\n        return `<${tag} ${rest}>`;\n    }\n    Private.replaceVoidElement = replaceVoidElement;\n    /**\n     * Named HTML entities with their decimal equivalent codes.\n     *\n     * @see https://www.w3.org/TR/WD-html40-970708/sgml/entities.html\n     * */\n    Private.HTML_ENTITIES = `<!ENTITY Aacute \"&#193;\">\n<!ENTITY aacute \"&#225;\">\n<!ENTITY Acirc \"&#194;\">\n<!ENTITY acirc \"&#226;\">\n<!ENTITY acute \"&#180;\">\n<!ENTITY AElig \"&#198;\">\n<!ENTITY aelig \"&#230;\">\n<!ENTITY Agrave \"&#192;\">\n<!ENTITY agrave \"&#224;\">\n<!ENTITY alefsym \"&#8501;\">\n<!ENTITY Alpha \"&#913;\">\n<!ENTITY alpha \"&#945;\">\n<!ENTITY amp \"&#38;\">\n<!ENTITY and \"&#8869;\">\n<!ENTITY ang \"&#8736;\">\n<!ENTITY Aring \"&#197;\">\n<!ENTITY aring \"&#229;\">\n<!ENTITY asymp \"&#8776;\">\n<!ENTITY Atilde \"&#195;\">\n<!ENTITY atilde \"&#227;\">\n<!ENTITY Auml \"&#196;\">\n<!ENTITY auml \"&#228;\">\n<!ENTITY bdquo \"&#8222;\">\n<!ENTITY Beta \"&#914;\">\n<!ENTITY beta \"&#946;\">\n<!ENTITY brvbar \"&#166;\">\n<!ENTITY bull \"&#8226;\">\n<!ENTITY cap \"&#8745;\">\n<!ENTITY Ccedil \"&#199;\">\n<!ENTITY ccedil \"&#231;\">\n<!ENTITY cedil \"&#184;\">\n<!ENTITY cent \"&#162;\">\n<!ENTITY Chi \"&#935;\">\n<!ENTITY chi \"&#967;\">\n<!ENTITY circ \"&#710;\">\n<!ENTITY clubs \"&#9827;\">\n<!ENTITY cong \"&#8773;\">\n<!ENTITY copy \"&#169;\">\n<!ENTITY crarr \"&#8629;\">\n<!ENTITY cup \"&#8746;\">\n<!ENTITY curren \"&#164;\">\n<!ENTITY dagger \"&#8224;\">\n<!ENTITY Dagger \"&#8225;\">\n<!ENTITY darr \"&#8595;\">\n<!ENTITY dArr \"&#8659;\">\n<!ENTITY deg \"&#176;\">\n<!ENTITY Delta \"&#916;\">\n<!ENTITY delta \"&#948;\">\n<!ENTITY diams \"&#9830;\">\n<!ENTITY divide \"&#247;\">\n<!ENTITY Eacute \"&#201;\">\n<!ENTITY eacute \"&#233;\">\n<!ENTITY Ecirc \"&#202;\">\n<!ENTITY ecirc \"&#234;\">\n<!ENTITY Egrave \"&#200;\">\n<!ENTITY egrave \"&#232;\">\n<!ENTITY empty \"&#8709;\">\n<!ENTITY emsp \"&#8195;\">\n<!ENTITY ensp \"&#8194;\">\n<!ENTITY epsilon \"&#949;\">\n<!ENTITY Epsilon \"&#917;\">\n<!ENTITY equiv \"&#8801;\">\n<!ENTITY Eta \"&#919;\">\n<!ENTITY eta \"&#951;\">\n<!ENTITY ETH \"&#208;\">\n<!ENTITY eth \"&#240;\">\n<!ENTITY Euml \"&#203;\">\n<!ENTITY euml \"&#235;\">\n<!ENTITY exist \"&#8707;\">\n<!ENTITY fnof \"&#402;\">\n<!ENTITY forall \"&#8704;\">\n<!ENTITY frac12 \"&#189;\">\n<!ENTITY frac14 \"&#188;\">\n<!ENTITY frac34 \"&#190;\">\n<!ENTITY frasl \"&#8260;\">\n<!ENTITY Gamma \"&#915;\">\n<!ENTITY gamma \"&#947;\">\n<!ENTITY ge \"&#8805;\">\n<!ENTITY gt \"&#62;\">\n<!ENTITY harr \"&#8596;\">\n<!ENTITY hArr \"&#8660;\">\n<!ENTITY hearts \"&#9829;\">\n<!ENTITY hellip \"&#8230;\">\n<!ENTITY Iacute \"&#205;\">\n<!ENTITY iacute \"&#237;\">\n<!ENTITY Icirc \"&#206;\">\n<!ENTITY icirc \"&#238;\">\n<!ENTITY iexcl \"&#161;\">\n<!ENTITY Igrave \"&#204;\">\n<!ENTITY igrave \"&#236;\">\n<!ENTITY image \"&#8465;\">\n<!ENTITY infin \"&#8734;\">\n<!ENTITY int \"&#8747;\">\n<!ENTITY Iota \"&#921;\">\n<!ENTITY iota \"&#953;\">\n<!ENTITY iquest \"&#191;\">\n<!ENTITY isin \"&#8712;\">\n<!ENTITY Iuml \"&#207;\">\n<!ENTITY iuml \"&#239;\">\n<!ENTITY Kappa \"&#922;\">\n<!ENTITY kappa \"&#954;\">\n<!ENTITY Lambda \"&#923;\">\n<!ENTITY lambda \"&#955;\">\n<!ENTITY lang \"&#9001;\">\n<!ENTITY laquo \"&#171;\">\n<!ENTITY larr \"&#8592;\">\n<!ENTITY lArr \"&#8656;\">\n<!ENTITY lceil \"&#8968;\">\n<!ENTITY ldquo \"&#8220;\">\n<!ENTITY le \"&#8804;\">\n<!ENTITY lfloor \"&#8970;\">\n<!ENTITY lowast \"&#8727;\">\n<!ENTITY loz \"&#9674;\">\n<!ENTITY lrm \"&#8206;\">\n<!ENTITY lsaquo \"&#8249;\">\n<!ENTITY lsquo \"&#8216;\">\n<!ENTITY lt \"&#60;\">\n<!ENTITY macr \"&#175;\">\n<!ENTITY mdash \"&#8212;\">\n<!ENTITY micro \"&#181;\">\n<!ENTITY middot \"&#183;\">\n<!ENTITY minus \"&#8722;\">\n<!ENTITY Mu \"&#924;\">\n<!ENTITY mu \"&#956;\">\n<!ENTITY nabla \"&#8711;\">\n<!ENTITY nbsp \"&#160;\">\n<!ENTITY ndash \"&#8211;\">\n<!ENTITY ne \"&#8800;\">\n<!ENTITY ni \"&#8715;\">\n<!ENTITY not \"&#172;\">\n<!ENTITY notin \"&#8713;\">\n<!ENTITY nsub \"&#8836;\">\n<!ENTITY Ntilde \"&#209;\">\n<!ENTITY ntilde \"&#241;\">\n<!ENTITY Nu \"&#925;\">\n<!ENTITY nu \"&#957;\">\n<!ENTITY Oacute \"&#211;\">\n<!ENTITY oacute \"&#243;\">\n<!ENTITY Ocirc \"&#212;\">\n<!ENTITY ocirc \"&#244;\">\n<!ENTITY OElig \"&#338;\">\n<!ENTITY oelig \"&#339;\">\n<!ENTITY Ograve \"&#210;\">\n<!ENTITY ograve \"&#242;\">\n<!ENTITY oline \"&#8254;\">\n<!ENTITY Omega \"&#937;\">\n<!ENTITY omega \"&#969;\">\n<!ENTITY Omicron \"&#927;\">\n<!ENTITY omicron \"&#959;\">\n<!ENTITY oplus \"&#8853;\">\n<!ENTITY or \"&#8870;\">\n<!ENTITY ordf \"&#170;\">\n<!ENTITY ordm \"&#186;\">\n<!ENTITY Oslash \"&#216;\">\n<!ENTITY oslash \"&#248;\">\n<!ENTITY Otilde \"&#213;\">\n<!ENTITY otilde \"&#245;\">\n<!ENTITY otimes \"&#8855;\">\n<!ENTITY Ouml \"&#214;\">\n<!ENTITY ouml \"&#246;\">\n<!ENTITY para \"&#182;\">\n<!ENTITY part \"&#8706;\">\n<!ENTITY permil \"&#8240;\">\n<!ENTITY perp \"&#8869;\">\n<!ENTITY Phi \"&#934;\">\n<!ENTITY phi \"&#966;\">\n<!ENTITY Pi \"&#928;\">\n<!ENTITY pi \"&#960;\">\n<!ENTITY piv \"&#982;\">\n<!ENTITY plusmn \"&#177;\">\n<!ENTITY pound \"&#163;\">\n<!ENTITY prime \"&#8242;\">\n<!ENTITY Prime \"&#8243;\">\n<!ENTITY prod \"&#8719;\">\n<!ENTITY prop \"&#8733;\">\n<!ENTITY Psi \"&#936;\">\n<!ENTITY psi \"&#968;\">\n<!ENTITY quot \"&#34;\">\n<!ENTITY radic \"&#8730;\">\n<!ENTITY rang \"&#9002;\">\n<!ENTITY raquo \"&#187;\">\n<!ENTITY rarr \"&#8594;\">\n<!ENTITY rArr \"&#8658;\">\n<!ENTITY rceil \"&#8969;\">\n<!ENTITY rdquo \"&#8221;\">\n<!ENTITY real \"&#8476;\">\n<!ENTITY reg \"&#174;\">\n<!ENTITY rfloor \"&#8971;\">\n<!ENTITY Rho \"&#929;\">\n<!ENTITY rho \"&#961;\">\n<!ENTITY rlm \"&#8207;\">\n<!ENTITY rsaquo \"&#8250;\">\n<!ENTITY rsquo \"&#8217;\">\n<!ENTITY sbquo \"&#8218;\">\n<!ENTITY Scaron \"&#352;\">\n<!ENTITY scaron \"&#353;\">\n<!ENTITY sdot \"&#8901;\">\n<!ENTITY sect \"&#167;\">\n<!ENTITY shy \"&#173;\">\n<!ENTITY Sigma \"&#931;\">\n<!ENTITY sigma \"&#963;\">\n<!ENTITY sigmaf \"&#962;\">\n<!ENTITY sim \"&#8764;\">\n<!ENTITY spades \"&#9824;\">\n<!ENTITY sub \"&#8834;\">\n<!ENTITY sube \"&#8838;\">\n<!ENTITY sum \"&#8721;\">\n<!ENTITY sup \"&#8835;\">\n<!ENTITY sup1 \"&#185;\">\n<!ENTITY sup2 \"&#178;\">\n<!ENTITY sup3 \"&#179;\">\n<!ENTITY supe \"&#8839;\">\n<!ENTITY szlig \"&#223;\">\n<!ENTITY Tau \"&#932;\">\n<!ENTITY tau \"&#964;\">\n<!ENTITY there4 \"&#8756;\">\n<!ENTITY Theta \"&#920;\">\n<!ENTITY theta \"&#952;\">\n<!ENTITY thetasym \"&#977;\">\n<!ENTITY thinsp \"&#8201;\">\n<!ENTITY THORN \"&#222;\">\n<!ENTITY thorn \"&#254;\">\n<!ENTITY tilde \"&#732;\">\n<!ENTITY times \"&#215;\">\n<!ENTITY trade \"&#8482;\">\n<!ENTITY Uacute \"&#218;\">\n<!ENTITY uacute \"&#250;\">\n<!ENTITY uarr \"&#8593;\">\n<!ENTITY uArr \"&#8657;\">\n<!ENTITY Ucirc \"&#219;\">\n<!ENTITY ucirc \"&#251;\">\n<!ENTITY Ugrave \"&#217;\">\n<!ENTITY ugrave \"&#249;\">\n<!ENTITY uml \"&#168;\">\n<!ENTITY upsih \"&#978;\">\n<!ENTITY Upsilon \"&#933;\">\n<!ENTITY upsilon \"&#965;\">\n<!ENTITY Uuml \"&#220;\">\n<!ENTITY uuml \"&#252;\">\n<!ENTITY weierp \"&#8472;\">\n<!ENTITY Xi \"&#926;\">\n<!ENTITY xi \"&#958;\">\n<!ENTITY Yacute \"&#221;\">\n<!ENTITY yacute \"&#253;\">\n<!ENTITY yen \"&#165;\">\n<!ENTITY Yuml \"&#376;\">\n<!ENTITY yuml \"&#255;\">\n<!ENTITY Zeta \"&#918;\">\n<!ENTITY zeta \"&#950;\">\n<!ENTITY zwj \"&#8205;\">\n<!ENTITY zwnj \"&#8204;\">`.replace(/\\n/g, ' ');\n    /**\n     * A reasonably strict xml declaration.\n     */\n    const XML_DECL = '<?xml version=\"1.0\" standalone=\"no\"?>';\n    /**\n     * The beginning of the XML doctype declaration.\n     */\n    const DOCTYPE_START = `<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\" [`;\n    /**\n     * The end of the XML docype declaration.\n     */\n    const DOCTYPE_END = ']>';\n    /**\n     * A full header for an SVG XML document.\n     */\n    Private.SVG_XML_HEADER = `${XML_DECL}\n    ${DOCTYPE_START}${Private.HTML_ENTITIES}${DOCTYPE_END}`;\n})(Private || (Private = {}));\n//# sourceMappingURL=manager.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * An implementation of mermaid fenced code blocks in markdown.\n */\nexport class MermaidMarkdown {\n    constructor(options) {\n        this.languages = ['mermaid'];\n        this.rank = 100;\n        this._mermaid = options.mermaid;\n    }\n    /**\n     * Pre-parse and cache the rendered text.\n     */\n    async walk(text) {\n        await this._mermaid.renderFigure(text);\n    }\n    /**\n     * Render the diagram.\n     */\n    render(text) {\n        // handle pre-cached mermaid figures\n        let cachedFigure = this._mermaid.getCachedFigure(text);\n        if (cachedFigure) {\n            return cachedFigure.outerHTML;\n        }\n        return null;\n    }\n}\n//# sourceMappingURL=markdown.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module mermaid-extension\n */\nimport { MERMAID_CLASS, MERMAID_MIME_TYPE, WARNING_CLASS } from './tokens';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { Widget } from '@lumino/widgets';\nconst SVG_MIME = 'image/svg+xml';\n/**\n * A widget for rendering mermaid text-based diagrams, for usage with rendermime.\n */\nexport class RenderedMermaid extends Widget {\n    /**\n     * Create a new widget for rendering Vega/Vega-Lite.\n     */\n    constructor(options) {\n        super();\n        this._lastRendered = null;\n        this._mimeType = options.mimeType;\n        this.addClass(MERMAID_CLASS);\n    }\n    static set manager(manager) {\n        if (RenderedMermaid._manager) {\n            console.warn('Mermaid manager may only be set once, and is already set.');\n            return;\n        }\n        RenderedMermaid._manager = manager;\n        RenderedMermaid._managerReady.resolve(manager);\n    }\n    /**\n     * Render mermaid text-based diagrams into this widget's node.\n     */\n    async renderModel(model) {\n        const manager = await RenderedMermaid._managerReady.promise;\n        const text = model.data[this._mimeType];\n        if (text == null || text === this._lastRendered) {\n            return;\n        }\n        this._lastRendered = text;\n        // get a div containing a figure or parser message\n        const figure = await manager.renderFigure(text);\n        if (figure.classList.contains(WARNING_CLASS)) {\n            this.node.classList.add(WARNING_CLASS);\n        }\n        else {\n            this.node.classList.remove(WARNING_CLASS);\n        }\n        if (!figure.firstChild) {\n            return;\n        }\n        if (this.node.innerHTML !== figure.innerHTML) {\n            this.node.innerHTML = figure.innerHTML;\n        }\n        // capture the version of mermaid used\n        const version = manager.getMermaidVersion();\n        const mermaidMetadata = {\n            ...(model.metadata[MERMAID_MIME_TYPE] || {}),\n            version\n        };\n        const metadata = {\n            ...model.metadata,\n            [MERMAID_MIME_TYPE]: mermaidMetadata\n        };\n        // if available, set the fully-rendered SVG\n        const img = figure.querySelector('img');\n        if (img) {\n            const svg = decodeURIComponent(img.src.split(',')[1]);\n            const oldSvg = model.data[SVG_MIME];\n            if (svg !== oldSvg) {\n                model.setData({\n                    data: { ...model.data, [SVG_MIME]: svg },\n                    metadata\n                });\n            }\n        }\n        else {\n            const dataWithoutSvg = { ...model.data };\n            delete dataWithoutSvg[SVG_MIME];\n            model.setData({ data: dataWithoutSvg, metadata });\n        }\n    }\n}\nRenderedMermaid._manager = null;\nRenderedMermaid._managerReady = new PromiseDelegate();\n/**\n * A mime renderer factory for mermaid text-based diagrams.\n */\nexport const rendererFactory = {\n    safe: true,\n    mimeTypes: [MERMAID_MIME_TYPE],\n    createRenderer: options => new RenderedMermaid(options)\n};\n//# sourceMappingURL=mime.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module mermaid\n */\nexport * from './manager';\nexport * from './markdown';\nexport * from './mime';\nexport * from './tokens';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module metadataform-extension\n */\nimport { INotebookTools } from '@jupyterlab/notebook';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator } from '@jupyterlab/translation';\nimport { IFormRendererRegistry } from '@jupyterlab/ui-components';\nimport { JSONExt } from '@lumino/coreutils';\nimport { IMetadataFormProvider, MetadataFormProvider, MetadataFormWidget } from '@jupyterlab/metadataform';\nconst PLUGIN_ID = '@jupyterlab/metadataform-extension:metadataforms';\nvar Private;\n(function (Private) {\n    async function loadSettingsMetadataForm(app, registry, notebookTools, translator, formComponentRegistry) {\n        var _a;\n        let canonical;\n        let loaded = {};\n        /**\n         * Populate the plugin's schema defaults.\n         */\n        function populate(schema) {\n            loaded = {};\n            schema.properties.metadataforms.default = Object.keys(registry.plugins)\n                .map(plugin => {\n                var _a;\n                const metadataForms = (_a = registry.plugins[plugin].schema['jupyter.lab.metadataforms']) !== null && _a !== void 0 ? _a : [];\n                metadataForms.forEach(metadataForm => {\n                    metadataForm._origin = plugin;\n                });\n                loaded[plugin] = metadataForms;\n                return metadataForms;\n            })\n                .concat([schema['jupyter.lab.metadataforms']])\n                .reduce((acc, val) => {\n                // If a MetadataForm with the same ID already exists,\n                // the metadataKeys will be concatenated to this MetadataForm's metadataKeys .\n                // Otherwise, the whole MetadataForm will be pushed as a new form.\n                val.forEach(value => {\n                    const metadataForm = acc.find(addedValue => {\n                        return addedValue.id === value.id;\n                    });\n                    if (metadataForm) {\n                        // TODO do insertion of metadataSchema properties in a generic way.\n                        // Currently this only support 'properties', 'allOf' and 'required'.\n                        //  - add or replace entries if it is an object.\n                        //  - concat if it is an array.\n                        //  - replace if it is a primitive ?\n                        // Includes new metadataKey in the existing metadataSchema.\n                        // Overwrites if the metadataKey already exists.\n                        for (let [metadataKey, properties] of Object.entries(value.metadataSchema.properties)) {\n                            metadataForm.metadataSchema.properties[metadataKey] =\n                                properties;\n                        }\n                        // Includes required fields.\n                        if (value.metadataSchema.required) {\n                            if (!metadataForm.metadataSchema.required) {\n                                metadataForm.metadataSchema.required =\n                                    value.metadataSchema.required;\n                            }\n                            else {\n                                metadataForm.metadataSchema.required.concat(value.metadataSchema.required);\n                            }\n                        }\n                        // Includes allOf array in the existing metadataSchema.\n                        if (value.metadataSchema.allOf) {\n                            if (!metadataForm.metadataSchema.allOf) {\n                                metadataForm.metadataSchema.allOf =\n                                    value.metadataSchema.allOf;\n                            }\n                            else {\n                                metadataForm.metadataSchema.allOf.concat(value.metadataSchema.allOf);\n                            }\n                        }\n                        // Includes uiSchema in the existing uiSchema.\n                        // Overwrites if the uiSchema already exists for that metadataKey.\n                        if (value.uiSchema) {\n                            if (!metadataForm.uiSchema)\n                                metadataForm.uiSchema = {};\n                            for (let [metadataKey, ui] of Object.entries(value.uiSchema)) {\n                                metadataForm.uiSchema[metadataKey] = ui;\n                            }\n                        }\n                        // Includes metadataOptions in the existing uiSchema.\n                        // Overwrites if options already exists for that metadataKey.\n                        if (value.metadataOptions) {\n                            if (!metadataForm.metadataOptions)\n                                metadataForm.metadataOptions = {};\n                            for (let [metadataKey, options] of Object.entries(value.metadataOptions)) {\n                                metadataForm.metadataOptions[metadataKey] = options;\n                            }\n                        }\n                    }\n                    else {\n                        acc.push(value);\n                    }\n                });\n                return acc;\n            }, []); // flatten one level;\n        }\n        // Transform the plugin object to return different schema than the default.\n        registry.transform(PLUGIN_ID, {\n            compose: plugin => {\n                var _a, _b, _c, _d;\n                // Only override the canonical schema the first time.\n                if (!canonical) {\n                    canonical = JSONExt.deepCopy(plugin.schema);\n                    populate(canonical);\n                }\n                const defaults = (_c = (_b = (_a = canonical.properties) === null || _a === void 0 ? void 0 : _a.metadataforms) === null || _b === void 0 ? void 0 : _b.default) !== null && _c !== void 0 ? _c : [];\n                const user = {\n                    metadataforms: (_d = plugin.data.user.metadataforms) !== null && _d !== void 0 ? _d : []\n                };\n                const composite = {\n                    metadataforms: defaults.concat(user.metadataforms)\n                };\n                plugin.data = { composite, user };\n                return plugin;\n            },\n            fetch: plugin => {\n                // Only override the canonical schema the first time.\n                if (!canonical) {\n                    canonical = JSONExt.deepCopy(plugin.schema);\n                    populate(canonical);\n                }\n                return {\n                    data: plugin.data,\n                    id: plugin.id,\n                    raw: plugin.raw,\n                    schema: canonical,\n                    version: plugin.version\n                };\n            }\n        });\n        // Repopulate the canonical variable after the setting registry has\n        // preloaded all initial plugins.\n        canonical = null;\n        const settings = await registry.load(PLUGIN_ID);\n        const metadataForms = new MetadataFormProvider();\n        // Creates all the forms from extensions settings.\n        for (let schema of settings.composite\n            .metadataforms) {\n            let metaInformation = {};\n            let metadataSchema = JSONExt.deepCopy(schema.metadataSchema);\n            let uiSchema = {};\n            if (schema.uiSchema) {\n                uiSchema = JSONExt.deepCopy(schema.uiSchema);\n            }\n            for (let [metadataKey, properties] of Object.entries(metadataSchema.properties)) {\n                if (properties.default) {\n                    if (!metaInformation[metadataKey])\n                        metaInformation[metadataKey] = {};\n                    metaInformation[metadataKey].default = properties.default;\n                }\n            }\n            if (schema.metadataOptions) {\n                for (let [metadataKey, options] of Object.entries(schema.metadataOptions)) {\n                    // Optionally links key to cell type.\n                    if (options.cellTypes) {\n                        if (!metaInformation[metadataKey])\n                            metaInformation[metadataKey] = {};\n                        metaInformation[metadataKey].cellTypes = options.cellTypes;\n                    }\n                    // Optionally links key to metadata level.\n                    if (options.metadataLevel) {\n                        if (!metaInformation[metadataKey])\n                            metaInformation[metadataKey] = {};\n                        metaInformation[metadataKey].level = options.metadataLevel;\n                    }\n                    // Optionally set the writeDefault flag.\n                    if (options.writeDefault !== undefined) {\n                        if (!metaInformation[metadataKey])\n                            metaInformation[metadataKey] = {};\n                        metaInformation[metadataKey].writeDefault = options.writeDefault;\n                    }\n                    // Optionally links key to a custom widget.\n                    if (options.customRenderer) {\n                        const component = formComponentRegistry.getRenderer(options.customRenderer);\n                        // If renderer is defined (custom widget has been registered), set it as used widget.\n                        if (component !== undefined) {\n                            if (!uiSchema[metadataKey])\n                                uiSchema[metadataKey] = {};\n                            if (component.fieldRenderer) {\n                                uiSchema[metadataKey]['ui:field'] = component.fieldRenderer;\n                            }\n                            else {\n                                uiSchema[metadataKey]['ui:widget'] = component.widgetRenderer;\n                            }\n                        }\n                    }\n                }\n            }\n            // Adds a section to notebookTools.\n            notebookTools.addSection({\n                sectionName: schema.id,\n                rank: schema.rank,\n                label: (_a = schema.label) !== null && _a !== void 0 ? _a : schema.id\n            });\n            // Creates the tool.\n            const tool = new MetadataFormWidget({\n                metadataSchema: metadataSchema,\n                metaInformation: metaInformation,\n                uiSchema: uiSchema,\n                pluginId: schema._origin,\n                translator: translator,\n                showModified: schema.showModified\n            });\n            // Adds the form to the section.\n            notebookTools.addItem({ section: schema.id, tool: tool });\n            metadataForms.add(schema.id, tool);\n        }\n        return metadataForms;\n    }\n    Private.loadSettingsMetadataForm = loadSettingsMetadataForm;\n})(Private || (Private = {}));\n/**\n * The metadata form plugin.\n */\nconst metadataForm = {\n    id: PLUGIN_ID,\n    description: 'Provides the metadata form registry.',\n    autoStart: true,\n    requires: [\n        INotebookTools,\n        ITranslator,\n        IFormRendererRegistry,\n        ISettingRegistry\n    ],\n    provides: IMetadataFormProvider,\n    activate: async (app, notebookTools, translator, componentsRegistry, settings) => {\n        return await Private.loadSettingsMetadataForm(app, settings, notebookTools, translator, componentsRegistry);\n    }\n};\nexport default metadataForm;\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/notebook/style/index.js';\nimport '@jupyterlab/metadataform/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module metadataform\n */\nimport { ReactWidget } from '@jupyterlab/apputils';\nimport { FormComponent } from '@jupyterlab/ui-components';\nimport validatorAjv8 from '@rjsf/validator-ajv8';\nimport React from 'react';\n/**\n * A ReactWidget with the form itself.\n */\nexport class FormWidget extends ReactWidget {\n    /**\n     * Constructs a new FormWidget.\n     */\n    constructor(props) {\n        super();\n        this.addClass('jp-FormWidget');\n        this._props = props;\n    }\n    /**\n     * Render the form.\n     * @returns - The rendered form\n     */\n    render() {\n        const formContext = {\n            defaultFormData: this._props.settings.default(),\n            updateMetadata: this._props.metadataFormWidget.updateMetadata\n        };\n        return (React.createElement(FormComponent, { validator: validatorAjv8, schema: this._props.properties, formData: this._props.formData, formContext: formContext, uiSchema: this._props.uiSchema, liveValidate: true, idPrefix: `jp-MetadataForm-${this._props.pluginId}`, onChange: (e) => {\n                this._props.metadataFormWidget.updateMetadata(e.formData || {});\n            }, compact: true, showModifiedFromDefault: this._props.showModified, translator: this._props.translator }));\n    }\n}\n//# sourceMappingURL=form.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module metadataform\n */\nimport { NotebookTools } from '@jupyterlab/notebook';\nimport { BaseSettings } from '@jupyterlab/settingregistry';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { JSONExt } from '@lumino/coreutils';\nimport { SingletonLayout, Widget } from '@lumino/widgets';\nimport { FormWidget } from './form';\n/**\n * A class that create a metadata form widget\n */\nexport class MetadataFormWidget extends NotebookTools.Tool {\n    /**\n     * Construct an empty widget.\n     */\n    constructor(options) {\n        super();\n        /**\n         * Update the metadata of the current cell or notebook.\n         *\n         * @param formData - the cell metadata set in the form.\n         * @param reload - whether to update the form after updating the metadata.\n         *\n         * ## Notes\n         * Metadata are updated from root only. If some metadata is nested,\n         * the whole root object must be updated.\n         * This function build an object with all the root object to update\n         * in metadata before performing update.\n         * It uses an arrow function to allow using 'this' properly when called from a custom field.\n         */\n        this.updateMetadata = (formData, reload) => {\n            var _a, _b, _c, _d, _e, _f, _g, _h;\n            if (this.notebookTools == undefined)\n                return;\n            const notebook = this.notebookTools.activeNotebookPanel;\n            const cell = this.notebookTools.activeCell;\n            if (cell == null)\n                return;\n            this._updatingMetadata = true;\n            // An object representing the cell metadata to modify.\n            const cellMetadataObject = {};\n            // An object representing the notebook metadata to modify.\n            const notebookMetadataObject = {};\n            for (let [metadataKey, value] of Object.entries(formData)) {\n                // Continue if the metadataKey does not exist in schema.\n                if (!this.metadataKeys.includes(metadataKey))\n                    continue;\n                // Continue if the metadataKey is a notebook level one and there is no NotebookModel.\n                if (((_a = this._metaInformation[metadataKey]) === null || _a === void 0 ? void 0 : _a.level) === 'notebook' &&\n                    this._notebookModelNull)\n                    continue;\n                // Continue if the metadataKey is not applicable to the cell type.\n                if (((_b = this._metaInformation[metadataKey]) === null || _b === void 0 ? void 0 : _b.cellTypes) &&\n                    !((_d = (_c = this._metaInformation[metadataKey]) === null || _c === void 0 ? void 0 : _c.cellTypes) === null || _d === void 0 ? void 0 : _d.includes(cell.model.type))) {\n                    continue;\n                }\n                let currentMetadata;\n                let metadataObject;\n                // Linking the working variable to the corresponding metadata and representation.\n                if (((_e = this._metaInformation[metadataKey]) === null || _e === void 0 ? void 0 : _e.level) === 'notebook') {\n                    // Working on notebook metadata.\n                    currentMetadata = notebook.model.metadata;\n                    metadataObject = notebookMetadataObject;\n                }\n                else {\n                    // Working on cell metadata.\n                    currentMetadata = cell.model.metadata;\n                    metadataObject = cellMetadataObject;\n                }\n                // Remove first and last '/' if necessary and split the path.\n                let nestedKey = metadataKey\n                    .replace(/^\\/+/, '')\n                    .replace(/\\/+$/, '')\n                    .split('/');\n                let baseMetadataKey = nestedKey[0];\n                if (baseMetadataKey == undefined)\n                    continue;\n                let writeFinalData = value !== undefined &&\n                    (((_g = (_f = this._metaInformation[metadataKey]) === null || _f === void 0 ? void 0 : _f.writeDefault) !== null && _g !== void 0 ? _g : true) ||\n                        value !== ((_h = this._metaInformation[metadataKey]) === null || _h === void 0 ? void 0 : _h.default));\n                // If metadata key is at root of metadata no need to go further.\n                if (nestedKey.length == 1) {\n                    if (writeFinalData)\n                        metadataObject[baseMetadataKey] = value;\n                    else\n                        metadataObject[baseMetadataKey] = undefined;\n                    continue;\n                }\n                let intermediateMetadataKeys = nestedKey.slice(1, -1);\n                let finalMetadataKey = nestedKey[nestedKey.length - 1];\n                // Deep copy of the metadata if not already done.\n                if (!(baseMetadataKey in metadataObject)) {\n                    metadataObject[baseMetadataKey] = currentMetadata[baseMetadataKey];\n                }\n                if (metadataObject[baseMetadataKey] === undefined)\n                    metadataObject[baseMetadataKey] = {};\n                // Let's have an object which points to the nested key.\n                let workingObject = metadataObject[baseMetadataKey];\n                let finalObjectReached = true;\n                for (let nested of intermediateMetadataKeys) {\n                    // If one of the nested object does not exist, this object is created\n                    // only if there is a final data to write.\n                    if (!(nested in workingObject)) {\n                        if (!writeFinalData) {\n                            finalObjectReached = false;\n                            break;\n                        }\n                        else\n                            workingObject[nested] = {};\n                    }\n                    workingObject = workingObject[nested];\n                }\n                // Write the value to the nested key or remove all empty object before the nested key,\n                // only if the final object has been reached.\n                if (finalObjectReached) {\n                    if (!writeFinalData)\n                        delete workingObject[finalMetadataKey];\n                    else\n                        workingObject[finalMetadataKey] = value;\n                }\n                // If the final nested data has been deleted, let see if there is not remaining\n                // empty objects to remove.\n                if (!writeFinalData) {\n                    metadataObject[baseMetadataKey] = Private.deleteEmptyNested(metadataObject[baseMetadataKey], nestedKey.slice(1));\n                    if (!Object.keys(metadataObject[baseMetadataKey])\n                        .length)\n                        metadataObject[baseMetadataKey] = undefined;\n                }\n            }\n            // Set the cell metadata or delete it if value is undefined or empty object.\n            for (let [key, value] of Object.entries(cellMetadataObject)) {\n                if (value === undefined)\n                    cell.model.deleteMetadata(key);\n                else\n                    cell.model.setMetadata(key, value);\n            }\n            // Set the notebook metadata or delete it if value is undefined or empty object.\n            if (!this._notebookModelNull) {\n                for (let [key, value] of Object.entries(notebookMetadataObject)) {\n                    if (value === undefined)\n                        notebook.model.deleteMetadata(key);\n                    else\n                        notebook.model.setMetadata(key, value);\n                }\n            }\n            this._updatingMetadata = false;\n            if (reload) {\n                this._update();\n            }\n        };\n        this._notebookModelNull = false;\n        this._metadataSchema = options.metadataSchema;\n        this._metaInformation = options.metaInformation;\n        this._uiSchema = options.uiSchema || {};\n        this._pluginId = options.pluginId;\n        this._showModified = options.showModified || false;\n        this.translator = options.translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        this._updatingMetadata = false;\n        const layout = (this.layout = new SingletonLayout());\n        const node = document.createElement('div');\n        const content = document.createElement('div');\n        content.textContent = this._trans.__('No metadata.');\n        content.className = 'jp-MetadataForm-placeholderContent';\n        node.appendChild(content);\n        this._placeholder = new Widget({ node });\n        this._placeholder.addClass('jp-MetadataForm-placeholder');\n        layout.widget = this._placeholder;\n    }\n    /**\n     * Get the form object itself.\n     */\n    get form() {\n        return this._form;\n    }\n    /**\n     * Get the list of existing metadataKey (array of string).\n     *\n     * ## NOTE:\n     * The list contains also the conditional fields, which are not necessary\n     * displayed and filled.\n     */\n    get metadataKeys() {\n        var _a;\n        const metadataKeys = [];\n        // MetadataKey from schema.\n        for (let metadataKey of Object.keys(this._metadataSchema.properties)) {\n            metadataKeys.push(metadataKey);\n        }\n        // Possible additional metadataKeys from conditional schema.\n        (_a = this._metadataSchema.allOf) === null || _a === void 0 ? void 0 : _a.forEach(conditional => {\n            if (conditional.then !== undefined) {\n                if (conditional.then.properties !== undefined) {\n                    let properties = conditional.then\n                        .properties;\n                    for (let metadataKey of Object.keys(properties)) {\n                        if (!metadataKeys.includes(metadataKey))\n                            metadataKeys.push(metadataKey);\n                    }\n                }\n            }\n            if (conditional.else !== undefined) {\n                if (conditional.else.properties !== undefined) {\n                    let properties = conditional.else\n                        .properties;\n                    for (let metadataKey of Object.keys(properties)) {\n                        if (!metadataKeys.includes(metadataKey))\n                            metadataKeys.push(metadataKey);\n                    }\n                }\n            }\n        });\n        return metadataKeys;\n    }\n    /**\n     * Get the properties of a MetadataKey.\n     *\n     * @param metadataKey - metadataKey (string).\n     */\n    getProperties(metadataKey) {\n        return (JSONExt.deepCopy(this._metadataSchema.properties[metadataKey]) || null);\n    }\n    /**\n     * Set properties to a metadataKey.\n     *\n     * @param metadataKey - metadataKey (string).\n     * @param properties - the properties to add or modify.\n     */\n    setProperties(metadataKey, properties) {\n        Object.entries(properties).forEach(([key, value]) => {\n            this._metadataSchema.properties[metadataKey][key] = value;\n        });\n    }\n    /**\n     * Set the content of the widget.\n     */\n    setContent(content) {\n        const layout = this.layout;\n        if (layout.widget) {\n            layout.widget.removeClass('jp-MetadataForm-content');\n            layout.removeWidget(layout.widget);\n        }\n        if (!content) {\n            content = this._placeholder;\n        }\n        content.addClass('jp-MetadataForm-content');\n        layout.widget = content;\n    }\n    /**\n     * Build widget.\n     */\n    buildWidget(props) {\n        this._form = new FormWidget(props);\n        this._form.addClass('jp-MetadataForm');\n        this.setContent(this._form);\n    }\n    /**\n     * Update the form when the widget is displayed.\n     */\n    onAfterShow(msg) {\n        this._update();\n    }\n    /**\n     * Handle a change to the active cell.\n     */\n    onActiveCellChanged(msg) {\n        if (this.isVisible)\n            this._update();\n    }\n    /**\n     * Handle a change to the active cell metadata.\n     */\n    onActiveCellMetadataChanged(_) {\n        if (!this._updatingMetadata && this.isVisible)\n            this._update();\n    }\n    /**\n     * Handle when the active notebook panel changes.\n     */\n    onActiveNotebookPanelChanged(_) {\n        const notebook = this.notebookTools.activeNotebookPanel;\n        this._notebookModelNull = notebook === null || notebook.model === null;\n        if (!this._updatingMetadata && this.isVisible)\n            this._update();\n    }\n    /**\n     * Handle a change to the active notebook metadata.\n     */\n    onActiveNotebookPanelMetadataChanged(msg) {\n        if (!this._updatingMetadata && this.isVisible)\n            this._update();\n    }\n    /**\n     * Update the form with current cell metadata, and remove inconsistent fields.\n     */\n    _update() {\n        var _a, _b, _c, _d, _e;\n        const notebook = this.notebookTools.activeNotebookPanel;\n        const cell = this.notebookTools.activeCell;\n        if (cell == undefined)\n            return;\n        const formProperties = JSONExt.deepCopy(this._metadataSchema);\n        const formData = {};\n        for (let metadataKey of Object.keys(this._metadataSchema.properties || JSONExt.emptyObject)) {\n            // Do not display the field if it's Notebook metadata and the notebook model is null.\n            if (((_a = this._metaInformation[metadataKey]) === null || _a === void 0 ? void 0 : _a.level) === 'notebook' &&\n                this._notebookModelNull) {\n                delete formProperties.properties[metadataKey];\n                continue;\n            }\n            // Do not display the field if the active cell's type is not involved.\n            if (((_b = this._metaInformation[metadataKey]) === null || _b === void 0 ? void 0 : _b.cellTypes) &&\n                !((_d = (_c = this._metaInformation[metadataKey]) === null || _c === void 0 ? void 0 : _c.cellTypes) === null || _d === void 0 ? void 0 : _d.includes(cell.model.type))) {\n                delete formProperties.properties[metadataKey];\n                continue;\n            }\n            let workingObject;\n            // Remove the first and last '/' if exist, nad split the path.\n            let nestedKeys = metadataKey\n                .replace(/^\\/+/, '')\n                .replace(/\\/+$/, '')\n                .split('/');\n            // Associates the correct metadata object to the working object.\n            if (((_e = this._metaInformation[metadataKey]) === null || _e === void 0 ? void 0 : _e.level) === 'notebook') {\n                workingObject = notebook.model.metadata;\n            }\n            else {\n                workingObject = cell.model.metadata;\n            }\n            let hasValue = true;\n            // Navigate to the value.\n            for (let nested of nestedKeys) {\n                if (nested in workingObject)\n                    workingObject = workingObject[nested];\n                else {\n                    hasValue = false;\n                    break;\n                }\n            }\n            // Fill the formData with the current metadata value.\n            if (hasValue)\n                formData[metadataKey] = workingObject;\n        }\n        this.buildWidget({\n            properties: formProperties,\n            settings: new BaseSettings({\n                schema: this._metadataSchema\n            }),\n            uiSchema: this._uiSchema,\n            translator: this.translator || null,\n            formData: formData,\n            metadataFormWidget: this,\n            showModified: this._showModified,\n            pluginId: this._pluginId\n        });\n    }\n}\nvar Private;\n(function (Private) {\n    /**\n     * Recursive function to clean the empty nested metadata before updating real metadata.\n     * this function is called when a nested metadata is undefined (or default), so maybe some\n     * object are now empty.\n     * @param metadataObject PartialJSONObject representing the metadata to update.\n     * @param metadataKeysList Array<string> of the undefined nested metadata.\n     * @returns PartialJSONObject without empty object.\n     */\n    function deleteEmptyNested(metadataObject, metadataKeysList) {\n        let metadataKey = metadataKeysList.shift();\n        if (metadataKey !== undefined && metadataKey in metadataObject) {\n            if (Object.keys(metadataObject[metadataKey]).length)\n                metadataObject[metadataKey] = deleteEmptyNested(metadataObject[metadataKey], metadataKeysList);\n            if (!Object.keys(metadataObject[metadataKey]).length)\n                delete metadataObject[metadataKey];\n        }\n        return metadataObject;\n    }\n    Private.deleteEmptyNested = deleteEmptyNested;\n})(Private || (Private = {}));\n//# sourceMappingURL=metadataform.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nexport class MetadataFormProvider {\n    constructor() {\n        this._items = {};\n    }\n    add(id, widget) {\n        if (!this._items[id]) {\n            this._items[id] = widget;\n        }\n        else {\n            console.warn(`A MetadataformWidget is already registered with id ${id}`);\n        }\n    }\n    get(id) {\n        if (this._items[id]) {\n            return this._items[id];\n        }\n        else {\n            console.warn(`There is no MetadataformWidget registered with id ${id}`);\n        }\n    }\n}\n//# sourceMappingURL=metadataformProvider.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module metadataform\n */\nimport { Token } from '@lumino/coreutils';\n/**\n * The metadata form provider token.\n */\nexport const IMetadataFormProvider = new Token('@jupyterlab/metadataform:IMetadataFormProvider', `A service to register new metadata editor widgets.`);\n//# sourceMappingURL=token.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module metadataform\n */\nexport * from './form';\nexport * from './metadataform';\nexport * from './metadataformProvider';\nexport * from './token';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/notebook/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module nbformat\n */\n// Notebook format interfaces\n// https://nbformat.readthedocs.io/en/latest/format_description.html\n// https://github.com/jupyter/nbformat/blob/master/nbformat/v4/nbformat.v4.schema.json\nimport { JSONExt } from '@lumino/coreutils';\n/**\n * The earliest major version of the notebook format we support.\n */\nexport const MAJOR_VERSION = 4;\n/**\n * The earliest minor version of the notebook format we support.\n */\nexport const MINOR_VERSION = 4;\n/**\n * Validate a mime type/value pair.\n *\n * @param type - The mimetype name.\n *\n * @param value - The value associated with the type.\n *\n * @returns Whether the type/value pair are valid.\n */\nexport function validateMimeValue(type, value) {\n    // Check if \"application/json\" or \"application/foo+json\"\n    const jsonTest = /^application\\/.+\\+json$/;\n    const isJSONType = type === 'application/json' || jsonTest.test(type);\n    const isString = (x) => {\n        return Object.prototype.toString.call(x) === '[object String]';\n    };\n    // If it is an array, make sure if is not a JSON type and it is an\n    // array of strings.\n    if (Array.isArray(value)) {\n        if (isJSONType) {\n            return false;\n        }\n        let valid = true;\n        value.forEach(v => {\n            if (!isString(v)) {\n                valid = false;\n            }\n        });\n        return valid;\n    }\n    // If it is a string, make sure we are not a JSON type.\n    if (isString(value)) {\n        return !isJSONType;\n    }\n    // It is not a string, make sure it is a JSON type.\n    if (!isJSONType) {\n        return false;\n    }\n    // It is a JSON type, make sure it is a valid JSON object.\n    return JSONExt.isObject(value);\n}\n/**\n * Test whether a cell is a raw cell.\n */\nexport function isRaw(cell) {\n    return cell.cell_type === 'raw';\n}\n/**\n * Test whether a cell is a markdown cell.\n */\nexport function isMarkdown(cell) {\n    return cell.cell_type === 'markdown';\n}\n/**\n * Test whether a cell is a code cell.\n */\nexport function isCode(cell) {\n    return cell.cell_type === 'code';\n}\n/**\n * Test whether an output is an execute result.\n */\nexport function isExecuteResult(output) {\n    return output.output_type === 'execute_result';\n}\n/**\n * Test whether an output is from display data.\n */\nexport function isDisplayData(output) {\n    return output.output_type === 'display_data';\n}\n/**\n * Test whether an output is from updated display data.\n */\nexport function isDisplayUpdate(output) {\n    return output.output_type === 'update_display_data';\n}\n/**\n * Test whether an output is from a stream.\n */\nexport function isStream(output) {\n    return output.output_type === 'stream';\n}\n/**\n * Test whether an output is an error.\n */\nexport function isError(output) {\n    return output.output_type === 'error';\n}\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { INotebookCellExecutor, runCell } from '@jupyterlab/notebook';\n/**\n * Notebook cell executor plugin.\n */\nexport const cellExecutor = {\n    id: '@jupyterlab/notebook-extension:cell-executor',\n    description: 'Provides the notebook cell executor.',\n    autoStart: true,\n    provides: INotebookCellExecutor,\n    activate: () => {\n        return Object.freeze({ runCell });\n    }\n};\n//# sourceMappingURL=cellexecutor.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ILoggerRegistry } from '@jupyterlab/logconsole';\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport { KernelMessage } from '@jupyterlab/services';\n/**\n * The Log Console extension.\n */\nexport const logNotebookOutput = {\n    activate: activateNBOutput,\n    id: '@jupyterlab/notebook-extension:log-output',\n    description: 'Adds cell outputs log to the application logger.',\n    requires: [INotebookTracker],\n    optional: [ILoggerRegistry],\n    autoStart: true\n};\nfunction activateNBOutput(app, nbtracker, loggerRegistry) {\n    if (!loggerRegistry) {\n        // Automatically disable if logconsole is missing\n        return;\n    }\n    function registerNB(nb) {\n        function logOutput(msg, levelNormal, levelError) {\n            if (KernelMessage.isDisplayDataMsg(msg) ||\n                KernelMessage.isStreamMsg(msg) ||\n                KernelMessage.isErrorMsg(msg) ||\n                KernelMessage.isExecuteResultMsg(msg)) {\n                const logger = loggerRegistry.getLogger(nb.context.path);\n                logger.rendermime = nb.content.rendermime;\n                const data = {\n                    ...msg.content,\n                    output_type: msg.header.msg_type\n                };\n                let level = levelNormal;\n                if (KernelMessage.isErrorMsg(msg) ||\n                    (KernelMessage.isStreamMsg(msg) && msg.content.name === 'stderr')) {\n                    level = levelError;\n                }\n                logger.log({ type: 'output', data, level });\n            }\n        }\n        // There is overlap here since unhandled messages are also emitted in the\n        // iopubMessage signal. However, unhandled messages warrant a higher log\n        // severity, so we'll accept that they are logged twice.\n        nb.context.sessionContext.iopubMessage.connect((_, msg) => logOutput(msg, 'info', 'info'));\n        nb.context.sessionContext.unhandledMessage.connect((_, msg) => logOutput(msg, 'warning', 'error'));\n    }\n    nbtracker.forEach(nb => registerNB(nb));\n    nbtracker.widgetAdded.connect((_, nb) => registerNB(nb));\n}\n//# sourceMappingURL=nboutput.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport React from 'react';\nimport { NotebookTools } from '@jupyterlab/notebook';\nimport { PanelLayout, Widget } from '@lumino/widgets';\nimport { InputPrompt } from '@jupyterlab/cells';\nimport { Debouncer } from '@lumino/polling';\n/**\n * The class name added to the ActiveCellTool.\n */\nconst ACTIVE_CELL_TOOL_CLASS = 'jp-ActiveCellTool';\n/**\n * The class name added to the ActiveCellTool content.\n */\nconst ACTIVE_CELL_TOOL_CONTENT_CLASS = 'jp-ActiveCellTool-Content';\n/**\n * The class name added to the ActiveCellTool cell content.\n */\nconst ACTIVE_CELL_TOOL_CELL_CONTENT_CLASS = 'jp-ActiveCellTool-CellContent';\n/**\n * The active cell field, displaying the first line and execution count of the active cell.\n *\n * ## Note\n * This field does not work as other metadata form fields, as it does not update metadata.\n */\nexport class ActiveCellTool extends NotebookTools.Tool {\n    constructor(options) {\n        super();\n        const { languages } = options;\n        this._tracker = options.tracker;\n        this.addClass(ACTIVE_CELL_TOOL_CLASS);\n        this.layout = new PanelLayout();\n        this._inputPrompt = new InputPrompt();\n        this.layout.addWidget(this._inputPrompt);\n        // First code line container\n        const node = document.createElement('div');\n        node.classList.add(ACTIVE_CELL_TOOL_CONTENT_CLASS);\n        const container = node.appendChild(document.createElement('div'));\n        const editor = container.appendChild(document.createElement('pre'));\n        container.className = ACTIVE_CELL_TOOL_CELL_CONTENT_CLASS;\n        this._editorEl = editor;\n        this.layout.addWidget(new Widget({ node }));\n        const update = async () => {\n            var _a, _b;\n            this._editorEl.innerHTML = '';\n            if (((_a = this._cellModel) === null || _a === void 0 ? void 0 : _a.type) === 'code') {\n                this._inputPrompt.executionCount = `${(_b = this._cellModel.executionCount) !== null && _b !== void 0 ? _b : ''}`;\n                this._inputPrompt.show();\n            }\n            else {\n                this._inputPrompt.executionCount = null;\n                this._inputPrompt.hide();\n            }\n            if (this._cellModel) {\n                await languages.highlight(this._cellModel.sharedModel.getSource().split('\\n')[0], languages.findByMIME(this._cellModel.mimeType), this._editorEl);\n            }\n        };\n        this._refreshDebouncer = new Debouncer(update, 150);\n    }\n    render(props) {\n        var _a, _b;\n        const activeCell = this._tracker.activeCell;\n        if (activeCell)\n            this._cellModel = (activeCell === null || activeCell === void 0 ? void 0 : activeCell.model) || null;\n        ((_a = this._cellModel) === null || _a === void 0 ? void 0 : _a.sharedModel).changed.connect(this.refresh, this);\n        (_b = this._cellModel) === null || _b === void 0 ? void 0 : _b.mimeTypeChanged.connect(this.refresh, this);\n        this.refresh()\n            .then(() => undefined)\n            .catch(() => undefined);\n        return React.createElement(\"div\", { ref: ref => ref === null || ref === void 0 ? void 0 : ref.appendChild(this.node) });\n    }\n    async refresh() {\n        await this._refreshDebouncer.invoke();\n    }\n}\n//# sourceMappingURL=activeCellToolWidget.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport React from 'react';\nimport { NotebookTools } from '@jupyterlab/notebook';\nimport { ObservableJSON } from '@jupyterlab/observables';\nconst CELL_METADATA_EDITOR_CLASS = 'jp-CellMetadataEditor';\nconst NOTEBOOK_METADATA_EDITOR_CLASS = 'jp-NotebookMetadataEditor';\n/**\n * The cell metadata field.\n *\n * ## Note\n * This field does not work as other metadata form fields, as it does not use RJSF to update metadata.\n * It extends the MetadataEditorTool which updates itself the metadata.\n * It only renders the node of MetadataEditorTool in a React element instead of displaying a RJSF field.\n */\nexport class CellMetadataField extends NotebookTools.MetadataEditorTool {\n    constructor(options) {\n        super(options);\n        this._tracker = options.tracker;\n        this.editor.editorHostNode.addEventListener('blur', this.editor, true);\n        this.editor.editorHostNode.addEventListener('click', this.editor, true);\n        this.editor.headerNode.addEventListener('click', this.editor);\n    }\n    _onSourceChanged() {\n        var _a, _b, _c;\n        const activeCell = (_a = this._tracker.activeCell) === null || _a === void 0 ? void 0 : _a.model.sharedModel;\n        if (activeCell && this.editor.source) {\n            const metadataKeys = Object.keys((_b = activeCell.metadata) !== null && _b !== void 0 ? _b : {});\n            const source = (_c = this.editor.source.toJSON()) !== null && _c !== void 0 ? _c : {};\n            activeCell.transact(() => {\n                // Iterate over all existing metadata keys and delete each one.\n                // This ensures that any keys not present in the new metadata are removed.\n                metadataKeys.forEach(key => activeCell.deleteMetadata(key));\n                activeCell.setMetadata(source);\n            });\n        }\n    }\n    render(props) {\n        var _a;\n        const cell = this._tracker.activeCell;\n        this.editor.source = cell\n            ? new ObservableJSON({ values: cell.model.metadata })\n            : null;\n        (_a = this.editor.source) === null || _a === void 0 ? void 0 : _a.changed.connect(this._onSourceChanged, this);\n        return (React.createElement(\"div\", { className: CELL_METADATA_EDITOR_CLASS },\n            React.createElement(\"div\", { ref: ref => ref === null || ref === void 0 ? void 0 : ref.appendChild(this.node) })));\n    }\n}\n/**\n * The notebook metadata field.\n *\n * ## Note\n * This field does not work as other metadata form fields, as it does not use RJSF to update metadata.\n * It extends the MetadataEditorTool which updates itself the metadata.\n * It only renders the node of MetadataEditorTool in a React element instead of displaying a RJSF field.\n */\nexport class NotebookMetadataField extends NotebookTools.MetadataEditorTool {\n    constructor(options) {\n        super(options);\n        this._tracker = options.tracker;\n        this.editor.editorHostNode.addEventListener('blur', this.editor, true);\n        this.editor.editorHostNode.addEventListener('click', this.editor, true);\n        this.editor.headerNode.addEventListener('click', this.editor);\n    }\n    _onSourceChanged() {\n        var _a, _b;\n        if (this.editor.source) {\n            (_b = (_a = this._tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.model) === null || _b === void 0 ? void 0 : _b.sharedModel.setMetadata(this.editor.source.toJSON());\n        }\n    }\n    render(props) {\n        var _a, _b;\n        const notebook = this._tracker.currentWidget;\n        this.editor.source = notebook\n            ? new ObservableJSON({ values: (_a = notebook.model) === null || _a === void 0 ? void 0 : _a.metadata })\n            : null;\n        (_b = this.editor.source) === null || _b === void 0 ? void 0 : _b.changed.connect(this._onSourceChanged, this);\n        return (React.createElement(\"div\", { className: NOTEBOOK_METADATA_EDITOR_CLASS },\n            React.createElement(\"div\", { ref: ref => ref === null || ref === void 0 ? void 0 : ref.appendChild(this.node) })));\n    }\n}\n//# sourceMappingURL=metadataEditorFields.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module notebook-extension\n */\nimport { ILabShell, ILayoutRestorer, IRouter } from '@jupyterlab/application';\nimport { createToolbarFactory, Dialog, ICommandPalette, IKernelStatusModel, InputDialog, ISanitizer, ISessionContextDialogs, IToolbarWidgetRegistry, MainAreaWidget, Sanitizer, SemanticCommand, SessionContextDialogs, showDialog, Toolbar, WidgetTracker } from '@jupyterlab/apputils';\nimport { MarkdownCell } from '@jupyterlab/cells';\nimport { IEditorServices, IPositionModel } from '@jupyterlab/codeeditor';\nimport { PageConfig } from '@jupyterlab/coreutils';\nimport { IEditorExtensionRegistry, IEditorLanguageRegistry } from '@jupyterlab/codemirror';\nimport { ICompletionProviderManager } from '@jupyterlab/completer';\nimport { IDocumentManager } from '@jupyterlab/docmanager';\nimport { ToolbarItems as DocToolbarItems } from '@jupyterlab/docmanager-extension';\nimport { ISearchProviderRegistry } from '@jupyterlab/documentsearch';\nimport { IDefaultFileBrowser, IFileBrowserFactory } from '@jupyterlab/filebrowser';\nimport { ILauncher } from '@jupyterlab/launcher';\nimport { ILSPCodeExtractorsManager, ILSPDocumentConnectionManager, ILSPFeatureManager, IWidgetLSPAdapterTracker } from '@jupyterlab/lsp';\nimport { IMainMenu } from '@jupyterlab/mainmenu';\nimport { IMetadataFormProvider } from '@jupyterlab/metadataform';\nimport { CommandEditStatus, ExecutionIndicator, INotebookCellExecutor, INotebookTools, INotebookTracker, INotebookWidgetFactory, NotebookActions, NotebookAdapter, NotebookModelFactory, NotebookPanel, NotebookSearchProvider, NotebookToCFactory, NotebookTools, NotebookTracker, NotebookTrustStatus, NotebookWidgetFactory, setCellExecutor, StaticNotebook, ToolbarItems } from '@jupyterlab/notebook';\nimport { IPropertyInspectorProvider } from '@jupyterlab/property-inspector';\nimport { IMarkdownParser, IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { IStateDB } from '@jupyterlab/statedb';\nimport { IStatusBar } from '@jupyterlab/statusbar';\nimport { ITableOfContentsRegistry } from '@jupyterlab/toc';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { addAboveIcon, addBelowIcon, buildIcon, copyIcon, cutIcon, duplicateIcon, fastForwardIcon, IFormRendererRegistry, moveDownIcon, moveUpIcon, notebookIcon, pasteIcon, refreshIcon, runIcon, stopIcon, tableRowsIcon } from '@jupyterlab/ui-components';\nimport { ArrayExt } from '@lumino/algorithm';\nimport { JSONExt, UUID } from '@lumino/coreutils';\nimport { DisposableSet } from '@lumino/disposable';\nimport { MessageLoop } from '@lumino/messaging';\nimport { Panel } from '@lumino/widgets';\nimport { cellExecutor } from './cellexecutor';\nimport { logNotebookOutput } from './nboutput';\nimport { ActiveCellTool } from './tool-widgets/activeCellToolWidget';\nimport { CellMetadataField, NotebookMetadataField } from './tool-widgets/metadataEditorFields';\n/**\n * The command IDs used by the notebook plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.createNew = 'notebook:create-new';\n    CommandIDs.interrupt = 'notebook:interrupt-kernel';\n    CommandIDs.restart = 'notebook:restart-kernel';\n    CommandIDs.restartClear = 'notebook:restart-clear-output';\n    CommandIDs.restartAndRunToSelected = 'notebook:restart-and-run-to-selected';\n    CommandIDs.restartRunAll = 'notebook:restart-run-all';\n    CommandIDs.reconnectToKernel = 'notebook:reconnect-to-kernel';\n    CommandIDs.changeKernel = 'notebook:change-kernel';\n    CommandIDs.getKernel = 'notebook:get-kernel';\n    CommandIDs.createConsole = 'notebook:create-console';\n    CommandIDs.createSubshellConsole = 'notebook:create-subshell-console';\n    CommandIDs.createOutputView = 'notebook:create-output-view';\n    CommandIDs.clearAllOutputs = 'notebook:clear-all-cell-outputs';\n    CommandIDs.shutdown = 'notebook:shutdown-kernel';\n    CommandIDs.closeAndShutdown = 'notebook:close-and-shutdown';\n    CommandIDs.trust = 'notebook:trust';\n    CommandIDs.exportToFormat = 'notebook:export-to-format';\n    CommandIDs.run = 'notebook:run-cell';\n    CommandIDs.runAndAdvance = 'notebook:run-cell-and-select-next';\n    CommandIDs.runAndInsert = 'notebook:run-cell-and-insert-below';\n    CommandIDs.runInConsole = 'notebook:run-in-console';\n    CommandIDs.runAll = 'notebook:run-all-cells';\n    CommandIDs.runAllAbove = 'notebook:run-all-above';\n    CommandIDs.runAllBelow = 'notebook:run-all-below';\n    CommandIDs.renderAllMarkdown = 'notebook:render-all-markdown';\n    CommandIDs.toCode = 'notebook:change-cell-to-code';\n    CommandIDs.toMarkdown = 'notebook:change-cell-to-markdown';\n    CommandIDs.toRaw = 'notebook:change-cell-to-raw';\n    CommandIDs.cut = 'notebook:cut-cell';\n    CommandIDs.copy = 'notebook:copy-cell';\n    CommandIDs.pasteAbove = 'notebook:paste-cell-above';\n    CommandIDs.pasteBelow = 'notebook:paste-cell-below';\n    CommandIDs.duplicateBelow = 'notebook:duplicate-below';\n    CommandIDs.pasteAndReplace = 'notebook:paste-and-replace-cell';\n    CommandIDs.moveUp = 'notebook:move-cell-up';\n    CommandIDs.moveDown = 'notebook:move-cell-down';\n    CommandIDs.clearOutputs = 'notebook:clear-cell-output';\n    CommandIDs.deleteCell = 'notebook:delete-cell';\n    CommandIDs.insertAbove = 'notebook:insert-cell-above';\n    CommandIDs.insertBelow = 'notebook:insert-cell-below';\n    CommandIDs.selectAbove = 'notebook:move-cursor-up';\n    CommandIDs.selectBelow = 'notebook:move-cursor-down';\n    CommandIDs.selectHeadingAboveOrCollapse = 'notebook:move-cursor-heading-above-or-collapse';\n    CommandIDs.selectHeadingBelowOrExpand = 'notebook:move-cursor-heading-below-or-expand';\n    CommandIDs.insertHeadingAbove = 'notebook:insert-heading-above';\n    CommandIDs.insertHeadingBelow = 'notebook:insert-heading-below';\n    CommandIDs.extendAbove = 'notebook:extend-marked-cells-above';\n    CommandIDs.extendTop = 'notebook:extend-marked-cells-top';\n    CommandIDs.extendBelow = 'notebook:extend-marked-cells-below';\n    CommandIDs.extendBottom = 'notebook:extend-marked-cells-bottom';\n    CommandIDs.selectAll = 'notebook:select-all';\n    CommandIDs.deselectAll = 'notebook:deselect-all';\n    CommandIDs.editMode = 'notebook:enter-edit-mode';\n    CommandIDs.merge = 'notebook:merge-cells';\n    CommandIDs.mergeAbove = 'notebook:merge-cell-above';\n    CommandIDs.mergeBelow = 'notebook:merge-cell-below';\n    CommandIDs.split = 'notebook:split-cell-at-cursor';\n    CommandIDs.commandMode = 'notebook:enter-command-mode';\n    CommandIDs.toggleAllLines = 'notebook:toggle-all-cell-line-numbers';\n    CommandIDs.undoCellAction = 'notebook:undo-cell-action';\n    CommandIDs.redoCellAction = 'notebook:redo-cell-action';\n    CommandIDs.redo = 'notebook:redo';\n    CommandIDs.undo = 'notebook:undo';\n    CommandIDs.markdown1 = 'notebook:change-cell-to-heading-1';\n    CommandIDs.markdown2 = 'notebook:change-cell-to-heading-2';\n    CommandIDs.markdown3 = 'notebook:change-cell-to-heading-3';\n    CommandIDs.markdown4 = 'notebook:change-cell-to-heading-4';\n    CommandIDs.markdown5 = 'notebook:change-cell-to-heading-5';\n    CommandIDs.markdown6 = 'notebook:change-cell-to-heading-6';\n    CommandIDs.hideCode = 'notebook:hide-cell-code';\n    CommandIDs.showCode = 'notebook:show-cell-code';\n    CommandIDs.hideAllCode = 'notebook:hide-all-cell-code';\n    CommandIDs.showAllCode = 'notebook:show-all-cell-code';\n    CommandIDs.hideOutput = 'notebook:hide-cell-outputs';\n    CommandIDs.showOutput = 'notebook:show-cell-outputs';\n    CommandIDs.toggleOutput = 'notebook:toggle-cell-outputs';\n    CommandIDs.hideAllOutputs = 'notebook:hide-all-cell-outputs';\n    CommandIDs.showAllOutputs = 'notebook:show-all-cell-outputs';\n    CommandIDs.toggleRenderSideBySideCurrentNotebook = 'notebook:toggle-render-side-by-side-current';\n    CommandIDs.setSideBySideRatio = 'notebook:set-side-by-side-ratio';\n    CommandIDs.enableOutputScrolling = 'notebook:enable-output-scrolling';\n    CommandIDs.disableOutputScrolling = 'notebook:disable-output-scrolling';\n    CommandIDs.selectLastRunCell = 'notebook:select-last-run-cell';\n    CommandIDs.replaceSelection = 'notebook:replace-selection';\n    CommandIDs.autoClosingBrackets = 'notebook:toggle-autoclosing-brackets';\n    CommandIDs.toggleCollapseCmd = 'notebook:toggle-heading-collapse';\n    CommandIDs.collapseAllCmd = 'notebook:collapse-all-headings';\n    CommandIDs.expandAllCmd = 'notebook:expand-all-headings';\n    CommandIDs.copyToClipboard = 'notebook:copy-to-clipboard';\n    CommandIDs.invokeCompleter = 'completer:invoke-notebook';\n    CommandIDs.selectCompleter = 'completer:select-notebook';\n    CommandIDs.tocRunCells = 'toc:run-cells';\n    CommandIDs.accessPreviousHistory = 'notebook:access-previous-history-entry';\n    CommandIDs.accessNextHistory = 'notebook:access-next-history-entry';\n    CommandIDs.virtualScrollbar = 'notebook:toggle-virtual-scrollbar';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The name of the factory that creates notebooks.\n */\nconst FACTORY = 'Notebook';\n/**\n * The excluded Export To ...\n * (returned from nbconvert's export list)\n */\nconst FORMAT_EXCLUDE = ['notebook', 'python', 'custom'];\n/**\n * Setting Id storing the customized toolbar definition.\n */\nconst PANEL_SETTINGS = '@jupyterlab/notebook-extension:panel';\n/**\n * The id to use on the style tag for the side by side margins.\n */\nconst SIDE_BY_SIDE_STYLE_ID = 'jp-NotebookExtension-sideBySideMargins';\n/**\n * The notebook widget tracker provider.\n */\nconst trackerPlugin = {\n    id: '@jupyterlab/notebook-extension:tracker',\n    description: 'Provides the notebook widget tracker.',\n    provides: INotebookTracker,\n    requires: [\n        INotebookWidgetFactory,\n        IEditorExtensionRegistry,\n        INotebookCellExecutor\n    ],\n    optional: [\n        ICommandPalette,\n        IDefaultFileBrowser,\n        ILauncher,\n        ILayoutRestorer,\n        IMainMenu,\n        IRouter,\n        ISettingRegistry,\n        ISessionContextDialogs,\n        ITranslator,\n        IFormRendererRegistry,\n        IFileBrowserFactory\n    ],\n    activate: activateNotebookHandler,\n    autoStart: true\n};\n/**\n * The notebook cell factory provider.\n */\nconst factory = {\n    id: '@jupyterlab/notebook-extension:factory',\n    description: 'Provides the notebook cell factory.',\n    provides: NotebookPanel.IContentFactory,\n    requires: [IEditorServices],\n    autoStart: true,\n    activate: (app, editorServices) => {\n        const editorFactory = editorServices.factoryService.newInlineEditor;\n        return new NotebookPanel.ContentFactory({ editorFactory });\n    }\n};\n/**\n * The notebook tools extension.\n */\nconst tools = {\n    activate: activateNotebookTools,\n    provides: INotebookTools,\n    id: '@jupyterlab/notebook-extension:tools',\n    description: 'Provides the notebook tools.',\n    autoStart: true,\n    requires: [\n        INotebookTracker,\n        IEditorServices,\n        IEditorLanguageRegistry,\n        IStateDB,\n        ITranslator\n    ],\n    optional: [IPropertyInspectorProvider]\n};\n/**\n * A plugin providing a CommandEdit status item.\n */\nexport const commandEditItem = {\n    id: '@jupyterlab/notebook-extension:mode-status',\n    description: 'Adds a notebook mode status widget.',\n    autoStart: true,\n    requires: [INotebookTracker, ITranslator],\n    optional: [IStatusBar],\n    activate: (app, tracker, translator, statusBar) => {\n        if (!statusBar) {\n            // Automatically disable if statusbar missing\n            return;\n        }\n        const { shell } = app;\n        const item = new CommandEditStatus(translator);\n        // Keep the status item up-to-date with the current notebook.\n        tracker.currentChanged.connect(() => {\n            const current = tracker.currentWidget;\n            item.model.notebook = current && current.content;\n        });\n        statusBar.registerStatusItem('@jupyterlab/notebook-extension:mode-status', {\n            priority: 1,\n            item,\n            align: 'right',\n            rank: 4,\n            isActive: () => !!shell.currentWidget &&\n                !!tracker.currentWidget &&\n                shell.currentWidget === tracker.currentWidget\n        });\n    }\n};\n/**\n * A plugin that provides a execution indicator item to the status bar.\n */\nexport const executionIndicator = {\n    id: '@jupyterlab/notebook-extension:execution-indicator',\n    description: 'Adds a notebook execution status widget.',\n    autoStart: true,\n    requires: [INotebookTracker, ILabShell, ITranslator],\n    optional: [IStatusBar, ISettingRegistry],\n    activate: (app, notebookTracker, labShell, translator, statusBar, settingRegistry) => {\n        let statusbarItem;\n        let labShellCurrentChanged;\n        let statusBarDisposable;\n        const updateSettings = (settings) => {\n            var _a, _b;\n            let { showOnToolBar, showProgress } = settings;\n            if (!showOnToolBar) {\n                // Status bar mode, only one `ExecutionIndicator` is needed.\n                if (!statusBar) {\n                    // Automatically disable if statusbar missing\n                    return;\n                }\n                if (!(statusbarItem === null || statusbarItem === void 0 ? void 0 : statusbarItem.model)) {\n                    statusbarItem = new ExecutionIndicator(translator);\n                    labShellCurrentChanged = (_, change) => {\n                        const { newValue } = change;\n                        if (newValue && notebookTracker.has(newValue)) {\n                            const panel = newValue;\n                            statusbarItem.model.attachNotebook({\n                                content: panel.content,\n                                context: panel.sessionContext\n                            });\n                        }\n                    };\n                    statusBarDisposable = statusBar.registerStatusItem('@jupyterlab/notebook-extension:execution-indicator', {\n                        item: statusbarItem,\n                        align: 'left',\n                        rank: 3,\n                        isActive: () => {\n                            const current = labShell.currentWidget;\n                            return !!current && notebookTracker.has(current);\n                        }\n                    });\n                    statusbarItem.model.attachNotebook({\n                        content: (_a = notebookTracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content,\n                        context: (_b = notebookTracker.currentWidget) === null || _b === void 0 ? void 0 : _b.sessionContext\n                    });\n                    labShell.currentChanged.connect(labShellCurrentChanged);\n                    statusbarItem.disposed.connect(() => {\n                        labShell.currentChanged.disconnect(labShellCurrentChanged);\n                    });\n                }\n                statusbarItem.model.displayOption = {\n                    showOnToolBar,\n                    showProgress\n                };\n            }\n            else {\n                //Remove old indicator widget on status bar\n                if (statusBarDisposable) {\n                    labShell.currentChanged.disconnect(labShellCurrentChanged);\n                    statusBarDisposable.dispose();\n                }\n            }\n        };\n        if (settingRegistry) {\n            // Indicator is default in tool bar, user needs to specify its\n            // position in settings in order to have indicator on status bar.\n            const loadSettings = settingRegistry.load(trackerPlugin.id);\n            Promise.all([loadSettings, app.restored])\n                .then(([settings]) => {\n                updateSettings(ExecutionIndicator.getSettingValue(settings));\n                settings.changed.connect(sender => updateSettings(ExecutionIndicator.getSettingValue(sender)));\n            })\n                .catch((reason) => {\n                console.error(reason.message);\n            });\n        }\n    }\n};\n/**\n * A plugin providing export commands in the main menu and command palette\n */\nexport const exportPlugin = {\n    id: '@jupyterlab/notebook-extension:export',\n    description: 'Adds the export notebook commands.',\n    autoStart: true,\n    requires: [ITranslator, INotebookTracker],\n    optional: [IMainMenu, ICommandPalette],\n    activate: (app, translator, tracker, mainMenu, palette) => {\n        var _a;\n        const trans = translator.load('jupyterlab');\n        const { commands, shell } = app;\n        const services = app.serviceManager;\n        const isEnabled = () => {\n            return Private.isEnabled(shell, tracker);\n        };\n        commands.addCommand(CommandIDs.exportToFormat, {\n            label: args => {\n                if (args.label === undefined) {\n                    return trans.__('Save and Export Notebook to the given `format`.');\n                }\n                const formatLabel = args['label'];\n                return args['isPalette']\n                    ? trans.__('Save and Export Notebook: %1', formatLabel)\n                    : formatLabel;\n            },\n            execute: args => {\n                const current = getCurrent(tracker, shell, args);\n                if (!current) {\n                    return;\n                }\n                const url = PageConfig.getNBConvertURL({\n                    format: args['format'],\n                    download: true,\n                    path: current.context.path\n                });\n                const { context } = current;\n                if (context.model.dirty && !context.model.readOnly) {\n                    return context.save().then(() => {\n                        window.open(url, '_blank', 'noopener');\n                    });\n                }\n                return new Promise(resolve => {\n                    window.open(url, '_blank', 'noopener');\n                    resolve(undefined);\n                });\n            },\n            isEnabled\n        });\n        // Add a notebook group to the File menu.\n        let exportTo;\n        if (mainMenu) {\n            exportTo = (_a = mainMenu.fileMenu.items.find(item => {\n                var _a;\n                return item.type === 'submenu' &&\n                    ((_a = item.submenu) === null || _a === void 0 ? void 0 : _a.id) === 'jp-mainmenu-file-notebookexport';\n            })) === null || _a === void 0 ? void 0 : _a.submenu;\n        }\n        let formatsInitialized = false;\n        /** Request formats only when a notebook might use them. */\n        const maybeInitializeFormats = async () => {\n            if (formatsInitialized) {\n                return;\n            }\n            tracker.widgetAdded.disconnect(maybeInitializeFormats);\n            formatsInitialized = true;\n            const response = await services.nbconvert.getExportFormats(false);\n            if (!response) {\n                return;\n            }\n            const formatLabels = Private.getFormatLabels(translator);\n            // Convert export list to palette and menu items.\n            const formatList = Object.keys(response);\n            formatList.forEach(function (key) {\n                const capCaseKey = trans.__(key[0].toUpperCase() + key.substr(1));\n                const labelStr = formatLabels[key] ? formatLabels[key] : capCaseKey;\n                let args = {\n                    format: key,\n                    label: labelStr,\n                    isPalette: false\n                };\n                if (FORMAT_EXCLUDE.indexOf(key) === -1) {\n                    if (exportTo) {\n                        exportTo.addItem({\n                            command: CommandIDs.exportToFormat,\n                            args: args\n                        });\n                    }\n                    if (palette) {\n                        args = {\n                            format: key,\n                            label: labelStr,\n                            isPalette: true\n                        };\n                        const category = trans.__('Notebook Operations');\n                        palette.addItem({\n                            command: CommandIDs.exportToFormat,\n                            category,\n                            args\n                        });\n                    }\n                }\n            });\n        };\n        tracker.widgetAdded.connect(maybeInitializeFormats);\n    }\n};\n/**\n * A plugin that adds a notebook trust status item to the status bar.\n */\nexport const notebookTrustItem = {\n    id: '@jupyterlab/notebook-extension:trust-status',\n    description: 'Adds the notebook trusted status widget.',\n    autoStart: true,\n    requires: [INotebookTracker, ITranslator],\n    optional: [IStatusBar],\n    activate: (app, tracker, translator, statusBar) => {\n        if (!statusBar) {\n            // Automatically disable if statusbar missing\n            return;\n        }\n        const { shell } = app;\n        const item = new NotebookTrustStatus(translator);\n        // Keep the status item up-to-date with the current notebook.\n        tracker.currentChanged.connect(() => {\n            const current = tracker.currentWidget;\n            item.model.notebook = current && current.content;\n        });\n        statusBar.registerStatusItem('@jupyterlab/notebook-extension:trust-status', {\n            item,\n            align: 'right',\n            rank: 3,\n            isActive: () => !!shell.currentWidget &&\n                !!tracker.currentWidget &&\n                shell.currentWidget === tracker.currentWidget\n        });\n    }\n};\n/**\n * The notebook widget factory provider.\n */\nconst widgetFactoryPlugin = {\n    id: '@jupyterlab/notebook-extension:widget-factory',\n    description: 'Provides the notebook widget factory.',\n    provides: INotebookWidgetFactory,\n    requires: [\n        NotebookPanel.IContentFactory,\n        IEditorServices,\n        IRenderMimeRegistry,\n        IToolbarWidgetRegistry\n    ],\n    optional: [ISettingRegistry, ISessionContextDialogs, ITranslator],\n    activate: activateWidgetFactory,\n    autoStart: true\n};\n/**\n * The cloned output provider.\n */\nconst clonedOutputsPlugin = {\n    id: '@jupyterlab/notebook-extension:cloned-outputs',\n    description: 'Adds the clone output feature.',\n    requires: [IDocumentManager, INotebookTracker, ITranslator],\n    optional: [ILayoutRestorer],\n    activate: activateClonedOutputs,\n    autoStart: true\n};\n/**\n * A plugin for code consoles functionalities.\n */\nconst codeConsolePlugin = {\n    id: '@jupyterlab/notebook-extension:code-console',\n    description: 'Adds the notebook code consoles features.',\n    requires: [INotebookTracker, ITranslator],\n    activate: activateCodeConsole,\n    autoStart: true\n};\n/**\n * A plugin to copy CodeCell outputs.\n */\nconst copyOutputPlugin = {\n    id: '@jupyterlab/notebook-extension:copy-output',\n    description: 'Adds the copy cell outputs feature.',\n    activate: activateCopyOutput,\n    requires: [ITranslator, INotebookTracker],\n    autoStart: true\n};\n/**\n * Kernel status indicator.\n */\nconst kernelStatus = {\n    id: '@jupyterlab/notebook-extension:kernel-status',\n    description: 'Adds the notebook kernel status.',\n    activate: (app, tracker, kernelStatus) => {\n        const provider = (widget) => {\n            let session = null;\n            if (widget && tracker.has(widget)) {\n                return widget.sessionContext;\n            }\n            return session;\n        };\n        kernelStatus.addSessionProvider(provider);\n    },\n    requires: [INotebookTracker, IKernelStatusModel],\n    autoStart: true\n};\n/**\n * Cursor position.\n */\nconst lineColStatus = {\n    id: '@jupyterlab/notebook-extension:cursor-position',\n    description: 'Adds the notebook cursor position status.',\n    activate: (app, tracker, positionModel) => {\n        let previousWidget = null;\n        const provider = async (widget) => {\n            let editor = null;\n            if (widget !== previousWidget) {\n                previousWidget === null || previousWidget === void 0 ? void 0 : previousWidget.content.activeCellChanged.disconnect(positionModel.update);\n                previousWidget = null;\n                if (widget && tracker.has(widget)) {\n                    widget.content.activeCellChanged.connect(positionModel.update);\n                    const activeCell = widget.content.activeCell;\n                    editor = null;\n                    if (activeCell) {\n                        await activeCell.ready;\n                        editor = activeCell.editor;\n                    }\n                    previousWidget = widget;\n                }\n            }\n            else if (widget) {\n                const activeCell = widget.content.activeCell;\n                editor = null;\n                if (activeCell) {\n                    await activeCell.ready;\n                    editor = activeCell.editor;\n                }\n            }\n            return editor;\n        };\n        positionModel.addEditorProvider(provider);\n    },\n    requires: [INotebookTracker, IPositionModel],\n    autoStart: true\n};\nconst completerPlugin = {\n    id: '@jupyterlab/notebook-extension:completer',\n    description: 'Adds the code completion capability to notebooks.',\n    requires: [INotebookTracker],\n    optional: [ICompletionProviderManager, ITranslator, ISanitizer],\n    activate: activateNotebookCompleterService,\n    autoStart: true\n};\n/**\n * A plugin to search notebook documents\n */\nconst searchProvider = {\n    id: '@jupyterlab/notebook-extension:search',\n    description: 'Adds search capability to notebooks.',\n    requires: [ISearchProviderRegistry],\n    autoStart: true,\n    activate: (app, registry) => {\n        registry.add('jp-notebookSearchProvider', NotebookSearchProvider);\n    }\n};\nconst tocPlugin = {\n    id: '@jupyterlab/notebook-extension:toc',\n    description: 'Adds table of content capability to the notebooks',\n    requires: [INotebookTracker, ITableOfContentsRegistry, ISanitizer],\n    optional: [IMarkdownParser, ISettingRegistry],\n    autoStart: true,\n    activate: (app, tracker, tocRegistry, sanitizer, mdParser, settingRegistry) => {\n        const nbTocFactory = new NotebookToCFactory(tracker, mdParser, sanitizer);\n        tocRegistry.add(nbTocFactory);\n        if (settingRegistry) {\n            Promise.all([app.restored, settingRegistry.load(trackerPlugin.id)])\n                .then(([_, setting]) => {\n                const onSettingsUpdate = () => {\n                    var _a;\n                    nbTocFactory.scrollToTop =\n                        (_a = setting.composite['scrollHeadingToTop']) !== null && _a !== void 0 ? _a : true;\n                };\n                onSettingsUpdate();\n                setting.changed.connect(onSettingsUpdate);\n            })\n                .catch(error => {\n                console.error('Failed to load notebook table of content settings.', error);\n            });\n        }\n    }\n};\nconst languageServerPlugin = {\n    id: '@jupyterlab/notebook-extension:language-server',\n    description: 'Adds language server capability to the notebooks.',\n    requires: [\n        INotebookTracker,\n        ILSPDocumentConnectionManager,\n        ILSPFeatureManager,\n        ILSPCodeExtractorsManager,\n        IWidgetLSPAdapterTracker\n    ],\n    activate: activateNotebookLanguageServer,\n    autoStart: true\n};\n/**\n * Metadata editor for the raw cell mimetype.\n */\nconst updateRawMimetype = {\n    id: '@jupyterlab/notebook-extension:update-raw-mimetype',\n    description: 'Adds metadata form editor for raw cell mimetype.',\n    autoStart: true,\n    requires: [INotebookTracker, IMetadataFormProvider, ITranslator],\n    activate: (app, tracker, metadataForms, translator) => {\n        const trans = translator.load('jupyterlab');\n        let formatsInitialized = false;\n        async function maybeInitializeFormats() {\n            if (formatsInitialized) {\n                return;\n            }\n            if (!metadataForms.get('commonToolsSection')) {\n                return;\n            }\n            const properties = metadataForms\n                .get('commonToolsSection')\n                .getProperties('/raw_mimetype');\n            if (!properties) {\n                return;\n            }\n            tracker.widgetAdded.disconnect(maybeInitializeFormats);\n            formatsInitialized = true;\n            const services = app.serviceManager;\n            const response = await services.nbconvert.getExportFormats(false);\n            if (!response) {\n                return;\n            }\n            // convert exportList to palette and menu items\n            const formatList = Object.keys(response);\n            const formatLabels = Private.getFormatLabels(translator);\n            formatList.forEach(function (key) {\n                var _a;\n                const mimetypeExists = ((_a = properties.oneOf) === null || _a === void 0 ? void 0 : _a.filter(value => value.const === key).length) > 0;\n                if (!mimetypeExists) {\n                    const altOption = trans.__(key[0].toUpperCase() + key.substr(1));\n                    const option = formatLabels[key] ? formatLabels[key] : altOption;\n                    const mimeTypeValue = response[key].output_mimetype;\n                    properties.oneOf.push({\n                        const: mimeTypeValue,\n                        title: option\n                    });\n                }\n            });\n            metadataForms\n                .get('commonToolsSection')\n                .setProperties('/raw_mimetype', properties);\n        }\n        tracker.widgetAdded.connect(maybeInitializeFormats);\n    }\n};\n/**\n * Registering metadata editor fields.\n */\nconst customMetadataEditorFields = {\n    id: '@jupyterlab/notebook-extension:metadata-editor',\n    description: 'Adds metadata form for full metadata editor.',\n    autoStart: true,\n    requires: [INotebookTracker, IEditorServices, IFormRendererRegistry],\n    optional: [ITranslator],\n    activate: (app, tracker, editorServices, formRegistry, translator) => {\n        const editorFactory = options => editorServices.factoryService.newInlineEditor(options);\n        // Register the custom fields.\n        const cellComponent = {\n            fieldRenderer: (props) => {\n                return new CellMetadataField({\n                    editorFactory,\n                    tracker,\n                    label: 'Cell metadata',\n                    translator: translator\n                }).render(props);\n            }\n        };\n        formRegistry.addRenderer('@jupyterlab/notebook-extension:metadata-editor.cell-metadata', cellComponent);\n        const notebookComponent = {\n            fieldRenderer: (props) => {\n                return new NotebookMetadataField({\n                    editorFactory,\n                    tracker,\n                    label: 'Notebook metadata',\n                    translator: translator\n                }).render(props);\n            }\n        };\n        formRegistry.addRenderer('@jupyterlab/notebook-extension:metadata-editor.notebook-metadata', notebookComponent);\n    }\n};\n/**\n * Registering active cell field.\n */\nconst activeCellTool = {\n    id: '@jupyterlab/notebook-extension:active-cell-tool',\n    description: 'Adds active cell field in the metadata editor tab.',\n    autoStart: true,\n    requires: [INotebookTracker, IFormRendererRegistry, IEditorLanguageRegistry],\n    activate: (\n    // Register the custom field.\n    app, tracker, formRegistry, languages) => {\n        const component = {\n            fieldRenderer: (props) => {\n                return new ActiveCellTool({\n                    tracker,\n                    languages\n                }).render(props);\n            }\n        };\n        formRegistry.addRenderer('@jupyterlab/notebook-extension:active-cell-tool.renderer', component);\n    }\n};\n/**\n * Export the plugins as default.\n */\nconst plugins = [\n    cellExecutor,\n    factory,\n    trackerPlugin,\n    executionIndicator,\n    exportPlugin,\n    tools,\n    commandEditItem,\n    notebookTrustItem,\n    widgetFactoryPlugin,\n    logNotebookOutput,\n    clonedOutputsPlugin,\n    codeConsolePlugin,\n    copyOutputPlugin,\n    kernelStatus,\n    lineColStatus,\n    completerPlugin,\n    searchProvider,\n    tocPlugin,\n    languageServerPlugin,\n    updateRawMimetype,\n    customMetadataEditorFields,\n    activeCellTool\n];\nexport default plugins;\n/**\n * Activate the notebook tools extension.\n */\nfunction activateNotebookTools(app, tracker, editorServices, languages, state, translator, inspectorProvider) {\n    const trans = translator.load('jupyterlab');\n    const id = 'notebook-tools';\n    const notebookTools = new NotebookTools({ tracker, translator });\n    // Create message hook for triggers to save to the database.\n    const hook = (sender, message) => {\n        switch (message.type) {\n            case 'activate-request':\n                void state.save(id, { open: true });\n                break;\n            case 'after-hide':\n            case 'close-request':\n                void state.remove(id);\n                break;\n            default:\n                break;\n        }\n        return true;\n    };\n    notebookTools.title.icon = buildIcon;\n    notebookTools.title.caption = trans.__('Notebook Tools');\n    notebookTools.id = id;\n    MessageLoop.installMessageHook(notebookTools, hook);\n    if (inspectorProvider) {\n        tracker.widgetAdded.connect((sender, panel) => {\n            const inspector = inspectorProvider.register(panel);\n            inspector.render(notebookTools);\n        });\n    }\n    return notebookTools;\n}\n/**\n * Activate the notebook widget factory.\n */\nfunction activateWidgetFactory(app, contentFactory, editorServices, rendermime, toolbarRegistry, settingRegistry, sessionContextDialogs_, translator_) {\n    const translator = translator_ !== null && translator_ !== void 0 ? translator_ : nullTranslator;\n    const sessionContextDialogs = sessionContextDialogs_ !== null && sessionContextDialogs_ !== void 0 ? sessionContextDialogs_ : new SessionContextDialogs({ translator });\n    const preferKernelOption = PageConfig.getOption('notebookStartsKernel');\n    // If the option is not set, assume `true`\n    const preferKernelValue = preferKernelOption === '' || preferKernelOption.toLowerCase() === 'true';\n    const { commands } = app;\n    let toolbarFactory;\n    // Register notebook toolbar widgets\n    toolbarRegistry.addFactory(FACTORY, 'save', panel => DocToolbarItems.createSaveButton(commands, panel.context.fileChanged));\n    toolbarRegistry.addFactory(FACTORY, 'cellType', panel => ToolbarItems.createCellTypeItem(panel, translator));\n    toolbarRegistry.addFactory(FACTORY, 'kernelName', panel => Toolbar.createKernelNameItem(panel.sessionContext, sessionContextDialogs, translator));\n    toolbarRegistry.addFactory(FACTORY, 'executionProgress', panel => {\n        const loadingSettings = settingRegistry === null || settingRegistry === void 0 ? void 0 : settingRegistry.load(trackerPlugin.id);\n        const indicator = ExecutionIndicator.createExecutionIndicatorItem(panel, translator, loadingSettings);\n        void (loadingSettings === null || loadingSettings === void 0 ? void 0 : loadingSettings.then(settings => {\n            panel.disposed.connect(() => {\n                settings.dispose();\n            });\n        }));\n        return indicator;\n    });\n    if (settingRegistry) {\n        // Create the factory\n        toolbarFactory = createToolbarFactory(toolbarRegistry, settingRegistry, FACTORY, PANEL_SETTINGS, translator);\n    }\n    const trans = translator.load('jupyterlab');\n    const factory = new NotebookWidgetFactory({\n        name: FACTORY,\n        label: trans.__('Notebook'),\n        fileTypes: ['notebook'],\n        modelName: 'notebook',\n        defaultFor: ['notebook'],\n        preferKernel: preferKernelValue,\n        canStartKernel: true,\n        rendermime,\n        contentFactory,\n        editorConfig: StaticNotebook.defaultEditorConfig,\n        notebookConfig: StaticNotebook.defaultNotebookConfig,\n        mimeTypeService: editorServices.mimeTypeService,\n        toolbarFactory,\n        translator\n    });\n    app.docRegistry.addWidgetFactory(factory);\n    return factory;\n}\n/**\n * Activate the plugin to create and track cloned outputs.\n */\nfunction activateClonedOutputs(app, docManager, notebookTracker, translator, restorer) {\n    const trans = translator.load('jupyterlab');\n    const clonedOutputs = new WidgetTracker({\n        namespace: 'cloned-outputs'\n    });\n    if (restorer) {\n        void restorer.restore(clonedOutputs, {\n            command: CommandIDs.createOutputView,\n            args: widget => ({\n                path: widget.content.path,\n                index: widget.content.index\n            }),\n            name: widget => `${widget.content.path}:${widget.content.index}`,\n            when: notebookTracker.restored // After the notebook widgets (but not contents).\n        });\n    }\n    const { commands, shell } = app;\n    const isEnabledAndSingleSelected = () => {\n        return Private.isEnabledAndSingleSelected(shell, notebookTracker);\n    };\n    commands.addCommand(CommandIDs.createOutputView, {\n        label: trans.__('Create New View for Cell Output'),\n        execute: async (args) => {\n            var _a;\n            let cell;\n            let current;\n            // If we are given a notebook path and cell index, then\n            // use that, otherwise use the current active cell.\n            const path = args.path;\n            let index = args.index;\n            if (path && index !== undefined && index !== null) {\n                current = docManager.findWidget(path, FACTORY);\n                if (!current) {\n                    return;\n                }\n            }\n            else {\n                current = notebookTracker.currentWidget;\n                if (!current) {\n                    return;\n                }\n                cell = current.content.activeCell;\n                index = current.content.activeCellIndex;\n            }\n            // Create a MainAreaWidget\n            const content = new Private.ClonedOutputArea({\n                notebook: current,\n                cell,\n                index,\n                translator\n            });\n            const widget = new MainAreaWidget({ content });\n            current.context.addSibling(widget, {\n                ref: current.id,\n                mode: 'split-bottom',\n                type: 'Cloned Output'\n            });\n            const updateCloned = () => {\n                void clonedOutputs.save(widget);\n            };\n            current.context.pathChanged.connect(updateCloned);\n            (_a = current.context.model) === null || _a === void 0 ? void 0 : _a.cells.changed.connect(updateCloned);\n            // Add the cloned output to the output widget tracker.\n            void clonedOutputs.add(widget);\n            // Remove the output view if the parent notebook is closed.\n            current.content.disposed.connect(() => {\n                var _a;\n                current.context.pathChanged.disconnect(updateCloned);\n                (_a = current.context.model) === null || _a === void 0 ? void 0 : _a.cells.changed.disconnect(updateCloned);\n                widget.dispose();\n            });\n        },\n        isEnabled: isEnabledAndSingleSelected\n    });\n}\n/**\n * Activate the plugin to add code console functionalities\n */\nfunction activateCodeConsole(app, tracker, translator) {\n    const trans = translator.load('jupyterlab');\n    const { commands, shell } = app;\n    const isEnabled = () => Private.isEnabled(shell, tracker);\n    commands.addCommand(CommandIDs.createConsole, {\n        label: trans.__('New Console for Notebook'),\n        execute: args => {\n            const current = tracker.currentWidget;\n            if (!current) {\n                return;\n            }\n            return Private.createConsole(commands, current, args['activate']);\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.createSubshellConsole, {\n        label: trans.__('New Subshell Console for Notebook'),\n        execute: args => {\n            const current = tracker.currentWidget;\n            if (!current) {\n                return;\n            }\n            return Private.createConsole(commands, current, args['activate'], true);\n        },\n        isEnabled,\n        isVisible: () => {\n            var _a, _b, _c;\n            const kernel = (_b = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.context.sessionContext.session) === null || _b === void 0 ? void 0 : _b.kernel;\n            return (_c = kernel === null || kernel === void 0 ? void 0 : kernel.supportsSubshells) !== null && _c !== void 0 ? _c : false;\n        }\n    });\n    commands.addCommand(CommandIDs.runInConsole, {\n        label: trans.__('Run Selected Text or Current Line in Console'),\n        execute: async (args) => {\n            var _a, _b;\n            // Default to not activating the notebook (thereby putting the notebook\n            // into command mode)\n            const current = tracker.currentWidget;\n            if (!current) {\n                return;\n            }\n            const { context, content } = current;\n            const cell = content.activeCell;\n            const metadata = cell === null || cell === void 0 ? void 0 : cell.model.metadata;\n            const path = context.path;\n            // ignore action in non-code cell\n            if (!cell || cell.model.type !== 'code') {\n                return;\n            }\n            let code;\n            const editor = cell.editor;\n            if (!editor) {\n                return;\n            }\n            const selection = editor.getSelection();\n            const { start, end } = selection;\n            const selected = start.column !== end.column || start.line !== end.line;\n            if (selected) {\n                // Get the selected code from the editor.\n                const start = editor.getOffsetAt(selection.start);\n                const end = editor.getOffsetAt(selection.end);\n                code = editor.model.sharedModel.getSource().substring(start, end);\n            }\n            else {\n                // no selection, find the complete statement around the current line\n                const cursor = editor.getCursorPosition();\n                const srcLines = editor.model.sharedModel.getSource().split('\\n');\n                let curLine = selection.start.line;\n                while (curLine < editor.lineCount &&\n                    !srcLines[curLine].replace(/\\s/g, '').length) {\n                    curLine += 1;\n                }\n                // if curLine > 0, we first do a search from beginning\n                let fromFirst = curLine > 0;\n                let firstLine = 0;\n                let lastLine = firstLine + 1;\n                // eslint-disable-next-line\n                while (true) {\n                    code = srcLines.slice(firstLine, lastLine).join('\\n');\n                    const reply = await ((_b = (_a = current.context.sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel) === null || _b === void 0 ? void 0 : _b.requestIsComplete({\n                        // ipython needs an empty line at the end to correctly identify completeness of indented code\n                        code: code + '\\n\\n'\n                    }));\n                    if ((reply === null || reply === void 0 ? void 0 : reply.content.status) === 'complete') {\n                        if (curLine < lastLine) {\n                            // we find a block of complete statement containing the current line, great!\n                            while (lastLine < editor.lineCount &&\n                                !srcLines[lastLine].replace(/\\s/g, '').length) {\n                                lastLine += 1;\n                            }\n                            editor.setCursorPosition({\n                                line: lastLine,\n                                column: cursor.column\n                            });\n                            break;\n                        }\n                        else {\n                            // discard the complete statement before the current line and continue\n                            firstLine = lastLine;\n                            lastLine = firstLine + 1;\n                        }\n                    }\n                    else if (lastLine < editor.lineCount) {\n                        // if incomplete and there are more lines, add the line and check again\n                        lastLine += 1;\n                    }\n                    else if (fromFirst) {\n                        // we search from the first line and failed, we search again from current line\n                        firstLine = curLine;\n                        lastLine = curLine + 1;\n                        fromFirst = false;\n                    }\n                    else {\n                        // if we have searched both from first line and from current line and we\n                        // cannot find anything, we submit the current line.\n                        code = srcLines[curLine];\n                        while (curLine + 1 < editor.lineCount &&\n                            !srcLines[curLine + 1].replace(/\\s/g, '').length) {\n                            curLine += 1;\n                        }\n                        editor.setCursorPosition({\n                            line: curLine + 1,\n                            column: cursor.column\n                        });\n                        break;\n                    }\n                }\n            }\n            if (!code) {\n                return;\n            }\n            await commands.execute('console:open', {\n                activate: false,\n                insertMode: 'split-bottom',\n                path\n            });\n            await commands.execute('console:inject', {\n                activate: false,\n                code,\n                path,\n                metadata\n            });\n        },\n        isEnabled\n    });\n}\n/**\n * Activate the output copying extension\n */\nfunction activateCopyOutput(app, translator, tracker) {\n    const trans = translator.load('jupyterlab');\n    /**\n     * Copy the contents of an HTMLElement to the system clipboard\n     */\n    function copyElement(e) {\n        const sel = window.getSelection();\n        if (sel == null) {\n            return;\n        }\n        // Save the current selection.\n        const savedRanges = [];\n        for (let i = 0; i < sel.rangeCount; ++i) {\n            savedRanges[i] = sel.getRangeAt(i).cloneRange();\n        }\n        const range = document.createRange();\n        range.selectNodeContents(e);\n        sel.removeAllRanges();\n        sel.addRange(range);\n        document.execCommand('copy');\n        // Restore the saved selection.\n        sel.removeAllRanges();\n        savedRanges.forEach(r => sel.addRange(r));\n    }\n    app.commands.addCommand(CommandIDs.copyToClipboard, {\n        label: trans.__('Copy Output to Clipboard'),\n        execute: args => {\n            var _a;\n            const cell = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content.activeCell;\n            if (cell == null) {\n                return;\n            }\n            const output = cell.outputArea.outputTracker.currentWidget;\n            if (output == null) {\n                return;\n            }\n            const outputAreaAreas = output.node.getElementsByClassName('jp-OutputArea-output');\n            if (outputAreaAreas.length > 0) {\n                const area = outputAreaAreas[0];\n                copyElement(area);\n            }\n        }\n    });\n    app.contextMenu.addItem({\n        command: CommandIDs.copyToClipboard,\n        selector: '.jp-Notebook .jp-OutputArea-child',\n        rank: 0\n    });\n}\n/**\n * Activate the notebook handler extension.\n */\nfunction activateNotebookHandler(app, factory, extensions, executor, palette, defaultBrowser, launcher, restorer, mainMenu, router, settingRegistry, sessionDialogs_, translator_, formRegistry, filebrowserFactory) {\n    setCellExecutor(executor);\n    const translator = translator_ !== null && translator_ !== void 0 ? translator_ : nullTranslator;\n    const sessionDialogs = sessionDialogs_ !== null && sessionDialogs_ !== void 0 ? sessionDialogs_ : new SessionContextDialogs({ translator });\n    const trans = translator.load('jupyterlab');\n    const services = app.serviceManager;\n    const { commands, shell } = app;\n    const tracker = new NotebookTracker({ namespace: 'notebook' });\n    // Use the router to deal with hash navigation\n    function onRouted(router, location) {\n        if (location.hash && tracker.currentWidget) {\n            tracker.currentWidget.setFragment(location.hash);\n        }\n    }\n    router === null || router === void 0 ? void 0 : router.routed.connect(onRouted);\n    const isEnabled = () => {\n        return Private.isEnabled(shell, tracker);\n    };\n    const setSideBySideOutputRatio = (sideBySideOutputRatio) => document.documentElement.style.setProperty('--jp-side-by-side-output-size', `${sideBySideOutputRatio}fr`);\n    // Fetch settings if possible.\n    const fetchSettings = settingRegistry\n        ? settingRegistry.load(trackerPlugin.id)\n        : Promise.reject(new Error(`No setting registry for ${trackerPlugin.id}`));\n    fetchSettings\n        .then(settings => {\n        updateConfig(settings);\n        settings.changed.connect(() => {\n            updateConfig(settings);\n            commands.notifyCommandChanged(CommandIDs.virtualScrollbar);\n        });\n        const updateSessionSettings = (session, changes) => {\n            const { newValue, oldValue } = changes;\n            const autoStartDefault = newValue.autoStartDefault;\n            if (typeof autoStartDefault === 'boolean' &&\n                autoStartDefault !== oldValue.autoStartDefault) {\n                // Ensure we break the cycle\n                if (autoStartDefault !==\n                    settings.get('autoStartDefaultKernel').composite)\n                    // Once the settings is changed `updateConfig` will take care\n                    // of the propagation to existing session context.\n                    settings\n                        .set('autoStartDefaultKernel', autoStartDefault)\n                        .catch(reason => {\n                        console.error(`Failed to set ${settings.id}.autoStartDefaultKernel`);\n                    });\n            }\n        };\n        const sessionContexts = new WeakSet();\n        const listenToKernelPreference = (panel) => {\n            const session = panel.context.sessionContext;\n            if (!session.isDisposed && !sessionContexts.has(session)) {\n                sessionContexts.add(session);\n                session.kernelPreferenceChanged.connect(updateSessionSettings);\n                session.disposed.connect(() => {\n                    session.kernelPreferenceChanged.disconnect(updateSessionSettings);\n                });\n            }\n        };\n        tracker.forEach(listenToKernelPreference);\n        tracker.widgetAdded.connect((tracker, panel) => {\n            listenToKernelPreference(panel);\n        });\n        commands.addCommand(CommandIDs.autoClosingBrackets, {\n            execute: args => {\n                var _a;\n                const codeConfig = settings.get('codeCellConfig')\n                    .composite;\n                const markdownConfig = settings.get('markdownCellConfig')\n                    .composite;\n                const rawConfig = settings.get('rawCellConfig')\n                    .composite;\n                const anyToggled = codeConfig.autoClosingBrackets ||\n                    markdownConfig.autoClosingBrackets ||\n                    rawConfig.autoClosingBrackets;\n                const toggled = !!((_a = args['force']) !== null && _a !== void 0 ? _a : !anyToggled);\n                [\n                    codeConfig.autoClosingBrackets,\n                    markdownConfig.autoClosingBrackets,\n                    rawConfig.autoClosingBrackets\n                ] = [toggled, toggled, toggled];\n                void settings.set('codeCellConfig', codeConfig);\n                void settings.set('markdownCellConfig', markdownConfig);\n                void settings.set('rawCellConfig', rawConfig);\n            },\n            label: trans.__('Auto Close Brackets for All Notebook Cell Types'),\n            isToggled: () => ['codeCellConfig', 'markdownCellConfig', 'rawCellConfig'].some(x => {\n                var _a;\n                return ((_a = settings.get(x).composite.autoClosingBrackets) !== null && _a !== void 0 ? _a : extensions.baseConfiguration['autoClosingBrackets']) === true;\n            })\n        });\n        commands.addCommand(CommandIDs.setSideBySideRatio, {\n            label: trans.__('Set side-by-side ratio'),\n            execute: args => {\n                InputDialog.getNumber({\n                    title: trans.__('Width of the output in side-by-side mode'),\n                    value: settings.get('sideBySideOutputRatio').composite\n                })\n                    .then(result => {\n                    setSideBySideOutputRatio(result.value);\n                    if (result.value) {\n                        void settings.set('sideBySideOutputRatio', result.value);\n                    }\n                })\n                    .catch(console.error);\n            }\n        });\n        addCommands(app, tracker, translator, sessionDialogs, settings, isEnabled);\n    })\n        .catch((reason) => {\n        console.warn(reason.message);\n        updateTracker({\n            editorConfig: factory.editorConfig,\n            notebookConfig: factory.notebookConfig,\n            kernelShutdown: factory.shutdownOnClose,\n            autoStartDefault: factory.autoStartDefault\n        });\n        addCommands(app, tracker, translator, sessionDialogs, null, isEnabled);\n    });\n    if (formRegistry) {\n        const CMRenderer = formRegistry.getRenderer('@jupyterlab/codemirror-extension:plugin.defaultConfig');\n        if (CMRenderer) {\n            formRegistry.addRenderer('@jupyterlab/notebook-extension:tracker.codeCellConfig', CMRenderer);\n            formRegistry.addRenderer('@jupyterlab/notebook-extension:tracker.markdownCellConfig', CMRenderer);\n            formRegistry.addRenderer('@jupyterlab/notebook-extension:tracker.rawCellConfig', CMRenderer);\n        }\n    }\n    // Handle state restoration.\n    if (restorer) {\n        void restorer.restore(tracker, {\n            command: 'docmanager:open',\n            args: panel => ({ path: panel.context.path, factory: FACTORY }),\n            name: panel => panel.context.path,\n            when: services.ready\n        });\n    }\n    const registry = app.docRegistry;\n    const modelFactory = new NotebookModelFactory({\n        disableDocumentWideUndoRedo: factory.notebookConfig.disableDocumentWideUndoRedo,\n        collaborative: true\n    });\n    registry.addModelFactory(modelFactory);\n    if (palette) {\n        populatePalette(palette, translator);\n    }\n    let id = 0; // The ID counter for notebook panels.\n    const ft = app.docRegistry.getFileType('notebook');\n    factory.widgetCreated.connect((sender, widget) => {\n        var _a, _b;\n        // If the notebook panel does not have an ID, assign it one.\n        widget.id = widget.id || `notebook-${++id}`;\n        // Set up the title icon\n        widget.title.icon = ft === null || ft === void 0 ? void 0 : ft.icon;\n        widget.title.iconClass = (_a = ft === null || ft === void 0 ? void 0 : ft.iconClass) !== null && _a !== void 0 ? _a : '';\n        widget.title.iconLabel = (_b = ft === null || ft === void 0 ? void 0 : ft.iconLabel) !== null && _b !== void 0 ? _b : '';\n        // Notify the widget tracker if restore data needs to update.\n        widget.context.pathChanged.connect(() => {\n            void tracker.save(widget);\n        });\n        // Add the notebook panel to the tracker.\n        void tracker.add(widget);\n    });\n    /**\n     * Update the settings of the current tracker.\n     */\n    function updateTracker(options) {\n        tracker.forEach(widget => {\n            widget.setConfig(options);\n        });\n        if (options.notebookConfig.windowingMode !== 'full') {\n            // Disable all virtual scrollbars if any was enabled\n            tracker.forEach(widget => {\n                if (widget.content.scrollbar) {\n                    widget.content.scrollbar = false;\n                }\n            });\n        }\n    }\n    /**\n     * Update the setting values.\n     */\n    function updateConfig(settings) {\n        const code = {\n            ...StaticNotebook.defaultEditorConfig.code,\n            ...settings.get('codeCellConfig').composite\n        };\n        const markdown = {\n            ...StaticNotebook.defaultEditorConfig.markdown,\n            ...settings.get('markdownCellConfig').composite\n        };\n        const raw = {\n            ...StaticNotebook.defaultEditorConfig.raw,\n            ...settings.get('rawCellConfig').composite\n        };\n        factory.editorConfig = { code, markdown, raw };\n        factory.notebookConfig = {\n            enableKernelInitNotification: settings.get('enableKernelInitNotification')\n                .composite,\n            autoRenderMarkdownCells: settings.get('autoRenderMarkdownCells')\n                .composite,\n            showHiddenCellsButton: settings.get('showHiddenCellsButton')\n                .composite,\n            scrollPastEnd: settings.get('scrollPastEnd').composite,\n            defaultCell: settings.get('defaultCell').composite,\n            recordTiming: settings.get('recordTiming').composite,\n            overscanCount: settings.get('overscanCount').composite,\n            showInputPlaceholder: settings.get('showInputPlaceholder')\n                .composite,\n            inputHistoryScope: settings.get('inputHistoryScope').composite,\n            maxNumberOutputs: settings.get('maxNumberOutputs').composite,\n            showEditorForReadOnlyMarkdown: settings.get('showEditorForReadOnlyMarkdown').composite,\n            disableDocumentWideUndoRedo: !settings.get('documentWideUndoRedo')\n                .composite,\n            renderingLayout: settings.get('renderingLayout').composite,\n            sideBySideLeftMarginOverride: settings.get('sideBySideLeftMarginOverride')\n                .composite,\n            sideBySideRightMarginOverride: settings.get('sideBySideRightMarginOverride').composite,\n            sideBySideOutputRatio: settings.get('sideBySideOutputRatio')\n                .composite,\n            windowingMode: settings.get('windowingMode').composite,\n            accessKernelHistory: settings.get('accessKernelHistory')\n                .composite\n        };\n        setSideBySideOutputRatio(factory.notebookConfig.sideBySideOutputRatio);\n        const sideBySideMarginStyle = `.jp-mod-sideBySide.jp-Notebook .jp-Notebook-cell {\n      margin-left: ${factory.notebookConfig.sideBySideLeftMarginOverride} !important;\n      margin-right: ${factory.notebookConfig.sideBySideRightMarginOverride} !important;`;\n        const sideBySideMarginTag = document.getElementById(SIDE_BY_SIDE_STYLE_ID);\n        if (sideBySideMarginTag) {\n            sideBySideMarginTag.innerText = sideBySideMarginStyle;\n        }\n        else {\n            document.head.insertAdjacentHTML('beforeend', `<style id=\"${SIDE_BY_SIDE_STYLE_ID}\">${sideBySideMarginStyle}}</style>`);\n        }\n        factory.autoStartDefault = settings.get('autoStartDefaultKernel')\n            .composite;\n        factory.shutdownOnClose = settings.get('kernelShutdown')\n            .composite;\n        modelFactory.disableDocumentWideUndoRedo = !settings.get('documentWideUndoRedo').composite;\n        updateTracker({\n            editorConfig: factory.editorConfig,\n            notebookConfig: factory.notebookConfig,\n            kernelShutdown: factory.shutdownOnClose,\n            autoStartDefault: factory.autoStartDefault\n        });\n    }\n    // Add main menu notebook menu.\n    if (mainMenu) {\n        populateMenus(mainMenu, isEnabled);\n    }\n    // Utility function to create a new notebook.\n    const createNew = async (cwd, kernelId, kernelName) => {\n        const model = await commands.execute('docmanager:new-untitled', {\n            path: cwd,\n            type: 'notebook'\n        });\n        if (model !== undefined) {\n            const widget = (await commands.execute('docmanager:open', {\n                path: model.path,\n                factory: FACTORY,\n                kernel: { id: kernelId, name: kernelName }\n            }));\n            widget.isUntitled = true;\n            return widget;\n        }\n    };\n    // Add a command for creating a new notebook.\n    commands.addCommand(CommandIDs.createNew, {\n        label: args => {\n            var _a, _b, _c;\n            const kernelName = args['kernelName'] || '';\n            if (args['isLauncher'] && args['kernelName'] && services.kernelspecs) {\n                return ((_c = (_b = (_a = services.kernelspecs.specs) === null || _a === void 0 ? void 0 : _a.kernelspecs[kernelName]) === null || _b === void 0 ? void 0 : _b.display_name) !== null && _c !== void 0 ? _c : '');\n            }\n            if (args['isPalette'] || args['isContextMenu']) {\n                return trans.__('New Notebook');\n            }\n            return trans.__('Notebook');\n        },\n        caption: trans.__('Create a new notebook'),\n        icon: args => (args['isPalette'] ? undefined : notebookIcon),\n        execute: args => {\n            var _a, _b;\n            const currentBrowser = (_a = filebrowserFactory === null || filebrowserFactory === void 0 ? void 0 : filebrowserFactory.tracker.currentWidget) !== null && _a !== void 0 ? _a : defaultBrowser;\n            const cwd = args['cwd'] || ((_b = currentBrowser === null || currentBrowser === void 0 ? void 0 : currentBrowser.model.path) !== null && _b !== void 0 ? _b : '');\n            const kernelId = args['kernelId'] || '';\n            const kernelName = args['kernelName'] || '';\n            return createNew(cwd, kernelId, kernelName);\n        }\n    });\n    // Add a launcher item if the launcher is available.\n    if (launcher) {\n        void services.ready.then(() => {\n            let disposables = null;\n            const onSpecsChanged = () => {\n                if (disposables) {\n                    disposables.dispose();\n                    disposables = null;\n                }\n                const specs = services.kernelspecs.specs;\n                if (!specs) {\n                    return;\n                }\n                disposables = new DisposableSet();\n                for (const name in specs.kernelspecs) {\n                    const rank = name === specs.default ? 0 : Infinity;\n                    const spec = specs.kernelspecs[name];\n                    const kernelIconUrl = spec.resources['logo-svg'] || spec.resources['logo-64x64'];\n                    disposables.add(launcher.add({\n                        command: CommandIDs.createNew,\n                        args: { isLauncher: true, kernelName: name },\n                        category: trans.__('Notebook'),\n                        rank,\n                        kernelIconUrl,\n                        metadata: {\n                            kernel: JSONExt.deepCopy(spec.metadata || {})\n                        }\n                    }));\n                }\n            };\n            onSpecsChanged();\n            services.kernelspecs.specsChanged.connect(onSpecsChanged);\n        });\n    }\n    return tracker;\n}\n/**\n * Activate the completer service for notebook.\n */\nfunction activateNotebookCompleterService(app, notebooks, manager, translator, appSanitizer) {\n    if (!manager) {\n        return;\n    }\n    const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n    const sanitizer = appSanitizer !== null && appSanitizer !== void 0 ? appSanitizer : new Sanitizer();\n    app.commands.addCommand(CommandIDs.invokeCompleter, {\n        label: trans.__('Display the completion helper.'),\n        execute: args => {\n            var _a;\n            const panel = notebooks.currentWidget;\n            if (panel && ((_a = panel.content.activeCell) === null || _a === void 0 ? void 0 : _a.model.type) === 'code') {\n                manager.invoke(panel.id);\n            }\n        }\n    });\n    app.commands.addCommand(CommandIDs.selectCompleter, {\n        label: trans.__('Select the completion suggestion.'),\n        execute: () => {\n            const id = notebooks.currentWidget && notebooks.currentWidget.id;\n            if (id) {\n                return manager.select(id);\n            }\n        }\n    });\n    app.commands.addKeyBinding({\n        command: CommandIDs.selectCompleter,\n        keys: ['Enter'],\n        selector: '.jp-Notebook .jp-mod-completer-active'\n    });\n    const updateCompleter = async (_, notebook) => {\n        var _a, _b;\n        const completerContext = {\n            editor: (_b = (_a = notebook.content.activeCell) === null || _a === void 0 ? void 0 : _a.editor) !== null && _b !== void 0 ? _b : null,\n            session: notebook.sessionContext.session,\n            widget: notebook,\n            sanitizer: sanitizer\n        };\n        await manager.updateCompleter(completerContext);\n        notebook.content.activeCellChanged.connect((_, cell) => {\n            // Ensure the editor will exist on the cell before adding the completer\n            cell === null || cell === void 0 ? void 0 : cell.ready.then(() => {\n                const newCompleterContext = {\n                    editor: cell.editor,\n                    session: notebook.sessionContext.session,\n                    widget: notebook,\n                    sanitizer: sanitizer\n                };\n                return manager.updateCompleter(newCompleterContext);\n            }).catch(console.error);\n        });\n        notebook.sessionContext.sessionChanged.connect(() => {\n            var _a;\n            // Ensure the editor will exist on the cell before adding the completer\n            (_a = notebook.content.activeCell) === null || _a === void 0 ? void 0 : _a.ready.then(() => {\n                var _a, _b;\n                const newCompleterContext = {\n                    editor: (_b = (_a = notebook.content.activeCell) === null || _a === void 0 ? void 0 : _a.editor) !== null && _b !== void 0 ? _b : null,\n                    session: notebook.sessionContext.session,\n                    widget: notebook\n                };\n                return manager.updateCompleter(newCompleterContext);\n            }).catch(console.error);\n        });\n    };\n    notebooks.widgetAdded.connect(updateCompleter);\n    manager.activeProvidersChanged.connect(() => {\n        notebooks.forEach(panel => {\n            updateCompleter(undefined, panel).catch(e => console.error(e));\n        });\n    });\n}\n/**\n * Activate the language server for notebook.\n */\nfunction activateNotebookLanguageServer(app, notebooks, connectionManager, featureManager, codeExtractorManager, adapterTracker) {\n    notebooks.widgetAdded.connect(async (_, notebook) => {\n        const adapter = new NotebookAdapter(notebook, {\n            connectionManager,\n            featureManager,\n            foreignCodeExtractorsManager: codeExtractorManager\n        });\n        adapterTracker.add(adapter);\n    });\n}\n// Get the current widget and activate unless the args specify otherwise.\nfunction getCurrent(tracker, shell, args) {\n    var _a;\n    const widget = args[SemanticCommand.WIDGET]\n        ? (_a = tracker.find(panel => panel.id === args[SemanticCommand.WIDGET])) !== null && _a !== void 0 ? _a : null\n        : tracker.currentWidget;\n    const activate = args['activate'] !== false;\n    if (activate && widget) {\n        shell.activateById(widget.id);\n    }\n    return widget;\n}\n/**\n * Add the notebook commands to the application's command registry.\n */\nfunction addCommands(app, tracker, translator, sessionDialogs, settings, isEnabled) {\n    var _a;\n    const trans = translator.load('jupyterlab');\n    const { commands, shell } = app;\n    const isEnabledAndSingleSelected = () => {\n        return Private.isEnabledAndSingleSelected(shell, tracker);\n    };\n    const refreshCellCollapsed = (notebook) => {\n        var _a, _b;\n        for (const cell of notebook.widgets) {\n            if (cell instanceof MarkdownCell && cell.headingCollapsed) {\n                NotebookActions.setHeadingCollapse(cell, true, notebook);\n            }\n            if (cell.model.id === ((_b = (_a = notebook.activeCell) === null || _a === void 0 ? void 0 : _a.model) === null || _b === void 0 ? void 0 : _b.id)) {\n                NotebookActions.expandParent(cell, notebook);\n            }\n        }\n    };\n    const isEnabledAndHeadingSelected = () => {\n        return Private.isEnabledAndHeadingSelected(shell, tracker);\n    };\n    // Set up signal handler to keep the collapse state consistent\n    tracker.currentChanged.connect((sender, panel) => {\n        var _a, _b;\n        if (!((_b = (_a = panel === null || panel === void 0 ? void 0 : panel.content) === null || _a === void 0 ? void 0 : _a.model) === null || _b === void 0 ? void 0 : _b.cells)) {\n            return;\n        }\n        panel.content.model.cells.changed.connect((list, args) => {\n            // Might be overkill to refresh this every time, but\n            // it helps to keep the collapse state consistent.\n            refreshCellCollapsed(panel.content);\n        });\n        panel.content.activeCellChanged.connect((notebook, cell) => {\n            NotebookActions.expandParent(cell, notebook);\n        });\n    });\n    tracker.selectionChanged.connect(() => {\n        commands.notifyCommandChanged(CommandIDs.duplicateBelow);\n        commands.notifyCommandChanged(CommandIDs.deleteCell);\n        commands.notifyCommandChanged(CommandIDs.copy);\n        commands.notifyCommandChanged(CommandIDs.cut);\n        commands.notifyCommandChanged(CommandIDs.pasteBelow);\n        commands.notifyCommandChanged(CommandIDs.pasteAbove);\n        commands.notifyCommandChanged(CommandIDs.pasteAndReplace);\n        commands.notifyCommandChanged(CommandIDs.moveUp);\n        commands.notifyCommandChanged(CommandIDs.moveDown);\n        commands.notifyCommandChanged(CommandIDs.run);\n        commands.notifyCommandChanged(CommandIDs.runAll);\n        commands.notifyCommandChanged(CommandIDs.runAndAdvance);\n        commands.notifyCommandChanged(CommandIDs.runAndInsert);\n    });\n    tracker.activeCellChanged.connect(() => {\n        commands.notifyCommandChanged(CommandIDs.moveUp);\n        commands.notifyCommandChanged(CommandIDs.moveDown);\n    });\n    commands.addCommand(CommandIDs.runAndAdvance, {\n        label: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Run Selected Cell', 'Run Selected Cells', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        caption: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Run this cell and advance', 'Run these %1 cells and advance', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                const { context, content } = current;\n                return NotebookActions.runAndAdvance(content, context.sessionContext, sessionDialogs, translator);\n            }\n        },\n        isEnabled: args => (args.toolbar ? true : isEnabled()),\n        icon: args => (args.toolbar ? runIcon : undefined)\n    });\n    commands.addCommand(CommandIDs.run, {\n        label: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Run Selected Cell and Do not Advance', 'Run Selected Cells and Do not Advance', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                const { context, content } = current;\n                return NotebookActions.run(content, context.sessionContext, sessionDialogs, translator);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.runAndInsert, {\n        label: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Run Selected Cell and Insert Below', 'Run Selected Cells and Insert Below', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                const { context, content } = current;\n                return NotebookActions.runAndInsert(content, context.sessionContext, sessionDialogs, translator);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.runAll, {\n        label: trans.__('Run All Cells'),\n        caption: trans.__('Run all cells'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                const { context, content } = current;\n                return NotebookActions.runAll(content, context.sessionContext, sessionDialogs, translator);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.runAllAbove, {\n        label: trans.__('Run All Above Selected Cell'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                const { context, content } = current;\n                return NotebookActions.runAllAbove(content, context.sessionContext, sessionDialogs, translator);\n            }\n        },\n        isEnabled: () => {\n            // Can't run above if there are multiple cells selected,\n            // or if we are at the top of the notebook.\n            return (isEnabledAndSingleSelected() &&\n                tracker.currentWidget.content.activeCellIndex !== 0);\n        }\n    });\n    commands.addCommand(CommandIDs.runAllBelow, {\n        label: trans.__('Run Selected Cell and All Below'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                const { context, content } = current;\n                return NotebookActions.runAllBelow(content, context.sessionContext, sessionDialogs, translator);\n            }\n        },\n        isEnabled: () => {\n            // Can't run below if there are multiple cells selected,\n            // or if we are at the bottom of the notebook.\n            return (isEnabledAndSingleSelected() &&\n                (tracker.currentWidget.content.widgets.length === 1 ||\n                    tracker.currentWidget.content.activeCellIndex !==\n                        tracker.currentWidget.content.widgets.length - 1));\n        }\n    });\n    commands.addCommand(CommandIDs.renderAllMarkdown, {\n        label: trans.__('Render All Markdown Cells'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                const { content } = current;\n                return NotebookActions.renderAllMarkdown(content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.restart, {\n        label: trans.__('Restart Kernel…'),\n        caption: trans.__('Restart the kernel'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return sessionDialogs.restart(current.sessionContext);\n            }\n        },\n        isEnabled: args => (args.toolbar ? true : isEnabled()),\n        icon: args => (args.toolbar ? refreshIcon : undefined)\n    });\n    commands.addCommand(CommandIDs.shutdown, {\n        label: trans.__('Shut Down Kernel'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (!current) {\n                return;\n            }\n            return current.context.sessionContext.shutdown();\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.closeAndShutdown, {\n        label: trans.__('Close and Shut Down Notebook…'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (!current) {\n                return;\n            }\n            const fileName = current.title.label;\n            return showDialog({\n                title: trans.__('Shut down the notebook?'),\n                body: trans.__('Are you sure you want to close \"%1\"?', fileName),\n                buttons: [Dialog.cancelButton(), Dialog.warnButton()]\n            }).then(result => {\n                if (result.button.accept) {\n                    return commands\n                        .execute(CommandIDs.shutdown, { activate: false })\n                        .then(() => {\n                        current.dispose();\n                    });\n                }\n            });\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.trust, {\n        label: () => trans.__('Trust Notebook'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                const { context, content } = current;\n                return NotebookActions.trust(content).then(() => context.save());\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.restartClear, {\n        label: trans.__('Restart Kernel and Clear Outputs of All Cells…'),\n        caption: trans.__('Restart the kernel and clear all outputs of all cells'),\n        execute: async () => {\n            const restarted = await commands.execute(CommandIDs.restart, {\n                activate: false\n            });\n            if (restarted) {\n                await commands.execute(CommandIDs.clearAllOutputs);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.restartAndRunToSelected, {\n        label: trans.__('Restart Kernel and Run up to Selected Cell…'),\n        execute: async (args) => {\n            const current = getCurrent(tracker, shell, { activate: false, ...args });\n            if (!current) {\n                return;\n            }\n            const { context, content } = current;\n            const cells = content.widgets.slice(0, content.activeCellIndex + 1);\n            const restarted = await sessionDialogs.restart(current.sessionContext);\n            if (restarted) {\n                return NotebookActions.runCells(content, cells, context.sessionContext, sessionDialogs, translator);\n            }\n        },\n        isEnabled: isEnabledAndSingleSelected\n    });\n    commands.addCommand(CommandIDs.restartRunAll, {\n        label: trans.__('Restart Kernel and Run All Cells…'),\n        caption: trans.__('Restart the kernel and run all cells'),\n        execute: async (args) => {\n            const current = getCurrent(tracker, shell, { activate: false, ...args });\n            if (!current) {\n                return;\n            }\n            const { context, content } = current;\n            const cells = content.widgets;\n            const restarted = await sessionDialogs.restart(current.sessionContext);\n            if (restarted) {\n                return NotebookActions.runCells(content, cells, context.sessionContext, sessionDialogs, translator);\n            }\n        },\n        isEnabled: args => (args.toolbar ? true : isEnabled()),\n        icon: args => (args.toolbar ? fastForwardIcon : undefined)\n    });\n    commands.addCommand(CommandIDs.clearAllOutputs, {\n        label: trans.__('Clear Outputs of All Cells'),\n        caption: trans.__('Clear all outputs of all cells'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.clearAllOutputs(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.clearOutputs, {\n        label: trans.__('Clear Cell Output'),\n        caption: trans.__('Clear outputs for the selected cells'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.clearOutputs(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.interrupt, {\n        label: trans.__('Interrupt Kernel'),\n        caption: trans.__('Interrupt the kernel'),\n        execute: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, args);\n            if (!current) {\n                return;\n            }\n            const kernel = (_a = current.context.sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel;\n            if (kernel) {\n                return kernel.interrupt();\n            }\n        },\n        isEnabled: args => (args.toolbar ? true : isEnabled()),\n        icon: args => (args.toolbar ? stopIcon : undefined)\n    });\n    commands.addCommand(CommandIDs.toCode, {\n        label: trans.__('Change to Code Cell Type'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.changeCellType(current.content, 'code', translator);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.toMarkdown, {\n        label: trans.__('Change to Markdown Cell Type'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.changeCellType(current.content, 'markdown', translator);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.toRaw, {\n        label: trans.__('Change to Raw Cell Type'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.changeCellType(current.content, 'raw', translator);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.cut, {\n        label: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Cut Cell', 'Cut Cells', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        caption: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Cut this cell', 'Cut these %1 cells', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.cut(current.content);\n            }\n        },\n        icon: args => (args.toolbar ? cutIcon : undefined),\n        isEnabled: args => (args.toolbar ? true : isEnabled())\n    });\n    commands.addCommand(CommandIDs.copy, {\n        label: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Copy Cell', 'Copy Cells', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        caption: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Copy this cell', 'Copy these %1 cells', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.copy(current.content);\n            }\n        },\n        icon: args => (args.toolbar ? copyIcon : undefined),\n        isEnabled: args => (args.toolbar ? true : isEnabled())\n    });\n    commands.addCommand(CommandIDs.pasteBelow, {\n        label: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Paste Cell Below', 'Paste Cells Below', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        caption: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Paste this cell from the clipboard', 'Paste these %1 cells from the clipboard', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.paste(current.content, 'below');\n            }\n        },\n        icon: args => (args.toolbar ? pasteIcon : undefined),\n        isEnabled: args => (args.toolbar ? true : isEnabled())\n    });\n    commands.addCommand(CommandIDs.pasteAbove, {\n        label: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Paste Cell Above', 'Paste Cells Above', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        caption: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Paste this cell from the clipboard', 'Paste these %1 cells from the clipboard', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.paste(current.content, 'above');\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.duplicateBelow, {\n        label: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Duplicate Cell Below', 'Duplicate Cells Below', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        caption: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Create a duplicate of this cell below', 'Create duplicates of %1 cells below', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                NotebookActions.duplicate(current.content, 'belowSelected');\n            }\n        },\n        icon: args => (args.toolbar ? duplicateIcon : undefined),\n        isEnabled: args => (args.toolbar ? true : isEnabled())\n    });\n    commands.addCommand(CommandIDs.pasteAndReplace, {\n        label: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Paste Cell and Replace', 'Paste Cells and Replace', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.paste(current.content, 'replace');\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.deleteCell, {\n        label: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Delete Cell', 'Delete Cells', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        caption: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Delete this cell', 'Delete these %1 cells', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.deleteCells(current.content);\n            }\n        },\n        isEnabled: args => (args.toolbar ? true : isEnabled())\n    });\n    commands.addCommand(CommandIDs.split, {\n        label: trans.__('Split Cell'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.splitCell(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.merge, {\n        label: trans.__('Merge Selected Cells'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.mergeCells(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.mergeAbove, {\n        label: trans.__('Merge Cell Above'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.mergeCells(current.content, true);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.mergeBelow, {\n        label: trans.__('Merge Cell Below'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.mergeCells(current.content, false);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.insertAbove, {\n        label: trans.__('Insert Cell Above'),\n        caption: trans.__('Insert a cell above'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.insertAbove(current.content);\n            }\n        },\n        icon: args => (args.toolbar ? addAboveIcon : undefined),\n        isEnabled: args => (args.toolbar ? true : isEnabled())\n    });\n    commands.addCommand(CommandIDs.insertBelow, {\n        label: trans.__('Insert Cell Below'),\n        caption: trans.__('Insert a cell below'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.insertBelow(current.content);\n            }\n        },\n        icon: args => (args.toolbar ? addBelowIcon : undefined),\n        isEnabled: args => (args.toolbar ? true : isEnabled())\n    });\n    commands.addCommand(CommandIDs.selectAbove, {\n        label: trans.__('Select Cell Above'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.selectAbove(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.selectBelow, {\n        label: trans.__('Select Cell Below'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.selectBelow(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.insertHeadingAbove, {\n        label: trans.__('Insert Heading Above Current Heading'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.insertSameLevelHeadingAbove(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.insertHeadingBelow, {\n        label: trans.__('Insert Heading Below Current Heading'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.insertSameLevelHeadingBelow(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.selectHeadingAboveOrCollapse, {\n        label: trans.__('Select Heading Above or Collapse Heading'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.selectHeadingAboveOrCollapseHeading(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.selectHeadingBelowOrExpand, {\n        label: trans.__('Select Heading Below or Expand Heading'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.selectHeadingBelowOrExpandHeading(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.extendAbove, {\n        label: trans.__('Extend Selection Above'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.extendSelectionAbove(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.extendTop, {\n        label: trans.__('Extend Selection to Top'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.extendSelectionAbove(current.content, true);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.extendBelow, {\n        label: trans.__('Extend Selection Below'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.extendSelectionBelow(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.extendBottom, {\n        label: trans.__('Extend Selection to Bottom'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.extendSelectionBelow(current.content, true);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.selectAll, {\n        label: trans.__('Select All Cells'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.selectAll(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.deselectAll, {\n        label: trans.__('Deselect All Cells'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.deselectAll(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.moveUp, {\n        label: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Move Cell Up', 'Move Cells Up', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        caption: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Move this cell up', 'Move these %1 cells up', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                NotebookActions.moveUp(current.content);\n                Private.raiseSilentNotification(trans.__('Notebook cell shifted up successfully'), current.node);\n            }\n        },\n        isEnabled: args => {\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            if (!current) {\n                return false;\n            }\n            return current.content.activeCellIndex >= 1;\n        },\n        icon: args => (args.toolbar ? moveUpIcon : undefined)\n    });\n    commands.addCommand(CommandIDs.moveDown, {\n        label: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Move Cell Down', 'Move Cells Down', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        caption: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            return trans._n('Move this cell down', 'Move these %1 cells down', (_a = current === null || current === void 0 ? void 0 : current.content.selectedCells.length) !== null && _a !== void 0 ? _a : 1);\n        },\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                NotebookActions.moveDown(current.content);\n                Private.raiseSilentNotification(trans.__('Notebook cell shifted down successfully'), current.node);\n            }\n        },\n        isEnabled: args => {\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            if (!current || !current.content.model) {\n                return false;\n            }\n            const length = current.content.model.cells.length;\n            return current.content.activeCellIndex < length - 1;\n        },\n        icon: args => (args.toolbar ? moveDownIcon : undefined)\n    });\n    commands.addCommand(CommandIDs.toggleAllLines, {\n        label: trans.__('Show Line Numbers'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.toggleAllLineNumbers(current.content);\n            }\n        },\n        isEnabled,\n        isToggled: args => {\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            if (current) {\n                const config = current.content.editorConfig;\n                return !!(config.code.lineNumbers &&\n                    config.markdown.lineNumbers &&\n                    config.raw.lineNumbers);\n            }\n            else {\n                return false;\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.commandMode, {\n        label: trans.__('Enter Command Mode'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                current.content.mode = 'command';\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.editMode, {\n        label: trans.__('Enter Edit Mode'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                current.content.mode = 'edit';\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.undoCellAction, {\n        label: trans.__('Undo Cell Operation'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.undo(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.redoCellAction, {\n        label: trans.__('Redo Cell Operation'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.redo(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.redo, {\n        label: trans.__('Redo'),\n        execute: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                const cell = current.content.activeCell;\n                if (cell) {\n                    cell.inputHidden = false;\n                    return (_a = cell.editor) === null || _a === void 0 ? void 0 : _a.redo();\n                }\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.undo, {\n        label: trans.__('Undo'),\n        execute: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                const cell = current.content.activeCell;\n                if (cell) {\n                    cell.inputHidden = false;\n                    return (_a = cell.editor) === null || _a === void 0 ? void 0 : _a.undo();\n                }\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.changeKernel, {\n        label: trans.__('Change Kernel…'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return sessionDialogs.selectKernel(current.context.sessionContext);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.getKernel, {\n        label: trans.__('Get Kernel'),\n        execute: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, { activate: false, ...args });\n            if (current) {\n                return (_a = current.sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel;\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.reconnectToKernel, {\n        label: trans.__('Reconnect to Kernel'),\n        execute: args => {\n            var _a;\n            const current = getCurrent(tracker, shell, args);\n            if (!current) {\n                return;\n            }\n            const kernel = (_a = current.context.sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel;\n            if (kernel) {\n                return kernel.reconnect();\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.markdown1, {\n        label: trans.__('Change to Heading 1'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.setMarkdownHeader(current.content, 1, translator);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.markdown2, {\n        label: trans.__('Change to Heading 2'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.setMarkdownHeader(current.content, 2, translator);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.markdown3, {\n        label: trans.__('Change to Heading 3'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.setMarkdownHeader(current.content, 3, translator);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.markdown4, {\n        label: trans.__('Change to Heading 4'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.setMarkdownHeader(current.content, 4, translator);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.markdown5, {\n        label: trans.__('Change to Heading 5'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.setMarkdownHeader(current.content, 5, translator);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.markdown6, {\n        label: trans.__('Change to Heading 6'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.setMarkdownHeader(current.content, 6, translator);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.hideCode, {\n        label: trans.__('Collapse Selected Code'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.hideCode(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.showCode, {\n        label: trans.__('Expand Selected Code'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.showCode(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.hideAllCode, {\n        label: trans.__('Collapse All Code'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.hideAllCode(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.showAllCode, {\n        label: trans.__('Expand All Code'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.showAllCode(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.hideOutput, {\n        label: trans.__('Collapse Selected Outputs'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.hideOutput(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.showOutput, {\n        label: trans.__('Expand Selected Outputs'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.showOutput(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.toggleOutput, {\n        label: trans.__('Toggle Visibility of Selected Outputs'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.toggleOutput(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.hideAllOutputs, {\n        label: trans.__('Collapse All Outputs'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.hideAllOutputs(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.toggleRenderSideBySideCurrentNotebook, {\n        label: trans.__('Render Side-by-Side'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                if (current.content.renderingLayout === 'side-by-side') {\n                    return NotebookActions.renderDefault(current.content);\n                }\n                return NotebookActions.renderSideBySide(current.content);\n            }\n        },\n        isEnabled,\n        isToggled: args => {\n            const current = getCurrent(tracker, shell, { ...args, activate: false });\n            if (current) {\n                return current.content.renderingLayout === 'side-by-side';\n            }\n            else {\n                return false;\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.showAllOutputs, {\n        label: trans.__('Expand All Outputs'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.showAllOutputs(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.enableOutputScrolling, {\n        label: trans.__('Enable Scrolling for Outputs'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.enableOutputScrolling(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.disableOutputScrolling, {\n        label: trans.__('Disable Scrolling for Outputs'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.disableOutputScrolling(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.selectLastRunCell, {\n        label: trans.__('Select current running or last run cell'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.selectLastRunCell(current.content);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.replaceSelection, {\n        label: trans.__('Replace Selection in Notebook Cell'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            const text = args['text'] || '';\n            if (current) {\n                return NotebookActions.replaceSelection(current.content, text);\n            }\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.toggleCollapseCmd, {\n        label: trans.__('Toggle Collapse Notebook Heading'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.toggleCurrentHeadingCollapse(current.content);\n            }\n        },\n        isEnabled: isEnabledAndHeadingSelected\n    });\n    commands.addCommand(CommandIDs.collapseAllCmd, {\n        label: trans.__('Collapse All Headings'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.collapseAllHeadings(current.content);\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.expandAllCmd, {\n        label: trans.__('Expand All Headings'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return NotebookActions.expandAllHeadings(current.content);\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.tocRunCells, {\n        label: trans.__('Select and Run Cell(s) for this Heading'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, { activate: false, ...args });\n            if (current === null) {\n                return;\n            }\n            const activeCell = current.content.activeCell;\n            let lastIndex = current.content.activeCellIndex;\n            if (activeCell instanceof MarkdownCell) {\n                const cells = current.content.widgets;\n                const level = activeCell.headingInfo.level;\n                for (let i = current.content.activeCellIndex + 1; i < cells.length; i++) {\n                    const cell = cells[i];\n                    if (cell instanceof MarkdownCell &&\n                        // cell.headingInfo.level === -1 if no heading\n                        cell.headingInfo.level >= 0 &&\n                        cell.headingInfo.level <= level) {\n                        break;\n                    }\n                    lastIndex = i;\n                }\n            }\n            current.content.extendContiguousSelectionTo(lastIndex);\n            void NotebookActions.run(current.content, current.sessionContext, sessionDialogs, translator);\n        }\n    });\n    commands.addCommand(CommandIDs.accessPreviousHistory, {\n        label: trans.__('Access Previous Kernel History Entry'),\n        execute: async (args) => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return await NotebookActions.accessPreviousHistory(current.content);\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.accessNextHistory, {\n        label: trans.__('Access Next Kernel History Entry'),\n        execute: async (args) => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                return await NotebookActions.accessNextHistory(current.content);\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.virtualScrollbar, {\n        label: trans.__('Show Minimap'),\n        caption: trans.__('Show Minimap (virtual scrollbar, enabled with windowing mode: full)'),\n        execute: args => {\n            const current = getCurrent(tracker, shell, args);\n            if (current) {\n                current.content.scrollbar = !current.content.scrollbar;\n            }\n        },\n        icon: args => (args.toolbar ? tableRowsIcon : undefined),\n        isEnabled: args => {\n            var _a;\n            const enabled = (args.toolbar ? true : isEnabled()) &&\n                ((_a = (settings === null || settings === void 0 ? void 0 : settings.composite.windowingMode) === 'full') !== null && _a !== void 0 ? _a : false);\n            return enabled;\n        },\n        isToggled: () => {\n            var _a;\n            const current = tracker.currentWidget;\n            return (_a = current === null || current === void 0 ? void 0 : current.content.scrollbar) !== null && _a !== void 0 ? _a : false;\n        },\n        isVisible: args => {\n            var _a;\n            const visible = (args.toolbar ? true : isEnabled()) &&\n                ((_a = (settings === null || settings === void 0 ? void 0 : settings.composite.windowingMode) === 'full') !== null && _a !== void 0 ? _a : false);\n            return visible;\n        }\n    });\n    // All commands with isEnabled defined directly or in a semantic commands\n    // To simplify here we added all commands as most of them have isEnabled\n    const skip = [CommandIDs.createNew, CommandIDs.createOutputView];\n    const notify = () => {\n        Object.values(CommandIDs)\n            .filter(id => !skip.includes(id) && app.commands.hasCommand(id))\n            .forEach(id => app.commands.notifyCommandChanged(id));\n    };\n    tracker.currentChanged.connect(notify);\n    (_a = shell.currentChanged) === null || _a === void 0 ? void 0 : _a.connect(notify);\n}\n/**\n * Populate the application's command palette with notebook commands.\n */\nfunction populatePalette(palette, translator) {\n    const trans = translator.load('jupyterlab');\n    let category = trans.__('Notebook Operations');\n    [\n        CommandIDs.interrupt,\n        CommandIDs.restart,\n        CommandIDs.restartClear,\n        CommandIDs.restartRunAll,\n        CommandIDs.runAll,\n        CommandIDs.renderAllMarkdown,\n        CommandIDs.runAllAbove,\n        CommandIDs.runAllBelow,\n        CommandIDs.restartAndRunToSelected,\n        CommandIDs.selectAll,\n        CommandIDs.deselectAll,\n        CommandIDs.clearAllOutputs,\n        CommandIDs.toggleAllLines,\n        CommandIDs.editMode,\n        CommandIDs.commandMode,\n        CommandIDs.changeKernel,\n        CommandIDs.reconnectToKernel,\n        CommandIDs.createConsole,\n        CommandIDs.createSubshellConsole,\n        CommandIDs.closeAndShutdown,\n        CommandIDs.trust,\n        CommandIDs.toggleCollapseCmd,\n        CommandIDs.collapseAllCmd,\n        CommandIDs.expandAllCmd,\n        CommandIDs.accessPreviousHistory,\n        CommandIDs.accessNextHistory,\n        CommandIDs.virtualScrollbar\n    ].forEach(command => {\n        palette.addItem({ command, category });\n    });\n    palette.addItem({\n        command: CommandIDs.createNew,\n        category,\n        args: { isPalette: true }\n    });\n    category = trans.__('Notebook Cell Operations');\n    [\n        CommandIDs.run,\n        CommandIDs.runAndAdvance,\n        CommandIDs.runAndInsert,\n        CommandIDs.runInConsole,\n        CommandIDs.clearOutputs,\n        CommandIDs.toCode,\n        CommandIDs.toMarkdown,\n        CommandIDs.toRaw,\n        CommandIDs.cut,\n        CommandIDs.copy,\n        CommandIDs.pasteBelow,\n        CommandIDs.pasteAbove,\n        CommandIDs.pasteAndReplace,\n        CommandIDs.deleteCell,\n        CommandIDs.split,\n        CommandIDs.merge,\n        CommandIDs.mergeAbove,\n        CommandIDs.mergeBelow,\n        CommandIDs.insertAbove,\n        CommandIDs.insertBelow,\n        CommandIDs.selectAbove,\n        CommandIDs.selectBelow,\n        CommandIDs.selectHeadingAboveOrCollapse,\n        CommandIDs.selectHeadingBelowOrExpand,\n        CommandIDs.insertHeadingAbove,\n        CommandIDs.insertHeadingBelow,\n        CommandIDs.extendAbove,\n        CommandIDs.extendTop,\n        CommandIDs.extendBelow,\n        CommandIDs.extendBottom,\n        CommandIDs.moveDown,\n        CommandIDs.moveUp,\n        CommandIDs.undoCellAction,\n        CommandIDs.redoCellAction,\n        CommandIDs.markdown1,\n        CommandIDs.markdown2,\n        CommandIDs.markdown3,\n        CommandIDs.markdown4,\n        CommandIDs.markdown5,\n        CommandIDs.markdown6,\n        CommandIDs.hideCode,\n        CommandIDs.showCode,\n        CommandIDs.hideAllCode,\n        CommandIDs.showAllCode,\n        CommandIDs.hideOutput,\n        CommandIDs.showOutput,\n        CommandIDs.toggleOutput,\n        CommandIDs.hideAllOutputs,\n        CommandIDs.showAllOutputs,\n        CommandIDs.toggleRenderSideBySideCurrentNotebook,\n        CommandIDs.setSideBySideRatio,\n        CommandIDs.enableOutputScrolling,\n        CommandIDs.disableOutputScrolling\n    ].forEach(command => {\n        palette.addItem({ command, category });\n    });\n}\n/**\n * Populates the application menus for the notebook.\n */\nfunction populateMenus(mainMenu, isEnabled) {\n    // Add undo/redo hooks to the edit menu.\n    mainMenu.editMenu.undoers.redo.add({\n        id: CommandIDs.redo,\n        isEnabled\n    });\n    mainMenu.editMenu.undoers.undo.add({\n        id: CommandIDs.undo,\n        isEnabled\n    });\n    // Add a clearer to the edit menu\n    mainMenu.editMenu.clearers.clearAll.add({\n        id: CommandIDs.clearAllOutputs,\n        isEnabled\n    });\n    mainMenu.editMenu.clearers.clearCurrent.add({\n        id: CommandIDs.clearOutputs,\n        isEnabled\n    });\n    // Add a console creator the the Kernel menu\n    mainMenu.fileMenu.consoleCreators.add({\n        id: CommandIDs.createConsole,\n        isEnabled\n    });\n    // Add a close and shutdown command to the file menu.\n    mainMenu.fileMenu.closeAndCleaners.add({\n        id: CommandIDs.closeAndShutdown,\n        isEnabled\n    });\n    // Add a kernel user to the Kernel menu\n    mainMenu.kernelMenu.kernelUsers.changeKernel.add({\n        id: CommandIDs.changeKernel,\n        isEnabled\n    });\n    mainMenu.kernelMenu.kernelUsers.clearWidget.add({\n        id: CommandIDs.clearAllOutputs,\n        isEnabled\n    });\n    mainMenu.kernelMenu.kernelUsers.interruptKernel.add({\n        id: CommandIDs.interrupt,\n        isEnabled\n    });\n    mainMenu.kernelMenu.kernelUsers.reconnectToKernel.add({\n        id: CommandIDs.reconnectToKernel,\n        isEnabled\n    });\n    mainMenu.kernelMenu.kernelUsers.restartKernel.add({\n        id: CommandIDs.restart,\n        isEnabled\n    });\n    mainMenu.kernelMenu.kernelUsers.shutdownKernel.add({\n        id: CommandIDs.shutdown,\n        isEnabled\n    });\n    // Add an IEditorViewer to the application view menu\n    mainMenu.viewMenu.editorViewers.toggleLineNumbers.add({\n        id: CommandIDs.toggleAllLines,\n        isEnabled\n    });\n    // Add an ICodeRunner to the application run menu\n    mainMenu.runMenu.codeRunners.restart.add({\n        id: CommandIDs.restart,\n        isEnabled\n    });\n    mainMenu.runMenu.codeRunners.run.add({\n        id: CommandIDs.runAndAdvance,\n        isEnabled\n    });\n    mainMenu.runMenu.codeRunners.runAll.add({ id: CommandIDs.runAll, isEnabled });\n    // Add kernel information to the application help menu.\n    mainMenu.helpMenu.getKernel.add({\n        id: CommandIDs.getKernel,\n        isEnabled\n    });\n}\n/**\n * A namespace for module private functionality.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Create a console connected with a notebook kernel\n     *\n     * @param commands Commands registry\n     * @param widget Notebook panel\n     * @param activate Should the console be activated\n     * @param subshell Should the console contain a subshell or the main shell\n     */\n    function createConsole(commands, widget, activate, subshell) {\n        const options = {\n            path: widget.context.path,\n            preferredLanguage: widget.context.model.defaultKernelLanguage,\n            activate: activate,\n            subshell: subshell,\n            ref: widget.id,\n            insertMode: 'split-bottom',\n            type: 'Linked Console'\n        };\n        return commands.execute('console:create', options);\n    }\n    Private.createConsole = createConsole;\n    /**\n     * Whether there is an active notebook.\n     */\n    function isEnabled(shell, tracker) {\n        return (tracker.currentWidget !== null &&\n            tracker.currentWidget === shell.currentWidget);\n    }\n    Private.isEnabled = isEnabled;\n    /**\n     * Whether there is an notebook active, with a single selected cell.\n     */\n    function isEnabledAndSingleSelected(shell, tracker) {\n        if (!Private.isEnabled(shell, tracker)) {\n            return false;\n        }\n        const { content } = tracker.currentWidget;\n        const index = content.activeCellIndex;\n        // If there are selections that are not the active cell,\n        // this command is confusing, so disable it.\n        for (let i = 0; i < content.widgets.length; ++i) {\n            if (content.isSelected(content.widgets[i]) && i !== index) {\n                return false;\n            }\n        }\n        return true;\n    }\n    Private.isEnabledAndSingleSelected = isEnabledAndSingleSelected;\n    /**\n     * Whether there is an notebook active, with a single selected cell.\n     */\n    function isEnabledAndHeadingSelected(shell, tracker) {\n        if (!Private.isEnabled(shell, tracker)) {\n            return false;\n        }\n        const { content } = tracker.currentWidget;\n        const index = content.activeCellIndex;\n        if (!(content.activeCell instanceof MarkdownCell)) {\n            return false;\n        }\n        // If there are selections that are not the active cell,\n        // this command is confusing, so disable it.\n        for (let i = 0; i < content.widgets.length; ++i) {\n            if (content.isSelected(content.widgets[i]) && i !== index) {\n                return false;\n            }\n        }\n        return true;\n    }\n    Private.isEnabledAndHeadingSelected = isEnabledAndHeadingSelected;\n    /**\n     * The default Export To ... formats and their human readable labels.\n     */\n    function getFormatLabels(translator) {\n        translator = translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        return {\n            html: trans.__('HTML'),\n            latex: trans.__('LaTeX'),\n            markdown: trans.__('Markdown'),\n            pdf: trans.__('PDF'),\n            rst: trans.__('ReStructured Text'),\n            script: trans.__('Executable Script'),\n            slides: trans.__('Reveal.js Slides')\n        };\n    }\n    Private.getFormatLabels = getFormatLabels;\n    /**\n     * Raises a silent notification that is read by screen readers\n     *\n     * FIXME: Once a notificatiom API is introduced (https://github.com/jupyterlab/jupyterlab/issues/689),\n     * this can be refactored to use the same.\n     *\n     * More discussion at https://github.com/jupyterlab/jupyterlab/pull/9031#issuecomment-773541469\n     *\n     *\n     * @param message Message to be relayed to screen readers\n     * @param notebookNode DOM node to which the notification container is attached\n     */\n    function raiseSilentNotification(message, notebookNode) {\n        const hiddenAlertContainerId = `sr-message-container-${notebookNode.id}`;\n        const hiddenAlertContainer = document.getElementById(hiddenAlertContainerId) ||\n            document.createElement('div');\n        // If the container is not available, append the newly created container\n        // to the current notebook panel and set related properties\n        if (hiddenAlertContainer.getAttribute('id') !== hiddenAlertContainerId) {\n            hiddenAlertContainer.classList.add('sr-only');\n            hiddenAlertContainer.setAttribute('id', hiddenAlertContainerId);\n            hiddenAlertContainer.setAttribute('role', 'alert');\n            hiddenAlertContainer.hidden = true;\n            notebookNode.appendChild(hiddenAlertContainer);\n        }\n        // Insert/Update alert container with the notification message\n        hiddenAlertContainer.innerText = message;\n    }\n    Private.raiseSilentNotification = raiseSilentNotification;\n    /**\n     * A widget hosting a cloned output area.\n     */\n    class ClonedOutputArea extends Panel {\n        constructor(options) {\n            super();\n            this._cell = null;\n            const trans = (options.translator || nullTranslator).load('jupyterlab');\n            this._notebook = options.notebook;\n            this._index = options.index !== undefined ? options.index : -1;\n            this._cell = options.cell || null;\n            this.id = `LinkedOutputView-${UUID.uuid4()}`;\n            this.title.label = 'Output View';\n            this.title.icon = notebookIcon;\n            this.title.caption = this._notebook.title.label\n                ? trans.__('For Notebook: %1', this._notebook.title.label)\n                : trans.__('For Notebook:');\n            this.addClass('jp-LinkedOutputView');\n            // Wait for the notebook to be loaded before\n            // cloning the output area.\n            void this._notebook.context.ready.then(() => {\n                if (!this._cell) {\n                    this._cell = this._notebook.content.widgets[this._index];\n                }\n                if (!this._cell || this._cell.model.type !== 'code') {\n                    this.dispose();\n                    return;\n                }\n                const clone = this._cell.cloneOutputArea();\n                this.addWidget(clone);\n            });\n        }\n        /**\n         * The index of the cell in the notebook.\n         */\n        get index() {\n            return this._cell\n                ? ArrayExt.findFirstIndex(this._notebook.content.widgets, c => c === this._cell)\n                : this._index;\n        }\n        /**\n         * The path of the notebook for the cloned output area.\n         */\n        get path() {\n            return this._notebook.context.path;\n        }\n    }\n    Private.ClonedOutputArea = ClonedOutputArea;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/statusbar/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/documentsearch/style/index.js';\nimport '@jupyterlab/codemirror/style/index.js';\nimport '@jupyterlab/docmanager/style/index.js';\nimport '@jupyterlab/filebrowser/style/index.js';\nimport '@jupyterlab/toc/style/index.js';\nimport '@jupyterlab/cells/style/index.js';\nimport '@jupyterlab/completer/style/index.js';\nimport '@jupyterlab/docmanager-extension/style/index.js';\nimport '@jupyterlab/launcher/style/index.js';\nimport '@jupyterlab/logconsole/style/index.js';\nimport '@jupyterlab/lsp/style/index.js';\nimport '@jupyterlab/mainmenu/style/index.js';\nimport '@jupyterlab/notebook/style/index.js';\nimport '@jupyterlab/metadataform/style/index.js';\nimport '@jupyterlab/property-inspector/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Dialog, showDialog } from '@jupyterlab/apputils';\nimport { CodeCell } from '@jupyterlab/cells';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { findIndex } from '@lumino/algorithm';\nimport { KernelError } from './actions';\n/**\n * Run a single notebook cell.\n *\n * @param options Cell execution options\n * @returns Execution status\n */\nexport async function runCell({ cell, notebook, notebookConfig, onCellExecuted, onCellExecutionScheduled, sessionContext, sessionDialogs, translator }) {\n    var _a;\n    translator = translator !== null && translator !== void 0 ? translator : nullTranslator;\n    const trans = translator.load('jupyterlab');\n    switch (cell.model.type) {\n        case 'markdown':\n            cell.rendered = true;\n            cell.inputHidden = false;\n            onCellExecuted({ cell, success: true });\n            break;\n        case 'code':\n            if (sessionContext) {\n                if (sessionContext.isTerminating) {\n                    await showDialog({\n                        title: trans.__('Kernel Terminating'),\n                        body: trans.__('The kernel for %1 appears to be terminating. You can not run any cell for now.', (_a = sessionContext.session) === null || _a === void 0 ? void 0 : _a.path),\n                        buttons: [Dialog.okButton()]\n                    });\n                    break;\n                }\n                if (sessionContext.pendingInput) {\n                    await showDialog({\n                        title: trans.__('Cell not executed due to pending input'),\n                        body: trans.__('The cell has not been executed to avoid kernel deadlock as there is another pending input! Type your input in the input box, press Enter and try again.'),\n                        buttons: [Dialog.okButton()]\n                    });\n                    return false;\n                }\n                if (sessionContext.hasNoKernel) {\n                    const shouldSelect = await sessionContext.startKernel();\n                    if (shouldSelect && sessionDialogs) {\n                        await sessionDialogs.selectKernel(sessionContext);\n                    }\n                }\n                if (sessionContext.hasNoKernel) {\n                    cell.model.sharedModel.transact(() => {\n                        cell.model.clearExecution();\n                    });\n                    return true;\n                }\n                const deletedCells = notebook.deletedCells;\n                onCellExecutionScheduled({ cell });\n                let ran = false;\n                try {\n                    const reply = await CodeCell.execute(cell, sessionContext, {\n                        deletedCells,\n                        recordTiming: notebookConfig.recordTiming\n                    });\n                    deletedCells.splice(0, deletedCells.length);\n                    ran = (() => {\n                        if (cell.isDisposed) {\n                            return false;\n                        }\n                        if (!reply) {\n                            return true;\n                        }\n                        if (reply.content.status === 'ok') {\n                            const content = reply.content;\n                            if (content.payload && content.payload.length) {\n                                handlePayload(content, notebook, cell);\n                            }\n                            return true;\n                        }\n                        else {\n                            throw new KernelError(reply.content);\n                        }\n                    })();\n                }\n                catch (reason) {\n                    if (cell.isDisposed || reason.message.startsWith('Canceled')) {\n                        ran = false;\n                    }\n                    else {\n                        onCellExecuted({\n                            cell,\n                            success: false,\n                            error: reason\n                        });\n                        throw reason;\n                    }\n                }\n                if (ran) {\n                    onCellExecuted({ cell, success: true });\n                }\n                return ran;\n            }\n            cell.model.sharedModel.transact(() => {\n                cell.model.clearExecution();\n            }, false);\n            break;\n        default:\n            break;\n    }\n    return Promise.resolve(true);\n}\n/**\n * Handle payloads from an execute reply.\n *\n * #### Notes\n * Payloads are deprecated and there are no official interfaces for them in\n * the kernel type definitions.\n * See [Payloads (DEPRECATED)](https://jupyter-client.readthedocs.io/en/latest/messaging.html#payloads-deprecated).\n */\nfunction handlePayload(content, notebook, cell) {\n    var _a;\n    const setNextInput = (_a = content.payload) === null || _a === void 0 ? void 0 : _a.filter(i => {\n        return i.source === 'set_next_input';\n    })[0];\n    if (!setNextInput) {\n        return;\n    }\n    const text = setNextInput.text;\n    const replace = setNextInput.replace;\n    if (replace) {\n        cell.model.sharedModel.setSource(text);\n        return;\n    }\n    // Create a new code cell and add as the next cell.\n    const notebookModel = notebook.sharedModel;\n    const cells = notebook.cells;\n    const index = findIndex(cells, model => model === cell.model);\n    // While this cell has no outputs and could be trusted following the letter\n    // of Jupyter trust model, its content comes from kernel and hence is not\n    // necessarily controlled by the user; if we set it as trusted, a user\n    // executing cells in succession could end up with unwanted trusted output.\n    if (index === -1) {\n        notebookModel.insertCell(notebookModel.cells.length, {\n            cell_type: 'code',\n            source: text,\n            metadata: {\n                trusted: false\n            }\n        });\n    }\n    else {\n        notebookModel.insertCell(index + 1, {\n            cell_type: 'code',\n            source: text,\n            metadata: {\n                trusted: false\n            }\n        });\n    }\n}\n//# sourceMappingURL=cellexecutor.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Clipboard, Dialog, showDialog } from '@jupyterlab/apputils';\nimport { isMarkdownCellModel, isRawCellModel, MarkdownCell } from '@jupyterlab/cells';\nimport { Notification } from '@jupyterlab/apputils';\nimport { signalToPromise } from '@jupyterlab/coreutils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { every, findIndex } from '@lumino/algorithm';\nimport { JSONExt } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\nimport * as React from 'react';\nimport { runCell as defaultRunCell } from './cellexecutor';\n/**\n * The mimetype used for Jupyter cell data.\n */\nconst JUPYTER_CELL_MIME = 'application/vnd.jupyter.cells';\nexport class KernelError extends Error {\n    /**\n     * Construct the kernel error.\n     */\n    constructor(content) {\n        const errorContent = content;\n        const errorName = errorContent.ename;\n        const errorValue = errorContent.evalue;\n        super(`KernelReplyNotOK: ${errorName} ${errorValue}`);\n        this.errorName = errorName;\n        this.errorValue = errorValue;\n        this.traceback = errorContent.traceback;\n        Object.setPrototypeOf(this, KernelError.prototype);\n    }\n}\n/**\n * A collection of actions that run against notebooks.\n *\n * #### Notes\n * All of the actions are a no-op if there is no model on the notebook.\n * The actions set the widget `mode` to `'command'` unless otherwise specified.\n * The actions will preserve the selection on the notebook widget unless\n * otherwise specified.\n */\nexport class NotebookActions {\n    /**\n     * A signal that emits whenever a cell completes execution.\n     */\n    static get executed() {\n        return Private.executed;\n    }\n    /**\n     * A signal that emits whenever a cell execution is scheduled.\n     */\n    static get executionScheduled() {\n        return Private.executionScheduled;\n    }\n    /**\n     * A signal that emits when one notebook's cells are all executed.\n     */\n    static get selectionExecuted() {\n        return Private.selectionExecuted;\n    }\n    /**\n     * A signal that emits when a cell's output is cleared.\n     */\n    static get outputCleared() {\n        return Private.outputCleared;\n    }\n    /**\n     * A private constructor for the `NotebookActions` class.\n     *\n     * #### Notes\n     * This class can never be instantiated. Its static member `executed` will be\n     * merged with the `NotebookActions` namespace. The reason it exists as a\n     * standalone class is because at run time, the `Private.executed` variable\n     * does not yet exist, so it needs to be referenced via a getter.\n     */\n    constructor() {\n        // Intentionally empty.\n    }\n}\n/**\n * A namespace for `NotebookActions` static methods.\n */\n(function (NotebookActions) {\n    /**\n     * Split the active cell into two or more cells.\n     *\n     * @param notebook The target notebook widget.\n     *\n     * #### Notes\n     * It will preserve the existing mode.\n     * The last cell will be activated if no selection is found.\n     * If text was selected, the cell containing the selection will\n     * be activated.\n     * The existing selection will be cleared.\n     * The activated cell will have focus and the cursor will\n     * remain in the initial position.\n     * The leading whitespace in the second cell will be removed.\n     * If there is no content, two empty cells will be created.\n     * Both cells will have the same type as the original cell.\n     * This action can be undone.\n     */\n    function splitCell(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        // We force the notebook back in edit mode as splitting a cell\n        // requires using the cursor position within a cell (aka it was recently in edit mode)\n        // However the focus may be stolen if the action is triggered\n        // from the menu entry; switching the notebook in command mode.\n        notebook.mode = 'edit';\n        notebook.deselectAll();\n        const nbModel = notebook.model;\n        const index = notebook.activeCellIndex;\n        const child = notebook.widgets[index];\n        const editor = child.editor;\n        if (!editor) {\n            // TODO\n            return;\n        }\n        const selections = editor.getSelections();\n        const orig = child.model.sharedModel.getSource();\n        const offsets = [0];\n        let start = -1;\n        let end = -1;\n        for (let i = 0; i < selections.length; i++) {\n            // append start and end to handle selections\n            // cursors will have same start and end\n            start = editor.getOffsetAt(selections[i].start);\n            end = editor.getOffsetAt(selections[i].end);\n            if (start < end) {\n                offsets.push(start);\n                offsets.push(end);\n            }\n            else if (end < start) {\n                offsets.push(end);\n                offsets.push(start);\n            }\n            else {\n                offsets.push(start);\n            }\n        }\n        offsets.push(orig.length);\n        const cellCountAfterSplit = offsets.length - 1;\n        const clones = offsets.slice(0, -1).map((offset, offsetIdx) => {\n            const { cell_type, metadata, outputs } = child.model.sharedModel.toJSON();\n            return {\n                cell_type,\n                metadata,\n                source: orig\n                    .slice(offset, offsets[offsetIdx + 1])\n                    .replace(/^\\n+/, '')\n                    .replace(/\\n+$/, ''),\n                outputs: offsetIdx === cellCountAfterSplit - 1 && cell_type === 'code'\n                    ? outputs\n                    : undefined\n            };\n        });\n        nbModel.sharedModel.transact(() => {\n            nbModel.sharedModel.deleteCell(index);\n            nbModel.sharedModel.insertCells(index, clones);\n        });\n        // If there is a selection the selected cell will be activated\n        const activeCellDelta = start !== end ? 2 : 1;\n        notebook.activeCellIndex = index + clones.length - activeCellDelta;\n        notebook\n            .scrollToItem(notebook.activeCellIndex)\n            .then(() => {\n            var _a;\n            (_a = notebook.activeCell) === null || _a === void 0 ? void 0 : _a.editor.focus();\n        })\n            .catch(reason => {\n            // no-op\n        });\n        void Private.handleState(notebook, state);\n    }\n    NotebookActions.splitCell = splitCell;\n    /**\n     * Merge the selected cells.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * @param mergeAbove - If only one cell is selected, indicates whether to merge it\n     *    with the cell above (true) or below (false, default).\n     *\n     * #### Notes\n     * The widget mode will be preserved.\n     * If only one cell is selected and `mergeAbove` is true, the above cell will be selected.\n     * If only one cell is selected and `mergeAbove` is false, the below cell will be selected.\n     * If the active cell is a code cell, its outputs will be cleared.\n     * This action can be undone.\n     * The final cell will have the same type as the active cell.\n     * If the active cell is a markdown cell, it will be unrendered.\n     */\n    function mergeCells(notebook, mergeAbove = false) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        const toMerge = [];\n        const toDelete = [];\n        const model = notebook.model;\n        const cells = model.cells;\n        const primary = notebook.activeCell;\n        const active = notebook.activeCellIndex;\n        const attachments = {};\n        // Get the cells to merge.\n        notebook.widgets.forEach((child, index) => {\n            if (notebook.isSelectedOrActive(child)) {\n                toMerge.push(child.model.sharedModel.getSource());\n                if (index !== active) {\n                    toDelete.push(index);\n                }\n                // Collect attachments if the cell is a markdown cell or a raw cell\n                const model = child.model;\n                if (isRawCellModel(model) || isMarkdownCellModel(model)) {\n                    for (const key of model.attachments.keys) {\n                        attachments[key] = model.attachments.get(key).toJSON();\n                    }\n                }\n            }\n        });\n        // Check for only a single cell selected.\n        if (toMerge.length === 1) {\n            // Merge with the cell above when mergeAbove is true\n            if (mergeAbove === true) {\n                // Bail if it is the first cell.\n                if (active === 0) {\n                    return;\n                }\n                // Otherwise merge with the previous cell.\n                const cellModel = cells.get(active - 1);\n                toMerge.unshift(cellModel.sharedModel.getSource());\n                toDelete.push(active - 1);\n            }\n            else if (mergeAbove === false) {\n                // Bail if it is the last cell.\n                if (active === cells.length - 1) {\n                    return;\n                }\n                // Otherwise merge with the next cell.\n                const cellModel = cells.get(active + 1);\n                toMerge.push(cellModel.sharedModel.getSource());\n                toDelete.push(active + 1);\n            }\n        }\n        notebook.deselectAll();\n        const primaryModel = primary.model.sharedModel;\n        const { cell_type, metadata } = primaryModel.toJSON();\n        if (primaryModel.cell_type === 'code') {\n            // We can trust this cell because the outputs will be removed.\n            metadata.trusted = true;\n        }\n        const newModel = {\n            cell_type,\n            metadata,\n            source: toMerge.join('\\n\\n'),\n            attachments: primaryModel.cell_type === 'markdown' ||\n                primaryModel.cell_type === 'raw'\n                ? attachments\n                : undefined\n        };\n        // Make the changes while preserving history.\n        model.sharedModel.transact(() => {\n            model.sharedModel.deleteCell(active);\n            model.sharedModel.insertCell(active, newModel);\n            toDelete\n                .sort((a, b) => b - a)\n                .forEach(index => {\n                model.sharedModel.deleteCell(index);\n            });\n        });\n        // If the original cell is a markdown cell, make sure\n        // the new cell is unrendered.\n        if (primary instanceof MarkdownCell) {\n            notebook.activeCell.rendered = false;\n        }\n        void Private.handleState(notebook, state);\n    }\n    NotebookActions.mergeCells = mergeCells;\n    /**\n     * Delete the selected cells.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * #### Notes\n     * The cell after the last selected cell will be activated.\n     * It will add a code cell if all cells are deleted.\n     * This action can be undone.\n     */\n    function deleteCells(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        Private.deleteCells(notebook);\n        void Private.handleState(notebook, state, true);\n    }\n    NotebookActions.deleteCells = deleteCells;\n    /**\n     * Insert a new code cell above the active cell or in index 0 if the notebook is empty.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * #### Notes\n     * The widget mode will be preserved.\n     * This action can be undone.\n     * The existing selection will be cleared.\n     * The new cell will the active cell.\n     */\n    function insertAbove(notebook) {\n        if (!notebook.model) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        const model = notebook.model;\n        const newIndex = notebook.activeCell ? notebook.activeCellIndex : 0;\n        model.sharedModel.insertCell(newIndex, {\n            cell_type: notebook.notebookConfig.defaultCell,\n            metadata: notebook.notebookConfig.defaultCell === 'code'\n                ? {\n                    // This is an empty cell created by user, thus is trusted\n                    trusted: true\n                }\n                : {}\n        });\n        // Make the newly inserted cell active.\n        notebook.activeCellIndex = newIndex;\n        notebook.deselectAll();\n        void Private.handleState(notebook, state, true);\n    }\n    NotebookActions.insertAbove = insertAbove;\n    /**\n     * Insert a new code cell below the active cell or in index 0 if the notebook is empty.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * #### Notes\n     * The widget mode will be preserved.\n     * This action can be undone.\n     * The existing selection will be cleared.\n     * The new cell will be the active cell.\n     */\n    function insertBelow(notebook) {\n        if (!notebook.model) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        const model = notebook.model;\n        const newIndex = notebook.activeCell ? notebook.activeCellIndex + 1 : 0;\n        model.sharedModel.insertCell(newIndex, {\n            cell_type: notebook.notebookConfig.defaultCell,\n            metadata: notebook.notebookConfig.defaultCell === 'code'\n                ? {\n                    // This is an empty cell created by user, thus is trusted\n                    trusted: true\n                }\n                : {}\n        });\n        // Make the newly inserted cell active.\n        notebook.activeCellIndex = newIndex;\n        notebook.deselectAll();\n        void Private.handleState(notebook, state, true);\n    }\n    NotebookActions.insertBelow = insertBelow;\n    function move(notebook, shift) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        const firstIndex = notebook.widgets.findIndex(w => notebook.isSelectedOrActive(w));\n        let lastIndex = notebook.widgets\n            .slice(firstIndex + 1)\n            .findIndex(w => !notebook.isSelectedOrActive(w));\n        if (lastIndex >= 0) {\n            lastIndex += firstIndex + 1;\n        }\n        else {\n            lastIndex = notebook.model.cells.length;\n        }\n        if (shift > 0) {\n            notebook.moveCell(firstIndex, lastIndex, lastIndex - firstIndex);\n        }\n        else {\n            notebook.moveCell(firstIndex, firstIndex + shift, lastIndex - firstIndex);\n        }\n        void Private.handleState(notebook, state, true);\n    }\n    /**\n     * Move the selected cell(s) down.\n     *\n     * @param notebook = The target notebook widget.\n     */\n    function moveDown(notebook) {\n        move(notebook, 1);\n    }\n    NotebookActions.moveDown = moveDown;\n    /**\n     * Move the selected cell(s) up.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function moveUp(notebook) {\n        move(notebook, -1);\n    }\n    NotebookActions.moveUp = moveUp;\n    /**\n     * Change the selected cell type(s).\n     *\n     * @param notebook - The target notebook widget.\n     * @param value - The target cell type.\n     * @param translator - The application translator.\n     *\n     * #### Notes\n     * It should preserve the widget mode.\n     * This action can be undone.\n     * The existing selection will be cleared.\n     * Any cells converted to markdown will be unrendered.\n     */\n    function changeCellType(notebook, value, translator) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        Private.changeCellType(notebook, value, translator);\n        void Private.handleState(notebook, state);\n    }\n    NotebookActions.changeCellType = changeCellType;\n    /**\n     * Run the selected cell(s).\n     *\n     * @param notebook - The target notebook widget.\n     * @param sessionContext - The client session object.\n     * @param sessionDialogs - The session dialogs.\n     * @param translator - The application translator.\n     *\n     * #### Notes\n     * The last selected cell will be activated, but not scrolled into view.\n     * The existing selection will be cleared.\n     * An execution error will prevent the remaining code cells from executing.\n     * All markdown cells will be rendered.\n     */\n    function run(notebook, sessionContext, sessionDialogs, translator) {\n        if (!notebook.model || !notebook.activeCell) {\n            return Promise.resolve(false);\n        }\n        const state = Private.getState(notebook);\n        const promise = Private.runSelected(notebook, sessionContext, sessionDialogs, translator);\n        void Private.handleRunState(notebook, state);\n        return promise;\n    }\n    NotebookActions.run = run;\n    /**\n     * Run specified cells.\n     *\n     * @param notebook - The target notebook widget.\n     * @param cells - The cells to run.\n     * @param sessionContext - The client session object.\n     * @param sessionDialogs - The session dialogs.\n     * @param translator - The application translator.\n     *\n     * #### Notes\n     * The existing selection will be preserved.\n     * The mode will be changed to command.\n     * An execution error will prevent the remaining code cells from executing.\n     * All markdown cells will be rendered.\n     */\n    function runCells(notebook, cells, sessionContext, sessionDialogs, translator) {\n        if (!notebook.model) {\n            return Promise.resolve(false);\n        }\n        const state = Private.getState(notebook);\n        const promise = Private.runCells(notebook, cells, sessionContext, sessionDialogs, translator);\n        void Private.handleRunState(notebook, state);\n        return promise;\n    }\n    NotebookActions.runCells = runCells;\n    /**\n     * Run the selected cell(s) and advance to the next cell.\n     *\n     * @param notebook - The target notebook widget.\n     * @param sessionContext - The client session object.\n     * @param sessionDialogs - The session dialogs.\n     * @param translator - The application translator.\n     *\n     * #### Notes\n     * The existing selection will be cleared.\n     * The cell after the last selected cell will be activated and scrolled into view.\n     * An execution error will prevent the remaining code cells from executing.\n     * All markdown cells will be rendered.\n     * If the last selected cell is the last cell, a new code cell\n     * will be created in `'edit'` mode.  The new cell creation can be undone.\n     */\n    async function runAndAdvance(notebook, sessionContext, sessionDialogs, translator) {\n        var _a;\n        if (!notebook.model || !notebook.activeCell) {\n            return Promise.resolve(false);\n        }\n        const state = Private.getState(notebook);\n        const promise = Private.runSelected(notebook, sessionContext, sessionDialogs, translator);\n        const model = notebook.model;\n        if (notebook.activeCellIndex === notebook.widgets.length - 1) {\n            // Do not use push here, as we want an widget insertion\n            // to make sure no placeholder widget is rendered.\n            model.sharedModel.insertCell(notebook.widgets.length, {\n                cell_type: notebook.notebookConfig.defaultCell,\n                metadata: notebook.notebookConfig.defaultCell === 'code'\n                    ? {\n                        // This is an empty cell created by user, thus is trusted\n                        trusted: true\n                    }\n                    : {}\n            });\n            notebook.activeCellIndex++;\n            if (((_a = notebook.activeCell) === null || _a === void 0 ? void 0 : _a.inViewport) === false) {\n                await signalToPromise(notebook.activeCell.inViewportChanged, 200).catch(() => {\n                    // no-op\n                });\n            }\n            notebook.mode = 'edit';\n        }\n        else {\n            notebook.activeCellIndex++;\n        }\n        // If a cell is outside of viewport and scrolling is needed, the `smart`\n        // logic in `handleRunState` will choose appropriate alignment, except\n        // for the case of a small cell less than one viewport away for which it\n        // would use the `auto` heuristic, for which we set the preferred alignment\n        // to `center` as in most cases there will be space below and above a cell\n        // that is smaller than (or approximately equal to) the viewport size.\n        void Private.handleRunState(notebook, state, 'center');\n        return promise;\n    }\n    NotebookActions.runAndAdvance = runAndAdvance;\n    /**\n     * Run the selected cell(s) and insert a new code cell.\n     *\n     * @param notebook - The target notebook widget.\n     * @param sessionContext - The client session object.\n     * @param sessionDialogs - The session dialogs.\n     * @param translator - The application translator.\n     *\n     * #### Notes\n     * An execution error will prevent the remaining code cells from executing.\n     * All markdown cells will be rendered.\n     * The widget mode will be set to `'edit'` after running.\n     * The existing selection will be cleared.\n     * The cell insert can be undone.\n     * The new cell will be scrolled into view.\n     */\n    async function runAndInsert(notebook, sessionContext, sessionDialogs, translator) {\n        var _a;\n        if (!notebook.model || !notebook.activeCell) {\n            return Promise.resolve(false);\n        }\n        const state = Private.getState(notebook);\n        const promise = Private.runSelected(notebook, sessionContext, sessionDialogs, translator);\n        const model = notebook.model;\n        model.sharedModel.insertCell(notebook.activeCellIndex + 1, {\n            cell_type: notebook.notebookConfig.defaultCell,\n            metadata: notebook.notebookConfig.defaultCell === 'code'\n                ? {\n                    // This is an empty cell created by user, thus is trusted\n                    trusted: true\n                }\n                : {}\n        });\n        notebook.activeCellIndex++;\n        if (((_a = notebook.activeCell) === null || _a === void 0 ? void 0 : _a.inViewport) === false) {\n            await signalToPromise(notebook.activeCell.inViewportChanged, 200).catch(() => {\n                // no-op\n            });\n        }\n        notebook.mode = 'edit';\n        void Private.handleRunState(notebook, state, 'center');\n        return promise;\n    }\n    NotebookActions.runAndInsert = runAndInsert;\n    /**\n     * Run all of the cells in the notebook.\n     *\n     * @param notebook - The target notebook widget.\n     * @param sessionContext - The client session object.\n     * @param sessionDialogs - The session dialogs.\n     * @param translator - The application translator.\n     *\n     * #### Notes\n     * The existing selection will be cleared.\n     * An execution error will prevent the remaining code cells from executing.\n     * All markdown cells will be rendered.\n     * The last cell in the notebook will be activated and scrolled into view.\n     */\n    function runAll(notebook, sessionContext, sessionDialogs, translator) {\n        if (!notebook.model || !notebook.activeCell) {\n            return Promise.resolve(false);\n        }\n        const state = Private.getState(notebook);\n        const lastIndex = notebook.widgets.length;\n        const promise = Private.runCells(notebook, notebook.widgets, sessionContext, sessionDialogs, translator);\n        notebook.activeCellIndex = lastIndex;\n        notebook.deselectAll();\n        void Private.handleRunState(notebook, state);\n        return promise;\n    }\n    NotebookActions.runAll = runAll;\n    function renderAllMarkdown(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return Promise.resolve(false);\n        }\n        const previousIndex = notebook.activeCellIndex;\n        const state = Private.getState(notebook);\n        notebook.widgets.forEach((child, index) => {\n            if (child.model.type === 'markdown') {\n                notebook.select(child);\n                // This is to make sure that the activeCell\n                // does not get executed\n                notebook.activeCellIndex = index;\n            }\n        });\n        if (notebook.activeCell.model.type !== 'markdown') {\n            return Promise.resolve(true);\n        }\n        const promise = Private.runSelected(notebook);\n        notebook.activeCellIndex = previousIndex;\n        void Private.handleRunState(notebook, state);\n        return promise;\n    }\n    NotebookActions.renderAllMarkdown = renderAllMarkdown;\n    /**\n     * Run all of the cells before the currently active cell (exclusive).\n     *\n     * @param notebook - The target notebook widget.\n     * @param sessionContext - The client session object.\n     * @param sessionDialogs - The session dialogs.\n     * @param translator - The application translator.\n     *\n     * #### Notes\n     * The existing selection will be cleared.\n     * An execution error will prevent the remaining code cells from executing.\n     * All markdown cells will be rendered.\n     * The currently active cell will remain selected.\n     */\n    function runAllAbove(notebook, sessionContext, sessionDialogs, translator) {\n        const { activeCell, activeCellIndex, model } = notebook;\n        if (!model || !activeCell || activeCellIndex < 1) {\n            return Promise.resolve(false);\n        }\n        const state = Private.getState(notebook);\n        const promise = Private.runCells(notebook, notebook.widgets.slice(0, notebook.activeCellIndex), sessionContext, sessionDialogs, translator);\n        notebook.deselectAll();\n        void Private.handleRunState(notebook, state);\n        return promise;\n    }\n    NotebookActions.runAllAbove = runAllAbove;\n    /**\n     * Run all of the cells after the currently active cell (inclusive).\n     *\n     * @param notebook - The target notebook widget.\n     * @param sessionContext - The client session object.\n     * @param sessionDialogs - The session dialogs.\n     * @param translator - The application translator.\n     *\n     * #### Notes\n     * The existing selection will be cleared.\n     * An execution error will prevent the remaining code cells from executing.\n     * All markdown cells will be rendered.\n     * The last cell in the notebook will be activated and scrolled into view.\n     */\n    function runAllBelow(notebook, sessionContext, sessionDialogs, translator) {\n        if (!notebook.model || !notebook.activeCell) {\n            return Promise.resolve(false);\n        }\n        const state = Private.getState(notebook);\n        const lastIndex = notebook.widgets.length;\n        const promise = Private.runCells(notebook, notebook.widgets.slice(notebook.activeCellIndex), sessionContext, sessionDialogs, translator);\n        notebook.activeCellIndex = lastIndex;\n        notebook.deselectAll();\n        void Private.handleRunState(notebook, state);\n        return promise;\n    }\n    NotebookActions.runAllBelow = runAllBelow;\n    /**\n     * Replaces the selection in the active cell of the notebook.\n     *\n     * @param notebook - The target notebook widget.\n     * @param text - The text to replace the selection.\n     */\n    function replaceSelection(notebook, text) {\n        var _a, _b, _c;\n        if (!notebook.model || !((_a = notebook.activeCell) === null || _a === void 0 ? void 0 : _a.editor)) {\n            return;\n        }\n        (_c = (_b = notebook.activeCell.editor).replaceSelection) === null || _c === void 0 ? void 0 : _c.call(_b, text);\n    }\n    NotebookActions.replaceSelection = replaceSelection;\n    /**\n     * Select the above the active cell.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * #### Notes\n     * The widget mode will be preserved.\n     * This is a no-op if the first cell is the active cell.\n     * This will skip any collapsed cells.\n     * The existing selection will be cleared.\n     */\n    function selectAbove(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const footer = notebook.layout.footer;\n        if (footer && document.activeElement === footer.node) {\n            footer.node.blur();\n            notebook.mode = 'command';\n            return;\n        }\n        if (notebook.activeCellIndex === 0) {\n            return;\n        }\n        let possibleNextCellIndex = notebook.activeCellIndex - 1;\n        // find first non hidden cell above current cell\n        while (possibleNextCellIndex >= 0) {\n            const possibleNextCell = notebook.widgets[possibleNextCellIndex];\n            if (!possibleNextCell.inputHidden && !possibleNextCell.isHidden) {\n                break;\n            }\n            possibleNextCellIndex -= 1;\n        }\n        const state = Private.getState(notebook);\n        notebook.activeCellIndex = possibleNextCellIndex;\n        notebook.deselectAll();\n        void Private.handleState(notebook, state, true);\n    }\n    NotebookActions.selectAbove = selectAbove;\n    /**\n     * Select the cell below the active cell.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * #### Notes\n     * The widget mode will be preserved.\n     * This is a no-op if the last cell is the active cell.\n     * This will skip any collapsed cells.\n     * The existing selection will be cleared.\n     */\n    function selectBelow(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        let maxCellIndex = notebook.widgets.length - 1;\n        // Find last non-hidden cell\n        while (notebook.widgets[maxCellIndex].isHidden ||\n            notebook.widgets[maxCellIndex].inputHidden) {\n            maxCellIndex -= 1;\n        }\n        if (notebook.activeCellIndex === maxCellIndex) {\n            const footer = notebook.layout.footer;\n            footer === null || footer === void 0 ? void 0 : footer.node.focus();\n            return;\n        }\n        let possibleNextCellIndex = notebook.activeCellIndex + 1;\n        // find first non hidden cell below current cell\n        while (possibleNextCellIndex < maxCellIndex) {\n            let possibleNextCell = notebook.widgets[possibleNextCellIndex];\n            if (!possibleNextCell.inputHidden && !possibleNextCell.isHidden) {\n                break;\n            }\n            possibleNextCellIndex += 1;\n        }\n        const state = Private.getState(notebook);\n        notebook.activeCellIndex = possibleNextCellIndex;\n        notebook.deselectAll();\n        void Private.handleState(notebook, state, true);\n    }\n    NotebookActions.selectBelow = selectBelow;\n    /** Insert new heading of same level above active cell.\n     *\n     * @param notebook - The target notebook widget\n     */\n    async function insertSameLevelHeadingAbove(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        let headingLevel = Private.Headings.determineHeadingLevel(notebook.activeCell, notebook);\n        if (headingLevel == -1) {\n            await Private.Headings.insertHeadingAboveCellIndex(0, 1, notebook);\n        }\n        else {\n            await Private.Headings.insertHeadingAboveCellIndex(notebook.activeCellIndex, headingLevel, notebook);\n        }\n    }\n    NotebookActions.insertSameLevelHeadingAbove = insertSameLevelHeadingAbove;\n    /** Insert new heading of same level at end of current section.\n     *\n     * @param notebook - The target notebook widget\n     */\n    async function insertSameLevelHeadingBelow(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        let headingLevel = Private.Headings.determineHeadingLevel(notebook.activeCell, notebook);\n        headingLevel = headingLevel > -1 ? headingLevel : 1;\n        let cellIdxOfHeadingBelow = Private.Headings.findLowerEqualLevelHeadingBelow(notebook.activeCell, notebook, true);\n        await Private.Headings.insertHeadingAboveCellIndex(cellIdxOfHeadingBelow == -1\n            ? notebook.model.cells.length\n            : cellIdxOfHeadingBelow, headingLevel, notebook);\n    }\n    NotebookActions.insertSameLevelHeadingBelow = insertSameLevelHeadingBelow;\n    /**\n     * Select the heading above the active cell or, if already at heading, collapse it.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * #### Notes\n     * The widget mode will be preserved.\n     * This is a no-op if the active cell is the topmost heading in collapsed state\n     * The existing selection will be cleared.\n     */\n    function selectHeadingAboveOrCollapseHeading(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        let hInfoActiveCell = getHeadingInfo(notebook.activeCell);\n        // either collapse or find the right heading to jump to\n        if (hInfoActiveCell.isHeading && !hInfoActiveCell.collapsed) {\n            setHeadingCollapse(notebook.activeCell, true, notebook);\n        }\n        else {\n            let targetHeadingCellIdx = Private.Headings.findLowerEqualLevelParentHeadingAbove(notebook.activeCell, notebook, true);\n            if (targetHeadingCellIdx > -1) {\n                notebook.activeCellIndex = targetHeadingCellIdx;\n            }\n        }\n        // clear selection and handle state\n        notebook.deselectAll();\n        void Private.handleState(notebook, state, true);\n    }\n    NotebookActions.selectHeadingAboveOrCollapseHeading = selectHeadingAboveOrCollapseHeading;\n    /**\n     * Select the heading below the active cell or, if already at heading, expand it.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * #### Notes\n     * The widget mode will be preserved.\n     * This is a no-op if the active cell is the last heading in expanded state\n     * The existing selection will be cleared.\n     */\n    function selectHeadingBelowOrExpandHeading(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        let hInfo = getHeadingInfo(notebook.activeCell);\n        if (hInfo.isHeading && hInfo.collapsed) {\n            setHeadingCollapse(notebook.activeCell, false, notebook);\n        }\n        else {\n            let targetHeadingCellIdx = Private.Headings.findHeadingBelow(notebook.activeCell, notebook, true // return index of heading cell\n            );\n            if (targetHeadingCellIdx > -1) {\n                notebook.activeCellIndex = targetHeadingCellIdx;\n            }\n        }\n        notebook.deselectAll();\n        void Private.handleState(notebook, state, true);\n    }\n    NotebookActions.selectHeadingBelowOrExpandHeading = selectHeadingBelowOrExpandHeading;\n    /**\n     * Extend the selection to the cell above.\n     *\n     * @param notebook - The target notebook widget.\n     * @param toTop - If true, denotes selection to extend to the top.\n     *\n     * #### Notes\n     * This is a no-op if the first cell is the active cell.\n     * The new cell will be activated.\n     */\n    function extendSelectionAbove(notebook, toTop = false) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        // Do not wrap around.\n        if (notebook.activeCellIndex === 0) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        notebook.mode = 'command';\n        // Check if toTop is true, if yes, selection is made to the top.\n        if (toTop) {\n            notebook.extendContiguousSelectionTo(0);\n        }\n        else {\n            notebook.extendContiguousSelectionTo(notebook.activeCellIndex - 1);\n        }\n        void Private.handleState(notebook, state, true);\n    }\n    NotebookActions.extendSelectionAbove = extendSelectionAbove;\n    /**\n     * Extend the selection to the cell below.\n     *\n     * @param notebook - The target notebook widget.\n     * @param toBottom - If true, denotes selection to extend to the bottom.\n     *\n     * #### Notes\n     * This is a no-op if the last cell is the active cell.\n     * The new cell will be activated.\n     */\n    function extendSelectionBelow(notebook, toBottom = false) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        // Do not wrap around.\n        if (notebook.activeCellIndex === notebook.widgets.length - 1) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        notebook.mode = 'command';\n        // Check if toBottom is true, if yes selection is made to the bottom.\n        if (toBottom) {\n            notebook.extendContiguousSelectionTo(notebook.widgets.length - 1);\n        }\n        else {\n            notebook.extendContiguousSelectionTo(notebook.activeCellIndex + 1);\n        }\n        void Private.handleState(notebook, state, true);\n    }\n    NotebookActions.extendSelectionBelow = extendSelectionBelow;\n    /**\n     * Select all of the cells of the notebook.\n     *\n     * @param notebook - the target notebook widget.\n     */\n    function selectAll(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        notebook.widgets.forEach(child => {\n            notebook.select(child);\n        });\n    }\n    NotebookActions.selectAll = selectAll;\n    /**\n     * Deselect all of the cells of the notebook.\n     *\n     * @param notebook - the target notebook widget.\n     */\n    function deselectAll(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        notebook.deselectAll();\n    }\n    NotebookActions.deselectAll = deselectAll;\n    /**\n     * Copy the selected cell(s) data to a clipboard.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function copy(notebook) {\n        Private.copyOrCut(notebook, false);\n    }\n    NotebookActions.copy = copy;\n    /**\n     * Cut the selected cell data to a clipboard.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * #### Notes\n     * This action can be undone.\n     * A new code cell is added if all cells are cut.\n     */\n    function cut(notebook) {\n        Private.copyOrCut(notebook, true);\n    }\n    NotebookActions.cut = cut;\n    /**\n     * Paste cells from the application clipboard.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * @param mode - the mode of adding cells:\n     *   'below' (default) adds cells below the active cell,\n     *   'belowSelected' adds cells below all selected cells,\n     *   'above' adds cells above the active cell, and\n     *   'replace' removes the currently selected cells and adds cells in their place.\n     *\n     * #### Notes\n     * The last pasted cell becomes the active cell.\n     * This is a no-op if there is no cell data on the clipboard.\n     * This action can be undone.\n     */\n    function paste(notebook, mode = 'below') {\n        const clipboard = Clipboard.getInstance();\n        if (!clipboard.hasData(JUPYTER_CELL_MIME)) {\n            return;\n        }\n        const values = clipboard.getData(JUPYTER_CELL_MIME);\n        addCells(notebook, mode, values, true);\n        void focusActiveCell(notebook);\n    }\n    NotebookActions.paste = paste;\n    /**\n     * Duplicate selected cells in the notebook without using the application clipboard.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * @param mode - the mode of adding cells:\n     *   'below' (default) adds cells below the active cell,\n     *   'belowSelected' adds cells below all selected cells,\n     *   'above' adds cells above the active cell, and\n     *   'replace' removes the currently selected cells and adds cells in their place.\n     *\n     * #### Notes\n     * The last pasted cell becomes the active cell.\n     * This is a no-op if there is no cell data on the clipboard.\n     * This action can be undone.\n     */\n    function duplicate(notebook, mode = 'below') {\n        const values = Private.selectedCells(notebook);\n        if (!values || values.length === 0) {\n            return;\n        }\n        addCells(notebook, mode, values, false); // Cells not from the clipboard\n    }\n    NotebookActions.duplicate = duplicate;\n    /**\n     * Adds cells to the notebook.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * @param mode - the mode of adding cells:\n     *   'below' (default) adds cells below the active cell,\n     *   'belowSelected' adds cells below all selected cells,\n     *   'above' adds cells above the active cell, and\n     *   'replace' removes the currently selected cells and adds cells in their place.\n     *\n     * @param values — The cells to add to the notebook.\n     *\n     * @param cellsFromClipboard — True if the cells were sourced from the clipboard.\n     *\n     * #### Notes\n     * The last added cell becomes the active cell.\n     * This is a no-op if values is an empty array.\n     * This action can be undone.\n     */\n    function addCells(notebook, mode = 'below', values, cellsFromClipboard = false) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        const model = notebook.model;\n        notebook.mode = 'command';\n        let index = 0;\n        const prevActiveCellIndex = notebook.activeCellIndex;\n        model.sharedModel.transact(() => {\n            // Set the starting index of the paste operation depending upon the mode.\n            switch (mode) {\n                case 'below':\n                    index = notebook.activeCellIndex + 1;\n                    break;\n                case 'belowSelected':\n                    notebook.widgets.forEach((child, childIndex) => {\n                        if (notebook.isSelectedOrActive(child)) {\n                            index = childIndex + 1;\n                        }\n                    });\n                    break;\n                case 'above':\n                    index = notebook.activeCellIndex;\n                    break;\n                case 'replace': {\n                    // Find the cells to delete.\n                    const toDelete = [];\n                    notebook.widgets.forEach((child, index) => {\n                        const deletable = child.model.sharedModel.getMetadata('deletable') !== false;\n                        if (notebook.isSelectedOrActive(child) && deletable) {\n                            toDelete.push(index);\n                        }\n                    });\n                    // If cells are not deletable, we may not have anything to delete.\n                    if (toDelete.length > 0) {\n                        // Delete the cells as one undo event.\n                        toDelete.reverse().forEach(i => {\n                            model.sharedModel.deleteCell(i);\n                        });\n                    }\n                    index = toDelete[0];\n                    break;\n                }\n                default:\n                    break;\n            }\n            model.sharedModel.insertCells(index, values.map(cell => {\n                cell.id =\n                    cell.cell_type === 'code' &&\n                        notebook.lastClipboardInteraction === 'cut' &&\n                        typeof cell.id === 'string'\n                        ? cell.id\n                        : undefined;\n                return cell;\n            }));\n        });\n        notebook.activeCellIndex = prevActiveCellIndex + values.length;\n        notebook.deselectAll();\n        if (cellsFromClipboard) {\n            notebook.lastClipboardInteraction = 'paste';\n        }\n        void Private.handleState(notebook, state, true);\n    }\n    /**\n     * Undo a cell action.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * #### Notes\n     * This is a no-op if there are no cell actions to undo.\n     */\n    function undo(notebook) {\n        if (!notebook.model) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        notebook.mode = 'command';\n        notebook.model.sharedModel.undo();\n        notebook.deselectAll();\n        void Private.handleState(notebook, state);\n    }\n    NotebookActions.undo = undo;\n    /**\n     * Redo a cell action.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * #### Notes\n     * This is a no-op if there are no cell actions to redo.\n     */\n    function redo(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        notebook.mode = 'command';\n        notebook.model.sharedModel.redo();\n        notebook.deselectAll();\n        void Private.handleState(notebook, state);\n    }\n    NotebookActions.redo = redo;\n    /**\n     * Toggle the line number of all cells.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * #### Notes\n     * The original state is based on the state of the active cell.\n     * The `mode` of the widget will be preserved.\n     */\n    function toggleAllLineNumbers(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        const config = notebook.editorConfig;\n        const lineNumbers = !(config.code.lineNumbers &&\n            config.markdown.lineNumbers &&\n            config.raw.lineNumbers);\n        const newConfig = {\n            code: { ...config.code, lineNumbers },\n            markdown: { ...config.markdown, lineNumbers },\n            raw: { ...config.raw, lineNumbers }\n        };\n        notebook.editorConfig = newConfig;\n        void Private.handleState(notebook, state);\n    }\n    NotebookActions.toggleAllLineNumbers = toggleAllLineNumbers;\n    /**\n     * Clear the code outputs of the selected cells.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * #### Notes\n     * The widget `mode` will be preserved.\n     */\n    function clearOutputs(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        let index = -1;\n        for (const cell of notebook.model.cells) {\n            const child = notebook.widgets[++index];\n            if (notebook.isSelectedOrActive(child) && cell.type === 'code') {\n                cell.sharedModel.transact(() => {\n                    cell.clearExecution();\n                    child.outputHidden = false;\n                }, false);\n                Private.outputCleared.emit({ notebook, cell: child });\n            }\n        }\n        void Private.handleState(notebook, state, true);\n    }\n    NotebookActions.clearOutputs = clearOutputs;\n    /**\n     * Clear all the code outputs on the widget.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * #### Notes\n     * The widget `mode` will be preserved.\n     */\n    function clearAllOutputs(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        let index = -1;\n        for (const cell of notebook.model.cells) {\n            const child = notebook.widgets[++index];\n            if (cell.type === 'code') {\n                cell.sharedModel.transact(() => {\n                    cell.clearExecution();\n                    child.outputHidden = false;\n                }, false);\n                Private.outputCleared.emit({ notebook, cell: child });\n            }\n        }\n        void Private.handleState(notebook, state, true);\n    }\n    NotebookActions.clearAllOutputs = clearAllOutputs;\n    /**\n     * Hide the code on selected code cells.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function hideCode(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        notebook.widgets.forEach(cell => {\n            if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n                cell.inputHidden = true;\n            }\n        });\n        void Private.handleState(notebook, state);\n    }\n    NotebookActions.hideCode = hideCode;\n    /**\n     * Show the code on selected code cells.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function showCode(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        notebook.widgets.forEach(cell => {\n            if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n                cell.inputHidden = false;\n            }\n        });\n        void Private.handleState(notebook, state);\n    }\n    NotebookActions.showCode = showCode;\n    /**\n     * Hide the code on all code cells.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function hideAllCode(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        notebook.widgets.forEach(cell => {\n            if (cell.model.type === 'code') {\n                cell.inputHidden = true;\n            }\n        });\n        void Private.handleState(notebook, state);\n    }\n    NotebookActions.hideAllCode = hideAllCode;\n    /**\n     * Show the code on all code cells.\n     *\n     * @param notebook The target notebook widget.\n     */\n    function showAllCode(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        notebook.widgets.forEach(cell => {\n            if (cell.model.type === 'code') {\n                cell.inputHidden = false;\n            }\n        });\n        void Private.handleState(notebook, state);\n    }\n    NotebookActions.showAllCode = showAllCode;\n    /**\n     * Hide the output on selected code cells.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function hideOutput(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        notebook.widgets.forEach(cell => {\n            if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n                cell.outputHidden = true;\n            }\n        });\n        void Private.handleState(notebook, state, true);\n    }\n    NotebookActions.hideOutput = hideOutput;\n    /**\n     * Show the output on selected code cells.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function showOutput(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        notebook.widgets.forEach(cell => {\n            if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n                cell.outputHidden = false;\n            }\n        });\n        void Private.handleState(notebook, state);\n    }\n    NotebookActions.showOutput = showOutput;\n    /**\n     * Toggle output visibility on selected code cells.\n     * If at least one output is visible, all outputs are hidden.\n     * If no outputs are visible, all outputs are made visible.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function toggleOutput(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        for (const cell of notebook.widgets) {\n            if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n                if (cell.outputHidden === false) {\n                    // We found at least one visible output; hide outputs for this cell\n                    return hideOutput(notebook);\n                }\n            }\n        }\n        // We found no selected cells or no selected cells with visible output;\n        // show outputs for selected cells\n        return showOutput(notebook);\n    }\n    NotebookActions.toggleOutput = toggleOutput;\n    /**\n     * Hide the output on all code cells.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function hideAllOutputs(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        notebook.widgets.forEach(cell => {\n            if (cell.model.type === 'code') {\n                cell.outputHidden = true;\n            }\n        });\n        void Private.handleState(notebook, state, true);\n    }\n    NotebookActions.hideAllOutputs = hideAllOutputs;\n    /**\n     * Render side-by-side.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function renderSideBySide(notebook) {\n        notebook.renderingLayout = 'side-by-side';\n    }\n    NotebookActions.renderSideBySide = renderSideBySide;\n    /**\n     * Render not side-by-side.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function renderDefault(notebook) {\n        notebook.renderingLayout = 'default';\n    }\n    NotebookActions.renderDefault = renderDefault;\n    /**\n     * Show the output on all code cells.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function showAllOutputs(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        notebook.widgets.forEach(cell => {\n            if (cell.model.type === 'code') {\n                cell.outputHidden = false;\n            }\n        });\n        void Private.handleState(notebook, state);\n    }\n    NotebookActions.showAllOutputs = showAllOutputs;\n    /**\n     * Enable output scrolling for all selected cells.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function enableOutputScrolling(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        notebook.widgets.forEach(cell => {\n            if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n                cell.outputsScrolled = true;\n            }\n        });\n        void Private.handleState(notebook, state, true);\n    }\n    NotebookActions.enableOutputScrolling = enableOutputScrolling;\n    /**\n     * Disable output scrolling for all selected cells.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function disableOutputScrolling(notebook) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        notebook.widgets.forEach(cell => {\n            if (notebook.isSelectedOrActive(cell) && cell.model.type === 'code') {\n                cell.outputsScrolled = false;\n            }\n        });\n        void Private.handleState(notebook, state);\n    }\n    NotebookActions.disableOutputScrolling = disableOutputScrolling;\n    /**\n     * Go to the last cell that is run or current if it is running.\n     *\n     * Note: This requires execution timing to be toggled on or this will have\n     * no effect.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function selectLastRunCell(notebook) {\n        let latestTime = null;\n        let latestCellIdx = null;\n        notebook.widgets.forEach((cell, cellIndx) => {\n            if (cell.model.type === 'code') {\n                const execution = cell.model.getMetadata('execution');\n                if (execution &&\n                    JSONExt.isObject(execution) &&\n                    execution['iopub.status.busy'] !== undefined) {\n                    // The busy status is used as soon as a request is received:\n                    // https://jupyter-client.readthedocs.io/en/stable/messaging.html\n                    const timestamp = execution['iopub.status.busy'].toString();\n                    if (timestamp) {\n                        const startTime = new Date(timestamp);\n                        if (!latestTime || startTime >= latestTime) {\n                            latestTime = startTime;\n                            latestCellIdx = cellIndx;\n                        }\n                    }\n                }\n            }\n        });\n        if (latestCellIdx !== null) {\n            notebook.activeCellIndex = latestCellIdx;\n        }\n    }\n    NotebookActions.selectLastRunCell = selectLastRunCell;\n    /**\n     * Set the markdown header level.\n     *\n     * @param notebook - The target notebook widget.\n     * @param level - The header level.\n     * @param translator - The application translator.\n     *\n     * #### Notes\n     * All selected cells will be switched to markdown.\n     * The level will be clamped between 1 and 6.\n     * If there is an existing header, it will be replaced.\n     * There will always be one blank space after the header.\n     * The cells will be unrendered.\n     */\n    function setMarkdownHeader(notebook, level, translator) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = Private.getState(notebook);\n        const cells = notebook.model.cells;\n        level = Math.min(Math.max(level, 1), 6);\n        notebook.widgets.forEach((child, index) => {\n            if (notebook.isSelectedOrActive(child)) {\n                Private.setMarkdownHeader(cells.get(index), level);\n            }\n        });\n        Private.changeCellType(notebook, 'markdown', translator);\n        void Private.handleState(notebook, state);\n    }\n    NotebookActions.setMarkdownHeader = setMarkdownHeader;\n    /**\n     * Collapse all cells in given notebook.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function collapseAllHeadings(notebook) {\n        const state = Private.getState(notebook);\n        for (const cell of notebook.widgets) {\n            if (NotebookActions.getHeadingInfo(cell).isHeading) {\n                NotebookActions.setHeadingCollapse(cell, true, notebook);\n                NotebookActions.setCellCollapse(cell, true);\n            }\n        }\n        notebook.activeCellIndex = 0;\n        void Private.handleState(notebook, state, true);\n    }\n    NotebookActions.collapseAllHeadings = collapseAllHeadings;\n    /**\n     * Un-collapse all cells in given notebook.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function expandAllHeadings(notebook) {\n        for (const cell of notebook.widgets) {\n            if (NotebookActions.getHeadingInfo(cell).isHeading) {\n                NotebookActions.setHeadingCollapse(cell, false, notebook);\n                // similar to collapseAll.\n                NotebookActions.setCellCollapse(cell, false);\n            }\n        }\n    }\n    NotebookActions.expandAllHeadings = expandAllHeadings;\n    function findNearestParentHeader(cell, notebook) {\n        const index = findIndex(notebook.widgets, (possibleCell, index) => {\n            return cell.model.id === possibleCell.model.id;\n        });\n        if (index === -1) {\n            return;\n        }\n        // Finds the nearest header above the given cell. If the cell is a header itself, it does not return itself;\n        // this can be checked directly by calling functions.\n        if (index >= notebook.widgets.length) {\n            return;\n        }\n        let childHeaderInfo = getHeadingInfo(notebook.widgets[index]);\n        for (let cellN = index - 1; cellN >= 0; cellN--) {\n            if (cellN < notebook.widgets.length) {\n                let hInfo = getHeadingInfo(notebook.widgets[cellN]);\n                if (hInfo.isHeading &&\n                    hInfo.headingLevel < childHeaderInfo.headingLevel) {\n                    return notebook.widgets[cellN];\n                }\n            }\n        }\n        // else no parent header found.\n        return;\n    }\n    /**\n     * Finds the \"parent\" heading of the given cell and expands.\n     * Used for the case that a cell becomes active that is within a collapsed heading.\n     * @param cell - \"Child\" cell that has become the active cell\n     * @param notebook - The target notebook widget.\n     */\n    function expandParent(cell, notebook) {\n        let nearestParentCell = findNearestParentHeader(cell, notebook);\n        if (!nearestParentCell) {\n            return;\n        }\n        if (!getHeadingInfo(nearestParentCell).collapsed &&\n            !nearestParentCell.isHidden) {\n            return;\n        }\n        if (nearestParentCell.isHidden) {\n            expandParent(nearestParentCell, notebook);\n        }\n        if (getHeadingInfo(nearestParentCell).collapsed) {\n            setHeadingCollapse(nearestParentCell, false, notebook);\n        }\n    }\n    NotebookActions.expandParent = expandParent;\n    /**\n     * Finds the next heading that isn't a child of the given markdown heading.\n     * @param cell - \"Child\" cell that has become the active cell\n     * @param notebook - The target notebook widget.\n     */\n    function findNextParentHeading(cell, notebook) {\n        let index = findIndex(notebook.widgets, (possibleCell, index) => {\n            return cell.model.id === possibleCell.model.id;\n        });\n        if (index === -1) {\n            return -1;\n        }\n        let childHeaderInfo = getHeadingInfo(cell);\n        for (index = index + 1; index < notebook.widgets.length; index++) {\n            let hInfo = getHeadingInfo(notebook.widgets[index]);\n            if (hInfo.isHeading &&\n                hInfo.headingLevel <= childHeaderInfo.headingLevel) {\n                return index;\n            }\n        }\n        // else no parent header found. return the index of the last cell\n        return notebook.widgets.length;\n    }\n    NotebookActions.findNextParentHeading = findNextParentHeading;\n    /**\n     * Set the given cell and ** all \"child\" cells **\n     * to the given collapse / expand if cell is\n     * a markdown header.\n     *\n     * @param cell - The cell\n     * @param collapsing - Whether to collapse or expand the cell\n     * @param notebook - The target notebook widget.\n     */\n    function setHeadingCollapse(cell, collapsing, notebook) {\n        const which = findIndex(notebook.widgets, (possibleCell, index) => {\n            return cell.model.id === possibleCell.model.id;\n        });\n        if (which === -1) {\n            return -1;\n        }\n        if (!notebook.widgets.length) {\n            return which + 1;\n        }\n        let selectedHeadingInfo = NotebookActions.getHeadingInfo(cell);\n        if (cell.isHidden ||\n            !(cell instanceof MarkdownCell) ||\n            !selectedHeadingInfo.isHeading) {\n            // otherwise collapsing and uncollapsing already hidden stuff can\n            // cause some funny looking bugs.\n            return which + 1;\n        }\n        let localCollapsed = false;\n        let localCollapsedLevel = 0;\n        // iterate through all cells after the active cell.\n        let cellNum;\n        for (cellNum = which + 1; cellNum < notebook.widgets.length; cellNum++) {\n            let subCell = notebook.widgets[cellNum];\n            let subCellHeadingInfo = NotebookActions.getHeadingInfo(subCell);\n            if (subCellHeadingInfo.isHeading &&\n                subCellHeadingInfo.headingLevel <= selectedHeadingInfo.headingLevel) {\n                // then reached an equivalent or higher heading level than the\n                // original the end of the collapse.\n                cellNum -= 1;\n                break;\n            }\n            if (localCollapsed &&\n                subCellHeadingInfo.isHeading &&\n                subCellHeadingInfo.headingLevel <= localCollapsedLevel) {\n                // then reached the end of the local collapsed, so unset NotebookActions.\n                localCollapsed = false;\n            }\n            if (collapsing || localCollapsed) {\n                // then no extra handling is needed for further locally collapsed\n                // headings.\n                subCell.setHidden(true);\n                continue;\n            }\n            if (subCellHeadingInfo.collapsed && subCellHeadingInfo.isHeading) {\n                localCollapsed = true;\n                localCollapsedLevel = subCellHeadingInfo.headingLevel;\n                // but don't collapse the locally collapsed heading, so continue to\n                // expand the heading. This will get noticed in the next round.\n            }\n            subCell.setHidden(false);\n        }\n        if (cellNum === notebook.widgets.length) {\n            cell.numberChildNodes = cellNum - which - 1;\n        }\n        else {\n            cell.numberChildNodes = cellNum - which;\n        }\n        NotebookActions.setCellCollapse(cell, collapsing);\n        return cellNum + 1;\n    }\n    NotebookActions.setHeadingCollapse = setHeadingCollapse;\n    /**\n     * Toggles the collapse state of the active cell of the given notebook\n     * and ** all of its \"child\" cells ** if the cell is a heading.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    function toggleCurrentHeadingCollapse(notebook) {\n        if (!notebook.activeCell || notebook.activeCellIndex === undefined) {\n            return;\n        }\n        let headingInfo = NotebookActions.getHeadingInfo(notebook.activeCell);\n        if (headingInfo.isHeading) {\n            // Then toggle!\n            NotebookActions.setHeadingCollapse(notebook.activeCell, !headingInfo.collapsed, notebook);\n        }\n        notebook.scrollToItem(notebook.activeCellIndex).catch(reason => {\n            // no-op\n        });\n    }\n    NotebookActions.toggleCurrentHeadingCollapse = toggleCurrentHeadingCollapse;\n    /**\n     * If cell is a markdown heading, sets the headingCollapsed field,\n     * and otherwise hides the cell.\n     *\n     * @param cell - The cell to collapse / expand\n     * @param collapsing - Whether to collapse or expand the given cell\n     */\n    function setCellCollapse(cell, collapsing) {\n        if (cell instanceof MarkdownCell) {\n            cell.headingCollapsed = collapsing;\n        }\n        else {\n            cell.setHidden(collapsing);\n        }\n    }\n    NotebookActions.setCellCollapse = setCellCollapse;\n    /**\n     * If given cell is a markdown heading, returns the heading level.\n     * If given cell is not markdown, returns 7 (there are only 6 levels of markdown headings)\n     *\n     * @param cell - The target cell widget.\n     */\n    function getHeadingInfo(cell) {\n        if (!(cell instanceof MarkdownCell)) {\n            return { isHeading: false, headingLevel: 7 };\n        }\n        let level = cell.headingInfo.level;\n        let collapsed = cell.headingCollapsed;\n        return { isHeading: level > 0, headingLevel: level, collapsed: collapsed };\n    }\n    NotebookActions.getHeadingInfo = getHeadingInfo;\n    /**\n     * Trust the notebook after prompting the user.\n     *\n     * @param notebook - The target notebook widget.\n     * @param translator - The application translator.\n     *\n     * @returns a promise that resolves when the transaction is finished.\n     *\n     * #### Notes\n     * No dialog will be presented if the notebook is already trusted.\n     */\n    function trust(notebook, translator) {\n        translator = translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        if (!notebook.model) {\n            return Promise.resolve();\n        }\n        // Do nothing if already trusted.\n        const trusted = every(notebook.model.cells, cell => cell.trusted);\n        // FIXME\n        const trustMessage = (React.createElement(\"p\", null,\n            trans.__('A trusted Jupyter notebook may execute hidden malicious code when you open it.'),\n            React.createElement(\"br\", null),\n            trans.__('Selecting \"Trust\" will re-render this notebook in a trusted state.'),\n            React.createElement(\"br\", null),\n            trans.__('For more information, see'),\n            ' ',\n            React.createElement(\"a\", { href: \"https://jupyter-server.readthedocs.io/en/stable/operators/security.html\", target: \"_blank\", rel: \"noopener noreferrer\" }, trans.__('the Jupyter security documentation')),\n            \".\"));\n        if (trusted) {\n            return showDialog({\n                body: trans.__('Notebook is already trusted'),\n                buttons: [Dialog.okButton()]\n            }).then(() => undefined);\n        }\n        return showDialog({\n            body: trustMessage,\n            title: trans.__('Trust this notebook?'),\n            buttons: [\n                Dialog.cancelButton(),\n                Dialog.warnButton({\n                    label: trans.__('Trust'),\n                    ariaLabel: trans.__('Confirm Trusting this notebook')\n                })\n            ] // FIXME?\n        }).then(result => {\n            if (result.button.accept) {\n                if (notebook.model) {\n                    for (const cell of notebook.model.cells) {\n                        cell.trusted = true;\n                    }\n                }\n            }\n        });\n    }\n    NotebookActions.trust = trust;\n    /**\n     * If the notebook has an active cell, focus it.\n     *\n     * @param notebook The target notebook widget\n     * @param options Optional options to change the behavior of this function\n     * @param options.waitUntilReady If true, do not call focus until activeCell.ready is resolved\n     * @param options.preventScroll If true, do not scroll the active cell into view\n     *\n     * @returns a promise that resolves when focus has been called on the active\n     * cell's node.\n     *\n     * #### Notes\n     * By default, waits until after the active cell has been attached unless\n     * called with { waitUntilReady: false }\n     */\n    async function focusActiveCell(notebook, options = { waitUntilReady: true, preventScroll: false }) {\n        const { activeCell } = notebook;\n        const { waitUntilReady, preventScroll } = options;\n        if (!activeCell) {\n            return;\n        }\n        if (waitUntilReady) {\n            await activeCell.ready;\n        }\n        if (notebook.isDisposed || activeCell.isDisposed) {\n            return;\n        }\n        activeCell.node.focus({\n            preventScroll\n        });\n    }\n    NotebookActions.focusActiveCell = focusActiveCell;\n    /*\n     * Access last notebook history.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    async function accessPreviousHistory(notebook) {\n        if (!notebook.notebookConfig.accessKernelHistory) {\n            return;\n        }\n        const activeCell = notebook.activeCell;\n        if (activeCell) {\n            if (notebook.kernelHistory) {\n                const previousHistory = await notebook.kernelHistory.back(activeCell);\n                notebook.kernelHistory.updateEditor(activeCell, previousHistory);\n            }\n        }\n    }\n    NotebookActions.accessPreviousHistory = accessPreviousHistory;\n    /**\n     * Access next notebook history.\n     *\n     * @param notebook - The target notebook widget.\n     */\n    async function accessNextHistory(notebook) {\n        if (!notebook.notebookConfig.accessKernelHistory) {\n            return;\n        }\n        const activeCell = notebook.activeCell;\n        if (activeCell) {\n            if (notebook.kernelHistory) {\n                const nextHistory = await notebook.kernelHistory.forward(activeCell);\n                notebook.kernelHistory.updateEditor(activeCell, nextHistory);\n            }\n        }\n    }\n    NotebookActions.accessNextHistory = accessNextHistory;\n})(NotebookActions || (NotebookActions = {}));\n/**\n * Set the notebook cell executor and the related signals.\n */\nexport function setCellExecutor(executor) {\n    if (Private.executor) {\n        throw new Error('Cell executor can only be set once.');\n    }\n    Private.executor = executor;\n}\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * A signal that emits whenever a cell completes execution.\n     */\n    Private.executed = new Signal({});\n    /**\n     * A signal that emits whenever a cell execution is scheduled.\n     */\n    Private.executionScheduled = new Signal({});\n    /**\n     * A signal that emits when one notebook's cells are all executed.\n     */\n    Private.selectionExecuted = new Signal({});\n    /**\n     * A signal that emits when one notebook's cells are all executed.\n     */\n    Private.outputCleared = new Signal({});\n    /**\n     * Get the state of a widget before running an action.\n     */\n    function getState(notebook) {\n        var _a, _b;\n        return {\n            wasFocused: notebook.node.contains(document.activeElement),\n            activeCellId: (_b = (_a = notebook.activeCell) === null || _a === void 0 ? void 0 : _a.model.id) !== null && _b !== void 0 ? _b : null\n        };\n    }\n    Private.getState = getState;\n    /**\n     * Handle the state of a widget after running an action.\n     */\n    async function handleState(notebook, state, scrollIfNeeded = false) {\n        const { activeCell, activeCellIndex } = notebook;\n        if (scrollIfNeeded && activeCell) {\n            await notebook.scrollToItem(activeCellIndex, 'auto', 0).catch(reason => {\n                // no-op\n            });\n        }\n        if (state.wasFocused || notebook.mode === 'edit') {\n            notebook.activate();\n        }\n    }\n    Private.handleState = handleState;\n    /**\n     * Handle the state of a widget after running a run action.\n     */\n    async function handleRunState(notebook, state, alignPreference) {\n        const { activeCell, activeCellIndex } = notebook;\n        if (activeCell) {\n            await notebook\n                .scrollToItem(activeCellIndex, 'smart', 0, alignPreference)\n                .catch(reason => {\n                // no-op\n            });\n        }\n        if (state.wasFocused || notebook.mode === 'edit') {\n            notebook.activate();\n        }\n    }\n    Private.handleRunState = handleRunState;\n    /**\n     * Run the selected cells.\n     *\n     * @param notebook Notebook\n     * @param cells Cells to run\n     * @param sessionContext Notebook session context\n     * @param sessionDialogs Session dialogs\n     * @param translator Application translator\n     */\n    function runCells(notebook, cells, sessionContext, sessionDialogs, translator) {\n        const lastCell = cells[cells.length - 1];\n        notebook.mode = 'command';\n        let initializingDialogShown = false;\n        return Promise.all(cells.map(cell => {\n            if (cell.model.type === 'code' &&\n                notebook.notebookConfig.enableKernelInitNotification &&\n                sessionContext &&\n                sessionContext.kernelDisplayStatus === 'initializing' &&\n                !initializingDialogShown) {\n                initializingDialogShown = true;\n                translator = translator || nullTranslator;\n                const trans = translator.load('jupyterlab');\n                Notification.emit(trans.__(`Kernel '${sessionContext.kernelDisplayName}' for '${sessionContext.path}' is still initializing. You can run code cells when the kernel has initialized.`), 'warning', {\n                    autoClose: false\n                });\n                return Promise.resolve(false);\n            }\n            if (cell.model.type === 'code' &&\n                notebook.notebookConfig.enableKernelInitNotification &&\n                initializingDialogShown) {\n                return Promise.resolve(false);\n            }\n            return runCell(notebook, cell, sessionContext, sessionDialogs, translator);\n        }))\n            .then(results => {\n            if (notebook.isDisposed) {\n                return false;\n            }\n            Private.selectionExecuted.emit({\n                notebook,\n                lastCell\n            });\n            // Post an update request.\n            notebook.update();\n            return results.every(result => result);\n        })\n            .catch(reason => {\n            if (reason.message.startsWith('KernelReplyNotOK')) {\n                cells.map(cell => {\n                    // Remove '*' prompt from cells that didn't execute\n                    if (cell.model.type === 'code' &&\n                        cell.model.executionCount == null) {\n                        cell.model.executionState = 'idle';\n                    }\n                });\n            }\n            else {\n                throw reason;\n            }\n            Private.selectionExecuted.emit({\n                notebook,\n                lastCell\n            });\n            notebook.update();\n            return false;\n        });\n    }\n    Private.runCells = runCells;\n    /**\n     * Run the selected cells.\n     *\n     * @param notebook Notebook\n     * @param sessionContext Notebook session context\n     * @param sessionDialogs Session dialogs\n     * @param translator Application translator\n     */\n    function runSelected(notebook, sessionContext, sessionDialogs, translator) {\n        notebook.mode = 'command';\n        let lastIndex = notebook.activeCellIndex;\n        const selected = notebook.widgets.filter((child, index) => {\n            const active = notebook.isSelectedOrActive(child);\n            if (active) {\n                lastIndex = index;\n            }\n            return active;\n        });\n        notebook.activeCellIndex = lastIndex;\n        notebook.deselectAll();\n        return runCells(notebook, selected, sessionContext, sessionDialogs, translator);\n    }\n    Private.runSelected = runSelected;\n    /**\n     * Run a cell.\n     */\n    async function runCell(notebook, cell, sessionContext, sessionDialogs, translator) {\n        if (!Private.executor) {\n            console.warn('Requesting cell execution without any cell executor defined. Falling back to default execution.');\n        }\n        const options = {\n            cell,\n            notebook: notebook.model,\n            notebookConfig: notebook.notebookConfig,\n            onCellExecuted: args => {\n                Private.executed.emit({ notebook, ...args });\n            },\n            onCellExecutionScheduled: args => {\n                Private.executionScheduled.emit({ notebook, ...args });\n            },\n            sessionContext,\n            sessionDialogs,\n            translator\n        };\n        return Private.executor ? Private.executor.runCell(options) : defaultRunCell(options);\n    }\n    /**\n     * Get the selected cell(s) without affecting the clipboard.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * @returns A list of 0 or more selected cells\n     */\n    function selectedCells(notebook) {\n        return notebook.widgets\n            .filter(cell => notebook.isSelectedOrActive(cell))\n            .map(cell => cell.model.toJSON())\n            .map(cellJSON => {\n            if (cellJSON.metadata.deletable !== undefined) {\n                delete cellJSON.metadata.deletable;\n            }\n            return cellJSON;\n        });\n    }\n    Private.selectedCells = selectedCells;\n    /**\n     * Copy or cut the selected cell data to the application clipboard.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * @param cut - True if the cells should be cut, false if they should be copied.\n     */\n    function copyOrCut(notebook, cut) {\n        if (!notebook.model || !notebook.activeCell) {\n            return;\n        }\n        const state = getState(notebook);\n        const clipboard = Clipboard.getInstance();\n        notebook.mode = 'command';\n        clipboard.clear();\n        const data = Private.selectedCells(notebook);\n        clipboard.setData(JUPYTER_CELL_MIME, data);\n        if (cut) {\n            deleteCells(notebook);\n        }\n        else {\n            notebook.deselectAll();\n        }\n        if (cut) {\n            notebook.lastClipboardInteraction = 'cut';\n        }\n        else {\n            notebook.lastClipboardInteraction = 'copy';\n        }\n        void handleState(notebook, state);\n    }\n    Private.copyOrCut = copyOrCut;\n    /**\n     * Change the selected cell type(s).\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * @param value - The target cell type.\n     *\n     * #### Notes\n     * It should preserve the widget mode.\n     * This action can be undone.\n     * The existing selection will be cleared.\n     * Any cells converted to markdown will be unrendered.\n     */\n    function changeCellType(notebook, value, translator) {\n        const notebookSharedModel = notebook.model.sharedModel;\n        notebook.widgets.forEach((child, index) => {\n            if (!notebook.isSelectedOrActive(child)) {\n                return;\n            }\n            if (child.model.type === 'code' &&\n                child.outputArea.pendingInput) {\n                translator = translator || nullTranslator;\n                const trans = translator.load('jupyterlab');\n                // Do not permit changing cell type when input is pending\n                void showDialog({\n                    title: trans.__('Cell type not changed due to pending input'),\n                    body: trans.__('The cell type has not been changed to avoid kernel deadlock as this cell has pending input! Submit your pending input and try again.'),\n                    buttons: [Dialog.okButton()]\n                });\n                return;\n            }\n            if (child.model.getMetadata('editable') == false) {\n                translator = translator || nullTranslator;\n                const trans = translator.load('jupyterlab');\n                // Do not permit changing cell type when the cell is readonly\n                void showDialog({\n                    title: trans.__('Cell is read-only'),\n                    body: trans.__('The cell is read-only, its type cannot be changed!'),\n                    buttons: [Dialog.okButton()]\n                });\n                return;\n            }\n            if (child.model.type !== value) {\n                const raw = child.model.toJSON();\n                notebookSharedModel.transact(() => {\n                    notebookSharedModel.deleteCell(index);\n                    if (value === 'code') {\n                        // After change of type outputs are deleted so cell can be trusted.\n                        raw.metadata.trusted = true;\n                    }\n                    else {\n                        // Otherwise clear the metadata as trusted is only \"valid\" on code\n                        // cells (since other cell types cannot have outputs).\n                        raw.metadata.trusted = undefined;\n                    }\n                    const newCell = notebookSharedModel.insertCell(index, {\n                        cell_type: value,\n                        source: raw.source,\n                        metadata: raw.metadata\n                    });\n                    if (raw.attachments && ['markdown', 'raw'].includes(value)) {\n                        newCell.attachments =\n                            raw.attachments;\n                    }\n                });\n            }\n            if (value === 'markdown') {\n                // Fetch the new widget and unrender it.\n                child = notebook.widgets[index];\n                child.rendered = false;\n            }\n        });\n        notebook.deselectAll();\n    }\n    Private.changeCellType = changeCellType;\n    /**\n     * Delete the selected cells.\n     *\n     * @param notebook - The target notebook widget.\n     *\n     * #### Notes\n     * The cell after the last selected cell will be activated.\n     * If the last cell is deleted, then the previous one will be activated.\n     * It will add a code cell if all cells are deleted.\n     * This action can be undone.\n     */\n    function deleteCells(notebook) {\n        const model = notebook.model;\n        const sharedModel = model.sharedModel;\n        const toDelete = [];\n        notebook.mode = 'command';\n        // Find the cells to delete.\n        notebook.widgets.forEach((child, index) => {\n            var _a;\n            const deletable = child.model.getMetadata('deletable') !== false;\n            if (notebook.isSelectedOrActive(child) && deletable) {\n                toDelete.push(index);\n                (_a = notebook.model) === null || _a === void 0 ? void 0 : _a.deletedCells.push(child.model.id);\n            }\n        });\n        // If cells are not deletable, we may not have anything to delete.\n        if (toDelete.length > 0) {\n            // Delete the cells as one undo event.\n            sharedModel.transact(() => {\n                // Delete cells in reverse order to maintain the correct indices.\n                toDelete.reverse().forEach(index => {\n                    sharedModel.deleteCell(index);\n                });\n                // Add a new cell if the notebook is empty. This is done\n                // within the compound operation to make the deletion of\n                // a notebook's last cell undoable.\n                if (sharedModel.cells.length == toDelete.length) {\n                    sharedModel.insertCell(0, {\n                        cell_type: notebook.notebookConfig.defaultCell,\n                        metadata: notebook.notebookConfig.defaultCell === 'code'\n                            ? {\n                                // This is an empty cell created in empty notebook, thus is trusted\n                                trusted: true\n                            }\n                            : {}\n                    });\n                }\n            });\n            // Select the *first* interior cell not deleted or the cell\n            // *after* the last selected cell.\n            // Note: The activeCellIndex is clamped to the available cells,\n            // so if the last cell is deleted the previous cell will be activated.\n            // The *first* index is the index of the last cell in the initial\n            // toDelete list due to the `reverse` operation above.\n            notebook.activeCellIndex = toDelete[0] - toDelete.length + 1;\n        }\n        // Deselect any remaining, undeletable cells. Do this even if we don't\n        // delete anything so that users are aware *something* happened.\n        notebook.deselectAll();\n    }\n    Private.deleteCells = deleteCells;\n    /**\n     * Set the markdown header level of a cell.\n     */\n    function setMarkdownHeader(cell, level) {\n        // Remove existing header or leading white space.\n        let source = cell.sharedModel.getSource();\n        const regex = /^(#+\\s*)|^(\\s*)/;\n        const newHeader = Array(level + 1).join('#') + ' ';\n        const matches = regex.exec(source);\n        if (matches) {\n            source = source.slice(matches[0].length);\n        }\n        cell.sharedModel.setSource(newHeader + source);\n    }\n    Private.setMarkdownHeader = setMarkdownHeader;\n    /** Functionality related to collapsible headings */\n    let Headings;\n    (function (Headings) {\n        /** Find the heading that is parent to cell.\n         *\n         * @param childCell - The cell that is child to the sought heading\n         * @param notebook - The target notebook widget\n         * @param includeChildCell [default=false] - if set to true and childCell is a heading itself, the childCell will be returned\n         * @param returnIndex [default=false] - if set to true, the cell index is returned rather than the cell object.\n         *\n         * @returns the (index | Cell object) of the parent heading or (-1 | null) if there is no parent heading.\n         */\n        function findParentHeading(childCell, notebook, includeChildCell = false, returnIndex = false) {\n            let cellIdx = notebook.widgets.indexOf(childCell) - (includeChildCell ? 1 : 0);\n            while (cellIdx >= 0) {\n                let headingInfo = NotebookActions.getHeadingInfo(notebook.widgets[cellIdx]);\n                if (headingInfo.isHeading) {\n                    return returnIndex ? cellIdx : notebook.widgets[cellIdx];\n                }\n                cellIdx--;\n            }\n            return returnIndex ? -1 : null;\n        }\n        Headings.findParentHeading = findParentHeading;\n        /** Find heading above with leq level than baseCell heading level.\n         *\n         * @param baseCell - cell relative to which so search\n         * @param notebook - target notebook widget\n         * @param returnIndex [default=false] - if set to true, the cell index is returned rather than the cell object.\n         *\n         * @returns the (index | Cell object) of the found heading or (-1 | null) if no heading found.\n         */\n        function findLowerEqualLevelParentHeadingAbove(baseCell, notebook, returnIndex = false) {\n            let baseHeadingLevel = Private.Headings.determineHeadingLevel(baseCell, notebook);\n            if (baseHeadingLevel == -1) {\n                baseHeadingLevel = 1; // if no heading level can be determined, assume we're on level 1\n            }\n            // find the heading above with heading level <= baseHeadingLevel and return its index\n            let cellIdx = notebook.widgets.indexOf(baseCell) - 1;\n            while (cellIdx >= 0) {\n                let cell = notebook.widgets[cellIdx];\n                let headingInfo = NotebookActions.getHeadingInfo(cell);\n                if (headingInfo.isHeading &&\n                    headingInfo.headingLevel <= baseHeadingLevel) {\n                    return returnIndex ? cellIdx : cell;\n                }\n                cellIdx--;\n            }\n            return returnIndex ? -1 : null; // no heading found\n        }\n        Headings.findLowerEqualLevelParentHeadingAbove = findLowerEqualLevelParentHeadingAbove;\n        /** Find next heading with equal or lower level.\n         *\n         * @param baseCell - cell relative to which so search\n         * @param notebook - target notebook widget\n         * @param returnIndex [default=false] - if set to true, the cell index is returned rather than the cell object.\n         *\n         * @returns the (index | Cell object) of the found heading or (-1 | null) if no heading found.\n         */\n        function findLowerEqualLevelHeadingBelow(baseCell, notebook, returnIndex = false) {\n            let baseHeadingLevel = Private.Headings.determineHeadingLevel(baseCell, notebook);\n            if (baseHeadingLevel == -1) {\n                baseHeadingLevel = 1; // if no heading level can be determined, assume we're on level 1\n            }\n            let cellIdx = notebook.widgets.indexOf(baseCell) + 1;\n            while (cellIdx < notebook.widgets.length) {\n                let cell = notebook.widgets[cellIdx];\n                let headingInfo = NotebookActions.getHeadingInfo(cell);\n                if (headingInfo.isHeading &&\n                    headingInfo.headingLevel <= baseHeadingLevel) {\n                    return returnIndex ? cellIdx : cell;\n                }\n                cellIdx++;\n            }\n            return returnIndex ? -1 : null;\n        }\n        Headings.findLowerEqualLevelHeadingBelow = findLowerEqualLevelHeadingBelow;\n        /** Find next heading.\n         *\n         * @param baseCell - cell relative to which so search\n         * @param notebook - target notebook widget\n         * @param returnIndex [default=false] - if set to true, the cell index is returned rather than the cell object.\n         *\n         * @returns the (index | Cell object) of the found heading or (-1 | null) if no heading found.\n         */\n        function findHeadingBelow(baseCell, notebook, returnIndex = false) {\n            let cellIdx = notebook.widgets.indexOf(baseCell) + 1;\n            while (cellIdx < notebook.widgets.length) {\n                let cell = notebook.widgets[cellIdx];\n                let headingInfo = NotebookActions.getHeadingInfo(cell);\n                if (headingInfo.isHeading) {\n                    return returnIndex ? cellIdx : cell;\n                }\n                cellIdx++;\n            }\n            return returnIndex ? -1 : null;\n        }\n        Headings.findHeadingBelow = findHeadingBelow;\n        /** Determine the heading level of a cell.\n         *\n         * @param baseCell - The cell of which the heading level shall be determined\n         * @param notebook - The target notebook widget\n         *\n         * @returns the heading level or -1 if there is no parent heading\n         *\n         * #### Notes\n         * If the baseCell is a heading itself, the heading level of baseCell is returned.\n         * If the baseCell is not a heading itself, the level of the parent heading is returned.\n         * If there is no parent heading, -1 is returned.\n         */\n        function determineHeadingLevel(baseCell, notebook) {\n            let headingInfoBaseCell = NotebookActions.getHeadingInfo(baseCell);\n            // fill baseHeadingLevel or return null if there is no heading at or above baseCell\n            if (headingInfoBaseCell.isHeading) {\n                return headingInfoBaseCell.headingLevel;\n            }\n            else {\n                let parentHeading = findParentHeading(baseCell, notebook, true);\n                if (parentHeading == null) {\n                    return -1;\n                }\n                return NotebookActions.getHeadingInfo(parentHeading).headingLevel;\n            }\n        }\n        Headings.determineHeadingLevel = determineHeadingLevel;\n        /** Insert a new heading cell at given position.\n         *\n         * @param cellIndex - where to insert\n         * @param headingLevel - level of the new heading\n         * @param notebook - target notebook\n         *\n         * #### Notes\n         * Enters edit mode after insert.\n         */\n        async function insertHeadingAboveCellIndex(cellIndex, headingLevel, notebook) {\n            var _a;\n            headingLevel = Math.min(Math.max(headingLevel, 1), 6);\n            const state = Private.getState(notebook);\n            const model = notebook.model;\n            const sharedModel = model.sharedModel;\n            sharedModel.insertCell(cellIndex, {\n                cell_type: 'markdown',\n                source: '#'.repeat(headingLevel) + ' '\n            });\n            notebook.activeCellIndex = cellIndex;\n            if (((_a = notebook.activeCell) === null || _a === void 0 ? void 0 : _a.inViewport) === false) {\n                await signalToPromise(notebook.activeCell.inViewportChanged, 200).catch(() => {\n                    // no-op\n                });\n            }\n            notebook.deselectAll();\n            void Private.handleState(notebook, state, true);\n            notebook.mode = 'edit';\n            notebook.widgets[cellIndex].setHidden(false);\n        }\n        Headings.insertHeadingAboveCellIndex = insertHeadingAboveCellIndex;\n    })(Headings = Private.Headings || (Private.Headings = {}));\n})(Private || (Private = {}));\n//# sourceMappingURL=actions.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { CodeCellModel, MarkdownCellModel, RawCellModel } from '@jupyterlab/cells';\nimport { Signal } from '@lumino/signaling';\n/**\n * A cell list object that supports undo/redo.\n */\nexport class CellList {\n    /**\n     * Construct the cell list.\n     */\n    constructor(model) {\n        this.model = model;\n        this._cellMap = new WeakMap();\n        this._changed = new Signal(this);\n        this._isDisposed = false;\n        this._insertCells(0, this.model.cells);\n        this.model.changed.connect(this._onSharedModelChanged, this);\n    }\n    /**\n     * A signal emitted when the cell list has changed.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Test whether the cell list has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Get the length of the cell list.\n     *\n     * @returns The number of cells in the cell list.\n     */\n    get length() {\n        return this.model.cells.length;\n    }\n    /**\n     * Create an iterator over the cells in the cell list.\n     *\n     * @returns A new iterator starting at the front of the cell list.\n     */\n    *[Symbol.iterator]() {\n        for (const cell of this.model.cells) {\n            yield this._cellMap.get(cell);\n        }\n    }\n    /**\n     * Dispose of the resources held by the cell list.\n     */\n    dispose() {\n        var _a;\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        // Clean up the cell map and cell order objects.\n        for (const cell of this.model.cells) {\n            (_a = this._cellMap.get(cell)) === null || _a === void 0 ? void 0 : _a.dispose();\n        }\n        Signal.clearData(this);\n    }\n    /**\n     * Get the cell at the specified index.\n     *\n     * @param index - The positive integer index of interest.\n     *\n     * @returns The cell at the specified index.\n     */\n    get(index) {\n        return this._cellMap.get(this.model.cells[index]);\n    }\n    _insertCells(index, cells) {\n        cells.forEach(sharedModel => {\n            let cellModel;\n            switch (sharedModel.cell_type) {\n                case 'code': {\n                    cellModel = new CodeCellModel({\n                        sharedModel: sharedModel\n                    });\n                    break;\n                }\n                case 'markdown': {\n                    cellModel = new MarkdownCellModel({\n                        sharedModel: sharedModel\n                    });\n                    break;\n                }\n                default: {\n                    cellModel = new RawCellModel({\n                        sharedModel: sharedModel\n                    });\n                }\n            }\n            this._cellMap.set(sharedModel, cellModel);\n            sharedModel.disposed.connect(() => {\n                cellModel.dispose();\n                this._cellMap.delete(sharedModel);\n            });\n        });\n        return this.length;\n    }\n    _onSharedModelChanged(self, change) {\n        var _a;\n        let currpos = 0;\n        // We differ emitting the list changes to ensure cell model for all current shared cell have been created.\n        const events = new Array();\n        (_a = change.cellsChange) === null || _a === void 0 ? void 0 : _a.forEach(delta => {\n            if (delta.insert != null) {\n                this._insertCells(currpos, delta.insert);\n                events.push({\n                    type: 'add',\n                    newIndex: currpos,\n                    newValues: delta.insert.map(c => this._cellMap.get(c)),\n                    oldIndex: -2,\n                    oldValues: []\n                });\n                currpos += delta.insert.length;\n            }\n            else if (delta.delete != null) {\n                events.push({\n                    type: 'remove',\n                    newIndex: -1,\n                    newValues: [],\n                    oldIndex: currpos,\n                    // Cells have been disposed, so we don't know which one are gone.\n                    oldValues: new Array(delta.delete).fill(undefined)\n                });\n            }\n            else if (delta.retain != null) {\n                currpos += delta.retain;\n            }\n        });\n        events.forEach(msg => this._changed.emit(msg));\n    }\n}\n//# sourceMappingURL=celllist.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Toolbar as AppToolbar, Dialog, SessionContextDialogs, showDialog } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { addIcon, addToolbarButtonClass, copyIcon, cutIcon, fastForwardIcon, HTMLSelect, pasteIcon, ReactWidget, runIcon, saveIcon, Toolbar, ToolbarButton, ToolbarButtonComponent, UseSignal } from '@jupyterlab/ui-components';\nimport * as React from 'react';\nimport { NotebookActions } from './actions';\n/**\n * The class name added to toolbar cell type dropdown wrapper.\n */\nconst TOOLBAR_CELLTYPE_CLASS = 'jp-Notebook-toolbarCellType';\n/**\n * The class name added to toolbar cell type dropdown.\n */\nconst TOOLBAR_CELLTYPE_DROPDOWN_CLASS = 'jp-Notebook-toolbarCellTypeDropdown';\n/**\n * A namespace for the default toolbar items.\n */\nexport var ToolbarItems;\n(function (ToolbarItems) {\n    /**\n     * Create save button toolbar item.\n     *\n     * @deprecated since v3.2\n     * This is dead code now.\n     */\n    function createSaveButton(panel, translator) {\n        const trans = (translator || nullTranslator).load('jupyterlab');\n        function onClick() {\n            if (panel.context.model.readOnly) {\n                return showDialog({\n                    title: trans.__('Cannot Save'),\n                    body: trans.__('Document is read-only'),\n                    buttons: [Dialog.okButton()]\n                });\n            }\n            void panel.context.save().then(() => {\n                if (!panel.isDisposed) {\n                    return panel.context.createCheckpoint();\n                }\n            });\n        }\n        return addToolbarButtonClass(ReactWidget.create(React.createElement(UseSignal, { signal: panel.context.fileChanged }, () => (React.createElement(ToolbarButtonComponent, { icon: saveIcon, onClick: onClick, tooltip: trans.__('Save the notebook contents and create checkpoint'), enabled: !!(panel &&\n                panel.context &&\n                panel.context.contentsModel &&\n                panel.context.contentsModel.writable) })))));\n    }\n    ToolbarItems.createSaveButton = createSaveButton;\n    /**\n     * Create an insert toolbar item.\n     *\n     * @deprecated since v3.2\n     * This is dead code now.\n     */\n    function createInsertButton(panel, translator) {\n        const trans = (translator || nullTranslator).load('jupyterlab');\n        return new ToolbarButton({\n            icon: addIcon,\n            onClick: () => {\n                NotebookActions.insertBelow(panel.content);\n            },\n            tooltip: trans.__('Insert a cell below')\n        });\n    }\n    ToolbarItems.createInsertButton = createInsertButton;\n    /**\n     * Create a cut toolbar item.\n     *\n     * @deprecated since v3.2\n     * This is dead code now.\n     */\n    function createCutButton(panel, translator) {\n        const trans = (translator || nullTranslator).load('jupyterlab');\n        return new ToolbarButton({\n            icon: cutIcon,\n            onClick: () => {\n                NotebookActions.cut(panel.content);\n            },\n            tooltip: trans.__('Cut the selected cells')\n        });\n    }\n    ToolbarItems.createCutButton = createCutButton;\n    /**\n     * Create a copy toolbar item.\n     *\n     * @deprecated since v3.2\n     * This is dead code now.\n     */\n    function createCopyButton(panel, translator) {\n        const trans = (translator || nullTranslator).load('jupyterlab');\n        return new ToolbarButton({\n            icon: copyIcon,\n            onClick: () => {\n                NotebookActions.copy(panel.content);\n            },\n            tooltip: trans.__('Copy the selected cells')\n        });\n    }\n    ToolbarItems.createCopyButton = createCopyButton;\n    /**\n     * Create a paste toolbar item.\n     *\n     * @deprecated since v3.2\n     * This is dead code now.\n     */\n    function createPasteButton(panel, translator) {\n        const trans = (translator || nullTranslator).load('jupyterlab');\n        return new ToolbarButton({\n            icon: pasteIcon,\n            onClick: () => {\n                NotebookActions.paste(panel.content);\n            },\n            tooltip: trans.__('Paste cells from the clipboard')\n        });\n    }\n    ToolbarItems.createPasteButton = createPasteButton;\n    /**\n     * Create a run toolbar item.\n     *\n     * @deprecated since v3.2\n     * This is dead code now.\n     */\n    function createRunButton(panel, sessionDialogs, translator) {\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        return new ToolbarButton({\n            icon: runIcon,\n            onClick: () => {\n                void NotebookActions.runAndAdvance(panel.content, panel.sessionContext, sessionDialogs, translator);\n            },\n            tooltip: trans.__('Run the selected cells and advance')\n        });\n    }\n    ToolbarItems.createRunButton = createRunButton;\n    /**\n     * Create a restart run all toolbar item\n     *\n     * @deprecated since v3.2\n     * This is dead code now.\n     */\n    function createRestartRunAllButton(panel, dialogs, translator) {\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        return new ToolbarButton({\n            icon: fastForwardIcon,\n            onClick: () => {\n                const dialogs_ = dialogs !== null && dialogs !== void 0 ? dialogs : new SessionContextDialogs({ translator });\n                void dialogs_.restart(panel.sessionContext).then(restarted => {\n                    if (restarted) {\n                        void NotebookActions.runAll(panel.content, panel.sessionContext, dialogs_, translator);\n                    }\n                    return restarted;\n                });\n            },\n            tooltip: trans.__('Restart the kernel, then re-run the whole notebook')\n        });\n    }\n    ToolbarItems.createRestartRunAllButton = createRestartRunAllButton;\n    /**\n     * Create a cell type switcher item.\n     *\n     * #### Notes\n     * It will display the type of the current active cell.\n     * If more than one cell is selected but are of different types,\n     * it will display `'-'`.\n     * When the user changes the cell type, it will change the\n     * cell types of the selected cells.\n     * It can handle a change to the context.\n     */\n    function createCellTypeItem(panel, translator) {\n        return new CellTypeSwitcher(panel.content, translator);\n    }\n    ToolbarItems.createCellTypeItem = createCellTypeItem;\n    /**\n     * Get the default toolbar items for panel\n     *\n     * @deprecated since v4\n     */\n    function getDefaultItems(panel, sessionDialogs, translator) {\n        return [\n            { name: 'save', widget: createSaveButton(panel, translator) },\n            { name: 'insert', widget: createInsertButton(panel, translator) },\n            { name: 'cut', widget: createCutButton(panel, translator) },\n            { name: 'copy', widget: createCopyButton(panel, translator) },\n            { name: 'paste', widget: createPasteButton(panel, translator) },\n            {\n                name: 'run',\n                widget: createRunButton(panel, sessionDialogs, translator)\n            },\n            {\n                name: 'interrupt',\n                widget: AppToolbar.createInterruptButton(panel.sessionContext, translator)\n            },\n            {\n                name: 'restart',\n                widget: AppToolbar.createRestartButton(panel.sessionContext, sessionDialogs, translator)\n            },\n            {\n                name: 'restart-and-run',\n                widget: createRestartRunAllButton(panel, sessionDialogs, translator)\n            },\n            { name: 'cellType', widget: createCellTypeItem(panel, translator) },\n            { name: 'spacer', widget: Toolbar.createSpacerItem() },\n            {\n                name: 'kernelName',\n                widget: AppToolbar.createKernelNameItem(panel.sessionContext, sessionDialogs, translator)\n            }\n        ];\n    }\n    ToolbarItems.getDefaultItems = getDefaultItems;\n})(ToolbarItems || (ToolbarItems = {}));\n/**\n * A toolbar widget that switches cell types.\n */\nexport class CellTypeSwitcher extends ReactWidget {\n    /**\n     * Construct a new cell type switcher.\n     */\n    constructor(widget, translator) {\n        super();\n        /**\n         * Handle `change` events for the HTMLSelect component.\n         */\n        this.handleChange = (event) => {\n            if (event.target.value !== '-') {\n                NotebookActions.changeCellType(this._notebook, event.target.value);\n                this._notebook.activate();\n            }\n        };\n        /**\n         * Handle `keydown` events for the HTMLSelect component.\n         */\n        this.handleKeyDown = (event) => {\n            if (event.keyCode === 13) {\n                this._notebook.activate();\n            }\n        };\n        this._trans = (translator || nullTranslator).load('jupyterlab');\n        this.addClass(TOOLBAR_CELLTYPE_CLASS);\n        this._notebook = widget;\n        if (widget.model) {\n            this.update();\n        }\n        widget.activeCellChanged.connect(this.update, this);\n        // Follow a change in the selection.\n        widget.selectionChanged.connect(this.update, this);\n    }\n    render() {\n        let value = '-';\n        if (this._notebook.activeCell) {\n            value = this._notebook.activeCell.model.type;\n        }\n        for (const widget of this._notebook.widgets) {\n            if (this._notebook.isSelectedOrActive(widget)) {\n                if (widget.model.type !== value) {\n                    value = '-';\n                    break;\n                }\n            }\n        }\n        return (React.createElement(HTMLSelect, { className: TOOLBAR_CELLTYPE_DROPDOWN_CLASS, onChange: this.handleChange, onKeyDown: this.handleKeyDown, value: value, \"aria-label\": this._trans.__('Cell type'), title: this._trans.__('Select the cell type') },\n            React.createElement(\"option\", { value: \"-\" }, \"-\"),\n            React.createElement(\"option\", { value: \"code\" }, this._trans.__('Code')),\n            React.createElement(\"option\", { value: \"markdown\" }, this._trans.__('Markdown')),\n            React.createElement(\"option\", { value: \"raw\" }, this._trans.__('Raw'))));\n    }\n}\n//# sourceMappingURL=default-toolbar.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { translateKernelStatuses } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport React from 'react';\nimport { ProgressCircle } from '@jupyterlab/statusbar';\nimport { circleIcon, offlineBoltIcon, VDomModel, VDomRenderer } from '@jupyterlab/ui-components';\nimport { KernelMessage } from '@jupyterlab/services';\n/**\n * A react functional component for rendering execution indicator.\n */\nexport function ExecutionIndicatorComponent(props) {\n    const translator = props.translator || nullTranslator;\n    const kernelStatuses = translateKernelStatuses(translator);\n    const trans = translator.load('jupyterlab');\n    const state = props.state;\n    const showOnToolBar = props.displayOption.showOnToolBar;\n    const showProgress = props.displayOption.showProgress;\n    const tooltipClass = showOnToolBar ? 'down' : 'up';\n    const emptyDiv = React.createElement(\"div\", null);\n    if (!state) {\n        return emptyDiv;\n    }\n    const kernelStatus = state.kernelStatus;\n    const circleIconProps = {\n        alignSelf: 'normal',\n        height: '24px'\n    };\n    const time = state.totalTime;\n    const scheduledCellNumber = state.scheduledCellNumber || 0;\n    const remainingCellNumber = state.scheduledCell.size || 0;\n    const executedCellNumber = scheduledCellNumber - remainingCellNumber;\n    let percentage = (100 * executedCellNumber) / scheduledCellNumber;\n    let displayClass = showProgress ? '' : 'hidden';\n    if (!showProgress && percentage < 100) {\n        percentage = 0;\n    }\n    const progressBar = (percentage) => (React.createElement(ProgressCircle, { progress: percentage, width: 16, height: 24, label: trans.__('Kernel status') }));\n    const titleFactory = (translatedStatus) => trans.__('Kernel status: %1', translatedStatus);\n    const reactElement = (status, circle, popup) => (React.createElement(\"div\", { className: 'jp-Notebook-ExecutionIndicator', title: showProgress ? '' : titleFactory(kernelStatuses[status]), \"data-status\": status },\n        circle,\n        React.createElement(\"div\", { className: `jp-Notebook-ExecutionIndicator-tooltip ${tooltipClass} ${displayClass}` },\n            React.createElement(\"span\", null,\n                \" \",\n                titleFactory(kernelStatuses[status]),\n                \" \"),\n            popup)));\n    if (state.kernelStatus === 'connecting' ||\n        state.kernelStatus === 'disconnected' ||\n        state.kernelStatus === 'unknown') {\n        return reactElement(kernelStatus, React.createElement(offlineBoltIcon.react, { ...circleIconProps }), []);\n    }\n    if (state.kernelStatus === 'starting' ||\n        state.kernelStatus === 'terminating' ||\n        state.kernelStatus === 'restarting' ||\n        state.kernelStatus === 'initializing') {\n        return reactElement(kernelStatus, React.createElement(circleIcon.react, { ...circleIconProps }), []);\n    }\n    if (state.executionStatus === 'busy') {\n        return reactElement('busy', progressBar(percentage), [\n            React.createElement(\"span\", { key: 0 }, trans.__(`Executed ${executedCellNumber}/${scheduledCellNumber} cells`)),\n            React.createElement(\"span\", { key: 1 }, trans._n('Elapsed time: %1 second', 'Elapsed time: %1 seconds', time))\n        ]);\n    }\n    else {\n        // No cell is scheduled, fall back to the status of kernel\n        const progress = state.kernelStatus === 'busy' ? 0 : 100;\n        const popup = state.kernelStatus === 'busy' || time === 0\n            ? []\n            : [\n                React.createElement(\"span\", { key: 0 }, trans._n('Executed %1 cell', 'Executed %1 cells', scheduledCellNumber)),\n                React.createElement(\"span\", { key: 1 }, trans._n('Elapsed time: %1 second', 'Elapsed time: %1 seconds', time))\n            ];\n        return reactElement(state.kernelStatus, progressBar(progress), popup);\n    }\n}\n/**\n * A VDomRenderer widget for displaying the execution status.\n */\nexport class ExecutionIndicator extends VDomRenderer {\n    /**\n     * Construct the kernel status widget.\n     */\n    constructor(translator, showProgress = true) {\n        super(new ExecutionIndicator.Model());\n        this.translator = translator || nullTranslator;\n        this.addClass('jp-mod-highlighted');\n    }\n    /**\n     * Render the execution status item.\n     */\n    render() {\n        if (this.model === null || !this.model.renderFlag) {\n            return React.createElement(\"div\", null);\n        }\n        else {\n            const nb = this.model.currentNotebook;\n            if (!nb) {\n                return (React.createElement(ExecutionIndicatorComponent, { displayOption: this.model.displayOption, state: undefined, translator: this.translator }));\n            }\n            return (React.createElement(ExecutionIndicatorComponent, { displayOption: this.model.displayOption, state: this.model.executionState(nb), translator: this.translator }));\n        }\n    }\n}\n/**\n * A namespace for ExecutionIndicator statics.\n */\n(function (ExecutionIndicator) {\n    /**\n     * A VDomModel for the execution status indicator.\n     */\n    class Model extends VDomModel {\n        constructor() {\n            super();\n            /**\n             * A weak map to hold execution status of multiple notebooks.\n             */\n            this._notebookExecutionProgress = new WeakMap();\n            this._displayOption = { showOnToolBar: true, showProgress: true };\n            this._renderFlag = true;\n        }\n        /**\n         * Attach a notebook with session context to model in order to keep\n         * track of multiple notebooks. If a session context is already\n         * attached, only set current activated notebook to input.\n         *\n         * @param data - The  notebook and session context to be attached to model\n         */\n        attachNotebook(data) {\n            var _a, _b, _c, _d;\n            if (data && data.content && data.context) {\n                const nb = data.content;\n                const context = data.context;\n                this._currentNotebook = nb;\n                if (!this._notebookExecutionProgress.has(nb)) {\n                    this._notebookExecutionProgress.set(nb, {\n                        executionStatus: 'idle',\n                        kernelStatus: 'idle',\n                        totalTime: 0,\n                        interval: 0,\n                        timeout: 0,\n                        scheduledCell: new Set(),\n                        scheduledCellNumber: 0,\n                        needReset: true\n                    });\n                    const state = this._notebookExecutionProgress.get(nb);\n                    const contextStatusChanged = (ctx) => {\n                        if (state) {\n                            state.kernelStatus = ctx.kernelDisplayStatus;\n                        }\n                        this.stateChanged.emit(void 0);\n                    };\n                    context.statusChanged.connect(contextStatusChanged, this);\n                    const contextConnectionStatusChanged = (ctx) => {\n                        if (state) {\n                            state.kernelStatus = ctx.kernelDisplayStatus;\n                        }\n                        this.stateChanged.emit(void 0);\n                    };\n                    context.connectionStatusChanged.connect(contextConnectionStatusChanged, this);\n                    context.disposed.connect(ctx => {\n                        ctx.connectionStatusChanged.disconnect(contextConnectionStatusChanged, this);\n                        ctx.statusChanged.disconnect(contextStatusChanged, this);\n                    });\n                    const handleKernelMsg = (sender, msg) => {\n                        const message = msg.msg;\n                        const msgId = message.header.msg_id;\n                        if (message.header.msg_type === 'execute_request') {\n                            // A cell code is scheduled for executing\n                            this._cellScheduledCallback(nb, msgId);\n                        }\n                        else if (KernelMessage.isStatusMsg(message) &&\n                            message.content.execution_state === 'idle') {\n                            // Idle status message case.\n                            const parentId = message.parent_header\n                                .msg_id;\n                            this._cellExecutedCallback(nb, parentId);\n                        }\n                        else if (KernelMessage.isStatusMsg(message) &&\n                            message.content.execution_state === 'restarting') {\n                            this._restartHandler(nb);\n                        }\n                        else if (message.header.msg_type === 'execute_input') {\n                            // A cell code starts executing.\n                            this._startTimer(nb);\n                        }\n                    };\n                    (_b = (_a = context.session) === null || _a === void 0 ? void 0 : _a.kernel) === null || _b === void 0 ? void 0 : _b.anyMessage.connect(handleKernelMsg);\n                    (_d = (_c = context.session) === null || _c === void 0 ? void 0 : _c.kernel) === null || _d === void 0 ? void 0 : _d.disposed.connect(kernel => kernel.anyMessage.disconnect(handleKernelMsg));\n                    const kernelChangedSlot = (_, kernelData) => {\n                        if (state) {\n                            this._resetTime(state);\n                            this.stateChanged.emit(void 0);\n                            if (kernelData.newValue) {\n                                kernelData.newValue.anyMessage.connect(handleKernelMsg);\n                            }\n                        }\n                    };\n                    context.kernelChanged.connect(kernelChangedSlot);\n                    context.disposed.connect(ctx => ctx.kernelChanged.disconnect(kernelChangedSlot));\n                }\n            }\n        }\n        /**\n         * The current activated notebook in model.\n         */\n        get currentNotebook() {\n            return this._currentNotebook;\n        }\n        /**\n         * The display options for progress bar and elapsed time.\n         */\n        get displayOption() {\n            return this._displayOption;\n        }\n        /**\n         * Set the display options for progress bar and elapsed time.\n         *\n         * @param options - Options to be used\n         */\n        set displayOption(options) {\n            this._displayOption = options;\n        }\n        /**\n         * Get the execution state associated with a notebook.\n         *\n         * @param nb - The notebook used to identify execution\n         * state.\n         *\n         * @returns - The associated execution state.\n         */\n        executionState(nb) {\n            return this._notebookExecutionProgress.get(nb);\n        }\n        /**\n         * Schedule switch to idle status and clearing of the timer.\n         *\n         * ### Note\n         *\n         * To keep track of cells executed under 1 second,\n         * the execution state is marked as `needReset` 1 second after executing\n         * these cells. This `Timeout` will be cleared if there is any cell\n         * scheduled after that.\n         */\n        _scheduleSwitchToIdle(state) {\n            window.setTimeout(() => {\n                state.executionStatus = 'idle';\n                clearInterval(state.interval);\n                this.stateChanged.emit(void 0);\n            }, 150);\n            state.timeout = window.setTimeout(() => {\n                state.needReset = true;\n            }, 1000);\n        }\n        /**\n         * The function is called on kernel's idle status message.\n         * It is used to keep track of number of executed\n         * cells or Comm custom messages and the status of kernel.\n         *\n         * @param nb - The notebook which contains the executed code cell.\n         * @param msg_id - The id of message.\n         */\n        _cellExecutedCallback(nb, msg_id) {\n            const state = this._notebookExecutionProgress.get(nb);\n            if (state && state.scheduledCell.has(msg_id)) {\n                state.scheduledCell.delete(msg_id);\n                if (state.scheduledCell.size === 0) {\n                    this._scheduleSwitchToIdle(state);\n                }\n            }\n        }\n        /**\n         * The function is called on kernel's restarting status message.\n         * It is used to clear the state tracking the number of executed\n         * cells.\n         *\n         * @param nb - The notebook which contains the executed code cell.\n         */\n        _restartHandler(nb) {\n            const state = this._notebookExecutionProgress.get(nb);\n            if (state) {\n                state.scheduledCell.clear();\n                this._scheduleSwitchToIdle(state);\n            }\n        }\n        /**\n         * This function is called on kernel's `execute_input` message to start\n         * the elapsed time counter.\n         *\n         * @param  nb - The notebook which contains the scheduled execution request.\n         */\n        _startTimer(nb) {\n            const state = this._notebookExecutionProgress.get(nb);\n            if (!state) {\n                return;\n            }\n            if (state.scheduledCell.size > 0) {\n                if (state.executionStatus !== 'busy') {\n                    state.executionStatus = 'busy';\n                    clearTimeout(state.timeout);\n                    this.stateChanged.emit(void 0);\n                    state.interval = window.setInterval(() => {\n                        this._tick(state);\n                    }, 1000);\n                }\n            }\n            else {\n                this._resetTime(state);\n            }\n        }\n        /**\n         * The function is called on kernel's `execute_request` message or Comm message, it is\n         * used to keep track number of scheduled cell or Comm execution message\n         * and the status of kernel.\n         *\n         * @param  nb - The notebook which contains the scheduled code.\n         * cell\n         * @param  msg_id - The id of message.\n         */\n        _cellScheduledCallback(nb, msg_id) {\n            const state = this._notebookExecutionProgress.get(nb);\n            if (state && !state.scheduledCell.has(msg_id)) {\n                if (state.needReset) {\n                    this._resetTime(state);\n                }\n                state.scheduledCell.add(msg_id);\n                state.scheduledCellNumber += 1;\n            }\n        }\n        /**\n         * Increment the executed time of input execution state\n         * and emit `stateChanged` signal to re-render the indicator.\n         *\n         * @param  data - the state to be updated.\n         */\n        _tick(data) {\n            data.totalTime += 1;\n            this.stateChanged.emit(void 0);\n        }\n        /**\n         * Reset the input execution state.\n         *\n         * @param  data - the state to be rested.\n         */\n        _resetTime(data) {\n            data.totalTime = 0;\n            data.scheduledCellNumber = 0;\n            data.executionStatus = 'idle';\n            data.scheduledCell = new Set();\n            clearTimeout(data.timeout);\n            clearInterval(data.interval);\n            data.needReset = false;\n        }\n        get renderFlag() {\n            return this._renderFlag;\n        }\n        updateRenderOption(options) {\n            if (this.displayOption.showOnToolBar) {\n                if (!options.showOnToolBar) {\n                    this._renderFlag = false;\n                }\n                else {\n                    this._renderFlag = true;\n                }\n            }\n            this.displayOption.showProgress = options.showProgress;\n            this.stateChanged.emit(void 0);\n        }\n    }\n    ExecutionIndicator.Model = Model;\n    function createExecutionIndicatorItem(panel, translator, loadSettings) {\n        const toolbarItem = new ExecutionIndicator(translator);\n        toolbarItem.model.displayOption = {\n            showOnToolBar: true,\n            showProgress: true\n        };\n        toolbarItem.model.attachNotebook({\n            content: panel.content,\n            context: panel.sessionContext\n        });\n        if (loadSettings) {\n            loadSettings\n                .then(settings => {\n                const updateSettings = (newSettings) => {\n                    toolbarItem.model.updateRenderOption(getSettingValue(newSettings));\n                };\n                settings.changed.connect(updateSettings);\n                updateSettings(settings);\n                toolbarItem.disposed.connect(() => {\n                    settings.changed.disconnect(updateSettings);\n                });\n            })\n                .catch((reason) => {\n                console.error(reason.message);\n            });\n        }\n        return toolbarItem;\n    }\n    ExecutionIndicator.createExecutionIndicatorItem = createExecutionIndicatorItem;\n    function getSettingValue(settings) {\n        let showOnToolBar = true;\n        let showProgress = true;\n        const configValues = settings.get('kernelStatus').composite;\n        if (configValues) {\n            showOnToolBar = !configValues.showOnStatusBar;\n            showProgress = configValues.showProgress;\n        }\n        return { showOnToolBar, showProgress };\n    }\n    ExecutionIndicator.getSettingValue = getSettingValue;\n})(ExecutionIndicator || (ExecutionIndicator = {}));\n//# sourceMappingURL=executionindicator.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { Signal } from '@lumino/signaling';\n/**\n * A console history manager object.\n */\nexport class NotebookHistory {\n    /**\n     * Construct a new console history object.\n     */\n    constructor(options) {\n        /**\n         * The number of history items to increase a batch size by per subsequent request.\n         */\n        this._requestBatchSize = 10;\n        this._cursor = 0;\n        this._hasSession = false;\n        this._history = [];\n        this._placeholder = '';\n        this._kernelSession = '';\n        this._setByHistory = false;\n        this._isDisposed = false;\n        this._editor = null;\n        this._filtered = [];\n        this._kernel = null;\n        this._sessionContext = options.sessionContext;\n        this._trans = (options.translator || nullTranslator).load('jupyterlab');\n        void this._handleKernel().then(() => {\n            this._sessionContext.kernelChanged.connect(this._handleKernel, this);\n        });\n        this._toRequest = this._requestBatchSize;\n    }\n    /**\n     * The current editor used by the history manager.\n     */\n    get editor() {\n        return this._editor;\n    }\n    set editor(value) {\n        if (this._editor === value) {\n            return;\n        }\n        const prev = this._editor;\n        if (prev) {\n            prev.model.sharedModel.changed.disconnect(this.onTextChange, this);\n        }\n        this._editor = value;\n        if (value) {\n            value.model.sharedModel.changed.connect(this.onTextChange, this);\n        }\n    }\n    /**\n     * The placeholder text that a history session began with.\n     */\n    get placeholder() {\n        return this._placeholder;\n    }\n    /**\n     * Kernel session number for filtering\n     */\n    get kernelSession() {\n        return this._kernelSession;\n    }\n    /**\n     * Get whether the notebook history manager is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the notebook history manager.\n     */\n    dispose() {\n        this._isDisposed = true;\n        this._history.length = 0;\n        Signal.clearData(this);\n    }\n    /**\n     * Set placeholder and editor. Start session if one is not already started.\n     *\n     * @param activeCell - The currently selected Cell in the notebook.\n     */\n    async checkSession(activeCell) {\n        var _a;\n        if (!this._hasSession) {\n            await this._retrieveHistory();\n            this._hasSession = true;\n            this.editor = activeCell.editor;\n            this._placeholder = ((_a = this._editor) === null || _a === void 0 ? void 0 : _a.model.sharedModel.getSource()) || '';\n            // Filter the history with the placeholder string.\n            this.setFilter(this._placeholder);\n            this._cursor = this._filtered.length - 1;\n        }\n    }\n    /**\n     * Get the previous item in the notebook history.\n     *\n     * @param activeCell - The currently selected Cell in the notebook.\n     *\n     * @returns A Promise resolving to the historical cell content text.\n     */\n    async back(activeCell) {\n        await this.checkSession(activeCell);\n        --this._cursor;\n        if (this._cursor < 0) {\n            await this.fetchBatch();\n        }\n        this._cursor = Math.max(0, this._cursor);\n        const content = this._filtered[this._cursor];\n        // This shouldn't ever be undefined as `setFilter` will always be run first\n        return content;\n    }\n    /**\n     * Get the next item in the notebook history.\n     *\n     * @param activeCell - The currently selected Cell in the notebook.\n     *\n     * @returns A Promise resolving to the historical cell content text.\n     */\n    async forward(activeCell) {\n        await this.checkSession(activeCell);\n        ++this._cursor;\n        this._cursor = Math.min(this._filtered.length - 1, this._cursor);\n        const content = this._filtered[this._cursor];\n        // This shouldn't ever be undefined as `setFilter` will always be run first\n        return content;\n    }\n    /**\n     * Update the editor of the cell with provided text content.\n     *\n     * @param activeCell - The currently selected Cell in the notebook.\n     * @param content - the result from back or forward\n     */\n    updateEditor(activeCell, content) {\n        var _a, _b;\n        if (activeCell) {\n            const model = (_a = activeCell.editor) === null || _a === void 0 ? void 0 : _a.model;\n            const source = model === null || model === void 0 ? void 0 : model.sharedModel.getSource();\n            if (this.isDisposed || !content) {\n                return;\n            }\n            if (source === content) {\n                return;\n            }\n            this._setByHistory = true;\n            model === null || model === void 0 ? void 0 : model.sharedModel.setSource(content);\n            let columnPos = 0;\n            columnPos = content.indexOf('\\n');\n            if (columnPos < 0) {\n                columnPos = content.length;\n            }\n            (_b = activeCell.editor) === null || _b === void 0 ? void 0 : _b.setCursorPosition({ line: 0, column: columnPos });\n        }\n    }\n    /**\n     * Reset the history navigation state, i.e., start a new history session.\n     */\n    reset() {\n        this._hasSession = false;\n        this._placeholder = '';\n        this._toRequest = this._requestBatchSize;\n    }\n    /**\n     * Fetches a subsequent batch of history. Updates the filtered history and cursor to correct place in history,\n     * accounting for potentially new history items above it.\n     */\n    async fetchBatch() {\n        this._toRequest += this._requestBatchSize;\n        let oldFilteredReversed = this._filtered.slice().reverse();\n        let oldHistory = this._history.slice();\n        await this._retrieveHistory().then(() => {\n            this.setFilter(this._placeholder);\n            let cursorOffset = 0;\n            let filteredReversed = this._filtered.slice().reverse();\n            for (let i = 0; i < oldFilteredReversed.length; i++) {\n                let item = oldFilteredReversed[i];\n                for (let ij = i + cursorOffset; ij < filteredReversed.length; ij++) {\n                    if (item === filteredReversed[ij]) {\n                        break;\n                    }\n                    else {\n                        cursorOffset += 1;\n                    }\n                }\n            }\n            this._cursor =\n                this._filtered.length - (oldFilteredReversed.length + 1) - cursorOffset;\n        });\n        if (this._cursor < 0) {\n            if (this._history.length > oldHistory.length) {\n                await this.fetchBatch();\n            }\n        }\n    }\n    /**\n     * Populate the history collection on history reply from a kernel.\n     *\n     * @param value The kernel message history reply.\n     *\n     * #### Notes\n     * History entries have the shape:\n     * [session: number, line: number, input: string]\n     * Contiguous duplicates are stripped out of the API response.\n     */\n    onHistory(value, cell) {\n        this._history.length = 0;\n        let last = ['', '', ''];\n        let current = ['', '', ''];\n        let kernelSession = '';\n        if (value.content.status === 'ok') {\n            for (let i = 0; i < value.content.history.length; i++) {\n                current = value.content.history[i];\n                if (current !== last) {\n                    kernelSession = value.content.history[i][0];\n                    this._history.push((last = current));\n                }\n            }\n            // set the kernel session for filtering\n            if (!this.kernelSession) {\n                if (current[2] == (cell === null || cell === void 0 ? void 0 : cell.model.sharedModel.getSource())) {\n                    this._kernelSession = kernelSession;\n                }\n            }\n        }\n    }\n    /**\n     * Handle a text change signal from the editor.\n     */\n    onTextChange() {\n        if (this._setByHistory) {\n            this._setByHistory = false;\n            return;\n        }\n        this.reset();\n    }\n    /**\n     * Handle the current kernel changing.\n     */\n    async _handleKernel() {\n        var _a;\n        this._kernel = (_a = this._sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel;\n        if (!this._kernel) {\n            this._history.length = 0;\n            return;\n        }\n        await this._retrieveHistory().catch();\n        return;\n    }\n    /**\n     * retrieve the history from the kernel\n     *\n     * @param cell - The string to use when filtering the data.\n     */\n    async _retrieveHistory(cell) {\n        var _a;\n        return await ((_a = this._kernel) === null || _a === void 0 ? void 0 : _a.requestHistory(request(this._toRequest)).then(v => {\n            this.onHistory(v, cell);\n        }).catch(() => {\n            console.warn(this._trans.__('History was unable to be retrieved'));\n        }));\n    }\n    /**\n     * Set the filter data.\n     *\n     * @param filterStr - The string to use when filtering the data.\n     */\n    setFilter(filterStr = '') {\n        // Apply the new filter and remove contiguous duplicates.\n        this._filtered.length = 0;\n        let last = '';\n        let current = '';\n        for (let i = 0; i < this._history.length; i++) {\n            current = this._history[i][2];\n            if (current !== last && filterStr !== current) {\n                this._filtered.push((last = current));\n            }\n        }\n        this._filtered.push(filterStr);\n    }\n}\nfunction request(n) {\n    return {\n        output: false,\n        raw: true,\n        hist_access_type: 'tail',\n        n: n\n    };\n}\n//# sourceMappingURL=history.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Dialog, showDialog } from '@jupyterlab/apputils';\nimport * as nbformat from '@jupyterlab/nbformat';\nimport { YNotebook } from '@jupyter/ydoc';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { JSONExt } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\nimport { CellList } from './celllist';\n/**\n * An implementation of a notebook Model.\n */\nexport class NotebookModel {\n    /**\n     * Construct a new notebook model.\n     */\n    constructor(options = {}) {\n        var _a, _b;\n        /**\n         * Whether the model should disposed the shared model on disposal or not.\n         */\n        this.standaloneModel = false;\n        this._dirty = false;\n        this._readOnly = false;\n        this._contentChanged = new Signal(this);\n        this._stateChanged = new Signal(this);\n        this._isDisposed = false;\n        this._metadataChanged = new Signal(this);\n        this.standaloneModel = typeof options.sharedModel === 'undefined';\n        if (options.sharedModel) {\n            this.sharedModel = options.sharedModel;\n        }\n        else {\n            this.sharedModel = YNotebook.create({\n                disableDocumentWideUndoRedo: (_a = options.disableDocumentWideUndoRedo) !== null && _a !== void 0 ? _a : true,\n                data: {\n                    nbformat: nbformat.MAJOR_VERSION,\n                    nbformat_minor: nbformat.MINOR_VERSION,\n                    metadata: {\n                        kernelspec: { name: '', display_name: '' },\n                        language_info: { name: (_b = options.languagePreference) !== null && _b !== void 0 ? _b : '' }\n                    }\n                }\n            });\n        }\n        this._cells = new CellList(this.sharedModel);\n        this._trans = (options.translator || nullTranslator).load('jupyterlab');\n        this._deletedCells = [];\n        this._collaborationEnabled = !!(options === null || options === void 0 ? void 0 : options.collaborationEnabled);\n        this._cells.changed.connect(this._onCellsChanged, this);\n        this.sharedModel.changed.connect(this._onStateChanged, this);\n        this.sharedModel.metadataChanged.connect(this._onMetadataChanged, this);\n    }\n    /**\n     * A signal emitted when the document content changes.\n     */\n    get contentChanged() {\n        return this._contentChanged;\n    }\n    /**\n     * Signal emitted when notebook metadata changes.\n     */\n    get metadataChanged() {\n        return this._metadataChanged;\n    }\n    /**\n     * A signal emitted when the document state changes.\n     */\n    get stateChanged() {\n        return this._stateChanged;\n    }\n    /**\n     * Get the observable list of notebook cells.\n     */\n    get cells() {\n        return this._cells;\n    }\n    /**\n     * The dirty state of the document.\n     */\n    get dirty() {\n        return this._dirty;\n    }\n    set dirty(newValue) {\n        const oldValue = this._dirty;\n        if (newValue === oldValue) {\n            return;\n        }\n        this._dirty = newValue;\n        this.triggerStateChange({\n            name: 'dirty',\n            oldValue,\n            newValue\n        });\n    }\n    /**\n     * The read only state of the document.\n     */\n    get readOnly() {\n        return this._readOnly;\n    }\n    set readOnly(newValue) {\n        if (newValue === this._readOnly) {\n            return;\n        }\n        const oldValue = this._readOnly;\n        this._readOnly = newValue;\n        this.triggerStateChange({ name: 'readOnly', oldValue, newValue });\n    }\n    /**\n     * The metadata associated with the notebook.\n     *\n     * ### Notes\n     * This is a copy of the metadata. Changing a part of it\n     * won't affect the model.\n     * As this returns a copy of all metadata, it is advised to\n     * use `getMetadata` to speed up the process of getting a single key.\n     */\n    get metadata() {\n        return this.sharedModel.metadata;\n    }\n    /**\n     * The major version number of the nbformat.\n     */\n    get nbformat() {\n        return this.sharedModel.nbformat;\n    }\n    /**\n     * The minor version number of the nbformat.\n     */\n    get nbformatMinor() {\n        return this.sharedModel.nbformat_minor;\n    }\n    /**\n     * The default kernel name of the document.\n     */\n    get defaultKernelName() {\n        var _a;\n        const spec = this.getMetadata('kernelspec');\n        return (_a = spec === null || spec === void 0 ? void 0 : spec.name) !== null && _a !== void 0 ? _a : '';\n    }\n    /**\n     * A list of deleted cells for the notebook..\n     */\n    get deletedCells() {\n        return this._deletedCells;\n    }\n    /**\n     * The default kernel language of the document.\n     */\n    get defaultKernelLanguage() {\n        var _a;\n        const info = this.getMetadata('language_info');\n        return (_a = info === null || info === void 0 ? void 0 : info.name) !== null && _a !== void 0 ? _a : '';\n    }\n    /**\n     * Whether the model is collaborative or not.\n     */\n    get collaborative() {\n        return this._collaborationEnabled;\n    }\n    /**\n     * Dispose of the resources held by the model.\n     */\n    dispose() {\n        // Do nothing if already disposed.\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        const cells = this.cells;\n        this._cells = null;\n        cells.dispose();\n        if (this.standaloneModel) {\n            this.sharedModel.dispose();\n        }\n        Signal.clearData(this);\n    }\n    /**\n     * Delete a metadata\n     *\n     * @param key Metadata key\n     */\n    deleteMetadata(key) {\n        return this.sharedModel.deleteMetadata(key);\n    }\n    /**\n     * Get a metadata\n     *\n     * ### Notes\n     * This returns a copy of the key value.\n     *\n     * @param key Metadata key\n     */\n    getMetadata(key) {\n        return this.sharedModel.getMetadata(key);\n    }\n    /**\n     * Set a metadata\n     *\n     * @param key Metadata key\n     * @param value Metadata value\n     */\n    setMetadata(key, value) {\n        if (typeof value === 'undefined') {\n            this.sharedModel.deleteMetadata(key);\n        }\n        else {\n            this.sharedModel.setMetadata(key, value);\n        }\n    }\n    /**\n     * Serialize the model to a string.\n     */\n    toString() {\n        return JSON.stringify(this.toJSON());\n    }\n    /**\n     * Deserialize the model from a string.\n     *\n     * #### Notes\n     * Should emit a [contentChanged] signal.\n     */\n    fromString(value) {\n        this.fromJSON(JSON.parse(value));\n    }\n    /**\n     * Serialize the model to JSON.\n     */\n    toJSON() {\n        this._ensureMetadata();\n        return this.sharedModel.toJSON();\n    }\n    /**\n     * Deserialize the model from JSON.\n     *\n     * #### Notes\n     * Should emit a [contentChanged] signal.\n     */\n    fromJSON(value) {\n        var _a, _b;\n        const copy = JSONExt.deepCopy(value);\n        const origNbformat = value.metadata.orig_nbformat;\n        // Alert the user if the format changes.\n        copy.nbformat = Math.max(value.nbformat, nbformat.MAJOR_VERSION);\n        if (copy.nbformat !== value.nbformat ||\n            copy.nbformat_minor < nbformat.MINOR_VERSION) {\n            copy.nbformat_minor = nbformat.MINOR_VERSION;\n        }\n        if (origNbformat !== undefined && copy.nbformat !== origNbformat) {\n            const newer = copy.nbformat > origNbformat;\n            let msg;\n            if (newer) {\n                msg = this._trans.__(`This notebook has been converted from an older notebook format (v%1)\nto the current notebook format (v%2).\nThe next time you save this notebook, the current notebook format (v%2) will be used.\n'Older versions of Jupyter may not be able to read the new format.' To preserve the original format version,\nclose the notebook without saving it.`, origNbformat, copy.nbformat);\n            }\n            else {\n                msg = this._trans.__(`This notebook has been converted from an newer notebook format (v%1)\nto the current notebook format (v%2).\nThe next time you save this notebook, the current notebook format (v%2) will be used.\nSome features of the original notebook may not be available.' To preserve the original format version,\nclose the notebook without saving it.`, origNbformat, copy.nbformat);\n            }\n            void showDialog({\n                title: this._trans.__('Notebook converted'),\n                body: msg,\n                buttons: [Dialog.okButton({ label: this._trans.__('Ok') })]\n            });\n        }\n        // Ensure there is at least one cell\n        if (((_b = (_a = copy.cells) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) === 0) {\n            copy['cells'] = [\n                { cell_type: 'code', source: '', metadata: { trusted: true } }\n            ];\n        }\n        this.sharedModel.fromJSON(copy);\n        this._ensureMetadata();\n        this.dirty = true;\n    }\n    /**\n     * Handle a change in the cells list.\n     */\n    _onCellsChanged(list, change) {\n        switch (change.type) {\n            case 'add':\n                change.newValues.forEach(cell => {\n                    cell.contentChanged.connect(this.triggerContentChange, this);\n                });\n                break;\n            case 'remove':\n                break;\n            case 'set':\n                change.newValues.forEach(cell => {\n                    cell.contentChanged.connect(this.triggerContentChange, this);\n                });\n                break;\n            default:\n                break;\n        }\n        this.triggerContentChange();\n    }\n    _onMetadataChanged(sender, changes) {\n        this._metadataChanged.emit(changes);\n        this.triggerContentChange();\n    }\n    _onStateChanged(sender, changes) {\n        if (changes.stateChange) {\n            changes.stateChange.forEach(value => {\n                if (value.name === 'dirty') {\n                    // Setting `dirty` will trigger the state change.\n                    // We always set `dirty` because the shared model state\n                    // and the local attribute are synchronized one way shared model -> _dirty\n                    this.dirty = value.newValue;\n                }\n                else if (value.oldValue !== value.newValue) {\n                    this.triggerStateChange({\n                        newValue: undefined,\n                        oldValue: undefined,\n                        ...value\n                    });\n                }\n            });\n        }\n    }\n    /**\n     * Make sure we have the required metadata fields.\n     */\n    _ensureMetadata(languageName = '') {\n        if (!this.getMetadata('language_info')) {\n            this.sharedModel.setMetadata('language_info', { name: languageName });\n        }\n        if (!this.getMetadata('kernelspec')) {\n            this.sharedModel.setMetadata('kernelspec', {\n                name: '',\n                display_name: ''\n            });\n        }\n    }\n    /**\n     * Trigger a state change signal.\n     */\n    triggerStateChange(args) {\n        this._stateChanged.emit(args);\n    }\n    /**\n     * Trigger a content changed signal.\n     */\n    triggerContentChange() {\n        this._contentChanged.emit(void 0);\n        this.dirty = true;\n    }\n    /**\n     * Whether the model is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n}\n//# sourceMappingURL=model.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { NotebookModel } from './model';\n/**\n * A model factory for notebooks.\n */\nexport class NotebookModelFactory {\n    /**\n     * Construct a new notebook model factory.\n     */\n    constructor(options = {}) {\n        var _a, _b;\n        this._disposed = false;\n        this._disableDocumentWideUndoRedo =\n            (_a = options.disableDocumentWideUndoRedo) !== null && _a !== void 0 ? _a : true;\n        this._collaborative = (_b = options.collaborative) !== null && _b !== void 0 ? _b : true;\n    }\n    /**\n     * Define the disableDocumentWideUndoRedo property.\n     *\n     * @experimental\n     * @alpha\n     */\n    get disableDocumentWideUndoRedo() {\n        return this._disableDocumentWideUndoRedo;\n    }\n    set disableDocumentWideUndoRedo(disableDocumentWideUndoRedo) {\n        this._disableDocumentWideUndoRedo = disableDocumentWideUndoRedo;\n    }\n    /**\n     * The name of the model.\n     */\n    get name() {\n        return 'notebook';\n    }\n    /**\n     * The content type of the file.\n     */\n    get contentType() {\n        return 'notebook';\n    }\n    /**\n     * The format of the file.\n     */\n    get fileFormat() {\n        return 'json';\n    }\n    /**\n     * Whether the model is collaborative or not.\n     */\n    get collaborative() {\n        return this._collaborative;\n    }\n    /**\n     * Get whether the model factory has been disposed.\n     */\n    get isDisposed() {\n        return this._disposed;\n    }\n    /**\n     * Dispose of the model factory.\n     */\n    dispose() {\n        this._disposed = true;\n    }\n    /**\n     * Create a new model for a given path.\n     *\n     * @param options Model options.\n     *\n     * @returns A new document model.\n     */\n    createNew(options = {}) {\n        return new NotebookModel({\n            languagePreference: options.languagePreference,\n            sharedModel: options.sharedModel,\n            collaborationEnabled: options.collaborationEnabled && this.collaborative,\n            disableDocumentWideUndoRedo: this._disableDocumentWideUndoRedo\n        });\n    }\n    /**\n     * Get the preferred kernel language given a path.\n     */\n    preferredLanguage(path) {\n        return '';\n    }\n}\n//# sourceMappingURL=modelfactory.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { TextItem } from '@jupyterlab/statusbar';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { VDomModel, VDomRenderer } from '@jupyterlab/ui-components';\nimport * as React from 'react';\n/**\n * A pure function for rendering a Command/Edit mode component.\n *\n * @param props the props for rendering the component.\n *\n * @returns a tsx component for command/edit mode.\n */\nfunction CommandEditComponent(props) {\n    const trans = (props.translator || nullTranslator).load('jupyterlab');\n    return (React.createElement(TextItem, { source: trans.__('Mode: %1', props.modeNames[props.notebookMode]) }));\n}\n/**\n * StatusBar item to display which notebook mode user is in.\n */\nexport class CommandEditStatus extends VDomRenderer {\n    /**\n     * Construct a new CommandEdit status item.\n     */\n    constructor(translator) {\n        super(new CommandEditStatus.Model());\n        this.translator = translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        this._modeNames = {\n            command: this._trans.__('Command'),\n            edit: this._trans.__('Edit')\n        };\n    }\n    /**\n     * Render the CommandEdit status item.\n     */\n    render() {\n        if (!this.model) {\n            return null;\n        }\n        this.node.title = this._trans.__('Notebook is in %1 mode', this._modeNames[this.model.notebookMode]);\n        return (React.createElement(CommandEditComponent, { notebookMode: this.model.notebookMode, translator: this.translator, modeNames: this._modeNames }));\n    }\n}\n/**\n * A namespace for CommandEdit statics.\n */\n(function (CommandEditStatus) {\n    /**\n     * A VDomModel for the CommandEdit renderer.\n     */\n    class Model extends VDomModel {\n        constructor() {\n            super(...arguments);\n            /**\n             * On a change to the notebook, update the mode.\n             */\n            this._onChanged = (_notebook) => {\n                const oldMode = this._notebookMode;\n                if (this._notebook) {\n                    this._notebookMode = _notebook.mode;\n                }\n                else {\n                    this._notebookMode = 'command';\n                }\n                this._triggerChange(oldMode, this._notebookMode);\n            };\n            this._notebookMode = 'command';\n            this._notebook = null;\n        }\n        /**\n         * The current mode of the current notebook.\n         */\n        get notebookMode() {\n            return this._notebookMode;\n        }\n        /**\n         * Set the current notebook for the model.\n         */\n        set notebook(notebook) {\n            const oldNotebook = this._notebook;\n            if (oldNotebook !== null) {\n                oldNotebook.stateChanged.disconnect(this._onChanged, this);\n                oldNotebook.activeCellChanged.disconnect(this._onChanged, this);\n                oldNotebook.modelContentChanged.disconnect(this._onChanged, this);\n            }\n            const oldMode = this._notebookMode;\n            this._notebook = notebook;\n            if (this._notebook === null) {\n                this._notebookMode = 'command';\n            }\n            else {\n                this._notebookMode = this._notebook.mode;\n                this._notebook.stateChanged.connect(this._onChanged, this);\n                this._notebook.activeCellChanged.connect(this._onChanged, this);\n                this._notebook.modelContentChanged.connect(this._onChanged, this);\n            }\n            this._triggerChange(oldMode, this._notebookMode);\n        }\n        /**\n         * Trigger a state change for the renderer.\n         */\n        _triggerChange(oldState, newState) {\n            if (oldState !== newState) {\n                this.stateChanged.emit(void 0);\n            }\n        }\n    }\n    CommandEditStatus.Model = Model;\n})(CommandEditStatus || (CommandEditStatus = {}));\n//# sourceMappingURL=modestatus.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { IEditorMimeTypeService } from '@jupyterlab/codeeditor';\nimport { untilReady, VirtualDocument, WidgetLSPAdapter } from '@jupyterlab/lsp';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\nexport class NotebookAdapter extends WidgetLSPAdapter {\n    constructor(editorWidget, options) {\n        super(editorWidget, options);\n        this.editorWidget = editorWidget;\n        this.options = options;\n        this._type = 'code';\n        this._readyDelegate = new PromiseDelegate();\n        this._editorToCell = new Map();\n        this.editor = editorWidget.content;\n        this._cellToEditor = new WeakMap();\n        this.isReady = this.isReady.bind(this);\n        Promise.all([\n            this.widget.context.sessionContext.ready,\n            this.connectionManager.ready\n        ])\n            .then(async () => {\n            await this.initOnceReady();\n            this._readyDelegate.resolve();\n        })\n            .catch(console.error);\n    }\n    /**\n     * Get current path of the document.\n     */\n    get documentPath() {\n        return this.widget.context.path;\n    }\n    /**\n     * Get the mime type of the document.\n     */\n    get mimeType() {\n        var _a;\n        let mimeType;\n        let languageMetadata = this.language_info();\n        if (!languageMetadata || !languageMetadata.mimetype) {\n            // fallback to the code cell mime type if no kernel in use\n            mimeType = this.widget.content.codeMimetype;\n        }\n        else {\n            mimeType = languageMetadata.mimetype;\n        }\n        return Array.isArray(mimeType)\n            ? (_a = mimeType[0]) !== null && _a !== void 0 ? _a : IEditorMimeTypeService.defaultMimeType\n            : mimeType;\n    }\n    /**\n     * Get the file extension of the document.\n     */\n    get languageFileExtension() {\n        let languageMetadata = this.language_info();\n        if (!languageMetadata || !languageMetadata.file_extension) {\n            return;\n        }\n        return languageMetadata.file_extension.replace('.', '');\n    }\n    /**\n     * Get the inner HTMLElement of the document widget.\n     */\n    get wrapperElement() {\n        return this.widget.node;\n    }\n    /**\n     *  Get the list of CM editor with its type in the document,\n     */\n    get editors() {\n        if (this.isDisposed) {\n            return [];\n        }\n        let notebook = this.widget.content;\n        this._editorToCell.clear();\n        if (notebook.isDisposed) {\n            return [];\n        }\n        return notebook.widgets.map(cell => {\n            return {\n                ceEditor: this._getCellEditor(cell),\n                type: cell.model.type,\n                value: cell.model.sharedModel.getSource()\n            };\n        });\n    }\n    /**\n     * Get the activated CM editor.\n     */\n    get activeEditor() {\n        return this.editor.activeCell\n            ? this._getCellEditor(this.editor.activeCell)\n            : undefined;\n    }\n    /**\n     * Promise that resolves once the adapter is initialized\n     */\n    get ready() {\n        return this._readyDelegate.promise;\n    }\n    /**\n     * Get the index of editor from the cursor position in the virtual\n     * document.\n     * @deprecated This is error-prone and will be removed in JupyterLab 5.0, use `getEditorIndex()` with `virtualDocument.getEditorAtVirtualLine(position)` instead.\n     *\n     * @param position - the position of cursor in the virtual document.\n     */\n    getEditorIndexAt(position) {\n        let cell = this._getCellAt(position);\n        let notebook = this.widget.content;\n        return notebook.widgets.findIndex(otherCell => {\n            return cell === otherCell;\n        });\n    }\n    /**\n     * Get the index of input editor\n     *\n     * @param ceEditor - instance of the code editor\n     */\n    getEditorIndex(ceEditor) {\n        let cell = this._editorToCell.get(ceEditor);\n        return this.editor.widgets.findIndex(otherCell => {\n            return cell === otherCell;\n        });\n    }\n    /**\n     * Get the wrapper of input editor.\n     *\n     * @param ceEditor - instance of the code editor\n     */\n    getEditorWrapper(ceEditor) {\n        let cell = this._editorToCell.get(ceEditor);\n        return cell.node;\n    }\n    /**\n     * Callback on kernel changed event, it will disconnect the\n     * document with the language server and then reconnect.\n     *\n     * @param _session - Session context of changed kernel\n     * @param change - Changed data\n     */\n    async onKernelChanged(_session, change) {\n        if (!change.newValue) {\n            return;\n        }\n        try {\n            // note: we need to wait until ready before updating language info\n            const oldLanguageInfo = this._languageInfo;\n            await untilReady(this.isReady, -1);\n            await this._updateLanguageInfo();\n            const newLanguageInfo = this._languageInfo;\n            if ((oldLanguageInfo === null || oldLanguageInfo === void 0 ? void 0 : oldLanguageInfo.name) != newLanguageInfo.name ||\n                (oldLanguageInfo === null || oldLanguageInfo === void 0 ? void 0 : oldLanguageInfo.mimetype) != (newLanguageInfo === null || newLanguageInfo === void 0 ? void 0 : newLanguageInfo.mimetype) ||\n                (oldLanguageInfo === null || oldLanguageInfo === void 0 ? void 0 : oldLanguageInfo.file_extension) != (newLanguageInfo === null || newLanguageInfo === void 0 ? void 0 : newLanguageInfo.file_extension)) {\n                console.log(`Changed to ${this._languageInfo.name} kernel, reconnecting`);\n                this.reloadConnection();\n            }\n            else {\n                console.log('Keeping old LSP connection as the new kernel uses the same language');\n            }\n        }\n        catch (err) {\n            console.warn(err);\n            // try to reconnect anyway\n            this.reloadConnection();\n        }\n    }\n    /**\n     * Dispose the widget.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this.widget.context.sessionContext.kernelChanged.disconnect(this.onKernelChanged, this);\n        this.widget.content.activeCellChanged.disconnect(this._activeCellChanged, this);\n        super.dispose();\n        // editors are needed for the parent dispose() to unbind signals, so they are the last to go\n        this._editorToCell.clear();\n        Signal.clearData(this);\n    }\n    /**\n     * Method to check if the notebook context is ready.\n     */\n    isReady() {\n        var _a;\n        return (!this.widget.isDisposed &&\n            this.widget.context.isReady &&\n            this.widget.content.isVisible &&\n            this.widget.content.widgets.length > 0 &&\n            ((_a = this.widget.context.sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel) != null);\n    }\n    /**\n     * Update the virtual document on cell changing event.\n     *\n     * @param cells - Observable list of changed cells\n     * @param change - Changed data\n     */\n    async handleCellChange(cells, change) {\n        let cellsAdded = [];\n        let cellsRemoved = [];\n        const type = this._type;\n        if (change.type === 'set') {\n            // handling of conversions is important, because the editors get re-used and their handlers inherited,\n            // so we need to clear our handlers from editors of e.g. markdown cells which previously were code cells.\n            let convertedToMarkdownOrRaw = [];\n            let convertedToCode = [];\n            if (change.newValues.length === change.oldValues.length) {\n                // during conversion the cells should not get deleted nor added\n                for (let i = 0; i < change.newValues.length; i++) {\n                    if (change.oldValues[i].type === type &&\n                        change.newValues[i].type !== type) {\n                        convertedToMarkdownOrRaw.push(change.newValues[i]);\n                    }\n                    else if (change.oldValues[i].type !== type &&\n                        change.newValues[i].type === type) {\n                        convertedToCode.push(change.newValues[i]);\n                    }\n                }\n                cellsAdded = convertedToCode;\n                cellsRemoved = convertedToMarkdownOrRaw;\n            }\n        }\n        else if (change.type == 'add') {\n            cellsAdded = change.newValues.filter(cellModel => cellModel.type === type);\n        }\n        // note: editorRemoved is not emitted for removal of cells by change of type 'remove' (but only during cell type conversion)\n        // because there is no easy way to get the widget associated with the removed cell(s) - because it is no\n        // longer in the notebook widget list! It would need to be tracked on our side, but it is not necessary\n        // as (except for a tiny memory leak) it should not impact the functionality in any way\n        if (cellsRemoved.length ||\n            cellsAdded.length ||\n            change.type === 'set' ||\n            change.type === 'move' ||\n            change.type === 'remove') {\n            // in contrast to the file editor document which can be only changed by the modification of the editor content,\n            // the notebook document can also get modified by a change in the number or arrangement of editors themselves;\n            // for this reason each change has to trigger documents update (so that LSP mirror is in sync).\n            await this.updateDocuments();\n        }\n        for (let cellModel of cellsAdded) {\n            let cellWidget = this.widget.content.widgets.find(cell => cell.model.id === cellModel.id);\n            if (!cellWidget) {\n                console.warn(`Widget for added cell with ID: ${cellModel.id} not found!`);\n                continue;\n            }\n            // Add editor to the mapping if needed\n            this._getCellEditor(cellWidget);\n        }\n    }\n    /**\n     * Generate the virtual document associated with the document.\n     */\n    createVirtualDocument() {\n        return new VirtualDocument({\n            language: this.language,\n            foreignCodeExtractors: this.options.foreignCodeExtractorsManager,\n            path: this.documentPath,\n            fileExtension: this.languageFileExtension,\n            // notebooks are continuous, each cell is dependent on the previous one\n            standalone: false,\n            // notebooks are not supported by LSP servers\n            hasLspSupportedFile: false\n        });\n    }\n    /**\n     * Get the metadata of notebook.\n     */\n    language_info() {\n        return this._languageInfo;\n    }\n    /**\n     * Initialization function called once the editor and the LSP connection\n     * manager is ready. This function will create the virtual document and\n     * connect various signals.\n     */\n    async initOnceReady() {\n        await untilReady(this.isReady.bind(this), -1);\n        await this._updateLanguageInfo();\n        this.initVirtual();\n        // connect the document, but do not open it as the adapter will handle this\n        // after registering all features\n        this.connectDocument(this.virtualDocument, false).catch(console.warn);\n        this.widget.context.sessionContext.kernelChanged.connect(this.onKernelChanged, this);\n        this.widget.content.activeCellChanged.connect(this._activeCellChanged, this);\n        this._connectModelSignals(this.widget);\n        this.editor.modelChanged.connect(notebook => {\n            // note: this should not usually happen;\n            // there is no default action that would trigger this,\n            // its just a failsafe in case if another extension decides\n            // to swap the notebook model\n            console.warn('Model changed, connecting cell change handler; this is not something we were expecting');\n            this._connectModelSignals(notebook);\n        });\n    }\n    /**\n     * Connect the cell changed event to its handler\n     *\n     * @param  notebook - The notebook that emitted event.\n     */\n    _connectModelSignals(notebook) {\n        if (notebook.model === null) {\n            console.warn(`Model is missing for notebook ${notebook}, cannot connect cell changed signal!`);\n        }\n        else {\n            notebook.model.cells.changed.connect(this.handleCellChange, this);\n        }\n    }\n    /**\n     * Update the stored language info with the one from the notebook.\n     */\n    async _updateLanguageInfo() {\n        var _a, _b, _c, _d;\n        const language_info = (_d = (await ((_c = (_b = (_a = this.widget.context.sessionContext) === null || _a === void 0 ? void 0 : _a.session) === null || _b === void 0 ? void 0 : _b.kernel) === null || _c === void 0 ? void 0 : _c.info))) === null || _d === void 0 ? void 0 : _d.language_info;\n        if (language_info) {\n            this._languageInfo = language_info;\n        }\n        else {\n            throw new Error('Language info update failed (no session, kernel, or info available)');\n        }\n    }\n    /**\n     * Handle the cell changed event\n     * @param  notebook - The notebook that emitted event\n     * @param cell - Changed cell.\n     */\n    _activeCellChanged(notebook, cell) {\n        if (!cell || cell.model.type !== this._type) {\n            return;\n        }\n        this._activeEditorChanged.emit({\n            editor: this._getCellEditor(cell)\n        });\n    }\n    /**\n     * Get the cell at the cursor position of the virtual document.\n     * @param  pos - Position in the virtual document.\n     */\n    _getCellAt(pos) {\n        let editor = this.virtualDocument.getEditorAtVirtualLine(pos);\n        return this._editorToCell.get(editor);\n    }\n    /**\n     * Get the cell editor and add new ones to the mappings.\n     *\n     * @param cell Cell widget\n     * @returns Cell editor accessor\n     */\n    _getCellEditor(cell) {\n        if (!this._cellToEditor.has(cell)) {\n            const editor = Object.freeze({\n                getEditor: () => cell.editor,\n                ready: async () => {\n                    await cell.ready;\n                    return cell.editor;\n                },\n                reveal: async () => {\n                    await this.editor.scrollToCell(cell);\n                    return cell.editor;\n                }\n            });\n            this._cellToEditor.set(cell, editor);\n            this._editorToCell.set(editor, cell);\n            cell.disposed.connect(() => {\n                this._cellToEditor.delete(cell);\n                this._editorToCell.delete(editor);\n                this._editorRemoved.emit({\n                    editor\n                });\n            });\n            this._editorAdded.emit({\n                editor\n            });\n        }\n        return this._cellToEditor.get(cell);\n    }\n}\n//# sourceMappingURL=notebooklspadapter.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { JSONEditor } from '@jupyterlab/codeeditor';\nimport { ObservableJSON } from '@jupyterlab/observables';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { Collapser } from '@jupyterlab/ui-components';\nimport { ArrayExt } from '@lumino/algorithm';\nimport { ConflatableMessage, MessageLoop } from '@lumino/messaging';\nimport { PanelLayout, Widget } from '@lumino/widgets';\nclass RankedPanel extends Widget {\n    constructor() {\n        super();\n        this._items = [];\n        this.layout = new PanelLayout();\n        this.addClass('jp-RankedPanel');\n    }\n    addWidget(widget, rank) {\n        const rankItem = { widget, rank };\n        const index = ArrayExt.upperBound(this._items, rankItem, Private.itemCmp);\n        ArrayExt.insert(this._items, index, rankItem);\n        const layout = this.layout;\n        layout.insertWidget(index, widget);\n    }\n    /**\n     * Handle the removal of a child\n     *\n     */\n    onChildRemoved(msg) {\n        const index = ArrayExt.findFirstIndex(this._items, item => item.widget === msg.child);\n        if (index !== -1) {\n            ArrayExt.removeAt(this._items, index);\n        }\n    }\n}\n/**\n * A widget that provides metadata tools.\n */\nexport class NotebookTools extends Widget {\n    /**\n     * Construct a new NotebookTools object.\n     */\n    constructor(options) {\n        super();\n        this.addClass('jp-NotebookTools');\n        this.translator = options.translator || nullTranslator;\n        this._tools = [];\n        this.layout = new PanelLayout();\n        this._tracker = options.tracker;\n        this._tracker.currentChanged.connect(this._onActiveNotebookPanelChanged, this);\n        this._tracker.activeCellChanged.connect(this._onActiveCellChanged, this);\n        this._tracker.selectionChanged.connect(this._onSelectionChanged, this);\n        this._onActiveNotebookPanelChanged();\n        this._onActiveCellChanged();\n        this._onSelectionChanged();\n    }\n    /**\n     * The active cell widget.\n     */\n    get activeCell() {\n        return this._tracker.activeCell;\n    }\n    /**\n     * The currently selected cells.\n     */\n    get selectedCells() {\n        const panel = this._tracker.currentWidget;\n        if (!panel) {\n            return [];\n        }\n        const notebook = panel.content;\n        return notebook.widgets.filter(cell => notebook.isSelectedOrActive(cell));\n    }\n    /**\n     * The current notebook.\n     */\n    get activeNotebookPanel() {\n        return this._tracker.currentWidget;\n    }\n    /**\n     * Add a cell tool item.\n     */\n    addItem(options) {\n        var _a;\n        const tool = options.tool;\n        const rank = (_a = options.rank) !== null && _a !== void 0 ? _a : 100;\n        let section;\n        const extendedTool = this._tools.find(extendedTool => extendedTool.section === options.section);\n        if (extendedTool)\n            section = extendedTool.panel;\n        else {\n            throw new Error(`The section ${options.section} does not exist`);\n        }\n        tool.addClass('jp-NotebookTools-tool');\n        section.addWidget(tool, rank);\n        // TODO: perhaps the necessary notebookTools functionality should be\n        // consolidated into a single object, rather than a broad reference to this.\n        tool.notebookTools = this;\n        // Trigger the tool to update its active notebook and cell.\n        MessageLoop.sendMessage(tool, NotebookTools.ActiveNotebookPanelMessage);\n        MessageLoop.sendMessage(tool, NotebookTools.ActiveCellMessage);\n    }\n    /*\n     * Add a section to the notebook tool with its widget\n     */\n    addSection(options) {\n        var _a;\n        const sectionName = options.sectionName;\n        const label = options.label || options.sectionName;\n        const widget = options.tool;\n        let rank = (_a = options.rank) !== null && _a !== void 0 ? _a : null;\n        const newSection = new RankedPanel();\n        newSection.title.label = label;\n        if (widget)\n            newSection.addWidget(widget, 0);\n        this._tools.push({\n            section: sectionName,\n            panel: newSection,\n            rank: rank\n        });\n        if (rank != null)\n            this.layout.insertWidget(rank, new Collapser({ widget: newSection }));\n        else {\n            // If no rank is provided, try to add the new section before the AdvancedTools.\n            let advancedToolsRank = null;\n            const layout = this.layout;\n            for (let i = 0; i < layout.widgets.length; i++) {\n                let w = layout.widgets[i];\n                if (w instanceof Collapser) {\n                    if (w.widget.id === 'advancedToolsSection') {\n                        advancedToolsRank = i;\n                        break;\n                    }\n                }\n            }\n            if (advancedToolsRank !== null)\n                this.layout.insertWidget(advancedToolsRank, new Collapser({ widget: newSection }));\n            else\n                this.layout.addWidget(new Collapser({ widget: newSection }));\n        }\n    }\n    /**\n     * Handle a change to the notebook panel.\n     */\n    _onActiveNotebookPanelChanged() {\n        if (this._prevActiveNotebookModel &&\n            !this._prevActiveNotebookModel.isDisposed) {\n            this._prevActiveNotebookModel.metadataChanged.disconnect(this._onActiveNotebookPanelMetadataChanged, this);\n        }\n        const activeNBModel = this.activeNotebookPanel && this.activeNotebookPanel.content\n            ? this.activeNotebookPanel.content.model\n            : null;\n        this._prevActiveNotebookModel = activeNBModel;\n        if (activeNBModel) {\n            activeNBModel.metadataChanged.connect(this._onActiveNotebookPanelMetadataChanged, this);\n        }\n        for (const widget of this._toolChildren()) {\n            MessageLoop.sendMessage(widget, NotebookTools.ActiveNotebookPanelMessage);\n        }\n    }\n    /**\n     * Handle a change to the active cell.\n     */\n    _onActiveCellChanged() {\n        if (this._prevActiveCell && !this._prevActiveCell.isDisposed) {\n            this._prevActiveCell.metadataChanged.disconnect(this._onActiveCellMetadataChanged, this);\n        }\n        const activeCell = this.activeCell ? this.activeCell.model : null;\n        this._prevActiveCell = activeCell;\n        if (activeCell) {\n            activeCell.metadataChanged.connect(this._onActiveCellMetadataChanged, this);\n        }\n        for (const widget of this._toolChildren()) {\n            MessageLoop.sendMessage(widget, NotebookTools.ActiveCellMessage);\n        }\n    }\n    /**\n     * Handle a change in the selection.\n     */\n    _onSelectionChanged() {\n        for (const widget of this._toolChildren()) {\n            MessageLoop.sendMessage(widget, NotebookTools.SelectionMessage);\n        }\n    }\n    /**\n     * Handle a change in the active cell metadata.\n     */\n    _onActiveNotebookPanelMetadataChanged(sender, args) {\n        const message = new ObservableJSON.ChangeMessage('activenotebookpanel-metadata-changed', { oldValue: undefined, newValue: undefined, ...args });\n        for (const widget of this._toolChildren()) {\n            MessageLoop.sendMessage(widget, message);\n        }\n    }\n    /**\n     * Handle a change in the notebook model metadata.\n     */\n    _onActiveCellMetadataChanged(sender, args) {\n        const message = new ObservableJSON.ChangeMessage('activecell-metadata-changed', { newValue: undefined, oldValue: undefined, ...args });\n        for (const widget of this._toolChildren()) {\n            MessageLoop.sendMessage(widget, message);\n        }\n    }\n    *_toolChildren() {\n        for (let tool of this._tools) {\n            yield* tool.panel.children();\n        }\n    }\n}\n/**\n * The namespace for NotebookTools class statics.\n */\n(function (NotebookTools) {\n    /**\n     * A singleton conflatable `'activenotebookpanel-changed'` message.\n     */\n    NotebookTools.ActiveNotebookPanelMessage = new ConflatableMessage('activenotebookpanel-changed');\n    /**\n     * A singleton conflatable `'activecell-changed'` message.\n     */\n    NotebookTools.ActiveCellMessage = new ConflatableMessage('activecell-changed');\n    /**\n     * A singleton conflatable `'selection-changed'` message.\n     */\n    NotebookTools.SelectionMessage = new ConflatableMessage('selection-changed');\n    /**\n     * The base notebook tool, meant to be subclassed.\n     */\n    class Tool extends Widget {\n        dispose() {\n            super.dispose();\n            if (this.notebookTools) {\n                this.notebookTools = null;\n            }\n        }\n        /**\n         * Process a message sent to the widget.\n         *\n         * @param msg - The message sent to the widget.\n         */\n        processMessage(msg) {\n            super.processMessage(msg);\n            switch (msg.type) {\n                case 'activenotebookpanel-changed':\n                    this.onActiveNotebookPanelChanged(msg);\n                    break;\n                case 'activecell-changed':\n                    this.onActiveCellChanged(msg);\n                    break;\n                case 'selection-changed':\n                    this.onSelectionChanged(msg);\n                    break;\n                case 'activecell-metadata-changed':\n                    this.onActiveCellMetadataChanged(msg);\n                    break;\n                case 'activenotebookpanel-metadata-changed':\n                    this.onActiveNotebookPanelMetadataChanged(msg);\n                    break;\n                default:\n                    break;\n            }\n        }\n        /**\n         * Handle a change to the notebook panel.\n         *\n         * #### Notes\n         * The default implementation is a no-op.\n         */\n        onActiveNotebookPanelChanged(msg) {\n            /* no-op */\n        }\n        /**\n         * Handle a change to the active cell.\n         *\n         * #### Notes\n         * The default implementation is a no-op.\n         */\n        onActiveCellChanged(msg) {\n            /* no-op */\n        }\n        /**\n         * Handle a change to the selection.\n         *\n         * #### Notes\n         * The default implementation is a no-op.\n         */\n        onSelectionChanged(msg) {\n            /* no-op */\n        }\n        /**\n         * Handle a change to the metadata of the active cell.\n         *\n         * #### Notes\n         * The default implementation is a no-op.\n         */\n        onActiveCellMetadataChanged(msg) {\n            /* no-op */\n        }\n        /**\n         * Handle a change to the metadata of the active cell.\n         *\n         * #### Notes\n         * The default implementation is a no-op.\n         */\n        onActiveNotebookPanelMetadataChanged(msg) {\n            /* no-op */\n        }\n    }\n    NotebookTools.Tool = Tool;\n    /**\n     * A raw metadata editor.\n     */\n    class MetadataEditorTool extends Tool {\n        /**\n         * Construct a new raw metadata tool.\n         */\n        constructor(options) {\n            super();\n            const { editorFactory } = options;\n            this.addClass('jp-MetadataEditorTool');\n            const layout = (this.layout = new PanelLayout());\n            this._editorFactory = editorFactory;\n            this._editorLabel = options.label || 'Edit Metadata';\n            this.createEditor();\n            const titleNode = new Widget({ node: document.createElement('label') });\n            titleNode.node.textContent = options.label || 'Edit Metadata';\n            layout.addWidget(titleNode);\n            layout.addWidget(this.editor);\n        }\n        /**\n         * The editor used by the tool.\n         */\n        get editor() {\n            return this._editor;\n        }\n        /**\n         * Handle a change to the notebook.\n         */\n        onActiveNotebookPanelChanged(msg) {\n            this.editor.dispose();\n            if (this.notebookTools.activeNotebookPanel) {\n                this.createEditor();\n            }\n        }\n        createEditor() {\n            this._editor = new JSONEditor({\n                editorFactory: this._editorFactory\n            });\n            this.editor.title.label = this._editorLabel;\n            this.layout.addWidget(this.editor);\n        }\n    }\n    NotebookTools.MetadataEditorTool = MetadataEditorTool;\n})(NotebookTools || (NotebookTools = {}));\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * A comparator function for widget rank items.\n     */\n    function itemCmp(first, second) {\n        return first.rank - second.rank;\n    }\n    Private.itemCmp = itemCmp;\n})(Private || (Private = {}));\n//# sourceMappingURL=notebooktools.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n/**\n * The class name added to a drop target.\n */\nexport const DROP_TARGET_CLASS = 'jp-mod-dropTarget';\n/**\n * The class name added to a drop source.\n */\nexport const DROP_SOURCE_CLASS = 'jp-mod-dropSource';\n//# sourceMappingURL=constants.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { CodeCell, CodeCellModel } from '@jupyterlab/cells';\nimport { WindowedLayout, WindowedListModel } from '@jupyterlab/ui-components';\nimport { MessageLoop } from '@lumino/messaging';\nimport { Debouncer, Throttler } from '@lumino/polling';\nimport { Widget } from '@lumino/widgets';\nimport { DROP_SOURCE_CLASS, DROP_TARGET_CLASS } from './constants';\n/**\n * Check whether the element is in a scrolling notebook.\n * Traverses open shadow DOM roots if needed.\n */\nfunction isInScrollingNotebook(element) {\n    if (!element) {\n        return false;\n    }\n    const notebook = element.closest('.jp-WindowedPanel-viewport');\n    if (notebook && notebook.dataset.isScrolling == 'true') {\n        return true;\n    }\n    const root = element.getRootNode();\n    return !!(root &&\n        root instanceof ShadowRoot &&\n        isInScrollingNotebook(root.host));\n}\n/**\n * Check whether the element is part of a CodeMirror editor.\n */\nfunction isCodeMirrorElement(element) {\n    if (!element) {\n        return false;\n    }\n    return !!element.closest('.cm-editor');\n}\n/**\n * Subclass IntersectionObserver to allow suspending callbacks when notebook is scrolling.\n */\nwindow.IntersectionObserver = class extends window.IntersectionObserver {\n    constructor(callback, options) {\n        super(entries => {\n            this._delayCallbackInScrollingNotebook(entries);\n        }, options);\n        this.callback = callback;\n        this._delayCallbackInScrollingNotebook = (entries) => {\n            const entriesInScrollingNotebook = [];\n            const nonOutputEntries = [];\n            for (const entry of entries) {\n                // Do not delay callbacks to CodeMirror editor logic\n                if (isInScrollingNotebook(entry.target) &&\n                    !isCodeMirrorElement(entry.target)) {\n                    entriesInScrollingNotebook.push(entry);\n                }\n                else {\n                    nonOutputEntries.push(entry);\n                }\n            }\n            if (nonOutputEntries.length) {\n                this.callback(nonOutputEntries, this);\n            }\n            if (entriesInScrollingNotebook.length) {\n                void this._throttler.invoke(entriesInScrollingNotebook);\n            }\n        };\n        this._throttler = new Throttler(entries => {\n            // keep delaying until no longer in scrolling notebook\n            this._delayCallbackInScrollingNotebook(entries);\n        }, { limit: 1000, edge: 'trailing' });\n    }\n};\n/**\n * Subclass ResizeObserver to allow suspending callbacks when notebook is scrolling.\n */\nwindow.ResizeObserver = class extends window.ResizeObserver {\n    constructor(callback) {\n        super(entries => {\n            this._delayCallbackInScrollingNotebook(entries);\n        });\n        this.callback = callback;\n        this._delayCallbackInScrollingNotebook = (entries) => {\n            const entriesInScrollingNotebook = [];\n            const nonOutputEntries = [];\n            for (const entry of entries) {\n                if (isInScrollingNotebook(entry.target)) {\n                    entriesInScrollingNotebook.push(entry);\n                }\n                else {\n                    nonOutputEntries.push(entry);\n                }\n            }\n            if (nonOutputEntries.length) {\n                this.callback(nonOutputEntries, this);\n            }\n            if (entriesInScrollingNotebook.length) {\n                void this._throttler.invoke(entriesInScrollingNotebook);\n            }\n        };\n        this._throttler = new Throttler(entries => {\n            // keep delaying until no longer in scrolling notebook\n            this._delayCallbackInScrollingNotebook(entries);\n        }, { limit: 1000, edge: 'trailing' });\n    }\n};\n/**\n * Notebook view model for the windowed list.\n */\nexport class NotebookViewModel extends WindowedListModel {\n    /**\n     * Construct a notebook windowed list model.\n     */\n    constructor(cells, options) {\n        super(options);\n        this.cells = cells;\n        /**\n         * Cell size estimator\n         *\n         * @param index Cell index\n         * @returns Cell height in pixels\n         */\n        this.estimateWidgetSize = (index) => {\n            const cell = this.cells[index];\n            if (!cell) {\n                // This should not happen, but if it does,\n                // do not throw if cell was deleted in the meantime\n                console.warn(`estimateWidgetSize requested for cell ${index} in notebook with only ${this.cells.length} cells`);\n                return 0;\n            }\n            const model = cell.model;\n            const height = this.cellsEstimatedHeight.get(model.id);\n            if (typeof height === 'number') {\n                return height;\n            }\n            const nLines = model.sharedModel.getSource().split('\\n').length;\n            let outputsLines = 0;\n            if (model instanceof CodeCellModel && !model.isDisposed) {\n                for (let outputIdx = 0; outputIdx < model.outputs.length; outputIdx++) {\n                    const output = model.outputs.get(outputIdx);\n                    const data = output.data['text/plain'];\n                    if (typeof data === 'string') {\n                        outputsLines += data.split('\\n').length;\n                    }\n                    else if (Array.isArray(data)) {\n                        outputsLines += data.join('').split('\\n').length;\n                    }\n                }\n            }\n            return (NotebookViewModel.DEFAULT_EDITOR_LINE_HEIGHT * (nLines + outputsLines) +\n                NotebookViewModel.DEFAULT_CELL_MARGIN);\n        };\n        /**\n         * Render the cell at index.\n         *\n         * @param index Cell index\n         * @returns Cell widget\n         */\n        this.widgetRenderer = (index) => {\n            return this.cells[index];\n        };\n        /**\n         * Threshold used to decide if the cell should be scrolled to in the `smart` mode.\n         * Defaults to scrolling when less than a full line of the cell is visible.\n         */\n        this.scrollDownThreshold = NotebookViewModel.DEFAULT_CELL_MARGIN / 2 +\n            NotebookViewModel.DEFAULT_EDITOR_LINE_HEIGHT;\n        /**\n         * Threshold used to decide if the cell should be scrolled to in the `smart` mode.\n         * Defaults to scrolling when the cell margin or more is invisible.\n         */\n        this.scrollUpThreshold = NotebookViewModel.DEFAULT_CELL_MARGIN / 2;\n        /**\n         * Mapping between the cell ids and the cell estimated heights\n         *\n         * This height is not refreshed with the changes to the document.\n         * It is only used to measure cells outside the viewport on CPU\n         * idle cycle to improve UX scrolling.\n         */\n        this.cellsEstimatedHeight = new Map();\n        this._emitEstimatedHeightChanged = new Debouncer(() => {\n            this._stateChanged.emit({\n                name: 'estimatedWidgetSize',\n                newValue: null,\n                oldValue: null\n            });\n        });\n        // Set default cell size\n        this._estimatedWidgetSize = NotebookViewModel.DEFAULT_CELL_SIZE;\n    }\n    /**\n     * Set an estimated height for a cell\n     *\n     * @param cellId Cell ID\n     * @param size Cell height\n     */\n    setEstimatedWidgetSize(cellId, size) {\n        if (size === null) {\n            if (this.cellsEstimatedHeight.has(cellId)) {\n                this.cellsEstimatedHeight.delete(cellId);\n            }\n        }\n        else {\n            this.cellsEstimatedHeight.set(cellId, size);\n            this._emitEstimatedHeightChanged.invoke().catch(error => {\n                console.error('Fail to trigger an update following a estimated height update.', error);\n            });\n        }\n    }\n}\n/**\n * Default cell height\n */\nNotebookViewModel.DEFAULT_CELL_SIZE = 39;\n/**\n * Default editor line height\n */\nNotebookViewModel.DEFAULT_EDITOR_LINE_HEIGHT = 17;\n/**\n * Default cell margin (top + bottom)\n */\nNotebookViewModel.DEFAULT_CELL_MARGIN = 22;\n/**\n * Windowed list layout for the notebook.\n */\nexport class NotebookWindowedLayout extends WindowedLayout {\n    constructor() {\n        super(...arguments);\n        this._header = null;\n        this._footer = null;\n        this._willBeRemoved = null;\n        this._topHiddenCodeCells = -1;\n    }\n    /**\n     * Notebook's header\n     */\n    get header() {\n        return this._header;\n    }\n    set header(header) {\n        var _a;\n        if (this._header && this._header.isAttached) {\n            Widget.detach(this._header);\n        }\n        this._header = header;\n        if (this._header && ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.isAttached)) {\n            Widget.attach(this._header, this.parent.node);\n        }\n    }\n    /**\n     * Notebook widget's footer\n     */\n    get footer() {\n        return this._footer;\n    }\n    set footer(footer) {\n        var _a;\n        if (this._footer && this._footer.isAttached) {\n            Widget.detach(this._footer);\n        }\n        this._footer = footer;\n        if (this._footer && ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.isAttached)) {\n            Widget.attach(this._footer, this.parent.outerNode);\n        }\n    }\n    /**\n     * Notebook's active cell\n     */\n    get activeCell() {\n        return this._activeCell;\n    }\n    set activeCell(widget) {\n        this._activeCell = widget;\n    }\n    /**\n     * Dispose the layout\n     * */\n    dispose() {\n        var _a, _b;\n        if (this.isDisposed) {\n            return;\n        }\n        (_a = this._header) === null || _a === void 0 ? void 0 : _a.dispose();\n        (_b = this._footer) === null || _b === void 0 ? void 0 : _b.dispose();\n        super.dispose();\n    }\n    /**\n     * * A message handler invoked on a `'child-removed'` message.\n     * *\n     * @param widget - The widget to remove from the layout.\n     *\n     * #### Notes\n     * A widget is automatically removed from the layout when its `parent`\n     * is set to `null`. This method should only be invoked directly when\n     * removing a widget from a layout which has yet to be installed on a\n     * parent widget.\n     *\n     * This method does *not* modify the widget's `parent`.\n     */\n    removeWidget(widget) {\n        const index = this.widgets.indexOf(widget);\n        // We need to deal with code cell widget not in viewport (aka not in this.widgets) but still\n        // partly attached\n        if (index >= 0) {\n            this.removeWidgetAt(index);\n        } // If the layout is parented, detach the widget from the DOM.\n        else if (widget === this._willBeRemoved && this.parent) {\n            this.detachWidget(index, widget);\n        }\n    }\n    /**\n     * Attach a widget to the parent's DOM node.\n     *\n     * @param index - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to attach to the parent.\n     *\n     * #### Notes\n     * This method is called automatically by the panel layout at the\n     * appropriate time. It should not be called directly by user code.\n     *\n     * The default implementation adds the widgets's node to the parent's\n     * node at the proper location, and sends the appropriate attach\n     * messages to the widget if the parent is attached to the DOM.\n     *\n     * Subclasses may reimplement this method to control how the widget's\n     * node is added to the parent's node.\n     */\n    attachWidget(index, widget) {\n        // Status may change in onBeforeAttach\n        const wasPlaceholder = widget.isPlaceholder();\n        // Initialized sub-widgets or attached them for CodeCell\n        // Because this reattaches all sub-widget to the DOM which leads\n        // to a loss of focus, we do not call it for soft-hidden cells.\n        const isSoftHidden = this._isSoftHidden(widget);\n        if (this.parent.isAttached && !isSoftHidden) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n        }\n        if (isSoftHidden) {\n            // Restore visibility for active, or previously active cell\n            this._toggleSoftVisibility(widget, true);\n        }\n        if (!wasPlaceholder &&\n            widget instanceof CodeCell &&\n            widget.node.parentElement) {\n            // We don't remove code cells to preserve outputs internal state\n            widget.node.style.display = '';\n            // Reset cache\n            this._topHiddenCodeCells = -1;\n            if (this.parent.isAttached && !widget.isAttached) {\n                widget.setFlag(Widget.Flag.IsAttached);\n            }\n        }\n        else if (!isSoftHidden) {\n            // Look up the next sibling reference node.\n            const siblingIndex = this._findNearestChildBinarySearch(this.parent.viewportNode.childElementCount - 1, 0, parseInt(widget.dataset.windowedListIndex, 10) + 1);\n            let ref = this.parent.viewportNode.children[siblingIndex];\n            // Insert the widget's node before the sibling.\n            this.parent.viewportNode.insertBefore(widget.node, ref);\n            // Send an `'after-attach'` message if the parent is attached.\n            // Event listeners will be added here\n            // Some widgets are updating/resetting when attached, so\n            // we should not recall this each time a cell move into the\n            // viewport.\n            if (this.parent.isAttached) {\n                MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n            }\n        }\n        widget.inViewport = true;\n    }\n    /**\n     * Detach a widget from the parent's DOM node.\n     *\n     * @param index - The previous index of the widget in the layout.\n     *\n     * @param widget - The widget to detach from the parent.\n     *\n     * #### Notes\n     * This method is called automatically by the panel layout at the\n     * appropriate time. It should not be called directly by user code.\n     *\n     * The default implementation removes the widget's node from the\n     * parent's node, and sends the appropriate detach messages to the\n     * widget if the parent is attached to the DOM.\n     *\n     * Subclasses may reimplement this method to control how the widget's\n     * node is removed from the parent's node.\n     */\n    detachWidget(index, widget) {\n        widget.inViewport = false;\n        // Note: `index` is relative to the displayed cells, not all cells,\n        // hence we compare with the widget itself.\n        if (widget === this.activeCell && widget !== this._willBeRemoved) {\n            // Do not change display of the active cell to allow user to continue providing input\n            // into the code mirror editor when out of view. We still hide the cell so to prevent\n            // minor visual glitches when scrolling.\n            this._toggleSoftVisibility(widget, false);\n            // Return before sending \"AfterDetach\" message to CodeCell\n            // to prevent removing contents of the active cell.\n            return;\n        }\n        // Do not apply `display: none` on cells which contain:\n        // - `<defs>` as multiple browsers (Chrome and Firefox)\n        //   are bugged and do not respect the spec here, see\n        //   https://github.com/jupyterlab/jupyterlab/issues/16952\n        //   https://issues.chromium.org/issues/40324398\n        //   https://bugzilla.mozilla.org/show_bug.cgi?id=376027\n        // - elements containing `.myst` class as jupyterlab-myst\n        //   re-renders cause height jitter and scrolling issues;\n        //   in future this could be addressed by the proposal\n        //   to allow renderers to specify hiding mode, see\n        //   https://github.com/jupyterlab/jupyterlab/issues/17331\n        const requiresSoftHiding = widget.node.querySelector('defs,.myst');\n        if (requiresSoftHiding) {\n            this._toggleSoftVisibility(widget, false);\n            return;\n        }\n        // TODO we could improve this further by discarding also the code cell without outputs\n        if (\n        // We detach the code cell currently dragged otherwise it won't be attached at the correct position\n        widget instanceof CodeCell &&\n            !widget.node.classList.contains(DROP_SOURCE_CLASS) &&\n            widget !== this._willBeRemoved) {\n            // We don't remove code cells to preserve outputs internal state\n            // Transform does not work because the widget height is kept (at least in FF)\n            widget.node.style.display = 'none';\n            // Reset cache\n            this._topHiddenCodeCells = -1;\n        }\n        else {\n            // Send a `'before-detach'` message if the parent is attached.\n            // This should not be called every time a cell leaves the viewport\n            // as it will remove listeners that won't be added back as afterAttach\n            // is shunted to avoid unwanted update/reset.\n            if (this.parent.isAttached) {\n                // Event listeners will be removed here\n                MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n            }\n            // Remove the widget's node from the parent.\n            this.parent.viewportNode.removeChild(widget.node);\n            // Ensure to clean up drop target class if the widget move out of the viewport\n            widget.node.classList.remove(DROP_TARGET_CLASS);\n        }\n        if (this.parent.isAttached) {\n            // Detach sub widget of CodeCell except the OutputAreaWrapper\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n        }\n    }\n    /**\n     * Move a widget in the parent's DOM node.\n     *\n     * @param fromIndex - The previous index of the widget in the layout.\n     *\n     * @param toIndex - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to move in the parent.\n     *\n     * #### Notes\n     * This method is called automatically by the panel layout at the\n     * appropriate time. It should not be called directly by user code.\n     *\n     * The default implementation moves the widget's node to the proper\n     * location in the parent's node and sends the appropriate attach and\n     * detach messages to the widget if the parent is attached to the DOM.\n     *\n     * Subclasses may reimplement this method to control how the widget's\n     * node is moved in the parent's node.\n     */\n    moveWidget(fromIndex, toIndex, widget) {\n        // Optimize move without de-/attaching as motion appends with parent attached\n        // Case fromIndex === toIndex, already checked in PanelLayout.insertWidget\n        if (this._topHiddenCodeCells < 0) {\n            this._topHiddenCodeCells = 0;\n            for (let idx = 0; idx < this.parent.viewportNode.children.length; idx++) {\n                const n = this.parent.viewportNode.children[idx];\n                if (n.style.display == 'none') {\n                    this._topHiddenCodeCells++;\n                }\n                else {\n                    break;\n                }\n            }\n        }\n        const ref = this.parent.viewportNode.children[toIndex + this._topHiddenCodeCells];\n        if (fromIndex < toIndex) {\n            ref.insertAdjacentElement('afterend', widget.node);\n        }\n        else {\n            ref.insertAdjacentElement('beforebegin', widget.node);\n        }\n    }\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        if (this._header && !this._header.isAttached) {\n            Widget.attach(this._header, this.parent.node, this.parent.node.firstElementChild);\n        }\n        if (this._footer && !this._footer.isAttached) {\n            Widget.attach(this._footer, this.parent.outerNode);\n        }\n    }\n    onBeforeDetach(msg) {\n        var _a, _b;\n        if ((_a = this._header) === null || _a === void 0 ? void 0 : _a.isAttached) {\n            Widget.detach(this._header);\n        }\n        if ((_b = this._footer) === null || _b === void 0 ? void 0 : _b.isAttached) {\n            Widget.detach(this._footer);\n        }\n        super.onBeforeDetach(msg);\n    }\n    /**\n     * A message handler invoked on a `'child-removed'` message.\n     *\n     * @param msg Message\n     */\n    onChildRemoved(msg) {\n        this._willBeRemoved = msg.child;\n        super.onChildRemoved(msg);\n        this._willBeRemoved = null;\n    }\n    /**\n     * Toggle \"soft\" visibility of the widget.\n     *\n     * #### Notes\n     * To ensure that user events reach the CodeMirror editor, this method\n     * does not toggle `display` nor `visibility` which have side effects,\n     * but instead hides it in the compositor and ensures that the bounding\n     * box is has an area equal to zero.\n     * To ensure we do not trigger style recalculation, we set the styles\n     * directly on the node instead of using a class.\n     */\n    _toggleSoftVisibility(widget, show) {\n        if (show) {\n            widget.node.style.opacity = '';\n            widget.node.style.height = '';\n            widget.node.style.padding = '';\n        }\n        else {\n            widget.node.style.opacity = '0';\n            // Both padding and height need to be set to zero\n            // to ensure bounding box collapses to invisible.\n            widget.node.style.height = '0';\n            widget.node.style.padding = '0';\n        }\n    }\n    _isSoftHidden(widget) {\n        return widget.node.style.opacity === '0';\n    }\n    _findNearestChildBinarySearch(high, low, index) {\n        while (low <= high) {\n            const middle = low + Math.floor((high - low) / 2);\n            const currentIndex = parseInt(this.parent.viewportNode.children[middle].dataset\n                .windowedListIndex, 10);\n            if (currentIndex === index) {\n                return middle;\n            }\n            else if (currentIndex < index) {\n                low = middle + 1;\n            }\n            else if (currentIndex > index) {\n                high = middle - 1;\n            }\n        }\n        if (low > 0) {\n            return low;\n        }\n        else {\n            return 0;\n        }\n    }\n}\n//# sourceMappingURL=windowing.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { Widget } from '@lumino/widgets';\nimport { NotebookActions } from './actions';\nconst NOTEBOOK_FOOTER_CLASS = 'jp-Notebook-footer';\n/**\n * A footer widget added after the last cell of the notebook.\n */\nexport class NotebookFooter extends Widget {\n    /**\n     * Construct a footer widget.\n     */\n    constructor(notebook) {\n        super({ node: document.createElement('button') });\n        this.notebook = notebook;\n        const trans = notebook.translator.load('jupyterlab');\n        this.addClass(NOTEBOOK_FOOTER_CLASS);\n        this.node.setAttribute('tabindex', '-1');\n        this.node.innerText = trans.__('Click to add a cell.');\n    }\n    /**\n     * Handle incoming events.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'click':\n                this.onClick();\n                break;\n            case 'keydown':\n                if (event.key === 'ArrowUp') {\n                    this.onArrowUp();\n                    break;\n                }\n        }\n    }\n    /**\n     * On single click (mouse event), insert a cell below (at the end of the notebook as default behavior).\n     */\n    onClick() {\n        if (this.notebook.widgets.length > 0) {\n            this.notebook.activeCellIndex = this.notebook.widgets.length - 1;\n        }\n        NotebookActions.insertBelow(this.notebook);\n        // Focus on the created cell.\n        void NotebookActions.focusActiveCell(this.notebook);\n    }\n    /**\n     * On arrow up key pressed (keydown keyboard event).\n     * @deprecated To be removed in v5, this is a no-op\n     */\n    onArrowUp() {\n        // The specific behavior has been removed in https://github.com/jupyterlab/jupyterlab/pull/14796\n    }\n    /*\n     * Handle `after-detach` messages for the widget.\n     */\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        this.node.addEventListener('click', this);\n        this.node.addEventListener('keydown', this);\n    }\n    /**\n     * Handle `before-detach` messages for the widget.\n     */\n    onBeforeDetach(msg) {\n        this.node.removeEventListener('click', this);\n        this.node.removeEventListener('keydown', this);\n        super.onBeforeDetach(msg);\n    }\n}\n//# sourceMappingURL=notebookfooter.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { DOMUtils } from '@jupyterlab/apputils';\nimport { Cell, CodeCell, MarkdownCell, RawCell } from '@jupyterlab/cells';\nimport { IEditorMimeTypeService } from '@jupyterlab/codeeditor';\nimport { TableOfContentsUtils } from '@jupyterlab/toc';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { WindowedList } from '@jupyterlab/ui-components';\nimport { ArrayExt, findIndex } from '@lumino/algorithm';\nimport { MimeData } from '@lumino/coreutils';\nimport { ElementExt } from '@lumino/domutils';\nimport { Drag } from '@lumino/dragdrop';\nimport { AttachedProperty } from '@lumino/properties';\nimport { Signal } from '@lumino/signaling';\nimport { h, VirtualDOM } from '@lumino/virtualdom';\nimport { PanelLayout, Widget } from '@lumino/widgets';\nimport { NotebookActions } from './actions';\nimport { DROP_SOURCE_CLASS, DROP_TARGET_CLASS } from './constants';\nimport { NotebookViewModel, NotebookWindowedLayout } from './windowing';\nimport { NotebookFooter } from './notebookfooter';\n/**\n * The data attribute added to a widget that has an active kernel.\n */\nconst KERNEL_USER = 'jpKernelUser';\n/**\n * The data attribute added to a widget that can run code.\n */\nconst CODE_RUNNER = 'jpCodeRunner';\n/**\n * The data attribute added to a widget that can undo.\n */\nconst UNDOER = 'jpUndoer';\n/**\n * The class name added to notebook widgets.\n */\nconst NB_CLASS = 'jp-Notebook';\n/**\n * The class name added to notebook widget cells.\n */\nconst NB_CELL_CLASS = 'jp-Notebook-cell';\n/**\n * The class name added to a notebook in edit mode.\n */\nconst EDIT_CLASS = 'jp-mod-editMode';\n/**\n * The class name added to a notebook in command mode.\n */\nconst COMMAND_CLASS = 'jp-mod-commandMode';\n/**\n * The class name added to the active cell.\n */\nconst ACTIVE_CLASS = 'jp-mod-active';\n/**\n * The class name added to selected cells.\n */\nconst SELECTED_CLASS = 'jp-mod-selected';\n/**\n * The class name added to the cell when dirty.\n */\nconst DIRTY_CLASS = 'jp-mod-dirty';\n/**\n * The class name added to an active cell when there are other selected cells.\n */\nconst OTHER_SELECTED_CLASS = 'jp-mod-multiSelected';\n/**\n * The class name added to unconfined images.\n */\nconst UNCONFINED_CLASS = 'jp-mod-unconfined';\n/**\n * The class name added to the notebook when an element within it is focused\n * and takes keyboard input, such as focused <input> or <div contenteditable>.\n *\n * This class is also effective when the focused element is in shadow DOM.\n */\nconst READ_WRITE_CLASS = 'jp-mod-readWrite';\n/**\n * The class name added to drag images.\n */\nconst DRAG_IMAGE_CLASS = 'jp-dragImage';\n/**\n * The class name added to singular drag images\n */\nconst SINGLE_DRAG_IMAGE_CLASS = 'jp-dragImage-singlePrompt';\n/**\n * The class name added to the drag image cell content.\n */\nconst CELL_DRAG_CONTENT_CLASS = 'jp-dragImage-content';\n/**\n * The class name added to the drag image cell content.\n */\nconst CELL_DRAG_PROMPT_CLASS = 'jp-dragImage-prompt';\n/**\n * The class name added to the drag image cell content.\n */\nconst CELL_DRAG_MULTIPLE_BACK = 'jp-dragImage-multipleBack';\n/**\n * The mimetype used for Jupyter cell data.\n */\nconst JUPYTER_CELL_MIME = 'application/vnd.jupyter.cells';\n/**\n * The threshold in pixels to start a drag event.\n */\nconst DRAG_THRESHOLD = 5;\n/**\n * Maximal remaining time for idle callback\n *\n * Ref: https://developer.mozilla.org/en-US/docs/Web/API/Background_Tasks_API#getting_the_most_out_of_idle_callbacks\n */\nconst MAXIMUM_TIME_REMAINING = 50;\n/**\n * The class attached to the heading collapser button\n */\nconst HEADING_COLLAPSER_CLASS = 'jp-collapseHeadingButton';\n/**\n * The class that controls the visibility of \"heading collapser\" and \"show hidden cells\" buttons.\n */\nconst HEADING_COLLAPSER_VISBILITY_CONTROL_CLASS = 'jp-mod-showHiddenCellsButton';\nconst SIDE_BY_SIDE_CLASS = 'jp-mod-sideBySide';\nif (window.requestIdleCallback === undefined) {\n    // On Safari, requestIdleCallback is not available, so we use replacement functions for `idleCallbacks`\n    // See: https://developer.mozilla.org/en-US/docs/Web/API/Background_Tasks_API#falling_back_to_settimeout\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    window.requestIdleCallback = function (handler) {\n        let startTime = Date.now();\n        return setTimeout(function () {\n            handler({\n                didTimeout: false,\n                timeRemaining: function () {\n                    return Math.max(0, 50.0 - (Date.now() - startTime));\n                }\n            });\n        }, 1);\n    };\n    window.cancelIdleCallback = function (id) {\n        clearTimeout(id);\n    };\n}\n/**\n * A widget which renders static non-interactive notebooks.\n *\n * #### Notes\n * The widget model must be set separately and can be changed\n * at any time.  Consumers of the widget must account for a\n * `null` model, and may want to listen to the `modelChanged`\n * signal.\n */\nexport class StaticNotebook extends WindowedList {\n    /**\n     * Construct a notebook widget.\n     */\n    constructor(options) {\n        var _a, _b, _c, _d, _e, _f;\n        const cells = new Array();\n        const windowingActive = ((_b = (_a = options.notebookConfig) === null || _a === void 0 ? void 0 : _a.windowingMode) !== null && _b !== void 0 ? _b : StaticNotebook.defaultNotebookConfig.windowingMode) === 'full';\n        super({\n            model: new NotebookViewModel(cells, {\n                overscanCount: (_d = (_c = options.notebookConfig) === null || _c === void 0 ? void 0 : _c.overscanCount) !== null && _d !== void 0 ? _d : StaticNotebook.defaultNotebookConfig.overscanCount,\n                windowingActive\n            }),\n            layout: new NotebookWindowedLayout(),\n            renderer: (_e = options.renderer) !== null && _e !== void 0 ? _e : WindowedList.defaultRenderer,\n            scrollbar: false\n        });\n        this._cellCollapsed = new Signal(this);\n        this._cellInViewportChanged = new Signal(this);\n        this._renderingLayoutChanged = new Signal(this);\n        this.addClass(NB_CLASS);\n        this.cellsArray = cells;\n        this._idleCallBack = null;\n        this._editorConfig = StaticNotebook.defaultEditorConfig;\n        this._notebookConfig = StaticNotebook.defaultNotebookConfig;\n        this._mimetype = IEditorMimeTypeService.defaultMimeType;\n        this._notebookModel = null;\n        this._modelChanged = new Signal(this);\n        this._modelContentChanged = new Signal(this);\n        this.node.dataset[KERNEL_USER] = 'true';\n        this.node.dataset[UNDOER] = 'true';\n        this.node.dataset[CODE_RUNNER] = 'true';\n        this.rendermime = options.rendermime;\n        this.translator = options.translator || nullTranslator;\n        this.contentFactory = options.contentFactory;\n        this.editorConfig =\n            options.editorConfig || StaticNotebook.defaultEditorConfig;\n        this.notebookConfig =\n            options.notebookConfig || StaticNotebook.defaultNotebookConfig;\n        this._updateNotebookConfig();\n        this._mimetypeService = options.mimeTypeService;\n        this.renderingLayout = (_f = options.notebookConfig) === null || _f === void 0 ? void 0 : _f.renderingLayout;\n        this.kernelHistory = options.kernelHistory;\n    }\n    get cellCollapsed() {\n        return this._cellCollapsed;\n    }\n    get cellInViewportChanged() {\n        return this._cellInViewportChanged;\n    }\n    /**\n     * A signal emitted when the model of the notebook changes.\n     */\n    get modelChanged() {\n        return this._modelChanged;\n    }\n    /**\n     * A signal emitted when the model content changes.\n     *\n     * #### Notes\n     * This is a convenience signal that follows the current model.\n     */\n    get modelContentChanged() {\n        return this._modelContentChanged;\n    }\n    /**\n     * A signal emitted when the rendering layout of the notebook changes.\n     */\n    get renderingLayoutChanged() {\n        return this._renderingLayoutChanged;\n    }\n    /**\n     * The model for the widget.\n     */\n    get model() {\n        return this._notebookModel;\n    }\n    set model(newValue) {\n        var _a;\n        newValue = newValue || null;\n        if (this._notebookModel === newValue) {\n            return;\n        }\n        const oldValue = this._notebookModel;\n        this._notebookModel = newValue;\n        // Trigger private, protected, and public changes.\n        this._onModelChanged(oldValue, newValue);\n        this.onModelChanged(oldValue, newValue);\n        this._modelChanged.emit(void 0);\n        // Trigger state change\n        this.viewModel.itemsList = (_a = newValue === null || newValue === void 0 ? void 0 : newValue.cells) !== null && _a !== void 0 ? _a : null;\n    }\n    /**\n     * Get the mimetype for code cells.\n     */\n    get codeMimetype() {\n        return this._mimetype;\n    }\n    /**\n     * A read-only sequence of the widgets in the notebook.\n     */\n    get widgets() {\n        return this.cellsArray;\n    }\n    /**\n     * A configuration object for cell editor settings.\n     */\n    get editorConfig() {\n        return this._editorConfig;\n    }\n    set editorConfig(value) {\n        this._editorConfig = value;\n        this._updateEditorConfig();\n    }\n    /**\n     * A configuration object for notebook settings.\n     */\n    get notebookConfig() {\n        return this._notebookConfig;\n    }\n    set notebookConfig(value) {\n        this._notebookConfig = value;\n        this._updateNotebookConfig();\n    }\n    get renderingLayout() {\n        return this._renderingLayout;\n    }\n    set renderingLayout(value) {\n        var _a;\n        this._renderingLayout = value;\n        if (this._renderingLayout === 'side-by-side') {\n            this.node.classList.add(SIDE_BY_SIDE_CLASS);\n        }\n        else {\n            this.node.classList.remove(SIDE_BY_SIDE_CLASS);\n        }\n        this._renderingLayoutChanged.emit((_a = this._renderingLayout) !== null && _a !== void 0 ? _a : 'default');\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        var _a;\n        // Do nothing if already disposed.\n        if (this.isDisposed) {\n            return;\n        }\n        this._notebookModel = null;\n        (_a = this.layout.header) === null || _a === void 0 ? void 0 : _a.dispose();\n        super.dispose();\n    }\n    /**\n     * Move cells preserving widget view state.\n     *\n     * #### Notes\n     * This is required because at the model level a move is a deletion\n     * followed by an insertion. Hence the view state is not preserved.\n     *\n     * @param from The index of the cell to move\n     * @param to The new index of the cell\n     * @param n Number of cells to move\n     */\n    moveCell(from, to, n = 1) {\n        if (!this.model) {\n            return;\n        }\n        const boundedTo = Math.min(this.model.cells.length - 1, Math.max(0, to));\n        if (boundedTo === from) {\n            return;\n        }\n        const viewModel = new Array(n);\n        let dirtyState = new Array(n);\n        for (let i = 0; i < n; i++) {\n            viewModel[i] = {};\n            const oldCell = this.widgets[from + i];\n            if (oldCell.model.type === 'markdown') {\n                for (const k of ['rendered', 'headingCollapsed']) {\n                    // @ts-expect-error Cell has no index signature\n                    viewModel[i][k] = oldCell[k];\n                }\n            }\n            else if (oldCell.model.type === 'code') {\n                const oldCodeCell = oldCell.model;\n                dirtyState[i] = oldCodeCell.isDirty;\n            }\n        }\n        this.model.sharedModel.moveCells(from, boundedTo, n);\n        for (let i = 0; i < n; i++) {\n            const newCell = this.widgets[to + i];\n            const view = viewModel[i];\n            for (const state in view) {\n                // @ts-expect-error Cell has no index signature\n                newCell[state] = view[state];\n            }\n            if (from > to) {\n                if (this.widgets[to + i].model.type === 'code') {\n                    this.widgets[to + i].model.isDirty = dirtyState[i];\n                }\n            }\n            else {\n                if (this.widgets[to + i - n + 1].model.type === 'code') {\n                    this.widgets[to + i - n + 1].model.isDirty =\n                        dirtyState[i];\n                }\n            }\n        }\n    }\n    /**\n     * Force rendering the cell outputs of a given cell if it is still a placeholder.\n     *\n     * #### Notes\n     * The goal of this method is to allow search on cell outputs (that is based\n     * on DOM tree introspection).\n     *\n     * @param index The cell index\n     */\n    renderCellOutputs(index) {\n        const cell = this.viewModel.widgetRenderer(index);\n        if (cell instanceof CodeCell && cell.isPlaceholder()) {\n            cell.dataset.windowedListIndex = `${index}`;\n            this.layout.insertWidget(index, cell);\n            if (this.notebookConfig.windowingMode === 'full') {\n                // We need to delay slightly the removal to let codemirror properly initialize\n                requestAnimationFrame(() => {\n                    this.layout.removeWidget(cell);\n                });\n            }\n        }\n    }\n    /**\n     * Adds a message to the notebook as a header.\n     */\n    addHeader() {\n        const trans = this.translator.load('jupyterlab');\n        const info = new Widget();\n        info.node.textContent = trans.__('The notebook is empty. Click the + button on the toolbar to add a new cell.');\n        this.layout.header = info;\n    }\n    /**\n     * Removes the header.\n     */\n    removeHeader() {\n        var _a;\n        (_a = this.layout.header) === null || _a === void 0 ? void 0 : _a.dispose();\n        this.layout.header = null;\n    }\n    /**\n     * Handle a new model.\n     *\n     * #### Notes\n     * This method is called after the model change has been handled\n     * internally and before the `modelChanged` signal is emitted.\n     * The default implementation is a no-op.\n     */\n    onModelChanged(oldValue, newValue) {\n        // No-op.\n    }\n    /**\n     * Handle changes to the notebook model content.\n     *\n     * #### Notes\n     * The default implementation emits the `modelContentChanged` signal.\n     */\n    onModelContentChanged(model, args) {\n        this._modelContentChanged.emit(void 0);\n    }\n    /**\n     * Handle changes to the notebook model metadata.\n     *\n     * #### Notes\n     * The default implementation updates the mimetypes of the code cells\n     * when the `language_info` metadata changes.\n     */\n    onMetadataChanged(sender, args) {\n        switch (args.key) {\n            case 'language_info':\n                this._updateMimetype();\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Handle a cell being inserted.\n     *\n     * The default implementation is a no-op\n     */\n    onCellInserted(index, cell) {\n        // This is a no-op.\n    }\n    /**\n     * Handle a cell being removed.\n     *\n     * The default implementation is a no-op\n     */\n    onCellRemoved(index, cell) {\n        // This is a no-op.\n    }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onUpdateRequest(msg) {\n        if (this.notebookConfig.windowingMode === 'defer') {\n            void this._runOnIdleTime();\n        }\n        else {\n            super.onUpdateRequest(msg);\n        }\n    }\n    /**\n     * Handle a new model on the widget.\n     */\n    _onModelChanged(oldValue, newValue) {\n        var _a;\n        if (oldValue) {\n            oldValue.contentChanged.disconnect(this.onModelContentChanged, this);\n            oldValue.metadataChanged.disconnect(this.onMetadataChanged, this);\n            oldValue.cells.changed.disconnect(this._onCellsChanged, this);\n            while (this.cellsArray.length) {\n                this._removeCell(0);\n            }\n        }\n        if (!newValue) {\n            this._mimetype = IEditorMimeTypeService.defaultMimeType;\n            return;\n        }\n        this._updateMimetype();\n        const cells = newValue.cells;\n        const collab = (_a = newValue.collaborative) !== null && _a !== void 0 ? _a : false;\n        if (!collab && !cells.length) {\n            newValue.sharedModel.insertCell(0, {\n                cell_type: this.notebookConfig.defaultCell,\n                metadata: this.notebookConfig.defaultCell === 'code'\n                    ? {\n                        // This is an empty cell created in empty notebook, thus is trusted\n                        trusted: true\n                    }\n                    : {}\n            });\n        }\n        let index = -1;\n        for (const cell of cells) {\n            this._insertCell(++index, cell);\n        }\n        newValue.cells.changed.connect(this._onCellsChanged, this);\n        newValue.metadataChanged.connect(this.onMetadataChanged, this);\n        newValue.contentChanged.connect(this.onModelContentChanged, this);\n    }\n    /**\n     * Handle a change cells event.\n     */\n    _onCellsChanged(sender, args) {\n        this.removeHeader();\n        switch (args.type) {\n            case 'add': {\n                let index = 0;\n                index = args.newIndex;\n                for (const value of args.newValues) {\n                    this._insertCell(index++, value);\n                }\n                this._updateDataWindowedListIndex(args.newIndex, this.model.cells.length, args.newValues.length);\n                break;\n            }\n            case 'remove':\n                for (let length = args.oldValues.length; length > 0; length--) {\n                    this._removeCell(args.oldIndex);\n                }\n                this._updateDataWindowedListIndex(args.oldIndex, this.model.cells.length + args.oldValues.length, -1 * args.oldValues.length);\n                // Add default cell if there are no cells remaining.\n                if (!sender.length) {\n                    const model = this.model;\n                    // Add the cell in a new context to avoid triggering another\n                    // cell changed event during the handling of this signal.\n                    requestAnimationFrame(() => {\n                        if (model && !model.isDisposed && !model.sharedModel.cells.length) {\n                            model.sharedModel.insertCell(0, {\n                                cell_type: this.notebookConfig.defaultCell,\n                                metadata: this.notebookConfig.defaultCell === 'code'\n                                    ? {\n                                        // This is an empty cell created in empty notebook, thus is trusted\n                                        trusted: true\n                                    }\n                                    : {}\n                            });\n                        }\n                    });\n                }\n                break;\n            default:\n                return;\n        }\n        if (!this.model.sharedModel.cells.length) {\n            this.addHeader();\n        }\n        this.update();\n    }\n    /**\n     * Create a cell widget and insert into the notebook.\n     */\n    _insertCell(index, cell) {\n        let widget;\n        switch (cell.type) {\n            case 'code':\n                widget = this._createCodeCell(cell);\n                widget.model.mimeType = this._mimetype;\n                break;\n            case 'markdown':\n                widget = this._createMarkdownCell(cell);\n                if (cell.sharedModel.getSource() === '') {\n                    widget.rendered = false;\n                }\n                break;\n            default:\n                widget = this._createRawCell(cell);\n        }\n        widget.inViewportChanged.connect(this._onCellInViewportChanged, this);\n        widget.addClass(NB_CELL_CLASS);\n        ArrayExt.insert(this.cellsArray, index, widget);\n        this.onCellInserted(index, widget);\n        this._scheduleCellRenderOnIdle();\n    }\n    /**\n     * Create a code cell widget from a code cell model.\n     */\n    _createCodeCell(model) {\n        const rendermime = this.rendermime;\n        const contentFactory = this.contentFactory;\n        const editorConfig = this.editorConfig.code;\n        const options = {\n            contentFactory,\n            editorConfig,\n            inputHistoryScope: this.notebookConfig.inputHistoryScope,\n            showInputPlaceholder: this.notebookConfig.showInputPlaceholder,\n            maxNumberOutputs: this.notebookConfig.maxNumberOutputs,\n            model,\n            placeholder: this._notebookConfig.windowingMode !== 'none',\n            rendermime,\n            translator: this.translator\n        };\n        const cell = this.contentFactory.createCodeCell(options);\n        cell.syncCollapse = true;\n        cell.syncEditable = true;\n        cell.syncScrolled = true;\n        cell.outputArea.inputRequested.connect((_, stdin) => {\n            this._onInputRequested(cell).catch(reason => {\n                console.error('Failed to scroll to cell requesting input.', reason);\n            });\n            stdin.disposed.connect(() => {\n                // The input field is removed from the DOM after the user presses Enter.\n                // This causes focus to be lost if we don't explicitly re-focus\n                // somewhere else.\n                cell.node.focus();\n            });\n        });\n        return cell;\n    }\n    /**\n     * Create a markdown cell widget from a markdown cell model.\n     */\n    _createMarkdownCell(model) {\n        const rendermime = this.rendermime;\n        const contentFactory = this.contentFactory;\n        const editorConfig = this.editorConfig.markdown;\n        const options = {\n            contentFactory,\n            editorConfig,\n            model,\n            placeholder: this._notebookConfig.windowingMode !== 'none',\n            rendermime,\n            showEditorForReadOnlyMarkdown: this._notebookConfig.showEditorForReadOnlyMarkdown\n        };\n        const cell = this.contentFactory.createMarkdownCell(options);\n        cell.syncCollapse = true;\n        cell.syncEditable = true;\n        // Connect collapsed signal for each markdown cell widget\n        cell.headingCollapsedChanged.connect(this._onCellCollapsed, this);\n        return cell;\n    }\n    /**\n     * Create a raw cell widget from a raw cell model.\n     */\n    _createRawCell(model) {\n        const contentFactory = this.contentFactory;\n        const editorConfig = this.editorConfig.raw;\n        const options = {\n            editorConfig,\n            model,\n            contentFactory,\n            placeholder: this._notebookConfig.windowingMode !== 'none'\n        };\n        const cell = this.contentFactory.createRawCell(options);\n        cell.syncCollapse = true;\n        cell.syncEditable = true;\n        return cell;\n    }\n    /**\n     * Remove a cell widget.\n     */\n    _removeCell(index) {\n        const widget = this.cellsArray[index];\n        widget.parent = null;\n        ArrayExt.removeAt(this.cellsArray, index);\n        this.onCellRemoved(index, widget);\n        widget.dispose();\n    }\n    /**\n     * Update the mimetype of the notebook.\n     */\n    _updateMimetype() {\n        var _a;\n        const info = (_a = this._notebookModel) === null || _a === void 0 ? void 0 : _a.getMetadata('language_info');\n        if (!info) {\n            return;\n        }\n        this._mimetype = this._mimetypeService.getMimeTypeByLanguage(info);\n        for (const widget of this.widgets) {\n            if (widget.model.type === 'code') {\n                widget.model.mimeType = this._mimetype;\n            }\n        }\n    }\n    /**\n     * Callback when a cell collapsed status changes.\n     *\n     * @param cell Cell changed\n     * @param collapsed New collapsed status\n     */\n    _onCellCollapsed(cell, collapsed) {\n        NotebookActions.setHeadingCollapse(cell, collapsed, this);\n        this._cellCollapsed.emit(cell);\n    }\n    /**\n     * Callback when a cell viewport status changes.\n     *\n     * @param cell Cell changed\n     */\n    _onCellInViewportChanged(cell) {\n        this._cellInViewportChanged.emit(cell);\n    }\n    /**\n     * Ensure to load in the DOM a cell requesting an user input\n     *\n     * @param cell Cell requesting an input\n     */\n    async _onInputRequested(cell) {\n        if (!cell.inViewport) {\n            const cellIndex = this.widgets.findIndex(c => c === cell);\n            if (cellIndex >= 0) {\n                await this.scrollToItem(cellIndex);\n                const inputEl = cell.node.querySelector('.jp-Stdin');\n                if (inputEl) {\n                    ElementExt.scrollIntoViewIfNeeded(this.node, inputEl);\n                    inputEl.focus();\n                }\n            }\n        }\n    }\n    _scheduleCellRenderOnIdle() {\n        if (this.notebookConfig.windowingMode !== 'none' && !this.isDisposed) {\n            if (!this._idleCallBack) {\n                this._idleCallBack = requestIdleCallback((deadline) => {\n                    this._idleCallBack = null;\n                    // In case of timeout, render for some time even if it means freezing the UI\n                    // This avoids the cells to never be loaded.\n                    void this._runOnIdleTime(deadline.didTimeout\n                        ? MAXIMUM_TIME_REMAINING\n                        : deadline.timeRemaining());\n                }, {\n                    timeout: 3000\n                });\n            }\n        }\n    }\n    _updateDataWindowedListIndex(start, end, delta) {\n        for (let cellIdx = 0; cellIdx < this.viewportNode.childElementCount; cellIdx++) {\n            const cell = this.viewportNode.children[cellIdx];\n            const globalIndex = parseInt(cell.dataset.windowedListIndex, 10);\n            if (globalIndex >= start && globalIndex < end) {\n                cell.dataset.windowedListIndex = `${globalIndex + delta}`;\n            }\n        }\n    }\n    /**\n     * Update editor settings for notebook cells.\n     */\n    _updateEditorConfig() {\n        for (let i = 0; i < this.widgets.length; i++) {\n            const cell = this.widgets[i];\n            let config = {};\n            switch (cell.model.type) {\n                case 'code':\n                    config = this._editorConfig.code;\n                    break;\n                case 'markdown':\n                    config = this._editorConfig.markdown;\n                    break;\n                default:\n                    config = this._editorConfig.raw;\n                    break;\n            }\n            cell.updateEditorConfig({ ...config });\n        }\n    }\n    async _runOnIdleTime(remainingTime = MAXIMUM_TIME_REMAINING) {\n        const startTime = Date.now();\n        let cellIdx = 0;\n        while (Date.now() - startTime < remainingTime &&\n            cellIdx < this.cellsArray.length) {\n            const cell = this.cellsArray[cellIdx];\n            if (cell.isPlaceholder()) {\n                if (['defer', 'full'].includes(this.notebookConfig.windowingMode)) {\n                    await this._updateForDeferMode(cell, cellIdx);\n                    if (this.notebookConfig.windowingMode === 'full') {\n                        // We need to delay slightly the removal to let codemirror properly initialize\n                        requestAnimationFrame(() => {\n                            this.viewModel.setEstimatedWidgetSize(cell.model.id, cell.node.getBoundingClientRect().height);\n                            this.layout.removeWidget(cell);\n                        });\n                    }\n                }\n            }\n            cellIdx++;\n        }\n        // If the notebook is not fully rendered\n        if (cellIdx < this.cellsArray.length) {\n            // If we are deferring the cell rendering and the rendered cells do\n            // not fill the viewport yet\n            if (this.notebookConfig.windowingMode === 'defer' &&\n                this.viewportNode.clientHeight < this.node.clientHeight) {\n                // Spend more time rendering cells to fill the viewport\n                await this._runOnIdleTime();\n            }\n            else {\n                this._scheduleCellRenderOnIdle();\n            }\n        }\n        else {\n            if (this._idleCallBack) {\n                window.cancelIdleCallback(this._idleCallBack);\n                this._idleCallBack = null;\n            }\n        }\n    }\n    async _updateForDeferMode(cell, cellIdx) {\n        cell.dataset.windowedListIndex = `${cellIdx}`;\n        this.layout.insertWidget(cellIdx, cell);\n        await cell.ready;\n    }\n    /**\n     * Apply updated notebook settings.\n     */\n    _updateNotebookConfig() {\n        // Apply scrollPastEnd setting.\n        this.toggleClass('jp-mod-scrollPastEnd', this._notebookConfig.scrollPastEnd);\n        // Control visibility of heading collapser UI\n        this.toggleClass(HEADING_COLLAPSER_VISBILITY_CONTROL_CLASS, this._notebookConfig.showHiddenCellsButton);\n        // Control editor visibility for read-only Markdown cells\n        const showEditorForReadOnlyMarkdown = this._notebookConfig.showEditorForReadOnlyMarkdown;\n        if (showEditorForReadOnlyMarkdown !== undefined) {\n            for (const cell of this.cellsArray) {\n                if (cell.model.type === 'markdown') {\n                    cell.showEditorForReadOnly =\n                        showEditorForReadOnlyMarkdown;\n                }\n            }\n        }\n        this.viewModel.windowingActive =\n            this._notebookConfig.windowingMode === 'full';\n    }\n}\n/**\n * The namespace for the `StaticNotebook` class statics.\n */\n(function (StaticNotebook) {\n    /**\n     * Default configuration options for cell editors.\n     */\n    StaticNotebook.defaultEditorConfig = {\n        code: {\n            lineNumbers: false,\n            lineWrap: false,\n            matchBrackets: true,\n            tabFocusable: false\n        },\n        markdown: {\n            lineNumbers: false,\n            lineWrap: true,\n            matchBrackets: false,\n            tabFocusable: false\n        },\n        raw: {\n            lineNumbers: false,\n            lineWrap: true,\n            matchBrackets: false,\n            tabFocusable: false\n        }\n    };\n    /**\n     * Default configuration options for notebooks.\n     */\n    StaticNotebook.defaultNotebookConfig = {\n        enableKernelInitNotification: false,\n        showHiddenCellsButton: true,\n        scrollPastEnd: true,\n        defaultCell: 'code',\n        recordTiming: false,\n        inputHistoryScope: 'global',\n        maxNumberOutputs: 50,\n        showEditorForReadOnlyMarkdown: true,\n        disableDocumentWideUndoRedo: true,\n        autoRenderMarkdownCells: false,\n        renderingLayout: 'default',\n        sideBySideLeftMarginOverride: '10px',\n        sideBySideRightMarginOverride: '10px',\n        sideBySideOutputRatio: 1,\n        overscanCount: 1,\n        windowingMode: 'full',\n        accessKernelHistory: false,\n        showInputPlaceholder: true\n    };\n    /**\n     * The default implementation of an `IContentFactory`.\n     */\n    class ContentFactory extends Cell.ContentFactory {\n        /**\n         * Create a new code cell widget.\n         *\n         * #### Notes\n         * If no cell content factory is passed in with the options, the one on the\n         * notebook content factory is used.\n         */\n        createCodeCell(options) {\n            return new CodeCell(options).initializeState();\n        }\n        /**\n         * Create a new markdown cell widget.\n         *\n         * #### Notes\n         * If no cell content factory is passed in with the options, the one on the\n         * notebook content factory is used.\n         */\n        createMarkdownCell(options) {\n            return new MarkdownCell(options).initializeState();\n        }\n        /**\n         * Create a new raw cell widget.\n         *\n         * #### Notes\n         * If no cell content factory is passed in with the options, the one on the\n         * notebook content factory is used.\n         */\n        createRawCell(options) {\n            return new RawCell(options).initializeState();\n        }\n    }\n    StaticNotebook.ContentFactory = ContentFactory;\n})(StaticNotebook || (StaticNotebook = {}));\n/**\n * A virtual scrollbar item representing a notebook cell.\n */\nclass ScrollbarItem {\n    /**\n     * Construct a scrollbar item.\n     */\n    constructor(options) {\n        /**\n         * Render the scrollbar item as an HTML element.\n         */\n        this.render = (props) => {\n            if (!this._element) {\n                this._element = this._createElement();\n                this._notebook.activeCellChanged.connect(this._updateActive);\n                this._notebook.selectionChanged.connect(this._updateSelection);\n                if (this._model.type === 'code') {\n                    const model = this._model;\n                    model.outputs.changed.connect(this._updatePrompt);\n                    model.stateChanged.connect(this._updateState);\n                }\n            }\n            // Add cell type (code/markdown/raw)\n            if (this._model.type != this._element.dataset.type) {\n                this._element.dataset.type = this._model.type;\n            }\n            const source = this._model.sharedModel.source;\n            const trimmedSource = source.length > 10000 ? source.substring(0, 10000) : source;\n            if (trimmedSource !== this._source.textContent) {\n                this._source.textContent = trimmedSource;\n            }\n            this._updateActive();\n            this._updateSelection();\n            this._updatePrompt();\n            this._updateDirty();\n            return this._element;\n        };\n        /**\n         * Dispose of the resources held by the item.\n         */\n        this.dispose = () => {\n            this._isDisposed = true;\n            this._notebook.activeCellChanged.disconnect(this._updateActive);\n            this._notebook.selectionChanged.disconnect(this._updateSelection);\n            if (this._model.type === 'code') {\n                const model = this._model;\n                if (model.outputs) {\n                    model.outputs.changed.disconnect(this._updatePrompt);\n                    model.stateChanged.disconnect(this._updateState);\n                }\n            }\n        };\n        this._updateState = (_, change) => {\n            switch (change.name) {\n                case 'executionCount':\n                case 'executionState':\n                    this._updatePrompt();\n                    break;\n                case 'isDirty': {\n                    this._updateDirty();\n                    break;\n                }\n            }\n        };\n        this._updatePrompt = () => {\n            if (this._model.type !== 'code') {\n                return;\n            }\n            const model = this._model;\n            let hasError = false;\n            for (let i = 0; i < model.outputs.length; i++) {\n                const output = model.outputs.get(i);\n                if (output.type === 'error') {\n                    hasError = true;\n                    break;\n                }\n            }\n            let content;\n            let state = '';\n            if (hasError) {\n                content = '[!]';\n                state = 'error';\n            }\n            else if (model.executionState == 'running') {\n                content = '[*]';\n            }\n            else if (model.executionCount) {\n                content = `[${model.executionCount}]`;\n            }\n            else {\n                content = '[ ]';\n            }\n            if (this._executionIndicator.textContent !== content) {\n                this._executionIndicator.textContent = content;\n            }\n            if (this._element.dataset.output !== state) {\n                this._element.dataset.output = state;\n            }\n        };\n        this._updateActive = () => {\n            var _a;\n            if (!this._element) {\n                this._element = this._createElement();\n            }\n            const li = this._element;\n            const wasActive = li.classList.contains(ACTIVE_CLASS);\n            if (((_a = this._notebook.activeCell) === null || _a === void 0 ? void 0 : _a.model) === this._model) {\n                if (!wasActive) {\n                    li.classList.add(ACTIVE_CLASS);\n                }\n            }\n            else if (wasActive) {\n                li.classList.remove(ACTIVE_CLASS);\n                // Needed due to order in which selection and active changed signals fire\n                li.classList.remove(SELECTED_CLASS);\n            }\n        };\n        this._updateSelection = () => {\n            if (!this._element) {\n                this._element = this._createElement();\n            }\n            const li = this._element;\n            const wasSelected = li.classList.contains(SELECTED_CLASS);\n            if (this._notebook.selectedCells.some(cell => this._model === cell.model)) {\n                if (!wasSelected) {\n                    li.classList.add(SELECTED_CLASS);\n                }\n            }\n            else if (wasSelected) {\n                li.classList.remove(SELECTED_CLASS);\n            }\n        };\n        this._isDisposed = false;\n        this._element = null;\n        // Note: there should be no DOM operations in the constructor\n        this._model = options.model;\n        this._notebook = options.notebook;\n    }\n    /**\n     * Unique item key used for caching.\n     */\n    get key() {\n        return this._model.id;\n    }\n    /**\n     * Test whether the item has been disposed.\n     */\n    get isDisposed() {\n        // Ensure the state is up-to-date in case if the model was disposed\n        // (the model can be disposed when cells are moved/recreated).\n        if (!this._isDisposed && this._model.isDisposed) {\n            this.dispose();\n        }\n        return this._isDisposed;\n    }\n    _updateDirty() {\n        if (this._model.type !== 'code' || !this._element) {\n            return;\n        }\n        const model = this._model;\n        const wasDirty = this._element.classList.contains(DIRTY_CLASS);\n        if (wasDirty !== model.isDirty) {\n            if (model.isDirty) {\n                this._element.classList.add(DIRTY_CLASS);\n            }\n            else {\n                this._element.classList.remove(DIRTY_CLASS);\n            }\n        }\n    }\n    _createElement() {\n        const li = document.createElement('li');\n        const executionIndicator = (this._executionIndicator =\n            document.createElement('div'));\n        executionIndicator.className = 'jp-scrollbarItem-executionIndicator';\n        const source = (this._source = document.createElement('div'));\n        source.className = 'jp-scrollbarItem-source';\n        li.append(executionIndicator);\n        li.append(source);\n        return li;\n    }\n}\n/**\n * A notebook widget that supports interactivity.\n */\nexport class Notebook extends StaticNotebook {\n    /**\n     * Construct a notebook widget.\n     */\n    constructor(options) {\n        super({\n            renderer: {\n                createOuter() {\n                    return document.createElement('div');\n                },\n                createViewport() {\n                    const el = document.createElement('div');\n                    el.setAttribute('role', 'feed');\n                    el.setAttribute('aria-label', 'Cells');\n                    return el;\n                },\n                createScrollbar() {\n                    return document.createElement('ol');\n                },\n                createScrollbarViewportIndicator() {\n                    return document.createElement('div');\n                },\n                createScrollbarItem(notebook, _index, model) {\n                    return new ScrollbarItem({\n                        notebook,\n                        model\n                    });\n                }\n            },\n            ...options\n        });\n        this._activeCellIndex = -1;\n        this._activeCell = null;\n        this._mode = 'command';\n        this._drag = null;\n        this._dragData = null;\n        this._selectData = null;\n        this._mouseMode = null;\n        this._activeCellChanged = new Signal(this);\n        this._stateChanged = new Signal(this);\n        this._selectionChanged = new Signal(this);\n        this._checkCacheOnNextResize = false;\n        this._lastClipboardInteraction = null;\n        this._selectedCells = [];\n        // Allow the node to scroll while dragging items.\n        this.outerNode.setAttribute('data-lm-dragscroll', 'true');\n        this.activeCellChanged.connect(this._updateSelectedCells, this);\n        this.jumped.connect((_, index) => (this.activeCellIndex = index));\n        this.selectionChanged.connect(this._updateSelectedCells, this);\n        this.addFooter();\n    }\n    /**\n     * List of selected and active cells\n     */\n    get selectedCells() {\n        return this._selectedCells;\n    }\n    /**\n     * Adds a footer to the notebook.\n     */\n    addFooter() {\n        const info = new NotebookFooter(this);\n        this.layout.footer = info;\n    }\n    /**\n     * Handle a change cells event.\n     */\n    _onCellsChanged(sender, args) {\n        var _a, _b;\n        const activeCellId = (_a = this.activeCell) === null || _a === void 0 ? void 0 : _a.model.id;\n        super._onCellsChanged(sender, args);\n        if (activeCellId) {\n            const newActiveCellIndex = (_b = this.model) === null || _b === void 0 ? void 0 : _b.sharedModel.cells.findIndex(cell => cell.getId() === activeCellId);\n            if (newActiveCellIndex != null) {\n                this.activeCellIndex = newActiveCellIndex;\n            }\n        }\n    }\n    /**\n     * A signal emitted when the active cell changes.\n     *\n     * #### Notes\n     * This can be due to the active index changing or the\n     * cell at the active index changing.\n     */\n    get activeCellChanged() {\n        return this._activeCellChanged;\n    }\n    /**\n     * A signal emitted when the state of the notebook changes.\n     */\n    get stateChanged() {\n        return this._stateChanged;\n    }\n    /**\n     * A signal emitted when the selection state of the notebook changes.\n     */\n    get selectionChanged() {\n        return this._selectionChanged;\n    }\n    /**\n     * The interactivity mode of the notebook.\n     */\n    get mode() {\n        return this._mode;\n    }\n    set mode(newValue) {\n        this.setMode(newValue);\n    }\n    /**\n     * Set the notebook mode.\n     *\n     * @param newValue Notebook mode\n     * @param options Control mode side-effect\n     * @param options.focus Whether to ensure focus (default) or not when setting the mode.\n     */\n    setMode(newValue, options = {}) {\n        var _a;\n        const setFocus = (_a = options.focus) !== null && _a !== void 0 ? _a : true;\n        const activeCell = this.activeCell;\n        if (!activeCell) {\n            newValue = 'command';\n        }\n        if (newValue === this._mode) {\n            if (setFocus) {\n                this._ensureFocus();\n            }\n            return;\n        }\n        // Post an update request.\n        this.update();\n        const oldValue = this._mode;\n        this._mode = newValue;\n        if (newValue === 'edit') {\n            // Edit mode deselects all cells.\n            for (const widget of this.widgets) {\n                this.deselect(widget);\n            }\n            // Edit mode unrenders an active markdown widget.\n            if (activeCell instanceof MarkdownCell) {\n                activeCell.rendered = false;\n            }\n            activeCell.inputHidden = false;\n        }\n        else {\n            if (setFocus) {\n                void NotebookActions.focusActiveCell(this, {\n                    // Do not await the active cell because that creates a bug. If the user\n                    // is editing a code cell and presses Accel Shift C to open the command\n                    // palette, then the command palette opens before\n                    // activeCell.node.focus() is called, which closes the command palette.\n                    // To the end user, it looks as if all the keyboard shortcut did was\n                    // move focus from the cell editor to the cell as a whole.\n                    waitUntilReady: false,\n                    preventScroll: true\n                });\n            }\n        }\n        this._stateChanged.emit({ name: 'mode', oldValue, newValue });\n        if (setFocus) {\n            this._ensureFocus();\n        }\n    }\n    /**\n     * The active cell index of the notebook.\n     *\n     * #### Notes\n     * The index will be clamped to the bounds of the notebook cells.\n     */\n    get activeCellIndex() {\n        if (!this.model) {\n            return -1;\n        }\n        return this.widgets.length ? this._activeCellIndex : -1;\n    }\n    set activeCellIndex(newValue) {\n        var _a, _b;\n        const oldValue = this._activeCellIndex;\n        if (!this.model || !this.widgets.length) {\n            newValue = -1;\n        }\n        else {\n            newValue = Math.max(newValue, 0);\n            newValue = Math.min(newValue, this.widgets.length - 1);\n        }\n        this._activeCellIndex = newValue;\n        const oldCell = (_a = this.widgets[oldValue]) !== null && _a !== void 0 ? _a : null;\n        const cell = (_b = this.widgets[newValue]) !== null && _b !== void 0 ? _b : null;\n        this.layout.activeCell = cell;\n        const cellChanged = cell !== this._activeCell;\n        if (cellChanged) {\n            // Post an update request.\n            this.update();\n            this._activeCell = cell;\n        }\n        if (cellChanged || newValue != oldValue) {\n            this._activeCellChanged.emit(cell);\n        }\n        if (this.mode === 'edit') {\n            if (cell instanceof MarkdownCell) {\n                cell.rendered = false;\n            }\n            if (this.notebookConfig.autoRenderMarkdownCells &&\n                cellChanged &&\n                oldCell instanceof MarkdownCell) {\n                oldCell.rendered = true;\n            }\n        }\n        this._ensureFocus();\n        if (newValue === oldValue) {\n            return;\n        }\n        this._trimSelections();\n        this._stateChanged.emit({ name: 'activeCellIndex', oldValue, newValue });\n    }\n    /**\n     * Get the active cell widget.\n     *\n     * #### Notes\n     * This is a cell or `null` if there is no active cell.\n     */\n    get activeCell() {\n        return this._activeCell;\n    }\n    get lastClipboardInteraction() {\n        return this._lastClipboardInteraction;\n    }\n    set lastClipboardInteraction(newValue) {\n        this._lastClipboardInteraction = newValue;\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._activeCell = null;\n        super.dispose();\n    }\n    /**\n     * Move cells preserving widget view state.\n     *\n     * #### Notes\n     * This is required because at the model level a move is a deletion\n     * followed by an insertion. Hence the view state is not preserved.\n     *\n     * @param from The index of the cell to move\n     * @param to The new index of the cell\n     * @param n Number of cells to move\n     */\n    moveCell(from, to, n = 1) {\n        // Save active cell id to be restored\n        const newActiveCellIndex = from <= this.activeCellIndex && this.activeCellIndex < from + n\n            ? this.activeCellIndex + to - from - (from > to ? 0 : n - 1)\n            : -1;\n        const isSelected = this.widgets\n            .slice(from, from + n)\n            .map(w => this.isSelected(w));\n        super.moveCell(from, to, n);\n        if (newActiveCellIndex >= 0) {\n            this.activeCellIndex = newActiveCellIndex;\n        }\n        if (from > to) {\n            isSelected.forEach((selected, idx) => {\n                if (selected) {\n                    this.select(this.widgets[to + idx]);\n                }\n            });\n        }\n        else {\n            isSelected.forEach((selected, idx) => {\n                if (selected) {\n                    this.select(this.widgets[to - n + 1 + idx]);\n                }\n            });\n        }\n    }\n    /**\n     * Select a cell widget.\n     *\n     * #### Notes\n     * It is a no-op if the value does not change.\n     * It will emit the `selectionChanged` signal.\n     */\n    select(widget) {\n        if (Private.selectedProperty.get(widget)) {\n            return;\n        }\n        Private.selectedProperty.set(widget, true);\n        this._selectionChanged.emit(void 0);\n        this.update();\n    }\n    /**\n     * Deselect a cell widget.\n     *\n     * #### Notes\n     * It is a no-op if the value does not change.\n     * It will emit the `selectionChanged` signal.\n     */\n    deselect(widget) {\n        if (!Private.selectedProperty.get(widget)) {\n            return;\n        }\n        Private.selectedProperty.set(widget, false);\n        this._selectionChanged.emit(void 0);\n        this.update();\n    }\n    /**\n     * Whether a cell is selected.\n     */\n    isSelected(widget) {\n        return Private.selectedProperty.get(widget);\n    }\n    /**\n     * Whether a cell is selected or is the active cell.\n     */\n    isSelectedOrActive(widget) {\n        if (widget === this._activeCell) {\n            return true;\n        }\n        return Private.selectedProperty.get(widget);\n    }\n    /**\n     * Deselect all of the cells.\n     */\n    deselectAll() {\n        let changed = false;\n        for (const widget of this.widgets) {\n            if (Private.selectedProperty.get(widget)) {\n                changed = true;\n            }\n            Private.selectedProperty.set(widget, false);\n        }\n        if (changed) {\n            this._selectionChanged.emit(void 0);\n        }\n        // Make sure we have a valid active cell.\n        this.activeCellIndex = this.activeCellIndex; // eslint-disable-line\n        this.update();\n    }\n    /**\n     * Move the head of an existing contiguous selection to extend the selection.\n     *\n     * @param index - The new head of the existing selection.\n     *\n     * #### Notes\n     * If there is no existing selection, the active cell is considered an\n     * existing one-cell selection.\n     *\n     * If the new selection is a single cell, that cell becomes the active cell\n     * and all cells are deselected.\n     *\n     * There is no change if there are no cells (i.e., activeCellIndex is -1).\n     */\n    extendContiguousSelectionTo(index) {\n        let { head, anchor } = this.getContiguousSelection();\n        let i;\n        // Handle the case of no current selection.\n        if (anchor === null || head === null) {\n            if (index === this.activeCellIndex) {\n                // Already collapsed selection, nothing more to do.\n                return;\n            }\n            // We will start a new selection below.\n            head = this.activeCellIndex;\n            anchor = this.activeCellIndex;\n        }\n        // Move the active cell. We do this before the collapsing shortcut below.\n        this.activeCellIndex = index;\n        // Make sure the index is valid, according to the rules for setting and clipping the\n        // active cell index. This may change the index.\n        index = this.activeCellIndex;\n        // Collapse the selection if it is only the active cell.\n        if (index === anchor) {\n            this.deselectAll();\n            return;\n        }\n        let selectionChanged = false;\n        if (head < index) {\n            if (head < anchor) {\n                Private.selectedProperty.set(this.widgets[head], false);\n                selectionChanged = true;\n            }\n            // Toggle everything strictly between head and index except anchor.\n            for (i = head + 1; i < index; i++) {\n                if (i !== anchor) {\n                    Private.selectedProperty.set(this.widgets[i], !Private.selectedProperty.get(this.widgets[i]));\n                    selectionChanged = true;\n                }\n            }\n        }\n        else if (index < head) {\n            if (anchor < head) {\n                Private.selectedProperty.set(this.widgets[head], false);\n                selectionChanged = true;\n            }\n            // Toggle everything strictly between index and head except anchor.\n            for (i = index + 1; i < head; i++) {\n                if (i !== anchor) {\n                    Private.selectedProperty.set(this.widgets[i], !Private.selectedProperty.get(this.widgets[i]));\n                    selectionChanged = true;\n                }\n            }\n        }\n        // Anchor and index should *always* be selected.\n        if (!Private.selectedProperty.get(this.widgets[anchor])) {\n            selectionChanged = true;\n        }\n        Private.selectedProperty.set(this.widgets[anchor], true);\n        if (!Private.selectedProperty.get(this.widgets[index])) {\n            selectionChanged = true;\n        }\n        Private.selectedProperty.set(this.widgets[index], true);\n        if (selectionChanged) {\n            this._selectionChanged.emit(void 0);\n        }\n    }\n    /**\n     * Get the head and anchor of a contiguous cell selection.\n     *\n     * The head of a contiguous selection is always the active cell.\n     *\n     * If there are no cells selected, `{head: null, anchor: null}` is returned.\n     *\n     * Throws an error if the currently selected cells do not form a contiguous\n     * selection.\n     */\n    getContiguousSelection() {\n        const cells = this.widgets;\n        const first = ArrayExt.findFirstIndex(cells, c => this.isSelected(c));\n        // Return early if no cells are selected.\n        if (first === -1) {\n            return { head: null, anchor: null };\n        }\n        const last = ArrayExt.findLastIndex(cells, c => this.isSelected(c), -1, first);\n        // Check that the selection is contiguous.\n        for (let i = first; i <= last; i++) {\n            if (!this.isSelected(cells[i])) {\n                throw new Error('Selection not contiguous');\n            }\n        }\n        // Check that the active cell is one of the endpoints of the selection.\n        const activeIndex = this.activeCellIndex;\n        if (first !== activeIndex && last !== activeIndex) {\n            throw new Error('Active cell not at endpoint of selection');\n        }\n        // Determine the head and anchor of the selection.\n        if (first === activeIndex) {\n            return { head: first, anchor: last };\n        }\n        else {\n            return { head: last, anchor: first };\n        }\n    }\n    /**\n     * Scroll so that the given cell is in view. Selects and activates cell.\n     *\n     * @param cell - A cell in the notebook widget.\n     * @param align - Type of alignment.\n     *\n     */\n    async scrollToCell(cell, align = 'auto') {\n        try {\n            await this.scrollToItem(this.widgets.findIndex(c => c === cell), align);\n        }\n        catch (r) {\n            //no-op\n        }\n        // change selection and active cell:\n        this.deselectAll();\n        this.select(cell);\n        cell.activate();\n    }\n    _parseFragment(fragment) {\n        const cleanedFragment = fragment.slice(1);\n        if (!cleanedFragment) {\n            // Bail early\n            return;\n        }\n        const parts = cleanedFragment.split('=');\n        if (parts.length === 1) {\n            // Default to heading if no prefix is given.\n            return {\n                kind: 'heading',\n                value: cleanedFragment\n            };\n        }\n        return {\n            kind: parts[0],\n            value: parts.slice(1).join('=')\n        };\n    }\n    /**\n     * Set URI fragment identifier.\n     */\n    async setFragment(fragment) {\n        const parsedFragment = this._parseFragment(fragment);\n        if (!parsedFragment) {\n            // Bail early\n            return;\n        }\n        let result;\n        switch (parsedFragment.kind) {\n            case 'heading':\n                result = await this._findHeading(parsedFragment.value);\n                break;\n            case 'cell-id':\n                result = this._findCellById(parsedFragment.value);\n                break;\n            default:\n                console.warn(`Unknown target type for URI fragment ${fragment}, interpreting as a heading`);\n                result = await this._findHeading(parsedFragment.kind + '=' + parsedFragment.value);\n                break;\n        }\n        if (result == null) {\n            return;\n        }\n        let { cell, element } = result;\n        if (!cell.inViewport) {\n            await this.scrollToCell(cell, 'center');\n        }\n        if (element == null) {\n            element = cell.node;\n        }\n        const widgetBox = this.node.getBoundingClientRect();\n        const elementBox = element.getBoundingClientRect();\n        if (elementBox.top > widgetBox.bottom ||\n            elementBox.bottom < widgetBox.top) {\n            element.scrollIntoView({ block: 'center' });\n        }\n    }\n    /**\n     * Handle the DOM events for the widget.\n     *\n     * @param event - The DOM event sent to the widget.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the notebook panel's node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        if (!this.model) {\n            return;\n        }\n        switch (event.type) {\n            case 'contextmenu':\n                if (event.eventPhase === Event.CAPTURING_PHASE) {\n                    this._evtContextMenuCapture(event);\n                }\n                break;\n            case 'mousedown':\n                if (event.eventPhase === Event.CAPTURING_PHASE) {\n                    this._evtMouseDownCapture(event);\n                }\n                else {\n                    // Skip processing the event when it resulted from a toolbar button click\n                    if (!event.defaultPrevented) {\n                        this._evtMouseDown(event);\n                    }\n                }\n                break;\n            case 'mouseup':\n                if (event.currentTarget === document) {\n                    this._evtDocumentMouseup(event);\n                }\n                break;\n            case 'mousemove':\n                if (event.currentTarget === document) {\n                    this._evtDocumentMousemove(event);\n                }\n                break;\n            case 'keydown':\n                // This works because CodeMirror does not stop the event propagation\n                this._ensureFocus(true);\n                break;\n            case 'dblclick':\n                this._evtDblClick(event);\n                break;\n            case 'focusin':\n                this._evtFocusIn(event);\n                break;\n            case 'focusout':\n                this._evtFocusOut(event);\n                break;\n            case 'lm-dragenter':\n                this._evtDragEnter(event);\n                break;\n            case 'lm-dragleave':\n                this._evtDragLeave(event);\n                break;\n            case 'lm-dragover':\n                this._evtDragOver(event);\n                break;\n            case 'lm-drop':\n                this._evtDrop(event);\n                break;\n            default:\n                super.handleEvent(event);\n                break;\n        }\n    }\n    /**\n     * Handle `after-attach` messages for the widget.\n     */\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        const node = this.node;\n        node.addEventListener('contextmenu', this, true);\n        node.addEventListener('mousedown', this, true);\n        node.addEventListener('mousedown', this);\n        node.addEventListener('keydown', this);\n        node.addEventListener('dblclick', this);\n        node.addEventListener('focusin', this);\n        node.addEventListener('focusout', this);\n        // Capture drag events for the notebook widget\n        // in order to preempt the drag/drop handlers in the\n        // code editor widgets, which can take text data.\n        node.addEventListener('lm-dragenter', this, true);\n        node.addEventListener('lm-dragleave', this, true);\n        node.addEventListener('lm-dragover', this, true);\n        node.addEventListener('lm-drop', this, true);\n    }\n    /**\n     * Handle `before-detach` messages for the widget.\n     */\n    onBeforeDetach(msg) {\n        const node = this.node;\n        node.removeEventListener('contextmenu', this, true);\n        node.removeEventListener('mousedown', this, true);\n        node.removeEventListener('mousedown', this);\n        node.removeEventListener('keydown', this);\n        node.removeEventListener('dblclick', this);\n        node.removeEventListener('focusin', this);\n        node.removeEventListener('focusout', this);\n        node.removeEventListener('lm-dragenter', this, true);\n        node.removeEventListener('lm-dragleave', this, true);\n        node.removeEventListener('lm-dragover', this, true);\n        node.removeEventListener('lm-drop', this, true);\n        document.removeEventListener('mousemove', this, true);\n        document.removeEventListener('mouseup', this, true);\n        super.onBeforeAttach(msg);\n    }\n    /**\n     * A message handler invoked on an `'after-show'` message.\n     */\n    onAfterShow(msg) {\n        super.onAfterShow(msg);\n        this._checkCacheOnNextResize = true;\n    }\n    /**\n     * A message handler invoked on a `'resize'` message.\n     */\n    onResize(msg) {\n        var _a;\n        // TODO\n        if (!this._checkCacheOnNextResize) {\n            return super.onResize(msg);\n        }\n        super.onResize(msg);\n        this._checkCacheOnNextResize = false;\n        const cache = this._cellLayoutStateCache;\n        const width = parseInt(this.node.style.width, 10);\n        if (cache) {\n            if (width === cache.width) {\n                // Cache identical, do nothing\n                return;\n            }\n        }\n        // Update cache\n        this._cellLayoutStateCache = { width };\n        // Fallback:\n        for (const w of this.widgets) {\n            if (w instanceof Cell && w.inViewport) {\n                (_a = w.editorWidget) === null || _a === void 0 ? void 0 : _a.update();\n            }\n        }\n    }\n    /**\n     * A message handler invoked on an `'before-hide'` message.\n     */\n    onBeforeHide(msg) {\n        super.onBeforeHide(msg);\n        // Update cache\n        const width = parseInt(this.node.style.width, 10);\n        this._cellLayoutStateCache = { width };\n    }\n    /**\n     * Handle `'activate-request'` messages.\n     */\n    onActivateRequest(msg) {\n        super.onActivateRequest(msg);\n        this._ensureFocus(true);\n    }\n    /**\n     * Handle `update-request` messages sent to the widget.\n     */\n    onUpdateRequest(msg) {\n        super.onUpdateRequest(msg);\n        const activeCell = this.activeCell;\n        // Set the appropriate classes on the cells.\n        if (this.mode === 'edit') {\n            this.addClass(EDIT_CLASS);\n            this.removeClass(COMMAND_CLASS);\n        }\n        else {\n            this.addClass(COMMAND_CLASS);\n            this.removeClass(EDIT_CLASS);\n        }\n        let count = 0;\n        for (const widget of this.widgets) {\n            // Set tabIndex to -1 to allow calling .focus() on cell without allowing\n            // focus via tab key. This allows focus (document.activeElement) to move\n            // up and down the document, cell by cell, when the user presses J/K or\n            // ArrowDown/ArrowUp, but (unlike tabIndex = 0) does not add the notebook\n            // cells (which could be numerous) to the set of nodes that the user would\n            // have to visit when pressing the tab key to move about the UI.\n            // NOTE: we need to be very careful to avoid modifying DOM to avoid triggering layout on scroll\n            if (widget === activeCell) {\n                activeCell.addClass(ACTIVE_CLASS);\n                activeCell.addClass(SELECTED_CLASS);\n                // Set tab index to 0 on the active cell so that if the user tabs away from\n                // the notebook then tabs back, they will return to the cell where they\n                // left off.\n                activeCell.node.tabIndex = 0;\n            }\n            else {\n                widget.node.tabIndex = -1;\n                widget.removeClass(ACTIVE_CLASS);\n                widget.removeClass(OTHER_SELECTED_CLASS);\n            }\n            if (this.isSelectedOrActive(widget)) {\n                widget.addClass(SELECTED_CLASS);\n                count++;\n            }\n            else {\n                widget.removeClass(SELECTED_CLASS);\n            }\n        }\n        if (activeCell && count > 1) {\n            activeCell.addClass(OTHER_SELECTED_CLASS);\n        }\n    }\n    /**\n     * Handle a cell being inserted.\n     */\n    onCellInserted(index, cell) {\n        void cell.ready.then(() => {\n            if (!cell.isDisposed) {\n                cell.editor.edgeRequested.connect(this._onEdgeRequest, this);\n            }\n        });\n        cell.scrollRequested.connect((_emitter, scrollRequest) => {\n            if (cell !== this.activeCell) {\n                // Do nothing for cells other than the active cell\n                // to avoid scroll requests from editor extensions\n                // stealing user focus (this may be revisited).\n                return;\n            }\n            if (!scrollRequest.defaultPrevented) {\n                // Nothing to do if scroll request was already handled.\n                return;\n            }\n            // Node which allows to scroll the notebook\n            const scroller = this.outerNode;\n            if (cell.inViewport) {\n                // If cell got scrolled to the viewport in the meantime,\n                // proceed with scrolling within the cell.\n                return scrollRequest.scrollWithinCell({ scroller });\n            }\n            // If cell is not in the viewport and needs scrolling,\n            // first scroll to the cell and then scroll within the cell.\n            this.scrollToItem(this.activeCellIndex)\n                .then(() => {\n                void cell.ready.then(() => {\n                    scrollRequest.scrollWithinCell({ scroller });\n                });\n            })\n                .catch(reason => {\n                // no-op\n            });\n        });\n        // If the insertion happened above, increment the active cell\n        // index, otherwise it stays the same.\n        this.activeCellIndex =\n            index <= this.activeCellIndex\n                ? this.activeCellIndex + 1\n                : this.activeCellIndex;\n    }\n    /**\n     * Handle a cell being removed.\n     */\n    onCellRemoved(index, cell) {\n        // If the removal happened above, decrement the active\n        // cell index, otherwise it stays the same.\n        this.activeCellIndex =\n            index <= this.activeCellIndex\n                ? this.activeCellIndex - 1\n                : this.activeCellIndex;\n        if (this.isSelected(cell)) {\n            this._selectionChanged.emit(void 0);\n        }\n    }\n    /**\n     * Handle a new model.\n     */\n    onModelChanged(oldValue, newValue) {\n        super.onModelChanged(oldValue, newValue);\n        // Try to set the active cell index to 0.\n        // It will be set to `-1` if there is no new model or the model is empty.\n        this.activeCellIndex = 0;\n    }\n    /**\n     * Handle edge request signals from cells.\n     */\n    _onEdgeRequest(editor, location) {\n        const prev = this.activeCellIndex;\n        if (location === 'top') {\n            this.activeCellIndex--;\n            // Move the cursor to the first position on the last line.\n            if (this.activeCellIndex < prev) {\n                const editor = this.activeCell.editor;\n                if (editor) {\n                    const lastLine = editor.lineCount - 1;\n                    editor.setCursorPosition({ line: lastLine, column: 0 });\n                }\n            }\n        }\n        else if (location === 'bottom') {\n            this.activeCellIndex++;\n            // Move the cursor to the first character.\n            if (this.activeCellIndex > prev) {\n                const editor = this.activeCell.editor;\n                if (editor) {\n                    editor.setCursorPosition({ line: 0, column: 0 });\n                }\n            }\n        }\n        this.mode = 'edit';\n    }\n    /**\n     * Ensure that the notebook has proper focus.\n     */\n    _ensureFocus(force = false) {\n        var _a, _b;\n        // No-op is the footer has the focus.\n        const footer = this.layout.footer;\n        if (footer && document.activeElement === footer.node) {\n            return;\n        }\n        const activeCell = this.activeCell;\n        if (this.mode === 'edit' && activeCell) {\n            // Test for !== true to cover hasFocus is false and editor is not yet rendered.\n            if (((_a = activeCell.editor) === null || _a === void 0 ? void 0 : _a.hasFocus()) !== true) {\n                if (activeCell.inViewport) {\n                    (_b = activeCell.editor) === null || _b === void 0 ? void 0 : _b.focus();\n                }\n                else {\n                    this.scrollToItem(this.activeCellIndex)\n                        .then(() => {\n                        void activeCell.ready.then(() => {\n                            var _a;\n                            (_a = activeCell.editor) === null || _a === void 0 ? void 0 : _a.focus();\n                        });\n                    })\n                        .catch(reason => {\n                        // no-op\n                    });\n                }\n            }\n        }\n        if (force &&\n            activeCell &&\n            !activeCell.node.contains(document.activeElement)) {\n            void NotebookActions.focusActiveCell(this, {\n                preventScroll: true\n            });\n        }\n    }\n    /**\n     * Find the cell index containing the target html element.\n     *\n     * #### Notes\n     * Returns -1 if the cell is not found.\n     */\n    _findCell(node) {\n        // Trace up the DOM hierarchy to find the root cell node.\n        // Then find the corresponding child and select it.\n        let n = node;\n        while (n && n !== this.node) {\n            if (n.classList.contains(NB_CELL_CLASS)) {\n                const i = ArrayExt.findFirstIndex(this.widgets, widget => widget.node === n);\n                if (i !== -1) {\n                    return i;\n                }\n                break;\n            }\n            n = n.parentElement;\n        }\n        return -1;\n    }\n    /**\n     * Find the target of html mouse event and cell index containing this target.\n     *\n     * #### Notes\n     * Returned index is -1 if the cell is not found.\n     */\n    _findEventTargetAndCell(event) {\n        let target = event.target;\n        let index = this._findCell(target);\n        if (index === -1) {\n            // `event.target` sometimes gives an orphaned node in Firefox 57, which\n            // can have `null` anywhere in its parent line. If we fail to find a cell\n            // using `event.target`, try again using a target reconstructed from the\n            // position of the click event.\n            target = document.elementFromPoint(event.clientX, event.clientY);\n            index = this._findCell(target);\n        }\n        return [target, index];\n    }\n    /**\n     * Find heading with given ID in any of the cells.\n     */\n    async _findHeading(queryId) {\n        // Loop on cells, get headings and search for first matching id.\n        for (let cellIdx = 0; cellIdx < this.widgets.length; cellIdx++) {\n            const cell = this.widgets[cellIdx];\n            if (cell.model.type === 'raw' ||\n                (cell.model.type === 'markdown' && !cell.rendered)) {\n                // Bail early\n                continue;\n            }\n            for (const heading of cell.headings) {\n                let id = '';\n                switch (heading.type) {\n                    case Cell.HeadingType.HTML:\n                        id = heading.id;\n                        break;\n                    case Cell.HeadingType.Markdown:\n                        {\n                            const mdHeading = heading;\n                            id = await TableOfContentsUtils.Markdown.getHeadingId(this.rendermime.markdownParser, mdHeading.raw, mdHeading.level, this.rendermime.sanitizer);\n                        }\n                        break;\n                }\n                if (id === queryId) {\n                    const element = this.node.querySelector(`h${heading.level}[id=\"${CSS.escape(id)}\"]`);\n                    return {\n                        cell,\n                        element\n                    };\n                }\n            }\n        }\n        return null;\n    }\n    /**\n     * Find cell by its unique ID.\n     */\n    _findCellById(queryId) {\n        for (let cellIdx = 0; cellIdx < this.widgets.length; cellIdx++) {\n            const cell = this.widgets[cellIdx];\n            if (cell.model.id === queryId) {\n                return {\n                    cell\n                };\n            }\n        }\n        return null;\n    }\n    /**\n     * Handle `contextmenu` event.\n     */\n    _evtContextMenuCapture(event) {\n        var _a;\n        // Allow the event to propagate un-modified if the user\n        // is holding the shift-key (and probably requesting\n        // the native context menu).\n        if (event.shiftKey) {\n            return;\n        }\n        const [target, index] = this._findEventTargetAndCell(event);\n        const widget = this.widgets[index];\n        if (widget && ((_a = widget.editorWidget) === null || _a === void 0 ? void 0 : _a.node.contains(target))) {\n            // Prevent CodeMirror from focusing the editor.\n            // TODO: find an editor-agnostic solution.\n            event.preventDefault();\n        }\n    }\n    /**\n     * Handle `mousedown` event in the capture phase for the widget.\n     */\n    _evtMouseDownCapture(event) {\n        var _a;\n        const { button, shiftKey } = event;\n        const [target, index] = this._findEventTargetAndCell(event);\n        const widget = this.widgets[index];\n        // On OS X, the context menu may be triggered with ctrl-left-click. In\n        // Firefox, ctrl-left-click gives an event with button 2, but in Chrome,\n        // ctrl-left-click gives an event with button 0 with the ctrl modifier.\n        if (button === 2 &&\n            !shiftKey &&\n            widget &&\n            ((_a = widget.editorWidget) === null || _a === void 0 ? void 0 : _a.node.contains(target))) {\n            this.mode = 'command';\n            // Prevent CodeMirror from focusing the editor.\n            // TODO: find an editor-agnostic solution.\n            event.preventDefault();\n        }\n    }\n    /**\n     * Handle `mousedown` events for the widget.\n     */\n    _evtMouseDown(event) {\n        var _a, _b, _c;\n        const { button, shiftKey } = event;\n        // We only handle main or secondary button actions.\n        if (!(button === 0 || button === 2)) {\n            return;\n        }\n        // Shift right-click gives the browser default behavior.\n        if (shiftKey && button === 2) {\n            return;\n        }\n        const [target, index] = this._findEventTargetAndCell(event);\n        const widget = this.widgets[index];\n        let targetArea;\n        if (widget) {\n            if ((_a = widget.editorWidget) === null || _a === void 0 ? void 0 : _a.node.contains(target)) {\n                targetArea = 'input';\n            }\n            else if ((_b = widget.promptNode) === null || _b === void 0 ? void 0 : _b.contains(target)) {\n                targetArea = 'prompt';\n            }\n            else {\n                targetArea = 'cell';\n            }\n        }\n        else {\n            targetArea = 'notebook';\n        }\n        // Make sure we go to command mode if the click isn't in the cell editor If\n        // we do click in the cell editor, the editor handles the focus event to\n        // switch to edit mode.\n        if (targetArea !== 'input') {\n            this.mode = 'command';\n        }\n        if (targetArea === 'notebook') {\n            this.deselectAll();\n        }\n        else if (targetArea === 'prompt' || targetArea === 'cell') {\n            // We don't want to prevent the default selection behavior\n            // if there is currently text selected in an output.\n            const hasSelection = ((_c = window.getSelection()) !== null && _c !== void 0 ? _c : '').toString() !== '';\n            if (button === 0 &&\n                shiftKey &&\n                !hasSelection &&\n                !['INPUT', 'OPTION'].includes(target.tagName)) {\n                // Prevent browser selecting text in prompt or output\n                event.preventDefault();\n                // Shift-click - extend selection\n                try {\n                    this.extendContiguousSelectionTo(index);\n                }\n                catch (e) {\n                    console.error(e);\n                    this.deselectAll();\n                    return;\n                }\n                // Enter selecting mode\n                this._mouseMode = 'select';\n                // We don't want to block the shift-click mouse up handler\n                // when the current cell is (and remains) the active cell.\n                this._selectData = {\n                    startedOnActiveCell: index == this.activeCellIndex,\n                    startingCellIndex: this.activeCellIndex\n                };\n                document.addEventListener('mouseup', this, true);\n                document.addEventListener('mousemove', this, true);\n            }\n            else if (button === 0 && !shiftKey) {\n                // Prepare to start a drag if we are on the drag region.\n                if (targetArea === 'prompt') {\n                    // Prepare for a drag start\n                    this._dragData = {\n                        pressX: event.clientX,\n                        pressY: event.clientY,\n                        index: index\n                    };\n                    // Enter possible drag mode\n                    this._mouseMode = 'couldDrag';\n                    document.addEventListener('mouseup', this, true);\n                    document.addEventListener('mousemove', this, true);\n                    event.preventDefault();\n                }\n                if (!this.isSelectedOrActive(widget)) {\n                    this.deselectAll();\n                    this.activeCellIndex = index;\n                }\n            }\n            else if (button === 2) {\n                if (!this.isSelectedOrActive(widget)) {\n                    this.deselectAll();\n                    this.activeCellIndex = index;\n                }\n                event.preventDefault();\n            }\n        }\n        else if (targetArea === 'input') {\n            if (button === 2 && !this.isSelectedOrActive(widget)) {\n                this.deselectAll();\n                this.activeCellIndex = index;\n            }\n        }\n        // If we didn't set focus above, make sure we get focus now.\n        this._ensureFocus(true);\n    }\n    /**\n     * Handle the `'mouseup'` event on the document.\n     */\n    _evtDocumentMouseup(event) {\n        const [, index] = this._findEventTargetAndCell(event);\n        let shouldPreventDefault = true;\n        if (this._mouseMode === 'select' && this._selectData) {\n            // User did not move the mouse over to a difference cell, so there was no selection\n            const { startedOnActiveCell, startingCellIndex } = this._selectData;\n            if (startedOnActiveCell && index === startingCellIndex) {\n                shouldPreventDefault = false;\n            }\n            this._selectData = null;\n        }\n        if (shouldPreventDefault) {\n            event.preventDefault();\n            event.stopPropagation();\n        }\n        // Remove the event listeners we put on the document\n        document.removeEventListener('mousemove', this, true);\n        document.removeEventListener('mouseup', this, true);\n        if (this._mouseMode === 'couldDrag') {\n            // We didn't end up dragging if we are here, so treat it as a click event.\n            this.deselectAll();\n            this.activeCellIndex = index;\n            // Focus notebook if active cell changes but does not have focus.\n            if (!this.activeCell.node.contains(document.activeElement)) {\n                void NotebookActions.focusActiveCell(this);\n            }\n        }\n        this._mouseMode = null;\n    }\n    /**\n     * Handle the `'mousemove'` event for the widget.\n     */\n    _evtDocumentMousemove(event) {\n        event.preventDefault();\n        event.stopPropagation();\n        // If in select mode, update the selection\n        switch (this._mouseMode) {\n            case 'select': {\n                const target = event.target;\n                const index = this._findCell(target);\n                if (index !== -1) {\n                    this.extendContiguousSelectionTo(index);\n                }\n                break;\n            }\n            case 'couldDrag': {\n                // Check for a drag initialization.\n                const data = this._dragData;\n                const dx = Math.abs(event.clientX - data.pressX);\n                const dy = Math.abs(event.clientY - data.pressY);\n                if (dx >= DRAG_THRESHOLD || dy >= DRAG_THRESHOLD) {\n                    this._mouseMode = null;\n                    this._startDrag(data.index, event.clientX, event.clientY);\n                }\n                break;\n            }\n            default:\n                break;\n        }\n    }\n    /**\n     * Handle the `'lm-dragenter'` event for the widget.\n     */\n    _evtDragEnter(event) {\n        if (!event.mimeData.hasData(JUPYTER_CELL_MIME)) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        const target = event.target;\n        const index = this._findCell(target);\n        if (index === -1) {\n            return;\n        }\n        const widget = this.cellsArray[index];\n        widget.node.classList.add(DROP_TARGET_CLASS);\n    }\n    /**\n     * Handle the `'lm-dragleave'` event for the widget.\n     */\n    _evtDragLeave(event) {\n        if (!event.mimeData.hasData(JUPYTER_CELL_MIME)) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        const elements = this.node.getElementsByClassName(DROP_TARGET_CLASS);\n        if (elements.length) {\n            elements[0].classList.remove(DROP_TARGET_CLASS);\n        }\n    }\n    /**\n     * Handle the `'lm-dragover'` event for the widget.\n     */\n    _evtDragOver(event) {\n        if (!event.mimeData.hasData(JUPYTER_CELL_MIME)) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        event.dropAction = event.proposedAction;\n        const elements = this.node.getElementsByClassName(DROP_TARGET_CLASS);\n        if (elements.length) {\n            elements[0].classList.remove(DROP_TARGET_CLASS);\n        }\n        const target = event.target;\n        const index = this._findCell(target);\n        if (index === -1) {\n            return;\n        }\n        const widget = this.cellsArray[index];\n        widget.node.classList.add(DROP_TARGET_CLASS);\n    }\n    /**\n     * Handle the `'lm-drop'` event for the widget.\n     */\n    _evtDrop(event) {\n        if (!event.mimeData.hasData(JUPYTER_CELL_MIME)) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        if (event.proposedAction === 'none') {\n            event.dropAction = 'none';\n            return;\n        }\n        let target = event.target;\n        while (target && target.parentElement) {\n            if (target.classList.contains(DROP_TARGET_CLASS)) {\n                target.classList.remove(DROP_TARGET_CLASS);\n                break;\n            }\n            target = target.parentElement;\n        }\n        // Model presence should be checked before calling event handlers\n        const model = this.model;\n        const source = event.source;\n        if (source === this) {\n            // Handle the case where we are moving cells within\n            // the same notebook.\n            event.dropAction = 'move';\n            const toMove = event.mimeData.getData('internal:cells');\n            // For collapsed markdown headings with hidden \"child\" cells, move all\n            // child cells as well as the markdown heading.\n            const cell = toMove[toMove.length - 1];\n            if (cell instanceof MarkdownCell && cell.headingCollapsed) {\n                const nextParent = NotebookActions.findNextParentHeading(cell, source);\n                if (nextParent > 0) {\n                    const index = findIndex(source.widgets, (possibleCell) => {\n                        return cell.model.id === possibleCell.model.id;\n                    });\n                    toMove.push(...source.widgets.slice(index + 1, nextParent));\n                }\n            }\n            // Compute the to/from indices for the move.\n            let fromIndex = ArrayExt.firstIndexOf(this.widgets, toMove[0]);\n            let toIndex = this._findCell(target);\n            // This check is needed for consistency with the view.\n            if (toIndex !== -1 && toIndex > fromIndex) {\n                toIndex -= 1;\n            }\n            else if (toIndex === -1) {\n                // If the drop is within the notebook but not on any cell,\n                // most often this means it is past the cell areas, so\n                // set it to move the cells to the end of the notebook.\n                toIndex = this.widgets.length - 1;\n            }\n            // Don't move if we are within the block of selected cells.\n            if (toIndex >= fromIndex && toIndex < fromIndex + toMove.length) {\n                return;\n            }\n            // Move the cells one by one\n            this.moveCell(fromIndex, toIndex, toMove.length);\n        }\n        else {\n            // Handle the case where we are copying cells between\n            // notebooks.\n            event.dropAction = 'copy';\n            // Find the target cell and insert the copied cells.\n            let index = this._findCell(target);\n            if (index === -1) {\n                index = this.widgets.length;\n            }\n            const start = index;\n            const values = event.mimeData.getData(JUPYTER_CELL_MIME);\n            // Insert the copies of the original cells.\n            // We preserve trust status of pasted cells by not modifying metadata.\n            model.sharedModel.insertCells(index, values);\n            // Select the inserted cells.\n            this.deselectAll();\n            this.activeCellIndex = start;\n            this.extendContiguousSelectionTo(index - 1);\n        }\n        void NotebookActions.focusActiveCell(this);\n    }\n    /**\n     * Start a drag event.\n     */\n    _startDrag(index, clientX, clientY) {\n        var _a;\n        const cells = this.model.cells;\n        const selected = [];\n        const toMove = [];\n        let i = -1;\n        for (const widget of this.widgets) {\n            const cell = cells.get(++i);\n            if (this.isSelectedOrActive(widget)) {\n                widget.addClass(DROP_SOURCE_CLASS);\n                selected.push(cell.toJSON());\n                toMove.push(widget);\n            }\n        }\n        const activeCell = this.activeCell;\n        let dragImage = null;\n        let countString;\n        if ((activeCell === null || activeCell === void 0 ? void 0 : activeCell.model.type) === 'code') {\n            const executionCount = activeCell.model\n                .executionCount;\n            countString = ' ';\n            if (executionCount) {\n                countString = executionCount.toString();\n            }\n        }\n        else {\n            countString = '';\n        }\n        // Create the drag image.\n        dragImage = Private.createDragImage(selected.length, countString, (_a = activeCell === null || activeCell === void 0 ? void 0 : activeCell.model.sharedModel.getSource().split('\\n')[0].slice(0, 26)) !== null && _a !== void 0 ? _a : '');\n        // Set up the drag event.\n        this._drag = new Drag({\n            mimeData: new MimeData(),\n            dragImage,\n            supportedActions: 'copy-move',\n            proposedAction: 'copy',\n            source: this\n        });\n        this._drag.mimeData.setData(JUPYTER_CELL_MIME, selected);\n        // Add mimeData for the fully reified cell widgets, for the\n        // case where the target is in the same notebook and we\n        // can just move the cells.\n        this._drag.mimeData.setData('internal:cells', toMove);\n        // Add mimeData for the text content of the selected cells,\n        // allowing for drag/drop into plain text fields.\n        const textContent = toMove\n            .map(cell => cell.model.sharedModel.getSource())\n            .join('\\n');\n        this._drag.mimeData.setData('text/plain', textContent);\n        // Remove mousemove and mouseup listeners and start the drag.\n        document.removeEventListener('mousemove', this, true);\n        document.removeEventListener('mouseup', this, true);\n        this._mouseMode = null;\n        void this._drag.start(clientX, clientY).then(action => {\n            if (this.isDisposed) {\n                return;\n            }\n            this._drag = null;\n            for (const widget of toMove) {\n                widget.removeClass(DROP_SOURCE_CLASS);\n            }\n        });\n    }\n    /**\n     * Update the notebook node with class indicating read-write state.\n     */\n    _updateReadWrite() {\n        const inReadWrite = DOMUtils.hasActiveEditableElement(this.node);\n        this.node.classList.toggle(READ_WRITE_CLASS, inReadWrite);\n    }\n    /**\n     * Handle `focus` events for the widget.\n     */\n    _evtFocusIn(event) {\n        var _a, _b;\n        // Update read-write class state.\n        this._updateReadWrite();\n        const target = event.target;\n        const index = this._findCell(target);\n        if (index !== -1) {\n            const widget = this.widgets[index];\n            // If the editor itself does not have focus, ensure command mode.\n            if (widget.editorWidget && !widget.editorWidget.node.contains(target)) {\n                this.setMode('command', { focus: false });\n            }\n            // Cell index needs to be updated before changing mode,\n            // otherwise the previous cell may get un-rendered.\n            this.activeCellIndex = index;\n            // If the editor has focus, ensure edit mode.\n            const node = (_a = widget.editorWidget) === null || _a === void 0 ? void 0 : _a.node;\n            if (node === null || node === void 0 ? void 0 : node.contains(target)) {\n                this.setMode('edit', { focus: false });\n            }\n        }\n        else {\n            // No cell has focus, ensure command mode.\n            this.setMode('command', { focus: false });\n            // Prevents the parent element to get the focus.\n            event.preventDefault();\n            // Check if the focus was previously in the active cell to avoid focus looping\n            // between the cell and the cell toolbar.\n            const source = event.relatedTarget;\n            // Focuses on the active cell if the focus did not come from it.\n            // Otherwise focus on the footer element (add cell button).\n            if (this._activeCell && !this._activeCell.node.contains(source)) {\n                this._activeCell.ready\n                    .then(() => {\n                    var _a;\n                    (_a = this._activeCell) === null || _a === void 0 ? void 0 : _a.node.focus({\n                        preventScroll: true\n                    });\n                })\n                    .catch(() => {\n                    var _a;\n                    (_a = this.layout.footer) === null || _a === void 0 ? void 0 : _a.node.focus({\n                        preventScroll: true\n                    });\n                });\n            }\n            else {\n                (_b = this.layout.footer) === null || _b === void 0 ? void 0 : _b.node.focus({\n                    preventScroll: true\n                });\n            }\n        }\n    }\n    /**\n     * Handle `focusout` events for the notebook.\n     */\n    _evtFocusOut(event) {\n        var _a;\n        // Update read-write class state.\n        this._updateReadWrite();\n        const relatedTarget = event.relatedTarget;\n        // Bail if the window is losing focus, to preserve edit mode. This test\n        // assumes that we explicitly focus things rather than calling blur()\n        if (!relatedTarget) {\n            return;\n        }\n        // Bail if the item gaining focus is another cell,\n        // and we should not be entering command mode.\n        const index = this._findCell(relatedTarget);\n        if (index !== -1) {\n            const widget = this.widgets[index];\n            if ((_a = widget.editorWidget) === null || _a === void 0 ? void 0 : _a.node.contains(relatedTarget)) {\n                return;\n            }\n        }\n        // Otherwise enter command mode if not already.\n        if (this.mode !== 'command') {\n            this.setMode('command', { focus: false });\n        }\n    }\n    /**\n     * Handle `dblclick` events for the widget.\n     */\n    _evtDblClick(event) {\n        const model = this.model;\n        if (!model) {\n            return;\n        }\n        this.deselectAll();\n        const [target, index] = this._findEventTargetAndCell(event);\n        if (event.target.classList.contains(HEADING_COLLAPSER_CLASS)) {\n            return;\n        }\n        if (index === -1) {\n            return;\n        }\n        this.activeCellIndex = index;\n        if (model.cells.get(index).type === 'markdown') {\n            const widget = this.widgets[index];\n            widget.rendered = false;\n        }\n        else if (target.localName === 'img') {\n            target.classList.toggle(UNCONFINED_CLASS);\n        }\n    }\n    /**\n     * Remove selections from inactive cells to avoid\n     * spurious cursors.\n     */\n    _trimSelections() {\n        for (let i = 0; i < this.widgets.length; i++) {\n            if (i !== this._activeCellIndex) {\n                const cell = this.widgets[i];\n                if (!cell.model.isDisposed && cell.editor) {\n                    cell.model.selections.delete(cell.editor.uuid);\n                }\n            }\n        }\n    }\n    _updateSelectedCells() {\n        this._selectedCells = this.widgets.filter(cell => this.isSelectedOrActive(cell));\n        if (this.kernelHistory) {\n            this.kernelHistory.reset();\n        }\n    }\n}\n/**\n * The namespace for the `Notebook` class statics.\n */\n(function (Notebook) {\n    /**\n     * The default implementation of a notebook content factory..\n     *\n     * #### Notes\n     * Override methods on this class to customize the default notebook factory\n     * methods that create notebook content.\n     */\n    class ContentFactory extends StaticNotebook.ContentFactory {\n    }\n    Notebook.ContentFactory = ContentFactory;\n})(Notebook || (Notebook = {}));\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * An attached property for the selected state of a cell.\n     */\n    Private.selectedProperty = new AttachedProperty({\n        name: 'selected',\n        create: () => false\n    });\n    /**\n     * A custom panel layout for the notebook.\n     */\n    class NotebookPanelLayout extends PanelLayout {\n        /**\n         * A message handler invoked on an `'update-request'` message.\n         *\n         * #### Notes\n         * This is a reimplementation of the base class method,\n         * and is a no-op.\n         */\n        onUpdateRequest(msg) {\n            // This is a no-op.\n        }\n    }\n    Private.NotebookPanelLayout = NotebookPanelLayout;\n    /**\n     * Create a cell drag image.\n     */\n    function createDragImage(count, promptNumber, cellContent) {\n        if (count > 1) {\n            if (promptNumber !== '') {\n                return VirtualDOM.realize(h.div(h.div({ className: DRAG_IMAGE_CLASS }, h.span({ className: CELL_DRAG_PROMPT_CLASS }, '[' + promptNumber + ']:'), h.span({ className: CELL_DRAG_CONTENT_CLASS }, cellContent)), h.div({ className: CELL_DRAG_MULTIPLE_BACK }, '')));\n            }\n            else {\n                return VirtualDOM.realize(h.div(h.div({ className: DRAG_IMAGE_CLASS }, h.span({ className: CELL_DRAG_PROMPT_CLASS }), h.span({ className: CELL_DRAG_CONTENT_CLASS }, cellContent)), h.div({ className: CELL_DRAG_MULTIPLE_BACK }, '')));\n            }\n        }\n        else {\n            if (promptNumber !== '') {\n                return VirtualDOM.realize(h.div(h.div({ className: `${DRAG_IMAGE_CLASS} ${SINGLE_DRAG_IMAGE_CLASS}` }, h.span({ className: CELL_DRAG_PROMPT_CLASS }, '[' + promptNumber + ']:'), h.span({ className: CELL_DRAG_CONTENT_CLASS }, cellContent))));\n            }\n            else {\n                return VirtualDOM.realize(h.div(h.div({ className: `${DRAG_IMAGE_CLASS} ${SINGLE_DRAG_IMAGE_CLASS}` }, h.span({ className: CELL_DRAG_PROMPT_CLASS }), h.span({ className: CELL_DRAG_CONTENT_CLASS }, cellContent))));\n            }\n        }\n    }\n    Private.createDragImage = createDragImage;\n})(Private || (Private = {}));\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Dialog, Printing, showDialog } from '@jupyterlab/apputils';\nimport { isMarkdownCellModel } from '@jupyterlab/cells';\nimport { PageConfig } from '@jupyterlab/coreutils';\nimport { DocumentWidget } from '@jupyterlab/docregistry';\nimport { Token } from '@lumino/coreutils';\nimport { Notebook } from './widget';\n/**\n * The class name added to notebook panels.\n */\nconst NOTEBOOK_PANEL_CLASS = 'jp-NotebookPanel';\nconst NOTEBOOK_PANEL_TOOLBAR_CLASS = 'jp-NotebookPanel-toolbar';\nconst NOTEBOOK_PANEL_NOTEBOOK_CLASS = 'jp-NotebookPanel-notebook';\n/**\n * A widget that hosts a notebook toolbar and content area.\n *\n * #### Notes\n * The widget keeps the document metadata in sync with the current\n * kernel on the context.\n */\nexport class NotebookPanel extends DocumentWidget {\n    /**\n     * Construct a new notebook panel.\n     */\n    constructor(options) {\n        super(options);\n        /**\n         * Whether we are currently in a series of autorestarts we have already\n         * notified the user about.\n         */\n        this._autorestarting = false;\n        // Set up CSS classes\n        this.addClass(NOTEBOOK_PANEL_CLASS);\n        this.toolbar.addClass(NOTEBOOK_PANEL_TOOLBAR_CLASS);\n        this.content.addClass(NOTEBOOK_PANEL_NOTEBOOK_CLASS);\n        // Set up things related to the context\n        this.content.model = this.context.model;\n        this.context.sessionContext.kernelChanged.connect(this._onKernelChanged, this);\n        this.context.sessionContext.statusChanged.connect(this._onSessionStatusChanged, this);\n        // this.content.fullyRendered.connect(this._onFullyRendered, this);\n        this.context.saveState.connect(this._onSave, this);\n        void this.revealed.then(() => {\n            if (this.isDisposed) {\n                // this widget has already been disposed, bail\n                return;\n            }\n            // Set the document edit mode on initial open if it looks like a new document.\n            if (this.content.widgets.length === 1) {\n                const cellModel = this.content.widgets[0].model;\n                if (cellModel.type === 'code' &&\n                    cellModel.sharedModel.getSource() === '') {\n                    this.content.mode = 'edit';\n                }\n            }\n        });\n    }\n    /**\n     * Handle a change to the document registry save state.\n     *\n     * @param sender The document registry context\n     * @param state The document registry save state\n     */\n    _onSave(sender, state) {\n        if (state === 'started' && this.model) {\n            // Find markdown cells\n            for (const cell of this.model.cells) {\n                if (isMarkdownCellModel(cell)) {\n                    for (const key of cell.attachments.keys) {\n                        if (!cell.sharedModel.getSource().includes(key)) {\n                            cell.attachments.remove(key);\n                        }\n                    }\n                }\n            }\n        }\n    }\n    /**\n     * The session context used by the panel.\n     */\n    get sessionContext() {\n        return this.context.sessionContext;\n    }\n    /**\n     * The model for the widget.\n     */\n    get model() {\n        return this.content.model;\n    }\n    /**\n     * Update the options for the current notebook panel.\n     *\n     * @param config new options to set\n     */\n    setConfig(config) {\n        this.content.editorConfig = config.editorConfig;\n        this.content.notebookConfig = config.notebookConfig;\n        // Update kernel shutdown behavior\n        const kernelPreference = this.context.sessionContext.kernelPreference;\n        this.context.sessionContext.kernelPreference = {\n            ...kernelPreference,\n            shutdownOnDispose: config.kernelShutdown,\n            autoStartDefault: config.autoStartDefault\n        };\n    }\n    /**\n     * Set URI fragment identifier.\n     */\n    setFragment(fragment) {\n        void this.context.ready.then(() => {\n            void this.content.setFragment(fragment);\n        });\n    }\n    /**\n     * Dispose of the resources used by the widget.\n     */\n    dispose() {\n        this.content.dispose();\n        super.dispose();\n    }\n    /**\n     * Prints the notebook by converting to HTML with nbconvert.\n     */\n    [Printing.symbol]() {\n        return async () => {\n            // Save before generating HTML\n            if (this.context.model.dirty && !this.context.model.readOnly) {\n                await this.context.save();\n            }\n            await Printing.printURL(PageConfig.getNBConvertURL({\n                format: 'html',\n                download: false,\n                path: this.context.path\n            }));\n        };\n    }\n    /**\n     * A message handler invoked on a 'before-hide' message.\n     */\n    onBeforeHide(msg) {\n        super.onBeforeHide(msg);\n        // Inform the windowed list that the notebook is gonna be hidden\n        this.content.isParentHidden = true;\n    }\n    /**\n     * A message handler invoked on a 'before-show' message.\n     */\n    onBeforeShow(msg) {\n        // Inform the windowed list that the notebook is gonna be shown\n        // Use onBeforeShow instead of onAfterShow to take into account\n        // resizing (like sidebars got expanded before switching to the notebook tab)\n        this.content.isParentHidden = false;\n        super.onBeforeShow(msg);\n    }\n    /**\n     * Handle a change in the kernel by updating the document metadata.\n     */\n    _onKernelChanged(sender, args) {\n        if (!this.model || !args.newValue) {\n            return;\n        }\n        const { newValue } = args;\n        void newValue.info.then(info => {\n            var _a;\n            if (this.model &&\n                ((_a = this.context.sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel) === newValue) {\n                this._updateLanguage(info.language_info);\n            }\n        });\n        void this._updateSpec(newValue);\n    }\n    _onSessionStatusChanged(sender, status) {\n        var _a;\n        // If the status is autorestarting, and we aren't already in a series of\n        // autorestarts, show the dialog.\n        if (status === 'autorestarting' && !this._autorestarting) {\n            // The kernel died and the server is restarting it. We notify the user so\n            // they know why their kernel state is gone.\n            void showDialog({\n                title: this._trans.__('Kernel Restarting'),\n                body: this._trans.__('The kernel for %1 appears to have died. It will restart automatically.', (_a = this.sessionContext.session) === null || _a === void 0 ? void 0 : _a.path),\n                buttons: [Dialog.okButton({ label: this._trans.__('Ok') })]\n            });\n            this._autorestarting = true;\n        }\n        else if (status === 'restarting') {\n            // Another autorestart attempt will first change the status to\n            // restarting, then to autorestarting again, so we don't reset the\n            // autorestarting status if the status is 'restarting'.\n            /* no-op */\n        }\n        else {\n            this._autorestarting = false;\n        }\n    }\n    /**\n     * Update the kernel language.\n     */\n    _updateLanguage(language) {\n        this.model.setMetadata('language_info', language);\n    }\n    /**\n     * Update the kernel spec.\n     */\n    async _updateSpec(kernel) {\n        const spec = await kernel.spec;\n        if (this.isDisposed) {\n            return;\n        }\n        this.model.setMetadata('kernelspec', {\n            name: kernel.name,\n            display_name: spec === null || spec === void 0 ? void 0 : spec.display_name,\n            language: spec === null || spec === void 0 ? void 0 : spec.language\n        });\n    }\n}\n/**\n * A namespace for `NotebookPanel` statics.\n */\n(function (NotebookPanel) {\n    /**\n     * The default implementation of an `IContentFactory`.\n     */\n    class ContentFactory extends Notebook.ContentFactory {\n        /**\n         * Create a new content area for the panel.\n         */\n        createNotebook(options) {\n            return new Notebook(options);\n        }\n    }\n    NotebookPanel.ContentFactory = ContentFactory;\n    /**\n     * The notebook renderer token.\n     */\n    NotebookPanel.IContentFactory = new Token('@jupyterlab/notebook:IContentFactory', `A factory object that creates new notebooks.\n    Use this if you want to create and host notebooks in your own UI elements.`);\n})(NotebookPanel || (NotebookPanel = {}));\n//# sourceMappingURL=panel.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Dialog, showDialog } from '@jupyterlab/apputils';\nimport { CodeCell, createCellSearchProvider } from '@jupyterlab/cells';\nimport { SearchProvider } from '@jupyterlab/documentsearch';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { ArrayExt } from '@lumino/algorithm';\nimport { NotebookPanel } from './panel';\n/**\n * Notebook document search provider\n */\nexport class NotebookSearchProvider extends SearchProvider {\n    /**\n     * Constructor\n     *\n     * @param widget The widget to search in\n     * @param translator Application translator\n     */\n    constructor(widget, translator = nullTranslator) {\n        super(widget);\n        this.translator = translator;\n        this._textSelection = null;\n        this._currentProviderIndex = null;\n        this._delayedActiveCellChangeHandler = null;\n        this._onSelection = false;\n        this._selectedCells = 1;\n        this._selectedLines = 0;\n        this._query = null;\n        this._searchProviders = [];\n        this._editorSelectionsObservable = null;\n        this._selectionSearchMode = 'cells';\n        this._selectionLock = false;\n        this._searchActive = false;\n        this._handleHighlightsAfterActiveCellChange =\n            this._handleHighlightsAfterActiveCellChange.bind(this);\n        this.widget.model.cells.changed.connect(this._onCellsChanged, this);\n        this.widget.content.activeCellChanged.connect(this._onActiveCellChanged, this);\n        this.widget.content.selectionChanged.connect(this._onCellSelectionChanged, this);\n        this.widget.content.stateChanged.connect(this._onNotebookStateChanged, this);\n        this._observeActiveCell();\n        this._filtersChanged.connect(this._setEnginesSelectionSearchMode, this);\n    }\n    _onNotebookStateChanged(_, args) {\n        if (args.name === 'mode') {\n            // Delay the update to ensure that `document.activeElement` settled.\n            window.setTimeout(() => {\n                var _a;\n                if (args.newValue === 'command' &&\n                    ((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.closest('.jp-DocumentSearch-overlay'))) {\n                    // Do not request updating mode when user switched focus to search overlay.\n                    return;\n                }\n                this._updateSelectionMode();\n                this._filtersChanged.emit();\n            }, 0);\n        }\n    }\n    /**\n     * Report whether or not this provider has the ability to search on the given object\n     *\n     * @param domain Widget to test\n     * @returns Search ability\n     */\n    static isApplicable(domain) {\n        // check to see if the CMSearchProvider can search on the\n        // first cell, false indicates another editor is present\n        return domain instanceof NotebookPanel;\n    }\n    /**\n     * Instantiate a search provider for the notebook panel.\n     *\n     * #### Notes\n     * The widget provided is always checked using `isApplicable` before calling\n     * this factory.\n     *\n     * @param widget The widget to search on\n     * @param translator [optional] The translator object\n     *\n     * @returns The search provider on the notebook panel\n     */\n    static createNew(widget, translator) {\n        return new NotebookSearchProvider(widget, translator);\n    }\n    /**\n     * The current index of the selected match.\n     */\n    get currentMatchIndex() {\n        let agg = 0;\n        let found = false;\n        for (let idx = 0; idx < this._searchProviders.length; idx++) {\n            const provider = this._searchProviders[idx];\n            if (this._currentProviderIndex == idx) {\n                const localMatch = provider.currentMatchIndex;\n                if (localMatch === null) {\n                    return null;\n                }\n                agg += localMatch;\n                found = true;\n                break;\n            }\n            else {\n                agg += provider.matchesCount;\n            }\n        }\n        return found ? agg : null;\n    }\n    /**\n     * The number of matches.\n     */\n    get matchesCount() {\n        return this._searchProviders.reduce((sum, provider) => (sum += provider.matchesCount), 0);\n    }\n    /**\n     * Set to true if the widget under search is read-only, false\n     * if it is editable. Will be used to determine whether to show\n     * the replace option.\n     */\n    get isReadOnly() {\n        var _a, _b, _c;\n        return (_c = (_b = (_a = this.widget) === null || _a === void 0 ? void 0 : _a.content.model) === null || _b === void 0 ? void 0 : _b.readOnly) !== null && _c !== void 0 ? _c : false;\n    }\n    /**\n     * Support for options adjusting replacement behavior.\n     */\n    get replaceOptionsSupport() {\n        return {\n            preserveCase: true\n        };\n    }\n    getSelectionState() {\n        const cellMode = this._selectionSearchMode === 'cells';\n        const selectedCount = cellMode ? this._selectedCells : this._selectedLines;\n        return selectedCount > 1\n            ? 'multiple'\n            : selectedCount === 1 && !cellMode\n                ? 'single'\n                : 'none';\n    }\n    /**\n     * Dispose of the resources held by the search provider.\n     *\n     * #### Notes\n     * If the object's `dispose` method is called more than once, all\n     * calls made after the first will be a no-op.\n     *\n     * #### Undefined Behavior\n     * It is undefined behavior to use any functionality of the object\n     * after it has been disposed unless otherwise explicitly noted.\n     */\n    dispose() {\n        var _a;\n        if (this.isDisposed) {\n            return;\n        }\n        this.widget.content.activeCellChanged.disconnect(this._onActiveCellChanged, this);\n        (_a = this.widget.model) === null || _a === void 0 ? void 0 : _a.cells.changed.disconnect(this._onCellsChanged, this);\n        this.widget.content.stateChanged.disconnect(this._onNotebookStateChanged, this);\n        this.widget.content.selectionChanged.disconnect(this._onCellSelectionChanged, this);\n        this._stopObservingLastCell();\n        super.dispose();\n        const index = this.widget.content.activeCellIndex;\n        this.endQuery()\n            .then(() => {\n            if (!this.widget.isDisposed) {\n                this.widget.content.activeCellIndex = index;\n            }\n        })\n            .catch(reason => {\n            console.error(`Fail to end search query in notebook:\\n${reason}`);\n        });\n    }\n    /**\n     * Get the filters for the given provider.\n     *\n     * @returns The filters.\n     */\n    getFilters() {\n        const trans = this.translator.load('jupyterlab');\n        return {\n            output: {\n                title: trans.__('Search Cell Outputs'),\n                description: trans.__('Search in the cell outputs.'),\n                disabledDescription: trans.__('Search in the cell outputs (not available when replace options are shown).'),\n                default: false,\n                supportReplace: false\n            },\n            selection: {\n                title: this._selectionSearchMode === 'cells'\n                    ? trans._n('Search in %1 Selected Cell', 'Search in %1 Selected Cells', this._selectedCells)\n                    : trans._n('Search in %1 Selected Line', 'Search in %1 Selected Lines', this._selectedLines),\n                description: trans.__('Search only in the selected cells or text (depending on edit/command mode).'),\n                default: false,\n                supportReplace: true\n            }\n        };\n    }\n    /**\n     * Update the search in selection mode; it should only be called when user\n     * navigates the notebook (enters editing/command mode, changes selection)\n     * but not when the searchbox gets focused (switching the notebook to command\n     * mode) nor when search highlights a match (switching notebook to edit mode).\n     */\n    _updateSelectionMode() {\n        if (this._selectionLock) {\n            return;\n        }\n        this._selectionSearchMode =\n            this._selectedCells === 1 &&\n                this.widget.content.mode === 'edit' &&\n                this._selectedLines !== 0\n                ? 'text'\n                : 'cells';\n    }\n    /**\n     * Get an initial query value if applicable so that it can be entered\n     * into the search box as an initial query\n     *\n     * @returns Initial value used to populate the search box.\n     */\n    getInitialQuery() {\n        var _a;\n        // Get whatever is selected in the browser window.\n        return ((_a = window.getSelection()) === null || _a === void 0 ? void 0 : _a.toString()) || '';\n    }\n    /**\n     * Clear currently highlighted match.\n     */\n    async clearHighlight() {\n        this._selectionLock = true;\n        if (this._currentProviderIndex !== null &&\n            this._currentProviderIndex < this._searchProviders.length) {\n            await this._searchProviders[this._currentProviderIndex].clearHighlight();\n            this._currentProviderIndex = null;\n        }\n        this._selectionLock = false;\n    }\n    /**\n     * Highlight the next match.\n     *\n     * @param loop Whether to loop within the matches list.\n     *\n     * @returns The next match if available.\n     */\n    async highlightNext(loop = true, options) {\n        const match = await this._stepNext(false, loop, options);\n        return match !== null && match !== void 0 ? match : undefined;\n    }\n    /**\n     * Highlight the previous match.\n     *\n     * @param loop Whether to loop within the matches list.\n     *\n     * @returns The previous match if available.\n     */\n    async highlightPrevious(loop = true, options) {\n        const match = await this._stepNext(true, loop, options);\n        return match !== null && match !== void 0 ? match : undefined;\n    }\n    /**\n     * Search for a regular expression with optional filters.\n     *\n     * @param query A regular expression to test for\n     * @param filters Filter parameters to pass to provider\n     *\n     */\n    async startQuery(query, filters) {\n        if (!this.widget) {\n            return;\n        }\n        await this.endQuery();\n        this._searchActive = true;\n        let cells = this.widget.content.widgets;\n        this._query = query;\n        this._filters = {\n            output: false,\n            selection: false,\n            ...(filters !== null && filters !== void 0 ? filters : {})\n        };\n        this._onSelection = this._filters.selection;\n        const currentProviderIndex = this.widget.content.activeCellIndex;\n        // For each cell, create a search provider\n        this._searchProviders = await Promise.all(cells.map(async (cell, index) => {\n            const cellSearchProvider = createCellSearchProvider(cell);\n            await cellSearchProvider.setIsActive(!this._filters.selection ||\n                this.widget.content.isSelectedOrActive(cell));\n            if (this._onSelection &&\n                this._selectionSearchMode === 'text' &&\n                index === currentProviderIndex) {\n                if (this._textSelection) {\n                    await cellSearchProvider.setSearchSelection(this._textSelection);\n                }\n            }\n            await cellSearchProvider.startQuery(query, this._filters);\n            return cellSearchProvider;\n        }));\n        this._currentProviderIndex = currentProviderIndex;\n        // We do not want to show the first \"current\" closest to cursor as depending\n        // on which way the user dragged the selection it would be:\n        // - the first or last match when searching in selection\n        // - the next match when starting search using ctrl + f\n        // `scroll` and `select` are disabled because `startQuery` is also used as\n        // \"restartQuery\" after each text change and if those were enabled, we would\n        // steal the cursor.\n        await this.highlightNext(true, {\n            from: 'selection-start',\n            scroll: false,\n            select: false\n        });\n        return Promise.resolve();\n    }\n    /**\n     * Stop the search and clear all internal state.\n     */\n    async endQuery() {\n        await Promise.all(this._searchProviders.map(provider => {\n            return provider.endQuery().then(() => {\n                provider.dispose();\n            });\n        }));\n        this._searchActive = false;\n        this._searchProviders.length = 0;\n        this._currentProviderIndex = null;\n    }\n    /**\n     * Replace the currently selected match with the provided text\n     *\n     * @param newText The replacement text.\n     * @param loop Whether to loop within the matches list.\n     *\n     * @returns A promise that resolves with a boolean indicating whether a replace occurred.\n     */\n    async replaceCurrentMatch(newText, loop = true, options) {\n        let replaceOccurred = false;\n        const unrenderMarkdownCell = async (highlightNext = false) => {\n            var _a;\n            // Unrendered markdown cell\n            const activeCell = (_a = this.widget) === null || _a === void 0 ? void 0 : _a.content.activeCell;\n            if ((activeCell === null || activeCell === void 0 ? void 0 : activeCell.model.type) === 'markdown' &&\n                activeCell.rendered) {\n                activeCell.rendered = false;\n                if (highlightNext) {\n                    await this.highlightNext(loop);\n                }\n            }\n        };\n        if (this._currentProviderIndex !== null) {\n            await unrenderMarkdownCell();\n            const searchEngine = this._searchProviders[this._currentProviderIndex];\n            replaceOccurred = await searchEngine.replaceCurrentMatch(newText, false, options);\n            if (searchEngine.currentMatchIndex === null) {\n                // switch to next cell\n                await this.highlightNext(loop, { from: 'previous-match' });\n            }\n        }\n        // TODO: markdown unrendering/highlighting sequence is likely incorrect\n        // Force highlighting the first hit in the unrendered cell\n        await unrenderMarkdownCell(true);\n        return replaceOccurred;\n    }\n    /**\n     * Replace all matches in the notebook with the provided text\n     *\n     * @param newText The replacement text.\n     *\n     * @returns A promise that resolves with a boolean indicating whether a replace occurred.\n     */\n    async replaceAllMatches(newText, options) {\n        const replacementOccurred = await Promise.all(this._searchProviders.map(provider => {\n            return provider.replaceAllMatches(newText, options);\n        }));\n        return replacementOccurred.includes(true);\n    }\n    async validateFilter(name, value) {\n        if (name !== 'output') {\n            // Bail early\n            return value;\n        }\n        // If value is true and some cells have never been rendered, ask confirmation.\n        if (value &&\n            this.widget.content.widgets.some(w => w instanceof CodeCell && w.isPlaceholder())) {\n            const trans = this.translator.load('jupyterlab');\n            const reply = await showDialog({\n                title: trans.__('Confirmation'),\n                body: trans.__('Searching outputs requires you to run all cells and render their outputs. Are you sure you want to search in the cell outputs?'),\n                buttons: [\n                    Dialog.cancelButton({ label: trans.__('Cancel') }),\n                    Dialog.okButton({ label: trans.__('Ok') })\n                ]\n            });\n            if (reply.button.accept) {\n                this.widget.content.widgets.forEach((w, i) => {\n                    if (w instanceof CodeCell && w.isPlaceholder()) {\n                        this.widget.content.renderCellOutputs(i);\n                    }\n                });\n            }\n            else {\n                return false;\n            }\n        }\n        return value;\n    }\n    _addCellProvider(index) {\n        var _a, _b;\n        const cell = this.widget.content.widgets[index];\n        const cellSearchProvider = createCellSearchProvider(cell);\n        ArrayExt.insert(this._searchProviders, index, cellSearchProvider);\n        void cellSearchProvider\n            .setIsActive(!((_b = (_a = this._filters) === null || _a === void 0 ? void 0 : _a.selection) !== null && _b !== void 0 ? _b : false) ||\n            this.widget.content.isSelectedOrActive(cell))\n            .then(() => {\n            if (this._searchActive) {\n                void cellSearchProvider.startQuery(this._query, this._filters);\n            }\n        });\n    }\n    _removeCellProvider(index) {\n        const provider = ArrayExt.removeAt(this._searchProviders, index);\n        provider === null || provider === void 0 ? void 0 : provider.dispose();\n    }\n    async _onCellsChanged(cells, changes) {\n        switch (changes.type) {\n            case 'add':\n                changes.newValues.forEach((model, index) => {\n                    this._addCellProvider(changes.newIndex + index);\n                });\n                break;\n            case 'move':\n                ArrayExt.move(this._searchProviders, changes.oldIndex, changes.newIndex);\n                break;\n            case 'remove':\n                for (let index = 0; index < changes.oldValues.length; index++) {\n                    this._removeCellProvider(changes.oldIndex);\n                }\n                break;\n            case 'set':\n                changes.newValues.forEach((model, index) => {\n                    this._addCellProvider(changes.newIndex + index);\n                    this._removeCellProvider(changes.newIndex + index + 1);\n                });\n                break;\n        }\n        this._stateChanged.emit();\n    }\n    async _stepNext(reverse = false, loop = false, options) {\n        var _a;\n        const activateNewMatch = async (match) => {\n            var _a;\n            const shouldScroll = (_a = options === null || options === void 0 ? void 0 : options.scroll) !== null && _a !== void 0 ? _a : true;\n            if (!shouldScroll) {\n                // do not activate the match if scrolling was disabled\n                return;\n            }\n            this._selectionLock = true;\n            if (this.widget.content.activeCellIndex !== this._currentProviderIndex) {\n                this.widget.content.activeCellIndex = this._currentProviderIndex;\n            }\n            if (this.widget.content.activeCellIndex === -1) {\n                console.warn('No active cell (no cells or no model), aborting search');\n                this._selectionLock = false;\n                return;\n            }\n            const activeCell = this.widget.content.activeCell;\n            if (!activeCell.inViewport) {\n                try {\n                    await this.widget.content.scrollToItem(this._currentProviderIndex);\n                }\n                catch (error) {\n                    // no-op\n                }\n            }\n            // Unhide cell\n            if (activeCell.inputHidden) {\n                activeCell.inputHidden = false;\n            }\n            if (!activeCell.inViewport) {\n                this._selectionLock = false;\n                // It will not be possible the cell is not in the view\n                return;\n            }\n            await activeCell.ready;\n            const editor = activeCell.editor;\n            editor.revealPosition(editor.getPositionAt(match.position));\n            this._selectionLock = false;\n        };\n        if (this._currentProviderIndex === null) {\n            this._currentProviderIndex = this.widget.content.activeCellIndex;\n        }\n        // When going to previous match in cell mode and there is no current we\n        // want to skip the active cell and go to the previous cell; in edit mode\n        // the appropriate behaviour is induced by searching from nearest cursor.\n        if (reverse && this.widget.content.mode === 'command') {\n            const searchEngine = this._searchProviders[this._currentProviderIndex];\n            const currentMatch = searchEngine.getCurrentMatch();\n            if (!currentMatch) {\n                this._currentProviderIndex -= 1;\n            }\n            if (loop) {\n                this._currentProviderIndex =\n                    (this._currentProviderIndex + this._searchProviders.length) %\n                        this._searchProviders.length;\n            }\n        }\n        // If we're looking for the next match after the previous match,\n        // and we've reached the end of the current cell, start at the next one, if possible\n        const from = (_a = options === null || options === void 0 ? void 0 : options.from) !== null && _a !== void 0 ? _a : '';\n        const atEndOfCurrentCell = from === 'previous-match' &&\n            this._searchProviders[this._currentProviderIndex].currentMatchIndex ===\n                null;\n        const startIndex = this._currentProviderIndex;\n        // If we need to move to the next cell or loop, reset the position of the current search provider.\n        if (atEndOfCurrentCell) {\n            void this._searchProviders[this._currentProviderIndex].clearHighlight();\n        }\n        // If we're at the end of the last cell in the provider list and we need to loop, do so\n        if (loop &&\n            atEndOfCurrentCell &&\n            this._currentProviderIndex + 1 >= this._searchProviders.length) {\n            this._currentProviderIndex = 0;\n        }\n        else {\n            this._currentProviderIndex += atEndOfCurrentCell ? 1 : 0;\n        }\n        do {\n            const searchEngine = this._searchProviders[this._currentProviderIndex];\n            const match = reverse\n                ? await searchEngine.highlightPrevious(false, options)\n                : await searchEngine.highlightNext(false, options);\n            if (match) {\n                await activateNewMatch(match);\n                return match;\n            }\n            else {\n                this._currentProviderIndex =\n                    this._currentProviderIndex + (reverse ? -1 : 1);\n                if (loop) {\n                    this._currentProviderIndex =\n                        (this._currentProviderIndex + this._searchProviders.length) %\n                            this._searchProviders.length;\n                }\n            }\n        } while (loop\n            ? // We looped on all cells, no hit found\n                this._currentProviderIndex !== startIndex\n            : 0 <= this._currentProviderIndex &&\n                this._currentProviderIndex < this._searchProviders.length);\n        if (loop) {\n            // try the first provider again\n            const searchEngine = this._searchProviders[startIndex];\n            const match = reverse\n                ? await searchEngine.highlightPrevious(false, options)\n                : await searchEngine.highlightNext(false, options);\n            if (match) {\n                await activateNewMatch(match);\n                return match;\n            }\n        }\n        this._currentProviderIndex = null;\n        return null;\n    }\n    async _onActiveCellChanged() {\n        if (this._delayedActiveCellChangeHandler !== null) {\n            // Prevent handler from running twice if active cell is changed twice\n            // within the same task of the event loop.\n            clearTimeout(this._delayedActiveCellChangeHandler);\n            this._delayedActiveCellChangeHandler = null;\n        }\n        if (this.widget.content.activeCellIndex !== this._currentProviderIndex) {\n            // At this time we cannot handle the change of active cell, because\n            // `activeCellChanged` is also emitted in the middle of cell selection\n            // change, and if selection is getting extended, we do not want to clear\n            // highlights just to re-apply them shortly after, which has side effects\n            // impacting the functionality and performance.\n            this._delayedActiveCellChangeHandler = window.setTimeout(() => {\n                this.delayedActiveCellChangeHandlerReady =\n                    this._handleHighlightsAfterActiveCellChange();\n            }, 0);\n        }\n        this._observeActiveCell();\n    }\n    async _handleHighlightsAfterActiveCellChange() {\n        if (this._onSelection) {\n            const previousProviderCell = this._currentProviderIndex !== null &&\n                this._currentProviderIndex < this.widget.content.widgets.length\n                ? this.widget.content.widgets[this._currentProviderIndex]\n                : null;\n            const previousProviderInCurrentSelection = previousProviderCell &&\n                this.widget.content.isSelectedOrActive(previousProviderCell);\n            if (!previousProviderInCurrentSelection) {\n                await this._updateCellSelection();\n                // Clear highlight from previous provider\n                await this.clearHighlight();\n                // If we are searching in all cells, we should not change the active\n                // provider when switching active cell to preserve current match;\n                // if we are searching within selected cells we should update\n                this._currentProviderIndex = this.widget.content.activeCellIndex;\n            }\n        }\n        await this._ensureCurrentMatch();\n    }\n    /**\n     * If there are results but no match is designated as current,\n     * mark a result as current and highlight it.\n     */\n    async _ensureCurrentMatch() {\n        if (this._currentProviderIndex !== null) {\n            const searchEngine = this._searchProviders[this._currentProviderIndex];\n            if (!searchEngine) {\n                // This can happen when `startQuery()` has not finished yet.\n                return;\n            }\n            const currentMatch = searchEngine.getCurrentMatch();\n            if (!currentMatch && this.matchesCount) {\n                // Select a match as current by highlighting next (with looping) from\n                // the selection start, to prevent \"current\" match from jumping around.\n                await this.highlightNext(true, {\n                    from: 'start',\n                    scroll: false,\n                    select: false\n                });\n            }\n        }\n    }\n    _observeActiveCell() {\n        var _a;\n        const editor = (_a = this.widget.content.activeCell) === null || _a === void 0 ? void 0 : _a.editor;\n        if (!editor) {\n            return;\n        }\n        this._stopObservingLastCell();\n        editor.model.selections.changed.connect(this._setSelectedLines, this);\n        this._editorSelectionsObservable = editor.model.selections;\n    }\n    _stopObservingLastCell() {\n        if (this._editorSelectionsObservable) {\n            this._editorSelectionsObservable.changed.disconnect(this._setSelectedLines, this);\n        }\n    }\n    _setSelectedLines() {\n        var _a;\n        const editor = (_a = this.widget.content.activeCell) === null || _a === void 0 ? void 0 : _a.editor;\n        if (!editor) {\n            return;\n        }\n        const selection = editor.getSelection();\n        const { start, end } = selection;\n        const newLines = end.line === start.line && end.column === start.column\n            ? 0\n            : end.line - start.line + 1;\n        this._textSelection = selection;\n        if (newLines !== this._selectedLines) {\n            this._selectedLines = newLines;\n            this._updateSelectionMode();\n        }\n        this._filtersChanged.emit();\n    }\n    /**\n     * Set whether the engines should search within selection only or full text.\n     */\n    async _setEnginesSelectionSearchMode() {\n        let textMode;\n        if (!this._onSelection) {\n            // When search in selection is off we always search full text\n            textMode = false;\n        }\n        else {\n            // When search in selection is off we either search in full cells\n            // (toggling off isActive flag on search engines of non-selected cells)\n            // or in selected text of the active cell.\n            textMode = this._selectionSearchMode === 'text';\n        }\n        if (this._selectionLock) {\n            return;\n        }\n        // Clear old selection restrictions or if relevant, set current restrictions for active provider.\n        await Promise.all(this._searchProviders.map((provider, index) => {\n            const isCurrent = this.widget.content.activeCellIndex === index;\n            provider.setProtectSelection(isCurrent && this._onSelection);\n            return provider.setSearchSelection(isCurrent && textMode ? this._textSelection : null);\n        }));\n    }\n    async _onCellSelectionChanged() {\n        if (this._delayedActiveCellChangeHandler !== null) {\n            // Avoid race condition due to `activeCellChanged` and `selectionChanged`\n            // signals firing in short sequence when selection gets extended, with\n            // handling of the former having potential to undo selection set by the latter.\n            clearTimeout(this._delayedActiveCellChangeHandler);\n            this._delayedActiveCellChangeHandler = null;\n        }\n        await this._updateCellSelection();\n        if (this._currentProviderIndex === null) {\n            // For consistency we set the first cell in selection as current provider.\n            const firstSelectedCellIndex = this.widget.content.widgets.findIndex(cell => this.widget.content.isSelectedOrActive(cell));\n            this._currentProviderIndex = firstSelectedCellIndex;\n        }\n        await this._ensureCurrentMatch();\n    }\n    async _updateCellSelection() {\n        const cells = this.widget.content.widgets;\n        let selectedCells = 0;\n        await Promise.all(cells.map(async (cell, index) => {\n            const provider = this._searchProviders[index];\n            const isSelected = this.widget.content.isSelectedOrActive(cell);\n            if (isSelected) {\n                selectedCells += 1;\n            }\n            if (provider && this._onSelection) {\n                await provider.setIsActive(isSelected);\n            }\n        }));\n        if (selectedCells !== this._selectedCells) {\n            this._selectedCells = selectedCells;\n            this._updateSelectionMode();\n        }\n        this._filtersChanged.emit();\n    }\n}\n//# sourceMappingURL=searchprovider.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Cell, MarkdownCell } from '@jupyterlab/cells';\nimport { TableOfContentsFactory, TableOfContentsModel, TableOfContentsUtils } from '@jupyterlab/toc';\nimport { NotebookActions } from './actions';\n/**\n * Cell running status\n */\nexport var RunningStatus;\n(function (RunningStatus) {\n    /**\n     * Cell is idle\n     */\n    RunningStatus[RunningStatus[\"Idle\"] = -1] = \"Idle\";\n    /**\n     * Cell execution is unsuccessful\n     */\n    RunningStatus[RunningStatus[\"Error\"] = -0.5] = \"Error\";\n    /**\n     * Cell execution is scheduled\n     */\n    RunningStatus[RunningStatus[\"Scheduled\"] = 0] = \"Scheduled\";\n    /**\n     * Cell is running\n     */\n    RunningStatus[RunningStatus[\"Running\"] = 1] = \"Running\";\n})(RunningStatus || (RunningStatus = {}));\n/**\n * Table of content model for Notebook files.\n */\nexport class NotebookToCModel extends TableOfContentsModel {\n    /**\n     * Constructor\n     *\n     * @param widget The widget to search in\n     * @param parser Markdown parser\n     * @param sanitizer Sanitizer\n     * @param configuration Default model configuration\n     */\n    constructor(widget, parser, sanitizer, configuration) {\n        super(widget, configuration);\n        this.parser = parser;\n        this.sanitizer = sanitizer;\n        /**\n         * Mapping between configuration options and notebook metadata.\n         *\n         * If it starts with `!`, the boolean value of the configuration option is\n         * opposite to the one stored in metadata.\n         * If it contains `/`, the metadata data is nested.\n         */\n        this.configMetadataMap = {\n            numberHeaders: ['toc-autonumbering', 'toc/number_sections'],\n            numberingH1: ['!toc/skip_h1_title'],\n            baseNumbering: ['toc/base_numbering']\n        };\n        this._runningCells = new Array();\n        this._errorCells = new Array();\n        this._cellToHeadingIndex = new WeakMap();\n        void widget.context.ready.then(() => {\n            // Load configuration from metadata\n            this.setConfiguration({});\n        });\n        this.widget.context.model.metadataChanged.connect(this.onMetadataChanged, this);\n        this.widget.content.activeCellChanged.connect(this.onActiveCellChanged, this);\n        NotebookActions.executionScheduled.connect(this.onExecutionScheduled, this);\n        NotebookActions.executed.connect(this.onExecuted, this);\n        NotebookActions.outputCleared.connect(this.onOutputCleared, this);\n        this.headingsChanged.connect(this.onHeadingsChanged, this);\n    }\n    /**\n     * Type of document supported by the model.\n     *\n     * #### Notes\n     * A `data-document-type` attribute with this value will be set\n     * on the tree view `.jp-TableOfContents-content[data-document-type=\"...\"]`\n     */\n    get documentType() {\n        return 'notebook';\n    }\n    /**\n     * Whether the model gets updated even if the table of contents panel\n     * is hidden or not.\n     */\n    get isAlwaysActive() {\n        return true;\n    }\n    /**\n     * List of configuration options supported by the model.\n     */\n    get supportedOptions() {\n        return [\n            'baseNumbering',\n            'maximalDepth',\n            'numberingH1',\n            'numberHeaders',\n            'includeOutput',\n            'syncCollapseState'\n        ];\n    }\n    /**\n     * Get the headings of a given cell.\n     *\n     * @param cell Cell\n     * @returns The associated headings\n     */\n    getCellHeadings(cell) {\n        const headings = new Array();\n        let headingIndex = this._cellToHeadingIndex.get(cell);\n        if (headingIndex !== undefined) {\n            const candidate = this.headings[headingIndex];\n            headings.push(candidate);\n            while (this.headings[headingIndex - 1] &&\n                this.headings[headingIndex - 1].cellRef === candidate.cellRef) {\n                headingIndex--;\n                headings.unshift(this.headings[headingIndex]);\n            }\n        }\n        return headings;\n    }\n    /**\n     * Dispose the object\n     */\n    dispose() {\n        var _a, _b, _c;\n        if (this.isDisposed) {\n            return;\n        }\n        this.headingsChanged.disconnect(this.onHeadingsChanged, this);\n        (_b = (_a = this.widget.context) === null || _a === void 0 ? void 0 : _a.model) === null || _b === void 0 ? void 0 : _b.metadataChanged.disconnect(this.onMetadataChanged, this);\n        (_c = this.widget.content) === null || _c === void 0 ? void 0 : _c.activeCellChanged.disconnect(this.onActiveCellChanged, this);\n        NotebookActions.executionScheduled.disconnect(this.onExecutionScheduled, this);\n        NotebookActions.executed.disconnect(this.onExecuted, this);\n        NotebookActions.outputCleared.disconnect(this.onOutputCleared, this);\n        this._runningCells.length = 0;\n        this._errorCells.length = 0;\n        super.dispose();\n    }\n    /**\n     * Model configuration setter.\n     *\n     * @param c New configuration\n     */\n    setConfiguration(c) {\n        // Ensure configuration update\n        const metadataConfig = this.loadConfigurationFromMetadata();\n        super.setConfiguration({ ...this.configuration, ...metadataConfig, ...c });\n    }\n    /**\n     * Callback on heading collapse.\n     *\n     * @param options.heading The heading to change state (all headings if not provided)\n     * @param options.collapsed The new collapsed status (toggle existing status if not provided)\n     */\n    toggleCollapse(options) {\n        super.toggleCollapse(options);\n        this.updateRunningStatus(this.headings);\n    }\n    /**\n     * Produce the headings for a document.\n     *\n     * @returns The list of new headings or `null` if nothing needs to be updated.\n     */\n    getHeadings() {\n        const cells = this.widget.content.widgets;\n        const headings = [];\n        const documentLevels = new Array();\n        // Generate headings by iterating through all notebook cells...\n        for (let i = 0; i < cells.length; i++) {\n            const cell = cells[i];\n            const model = cell.model;\n            switch (model.type) {\n                case 'code': {\n                    // Collapsing cells is incompatible with output headings\n                    if (!this.configuration.syncCollapseState &&\n                        this.configuration.includeOutput) {\n                        headings.push(...TableOfContentsUtils.filterHeadings(cell.headings, this.configuration, documentLevels).map(heading => {\n                            return {\n                                ...heading,\n                                cellRef: cell,\n                                collapsed: false,\n                                isRunning: RunningStatus.Idle\n                            };\n                        }));\n                    }\n                    break;\n                }\n                case 'markdown': {\n                    const cellHeadings = TableOfContentsUtils.filterHeadings(cell.headings, this.configuration, documentLevels).map((heading, index) => {\n                        return {\n                            ...heading,\n                            cellRef: cell,\n                            collapsed: false,\n                            isRunning: RunningStatus.Idle\n                        };\n                    });\n                    // If there are multiple headings, only collapse the highest heading (i.e. minimal level)\n                    // consistent with the cell.headingInfo\n                    if (this.configuration.syncCollapseState &&\n                        cell.headingCollapsed) {\n                        const minLevel = Math.min(...cellHeadings.map(h => h.level));\n                        const minHeading = cellHeadings.find(h => h.level === minLevel);\n                        minHeading.collapsed = cell.headingCollapsed;\n                    }\n                    headings.push(...cellHeadings);\n                    break;\n                }\n            }\n            if (headings.length > 0) {\n                this._cellToHeadingIndex.set(cell, headings.length - 1);\n            }\n        }\n        this.updateRunningStatus(headings);\n        return Promise.resolve(headings);\n    }\n    /**\n     * Test if two headings are equal or not.\n     *\n     * @param heading1 First heading\n     * @param heading2 Second heading\n     * @returns Whether the headings are equal.\n     */\n    isHeadingEqual(heading1, heading2) {\n        return (super.isHeadingEqual(heading1, heading2) &&\n            heading1.cellRef === heading2.cellRef);\n    }\n    /**\n     * Read table of content configuration from notebook metadata.\n     *\n     * @returns ToC configuration from metadata\n     */\n    loadConfigurationFromMetadata() {\n        const nbModel = this.widget.content.model;\n        const newConfig = {};\n        if (nbModel) {\n            for (const option in this.configMetadataMap) {\n                const keys = this.configMetadataMap[option];\n                for (const k of keys) {\n                    let key = k;\n                    const negate = key[0] === '!';\n                    if (negate) {\n                        key = key.slice(1);\n                    }\n                    const keyPath = key.split('/');\n                    let value = nbModel.getMetadata(keyPath[0]);\n                    for (let p = 1; p < keyPath.length; p++) {\n                        value = (value !== null && value !== void 0 ? value : {})[keyPath[p]];\n                    }\n                    if (value !== undefined) {\n                        if (typeof value === 'boolean' && negate) {\n                            value = !value;\n                        }\n                        newConfig[option] = value;\n                    }\n                }\n            }\n        }\n        return newConfig;\n    }\n    onActiveCellChanged(notebook, cell) {\n        // Highlight the first title as active (if multiple titles are in the same cell)\n        const activeHeading = this.getCellHeadings(cell)[0];\n        this.setActiveHeading(activeHeading !== null && activeHeading !== void 0 ? activeHeading : null, false);\n    }\n    onHeadingsChanged() {\n        if (this.widget.content.activeCell) {\n            this.onActiveCellChanged(this.widget.content, this.widget.content.activeCell);\n        }\n    }\n    onExecuted(_, args) {\n        this._runningCells.forEach((cell, index) => {\n            var _a;\n            if (cell === args.cell) {\n                this._runningCells.splice(index, 1);\n                const headingIndex = this._cellToHeadingIndex.get(cell);\n                if (headingIndex !== undefined) {\n                    const heading = this.headings[headingIndex];\n                    // when the execution is not successful but errorName is undefined,\n                    // the execution is interrupted by previous cells\n                    if (args.success || ((_a = args.error) === null || _a === void 0 ? void 0 : _a.errorName) === undefined) {\n                        heading.isRunning = RunningStatus.Idle;\n                        return;\n                    }\n                    heading.isRunning = RunningStatus.Error;\n                    if (!this._errorCells.includes(cell)) {\n                        this._errorCells.push(cell);\n                    }\n                }\n            }\n        });\n        this.updateRunningStatus(this.headings);\n        this.stateChanged.emit();\n    }\n    onExecutionScheduled(_, args) {\n        if (!this._runningCells.includes(args.cell)) {\n            this._runningCells.push(args.cell);\n        }\n        this._errorCells.forEach((cell, index) => {\n            if (cell === args.cell) {\n                this._errorCells.splice(index, 1);\n            }\n        });\n        this.updateRunningStatus(this.headings);\n        this.stateChanged.emit();\n    }\n    onOutputCleared(_, args) {\n        this._errorCells.forEach((cell, index) => {\n            if (cell === args.cell) {\n                this._errorCells.splice(index, 1);\n                const headingIndex = this._cellToHeadingIndex.get(cell);\n                if (headingIndex !== undefined) {\n                    const heading = this.headings[headingIndex];\n                    heading.isRunning = RunningStatus.Idle;\n                }\n            }\n        });\n        this.updateRunningStatus(this.headings);\n        this.stateChanged.emit();\n    }\n    onMetadataChanged() {\n        this.setConfiguration({});\n    }\n    updateRunningStatus(headings) {\n        // Update isRunning\n        this._runningCells.forEach((cell, index) => {\n            const headingIndex = this._cellToHeadingIndex.get(cell);\n            if (headingIndex !== undefined) {\n                const heading = this.headings[headingIndex];\n                // Running is prioritized over Scheduled, so if a heading is\n                // running don't change status\n                if (heading.isRunning !== RunningStatus.Running) {\n                    heading.isRunning =\n                        index > 0 ? RunningStatus.Scheduled : RunningStatus.Running;\n                }\n            }\n        });\n        this._errorCells.forEach((cell, index) => {\n            const headingIndex = this._cellToHeadingIndex.get(cell);\n            if (headingIndex !== undefined) {\n                const heading = this.headings[headingIndex];\n                // Running and Scheduled are prioritized over Error, so only if\n                // a heading is idle will it be set to Error\n                if (heading.isRunning === RunningStatus.Idle) {\n                    heading.isRunning = RunningStatus.Error;\n                }\n            }\n        });\n        let globalIndex = 0;\n        while (globalIndex < headings.length) {\n            const heading = headings[globalIndex];\n            globalIndex++;\n            if (heading.collapsed) {\n                const maxIsRunning = Math.max(heading.isRunning, getMaxIsRunning(headings, heading.level));\n                heading.dataset = {\n                    ...heading.dataset,\n                    'data-running': maxIsRunning.toString()\n                };\n            }\n            else {\n                heading.dataset = {\n                    ...heading.dataset,\n                    'data-running': heading.isRunning.toString()\n                };\n            }\n        }\n        function getMaxIsRunning(headings, collapsedLevel) {\n            let maxIsRunning = RunningStatus.Idle;\n            while (globalIndex < headings.length) {\n                const heading = headings[globalIndex];\n                heading.dataset = {\n                    ...heading.dataset,\n                    'data-running': heading.isRunning.toString()\n                };\n                if (heading.level > collapsedLevel) {\n                    globalIndex++;\n                    maxIsRunning = Math.max(heading.isRunning, maxIsRunning);\n                    if (heading.collapsed) {\n                        maxIsRunning = Math.max(maxIsRunning, getMaxIsRunning(headings, heading.level));\n                        heading.dataset = {\n                            ...heading.dataset,\n                            'data-running': maxIsRunning.toString()\n                        };\n                    }\n                }\n                else {\n                    break;\n                }\n            }\n            return maxIsRunning;\n        }\n    }\n}\n/**\n * Table of content model factory for Notebook files.\n */\nexport class NotebookToCFactory extends TableOfContentsFactory {\n    /**\n     * Constructor\n     *\n     * @param tracker Widget tracker\n     * @param parser Markdown parser\n     * @param sanitizer Sanitizer\n     */\n    constructor(tracker, parser, sanitizer) {\n        super(tracker);\n        this.parser = parser;\n        this.sanitizer = sanitizer;\n        this._scrollToTop = true;\n    }\n    /**\n     * Whether to scroll the active heading to the top\n     * of the document or not.\n     */\n    get scrollToTop() {\n        return this._scrollToTop;\n    }\n    set scrollToTop(v) {\n        this._scrollToTop = v;\n    }\n    /**\n     * Create a new table of contents model for the widget\n     *\n     * @param widget - widget\n     * @param configuration - Table of contents configuration\n     * @returns The table of contents model\n     */\n    _createNew(widget, configuration) {\n        const model = new NotebookToCModel(widget, this.parser, this.sanitizer, configuration);\n        // Connect model signals to notebook panel\n        let headingToElement = new WeakMap();\n        const onActiveHeadingChanged = (model, heading) => {\n            if (heading) {\n                const onCellInViewport = async (cell) => {\n                    if (!cell.inViewport) {\n                        // Bail early\n                        return;\n                    }\n                    const el = headingToElement.get(heading);\n                    if (el) {\n                        if (this.scrollToTop) {\n                            el.scrollIntoView({ block: 'start' });\n                        }\n                        else {\n                            const widgetBox = widget.content.node.getBoundingClientRect();\n                            const elementBox = el.getBoundingClientRect();\n                            if (elementBox.top > widgetBox.bottom ||\n                                elementBox.bottom < widgetBox.top) {\n                                el.scrollIntoView({ block: 'center' });\n                            }\n                        }\n                    }\n                    else {\n                        console.debug('scrolling to heading: using fallback strategy');\n                        await widget.content.scrollToItem(widget.content.activeCellIndex, this.scrollToTop ? 'start' : undefined, 0);\n                    }\n                };\n                const cell = heading.cellRef;\n                const cells = widget.content.widgets;\n                const idx = cells.indexOf(cell);\n                // Switch to command mode to avoid entering Markdown cell in edit mode\n                // if the document was in edit mode\n                if (cell.model.type == 'markdown' && widget.content.mode != 'command') {\n                    widget.content.mode = 'command';\n                }\n                widget.content.activeCellIndex = idx;\n                if (cell.inViewport) {\n                    onCellInViewport(cell).catch(reason => {\n                        console.error(`Fail to scroll to cell to display the required heading (${reason}).`);\n                    });\n                }\n                else {\n                    widget.content\n                        .scrollToItem(idx, this.scrollToTop ? 'start' : undefined)\n                        .then(() => {\n                        return onCellInViewport(cell);\n                    })\n                        .catch(reason => {\n                        console.error(`Fail to scroll to cell to display the required heading (${reason}).`);\n                    });\n                }\n            }\n        };\n        const findHeadingElement = (cell) => {\n            model.getCellHeadings(cell).forEach(async (heading) => {\n                var _a, _b;\n                const elementId = await getIdForHeading(heading, this.parser, this.sanitizer);\n                const selector = elementId\n                    ? `h${heading.level}[id=\"${CSS.escape(elementId)}\"]`\n                    : `h${heading.level}`;\n                if (heading.outputIndex !== undefined) {\n                    // Code cell\n                    headingToElement.set(heading, TableOfContentsUtils.addPrefix(heading.cellRef.outputArea.widgets[heading.outputIndex].node, selector, (_a = heading.prefix) !== null && _a !== void 0 ? _a : ''));\n                }\n                else {\n                    headingToElement.set(heading, TableOfContentsUtils.addPrefix(heading.cellRef.node, selector, (_b = heading.prefix) !== null && _b !== void 0 ? _b : ''));\n                }\n            });\n        };\n        const onHeadingsChanged = (model) => {\n            if (!this.parser) {\n                return;\n            }\n            // Clear all numbering items\n            TableOfContentsUtils.clearNumbering(widget.content.node);\n            // Create a new mapping\n            headingToElement = new WeakMap();\n            widget.content.widgets.forEach(cell => {\n                findHeadingElement(cell);\n            });\n        };\n        const onHeadingCollapsed = (_, heading) => {\n            var _a, _b, _c, _d;\n            if (model.configuration.syncCollapseState) {\n                if (heading !== null) {\n                    const cell = heading.cellRef;\n                    if (cell.headingCollapsed !== ((_a = heading.collapsed) !== null && _a !== void 0 ? _a : false)) {\n                        cell.headingCollapsed = (_b = heading.collapsed) !== null && _b !== void 0 ? _b : false;\n                    }\n                }\n                else {\n                    const collapseState = (_d = (_c = model.headings[0]) === null || _c === void 0 ? void 0 : _c.collapsed) !== null && _d !== void 0 ? _d : false;\n                    widget.content.widgets.forEach(cell => {\n                        if (cell instanceof MarkdownCell) {\n                            if (cell.headingInfo.level >= 0) {\n                                cell.headingCollapsed = collapseState;\n                            }\n                        }\n                    });\n                }\n            }\n        };\n        const onCellCollapsed = (_, cell) => {\n            if (model.configuration.syncCollapseState) {\n                const h = model.getCellHeadings(cell)[0];\n                if (h) {\n                    model.toggleCollapse({\n                        heading: h,\n                        collapsed: cell.headingCollapsed\n                    });\n                }\n            }\n        };\n        const onCellInViewportChanged = (_, cell) => {\n            if (cell.inViewport) {\n                findHeadingElement(cell);\n            }\n            else {\n                // Needed to remove prefix in cell outputs\n                TableOfContentsUtils.clearNumbering(cell.node);\n            }\n        };\n        void widget.context.ready.then(() => {\n            onHeadingsChanged(model);\n            model.activeHeadingChanged.connect(onActiveHeadingChanged);\n            model.headingsChanged.connect(onHeadingsChanged);\n            model.collapseChanged.connect(onHeadingCollapsed);\n            widget.content.cellCollapsed.connect(onCellCollapsed);\n            widget.content.cellInViewportChanged.connect(onCellInViewportChanged);\n            widget.disposed.connect(() => {\n                model.activeHeadingChanged.disconnect(onActiveHeadingChanged);\n                model.headingsChanged.disconnect(onHeadingsChanged);\n                model.collapseChanged.disconnect(onHeadingCollapsed);\n                widget.content.cellCollapsed.disconnect(onCellCollapsed);\n                widget.content.cellInViewportChanged.disconnect(onCellInViewportChanged);\n            });\n        });\n        return model;\n    }\n}\n/**\n * Get the element id for an heading\n * @param heading Heading\n * @param parser The markdownparser\n * @returns The element id\n */\nexport async function getIdForHeading(heading, parser, sanitizer) {\n    let elementId = null;\n    if (heading.type === Cell.HeadingType.Markdown) {\n        elementId = await TableOfContentsUtils.Markdown.getHeadingId(parser, \n        // Type from TableOfContentsUtils.Markdown.IMarkdownHeading\n        heading.raw, heading.level, sanitizer);\n    }\n    else if (heading.type === Cell.HeadingType.HTML) {\n        // Type from TableOfContentsUtils.IHTMLHeading\n        elementId = heading.id;\n    }\n    return elementId;\n}\n//# sourceMappingURL=toc.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The notebook widget factory token.\n */\nexport const INotebookWidgetFactory = new Token('@jupyterlab/notebook:INotebookWidgetFactory', 'A service to create the notebook viewer.');\n/**\n * The notebook tools token.\n */\nexport const INotebookTools = new Token('@jupyterlab/notebook:INotebookTools', `A service for the \"Notebook Tools\" panel in the\n  right sidebar. Use this to add your own functionality to the panel.`);\n/**\n * The notebook tracker token.\n */\nexport const INotebookTracker = new Token('@jupyterlab/notebook:INotebookTracker', `A widget tracker for notebooks.\n  Use this if you want to be able to iterate over and interact with notebooks\n  created by the application.`);\n/**\n * The notebook cell executor token.\n */\nexport const INotebookCellExecutor = new Token('@jupyterlab/notebook:INotebookCellExecutor', `The notebook cell executor`);\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { WidgetTracker } from '@jupyterlab/apputils';\nimport { Signal } from '@lumino/signaling';\nexport class NotebookTracker extends WidgetTracker {\n    constructor() {\n        super(...arguments);\n        this._activeCell = null;\n        this._activeCellChanged = new Signal(this);\n        this._selectionChanged = new Signal(this);\n    }\n    /**\n     * The currently focused cell.\n     *\n     * #### Notes\n     * This is a read-only property. If there is no cell with the focus, then this\n     * value is `null`.\n     */\n    get activeCell() {\n        const widget = this.currentWidget;\n        if (!widget) {\n            return null;\n        }\n        return widget.content.activeCell || null;\n    }\n    /**\n     * A signal emitted when the current active cell changes.\n     *\n     * #### Notes\n     * If there is no cell with the focus, then `null` will be emitted.\n     */\n    get activeCellChanged() {\n        return this._activeCellChanged;\n    }\n    /**\n     * A signal emitted when the selection state changes.\n     */\n    get selectionChanged() {\n        return this._selectionChanged;\n    }\n    /**\n     * Add a new notebook panel to the tracker.\n     *\n     * @param panel - The notebook panel being added.\n     */\n    add(panel) {\n        const promise = super.add(panel);\n        panel.content.activeCellChanged.connect(this._onActiveCellChanged, this);\n        panel.content.selectionChanged.connect(this._onSelectionChanged, this);\n        return promise;\n    }\n    /**\n     * Dispose of the resources held by the tracker.\n     */\n    dispose() {\n        this._activeCell = null;\n        super.dispose();\n    }\n    /**\n     * Handle the current change event.\n     */\n    onCurrentChanged(widget) {\n        // Store an internal reference to active cell to prevent false positives.\n        const activeCell = this.activeCell;\n        if (activeCell && activeCell === this._activeCell) {\n            return;\n        }\n        this._activeCell = activeCell;\n        if (!widget) {\n            return;\n        }\n        // Since the notebook has changed, immediately signal an active cell change\n        this._activeCellChanged.emit(widget.content.activeCell || null);\n    }\n    _onActiveCellChanged(sender, cell) {\n        // Check if the active cell change happened for the current notebook.\n        if (this.currentWidget && this.currentWidget.content === sender) {\n            this._activeCell = cell || null;\n            this._activeCellChanged.emit(this._activeCell);\n        }\n    }\n    _onSelectionChanged(sender) {\n        // Check if the selection change happened for the current notebook.\n        if (this.currentWidget && this.currentWidget.content === sender) {\n            this._selectionChanged.emit(void 0);\n        }\n    }\n}\n//# sourceMappingURL=tracker.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { notTrustedIcon, trustedIcon, VDomModel, VDomRenderer } from '@jupyterlab/ui-components';\nimport React from 'react';\nconst TRUST_CLASS = 'jp-StatusItem-trust';\n/**\n * Determine the notebook trust status message.\n */\nfunction cellTrust(props, translator) {\n    translator = translator || nullTranslator;\n    const trans = translator.load('jupyterlab');\n    if (props.trustedCells === props.totalCells) {\n        return trans.__('Notebook trusted: %1 of %2 code cells trusted.', props.trustedCells, props.totalCells);\n    }\n    else if (props.activeCellTrusted) {\n        return trans.__('Active cell trusted: %1 of %2 code cells trusted.', props.trustedCells, props.totalCells);\n    }\n    else {\n        return trans.__('Notebook not trusted: %1 of %2 code cells trusted.', props.trustedCells, props.totalCells);\n    }\n}\n/**\n * A pure function for a notebook trust status component.\n *\n * @param props the props for the component.\n *\n * @returns a tsx component for notebook trust.\n */\nfunction NotebookTrustComponent(props) {\n    if (props.allCellsTrusted) {\n        return React.createElement(trustedIcon.react, { top: '2px', stylesheet: 'statusBar' });\n    }\n    else {\n        return React.createElement(notTrustedIcon.react, { top: '2px', stylesheet: 'statusBar' });\n    }\n}\n/**\n * The NotebookTrust status item.\n */\nexport class NotebookTrustStatus extends VDomRenderer {\n    /**\n     * Construct a new status item.\n     */\n    constructor(translator) {\n        super(new NotebookTrustStatus.Model());\n        this.translator = translator || nullTranslator;\n        this.node.classList.add(TRUST_CLASS);\n    }\n    /**\n     * Render the NotebookTrust status item.\n     */\n    render() {\n        if (!this.model) {\n            return null;\n        }\n        const newTitle = cellTrust(this.model, this.translator);\n        if (newTitle !== this.node.title) {\n            this.node.title = newTitle;\n        }\n        return (React.createElement(NotebookTrustComponent, { allCellsTrusted: this.model.trustedCells === this.model.totalCells, activeCellTrusted: this.model.activeCellTrusted, totalCells: this.model.totalCells, trustedCells: this.model.trustedCells }));\n    }\n}\n/**\n * A namespace for NotebookTrust statics.\n */\n(function (NotebookTrustStatus) {\n    /**\n     * A VDomModel for the NotebookTrust status item.\n     */\n    class Model extends VDomModel {\n        constructor() {\n            super(...arguments);\n            this._trustedCells = 0;\n            this._totalCells = 0;\n            this._activeCellTrusted = false;\n            this._notebook = null;\n        }\n        /**\n         * The number of trusted code cells in the current notebook.\n         */\n        get trustedCells() {\n            return this._trustedCells;\n        }\n        /**\n         * The total number of code cells in the current notebook.\n         */\n        get totalCells() {\n            return this._totalCells;\n        }\n        /**\n         * Whether the active cell is trusted.\n         */\n        get activeCellTrusted() {\n            return this._activeCellTrusted;\n        }\n        /**\n         * The current notebook for the model.\n         */\n        get notebook() {\n            return this._notebook;\n        }\n        set notebook(model) {\n            const oldNotebook = this._notebook;\n            if (oldNotebook !== null) {\n                oldNotebook.activeCellChanged.disconnect(this._onActiveCellChanged, this);\n                oldNotebook.modelContentChanged.disconnect(this._onModelChanged, this);\n            }\n            const oldState = this._getAllState();\n            this._notebook = model;\n            if (this._notebook === null) {\n                this._trustedCells = 0;\n                this._totalCells = 0;\n                this._activeCellTrusted = false;\n            }\n            else {\n                // Add listeners\n                this._notebook.activeCellChanged.connect(this._onActiveCellChanged, this);\n                this._notebook.modelContentChanged.connect(this._onModelChanged, this);\n                // Derive values\n                if (this._notebook.activeCell) {\n                    this._activeCellTrusted = this._notebook.activeCell.model.trusted;\n                }\n                else {\n                    this._activeCellTrusted = false;\n                }\n                const { total, trusted } = this._deriveCellTrustState(this._notebook.model);\n                this._totalCells = total;\n                this._trustedCells = trusted;\n            }\n            this._triggerChange(oldState, this._getAllState());\n        }\n        /**\n         * When the notebook model changes, update the trust state.\n         */\n        _onModelChanged(notebook) {\n            const oldState = this._getAllState();\n            const { total, trusted } = this._deriveCellTrustState(notebook.model);\n            this._totalCells = total;\n            this._trustedCells = trusted;\n            this._triggerChange(oldState, this._getAllState());\n        }\n        /**\n         * When the active cell changes, update the trust state.\n         */\n        _onActiveCellChanged(model, cell) {\n            const oldState = this._getAllState();\n            if (cell) {\n                this._activeCellTrusted = cell.model.trusted;\n            }\n            else {\n                this._activeCellTrusted = false;\n            }\n            this._triggerChange(oldState, this._getAllState());\n        }\n        /**\n         * Given a notebook model, figure out how many of the code cells are trusted.\n         */\n        _deriveCellTrustState(model) {\n            if (model === null) {\n                return { total: 0, trusted: 0 };\n            }\n            let total = 0;\n            let trusted = 0;\n            for (const cell of model.cells) {\n                if (cell.type !== 'code') {\n                    continue;\n                }\n                total++;\n                if (cell.trusted) {\n                    trusted++;\n                }\n            }\n            return { total, trusted };\n        }\n        /**\n         * Get the current state of the model.\n         */\n        _getAllState() {\n            return [this._trustedCells, this._totalCells, this.activeCellTrusted];\n        }\n        /**\n         * Trigger a change in the renderer.\n         */\n        _triggerChange(oldState, newState) {\n            if (oldState[0] !== newState[0] ||\n                oldState[1] !== newState[1] ||\n                oldState[2] !== newState[2]) {\n                this.stateChanged.emit(void 0);\n            }\n        }\n    }\n    NotebookTrustStatus.Model = Model;\n})(NotebookTrustStatus || (NotebookTrustStatus = {}));\n//# sourceMappingURL=truststatus.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ABCWidgetFactory } from '@jupyterlab/docregistry';\nimport { NotebookPanel } from './panel';\nimport { StaticNotebook } from './widget';\nimport { NotebookHistory } from './history';\n/**\n * A widget factory for notebook panels.\n */\nexport class NotebookWidgetFactory extends ABCWidgetFactory {\n    /**\n     * Construct a new notebook widget factory.\n     *\n     * @param options - The options used to construct the factory.\n     */\n    constructor(options) {\n        super(options);\n        this.rendermime = options.rendermime;\n        this.contentFactory = options.contentFactory;\n        this.mimeTypeService = options.mimeTypeService;\n        this._editorConfig =\n            options.editorConfig || StaticNotebook.defaultEditorConfig;\n        this._notebookConfig =\n            options.notebookConfig || StaticNotebook.defaultNotebookConfig;\n    }\n    /**\n     * A configuration object for cell editor settings.\n     */\n    get editorConfig() {\n        return this._editorConfig;\n    }\n    set editorConfig(value) {\n        this._editorConfig = value;\n    }\n    /**\n     * A configuration object for notebook settings.\n     */\n    get notebookConfig() {\n        return this._notebookConfig;\n    }\n    set notebookConfig(value) {\n        this._notebookConfig = value;\n    }\n    /**\n     * Create a new widget.\n     *\n     * #### Notes\n     * The factory will start the appropriate kernel.\n     */\n    createNewWidget(context, source) {\n        const translator = context.translator;\n        const kernelHistory = new NotebookHistory({\n            sessionContext: context.sessionContext,\n            translator: translator\n        });\n        const nbOptions = {\n            rendermime: source\n                ? source.content.rendermime\n                : this.rendermime.clone({ resolver: context.urlResolver }),\n            contentFactory: this.contentFactory,\n            mimeTypeService: this.mimeTypeService,\n            editorConfig: source ? source.content.editorConfig : this._editorConfig,\n            notebookConfig: source\n                ? source.content.notebookConfig\n                : this._notebookConfig,\n            translator,\n            kernelHistory\n        };\n        const content = this.contentFactory.createNotebook(nbOptions);\n        return new NotebookPanel({ context, content });\n    }\n}\n//# sourceMappingURL=widgetfactory.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module notebook\n */\nexport * from './actions';\nexport * from './cellexecutor';\nexport * from './celllist';\nexport * from './default-toolbar';\nexport * from './executionindicator';\nexport * from './history';\nexport * from './model';\nexport * from './modelfactory';\nexport * from './modestatus';\nexport * from './notebooklspadapter';\nexport * from './notebooktools';\nexport * from './panel';\nexport * from './searchprovider';\nexport * from './toc';\nexport * from './tokens';\nexport * from './tracker';\nexport * from './truststatus';\nexport * from './widget';\nexport * from './widgetfactory';\nexport * from './windowing';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/statusbar/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@lumino/dragdrop/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/documentsearch/style/index.js';\nimport '@jupyterlab/codemirror/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/toc/style/index.js';\nimport '@jupyterlab/cells/style/index.js';\nimport '@jupyterlab/lsp/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\n/**\n * A concrete implementation of IObservableMap<T>.\n */\nexport class ObservableMap {\n    /**\n     * Construct a new observable map.\n     */\n    constructor(options = {}) {\n        this._map = new Map();\n        this._changed = new Signal(this);\n        this._isDisposed = false;\n        this._itemCmp = options.itemCmp || Private.itemCmp;\n        if (options.values) {\n            for (const key in options.values) {\n                this._map.set(key, options.values[key]);\n            }\n        }\n    }\n    /**\n     * The type of the Observable.\n     */\n    get type() {\n        return 'Map';\n    }\n    /**\n     * A signal emitted when the map has changed.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Whether this map has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * The number of key-value pairs in the map.\n     */\n    get size() {\n        return this._map.size;\n    }\n    /**\n     * Set a key-value pair in the map\n     *\n     * @param key - The key to set.\n     *\n     * @param value - The value for the key.\n     *\n     * @returns the old value for the key, or undefined\n     *   if that did not exist.\n     *\n     * @throws if the new value is undefined.\n     *\n     * #### Notes\n     * This is a no-op if the value does not change.\n     */\n    set(key, value) {\n        const oldVal = this._map.get(key);\n        if (value === undefined) {\n            throw Error('Cannot set an undefined value, use remove');\n        }\n        // Bail if the value does not change.\n        const itemCmp = this._itemCmp;\n        if (oldVal !== undefined && itemCmp(oldVal, value)) {\n            return oldVal;\n        }\n        this._map.set(key, value);\n        this._changed.emit({\n            type: oldVal ? 'change' : 'add',\n            key: key,\n            oldValue: oldVal,\n            newValue: value\n        });\n        return oldVal;\n    }\n    /**\n     * Get a value for a given key.\n     *\n     * @param key - the key.\n     *\n     * @returns the value for that key.\n     */\n    get(key) {\n        return this._map.get(key);\n    }\n    /**\n     * Check whether the map has a key.\n     *\n     * @param key - the key to check.\n     *\n     * @returns `true` if the map has the key, `false` otherwise.\n     */\n    has(key) {\n        return this._map.has(key);\n    }\n    /**\n     * Get a list of the keys in the map.\n     *\n     * @returns - a list of keys.\n     */\n    keys() {\n        const keyList = [];\n        this._map.forEach((v, k) => {\n            keyList.push(k);\n        });\n        return keyList;\n    }\n    /**\n     * Get a list of the values in the map.\n     *\n     * @returns - a list of values.\n     */\n    values() {\n        const valList = [];\n        this._map.forEach((v, k) => {\n            valList.push(v);\n        });\n        return valList;\n    }\n    /**\n     * Remove a key from the map\n     *\n     * @param key - the key to remove.\n     *\n     * @returns the value of the given key,\n     *   or undefined if that does not exist.\n     *\n     * #### Notes\n     * This is a no-op if the value does not change.\n     */\n    delete(key) {\n        const oldVal = this._map.get(key);\n        const removed = this._map.delete(key);\n        if (removed) {\n            this._changed.emit({\n                type: 'remove',\n                key: key,\n                oldValue: oldVal,\n                newValue: undefined\n            });\n        }\n        return oldVal;\n    }\n    /**\n     * Set the ObservableMap to an empty map.\n     */\n    clear() {\n        // Delete one by one to emit the correct signals.\n        const keyList = this.keys();\n        for (let i = 0; i < keyList.length; i++) {\n            this.delete(keyList[i]);\n        }\n    }\n    /**\n     * Dispose of the resources held by the map.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n        this._map.clear();\n    }\n}\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The default strict equality item comparator.\n     */\n    function itemCmp(first, second) {\n        return first === second;\n    }\n    Private.itemCmp = itemCmp;\n})(Private || (Private = {}));\n//# sourceMappingURL=observablemap.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { JSONExt } from '@lumino/coreutils';\nimport { Message } from '@lumino/messaging';\nimport { ObservableMap } from './observablemap';\n/**\n * A concrete Observable map for JSON data.\n */\nexport class ObservableJSON extends ObservableMap {\n    /**\n     * Construct a new observable JSON object.\n     */\n    constructor(options = {}) {\n        super({\n            itemCmp: JSONExt.deepEqual,\n            values: options.values\n        });\n    }\n    /**\n     * Serialize the model to JSON.\n     */\n    toJSON() {\n        const out = Object.create(null);\n        const keys = this.keys();\n        for (const key of keys) {\n            const value = this.get(key);\n            if (value !== undefined) {\n                out[key] = JSONExt.deepCopy(value);\n            }\n        }\n        return out;\n    }\n}\n/**\n * The namespace for ObservableJSON static data.\n */\n(function (ObservableJSON) {\n    /**\n     * An observable JSON change message.\n     */\n    class ChangeMessage extends Message {\n        /**\n         * Create a new metadata changed message.\n         */\n        constructor(type, args) {\n            super(type);\n            this.args = args;\n        }\n    }\n    ObservableJSON.ChangeMessage = ChangeMessage;\n})(ObservableJSON || (ObservableJSON = {}));\n//# sourceMappingURL=observablejson.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\n/**\n * A concrete implementation of [[IObservableString]]\n */\nexport class ObservableString {\n    /**\n     * Construct a new observable string.\n     */\n    constructor(initialText = '') {\n        this._text = '';\n        this._isDisposed = false;\n        this._changed = new Signal(this);\n        this._text = initialText;\n    }\n    /**\n     * The type of the Observable.\n     */\n    get type() {\n        return 'String';\n    }\n    /**\n     * A signal emitted when the string has changed.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Set the value of the string.\n     */\n    set text(value) {\n        if (value.length === this._text.length && value === this._text) {\n            return;\n        }\n        this._text = value;\n        this._changed.emit({\n            type: 'set',\n            start: 0,\n            end: value.length,\n            value: value\n        });\n    }\n    /**\n     * Get the value of the string.\n     */\n    get text() {\n        return this._text;\n    }\n    /**\n     * Insert a substring.\n     *\n     * @param index - The starting index.\n     *\n     * @param text - The substring to insert.\n     */\n    insert(index, text, options) {\n        this._text = this._text.slice(0, index) + text + this._text.slice(index);\n        this._changed.emit({\n            type: 'insert',\n            start: index,\n            end: index + text.length,\n            value: text,\n            options\n        });\n    }\n    /**\n     * Remove a substring.\n     *\n     * @param start - The starting index.\n     *\n     * @param end - The ending index.\n     */\n    remove(start, end, options) {\n        const oldValue = this._text.slice(start, end);\n        this._text = this._text.slice(0, start) + this._text.slice(end);\n        this._changed.emit({\n            type: 'remove',\n            start: start,\n            end: end,\n            value: oldValue,\n            options\n        });\n    }\n    /**\n     * Set the ObservableString to an empty string.\n     */\n    clear() {\n        this.text = '';\n    }\n    /**\n     * Test whether the string has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the string.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n        this.clear();\n    }\n}\n//# sourceMappingURL=observablestring.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ArrayExt } from '@lumino/algorithm';\nimport { Signal } from '@lumino/signaling';\n/**\n * A concrete implementation of [[IObservableList]].\n */\nexport class ObservableList {\n    /**\n     * Construct a new observable map.\n     */\n    constructor(options = {}) {\n        this._array = [];\n        this._isDisposed = false;\n        this._changed = new Signal(this);\n        if (options.values) {\n            for (const value of options.values) {\n                this._array.push(value);\n            }\n        }\n        this._itemCmp = options.itemCmp || Private.itemCmp;\n    }\n    /**\n     * The type of this object.\n     */\n    get type() {\n        return 'List';\n    }\n    /**\n     * A signal emitted when the list has changed.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * The length of the list.\n     */\n    get length() {\n        return this._array.length;\n    }\n    /**\n     * Test whether the list has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the list.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n        this.clear();\n    }\n    /**\n     * Create an iterator over the values in the list.\n     *\n     * @returns A new iterator starting at the front of the list.\n     *\n     * #### Complexity\n     * Constant.\n     *\n     * #### Iterator Validity\n     * No changes.\n     */\n    [Symbol.iterator]() {\n        return this._array[Symbol.iterator]();\n    }\n    /**\n     * Get the value at the specified index.\n     *\n     * @param index - The positive integer index of interest.\n     *\n     * @returns The value at the specified index.\n     *\n     * #### Undefined Behavior\n     * An `index` which is non-integral or out of range.\n     */\n    get(index) {\n        return this._array[index];\n    }\n    /**\n     * Set the value at the specified index.\n     *\n     * @param index - The positive integer index of interest.\n     *\n     * @param value - The value to set at the specified index.\n     *\n     * #### Complexity\n     * Constant.\n     *\n     * #### Iterator Validity\n     * No changes.\n     *\n     * #### Undefined Behavior\n     * An `index` which is non-integral or out of range.\n     */\n    set(index, value) {\n        const oldValue = this._array[index];\n        if (value === undefined) {\n            throw new Error('Cannot set an undefined item');\n        }\n        // Bail if the value does not change.\n        const itemCmp = this._itemCmp;\n        if (itemCmp(oldValue, value)) {\n            return;\n        }\n        this._array[index] = value;\n        this._changed.emit({\n            type: 'set',\n            oldIndex: index,\n            newIndex: index,\n            oldValues: [oldValue],\n            newValues: [value]\n        });\n    }\n    /**\n     * Add a value to the end of the list.\n     *\n     * @param value - The value to add to the end of the list.\n     *\n     * @returns The new length of the list.\n     *\n     * #### Complexity\n     * Constant.\n     *\n     * #### Notes\n     * By convention, the oldIndex is set to -1 to indicate\n     * an push operation.\n     *\n     * #### Iterator Validity\n     * No changes.\n     */\n    push(value) {\n        const num = this._array.push(value);\n        this._changed.emit({\n            type: 'add',\n            oldIndex: -1,\n            newIndex: this.length - 1,\n            oldValues: [],\n            newValues: [value]\n        });\n        return num;\n    }\n    /**\n     * Insert a value into the list at a specific index.\n     *\n     * @param index - The index at which to insert the value.\n     *\n     * @param value - The value to set at the specified index.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Iterator Validity\n     * No changes.\n     *\n     * #### Notes\n     * The `index` will be clamped to the bounds of the list.\n     *\n     * By convention, the oldIndex is set to -2 to indicate\n     * an insert operation.\n     *\n     * The value -2 as oldIndex can be used to distinguish from the push\n     * method which will use a value -1.\n     *\n     * #### Undefined Behavior\n     * An `index` which is non-integral.\n     */\n    insert(index, value) {\n        if (index === this._array.length) {\n            this._array.push(value);\n        }\n        else {\n            ArrayExt.insert(this._array, index, value);\n        }\n        this._changed.emit({\n            type: 'add',\n            oldIndex: -2,\n            newIndex: index,\n            oldValues: [],\n            newValues: [value]\n        });\n    }\n    /**\n     * Remove the first occurrence of a value from the list.\n     *\n     * @param value - The value of interest.\n     *\n     * @returns The index of the removed value, or `-1` if the value\n     *   is not contained in the list.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Iterator Validity\n     * Iterators pointing at the removed value and beyond are invalidated.\n     */\n    removeValue(value) {\n        const itemCmp = this._itemCmp;\n        const index = ArrayExt.findFirstIndex(this._array, item => {\n            return itemCmp(item, value);\n        });\n        this.remove(index);\n        return index;\n    }\n    /**\n     * Remove and return the value at a specific index.\n     *\n     * @param index - The index of the value of interest.\n     *\n     * @returns The value at the specified index, or `undefined` if the\n     *   index is out of range.\n     *\n     * #### Complexity\n     * Constant.\n     *\n     * #### Iterator Validity\n     * Iterators pointing at the removed value and beyond are invalidated.\n     *\n     * #### Undefined Behavior\n     * An `index` which is non-integral.\n     */\n    remove(index) {\n        const value = ArrayExt.removeAt(this._array, index);\n        if (value === undefined) {\n            return;\n        }\n        this._changed.emit({\n            type: 'remove',\n            oldIndex: index,\n            newIndex: -1,\n            newValues: [],\n            oldValues: [value]\n        });\n        return value;\n    }\n    /**\n     * Remove all values from the list.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Iterator Validity\n     * All current iterators are invalidated.\n     */\n    clear() {\n        const copy = this._array.slice();\n        this._array.length = 0;\n        this._changed.emit({\n            type: 'remove',\n            oldIndex: 0,\n            newIndex: 0,\n            newValues: [],\n            oldValues: copy\n        });\n    }\n    /**\n     * Move a value from one index to another.\n     *\n     * @param fromIndex - The index of the element to move.\n     *\n     * @param toIndex - The index to move the element to.\n     *\n     * #### Complexity\n     * Constant.\n     *\n     * #### Iterator Validity\n     * Iterators pointing at the lesser of the `fromIndex` and the `toIndex`\n     * and beyond are invalidated.\n     *\n     * #### Undefined Behavior\n     * A `fromIndex` or a `toIndex` which is non-integral.\n     */\n    move(fromIndex, toIndex) {\n        if (this.length <= 1 || fromIndex === toIndex) {\n            return;\n        }\n        const values = [this._array[fromIndex]];\n        ArrayExt.move(this._array, fromIndex, toIndex);\n        this._changed.emit({\n            type: 'move',\n            oldIndex: fromIndex,\n            newIndex: toIndex,\n            oldValues: values,\n            newValues: values\n        });\n    }\n    /**\n     * Push a set of values to the back of the list.\n     *\n     * @param values - An iterable set of values to add.\n     *\n     * @returns The new length of the list.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Notes\n     * By convention, the oldIndex is set to -1 to indicate\n     * an push operation.\n     *\n     * #### Iterator Validity\n     * No changes.\n     */\n    pushAll(values) {\n        const newIndex = this.length;\n        for (const value of values) {\n            this._array.push(value);\n        }\n        this._changed.emit({\n            type: 'add',\n            oldIndex: -1,\n            newIndex,\n            oldValues: [],\n            newValues: Array.from(values)\n        });\n        return this.length;\n    }\n    /**\n     * Insert a set of items into the list at the specified index.\n     *\n     * @param index - The index at which to insert the values.\n     *\n     * @param values - The values to insert at the specified index.\n     *\n     * #### Complexity.\n     * Linear.\n     *\n     * #### Iterator Validity\n     * No changes.\n     *\n     * #### Notes\n     * The `index` will be clamped to the bounds of the list.\n     * By convention, the oldIndex is set to -2 to indicate\n     * an insert operation.\n     *\n     * #### Undefined Behavior.\n     * An `index` which is non-integral.\n     */\n    insertAll(index, values) {\n        const newIndex = index;\n        for (const value of values) {\n            ArrayExt.insert(this._array, index++, value);\n        }\n        this._changed.emit({\n            type: 'add',\n            oldIndex: -2,\n            newIndex,\n            oldValues: [],\n            newValues: Array.from(values)\n        });\n    }\n    /**\n     * Remove a range of items from the list.\n     *\n     * @param startIndex - The start index of the range to remove (inclusive).\n     *\n     * @param endIndex - The end index of the range to remove (exclusive).\n     *\n     * @returns The new length of the list.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Iterator Validity\n     * Iterators pointing to the first removed value and beyond are invalid.\n     *\n     * #### Undefined Behavior\n     * A `startIndex` or `endIndex` which is non-integral.\n     */\n    removeRange(startIndex, endIndex) {\n        const oldValues = this._array.slice(startIndex, endIndex);\n        for (let i = startIndex; i < endIndex; i++) {\n            ArrayExt.removeAt(this._array, startIndex);\n        }\n        this._changed.emit({\n            type: 'remove',\n            oldIndex: startIndex,\n            newIndex: -1,\n            oldValues,\n            newValues: []\n        });\n        return this.length;\n    }\n}\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The default strict equality item cmp.\n     */\n    function itemCmp(first, second) {\n        return first === second;\n    }\n    Private.itemCmp = itemCmp;\n})(Private || (Private = {}));\n//# sourceMappingURL=observablelist.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ObservableList } from './observablelist';\n/**\n * A concrete implementation of an observable undoable list.\n */\nexport class ObservableUndoableList extends ObservableList {\n    /**\n     * Construct a new undoable observable list.\n     */\n    constructor(serializer) {\n        super();\n        this._inCompound = false;\n        this._isUndoable = true;\n        this._madeCompoundChange = false;\n        this._index = -1;\n        this._stack = [];\n        this._serializer = serializer;\n        this.changed.connect(this._onListChanged, this);\n    }\n    /**\n     * Whether the object can redo changes.\n     */\n    get canRedo() {\n        return this._index < this._stack.length - 1;\n    }\n    /**\n     * Whether the object can undo changes.\n     */\n    get canUndo() {\n        return this._index >= 0;\n    }\n    /**\n     * Begin a compound operation.\n     *\n     * @param isUndoAble - Whether the operation is undoable.\n     *   The default is `true`.\n     */\n    beginCompoundOperation(isUndoAble) {\n        this._inCompound = true;\n        this._isUndoable = isUndoAble !== false;\n        this._madeCompoundChange = false;\n    }\n    /**\n     * End a compound operation.\n     */\n    endCompoundOperation() {\n        this._inCompound = false;\n        this._isUndoable = true;\n        if (this._madeCompoundChange) {\n            this._index++;\n        }\n    }\n    /**\n     * Undo an operation.\n     */\n    undo() {\n        if (!this.canUndo) {\n            return;\n        }\n        const changes = this._stack[this._index];\n        this._isUndoable = false;\n        for (const change of changes.reverse()) {\n            this._undoChange(change);\n        }\n        this._isUndoable = true;\n        this._index--;\n    }\n    /**\n     * Redo an operation.\n     */\n    redo() {\n        if (!this.canRedo) {\n            return;\n        }\n        this._index++;\n        const changes = this._stack[this._index];\n        this._isUndoable = false;\n        for (const change of changes) {\n            this._redoChange(change);\n        }\n        this._isUndoable = true;\n    }\n    /**\n     * Clear the change stack.\n     */\n    clearUndo() {\n        this._index = -1;\n        this._stack = [];\n    }\n    /**\n     * Handle a change in the list.\n     */\n    _onListChanged(list, change) {\n        if (this.isDisposed || !this._isUndoable) {\n            return;\n        }\n        // Clear everything after this position if necessary.\n        if (!this._inCompound || !this._madeCompoundChange) {\n            this._stack = this._stack.slice(0, this._index + 1);\n        }\n        // Copy the change.\n        const evt = this._copyChange(change);\n        // Put the change in the stack.\n        if (this._stack[this._index + 1]) {\n            this._stack[this._index + 1].push(evt);\n        }\n        else {\n            this._stack.push([evt]);\n        }\n        // If not in a compound operation, increase index.\n        if (!this._inCompound) {\n            this._index++;\n        }\n        else {\n            this._madeCompoundChange = true;\n        }\n    }\n    /**\n     * Undo a change event.\n     */\n    _undoChange(change) {\n        let index = 0;\n        const serializer = this._serializer;\n        switch (change.type) {\n            case 'add':\n                for (let length = change.newValues.length; length > 0; length--) {\n                    this.remove(change.newIndex);\n                }\n                break;\n            case 'set':\n                index = change.oldIndex;\n                for (const value of change.oldValues) {\n                    this.set(index++, serializer.fromJSON(value));\n                }\n                break;\n            case 'remove':\n                index = change.oldIndex;\n                for (const value of change.oldValues) {\n                    this.insert(index++, serializer.fromJSON(value));\n                }\n                break;\n            case 'move':\n                this.move(change.newIndex, change.oldIndex);\n                break;\n            default:\n                return;\n        }\n    }\n    /**\n     * Redo a change event.\n     */\n    _redoChange(change) {\n        let index = 0;\n        const serializer = this._serializer;\n        switch (change.type) {\n            case 'add':\n                index = change.newIndex;\n                for (const value of change.newValues) {\n                    this.insert(index++, serializer.fromJSON(value));\n                }\n                break;\n            case 'set':\n                index = change.newIndex;\n                for (const value of change.newValues) {\n                    this.set(change.newIndex++, serializer.fromJSON(value));\n                }\n                break;\n            case 'remove':\n                for (let length = change.oldValues.length; length > 0; length--) {\n                    this.remove(change.oldIndex);\n                }\n                break;\n            case 'move':\n                this.move(change.oldIndex, change.newIndex);\n                break;\n            default:\n                return;\n        }\n    }\n    /**\n     * Copy a change as JSON.\n     */\n    _copyChange(change) {\n        const oldValues = [];\n        for (const value of change.oldValues) {\n            oldValues.push(this._serializer.toJSON(value));\n        }\n        const newValues = [];\n        for (const value of change.newValues) {\n            newValues.push(this._serializer.toJSON(value));\n        }\n        return {\n            type: change.type,\n            oldIndex: change.oldIndex,\n            newIndex: change.newIndex,\n            oldValues,\n            newValues\n        };\n    }\n}\n/**\n * Namespace for ObservableUndoableList utilities.\n */\n(function (ObservableUndoableList) {\n    /**\n     * A default, identity serializer.\n     */\n    class IdentitySerializer {\n        /**\n         * Identity serialize.\n         */\n        toJSON(value) {\n            return value;\n        }\n        /**\n         * Identity deserialize.\n         */\n        fromJSON(value) {\n            return value;\n        }\n    }\n    ObservableUndoableList.IdentitySerializer = IdentitySerializer;\n})(ObservableUndoableList || (ObservableUndoableList = {}));\n//# sourceMappingURL=undoablelist.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { JSONExt } from '@lumino/coreutils';\nimport { DisposableSet } from '@lumino/disposable';\nimport { Signal } from '@lumino/signaling';\nimport { ObservableJSON } from './observablejson';\nimport { ObservableMap } from './observablemap';\nimport { ObservableString } from './observablestring';\nimport { ObservableUndoableList } from './undoablelist';\n/**\n * A concrete implementation of an `IObservableValue`.\n */\nexport class ObservableValue {\n    /**\n     * Constructor for the value.\n     *\n     * @param initialValue the starting value for the `ObservableValue`.\n     */\n    constructor(initialValue = null) {\n        this._value = null;\n        this._changed = new Signal(this);\n        this._isDisposed = false;\n        this._value = initialValue;\n    }\n    /**\n     * The observable type.\n     */\n    get type() {\n        return 'Value';\n    }\n    /**\n     * Whether the value has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * The changed signal.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Get the current value, or `undefined` if it has not been set.\n     */\n    get() {\n        return this._value;\n    }\n    /**\n     * Set the current value.\n     */\n    set(value) {\n        const oldValue = this._value;\n        if (JSONExt.deepEqual(oldValue, value)) {\n            return;\n        }\n        this._value = value;\n        this._changed.emit({\n            oldValue: oldValue,\n            newValue: value\n        });\n    }\n    /**\n     * Dispose of the resources held by the value.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n        this._value = null;\n    }\n}\n/**\n * The namespace for the `ObservableValue` class statics.\n */\n(function (ObservableValue) {\n    /**\n     * The changed args object emitted by the `IObservableValue`.\n     */\n    class IChangedArgs {\n    }\n    ObservableValue.IChangedArgs = IChangedArgs;\n})(ObservableValue || (ObservableValue = {}));\n/**\n * A concrete implementation of an `IModelDB`.\n */\nexport class ModelDB {\n    /**\n     * Constructor for the `ModelDB`.\n     */\n    constructor(options = {}) {\n        /**\n         * Whether the model has been populated with\n         * any model values.\n         */\n        this.isPrepopulated = false;\n        /**\n         * Whether the model is collaborative.\n         */\n        this.isCollaborative = false;\n        /**\n         * A promise resolved when the model is connected\n         * to its backend. For the in-memory ModelDB it\n         * is immediately resolved.\n         */\n        this.connected = Promise.resolve(void 0);\n        this._toDispose = false;\n        this._isDisposed = false;\n        this._disposables = new DisposableSet();\n        this._basePath = options.basePath || '';\n        if (options.baseDB) {\n            this._db = options.baseDB;\n        }\n        else {\n            this._db = new ObservableMap();\n            this._toDispose = true;\n        }\n    }\n    /**\n     * The base path for the `ModelDB`. This is prepended\n     * to all the paths that are passed in to the member\n     * functions of the object.\n     */\n    get basePath() {\n        return this._basePath;\n    }\n    /**\n     * Whether the database is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Get a value for a path.\n     *\n     * @param path the path for the object.\n     *\n     * @returns an `IObservable`.\n     */\n    get(path) {\n        return this._db.get(this._resolvePath(path));\n    }\n    /**\n     * Whether the `IModelDB` has an object at this path.\n     *\n     * @param path the path for the object.\n     *\n     * @returns a boolean for whether an object is at `path`.\n     */\n    has(path) {\n        return this._db.has(this._resolvePath(path));\n    }\n    /**\n     * Create a string and insert it in the database.\n     *\n     * @param path the path for the string.\n     *\n     * @returns the string that was created.\n     */\n    createString(path) {\n        const str = new ObservableString();\n        this._disposables.add(str);\n        this.set(path, str);\n        return str;\n    }\n    /**\n     * Create an undoable list and insert it in the database.\n     *\n     * @param path the path for the list.\n     *\n     * @returns the list that was created.\n     *\n     * #### Notes\n     * The list can only store objects that are simple\n     * JSON Objects and primitives.\n     */\n    createList(path) {\n        const vec = new ObservableUndoableList(new ObservableUndoableList.IdentitySerializer());\n        this._disposables.add(vec);\n        this.set(path, vec);\n        return vec;\n    }\n    /**\n     * Create a map and insert it in the database.\n     *\n     * @param path the path for the map.\n     *\n     * @returns the map that was created.\n     *\n     * #### Notes\n     * The map can only store objects that are simple\n     * JSON Objects and primitives.\n     */\n    createMap(path) {\n        const map = new ObservableJSON();\n        this._disposables.add(map);\n        this.set(path, map);\n        return map;\n    }\n    /**\n     * Create an opaque value and insert it in the database.\n     *\n     * @param path the path for the value.\n     *\n     * @returns the value that was created.\n     */\n    createValue(path) {\n        const val = new ObservableValue();\n        this._disposables.add(val);\n        this.set(path, val);\n        return val;\n    }\n    /**\n     * Get a value at a path, or `undefined if it has not been set\n     * That value must already have been created using `createValue`.\n     *\n     * @param path the path for the value.\n     */\n    getValue(path) {\n        const val = this.get(path);\n        if (!val || val.type !== 'Value') {\n            throw Error('Can only call getValue for an ObservableValue');\n        }\n        return val.get();\n    }\n    /**\n     * Set a value at a path. That value must already have\n     * been created using `createValue`.\n     *\n     * @param path the path for the value.\n     *\n     * @param value the new value.\n     */\n    setValue(path, value) {\n        const val = this.get(path);\n        if (!val || val.type !== 'Value') {\n            throw Error('Can only call setValue on an ObservableValue');\n        }\n        val.set(value);\n    }\n    /**\n     * Create a view onto a subtree of the model database.\n     *\n     * @param basePath the path for the root of the subtree.\n     *\n     * @returns an `IModelDB` with a view onto the original\n     *   `IModelDB`, with `basePath` prepended to all paths.\n     */\n    view(basePath) {\n        const view = new ModelDB({ basePath, baseDB: this });\n        this._disposables.add(view);\n        return view;\n    }\n    /**\n     * Set a value at a path. Not intended to\n     * be called by user code, instead use the\n     * `create*` factory methods.\n     *\n     * @param path the path to set the value at.\n     *\n     * @param value the value to set at the path.\n     */\n    set(path, value) {\n        this._db.set(this._resolvePath(path), value);\n    }\n    /**\n     * Dispose of the resources held by the database.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        if (this._toDispose) {\n            this._db.dispose();\n        }\n        this._disposables.dispose();\n    }\n    /**\n     * Compute the fully resolved path for a path argument.\n     */\n    _resolvePath(path) {\n        if (this._basePath) {\n            path = this._basePath + '.' + path;\n        }\n        return path;\n    }\n}\n//# sourceMappingURL=modeldb.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module observables\n */\nexport * from './modeldb';\nexport * from './observablejson';\nexport * from './observablelist';\nexport * from './observablemap';\nexport * from './observablestring';\nexport * from './undoablelist';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport * as nbformat from '@jupyterlab/nbformat';\nimport { ObservableList } from '@jupyterlab/observables';\nimport { OutputModel } from '@jupyterlab/rendermime';\nimport { map } from '@lumino/algorithm';\nimport { JSONExt } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\n/**\n * The default implementation of the IOutputAreaModel.\n */\nexport class OutputAreaModel {\n    /**\n     * Construct a new observable outputs instance.\n     */\n    constructor(options = {}) {\n        /**\n         * A flag that is set when we want to clear the output area\n         * *after* the next addition to it.\n         */\n        this.clearNext = false;\n        this._lastStreamName = '';\n        this._trusted = false;\n        this._isDisposed = false;\n        this._stateChanged = new Signal(this);\n        this._changed = new Signal(this);\n        this._streamIndex = 0;\n        this._trusted = !!options.trusted;\n        this.contentFactory =\n            options.contentFactory || OutputAreaModel.defaultContentFactory;\n        this.list = new ObservableList();\n        if (options.values) {\n            for (const value of options.values) {\n                const index = this._add(value) - 1;\n                const item = this.list.get(index);\n                item.changed.connect(this._onGenericChange, this);\n            }\n        }\n        this.list.changed.connect(this._onListChanged, this);\n    }\n    /**\n     * A signal emitted when an item changes.\n     */\n    get stateChanged() {\n        return this._stateChanged;\n    }\n    /**\n     * A signal emitted when the list of items changes.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Get the length of the items in the model.\n     */\n    get length() {\n        return this.list ? this.list.length : 0;\n    }\n    /**\n     * Get whether the model is trusted.\n     */\n    get trusted() {\n        return this._trusted;\n    }\n    /**\n     * Set whether the model is trusted.\n     *\n     * #### Notes\n     * Changing the value will cause all of the models to re-set.\n     */\n    set trusted(value) {\n        if (value === this._trusted) {\n            return;\n        }\n        const trusted = (this._trusted = value);\n        for (let i = 0; i < this.list.length; i++) {\n            const oldItem = this.list.get(i);\n            const value = oldItem.toJSON();\n            const item = this._createItem({ value, trusted });\n            this.list.set(i, item);\n            oldItem.dispose();\n        }\n    }\n    /**\n     * Test whether the model is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources used by the model.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this.list.dispose();\n        Signal.clearData(this);\n    }\n    /**\n     * Get an item at the specified index.\n     */\n    get(index) {\n        return this.list.get(index);\n    }\n    /**\n     * Set the value at the specified index.\n     */\n    set(index, value) {\n        value = JSONExt.deepCopy(value);\n        // Normalize stream data.\n        Private.normalize(value);\n        const item = this._createItem({ value, trusted: this._trusted });\n        this.list.set(index, item);\n    }\n    removeStreamOutput(number) {\n        const prev = this.list.get(this.length - 1);\n        const curText = prev.streamText;\n        const length = curText.text.length;\n        const options = { silent: true };\n        curText.remove(length - number, length, options);\n    }\n    appendStreamOutput(text) {\n        const prev = this.list.get(this.length - 1);\n        const curText = prev.streamText;\n        const length = curText.text.length;\n        const options = { silent: true };\n        curText.insert(length, text, options);\n    }\n    /**\n     * Add an output, which may be combined with previous output.\n     *\n     * @returns The total number of outputs.\n     *\n     * #### Notes\n     * The output bundle is copied.\n     * Contiguous stream outputs of the same `name` are combined.\n     */\n    add(output) {\n        // If we received a delayed clear message, then clear now.\n        if (this.clearNext) {\n            this.clear();\n            this.clearNext = false;\n        }\n        return this._add(output);\n    }\n    /**\n     * Remove an output at a given index.\n     */\n    remove(index) {\n        var _a;\n        (_a = this.list.remove(index)) === null || _a === void 0 ? void 0 : _a.dispose();\n    }\n    /**\n     * Clear all of the output.\n     *\n     * @param wait Delay clearing the output until the next message is added.\n     */\n    clear(wait = false) {\n        this._lastStreamName = '';\n        if (wait) {\n            this.clearNext = true;\n            return;\n        }\n        for (const item of this.list) {\n            item.dispose();\n        }\n        this.list.clear();\n    }\n    /**\n     * Deserialize the model from JSON.\n     *\n     * #### Notes\n     * This will clear any existing data.\n     */\n    fromJSON(values) {\n        this.clear();\n        for (const value of values) {\n            this._add(value);\n        }\n    }\n    /**\n     * Serialize the model to JSON.\n     */\n    toJSON() {\n        return Array.from(map(this.list, (output) => output.toJSON()));\n    }\n    /**\n     * Add a copy of the item to the list.\n     *\n     * @returns The list length\n     */\n    _add(value) {\n        const trusted = this._trusted;\n        value = JSONExt.deepCopy(value);\n        // Normalize the value.\n        Private.normalize(value);\n        // Consolidate outputs if they are stream outputs of the same kind.\n        if (nbformat.isStream(value) &&\n            value.name === this._lastStreamName &&\n            this.length > 0 &&\n            this.shouldCombine({\n                value,\n                lastModel: this.list.get(this.length - 1)\n            })) {\n            // We append the new text to the current text.\n            // This creates a text change event.\n            const prev = this.list.get(this.length - 1);\n            const curText = prev.streamText;\n            const newText = typeof value.text === 'string' ? value.text : value.text.join('');\n            this._streamIndex = Private.addText(this._streamIndex, curText, newText);\n            return this.length;\n        }\n        if (nbformat.isStream(value)) {\n            if (typeof value.text !== 'string') {\n                value.text = value.text.join('');\n            }\n            const { text, index } = Private.processText(0, value.text);\n            this._streamIndex = index;\n            value.text = text;\n        }\n        // Create the new item.\n        const item = this._createItem({ value, trusted });\n        // Add the item to our list and return the new length.\n        const length = this.list.push(item);\n        // Update the stream information.\n        if (nbformat.isStream(value)) {\n            this._lastStreamName = value.name;\n        }\n        else {\n            this._lastStreamName = '';\n        }\n        return length;\n    }\n    /**\n     * Whether a new value should be consolidated with the previous output.\n     *\n     * This will only be called if the minimal criteria of both being stream\n     * messages of the same type.\n     */\n    shouldCombine(options) {\n        return true;\n    }\n    /**\n     * Create an output item and hook up its signals.\n     */\n    _createItem(options) {\n        const factory = this.contentFactory;\n        const item = factory.createOutputModel(options);\n        return item;\n    }\n    /**\n     * Handle a change to the list.\n     */\n    _onListChanged(sender, args) {\n        switch (args.type) {\n            case 'add':\n                args.newValues.forEach(item => {\n                    item.changed.connect(this._onGenericChange, this);\n                });\n                break;\n            case 'remove':\n                args.oldValues.forEach(item => {\n                    item.changed.disconnect(this._onGenericChange, this);\n                });\n                break;\n            case 'set':\n                args.newValues.forEach(item => {\n                    item.changed.connect(this._onGenericChange, this);\n                });\n                args.oldValues.forEach(item => {\n                    item.changed.disconnect(this._onGenericChange, this);\n                });\n                break;\n        }\n        this._changed.emit(args);\n    }\n    /**\n     * Handle a change to an item.\n     */\n    _onGenericChange(itemModel) {\n        let idx;\n        let item = null;\n        for (idx = 0; idx < this.list.length; idx++) {\n            item = this.list.get(idx);\n            if (item === itemModel) {\n                break;\n            }\n        }\n        if (item != null) {\n            this._stateChanged.emit(idx);\n            this._changed.emit({\n                type: 'set',\n                newIndex: idx,\n                oldIndex: idx,\n                oldValues: [item],\n                newValues: [item]\n            });\n        }\n    }\n}\n/**\n * The namespace for OutputAreaModel class statics.\n */\n(function (OutputAreaModel) {\n    /**\n     * The default implementation of a `IModelOutputFactory`.\n     */\n    class ContentFactory {\n        /**\n         * Create an output model.\n         */\n        createOutputModel(options) {\n            return new OutputModel(options);\n        }\n    }\n    OutputAreaModel.ContentFactory = ContentFactory;\n    /**\n     * The default output model factory.\n     */\n    OutputAreaModel.defaultContentFactory = new ContentFactory();\n})(OutputAreaModel || (OutputAreaModel = {}));\n/**\n * A namespace for module-private functionality.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Normalize an output.\n     */\n    function normalize(value) {\n        if (nbformat.isStream(value)) {\n            if (Array.isArray(value.text)) {\n                value.text = value.text.join('\\n');\n            }\n        }\n    }\n    Private.normalize = normalize;\n    /**\n     * Like `indexOf` but allowing to use a regular expression.\n     */\n    function indexOfAny(text, re, i) {\n        const index = text.slice(i).search(re);\n        return index >= 0 ? index + i : index;\n    }\n    /*\n     * Handle backspaces in `newText` and concatenates to `text`, if any.\n     */\n    function processText(index, newText, text) {\n        if (text === undefined) {\n            text = '';\n        }\n        if (!(newText.includes('\\b') ||\n            newText.includes('\\r') ||\n            newText.includes('\\n'))) {\n            text =\n                text.slice(0, index) + newText + text.slice(index + newText.length);\n            return { text, index: index + newText.length };\n        }\n        let idx0 = index;\n        let idx1 = -1;\n        let lastEnd = 0;\n        const regex = /[\\n\\b\\r]/;\n        // TODO: once we upgrade eslint to 9.1.0 we can toggle `allExceptWhileTrue`\n        // option and remove the ignore rule below.\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            idx1 = indexOfAny(newText, regex, lastEnd);\n            // Insert characters at current position.\n            const prefix = newText.slice(lastEnd, idx1 === -1 ? newText.length : idx1);\n            text = text.slice(0, idx0) + prefix + text.slice(idx0 + prefix.length);\n            lastEnd = idx1 + 1;\n            idx0 += prefix.length;\n            if (idx1 === -1) {\n                break;\n            }\n            const newChar = newText[idx1];\n            if (newChar === '\\b') {\n                // Backspace: delete previous character if there is one and if it's not a line feed.\n                if (idx0 > 0 && text[idx0 - 1] !== '\\n') {\n                    text = text.slice(0, idx0 - 1) + text.slice(idx0 + 1);\n                    idx0--;\n                }\n            }\n            else if (newChar === '\\r') {\n                // Carriage return: go back to beginning of line.\n                let done = false;\n                while (!done) {\n                    if (idx0 === 0) {\n                        done = true;\n                    }\n                    else if (text[idx0 - 1] === '\\n') {\n                        done = true;\n                    }\n                    else {\n                        idx0--;\n                    }\n                }\n            }\n            else if (newChar === '\\n') {\n                // Insert new line at end of text.\n                text = text + '\\n';\n                idx0 = text.length;\n            }\n            else {\n                throw Error(`This should not happen`);\n            }\n        }\n        return { text, index: idx0 };\n    }\n    Private.processText = processText;\n    /*\n     * Concatenate a string to an observable string, handling backspaces.\n     */\n    function addText(prevIndex, curText, newText) {\n        const { text, index } = processText(prevIndex, newText, curText.text);\n        // Compute the difference between current text and new text.\n        let done = false;\n        let idx = 0;\n        while (!done) {\n            if (idx === text.length) {\n                if (idx === curText.text.length) {\n                    done = true;\n                }\n                else {\n                    curText.remove(idx, curText.text.length);\n                    done = true;\n                }\n            }\n            else if (idx === curText.text.length) {\n                if (idx !== text.length) {\n                    curText.insert(curText.text.length, text.slice(idx));\n                    done = true;\n                }\n            }\n            else if (text[idx] !== curText.text[idx]) {\n                curText.remove(idx, curText.text.length);\n                curText.insert(idx, text.slice(idx));\n                done = true;\n            }\n            else {\n                idx++;\n            }\n        }\n        return index;\n    }\n    Private.addText = addText;\n})(Private || (Private = {}));\n//# sourceMappingURL=model.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { WidgetTracker } from '@jupyterlab/apputils';\nimport { KernelMessage } from '@jupyterlab/services';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { PromiseDelegate, UUID } from '@lumino/coreutils';\nimport { AttachedProperty } from '@lumino/properties';\nimport { Signal } from '@lumino/signaling';\nimport { Panel, PanelLayout, Widget } from '@lumino/widgets';\n/**\n * The class name added to an output area widget.\n */\nconst OUTPUT_AREA_CLASS = 'jp-OutputArea';\n/**\n * The class name added to the direction children of OutputArea\n */\nconst OUTPUT_AREA_ITEM_CLASS = 'jp-OutputArea-child';\n/**\n * The class name added to actual outputs\n */\nconst OUTPUT_AREA_OUTPUT_CLASS = 'jp-OutputArea-output';\n/**\n * The class name added to prompt children of OutputArea.\n */\nconst OUTPUT_AREA_PROMPT_CLASS = 'jp-OutputArea-prompt';\nconst OUTPUT_AREA_STDIN_HIDING_CLASS = 'jp-OutputArea-stdin-hiding';\n/**\n * The class name added to OutputPrompt.\n */\nconst OUTPUT_PROMPT_CLASS = 'jp-OutputPrompt';\n/**\n * The class name added to an execution result.\n */\nconst EXECUTE_CLASS = 'jp-OutputArea-executeResult';\n/**\n * The class name added stdin items of OutputArea\n */\nconst OUTPUT_AREA_STDIN_ITEM_CLASS = 'jp-OutputArea-stdin-item';\n/**\n * The class name added to stdin widgets.\n */\nconst STDIN_CLASS = 'jp-Stdin';\n/**\n * The class name added to stdin data prompt nodes.\n */\nconst STDIN_PROMPT_CLASS = 'jp-Stdin-prompt';\n/**\n * The class name added to stdin data input nodes.\n */\nconst STDIN_INPUT_CLASS = 'jp-Stdin-input';\n/**\n * The overlay that can be clicked to switch between output scrolling modes.\n */\nconst OUTPUT_PROMPT_OVERLAY = 'jp-OutputArea-promptOverlay';\n/** ****************************************************************************\n * OutputArea\n ******************************************************************************/\n/**\n * An output area widget.\n *\n * #### Notes\n * The widget model must be set separately and can be changed\n * at any time.  Consumers of the widget must account for a\n * `null` model, and may want to listen to the `modelChanged`\n * signal.\n */\nexport class OutputArea extends Widget {\n    /**\n     * Construct an output area widget.\n     */\n    constructor(options) {\n        var _a, _b, _c, _d, _e;\n        super();\n        /**\n         * A public signal used to indicate the number of displayed outputs has changed.\n         *\n         * #### Notes\n         * This is useful for parents who want to apply styling based on the number\n         * of outputs. Emits the current number of outputs.\n         */\n        this.outputLengthChanged = new Signal(this);\n        /**\n         * Handle an iopub message.\n         */\n        this._onIOPub = (msg) => {\n            const model = this.model;\n            const msgType = msg.header.msg_type;\n            let output;\n            const transient = (msg.content.transient || {});\n            const displayId = transient['display_id'];\n            let targets;\n            switch (msgType) {\n                case 'execute_result':\n                case 'display_data':\n                case 'stream':\n                case 'error':\n                    output = { ...msg.content, output_type: msgType };\n                    model.add(output);\n                    break;\n                case 'clear_output': {\n                    const wait = msg.content.wait;\n                    model.clear(wait);\n                    break;\n                }\n                case 'update_display_data':\n                    output = { ...msg.content, output_type: 'display_data' };\n                    targets = this._displayIdMap.get(displayId);\n                    if (targets) {\n                        for (const index of targets) {\n                            model.set(index, output);\n                        }\n                    }\n                    break;\n                case 'status': {\n                    const executionState = msg.content\n                        .execution_state;\n                    if (executionState === 'idle') {\n                        // If status is idle, the kernel is no longer blocked by the input\n                        this._pendingInput = false;\n                    }\n                    break;\n                }\n                default:\n                    break;\n            }\n            if (displayId && msgType === 'display_data') {\n                targets = this._displayIdMap.get(displayId) || [];\n                targets.push(model.length - 1);\n                this._displayIdMap.set(displayId, targets);\n            }\n        };\n        /**\n         * Handle an execute reply message.\n         */\n        this._onExecuteReply = (msg) => {\n            // API responses that contain a pager are special cased and their type\n            // is overridden from 'execute_reply' to 'display_data' in order to\n            // render output.\n            const model = this.model;\n            const content = msg.content;\n            if (content.status !== 'ok') {\n                return;\n            }\n            const payload = content && content.payload;\n            if (!payload || !payload.length) {\n                return;\n            }\n            const pages = payload.filter((i) => i.source === 'page');\n            if (!pages.length) {\n                return;\n            }\n            const page = JSON.parse(JSON.stringify(pages[0]));\n            const output = {\n                output_type: 'display_data',\n                data: page.data,\n                metadata: {}\n            };\n            model.add(output);\n        };\n        this._displayIdMap = new Map();\n        this._minHeightTimeout = null;\n        this._inputRequested = new Signal(this);\n        this._toggleScrolling = new Signal(this);\n        this._initialize = new Signal(this);\n        this._outputTracker = new WidgetTracker({\n            namespace: UUID.uuid4()\n        });\n        this._inputHistoryScope = 'global';\n        this._pendingInput = false;\n        this._showInputPlaceholder = true;\n        super.layout = new PanelLayout();\n        this.addClass(OUTPUT_AREA_CLASS);\n        this.contentFactory =\n            (_a = options.contentFactory) !== null && _a !== void 0 ? _a : OutputArea.defaultContentFactory;\n        this.rendermime = options.rendermime;\n        this._maxNumberOutputs = (_b = options.maxNumberOutputs) !== null && _b !== void 0 ? _b : Infinity;\n        this._translator = (_c = options.translator) !== null && _c !== void 0 ? _c : nullTranslator;\n        this._inputHistoryScope = (_d = options.inputHistoryScope) !== null && _d !== void 0 ? _d : 'global';\n        this._showInputPlaceholder = (_e = options.showInputPlaceholder) !== null && _e !== void 0 ? _e : true;\n        const model = (this.model = options.model);\n        for (let i = 0; i < Math.min(model.length, this._maxNumberOutputs + 1); i++) {\n            const output = model.get(i);\n            this._insertOutput(i, output);\n            if (output.type === 'stream') {\n                // This is a stream output, follow changes to the text.\n                output.streamText.changed.connect((sender, event) => {\n                    this._setOutput(i, output);\n                });\n            }\n        }\n        model.changed.connect(this.onModelChanged, this);\n        model.stateChanged.connect(this.onStateChanged, this);\n        if (options.promptOverlay) {\n            this._addPromptOverlay();\n        }\n    }\n    /**\n     * Narrow the type of OutputArea's layout prop\n     */\n    get layout() {\n        return super.layout;\n    }\n    /**\n     * A read-only sequence of the children widgets in the output area.\n     */\n    get widgets() {\n        return this.layout.widgets;\n    }\n    /**\n     * The kernel future associated with the output area.\n     */\n    get future() {\n        return this._future;\n    }\n    set future(value) {\n        // Bail if the model is disposed.\n        if (this.model.isDisposed) {\n            throw Error('Model is disposed');\n        }\n        if (this._future === value) {\n            return;\n        }\n        if (this._future) {\n            this._future.dispose();\n        }\n        this._future = value;\n        value.done\n            .finally(() => {\n            this._pendingInput = false;\n        })\n            .catch(() => {\n            // No-op, required because `finally` re-raises any rejections,\n            // even if caught on the `done` promise level before.\n        });\n        this.model.clear();\n        // Make sure there were no input widgets.\n        if (this.widgets.length) {\n            this._clear();\n            this.outputLengthChanged.emit(Math.min(this.model.length, this._maxNumberOutputs));\n        }\n        // Handle published messages.\n        value.onIOPub = this._onIOPub;\n        // Handle the execute reply.\n        value.onReply = this._onExecuteReply;\n        // Handle stdin.\n        value.onStdin = msg => {\n            if (KernelMessage.isInputRequestMsg(msg)) {\n                this.onInputRequest(msg, value);\n            }\n        };\n    }\n    /**\n     * Signal emitted when an output area is requesting an input. The signal\n     * carries the input widget that this class creates in response to the input\n     * request.\n     */\n    get inputRequested() {\n        return this._inputRequested;\n    }\n    /**\n     * A flag indicating if the output area has pending input.\n     */\n    get pendingInput() {\n        return this._pendingInput;\n    }\n    /**\n     * The maximum number of output items to display on top and bottom of cell output.\n     *\n     * ### Notes\n     * It is set to Infinity if no trim is applied.\n     */\n    get maxNumberOutputs() {\n        return this._maxNumberOutputs;\n    }\n    set maxNumberOutputs(limit) {\n        if (limit <= 0) {\n            console.warn(`OutputArea.maxNumberOutputs must be strictly positive.`);\n            return;\n        }\n        const lastShown = this._maxNumberOutputs;\n        this._maxNumberOutputs = limit;\n        if (lastShown < limit) {\n            this._showTrimmedOutputs(lastShown);\n        }\n    }\n    /**\n     * Dispose of the resources used by the output area.\n     */\n    dispose() {\n        if (this._future) {\n            this._future.dispose();\n            this._future = null;\n        }\n        this._displayIdMap.clear();\n        this._outputTracker.dispose();\n        super.dispose();\n    }\n    /**\n     * Follow changes on the model state.\n     */\n    onModelChanged(sender, args) {\n        switch (args.type) {\n            case 'add':\n                const output = args.newValues[0];\n                this._insertOutput(args.newIndex, output);\n                if (output.type === 'stream') {\n                    // A stream output has been added, follow changes to the text.\n                    output.streamText.changed.connect((sender, event) => {\n                        this._setOutput(args.newIndex, output);\n                    });\n                }\n                break;\n            case 'remove':\n                if (this.widgets.length) {\n                    // all items removed from model\n                    if (this.model.length === 0) {\n                        this._clear();\n                    }\n                    else {\n                        // range of items removed from model\n                        // remove widgets corresponding to removed model items\n                        const startIndex = args.oldIndex;\n                        for (let i = 0; i < args.oldValues.length && startIndex < this.widgets.length; ++i) {\n                            const widget = this.widgets[startIndex];\n                            widget.parent = null;\n                            widget.dispose();\n                        }\n                        // apply item offset to target model item indices in _displayIdMap\n                        this._moveDisplayIdIndices(startIndex, args.oldValues.length);\n                        // prevent jitter caused by immediate height change\n                        this._preventHeightChangeJitter();\n                    }\n                }\n                break;\n            case 'set':\n                this._setOutput(args.newIndex, args.newValues[0]);\n                break;\n            default:\n                break;\n        }\n        this.outputLengthChanged.emit(Math.min(this.model.length, this._maxNumberOutputs));\n    }\n    /**\n     * Emitted when user requests toggling of the output scrolling mode.\n     */\n    get toggleScrolling() {\n        return this._toggleScrolling;\n    }\n    get initialize() {\n        return this._initialize;\n    }\n    /**\n     * Add overlay allowing to toggle scrolling.\n     */\n    _addPromptOverlay() {\n        const overlay = document.createElement('div');\n        overlay.className = OUTPUT_PROMPT_OVERLAY;\n        overlay.addEventListener('click', () => {\n            this._toggleScrolling.emit();\n        });\n        this.node.appendChild(overlay);\n        requestAnimationFrame(() => {\n            this._initialize.emit();\n        });\n    }\n    /**\n     * Update indices in _displayIdMap in response to element remove from model items\n     *\n     * @param startIndex - The index of first element removed\n     *\n     * @param count - The number of elements removed from model items\n     *\n     */\n    _moveDisplayIdIndices(startIndex, count) {\n        this._displayIdMap.forEach((indices) => {\n            const rangeEnd = startIndex + count;\n            const numIndices = indices.length;\n            // reverse loop in order to prevent removing element affecting the index\n            for (let i = numIndices - 1; i >= 0; --i) {\n                const index = indices[i];\n                // remove model item indices in removed range\n                if (index >= startIndex && index < rangeEnd) {\n                    indices.splice(i, 1);\n                }\n                else if (index >= rangeEnd) {\n                    // move model item indices that were larger than range end\n                    indices[i] -= count;\n                }\n            }\n        });\n    }\n    /**\n     * Follow changes on the output model state.\n     */\n    onStateChanged(sender, change) {\n        const outputLength = Math.min(this.model.length, this._maxNumberOutputs);\n        if (change) {\n            if (change >= this._maxNumberOutputs) {\n                // Bail early\n                return;\n            }\n            this._setOutput(change, this.model.get(change));\n        }\n        else {\n            for (let i = 0; i < outputLength; i++) {\n                this._setOutput(i, this.model.get(i));\n            }\n        }\n        this.outputLengthChanged.emit(outputLength);\n    }\n    /**\n     * Clear the widget outputs.\n     */\n    _clear() {\n        // Bail if there is no work to do.\n        if (!this.widgets.length) {\n            return;\n        }\n        // Remove all of our widgets.\n        const length = this.widgets.length;\n        for (let i = 0; i < length; i++) {\n            const widget = this.widgets[0];\n            widget.parent = null;\n            widget.dispose();\n        }\n        // Clear the display id map.\n        this._displayIdMap.clear();\n        // prevent jitter caused by immediate height change\n        this._preventHeightChangeJitter();\n    }\n    _preventHeightChangeJitter() {\n        // When an output area is cleared and then quickly replaced with new\n        // content (as happens with @interact in widgets, for example), the\n        // quickly changing height can make the page jitter.\n        // We introduce a small delay in the minimum height\n        // to prevent this jitter.\n        const rect = this.node.getBoundingClientRect();\n        this.node.style.minHeight = `${rect.height}px`;\n        if (this._minHeightTimeout) {\n            window.clearTimeout(this._minHeightTimeout);\n        }\n        this._minHeightTimeout = window.setTimeout(() => {\n            if (this.isDisposed) {\n                return;\n            }\n            this.node.style.minHeight = '';\n        }, 50);\n    }\n    /**\n     * Handle an input request from a kernel.\n     */\n    onInputRequest(msg, future) {\n        // Add an output widget to the end.\n        const factory = this.contentFactory;\n        const stdinPrompt = msg.content.prompt;\n        const password = msg.content.password;\n        const panel = new Panel();\n        panel.addClass(OUTPUT_AREA_ITEM_CLASS);\n        panel.addClass(OUTPUT_AREA_STDIN_ITEM_CLASS);\n        const prompt = factory.createOutputPrompt();\n        prompt.addClass(OUTPUT_AREA_PROMPT_CLASS);\n        panel.addWidget(prompt);\n        // Indicate that input is pending\n        this._pendingInput = true;\n        const input = factory.createStdin({\n            parent_header: msg.header,\n            prompt: stdinPrompt,\n            password,\n            future,\n            translator: this._translator,\n            inputHistoryScope: this._inputHistoryScope,\n            showInputPlaceholder: this._showInputPlaceholder\n        });\n        input.addClass(OUTPUT_AREA_OUTPUT_CLASS);\n        panel.addWidget(input);\n        // Increase number of outputs to display the result up to the input request.\n        if (this.model.length >= this.maxNumberOutputs) {\n            this.maxNumberOutputs = this.model.length;\n        }\n        this._inputRequested.emit(input);\n        // Get the input node to ensure focus after updating the model upon user reply.\n        const inputNode = input.node.getElementsByTagName('input')[0];\n        /**\n         * Wait for the stdin to complete, add it to the model (so it persists)\n         * and remove the stdin widget.\n         */\n        void input.value.then(value => {\n            // Increase number of outputs to display the result of stdin if needed.\n            if (this.model.length >= this.maxNumberOutputs) {\n                this.maxNumberOutputs = this.model.length + 1;\n            }\n            panel.addClass(OUTPUT_AREA_STDIN_HIDING_CLASS);\n            // Use stdin as the stream so it does not get combined with stdout.\n            // Note: because it modifies DOM it may (will) shift focus away from the input node.\n            this.model.add({\n                output_type: 'stream',\n                name: 'stdin',\n                text: value + '\\n'\n            });\n            // Refocus the input node after it lost focus due to update of the model.\n            inputNode.focus();\n            // Indicate that input is no longer pending\n            this._pendingInput = false;\n            // Keep the input in view for a little while; this (along refocusing)\n            // ensures that we can avoid the cell editor stealing the focus, and\n            // leading to user inadvertently modifying editor content when executing\n            // consecutive commands in short succession.\n            window.setTimeout(() => {\n                // Tack currently focused element to ensure that it remains on it\n                // after disposal of the panel with the old input\n                // (which modifies DOM and can lead to focus jump).\n                const focusedElement = document.activeElement;\n                // Dispose the old panel with no longer needed input box.\n                panel.dispose();\n                // Refocus the element that was focused before.\n                if (focusedElement && focusedElement instanceof HTMLElement) {\n                    focusedElement.focus();\n                }\n            }, 500);\n        });\n        // Note: the `input.value` promise must be listened to before we attach the panel\n        this.layout.addWidget(panel);\n    }\n    /**\n     * Update an output in the layout in place.\n     */\n    _setOutput(index, model) {\n        if (index >= this._maxNumberOutputs) {\n            return;\n        }\n        const panel = this.layout.widgets[index];\n        const renderer = (panel.widgets\n            ? panel.widgets.filter(it => 'renderModel' in it).pop()\n            : panel);\n        // Check whether it is safe to reuse renderer:\n        // - Preferred mime type has not changed\n        // - Isolation has not changed\n        const mimeType = this.rendermime.preferredMimeType(model.data, model.trusted ? 'any' : 'ensure');\n        if (Private.currentPreferredMimetype.get(renderer) === mimeType &&\n            OutputArea.isIsolated(mimeType, model.metadata) ===\n                renderer instanceof Private.IsolatedRenderer) {\n            void renderer.renderModel(model);\n        }\n        else {\n            this.layout.widgets[index].dispose();\n            this._insertOutput(index, model);\n        }\n    }\n    /**\n     * Render and insert a single output into the layout.\n     *\n     * @param index - The index of the output to be inserted.\n     * @param model - The model of the output to be inserted.\n     */\n    _insertOutput(index, model) {\n        if (index > this._maxNumberOutputs) {\n            return;\n        }\n        const layout = this.layout;\n        if (index === this._maxNumberOutputs) {\n            const warning = new Private.TrimmedOutputs(this._maxNumberOutputs, () => {\n                const lastShown = this._maxNumberOutputs;\n                this._maxNumberOutputs = Infinity;\n                this._showTrimmedOutputs(lastShown);\n            });\n            layout.insertWidget(index, this._wrappedOutput(warning));\n        }\n        else {\n            let output = this.createOutputItem(model);\n            if (output) {\n                output.toggleClass(EXECUTE_CLASS, model.executionCount !== null);\n            }\n            else {\n                output = new Widget();\n            }\n            if (!this._outputTracker.has(output)) {\n                void this._outputTracker.add(output);\n            }\n            layout.insertWidget(index, output);\n        }\n    }\n    /**\n     * A widget tracker for individual output widgets in the output area.\n     */\n    get outputTracker() {\n        return this._outputTracker;\n    }\n    /**\n     * Dispose information message and show output models from the given\n     * index to maxNumberOutputs\n     *\n     * @param lastShown Starting model index to insert.\n     */\n    _showTrimmedOutputs(lastShown) {\n        // Dispose information widget\n        this.widgets[lastShown].dispose();\n        for (let idx = lastShown; idx < this.model.length; idx++) {\n            this._insertOutput(idx, this.model.get(idx));\n        }\n        this.outputLengthChanged.emit(Math.min(this.model.length, this._maxNumberOutputs));\n    }\n    /**\n     * Create an output item with a prompt and actual output\n     *\n     * @returns a rendered widget, or null if we cannot render\n     * #### Notes\n     */\n    createOutputItem(model) {\n        const output = this.createRenderedMimetype(model);\n        if (!output) {\n            return null;\n        }\n        return this._wrappedOutput(output, model.executionCount);\n    }\n    /**\n     * Render a mimetype\n     */\n    createRenderedMimetype(model) {\n        const mimeType = this.rendermime.preferredMimeType(model.data, model.trusted ? 'any' : 'ensure');\n        if (!mimeType) {\n            return null;\n        }\n        let output = this.rendermime.createRenderer(mimeType);\n        const isolated = OutputArea.isIsolated(mimeType, model.metadata);\n        if (isolated === true) {\n            output = new Private.IsolatedRenderer(output);\n        }\n        Private.currentPreferredMimetype.set(output, mimeType);\n        output.renderModel(model).catch(error => {\n            // Manually append error message to output\n            const pre = document.createElement('pre');\n            const trans = this._translator.load('jupyterlab');\n            pre.textContent = trans.__('Javascript Error: %1', error.message);\n            output.node.appendChild(pre);\n            // Remove mime-type-specific CSS classes\n            output.node.className = 'lm-Widget jp-RenderedText';\n            output.node.setAttribute('data-mime-type', 'application/vnd.jupyter.stderr');\n        });\n        return output;\n    }\n    /**\n     * Wrap a output widget within a output panel\n     *\n     * @param output Output widget to wrap\n     * @param executionCount Execution count\n     * @returns The output panel\n     */\n    _wrappedOutput(output, executionCount = null) {\n        const panel = new Private.OutputPanel();\n        panel.addClass(OUTPUT_AREA_ITEM_CLASS);\n        const prompt = this.contentFactory.createOutputPrompt();\n        prompt.executionCount = executionCount;\n        prompt.addClass(OUTPUT_AREA_PROMPT_CLASS);\n        panel.addWidget(prompt);\n        output.addClass(OUTPUT_AREA_OUTPUT_CLASS);\n        panel.addWidget(output);\n        return panel;\n    }\n}\nexport class SimplifiedOutputArea extends OutputArea {\n    /**\n     * Handle an input request from a kernel by doing nothing.\n     */\n    onInputRequest(msg, future) {\n        return;\n    }\n    /**\n     * Create an output item without a prompt, just the output widgets\n     */\n    createOutputItem(model) {\n        const output = this.createRenderedMimetype(model);\n        if (!output) {\n            return null;\n        }\n        const panel = new Private.OutputPanel();\n        panel.addClass(OUTPUT_AREA_ITEM_CLASS);\n        output.addClass(OUTPUT_AREA_OUTPUT_CLASS);\n        panel.addWidget(output);\n        return panel;\n    }\n}\n/**\n * A namespace for OutputArea statics.\n */\n(function (OutputArea) {\n    /**\n     * Execute code on an output area.\n     */\n    async function execute(code, output, sessionContext, metadata) {\n        var _a;\n        // Override the default for `stop_on_error`.\n        let stopOnError = true;\n        if (metadata &&\n            Array.isArray(metadata.tags) &&\n            metadata.tags.indexOf('raises-exception') !== -1) {\n            stopOnError = false;\n        }\n        const content = {\n            code,\n            stop_on_error: stopOnError\n        };\n        const kernel = (_a = sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel;\n        if (!kernel) {\n            throw new Error('Session has no kernel.');\n        }\n        const future = kernel.requestExecute(content, false, metadata);\n        output.future = future;\n        return future.done;\n    }\n    OutputArea.execute = execute;\n    function isIsolated(mimeType, metadata) {\n        const mimeMd = metadata[mimeType];\n        // mime-specific higher priority\n        if (mimeMd && mimeMd['isolated'] !== undefined) {\n            return !!mimeMd['isolated'];\n        }\n        else {\n            // fallback on global\n            return !!metadata['isolated'];\n        }\n    }\n    OutputArea.isIsolated = isIsolated;\n    /**\n     * The default implementation of `IContentFactory`.\n     */\n    class ContentFactory {\n        /**\n         * Create the output prompt for the widget.\n         */\n        createOutputPrompt() {\n            return new OutputPrompt();\n        }\n        /**\n         * Create an stdin widget.\n         */\n        createStdin(options) {\n            return new Stdin(options);\n        }\n    }\n    OutputArea.ContentFactory = ContentFactory;\n    /**\n     * The default `ContentFactory` instance.\n     */\n    OutputArea.defaultContentFactory = new ContentFactory();\n})(OutputArea || (OutputArea = {}));\n/**\n * The default output prompt implementation\n */\nexport class OutputPrompt extends Widget {\n    /*\n     * Create an output prompt widget.\n     */\n    constructor() {\n        super();\n        this._executionCount = null;\n        this.addClass(OUTPUT_PROMPT_CLASS);\n    }\n    /**\n     * The execution count for the prompt.\n     */\n    get executionCount() {\n        return this._executionCount;\n    }\n    set executionCount(value) {\n        this._executionCount = value;\n        if (value === null) {\n            this.node.textContent = '';\n        }\n        else {\n            this.node.textContent = `[${value}]:`;\n        }\n    }\n}\n/**\n * The default stdin widget.\n */\nexport class Stdin extends Widget {\n    static _historyIx(key, ix) {\n        const history = Stdin._history.get(key);\n        if (!history) {\n            return undefined;\n        }\n        const len = history.length;\n        // wrap nonpositive ix to nonnegative ix\n        if (ix <= 0) {\n            return len + ix;\n        }\n    }\n    static _historyAt(key, ix) {\n        const history = Stdin._history.get(key);\n        if (!history) {\n            return undefined;\n        }\n        const len = history.length;\n        const ixpos = Stdin._historyIx(key, ix);\n        if (ixpos !== undefined && ixpos < len) {\n            return history[ixpos];\n        }\n        // return undefined if ix is out of bounds\n    }\n    static _historyPush(key, line) {\n        const history = Stdin._history.get(key);\n        history.push(line);\n        if (history.length > 1000) {\n            // truncate line history if it's too long\n            history.shift();\n        }\n    }\n    static _historySearch(key, pat, ix, reverse = true) {\n        const history = Stdin._history.get(key);\n        const len = history.length;\n        const ixpos = Stdin._historyIx(key, ix);\n        const substrFound = (x) => x.search(pat) !== -1;\n        if (ixpos === undefined) {\n            return;\n        }\n        if (reverse) {\n            if (ixpos === 0) {\n                // reverse search fails if already at start of history\n                return;\n            }\n            const ixFound = history.slice(0, ixpos).findLastIndex(substrFound);\n            if (ixFound !== -1) {\n                // wrap ix to negative\n                return ixFound - len;\n            }\n        }\n        else {\n            if (ixpos >= len - 1) {\n                // forward search fails if already at end of history\n                return;\n            }\n            const ixFound = history.slice(ixpos + 1).findIndex(substrFound);\n            if (ixFound !== -1) {\n                // wrap ix to negative and adjust for slice\n                return ixFound - len + ixpos + 1;\n            }\n        }\n    }\n    /**\n     * Construct a new input widget.\n     */\n    constructor(options) {\n        var _a;\n        super({\n            node: Private.createInputWidgetNode(options.prompt, options.password)\n        });\n        this._promise = new PromiseDelegate();\n        this._resolved = false;\n        this.addClass(STDIN_CLASS);\n        this._future = options.future;\n        this._historyIndex = 0;\n        this._historyKey =\n            options.inputHistoryScope === 'session'\n                ? options.parent_header.session\n                : '';\n        this._historyPat = '';\n        this._parentHeader = options.parent_header;\n        this._password = options.password;\n        this._trans = ((_a = options.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n        this._value = options.prompt + ' ';\n        this._input = this.node.getElementsByTagName('input')[0];\n        // make users aware of the line history feature\n        if (options.showInputPlaceholder && !this._password) {\n            this._input.placeholder = this._trans.__('↑↓ for history. Search history with c-↑/c-↓');\n        }\n        else {\n            this._input.placeholder = '';\n        }\n        // initialize line history\n        if (!Stdin._history.has(this._historyKey)) {\n            Stdin._history.set(this._historyKey, []);\n        }\n    }\n    /**\n     * The value of the widget.\n     */\n    get value() {\n        return this._promise.promise.then(() => this._value);\n    }\n    /**\n     * Handle the DOM events for the widget.\n     *\n     * @param event - The DOM event sent to the widget.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the dock panel's node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        if (this._resolved) {\n            // Do not handle any more key events if the promise was resolved.\n            event.preventDefault();\n            return;\n        }\n        const input = this._input;\n        if (event.type === 'keydown') {\n            if (event.key === 'Enter') {\n                this.resetSearch();\n                this._future.sendInputReply({\n                    status: 'ok',\n                    value: input.value\n                }, this._parentHeader);\n                if (this._password) {\n                    this._value += '········';\n                }\n                else {\n                    this._value += input.value;\n                    Stdin._historyPush(this._historyKey, input.value);\n                }\n                this._resolved = true;\n                this._promise.resolve(void 0);\n            }\n            else if (event.key === 'Escape') {\n                // currently this gets clobbered by the documentsearch:end command at the notebook level\n                this.resetSearch();\n                input.blur();\n            }\n            else if (event.ctrlKey &&\n                (event.key === 'ArrowUp' || event.key === 'ArrowDown')) {\n                // if _historyPat is blank, use input as search pattern. Otherwise, reuse the current search pattern\n                if (this._historyPat === '') {\n                    this._historyPat = input.value;\n                }\n                const reverse = event.key === 'ArrowUp';\n                const searchHistoryIx = Stdin._historySearch(this._historyKey, this._historyPat, this._historyIndex, reverse);\n                if (searchHistoryIx !== undefined) {\n                    const historyLine = Stdin._historyAt(this._historyKey, searchHistoryIx);\n                    if (historyLine !== undefined) {\n                        if (this._historyIndex === 0) {\n                            this._valueCache = input.value;\n                        }\n                        this._setInputValue(historyLine);\n                        this._historyIndex = searchHistoryIx;\n                        // The default action for ArrowUp is moving to first character\n                        // but we want to keep the cursor at the end.\n                        event.preventDefault();\n                    }\n                }\n            }\n            else if (event.key === 'ArrowUp') {\n                this.resetSearch();\n                const historyLine = Stdin._historyAt(this._historyKey, this._historyIndex - 1);\n                if (historyLine) {\n                    if (this._historyIndex === 0) {\n                        this._valueCache = input.value;\n                    }\n                    this._setInputValue(historyLine);\n                    --this._historyIndex;\n                    // The default action for ArrowUp is moving to first character\n                    // but we want to keep the cursor at the end.\n                    event.preventDefault();\n                }\n            }\n            else if (event.key === 'ArrowDown') {\n                this.resetSearch();\n                if (this._historyIndex === 0) {\n                    // do nothing\n                }\n                else if (this._historyIndex === -1) {\n                    this._setInputValue(this._valueCache);\n                    ++this._historyIndex;\n                }\n                else {\n                    const historyLine = Stdin._historyAt(this._historyKey, this._historyIndex + 1);\n                    if (historyLine) {\n                        this._setInputValue(historyLine);\n                        ++this._historyIndex;\n                    }\n                }\n            }\n        }\n    }\n    resetSearch() {\n        this._historyPat = '';\n    }\n    /**\n     * Handle `after-attach` messages sent to the widget.\n     */\n    onAfterAttach(msg) {\n        this._input.addEventListener('keydown', this);\n        this._input.focus();\n    }\n    /**\n     * Handle `before-detach` messages sent to the widget.\n     */\n    onBeforeDetach(msg) {\n        this._input.removeEventListener('keydown', this);\n    }\n    _setInputValue(value) {\n        this._input.value = value;\n        // Set cursor at the end; this is usually not necessary when input is\n        // focused but having the explicit placement ensures consistency.\n        this._input.setSelectionRange(value.length, value.length);\n    }\n}\nStdin._history = new Map();\n/** ****************************************************************************\n * Private namespace\n ******************************************************************************/\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Create the node for an InputWidget.\n     */\n    function createInputWidgetNode(prompt, password) {\n        const node = document.createElement('div');\n        const promptNode = document.createElement('pre');\n        promptNode.className = STDIN_PROMPT_CLASS;\n        promptNode.textContent = prompt;\n        const input = document.createElement('input');\n        input.className = STDIN_INPUT_CLASS;\n        if (password) {\n            input.type = 'password';\n        }\n        node.appendChild(promptNode);\n        promptNode.appendChild(input);\n        return node;\n    }\n    Private.createInputWidgetNode = createInputWidgetNode;\n    /**\n     * A renderer for IFrame data.\n     */\n    class IsolatedRenderer extends Widget {\n        /**\n         * Create an isolated renderer.\n         */\n        constructor(wrapped) {\n            super({ node: document.createElement('iframe') });\n            this.addClass('jp-mod-isolated');\n            this._wrapped = wrapped;\n            // Once the iframe is loaded, the subarea is dynamically inserted\n            const iframe = this.node;\n            iframe.frameBorder = '0';\n            iframe.scrolling = 'auto';\n            iframe.addEventListener('load', () => {\n                // Workaround needed by Firefox, to properly render svg inside\n                // iframes, see https://stackoverflow.com/questions/10177190/\n                // svg-dynamically-added-to-iframe-does-not-render-correctly\n                iframe.contentDocument.open();\n                // Insert the subarea into the iframe\n                // We must directly write the html. At this point, subarea doesn't\n                // contain any user content.\n                iframe.contentDocument.write(this._wrapped.node.innerHTML);\n                iframe.contentDocument.close();\n                const body = iframe.contentDocument.body;\n                // Adjust the iframe height automatically\n                iframe.style.height = `${body.scrollHeight}px`;\n                iframe.heightChangeObserver = new ResizeObserver(() => {\n                    iframe.style.height = `${body.scrollHeight}px`;\n                });\n                iframe.heightChangeObserver.observe(body);\n            });\n        }\n        /**\n         * Render a mime model.\n         *\n         * @param model - The mime model to render.\n         *\n         * @returns A promise which resolves when rendering is complete.\n         *\n         * #### Notes\n         * This method may be called multiple times during the lifetime\n         * of the widget to update it if and when new data is available.\n         */\n        renderModel(model) {\n            return this._wrapped.renderModel(model);\n        }\n    }\n    Private.IsolatedRenderer = IsolatedRenderer;\n    Private.currentPreferredMimetype = new AttachedProperty({\n        name: 'preferredMimetype',\n        create: owner => ''\n    });\n    /**\n     * A `Panel` that's focused by a `contextmenu` event.\n     */\n    class OutputPanel extends Panel {\n        /**\n         * Construct a new `OutputPanel` widget.\n         */\n        constructor(options) {\n            super(options);\n        }\n        /**\n         * A callback that focuses on the widget.\n         */\n        _onContext(_) {\n            this.node.focus();\n        }\n        /**\n         * Handle `after-attach` messages sent to the widget.\n         */\n        onAfterAttach(msg) {\n            super.onAfterAttach(msg);\n            this.node.addEventListener('contextmenu', this._onContext.bind(this));\n        }\n        /**\n         * Handle `before-detach` messages sent to the widget.\n         */\n        onBeforeDetach(msg) {\n            super.onAfterDetach(msg);\n            this.node.removeEventListener('contextmenu', this._onContext.bind(this));\n        }\n    }\n    Private.OutputPanel = OutputPanel;\n    /**\n     * Trimmed outputs information widget.\n     */\n    class TrimmedOutputs extends Widget {\n        /**\n         * Widget constructor\n         *\n         * ### Notes\n         * The widget will be disposed on click after calling the callback.\n         *\n         * @param maxNumberOutputs Maximal number of outputs to display\n         * @param _onClick Callback on click event on the widget\n         */\n        constructor(maxNumberOutputs, onClick) {\n            const node = document.createElement('div');\n            const title = `The first ${maxNumberOutputs} are displayed`;\n            const msg = 'Show more outputs';\n            node.insertAdjacentHTML('afterbegin', `<a title=${title}>\n          <pre>${msg}</pre>\n        </a>`);\n            super({\n                node\n            });\n            this._onClick = onClick;\n            this.addClass('jp-TrimmedOutputs');\n            this.addClass('jp-RenderedHTMLCommon');\n        }\n        /**\n         * Handle the DOM events for widget.\n         *\n         * @param event - The DOM event sent to the widget.\n         *\n         * #### Notes\n         * This method implements the DOM `EventListener` interface and is\n         * called in response to events on the widget's DOM node. It should\n         * not be called directly by user code.\n         */\n        handleEvent(event) {\n            if (event.type === 'click') {\n                this._onClick(event);\n            }\n        }\n        /**\n         * Handle `after-attach` messages for the widget.\n         */\n        onAfterAttach(msg) {\n            super.onAfterAttach(msg);\n            this.node.addEventListener('click', this);\n        }\n        /**\n         * A message handler invoked on a `'before-detach'`\n         * message\n         */\n        onBeforeDetach(msg) {\n            super.onBeforeDetach(msg);\n            this.node.removeEventListener('click', this);\n        }\n    }\n    Private.TrimmedOutputs = TrimmedOutputs;\n})(Private || (Private = {}));\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module outputarea\n */\nexport * from './model';\nexport * from './widget';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module pdf-extension\n */\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Widget } from '@lumino/widgets';\n/**\n * The MIME type for PDF.\n */\nconst MIME_TYPE = 'application/pdf';\n/**\n * A class for rendering a PDF document.\n */\nexport class RenderedPDF extends Widget {\n    constructor() {\n        super();\n        this._base64 = '';\n        this._disposable = null;\n        this._ready = new PromiseDelegate();\n        this.addClass('jp-PDFContainer');\n        // We put the object in an iframe, which seems to have a better chance\n        // of retaining its scroll position upon tab focusing, moving around etc.\n        const iframe = document.createElement('iframe');\n        // Sets iframe loading to lazy\n        iframe.setAttribute('loading', 'lazy');\n        this.node.appendChild(iframe);\n        // The iframe content window is not available until the onload event.\n        iframe.onload = () => {\n            const body = iframe.contentWindow.document.createElement('body');\n            body.style.margin = '0px';\n            iframe.contentWindow.document.body = body;\n            this._object = iframe.contentWindow.document.createElement('object');\n            // work around for https://discussions.apple.com/thread/252247740\n            // Detect if running on Desktop Safari\n            if (!window.safari) {\n                this._object.type = MIME_TYPE;\n            }\n            this._object.width = '100%';\n            this._object.height = '100%';\n            body.appendChild(this._object);\n            this._ready.resolve(void 0);\n        };\n    }\n    /**\n     * Render PDF into this widget's node.\n     */\n    async renderModel(model) {\n        await this._ready.promise;\n        const data = model.data[MIME_TYPE];\n        if (!data ||\n            (data.length === this._base64.length && data === this._base64)) {\n            // If there is no data, or if the string has not changed, we do not\n            // need to re-parse the data and rerender. We do, however, check\n            // for a fragment if the user wants to scroll the output.\n            if (model.metadata.fragment && this._object.data) {\n                const url = this._object.data;\n                this._object.data = `${url.split('#')[0]}${model.metadata.fragment}`;\n            }\n            // For some opaque reason, Firefox seems to loose its scroll position\n            // upon unhiding a PDF. But triggering a refresh of the URL makes it\n            // find it again. No idea what the reason for this is.\n            if (Private.IS_FIREFOX) {\n                this._object.data = this._object.data; // eslint-disable-line\n            }\n            return Promise.resolve(void 0);\n        }\n        this._base64 = data;\n        const blob = Private.b64toBlob(data, MIME_TYPE);\n        // Release reference to any previous object url.\n        if (this._disposable) {\n            this._disposable.dispose();\n        }\n        let objectUrl = URL.createObjectURL(blob);\n        if (model.metadata.fragment) {\n            objectUrl += model.metadata.fragment;\n        }\n        this._object.data = objectUrl;\n        // Set the disposable release the object URL.\n        this._disposable = new DisposableDelegate(() => {\n            try {\n                URL.revokeObjectURL(objectUrl);\n            }\n            catch (error) {\n                /* no-op */\n            }\n        });\n        return;\n    }\n    /**\n     * Handle a `before-hide` message.\n     */\n    onBeforeHide() {\n        // Dispose of any URL fragment before hiding the widget\n        // so that it is not remembered upon show. Only Firefox\n        // seems to have a problem with this.\n        if (Private.IS_FIREFOX) {\n            this._object.data = this._object.data.split('#')[0];\n        }\n    }\n    /**\n     * Dispose of the resources held by the pdf widget.\n     */\n    dispose() {\n        if (this._disposable) {\n            this._disposable.dispose();\n        }\n        super.dispose();\n    }\n}\n/**\n * A mime renderer factory for PDF data.\n */\nexport const rendererFactory = {\n    safe: false,\n    mimeTypes: [MIME_TYPE],\n    defaultRank: 100,\n    createRenderer: options => new RenderedPDF()\n};\nconst extensions = [\n    {\n        id: '@jupyterlab/pdf-extension:factory',\n        description: 'Adds renderer for PDF content.',\n        rendererFactory,\n        dataType: 'string',\n        documentWidgetFactoryOptions: {\n            name: 'PDF',\n            // TODO: translate label\n            modelName: 'base64',\n            primaryFileType: 'PDF',\n            fileTypes: ['PDF'],\n            defaultFor: ['PDF']\n        }\n    }\n];\nexport default extensions;\n/**\n * A namespace for PDF widget private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * A flag for determining whether the user is using Firefox.\n     * There are some different PDF viewer behaviors on Firefox,\n     * and we try to address them with this. User agent string parsing\n     * is *not* reliable, so this should be considered a best-effort test.\n     */\n    Private.IS_FIREFOX = /Firefox/.test(navigator.userAgent);\n    /**\n     * Convert a base64 encoded string to a Blob object.\n     * Modified from a snippet found here:\n     * https://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript\n     *\n     * @param b64Data - The base64 encoded data.\n     *\n     * @param contentType - The mime type of the data.\n     *\n     * @param sliceSize - The size to chunk the data into for processing.\n     *\n     * @returns a Blob for the data.\n     */\n    function b64toBlob(b64Data, contentType = '', sliceSize = 512) {\n        const byteCharacters = atob(b64Data);\n        const byteArrays = [];\n        for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n            const slice = byteCharacters.slice(offset, offset + sliceSize);\n            const byteNumbers = new Array(slice.length);\n            for (let i = 0; i < slice.length; i++) {\n                byteNumbers[i] = slice.charCodeAt(i);\n            }\n            const byteArray = new Uint8Array(byteNumbers);\n            byteArrays.push(byteArray);\n        }\n        return new Blob(byteArrays, { type: contentType });\n    }\n    Private.b64toBlob = b64toBlob;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\n\nimport './base.css';\n","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module pluginmanager-extension\n */\nimport { ILayoutRestorer, JupyterLab } from '@jupyterlab/application';\nimport { ICommandPalette, MainAreaWidget, WidgetTracker } from '@jupyterlab/apputils';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { CommandToolbarButton, extensionIcon, refreshIcon } from '@jupyterlab/ui-components';\nimport { IPluginManager, PluginListModel, Plugins } from '@jupyterlab/pluginmanager';\n/**\n * The command IDs used by the pluginmanager plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.open = 'pluginmanager:open';\n    CommandIDs.refreshPlugins = 'pluginmanager:refresh';\n})(CommandIDs || (CommandIDs = {}));\nconst PLUGIN_ID = '@jupyterlab/pluginmanager-extension:plugin';\n/**\n * A plugin for managing status of other plugins.\n */\nconst pluginmanager = {\n    id: PLUGIN_ID,\n    description: 'Enable or disable individual plugins.',\n    autoStart: true,\n    requires: [JupyterLab.IInfo],\n    optional: [ITranslator, ICommandPalette, ILayoutRestorer],\n    provides: IPluginManager,\n    activate: (app, appInfo, translator, palette, restorer) => {\n        const { commands, shell } = app;\n        translator = translator !== null && translator !== void 0 ? translator : nullTranslator;\n        const trans = translator.load('jupyterlab');\n        // Translation strings.\n        const category = trans.__('Plugin Manager');\n        const widgetLabel = trans.__('Advanced Plugin Manager');\n        const refreshPlugins = trans.__('Refresh Plugin List');\n        const namespace = 'plugin-manager';\n        const tracker = new WidgetTracker({\n            namespace: namespace\n        });\n        /**\n         * Create a MainAreaWidget for Plugin Manager.\n         */\n        function createWidget(args) {\n            const model = new PluginListModel({\n                ...args,\n                pluginData: {\n                    availablePlugins: appInfo.availablePlugins\n                },\n                serverSettings: app.serviceManager.serverSettings,\n                extraLockedPlugins: [\n                    PLUGIN_ID,\n                    // The app needs a service manager to function\n                    '@jupyterlab/services-extension:service-manager',\n                    // UI will not proceed beyond splash without `layout` plugin\n                    '@jupyterlab/application-extension:layout',\n                    // State restoration does not work well without resolver,\n                    // can leave user locked out of the plugin manager\n                    // (if command palette and menu are disabled too)\n                    '@jupyterlab/apputils-extension:resolver'\n                ],\n                translator: translator !== null && translator !== void 0 ? translator : nullTranslator\n            });\n            const content = new Plugins({\n                model,\n                translator: translator !== null && translator !== void 0 ? translator : nullTranslator\n            });\n            content.title.label = widgetLabel;\n            content.title.icon = extensionIcon;\n            content.title.caption = trans.__('Plugin Manager');\n            const main = new MainAreaWidget({ content, reveal: model.ready });\n            main.toolbar.addItem('refresh-plugins', new CommandToolbarButton({\n                id: CommandIDs.refreshPlugins,\n                args: { noLabel: true },\n                commands\n            }));\n            return main;\n        }\n        // Register commands.\n        commands.addCommand(CommandIDs.open, {\n            label: widgetLabel,\n            execute: args => {\n                const main = createWidget(args);\n                shell.add(main, 'main', { type: 'Plugins' });\n                // add to tracker so it can be restored, and update when choices change\n                void tracker.add(main);\n                main.content.model.trackerDataChanged.connect(() => {\n                    void tracker.save(main);\n                });\n                return main;\n            }\n        });\n        commands.addCommand(CommandIDs.refreshPlugins, {\n            label: args => (args.noLabel ? '' : refreshPlugins),\n            caption: trans.__('Refresh plugins list'),\n            icon: refreshIcon,\n            execute: async () => {\n                var _a;\n                return (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content.model.refresh().catch((reason) => {\n                    console.error(`Failed to refresh the available plugins list:\\n${reason}`);\n                });\n            }\n        });\n        if (palette) {\n            palette.addItem({ command: CommandIDs.open, category });\n        }\n        if (restorer) {\n            void restorer.restore(tracker, {\n                command: CommandIDs.open,\n                name: _ => 'plugins',\n                args: widget => {\n                    const { query, isDisclaimed } = widget.content.model;\n                    const args = {\n                        query,\n                        isDisclaimed\n                    };\n                    return args;\n                }\n            });\n        }\n        return {\n            open: () => {\n                return app.commands.execute(CommandIDs.open);\n            }\n        };\n    }\n};\nconst plugins = [pluginmanager];\nexport default plugins;\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/pluginmanager/style/index.js';\n","import * as React from 'react';\nexport function PluginRequiredMessage(props) {\n    return (React.createElement(React.Fragment, null,\n        props.trans.__('The plugin \"%1\" cannot be disabled as it is required by other plugins:', props.plugin.id),\n        React.createElement(\"ul\", null, props.dependants.map(plugin => (React.createElement(\"li\", { key: 'dependantsDialog-' + plugin.id }, plugin.id)))),\n        props.trans.__('Please disable the dependent plugins first.')));\n}\nexport function PluginInUseMessage(props) {\n    return (React.createElement(\"div\", { className: 'jp-pluginmanager-PluginInUseMessage' },\n        props.trans.__('While the plugin \"%1\" is not required by other enabled plugins, some plugins provide optional features depending on it. These plugins are:', props.plugin.id),\n        React.createElement(\"ul\", null, props.optionalDependants.map(plugin => (React.createElement(\"li\", { key: 'optionalDependantsDialog-' + plugin.id }, plugin.id)))),\n        props.trans.__('Do you want to disable it anyway?')));\n}\n//# sourceMappingURL=dialogs.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { Dialog, showDialog } from '@jupyterlab/apputils';\nimport { URLExt } from '@jupyterlab/coreutils';\nimport { ServerConnection } from '@jupyterlab/services';\nimport { VDomModel } from '@jupyterlab/ui-components';\nimport { Signal } from '@lumino/signaling';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { PluginInUseMessage, PluginRequiredMessage } from './dialogs';\n/**\n * The server API path for querying/modifying available plugins.\n */\nconst PLUGIN_API_PATH = 'lab/api/plugins';\n/**\n * The model representing plugin list.\n */\nexport class PluginListModel extends VDomModel {\n    constructor(options) {\n        var _a, _b, _c;\n        super();\n        /**\n         * Contains an error message if an error occurred when querying plugin status.\n         */\n        this.statusError = null;\n        /**\n         * Contains an error message if an error occurred when enabling/disabling plugin.\n         */\n        this.actionError = null;\n        this._trackerDataChanged = new Signal(this);\n        this._isLoading = false;\n        this._pendingActions = [];\n        this._ready = new PromiseDelegate();\n        this._pluginData = options.pluginData;\n        this._serverSettings =\n            options.serverSettings || ServerConnection.makeSettings();\n        this._query = options.query || '';\n        this._isDisclaimed = (_a = options.isDisclaimed) !== null && _a !== void 0 ? _a : false;\n        this._extraLockedPlugins = (_b = options.extraLockedPlugins) !== null && _b !== void 0 ? _b : [];\n        this.refresh()\n            .then(() => this._ready.resolve())\n            .catch(e => this._ready.reject(e));\n        this._trans = ((_c = options.translator) !== null && _c !== void 0 ? _c : nullTranslator).load('jupyterlab');\n    }\n    get available() {\n        return [...this._available.values()];\n    }\n    /**\n     * Whether plugin data is still getting loaded.\n     */\n    get isLoading() {\n        return this._isLoading;\n    }\n    /**\n     * Whether the warning is disclaimed or not.\n     */\n    get isDisclaimed() {\n        return this._isDisclaimed;\n    }\n    set isDisclaimed(v) {\n        if (v !== this._isDisclaimed) {\n            this._isDisclaimed = v;\n            this.stateChanged.emit();\n            this._trackerDataChanged.emit(void 0);\n        }\n    }\n    /**\n     * The search query.\n     *\n     * Setting its value triggers a new search.\n     */\n    get query() {\n        return this._query;\n    }\n    set query(value) {\n        if (this._query !== value) {\n            this._query = value;\n            this.stateChanged.emit();\n            this._trackerDataChanged.emit(void 0);\n        }\n    }\n    /**\n     * A promise that resolves when the trackable data changes\n     */\n    get trackerDataChanged() {\n        return this._trackerDataChanged;\n    }\n    /**\n     * A promise that resolves when the plugins were fetched from the server\n     */\n    get ready() {\n        return this._ready.promise;\n    }\n    /**\n     * Enable a plugin.\n     *\n     * @param entry An entry indicating which plugin to enable.\n     */\n    async enable(entry) {\n        if (!this.isDisclaimed) {\n            throw new Error('User has not confirmed the disclaimer');\n        }\n        await this._performAction('enable', entry);\n        entry.enabled = true;\n    }\n    /**\n     * Disable a plugin.\n     *\n     * @param entry An entry indicating which plugin to disable.\n     * @returns Whether the plugin was disabled\n     */\n    async disable(entry) {\n        if (!this.isDisclaimed) {\n            throw new Error('User has not confirmed the disclaimer');\n        }\n        const { dependants, optionalDependants } = this.getDependants(entry);\n        if (dependants.length > 0) {\n            // We require user to disable plugins one-by-one as each of them may have\n            // further dependencies (or optional dependencies) and we want the user to\n            // take a pause to think about those.\n            void showDialog({\n                title: this._trans.__('This plugin is required by other plugins'),\n                body: PluginRequiredMessage({\n                    plugin: entry,\n                    dependants,\n                    trans: this._trans\n                }),\n                buttons: [Dialog.okButton()]\n            });\n            return;\n        }\n        if (optionalDependants.length > 0) {\n            const userConfirmation = await showDialog({\n                title: this._trans.__('This plugin is used by other plugins'),\n                body: PluginInUseMessage({\n                    plugin: entry,\n                    optionalDependants,\n                    trans: this._trans\n                }),\n                buttons: [\n                    Dialog.okButton({ label: this._trans.__('Disable anyway') }),\n                    Dialog.cancelButton()\n                ]\n            });\n            if (!userConfirmation.button.accept) {\n                return;\n            }\n        }\n        await this._performAction('disable', entry);\n        if (this.actionError) {\n            return;\n        }\n        entry.enabled = false;\n    }\n    getDependants(entry) {\n        const dependants = [];\n        const optionalDependants = [];\n        if (entry.provides) {\n            const tokenName = entry.provides.name;\n            for (const plugin of this._available.values()) {\n                if (!plugin.enabled) {\n                    continue;\n                }\n                if (plugin.requires\n                    .filter(token => !!token)\n                    .some(token => token.name === tokenName)) {\n                    dependants.push(plugin);\n                }\n                if (plugin.optional\n                    .filter(token => !!token)\n                    .some(token => token.name === tokenName)) {\n                    optionalDependants.push(plugin);\n                }\n            }\n        }\n        return {\n            dependants,\n            optionalDependants\n        };\n    }\n    /**\n     * Whether there are currently any actions pending.\n     */\n    hasPendingActions() {\n        return this._pendingActions.length > 0;\n    }\n    /**\n     * Send a request to the server to perform an action on a plugin.\n     *\n     * @param action A valid action to perform.\n     * @param entry The plugin to perform the action on.\n     */\n    _performAction(action, entry) {\n        this.actionError = null;\n        const actionRequest = this._requestAPI({}, {\n            method: 'POST',\n            body: JSON.stringify({\n                cmd: action,\n                plugin_name: entry.id\n            })\n        });\n        actionRequest.catch(reason => {\n            this.actionError = reason.toString();\n        });\n        this._addPendingAction(actionRequest);\n        return actionRequest;\n    }\n    /**\n     * Add a pending action.\n     *\n     * @param pending A promise that resolves when the action is completed.\n     */\n    _addPendingAction(pending) {\n        // Add to pending actions collection\n        this._pendingActions.push(pending);\n        // Ensure action is removed when resolved\n        const remove = () => {\n            const i = this._pendingActions.indexOf(pending);\n            this._pendingActions.splice(i, 1);\n            this.stateChanged.emit(undefined);\n        };\n        pending.then(remove, remove);\n        // Signal changed state\n        this.stateChanged.emit(undefined);\n    }\n    /**\n     * Refresh plugin lock statuses\n     */\n    async refresh() {\n        var _a;\n        this.statusError = null;\n        this._isLoading = true;\n        this.stateChanged.emit();\n        try {\n            // Get the lock status from backend; if backend is not available,\n            // we assume that all plugins are locked.\n            const fallback = {\n                allLocked: true,\n                lockRules: []\n            };\n            const status = (_a = (await this._requestAPI())) !== null && _a !== void 0 ? _a : fallback;\n            this._available = new Map(this._pluginData.availablePlugins.map(plugin => {\n                let tokenLabel = plugin.provides\n                    ? plugin.provides.name.split(':')[1]\n                    : undefined;\n                if (plugin.provides && !tokenLabel) {\n                    tokenLabel = plugin.provides.name;\n                }\n                return [\n                    plugin.id,\n                    {\n                        ...plugin,\n                        locked: this._isLocked(plugin.id, status),\n                        tokenLabel\n                    }\n                ];\n            }));\n        }\n        catch (reason) {\n            this.statusError = reason.toString();\n        }\n        finally {\n            this._isLoading = false;\n            this.stateChanged.emit();\n        }\n    }\n    _isLocked(pluginId, status) {\n        if (status.allLocked) {\n            // All plugins are locked.\n            return true;\n        }\n        if (this._extraLockedPlugins.includes(pluginId)) {\n            // Plugin is locked on client side.\n            return true;\n        }\n        const extension = pluginId.split(':')[0];\n        if (status.lockRules.includes(extension)) {\n            // Entire extension is locked.\n            return true;\n        }\n        if (status.lockRules.includes(pluginId)) {\n            // This plugin specifically is locked.\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Call the plugin API\n     *\n     * @param endPoint API REST end point for the plugin\n     * @param init Initial values for the request\n     * @returns The response body interpreted as JSON\n     */\n    async _requestAPI(queryArgs = {}, init = {}) {\n        // Make request to Jupyter API\n        const settings = this._serverSettings;\n        const requestUrl = URLExt.join(settings.baseUrl, PLUGIN_API_PATH);\n        let response;\n        try {\n            response = await ServerConnection.makeRequest(requestUrl + URLExt.objectToQueryString(queryArgs), init, settings);\n        }\n        catch (error) {\n            throw new ServerConnection.NetworkError(error);\n        }\n        let data = await response.text();\n        if (data.length > 0) {\n            try {\n                data = JSON.parse(data);\n            }\n            catch (error) {\n                console.log('Not a JSON response body.', response);\n            }\n        }\n        if (!response.ok) {\n            throw new ServerConnection.ResponseError(response, data.message || data);\n        }\n        return data;\n    }\n}\n//# sourceMappingURL=model.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { VDomRenderer } from '@jupyterlab/apputils';\nimport { FilterBox, lockIcon, Table } from '@jupyterlab/ui-components';\nimport { Panel } from '@lumino/widgets';\nimport * as React from 'react';\n/**\n * Panel with a table of available plugins allowing to enable/disable each.\n */\nexport class Plugins extends Panel {\n    constructor(options) {\n        const { model, translator } = options;\n        super();\n        this.model = model;\n        this.addClass('jp-pluginmanager');\n        this.trans = translator.load('jupyterlab');\n        this.addWidget(new Disclaimer(model, this.trans));\n        const header = new Header(model, this.trans);\n        this.addWidget(header);\n        const availableList = new AvailableList(model, this.trans);\n        this.addWidget(availableList);\n    }\n}\nclass AvailableList extends VDomRenderer {\n    constructor(model, trans) {\n        super(model);\n        this.trans = trans;\n        this.addClass('jp-pluginmanager-AvailableList');\n    }\n    render() {\n        return (React.createElement(React.Fragment, null, this.model.statusError !== null ? (React.createElement(ErrorMessage, null, this.trans.__('Error querying installed extensions%1', this.model.statusError ? `: ${this.model.statusError}` : '.'))) : this.model.isLoading ? (React.createElement(\"div\", { className: \"jp-pluginmanager-loader\" }, this.trans.__('Updating plugin list…'))) : (React.createElement(Table, { blankIndicator: () => {\n                return React.createElement(\"div\", null, this.trans.__('No entries'));\n            }, sortKey: 'plugin-id', rows: this.model.available\n                .filter(pkg => {\n                const pattern = new RegExp(this.model.query, 'i');\n                return (pattern.test(pkg.id) ||\n                    pattern.test(pkg.extension) ||\n                    (pkg.tokenLabel && pattern.test(pkg.tokenLabel)));\n            })\n                .map(data => {\n                return {\n                    data: data,\n                    key: data.id\n                };\n            }), columns: [\n                {\n                    id: 'plugin-id',\n                    label: this.trans.__('Plugin'),\n                    renderCell: (row) => (React.createElement(React.Fragment, null,\n                        React.createElement(\"code\", null, row.id),\n                        React.createElement(\"br\", null),\n                        row.description)),\n                    sort: (a, b) => a.id.localeCompare(b.id)\n                },\n                {\n                    id: 'description',\n                    label: this.trans.__('Description'),\n                    renderCell: (row) => React.createElement(React.Fragment, null, row.description),\n                    sort: (a, b) => a.description && b.description\n                        ? a.description.localeCompare(b.description)\n                        : undefined,\n                    isHidden: true\n                },\n                {\n                    id: 'autostart',\n                    label: this.trans.__('Autostart?'),\n                    renderCell: (row) => {\n                        switch (row.autoStart) {\n                            case 'defer':\n                                return this.trans.__('Defer');\n                            case true:\n                                return this.trans.__('Yes');\n                            case false:\n                            case undefined: // The default is `false`.\n                                return this.trans.__('No');\n                            default:\n                                const leftover = row.autoStart;\n                                throw new Error(`Unknown value: ${leftover}`);\n                        }\n                    },\n                    sort: (a, b) => a.autoStart === b.autoStart ? 0 : a.autoStart ? -1 : 1\n                },\n                {\n                    id: 'requires',\n                    label: this.trans.__('Depends on'),\n                    renderCell: (row) => (React.createElement(React.Fragment, null, row.requires.map(v => v.name).join('\\n'))),\n                    sort: (a, b) => (a.requires || []).length - (b.requires || []).length,\n                    isHidden: true\n                },\n                {\n                    id: 'extension',\n                    label: this.trans.__('Extension'),\n                    renderCell: (row) => React.createElement(React.Fragment, null, row.extension),\n                    sort: (a, b) => a.extension.localeCompare(b.extension)\n                },\n                {\n                    id: 'provides',\n                    label: this.trans.__('Provides'),\n                    renderCell: (row) => (React.createElement(React.Fragment, null, row.provides ? (React.createElement(\"code\", { title: row.provides.name }, row.tokenLabel)) : ('-'))),\n                    sort: (a, b) => (a.tokenLabel || '').localeCompare(b.tokenLabel || '')\n                },\n                {\n                    id: 'enabled',\n                    label: this.trans.__('Enabled'),\n                    renderCell: (row) => (React.createElement(React.Fragment, null,\n                        React.createElement(\"input\", { type: \"checkbox\", checked: row.enabled, disabled: row.locked || !this.model.isDisclaimed, title: row.locked || !this.model.isDisclaimed\n                                ? row.locked\n                                    ? this.trans.__('This plugin is locked.')\n                                    : this.trans.__('To enable/disable, please acknowledge the disclaimer.')\n                                : row.enabled\n                                    ? this.trans.__('Disable %1 plugin', row.id)\n                                    : this.trans.__('Enable %1 plugin', row.id), onChange: (event) => {\n                                if (!this.model.isDisclaimed) {\n                                    return;\n                                }\n                                if (event.target.checked) {\n                                    void this.onAction('enable', row);\n                                }\n                                else {\n                                    void this.onAction('disable', row);\n                                }\n                            } }),\n                        row.locked ? (React.createElement(lockIcon.react, { tag: \"span\", title: this.trans.__('This plugin was locked by system administrator or is a critical dependency and cannot be enabled/disabled.') })) : (''))),\n                    sort: (a, b) => +a.enabled - +b.enabled\n                }\n            ] }))));\n    }\n    /**\n     * Callback handler for when the user wants to perform an action on an extension.\n     *\n     * @param action The action to perform.\n     * @param entry The entry to perform the action on.\n     */\n    onAction(action, entry) {\n        switch (action) {\n            case 'enable':\n                return this.model.enable(entry);\n            case 'disable':\n                return this.model.disable(entry);\n            default:\n                throw new Error(`Invalid action: ${action}`);\n        }\n    }\n}\nclass Disclaimer extends VDomRenderer {\n    constructor(model, trans) {\n        super(model);\n        this.trans = trans;\n        this.addClass('jp-pluginmanager-Disclaimer');\n    }\n    render() {\n        return (React.createElement(\"div\", null,\n            React.createElement(\"div\", null, this.trans.__('Customise your experience/improve performance by disabling plugins you do not need. To disable or uninstall an entire extension use the Extension Manager instead. Changes will apply after reloading JupyterLab.')),\n            React.createElement(\"label\", null,\n                React.createElement(\"input\", { type: \"checkbox\", className: \"jp-mod-styled jp-pluginmanager-Disclaimer-checkbox\", defaultChecked: this.model.isDisclaimed, onChange: event => {\n                        this.model.isDisclaimed = event.target.checked;\n                    } }),\n                this.trans.__('I understand that disabling core application plugins may render features and parts of the user interface unavailable and recovery using `jupyter labextension enable <plugin-name>` command may be required'))));\n    }\n}\nclass Header extends VDomRenderer {\n    constructor(model, trans) {\n        super(model);\n        this.trans = trans;\n        this.addClass('jp-pluginmanager-Header');\n    }\n    render() {\n        return (React.createElement(React.Fragment, null,\n            React.createElement(FilterBox, { placeholder: this.trans.__('Filter'), updateFilter: (fn, query) => {\n                    this.model.query = query !== null && query !== void 0 ? query : '';\n                }, initialQuery: this.model.query, useFuzzyFilter: false }),\n            React.createElement(\"div\", { className: `jp-pluginmanager-pending ${this.model.hasPendingActions() ? 'jp-mod-hasPending' : ''}` }),\n            this.model.actionError && (React.createElement(ErrorMessage, null,\n                React.createElement(\"p\", null, this.trans.__('Error when performing an action.')),\n                React.createElement(\"p\", null, this.trans.__('Reason given:')),\n                React.createElement(\"pre\", null, this.model.actionError)))));\n    }\n}\nfunction ErrorMessage(props) {\n    return React.createElement(\"div\", { className: \"jp-pluginmanager-error\" }, props.children);\n}\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The plugin manager token.\n */\nexport const IPluginManager = new Token('@jupyterlab/pluginmanager:IPluginManager', `A canary for plugin manager presence, with a method to open the plugin manager widget.`);\n//# sourceMappingURL=tokens.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module pluginmanager\n */\nexport * from './model';\nexport * from './widget';\nexport * from './tokens';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/application/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The property inspector provider token.\n */\nexport const IPropertyInspectorProvider = new Token('@jupyterlab/property-inspector:IPropertyInspectorProvider', 'A service to register new widgets in the property inspector side panel.');\n//# sourceMappingURL=token.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module property-inspector\n */\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { ReactWidget } from '@jupyterlab/ui-components';\nimport { Signal } from '@lumino/signaling';\nimport { FocusTracker, SingletonLayout, Widget } from '@lumino/widgets';\nimport { IPropertyInspectorProvider } from './token';\nexport { IPropertyInspectorProvider };\n/**\n * The implementation of the PropertyInspector.\n */\nclass PropertyInspectorProvider extends Widget {\n    /**\n     * Construct a new Property Inspector.\n     */\n    constructor() {\n        super();\n        this._tracker = new FocusTracker();\n        this._inspectors = new Map();\n        this.addClass('jp-PropertyInspector');\n        this._tracker = new FocusTracker();\n        this._tracker.currentChanged.connect(this._onCurrentChanged, this);\n    }\n    /**\n     * Register a widget in the property inspector provider.\n     *\n     * @param widget The owner widget to register.\n     */\n    register(widget) {\n        if (this._inspectors.has(widget)) {\n            throw new Error('Widget is already registered');\n        }\n        const inspector = new Private.PropertyInspector(widget);\n        widget.disposed.connect(this._onWidgetDisposed, this);\n        this._inspectors.set(widget, inspector);\n        inspector.onAction.connect(this._onInspectorAction, this);\n        this._tracker.add(widget);\n        return inspector;\n    }\n    /**\n     * The current widget being tracked by the inspector.\n     */\n    get currentWidget() {\n        return this._tracker.currentWidget;\n    }\n    /**\n     * Refresh the content for the current widget.\n     */\n    refresh() {\n        const current = this._tracker.currentWidget;\n        if (!current) {\n            this.setContent(null);\n            return;\n        }\n        const inspector = this._inspectors.get(current);\n        if (inspector) {\n            this.setContent(inspector.content);\n        }\n    }\n    /**\n     * Handle the disposal of a widget.\n     */\n    _onWidgetDisposed(sender) {\n        const inspector = this._inspectors.get(sender);\n        if (inspector) {\n            inspector.dispose();\n            this._inspectors.delete(sender);\n        }\n    }\n    /**\n     * Handle inspector actions.\n     */\n    _onInspectorAction(sender, action) {\n        const owner = sender.owner;\n        const current = this._tracker.currentWidget;\n        switch (action) {\n            case 'content':\n                if (current === owner) {\n                    this.setContent(sender.content);\n                }\n                break;\n            case 'dispose':\n                if (owner) {\n                    this._tracker.remove(owner);\n                    this._inspectors.delete(owner);\n                }\n                break;\n            case 'show-panel':\n                if (current === owner) {\n                    this.showPanel();\n                }\n                break;\n            default:\n                throw new Error('Unsupported inspector action');\n        }\n    }\n    /**\n     * Handle a change to the current widget in the tracker.\n     */\n    _onCurrentChanged() {\n        const current = this._tracker.currentWidget;\n        if (current) {\n            const inspector = this._inspectors.get(current);\n            const content = inspector.content;\n            this.setContent(content);\n        }\n        else {\n            this.setContent(null);\n        }\n    }\n}\n/**\n * A class that adds a property inspector provider to the\n * JupyterLab sidebar.\n */\nexport class SideBarPropertyInspectorProvider extends PropertyInspectorProvider {\n    /**\n     * Construct a new Side Bar Property Inspector.\n     */\n    constructor({ shell, placeholder, translator }) {\n        super();\n        this._labshell = shell;\n        this.translator = translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        const layout = (this.layout = new SingletonLayout());\n        if (placeholder) {\n            this._placeholder = placeholder;\n        }\n        else {\n            const node = document.createElement('div');\n            const content = document.createElement('div');\n            const placeholderHeadline = document.createElement('h3');\n            const placeholderText = document.createElement('p');\n            placeholderHeadline.textContent = this._trans.__('No Properties');\n            placeholderText.textContent = this._trans.__('The property inspector allows to view and edit properties of a selected notebook.');\n            content.className = 'jp-PropertyInspector-placeholderContent';\n            content.appendChild(placeholderHeadline);\n            content.appendChild(placeholderText);\n            node.appendChild(content);\n            this._placeholder = new Widget({ node });\n            this._placeholder.addClass('jp-PropertyInspector-placeholder');\n        }\n        layout.widget = this._placeholder;\n        this._labshell.currentChanged.connect(this._onShellCurrentChanged, this);\n        this._onShellCurrentChanged();\n    }\n    /**\n     * Set the content of the sidebar panel.\n     */\n    setContent(content) {\n        const layout = this.layout;\n        if (layout.widget) {\n            layout.widget.removeClass('jp-PropertyInspector-content');\n            layout.removeWidget(layout.widget);\n        }\n        if (!content) {\n            content = this._placeholder;\n        }\n        content.addClass('jp-PropertyInspector-content');\n        layout.widget = content;\n    }\n    /**\n     * Show the sidebar panel.\n     */\n    showPanel() {\n        this._labshell.activateById(this.id);\n    }\n    /**\n     * Handle the case when the current widget is not in our tracker.\n     */\n    _onShellCurrentChanged() {\n        const current = this.currentWidget;\n        if (!current) {\n            this.setContent(null);\n            return;\n        }\n        const currentShell = this._labshell.currentWidget;\n        if (currentShell === null || currentShell === void 0 ? void 0 : currentShell.node.contains(current.node)) {\n            this.refresh();\n        }\n        else {\n            this.setContent(null);\n        }\n    }\n}\n/**\n * A namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * An implementation of the property inspector used by the\n     * property inspector provider.\n     */\n    class PropertyInspector {\n        /**\n         * Construct a new property inspector.\n         */\n        constructor(owner) {\n            this._isDisposed = false;\n            this._content = null;\n            this._owner = null;\n            this._onAction = new Signal(this);\n            this._owner = owner;\n        }\n        /**\n         * The owner widget for the property inspector.\n         */\n        get owner() {\n            return this._owner;\n        }\n        /**\n         * The current content for the property inspector.\n         */\n        get content() {\n            return this._content;\n        }\n        /**\n         * Whether the property inspector is disposed.\n         */\n        get isDisposed() {\n            return this._isDisposed;\n        }\n        /**\n         * A signal used for actions related to the property inspector.\n         */\n        get onAction() {\n            return this._onAction;\n        }\n        /**\n         * Show the property inspector panel.\n         */\n        showPanel() {\n            if (this._isDisposed) {\n                return;\n            }\n            this._onAction.emit('show-panel');\n        }\n        /**\n         * Render the property inspector content.\n         */\n        render(widget) {\n            if (this._isDisposed) {\n                return;\n            }\n            if (widget instanceof Widget) {\n                this._content = widget;\n            }\n            else {\n                this._content = ReactWidget.create(widget);\n            }\n            this._onAction.emit('content');\n        }\n        /**\n         * Dispose of the property inspector.\n         */\n        dispose() {\n            if (this._isDisposed) {\n                return;\n            }\n            this._isDisposed = true;\n            this._content = null;\n            this._owner = null;\n            Signal.clearData(this);\n        }\n    }\n    Private.PropertyInspector = PropertyInspector;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/application/style/index.js';\n\nimport './base.css';\n","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module rendermime-interfaces\n */\nexport {};\n//# sourceMappingURL=index.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { ObservableJSON } from '@jupyterlab/observables';\nimport { JSONExt } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\n/**\n * The default implementation of a notebook attachment model.\n */\nexport class AttachmentModel {\n    /**\n     * Construct a new attachment model.\n     */\n    constructor(options) {\n        // All attachments are untrusted\n        this.trusted = false;\n        this._changed = new Signal(this);\n        this._raw = {};\n        const data = Private.getData(options.value);\n        this._data = new ObservableJSON({ values: data });\n        this._rawData = data;\n        // Make a copy of the data.\n        const value = options.value;\n        for (const key in value) {\n            // Ignore data and metadata that were stripped.\n            switch (key) {\n                case 'data':\n                    break;\n                default:\n                    this._raw[key] = Private.extract(value, key);\n            }\n        }\n    }\n    /**\n     * A signal emitted when the attachment model changes.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Dispose of the resources used by the attachment model.\n     */\n    dispose() {\n        this._data.dispose();\n        Signal.clearData(this);\n    }\n    /**\n     * The data associated with the model.\n     */\n    get data() {\n        return this._rawData;\n    }\n    /**\n     * The metadata associated with the model.\n     */\n    get metadata() {\n        return {};\n    }\n    /**\n     * Set the data associated with the model.\n     *\n     * #### Notes\n     * Depending on the implementation of the mime model,\n     * this call may or may not have deferred effects,\n     */\n    setData(options) {\n        if (options.data) {\n            this._updateObservable(this._data, options.data);\n            this._rawData = options.data;\n        }\n        this._changed.emit(void 0);\n    }\n    /**\n     * Serialize the model to JSON.\n     */\n    toJSON() {\n        const attachment = {};\n        for (const key in this._raw) {\n            attachment[key] = Private.extract(this._raw, key);\n        }\n        return attachment;\n    }\n    /**\n     * Update an observable JSON object using a readonly JSON object.\n     */\n    _updateObservable(observable, data) {\n        const oldKeys = observable.keys();\n        const newKeys = Object.keys(data);\n        // Handle removed keys.\n        for (const key of oldKeys) {\n            if (newKeys.indexOf(key) === -1) {\n                observable.delete(key);\n            }\n        }\n        // Handle changed data.\n        for (const key of newKeys) {\n            const oldValue = observable.get(key);\n            const newValue = data[key];\n            if (oldValue !== newValue) {\n                observable.set(key, newValue);\n            }\n        }\n    }\n}\n/**\n * The namespace for AttachmentModel statics.\n */\n(function (AttachmentModel) {\n    /**\n     * Get the data for an attachment.\n     *\n     * @param bundle - A kernel attachment MIME bundle.\n     *\n     * @returns - The data for the payload.\n     */\n    function getData(bundle) {\n        return Private.getData(bundle);\n    }\n    AttachmentModel.getData = getData;\n})(AttachmentModel || (AttachmentModel = {}));\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Get the data from a notebook attachment.\n     */\n    function getData(bundle) {\n        return convertBundle(bundle);\n    }\n    Private.getData = getData;\n    /**\n     * Get the bundle options given attachment model options.\n     */\n    function getBundleOptions(options) {\n        const data = getData(options.value);\n        return { data };\n    }\n    Private.getBundleOptions = getBundleOptions;\n    /**\n     * Extract a value from a JSONObject.\n     */\n    function extract(value, key) {\n        const item = value[key];\n        if (item === undefined || JSONExt.isPrimitive(item)) {\n            return item;\n        }\n        return JSONExt.deepCopy(item);\n    }\n    Private.extract = extract;\n    /**\n     * Convert a mime bundle to mime data.\n     */\n    function convertBundle(bundle) {\n        const map = Object.create(null);\n        for (const mimeType in bundle) {\n            map[mimeType] = extract(bundle, mimeType);\n        }\n        return map;\n    }\n})(Private || (Private = {}));\n//# sourceMappingURL=attachmentmodel.js.map","import * as widgets from './widgets';\n/**\n * A mime renderer factory for raw html.\n */\nexport const htmlRendererFactory = {\n    safe: true,\n    mimeTypes: ['text/html'],\n    defaultRank: 50,\n    createRenderer: options => new widgets.RenderedHTML(options)\n};\n/**\n * A mime renderer factory for images.\n */\nexport const imageRendererFactory = {\n    safe: true,\n    mimeTypes: [\n        'image/bmp',\n        'image/png',\n        'image/jpeg',\n        'image/gif',\n        'image/webp'\n    ],\n    defaultRank: 90,\n    createRenderer: options => new widgets.RenderedImage(options)\n};\n/**\n * A mime renderer factory for LaTeX.\n */\nexport const latexRendererFactory = {\n    safe: true,\n    mimeTypes: ['text/latex'],\n    defaultRank: 70,\n    createRenderer: options => new widgets.RenderedLatex(options)\n};\n/**\n * A mime renderer factory for Markdown.\n */\nexport const markdownRendererFactory = {\n    safe: true,\n    mimeTypes: ['text/markdown'],\n    defaultRank: 60,\n    createRenderer: options => new widgets.RenderedMarkdown(options)\n};\n/**\n * A mime renderer factory for svg.\n */\nexport const svgRendererFactory = {\n    safe: false,\n    mimeTypes: ['image/svg+xml'],\n    defaultRank: 80,\n    createRenderer: options => new widgets.RenderedSVG(options)\n};\n/**\n * A mime renderer factory for rendering stderr outputs\n */\nexport const errorRendererFactory = {\n    safe: true,\n    mimeTypes: ['application/vnd.jupyter.stderr'],\n    defaultRank: 110,\n    createRenderer: options => new widgets.RenderedError(options)\n};\n/**\n * A mime renderer factory for plain and jupyter console text data.\n */\nexport const textRendererFactory = {\n    safe: true,\n    mimeTypes: ['text/plain', 'application/vnd.jupyter.stdout'],\n    defaultRank: 120,\n    createRenderer: options => new widgets.RenderedText(options)\n};\n/**\n * A placeholder factory for rendered JavaScript.\n */\nexport const javaScriptRendererFactory = {\n    safe: false,\n    mimeTypes: ['text/javascript', 'application/javascript'],\n    defaultRank: 110,\n    createRenderer: options => new widgets.RenderedJavaScript(options)\n};\n/**\n * The standard factories provided by the rendermime package.\n */\nexport const standardRendererFactories = [\n    htmlRendererFactory,\n    markdownRendererFactory,\n    latexRendererFactory,\n    svgRendererFactory,\n    imageRendererFactory,\n    javaScriptRendererFactory,\n    errorRendererFactory,\n    textRendererFactory\n];\n//# sourceMappingURL=factories.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module rendermime\n */\nexport * from '@jupyterlab/rendermime-interfaces';\nexport * from './attachmentmodel';\nexport * from './factories';\nexport * from './latex';\nexport * from './mimemodel';\nexport * from './outputmodel';\nexport * from './registry';\nexport * from './renderers';\nexport * from './tokens';\nexport * from './widgets';\n//# sourceMappingURL=index.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n// Some magic for deferring mathematical expressions to MathJax\n// by hiding them from the Markdown parser.\n// Some of the code here is adapted with permission from Davide Cervone\n// under the terms of the Apache2 license governing the MathJax project.\n// Other minor modifications are also due to StackExchange and are used with\n// permission.\nconst inline = '$'; // the inline math delimiter\n// MATHSPLIT contains the pattern for math delimiters and special symbols\n// needed for searching for math in the text input.\nconst MATHSPLIT = /(\\$\\$?|\\\\(?:begin|end)\\{[a-z]*\\*?\\}|\\\\[{}$]|[{}]|(?:\\n\\s*)+|@@\\d+@@|\\\\\\\\(?:\\(|\\)|\\[|\\]))/i;\n/**\n *  Break up the text into its component parts and search\n *    through them for math delimiters, braces, linebreaks, etc.\n *  Math delimiters must match and braces must balance.\n *  Don't allow math to pass through a double linebreak\n *    (which will be a paragraph).\n */\nexport function removeMath(text) {\n    const math = []; // stores math strings for later\n    let start = null;\n    let end = null;\n    let last = null;\n    let braces = 0;\n    let deTilde;\n    // Except for extreme edge cases, this should catch precisely those pieces of the markdown\n    // source that will later be turned into code spans. While MathJax will not TeXify code spans,\n    // we still have to consider them at this point; the following issue has happened several times:\n    //\n    //     `$foo` and `$bar` are variables.  -->  <code>$foo ` and `$bar</code> are variables.\n    const hasCodeSpans = text.includes('`') || text.includes('~~~');\n    if (hasCodeSpans) {\n        text = text\n            .replace(/~/g, '~T')\n            // note: the `fence` (three or more consecutive tildes or backticks)\n            // can be followed by an `info string` but this cannot include backticks,\n            // see specification: https://spec.commonmark.org/0.30/#info-string\n            .replace(/^(?<fence>`{3,}|(~T){3,})[^`\\n]*\\n([\\s\\S]*?)^\\k<fence>`*$/gm, wholematch => wholematch.replace(/\\$/g, '~D'))\n            .replace(/(^|[^\\\\])(`+)([^\\n]*?[^`\\n])\\2(?!`)/gm, wholematch => wholematch.replace(/\\$/g, '~D'));\n        deTilde = (text) => {\n            return text.replace(/~([TD])/g, (wholematch, character) => character === 'T' ? '~' : inline);\n        };\n    }\n    else {\n        deTilde = (text) => {\n            return text;\n        };\n    }\n    let blocks = text.replace(/\\r\\n?/g, '\\n').split(MATHSPLIT);\n    for (let i = 1, m = blocks.length; i < m; i += 2) {\n        const block = blocks[i];\n        if (block.charAt(0) === '@') {\n            //\n            //  Things that look like our math markers will get\n            //  stored and then retrieved along with the math.\n            //\n            blocks[i] = '@@' + math.length + '@@';\n            math.push(block);\n        }\n        else if (start !== null) {\n            //\n            //  If we are in math, look for the end delimiter,\n            //    but don't go past double line breaks, and\n            //    and balance braces within the math.\n            //\n            if (block === end) {\n                if (braces) {\n                    last = i;\n                }\n                else {\n                    blocks = processMath(start, i, deTilde, math, blocks);\n                    start = null;\n                    end = null;\n                    last = null;\n                }\n            }\n            else if (block.match(/\\n.*\\n/)) {\n                if (last !== null) {\n                    i = last;\n                    blocks = processMath(start, i, deTilde, math, blocks);\n                }\n                start = null;\n                end = null;\n                last = null;\n                braces = 0;\n            }\n            else if (block === '{') {\n                braces++;\n            }\n            else if (block === '}' && braces) {\n                braces--;\n            }\n        }\n        else {\n            //\n            //  Look for math start delimiters and when\n            //    found, set up the end delimiter.\n            //\n            if (block === inline || block === '$$') {\n                start = i;\n                end = block;\n                braces = 0;\n            }\n            else if (block === '\\\\\\\\(' || block === '\\\\\\\\[') {\n                start = i;\n                end = block.slice(-1) === '(' ? '\\\\\\\\)' : '\\\\\\\\]';\n                braces = 0;\n            }\n            else if (block.substr(1, 5) === 'begin') {\n                start = i;\n                end = '\\\\end' + block.substr(6);\n                braces = 0;\n            }\n        }\n    }\n    if (start !== null && last !== null) {\n        blocks = processMath(start, last, deTilde, math, blocks);\n        start = null;\n        end = null;\n        last = null;\n    }\n    return { text: deTilde(blocks.join('')), math };\n}\n/**\n * Put back the math strings that were saved,\n * and clear the math array (no need to keep it around).\n */\nexport function replaceMath(text, math) {\n    /**\n     * Replace a math placeholder with its corresponding group.\n     * The math delimiters \"\\\\(\", \"\\\\[\", \"\\\\)\" and \"\\\\]\" are replaced\n     * removing one backslash in order to be interpreted correctly by MathJax.\n     */\n    const process = (match, n) => {\n        let group = math[n];\n        if (group.substr(0, 3) === '\\\\\\\\(' &&\n            group.substr(group.length - 3) === '\\\\\\\\)') {\n            group = '\\\\(' + group.substring(3, group.length - 3) + '\\\\)';\n        }\n        else if (group.substr(0, 3) === '\\\\\\\\[' &&\n            group.substr(group.length - 3) === '\\\\\\\\]') {\n            group = '\\\\[' + group.substring(3, group.length - 3) + '\\\\]';\n        }\n        return group;\n    };\n    // Replace all the math group placeholders in the text\n    // with the saved strings.\n    return text.replace(/@@(\\d+)@@/g, process);\n}\n/**\n * Process math blocks.\n *\n * The math is in blocks i through j, so\n *   collect it into one block and clear the others.\n *  Replace &, <, and > by named entities.\n *  For IE, put <br> at the ends of comments since IE removes \\n.\n *  Clear the current math positions and store the index of the\n *   math, then push the math string onto the storage array.\n *  The preProcess function is called on all blocks if it has been passed in\n */\nfunction processMath(i, j, preProcess, math, blocks) {\n    let block = blocks\n        .slice(i, j + 1)\n        .join('')\n        .replace(/&/g, '&amp;') // use HTML entity for &\n        .replace(/</g, '&lt;') // use HTML entity for <\n        .replace(/>/g, '&gt;'); // use HTML entity for >\n    if (navigator && navigator.appName === 'Microsoft Internet Explorer') {\n        block = block.replace(/(%[^\\n]*)\\n/g, '$1<br/>\\n');\n    }\n    while (j > i) {\n        blocks[j] = '';\n        j--;\n    }\n    blocks[i] = '@@' + math.length + '@@'; // replace the current block text with a unique tag to find later\n    if (preProcess) {\n        block = preProcess(block);\n    }\n    math.push(block);\n    return blocks;\n}\n//# sourceMappingURL=latex.js.map","/**\n * The default mime model implementation.\n */\nexport class MimeModel {\n    /**\n     * Construct a new mime model.\n     */\n    constructor(options = {}) {\n        this.trusted = !!options.trusted;\n        this._data = options.data || {};\n        this._metadata = options.metadata || {};\n        this._callback = options.callback || Private.noOp;\n    }\n    /**\n     * The data associated with the model.\n     */\n    get data() {\n        return this._data;\n    }\n    /**\n     * The metadata associated with the model.\n     */\n    get metadata() {\n        return this._metadata;\n    }\n    /**\n     * Set the data associated with the model.\n     *\n     * #### Notes\n     * Depending on the implementation of the mime model,\n     * this call may or may not have deferred effects,\n     */\n    setData(options) {\n        this._data = options.data || this._data;\n        this._metadata = options.metadata || this._metadata;\n        this._callback(options);\n    }\n}\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * A no-op callback function.\n     */\n    function noOp() {\n        /* no-op */\n    }\n    Private.noOp = noOp;\n})(Private || (Private = {}));\n//# sourceMappingURL=mimemodel.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport * as nbformat from '@jupyterlab/nbformat';\nimport { ObservableJSON, ObservableString } from '@jupyterlab/observables';\nimport { JSONExt } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\n/**\n * The default implementation of a notebook output model.\n */\nexport class OutputModel {\n    /**\n     * Construct a new output model.\n     */\n    constructor(options) {\n        this._changed = new Signal(this);\n        this._raw = {};\n        this._text = undefined;\n        const { data, metadata, trusted } = Private.getBundleOptions(options);\n        this._rawData = data;\n        if (options.value !== undefined && nbformat.isStream(options.value)) {\n            this._text = new ObservableString(typeof options.value.text === 'string'\n                ? options.value.text\n                : options.value.text.join(''));\n        }\n        this._metadata = new ObservableJSON({ values: metadata });\n        this._rawMetadata = metadata;\n        this.trusted = trusted;\n        // Make a copy of the data.\n        const value = options.value;\n        for (const key in value) {\n            // Ignore data and metadata that were stripped.\n            switch (key) {\n                case 'data':\n                case 'metadata':\n                    break;\n                default:\n                    this._raw[key] = Private.extract(value, key);\n            }\n        }\n        this.type = value.output_type;\n        if (nbformat.isExecuteResult(value)) {\n            this.executionCount = value.execution_count;\n        }\n        else {\n            this.executionCount = null;\n        }\n    }\n    /**\n     * A signal emitted when the output model changes.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Dispose of the resources used by the output model.\n     */\n    dispose() {\n        var _a;\n        (_a = this._text) === null || _a === void 0 ? void 0 : _a.dispose();\n        this._metadata.dispose();\n        Signal.clearData(this);\n    }\n    /**\n     * The data associated with the model.\n     */\n    get data() {\n        return Private.getData(this.toJSON());\n    }\n    get streamText() {\n        return this._text;\n    }\n    /**\n     * The metadata associated with the model.\n     */\n    get metadata() {\n        return this._rawMetadata;\n    }\n    /**\n     * Set the data associated with the model.\n     *\n     * #### Notes\n     * Depending on the implementation of the mime model,\n     * this call may or may not have deferred effects,\n     */\n    setData(options) {\n        if (options.data) {\n            this._rawData = options.data;\n        }\n        if (options.metadata) {\n            this._updateObservable(this._metadata, options.metadata);\n            this._rawMetadata = options.metadata;\n        }\n        this._changed.emit();\n    }\n    /**\n     * Serialize the model to JSON.\n     */\n    toJSON() {\n        const output = {};\n        for (const key in this._raw) {\n            output[key] = Private.extract(this._raw, key);\n        }\n        if (this._text !== undefined) {\n            output['text'] = this._text.text;\n        }\n        switch (this.type) {\n            case 'display_data':\n            case 'execute_result':\n            case 'update_display_data':\n                output['data'] = this._rawData;\n                output['metadata'] = this.metadata;\n                break;\n            default:\n                break;\n        }\n        // Remove transient data.\n        delete output['transient'];\n        return output;\n    }\n    /**\n     * Update an observable JSON object using a readonly JSON object.\n     */\n    _updateObservable(observable, data) {\n        const oldKeys = observable.keys();\n        const newKeys = Object.keys(data);\n        // Handle removed keys.\n        for (const key of oldKeys) {\n            if (newKeys.indexOf(key) === -1) {\n                observable.delete(key);\n            }\n        }\n        // Handle changed data.\n        for (const key of newKeys) {\n            const oldValue = observable.get(key);\n            const newValue = data[key];\n            if (oldValue !== newValue) {\n                observable.set(key, newValue);\n            }\n        }\n    }\n}\n/**\n * The namespace for OutputModel statics.\n */\n(function (OutputModel) {\n    /**\n     * Get the data for an output.\n     *\n     * @param output - A kernel output message payload.\n     *\n     * @returns - The data for the payload.\n     */\n    function getData(output) {\n        return Private.getData(output);\n    }\n    OutputModel.getData = getData;\n    /**\n     * Get the metadata from an output message.\n     *\n     * @param output - A kernel output message payload.\n     *\n     * @returns - The metadata for the payload.\n     */\n    function getMetadata(output) {\n        return Private.getMetadata(output);\n    }\n    OutputModel.getMetadata = getMetadata;\n})(OutputModel || (OutputModel = {}));\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Get the data from a notebook output.\n     */\n    function getData(output) {\n        let bundle = {};\n        if (nbformat.isExecuteResult(output) ||\n            nbformat.isDisplayData(output) ||\n            nbformat.isDisplayUpdate(output)) {\n            bundle = output.data;\n        }\n        else if (nbformat.isStream(output)) {\n            if (output.name === 'stderr') {\n                bundle['application/vnd.jupyter.stderr'] = output.text;\n            }\n            else {\n                bundle['application/vnd.jupyter.stdout'] = output.text;\n            }\n        }\n        else if (nbformat.isError(output)) {\n            bundle['application/vnd.jupyter.error'] = output;\n            const traceback = output.traceback.join('\\n');\n            bundle['application/vnd.jupyter.stderr'] =\n                traceback || `${output.ename}: ${output.evalue}`;\n        }\n        return convertBundle(bundle);\n    }\n    Private.getData = getData;\n    /**\n     * Get the metadata from an output message.\n     */\n    function getMetadata(output) {\n        const value = Object.create(null);\n        if (nbformat.isExecuteResult(output) || nbformat.isDisplayData(output)) {\n            for (const key in output.metadata) {\n                value[key] = extract(output.metadata, key);\n            }\n        }\n        return value;\n    }\n    Private.getMetadata = getMetadata;\n    /**\n     * Get the bundle options given output model options.\n     */\n    function getBundleOptions(options) {\n        const data = getData(options.value);\n        const metadata = getMetadata(options.value);\n        const trusted = !!options.trusted;\n        return { data, metadata, trusted };\n    }\n    Private.getBundleOptions = getBundleOptions;\n    /**\n     * Extract a value from a JSONObject.\n     */\n    function extract(value, key) {\n        const item = value[key];\n        if (item === undefined || JSONExt.isPrimitive(item)) {\n            return item;\n        }\n        return JSON.parse(JSON.stringify(item));\n    }\n    Private.extract = extract;\n    /**\n     * Convert a mime bundle to mime data.\n     */\n    function convertBundle(bundle) {\n        const map = Object.create(null);\n        for (const mimeType in bundle) {\n            map[mimeType] = extract(bundle, mimeType);\n        }\n        return map;\n    }\n})(Private || (Private = {}));\n//# sourceMappingURL=outputmodel.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { Sanitizer } from '@jupyterlab/apputils';\nimport { PageConfig, PathExt, URLExt } from '@jupyterlab/coreutils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { MimeModel } from './mimemodel';\n/**\n * An object which manages mime renderer factories.\n *\n * This object is used to render mime models using registered mime\n * renderers, selecting the preferred mime renderer to render the\n * model into a widget.\n *\n * #### Notes\n * This class is not intended to be subclassed.\n */\nexport class RenderMimeRegistry {\n    /**\n     * Construct a new rendermime.\n     *\n     * @param options - The options for initializing the instance.\n     */\n    constructor(options = {}) {\n        var _a, _b, _c, _d, _e, _f;\n        this._id = 0;\n        this._ranks = {};\n        this._types = null;\n        this._factories = {};\n        // Parse the options.\n        this.translator = (_a = options.translator) !== null && _a !== void 0 ? _a : nullTranslator;\n        this.resolver = (_b = options.resolver) !== null && _b !== void 0 ? _b : null;\n        this.linkHandler = (_c = options.linkHandler) !== null && _c !== void 0 ? _c : null;\n        this.latexTypesetter = (_d = options.latexTypesetter) !== null && _d !== void 0 ? _d : null;\n        this.markdownParser = (_e = options.markdownParser) !== null && _e !== void 0 ? _e : null;\n        this.sanitizer = (_f = options.sanitizer) !== null && _f !== void 0 ? _f : new Sanitizer();\n        // Add the initial factories.\n        if (options.initialFactories) {\n            for (const factory of options.initialFactories) {\n                this.addFactory(factory);\n            }\n        }\n    }\n    /**\n     * The ordered list of mimeTypes.\n     */\n    get mimeTypes() {\n        return this._types || (this._types = Private.sortedTypes(this._ranks));\n    }\n    /**\n     * Find the preferred mime type for a mime bundle.\n     *\n     * @param bundle - The bundle of mime data.\n     *\n     * @param safe - How to consider safe/unsafe factories. If 'ensure',\n     *   it will only consider safe factories. If 'any', any factory will be\n     *   considered. If 'prefer', unsafe factories will be considered, but\n     *   only after the safe options have been exhausted.\n     *\n     * @returns The preferred mime type from the available factories,\n     *   or `undefined` if the mime type cannot be rendered.\n     */\n    preferredMimeType(bundle, safe = 'ensure') {\n        // Try to find a safe factory first, if preferred.\n        if (safe === 'ensure' || safe === 'prefer') {\n            for (const mt of this.mimeTypes) {\n                if (mt in bundle && this._factories[mt].safe) {\n                    return mt;\n                }\n            }\n        }\n        if (safe !== 'ensure') {\n            // Otherwise, search for the best factory among all factories.\n            for (const mt of this.mimeTypes) {\n                if (mt in bundle) {\n                    return mt;\n                }\n            }\n        }\n        // Otherwise, no matching mime type exists.\n        return undefined;\n    }\n    /**\n     * Create a renderer for a mime type.\n     *\n     * @param mimeType - The mime type of interest.\n     *\n     * @returns A new renderer for the given mime type.\n     *\n     * @throws An error if no factory exists for the mime type.\n     */\n    createRenderer(mimeType) {\n        // Throw an error if no factory exists for the mime type.\n        if (!(mimeType in this._factories)) {\n            throw new Error(`No factory for mime type: '${mimeType}'`);\n        }\n        // Invoke the best factory for the given mime type.\n        return this._factories[mimeType].createRenderer({\n            mimeType,\n            resolver: this.resolver,\n            sanitizer: this.sanitizer,\n            linkHandler: this.linkHandler,\n            latexTypesetter: this.latexTypesetter,\n            markdownParser: this.markdownParser,\n            translator: this.translator\n        });\n    }\n    /**\n     * Create a new mime model.  This is a convenience method.\n     *\n     * @options - The options used to create the model.\n     *\n     * @returns A new mime model.\n     */\n    createModel(options = {}) {\n        return new MimeModel(options);\n    }\n    /**\n     * Create a clone of this rendermime instance.\n     *\n     * @param options - The options for configuring the clone.\n     *\n     * @returns A new independent clone of the rendermime.\n     */\n    clone(options = {}) {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n        // Create the clone.\n        const clone = new RenderMimeRegistry({\n            resolver: (_b = (_a = options.resolver) !== null && _a !== void 0 ? _a : this.resolver) !== null && _b !== void 0 ? _b : undefined,\n            sanitizer: (_d = (_c = options.sanitizer) !== null && _c !== void 0 ? _c : this.sanitizer) !== null && _d !== void 0 ? _d : undefined,\n            linkHandler: (_f = (_e = options.linkHandler) !== null && _e !== void 0 ? _e : this.linkHandler) !== null && _f !== void 0 ? _f : undefined,\n            latexTypesetter: (_h = (_g = options.latexTypesetter) !== null && _g !== void 0 ? _g : this.latexTypesetter) !== null && _h !== void 0 ? _h : undefined,\n            markdownParser: (_k = (_j = options.markdownParser) !== null && _j !== void 0 ? _j : this.markdownParser) !== null && _k !== void 0 ? _k : undefined,\n            translator: this.translator\n        });\n        // Clone the internal state.\n        clone._factories = { ...this._factories };\n        clone._ranks = { ...this._ranks };\n        clone._id = this._id;\n        // Return the cloned object.\n        return clone;\n    }\n    /**\n     * Get the renderer factory registered for a mime type.\n     *\n     * @param mimeType - The mime type of interest.\n     *\n     * @returns The factory for the mime type, or `undefined`.\n     */\n    getFactory(mimeType) {\n        return this._factories[mimeType];\n    }\n    /**\n     * Add a renderer factory to the rendermime.\n     *\n     * @param factory - The renderer factory of interest.\n     *\n     * @param rank - The rank of the renderer. A lower rank indicates\n     *   a higher priority for rendering. If not given, the rank will\n     *   defer to the `defaultRank` of the factory.  If no `defaultRank`\n     *   is given, it will default to 100.\n     *\n     * #### Notes\n     * The renderer will replace an existing renderer for the given\n     * mimeType.\n     */\n    addFactory(factory, rank) {\n        if (rank === undefined) {\n            rank = factory.defaultRank;\n            if (rank === undefined) {\n                rank = 100;\n            }\n        }\n        for (const mt of factory.mimeTypes) {\n            this._factories[mt] = factory;\n            this._ranks[mt] = { rank, id: this._id++ };\n        }\n        this._types = null;\n    }\n    /**\n     * Remove a mime type.\n     *\n     * @param mimeType - The mime type of interest.\n     */\n    removeMimeType(mimeType) {\n        delete this._factories[mimeType];\n        delete this._ranks[mimeType];\n        this._types = null;\n    }\n    /**\n     * Get the rank for a given mime type.\n     *\n     * @param mimeType - The mime type of interest.\n     *\n     * @returns The rank of the mime type or undefined.\n     */\n    getRank(mimeType) {\n        const rank = this._ranks[mimeType];\n        return rank && rank.rank;\n    }\n    /**\n     * Set the rank of a given mime type.\n     *\n     * @param mimeType - The mime type of interest.\n     *\n     * @param rank - The new rank to assign.\n     *\n     * #### Notes\n     * This is a no-op if the mime type is not registered.\n     */\n    setRank(mimeType, rank) {\n        if (!this._ranks[mimeType]) {\n            return;\n        }\n        const id = this._id++;\n        this._ranks[mimeType] = { rank, id };\n        this._types = null;\n    }\n}\n/**\n * The namespace for `RenderMimeRegistry` class statics.\n */\n(function (RenderMimeRegistry) {\n    /**\n     * A default resolver that uses a given reference path and a contents manager.\n     */\n    class UrlResolver {\n        /**\n         * Create a new url resolver.\n         */\n        constructor(options) {\n            this._path = options.path;\n            this._contents = options.contents;\n        }\n        /**\n         * The path of the object, from which local urls can be derived.\n         */\n        get path() {\n            return this._path;\n        }\n        set path(value) {\n            this._path = value;\n        }\n        /**\n         * Resolve a relative url to an absolute url path.\n         */\n        async resolveUrl(url) {\n            if (this.isLocal(url)) {\n                const cwd = encodeURI(PathExt.dirname(this.path));\n                url = PathExt.resolve(cwd, url);\n            }\n            return url;\n        }\n        /**\n         * Get the download url of a given absolute url path.\n         *\n         * #### Notes\n         * The returned URL may include a query parameter.\n         */\n        async getDownloadUrl(urlPath) {\n            if (this.isLocal(urlPath)) {\n                // decode url->path before passing to contents api\n                return this._contents.getDownloadUrl(decodeURIComponent(urlPath));\n            }\n            return urlPath;\n        }\n        /**\n         * Whether the URL should be handled by the resolver\n         * or not.\n         *\n         * @param allowRoot - Whether the paths starting at Unix-style filesystem root (`/`) are permitted.\n         *\n         * #### Notes\n         * This is similar to the `isLocal` check in `URLExt`,\n         * but it also checks whether the path points to any\n         * of the `IDrive`s that may be registered with the contents\n         * manager.\n         */\n        isLocal(url, allowRoot = false) {\n            if (this.isMalformed(url)) {\n                return false;\n            }\n            return (URLExt.isLocal(url, allowRoot) ||\n                !!this._contents.driveName(decodeURI(url)));\n        }\n        /**\n         * Resolve a path from Jupyter kernel to a path:\n         * - relative to `root_dir` (preferably) this is in jupyter-server scope,\n         * - path understood and known by kernel (if such a path exists).\n         * Returns `null` if there is no file matching provided path in neither\n         * kernel nor jupyter-server contents manager.\n         */\n        async resolvePath(path) {\n            // TODO: a clean implementation would be server-side and depends on:\n            // https://github.com/jupyter-server/jupyter_server/issues/1280\n            const rootDir = PageConfig.getOption('rootUri').replace('file://', '');\n            // Workaround: expand `~` path using root dir (if it matches).\n            if (path.startsWith('~/') && rootDir.startsWith('/home/')) {\n                // For now we assume that kernel is in root dir.\n                path = rootDir.split('/').slice(0, 3).join('/') + path.substring(1);\n            }\n            if (path.startsWith(rootDir) || path.startsWith('./')) {\n                try {\n                    const relativePath = path.replace(rootDir, '');\n                    // If file exists on the server we have guessed right\n                    const response = await this._contents.get(relativePath, {\n                        content: false\n                    });\n                    return {\n                        path: response.path,\n                        scope: 'server'\n                    };\n                }\n                catch (error) {\n                    // The file seems like should be on the server but is not.\n                    console.warn(`Could not resolve location of ${path} on server`);\n                    return null;\n                }\n            }\n            // The file is not accessible from jupyter-server but maybe it is\n            // available from DAP `source`; we assume the path is available\n            // from kernel because currently we have no way of checking this\n            // without introducing a cycle (unless we were to set the debugger\n            // service instance on the resolver later).\n            return {\n                path: path,\n                scope: 'kernel'\n            };\n        }\n        /**\n         * Whether the URL can be decoded using `decodeURI`.\n         */\n        isMalformed(url) {\n            try {\n                decodeURI(url);\n                return false;\n            }\n            catch (error) {\n                if (error instanceof URIError) {\n                    return true;\n                }\n                throw error;\n            }\n        }\n    }\n    RenderMimeRegistry.UrlResolver = UrlResolver;\n})(RenderMimeRegistry || (RenderMimeRegistry = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Get the mime types in the map, ordered by rank.\n     */\n    function sortedTypes(map) {\n        return Object.keys(map).sort((a, b) => {\n            const p1 = map[a];\n            const p2 = map[b];\n            if (p1.rank !== p2.rank) {\n                return p1.rank - p2.rank;\n            }\n            return p1.id - p2.id;\n        });\n    }\n    Private.sortedTypes = sortedTypes;\n})(Private || (Private = {}));\n//# sourceMappingURL=registry.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { URLExt } from '@jupyterlab/coreutils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport escape from 'lodash.escape';\nimport { removeMath, replaceMath } from './latex';\n/**\n * Render HTML into a host node.\n *\n * @param options - The options for rendering.\n *\n * @returns A promise which resolves when rendering is complete.\n */\nexport async function renderHTML(options) {\n    // Unpack the options.\n    let { host, source, trusted, sanitizer, resolver, linkHandler, shouldTypeset, latexTypesetter, translator } = options;\n    translator = translator || nullTranslator;\n    const trans = translator === null || translator === void 0 ? void 0 : translator.load('jupyterlab');\n    let originalSource = source;\n    // Bail early if the source is empty.\n    if (!source) {\n        host.textContent = '';\n        return;\n    }\n    // Sanitize the source if it is not trusted. This removes all\n    // `<script>` tags as well as other potentially harmful HTML.\n    if (!trusted) {\n        originalSource = `${source}`;\n        source = sanitizer.sanitize(source);\n    }\n    // Set the inner HTML of the host.\n    host.innerHTML = source;\n    if (host.getElementsByTagName('script').length > 0) {\n        // If output it trusted, eval any script tags contained in the HTML.\n        // This is not done automatically by the browser when script tags are\n        // created by setting `innerHTML`.\n        if (trusted) {\n            Private.evalInnerHTMLScriptTags(host);\n        }\n        else {\n            const container = document.createElement('div');\n            const warning = document.createElement('pre');\n            warning.textContent = trans.__('This HTML output contains inline scripts. Are you sure that you want to run arbitrary Javascript within your JupyterLab session?');\n            const runButton = document.createElement('button');\n            runButton.textContent = trans.__('Run');\n            runButton.onclick = event => {\n                host.innerHTML = originalSource;\n                Private.evalInnerHTMLScriptTags(host);\n                if (host.firstChild) {\n                    host.removeChild(host.firstChild);\n                }\n            };\n            container.appendChild(warning);\n            container.appendChild(runButton);\n            host.insertBefore(container, host.firstChild);\n        }\n    }\n    // Handle default behavior of nodes.\n    Private.handleDefaults(host, resolver);\n    // Patch the urls if a resolver is available.\n    if (resolver) {\n        await Private.handleUrls(host, resolver, linkHandler);\n    }\n    if (shouldTypeset && latexTypesetter) {\n        latexTypesetter.typeset(host);\n    }\n}\n/**\n * Render an image into a host node.\n *\n * @param options - The options for rendering.\n *\n * @returns A promise which resolves when rendering is complete.\n */\nexport async function renderImage(options) {\n    // Unpack the options.\n    const { host, mimeType, source, width, height, needsBackground, unconfined } = options;\n    // Clear the content in the host.\n    host.textContent = '';\n    // Create the image element.\n    const img = document.createElement('img');\n    // Set the source of the image.\n    img.src = `data:${mimeType};base64,${source}`;\n    // Set the size of the image if provided.\n    if (typeof height === 'number') {\n        img.height = height;\n    }\n    if (typeof width === 'number') {\n        img.width = width;\n    }\n    if (needsBackground === 'light') {\n        img.classList.add('jp-needs-light-background');\n    }\n    else if (needsBackground === 'dark') {\n        img.classList.add('jp-needs-dark-background');\n    }\n    if (unconfined === true) {\n        img.classList.add('jp-mod-unconfined');\n    }\n    // Add the image to the host.\n    host.appendChild(img);\n}\n/**\n * Render LaTeX into a host node.\n *\n * @param options - The options for rendering.\n *\n * @returns A promise which resolves when rendering is complete.\n */\nexport async function renderLatex(options) {\n    // Unpack the options.\n    const { host, source, shouldTypeset, latexTypesetter } = options;\n    // Set the source on the node.\n    host.textContent = source;\n    // Typeset the node if needed.\n    if (shouldTypeset && latexTypesetter) {\n        latexTypesetter.typeset(host);\n    }\n}\n/**\n * Render Markdown into a host node.\n *\n * @param options - The options for rendering.\n *\n * @returns A promise which resolves when rendering is complete.\n */\nexport async function renderMarkdown(options) {\n    // Unpack the options.\n    const { host, source, markdownParser, ...others } = options;\n    // Clear the content if there is no source.\n    if (!source) {\n        host.textContent = '';\n        return;\n    }\n    let html = '';\n    if (markdownParser) {\n        // Separate math from normal markdown text.\n        const parts = removeMath(source);\n        // Convert the markdown to HTML.\n        html = await markdownParser.render(parts['text']);\n        // Replace math.\n        html = replaceMath(html, parts['math']);\n    }\n    else {\n        // Fallback if the application does not have any markdown parser.\n        html = `<pre>${source}</pre>`;\n    }\n    // Render HTML.\n    await renderHTML({\n        host,\n        source: html,\n        ...others\n    });\n    // Apply ids to the header nodes.\n    Private.headerAnchors(host);\n}\n/**\n * The namespace for the `renderMarkdown` function statics.\n */\n(function (renderMarkdown) {\n    /**\n     * Create a normalized id for a header element.\n     *\n     * @param header Header element\n     * @returns Normalized id\n     */\n    function createHeaderId(header) {\n        var _a;\n        return ((_a = header.textContent) !== null && _a !== void 0 ? _a : '').replace(/ /g, '-');\n    }\n    renderMarkdown.createHeaderId = createHeaderId;\n})(renderMarkdown || (renderMarkdown = {}));\n/**\n * Render SVG into a host node.\n *\n * @param options - The options for rendering.\n *\n * @returns A promise which resolves when rendering is complete.\n */\nexport async function renderSVG(options) {\n    // Unpack the options.\n    let { host, source, trusted, unconfined } = options;\n    // Clear the content if there is no source.\n    if (!source) {\n        host.textContent = '';\n        return;\n    }\n    // Display a message if the source is not trusted.\n    if (!trusted) {\n        host.textContent =\n            'Cannot display an untrusted SVG. Maybe you need to run the cell?';\n        return;\n    }\n    // Add missing SVG namespace (if actually missing)\n    const patt = '<svg[^>]+xmlns=[^>]+svg';\n    if (source.search(patt) < 0) {\n        source = source.replace('<svg', '<svg xmlns=\"http://www.w3.org/2000/svg\"');\n    }\n    // Render in img so that user can save it easily\n    const img = new Image();\n    img.src = `data:image/svg+xml,${encodeURIComponent(source)}`;\n    host.appendChild(img);\n    if (unconfined === true) {\n        host.classList.add('jp-mod-unconfined');\n    }\n}\nvar ILinker;\n(function (ILinker) {\n    // Matching regular expressions is slow; we can fast-reject\n    // a string if it does not start with `data:`, `www.`, or\n    // a valid schema. We define a valid schema as an alphanumeric\n    // sequence of length at least two and followed by `://`,\n    // e.g.`https://`. To fast-reject in long sequence of characters\n    // we need to impose an additional restriction on the length.\n    // As of 2025 the longest registered URI schemes are:\n    // - machineProvisioningProgressReporter - 35\n    // - microsoft.windows.camera.multipicker - 36\n    // See https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml\n    // While technically any length is allowed, it is unlikely that any scheme\n    // longer than 40 characters would be of a general benefit to most users,\n    // and if one finds themselves with a use case which requires it, they are\n    // welcome to open a PR which allows to customize this restriction.\n    const maxAcceptedProtocolLength = 40;\n    // Taken from Visual Studio Code:\n    // https://github.com/microsoft/vscode/blob/9f709d170b06e991502153f281ec3c012add2e42/src/vs/workbench/contrib/debug/browser/linkDetector.ts#L17-L18\n    const controlCodes = '\\\\u0000-\\\\u0020\\\\u007f-\\\\u009f';\n    ILinker.webLinkRegex = new RegExp('(?<path>(?:[a-zA-Z][a-zA-Z0-9+.-]{2,' +\n        maxAcceptedProtocolLength +\n        '}:\\\\/\\\\/|data:|www\\\\.)[^\\\\s' +\n        controlCodes +\n        '\"]{2,}[^\\\\s' +\n        controlCodes +\n        '\"\\'(){}\\\\[\\\\],:;.!?])', 'ug');\n    // Taken from Visual Studio Code:\n    // https://github.com/microsoft/vscode/blob/3e407526a1e2ff22cacb69c7e353e81a12f41029/extensions/notebook-renderers/src/linkify.ts#L9\n    const winAbsPathRegex = /(?:[a-zA-Z]:(?:(?:\\\\|\\/)[\\w\\.-]*)+)/;\n    const winRelPathRegex = /(?:(?:\\~|\\.)(?:(?:\\\\|\\/)[\\w\\.-]*)+)/;\n    const winPathRegex = new RegExp(`(${winAbsPathRegex.source}|${winRelPathRegex.source})`);\n    const posixPathRegex = /((?:\\~|\\.)?(?:\\/[\\w\\.-]*)+)/;\n    const lineColumnRegex = /(?:(?:\\:|\", line )(?<line>[\\d]+))?(?:\\:(?<column>[\\d]+))?/;\n    // TODO: this ought to come from kernel (browser may be on a different OS).\n    const isWindows = navigator.userAgent.indexOf('Windows') >= 0;\n    ILinker.pathLinkRegex = new RegExp(`(?<path>${isWindows ? winPathRegex.source : posixPathRegex.source})${lineColumnRegex.source}`, 'g');\n})(ILinker || (ILinker = {}));\n/**\n * Linker for web URLs.\n */\nclass WebLinker {\n    constructor() {\n        this.regex = ILinker.webLinkRegex;\n    }\n    createAnchor(url, label) {\n        const anchor = document.createElement('a');\n        anchor.href = url.startsWith('www.') ? 'https://' + url : url;\n        anchor.rel = 'noopener';\n        anchor.target = '_blank';\n        anchor.appendChild(document.createTextNode(label));\n        return anchor;\n    }\n    processPath(url) {\n        // Special case when the URL ends with \">\" or \"<\"\n        const lastChars = url.slice(-1);\n        const endsWithGtLt = ['>', '<'].indexOf(lastChars) !== -1;\n        const len = endsWithGtLt ? url.length - 1 : url.length;\n        url = url.slice(0, len);\n        return url;\n    }\n    processLabel(url) {\n        return this.processPath(url);\n    }\n}\n/**\n * Linker for path URIs.\n */\nclass PathLinker {\n    constructor() {\n        this.regex = ILinker.pathLinkRegex;\n    }\n    createAnchor(path, label, locators) {\n        const anchor = document.createElement('a');\n        // Store the path in dataset.\n        // Do not set `href` - at this point we do not know if the path is valid and\n        // accessible for application (and we want rendering those as links).\n        anchor.dataset.path = path;\n        // Store line using RFC 5147 fragment locator for text/plain files.\n        // It could be expanded to other formats, e.g. based on file extension.\n        const line = parseInt(locators['line'], 10);\n        let locator = !isNaN(line) ? `line=${line - 1}` : '';\n        anchor.dataset.locator = locator;\n        anchor.appendChild(document.createTextNode(label));\n        return anchor;\n    }\n}\nfunction autolink(content, options) {\n    const linkers = [];\n    if (options.checkWeb) {\n        linkers.push(new WebLinker());\n    }\n    if (options.checkPaths) {\n        linkers.push(new PathLinker());\n    }\n    const nodes = [];\n    // There are two ways to implement competitive regexes:\n    // - two heads (which would need to resolve overlaps), or\n    // - (simpler) divide and recurse (implemented below)\n    const linkify = (content, regexIndex) => {\n        if (regexIndex >= linkers.length) {\n            nodes.push(document.createTextNode(content));\n            return;\n        }\n        const linker = linkers[regexIndex];\n        let match;\n        let currentIndex = 0;\n        const regex = linker.regex;\n        // Reset regex\n        regex.lastIndex = 0;\n        while (null != (match = regex.exec(content))) {\n            const stringBeforeMatch = content.substring(currentIndex, match.index);\n            if (stringBeforeMatch) {\n                linkify(stringBeforeMatch, regexIndex + 1);\n            }\n            const { path, ...locators } = match.groups;\n            const value = linker.processPath ? linker.processPath(path) : path;\n            const label = linker.processLabel\n                ? linker.processLabel(match[0])\n                : match[0];\n            nodes.push(linker.createAnchor(value, label, locators));\n            currentIndex = match.index + label.length;\n        }\n        const stringAfterMatches = content.substring(currentIndex);\n        if (stringAfterMatches) {\n            linkify(stringAfterMatches, regexIndex + 1);\n        }\n    };\n    linkify(content, 0);\n    return nodes;\n}\n/**\n * Split a shallow node (node without nested nodes inside) at a given text content position.\n *\n * @param node the shallow node to be split\n * @param at the position in textContent at which the split should occur\n */\nfunction splitShallowNode(node, at) {\n    var _a, _b;\n    const pre = node.cloneNode();\n    pre.textContent = (_a = node.textContent) === null || _a === void 0 ? void 0 : _a.slice(0, at);\n    const post = node.cloneNode();\n    post.textContent = (_b = node.textContent) === null || _b === void 0 ? void 0 : _b.slice(at);\n    return {\n        pre,\n        post\n    };\n}\n/**\n * Iterate over some nodes, while tracking cumulative start and end position.\n */\nfunction* nodeIter(nodes) {\n    var _a;\n    let start = 0;\n    let end;\n    for (let node of nodes) {\n        end = start + (((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.length) || 0);\n        yield {\n            node,\n            start,\n            end,\n            isText: node.nodeType === Node.TEXT_NODE\n        };\n        start = end;\n    }\n}\n/**\n * Align two collections of nodes.\n *\n * If a text node in one collections spans an element in the other, yield the spanned elements.\n * Otherwise, split the nodes such that yielded pair start and stop on the same position.\n */\nfunction* alignedNodes(a, b) {\n    var _a, _b;\n    let iterA = nodeIter(a);\n    let iterB = nodeIter(b);\n    let nA = iterA.next();\n    let nB = iterB.next();\n    while (!nA.done && !nB.done) {\n        let A = nA.value;\n        let B = nB.value;\n        if (A.isText && A.start <= B.start && A.end >= B.end) {\n            // A is a text element that spans all of B, simply yield B\n            yield [null, B.node];\n            nB = iterB.next();\n        }\n        else if (B.isText && B.start <= A.start && B.end >= A.end) {\n            // B is a text element that spans all of A, simply yield A\n            yield [A.node, null];\n            nA = iterA.next();\n        }\n        else {\n            // There is some intersection, split one, unless they match exactly\n            if (A.end === B.end && A.start === B.start) {\n                yield [A.node, B.node];\n                nA = iterA.next();\n                nB = iterB.next();\n            }\n            else if (A.end > B.end) {\n                /*\n                A |-----[======]---|\n                B |--[======]------|\n                            | <- Split A here\n                        | <- trim B to start from here if needed\n                */\n                let { pre, post } = splitShallowNode(A.node, B.end - A.start);\n                if (B.start < A.start) {\n                    // this node should not be yielded anywhere else, so ok to modify in-place\n                    B.node.textContent = (_a = B.node.textContent) === null || _a === void 0 ? void 0 : _a.slice(A.start - B.start);\n                }\n                yield [pre, B.node];\n                // Modify iteration result in-place:\n                A.node = post;\n                A.start = B.end;\n                nB = iterB.next();\n            }\n            else if (B.end > A.end) {\n                let { pre, post } = splitShallowNode(B.node, A.end - B.start);\n                if (A.start < B.start) {\n                    // this node should not be yielded anywhere else, so ok to modify in-place\n                    A.node.textContent = (_b = A.node.textContent) === null || _b === void 0 ? void 0 : _b.slice(B.start - A.start);\n                }\n                yield [A.node, pre];\n                // Modify iteration result in-place:\n                B.node = post;\n                B.start = A.end;\n                nA = iterA.next();\n            }\n            else {\n                throw new Error(`Unexpected intersection: ${JSON.stringify(A)} ${JSON.stringify(B)}`);\n            }\n        }\n    }\n}\n/**\n * Render text into a host node.\n *\n * @param options - The options for rendering.\n *\n * @returns A promise which resolves when rendering is complete.\n */\nexport async function renderText(options) {\n    renderTextual(options, {\n        checkWeb: true,\n        checkPaths: false\n    });\n}\n/**\n * Sanitize HTML out using native browser sanitizer.\n *\n * Compared to the `ISanitizer.sanitize` this does not allow to selectively\n * allow to keep certain tags but escapes everything; on the other hand\n * it is much faster as it uses platform-optimized code.\n */\nfunction nativeSanitize(source) {\n    const el = document.createElement('span');\n    el.textContent = source;\n    return el.innerHTML;\n}\nconst ansiPrefix = '\\x1b';\n/**\n * Render the textual representation into a host node.\n *\n * Implements the shared logic for `renderText` and `renderError`.\n */\nfunction renderTextual(options, autoLinkOptions) {\n    var _a, _b;\n    // Unpack the options.\n    const { host, sanitizer, source } = options;\n    const hasAnsiPrefix = source.includes(ansiPrefix);\n    // Create the HTML content:\n    // If no ANSI codes are present use a fast path for escaping.\n    const content = hasAnsiPrefix\n        ? sanitizer.sanitize(Private.ansiSpan(source), {\n            allowedTags: ['span']\n        })\n        : nativeSanitize(source);\n    // Set the sanitized content for the host node.\n    const pre = document.createElement('pre');\n    pre.innerHTML = content;\n    const preTextContent = pre.textContent;\n    const cacheStoreOptions = [];\n    if (autoLinkOptions.checkWeb) {\n        cacheStoreOptions.push('web');\n    }\n    if (autoLinkOptions.checkPaths) {\n        cacheStoreOptions.push('paths');\n    }\n    const cacheStoreKey = cacheStoreOptions.join('-');\n    let cacheStore = Private.autoLinkCache.get(cacheStoreKey);\n    if (!cacheStore) {\n        cacheStore = new WeakMap();\n        Private.autoLinkCache.set(cacheStoreKey, cacheStore);\n    }\n    let ret;\n    if (preTextContent) {\n        // Note: only text nodes and span elements should be present after sanitization in the `<pre>` element.\n        let linkedNodes;\n        if ((_b = (_a = sanitizer.getAutolink) === null || _a === void 0 ? void 0 : _a.call(sanitizer)) !== null && _b !== void 0 ? _b : true) {\n            const cache = getApplicableLinkCache(cacheStore.get(host), preTextContent);\n            if (cache) {\n                const { cachedNodes: fromCache, addedText } = cache;\n                const newAdditions = autolink(addedText, autoLinkOptions);\n                const lastInCache = fromCache[fromCache.length - 1];\n                const firstNewNode = newAdditions[0];\n                if (lastInCache instanceof Text && firstNewNode instanceof Text) {\n                    const joiningNode = lastInCache;\n                    joiningNode.data += firstNewNode.data;\n                    linkedNodes = [\n                        ...fromCache.slice(0, -1),\n                        joiningNode,\n                        ...newAdditions.slice(1)\n                    ];\n                }\n                else {\n                    linkedNodes = [...fromCache, ...newAdditions];\n                }\n            }\n            else {\n                linkedNodes = autolink(preTextContent, autoLinkOptions);\n            }\n            cacheStore.set(host, {\n                preTextContent,\n                // Clone the nodes before storing them in the cache in case if another component\n                // attempts to modify (e.g. dispose of) them - which is the case for search highlights!\n                linkedNodes: linkedNodes.map(node => node.cloneNode(true))\n            });\n        }\n        else {\n            linkedNodes = [document.createTextNode(content)];\n        }\n        const preNodes = Array.from(pre.childNodes);\n        ret = mergeNodes(preNodes, linkedNodes);\n    }\n    else {\n        ret = document.createElement('pre');\n    }\n    host.appendChild(ret);\n}\n/**\n * Return the information from the cache that can be used given the cache entry and current text.\n * If the cache is invalid given the current text (or cannot be used) `null` is returned.\n */\nfunction getApplicableLinkCache(cachedResult, preTextContent) {\n    if (!cachedResult) {\n        return null;\n    }\n    if (preTextContent.length < cachedResult.preTextContent.length) {\n        // If the new content is shorter than the cached content\n        // we cannot use the cache as we only support appending.\n        return null;\n    }\n    let addedText = preTextContent.substring(cachedResult.preTextContent.length);\n    let cachedNodes = cachedResult.linkedNodes;\n    const lastCachedNode = cachedResult.linkedNodes[cachedResult.linkedNodes.length - 1];\n    // Only use cached nodes if:\n    // - the last cached node is a text node\n    // - the new content starts with a new line\n    // - the old content ends with a new line\n    if (cachedResult.preTextContent.endsWith('\\n') ||\n        addedText.startsWith('\\n')) {\n        // Second or third condition is met, we can use the cached nodes\n        // (this is a no-op, we just continue execution).\n    }\n    else if (lastCachedNode instanceof Text) {\n        // The first condition is met, we can use the cached nodes,\n        // but first we remove the Text node to re-analyse its text.\n        // This is required when we cached `aaa www.one.com bbb www.`\n        // and the incoming addition is `two.com`. We can still\n        // use text node `aaa ` and anchor node `www.one.com`, but\n        // we need to pass `bbb www.` + `two.com` through linkify again.\n        cachedNodes = cachedNodes.slice(0, -1);\n        addedText = lastCachedNode.textContent + addedText;\n    }\n    else {\n        return null;\n    }\n    // Finally check if text has not changed.\n    if (!preTextContent.startsWith(cachedResult.preTextContent)) {\n        return null;\n    }\n    return {\n        cachedNodes,\n        addedText\n    };\n}\n/**\n * Render error into a host node.\n *\n * @param options - The options for rendering.\n *\n * @returns A promise which resolves when rendering is complete.\n */\nexport async function renderError(options) {\n    // Unpack the options.\n    const { host, linkHandler, resolver } = options;\n    renderTextual(options, {\n        checkWeb: true,\n        checkPaths: true\n    });\n    // Patch the paths if a resolver is available.\n    if (resolver) {\n        await Private.handlePaths(host, resolver, linkHandler);\n    }\n}\n/**\n * Merge `<span>` nodes from a `<pre>` element with `<a>` nodes from linker.\n */\nfunction mergeNodes(preNodes, linkedNodes) {\n    const ret = document.createElement('pre');\n    let inAnchorElement = false;\n    const combinedNodes = [];\n    for (let nodes of alignedNodes(preNodes, linkedNodes)) {\n        if (!nodes[0]) {\n            combinedNodes.push(nodes[1]);\n            inAnchorElement = nodes[1].nodeType !== Node.TEXT_NODE;\n            continue;\n        }\n        else if (!nodes[1]) {\n            combinedNodes.push(nodes[0]);\n            inAnchorElement = false;\n            continue;\n        }\n        let [preNode, linkNode] = nodes;\n        const lastCombined = combinedNodes[combinedNodes.length - 1];\n        // If we are already in an anchor element and the anchor element did not change,\n        // we should insert the node from <pre> which is either Text node or coloured span Element\n        // into the anchor content as a child\n        if (inAnchorElement &&\n            linkNode.href ===\n                lastCombined.href) {\n            lastCombined.appendChild(preNode);\n        }\n        else {\n            // the `linkNode` is either Text or AnchorElement;\n            const isAnchor = linkNode.nodeType !== Node.TEXT_NODE;\n            // if we are NOT about to start an anchor element, just add the pre Node\n            if (!isAnchor) {\n                combinedNodes.push(preNode);\n                inAnchorElement = false;\n            }\n            else {\n                // otherwise start a new anchor; the contents of the `linkNode` and `preNode` should be the same,\n                // so we just put the neatly formatted `preNode` inside the anchor node (`linkNode`)\n                // and append that to combined nodes.\n                linkNode.textContent = '';\n                linkNode.appendChild(preNode);\n                combinedNodes.push(linkNode);\n                inAnchorElement = true;\n            }\n        }\n    }\n    // Do not reuse `pre` element. Clearing out previous children is too slow...\n    for (const child of combinedNodes) {\n        ret.appendChild(child);\n    }\n    return ret;\n}\n/**\n * The namespace for module implementation details.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Cache for auto-linking results to provide better performance when streaming outputs.\n     */\n    Private.autoLinkCache = new Map();\n    /**\n     * Eval the script tags contained in a host populated by `innerHTML`.\n     *\n     * When script tags are created via `innerHTML`, the browser does not\n     * evaluate them when they are added to the page. This function works\n     * around that by creating new equivalent script nodes manually, and\n     * replacing the originals.\n     */\n    function evalInnerHTMLScriptTags(host) {\n        // Create a snapshot of the current script nodes.\n        const scripts = Array.from(host.getElementsByTagName('script'));\n        // Loop over each script node.\n        for (const script of scripts) {\n            // Skip any scripts which no longer have a parent.\n            if (!script.parentNode) {\n                continue;\n            }\n            // Create a new script node which will be clone.\n            const clone = document.createElement('script');\n            // Copy the attributes into the clone.\n            const attrs = script.attributes;\n            for (let i = 0, n = attrs.length; i < n; ++i) {\n                const { name, value } = attrs[i];\n                clone.setAttribute(name, value);\n            }\n            // Copy the text content into the clone.\n            clone.textContent = script.textContent;\n            // Replace the old script in the parent.\n            script.parentNode.replaceChild(clone, script);\n        }\n    }\n    Private.evalInnerHTMLScriptTags = evalInnerHTMLScriptTags;\n    /**\n     * Handle the default behavior of nodes.\n     */\n    function handleDefaults(node, resolver) {\n        // Handle anchor elements.\n        const anchors = node.getElementsByTagName('a');\n        for (let i = 0; i < anchors.length; i++) {\n            const el = anchors[i];\n            // skip when processing a elements inside svg\n            // which are of type SVGAnimatedString\n            if (!(el instanceof HTMLAnchorElement)) {\n                continue;\n            }\n            const path = el.href;\n            const isLocal = resolver && resolver.isLocal\n                ? resolver.isLocal(path)\n                : URLExt.isLocal(path);\n            // set target attribute if not already present\n            if (!el.target) {\n                el.target = isLocal ? '_self' : '_blank';\n            }\n            // set rel as 'noopener' for non-local anchors\n            if (!isLocal) {\n                el.rel = 'noopener';\n            }\n        }\n        // Handle image elements.\n        const imgs = node.getElementsByTagName('img');\n        for (let i = 0; i < imgs.length; i++) {\n            if (!imgs[i].alt) {\n                imgs[i].alt = 'Image';\n            }\n        }\n    }\n    Private.handleDefaults = handleDefaults;\n    /**\n     * Resolve the relative urls in element `src` and `href` attributes.\n     *\n     * @param node - The head html element.\n     *\n     * @param resolver - A url resolver.\n     *\n     * @param linkHandler - An optional link handler for nodes.\n     *\n     * @returns a promise fulfilled when the relative urls have been resolved.\n     */\n    async function handleUrls(node, resolver, linkHandler) {\n        const promises = [];\n        // Handle HTML Elements with src attributes.\n        const nodes = node.querySelectorAll('*[src]');\n        for (let i = 0; i < nodes.length; i++) {\n            promises.push(handleAttr(nodes[i], 'src', resolver));\n        }\n        // Handle anchor elements.\n        const anchors = node.getElementsByTagName('a');\n        for (let i = 0; i < anchors.length; i++) {\n            promises.push(handleAnchor(anchors[i], resolver, linkHandler));\n        }\n        // Handle link elements.\n        const links = node.getElementsByTagName('link');\n        for (let i = 0; i < links.length; i++) {\n            promises.push(handleAttr(links[i], 'href', resolver));\n        }\n        return Promise.all(promises);\n    }\n    Private.handleUrls = handleUrls;\n    /**\n     * Resolve the paths in `<a>` elements that have a `data-path` attribute.\n     *\n     * @param node - The head html element.\n     *\n     * @param resolver - A url resolver.\n     *\n     * @param linkHandler - An optional link handler for nodes.\n     *\n     * @returns a promise fulfilled when the relative urls have been resolved.\n     */\n    async function handlePaths(node, resolver, linkHandler) {\n        const anchors = Array.from(node.querySelectorAll('a[data-path]'));\n        return Promise.all(anchors.map(anchor => handlePathAnchor(anchor, resolver, linkHandler)));\n    }\n    Private.handlePaths = handlePaths;\n    /**\n     * Apply ids to headers.\n     */\n    function headerAnchors(node) {\n        const headerNames = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n        for (const headerType of headerNames) {\n            const headers = node.getElementsByTagName(headerType);\n            for (let i = 0; i < headers.length; i++) {\n                const header = headers[i];\n                header.id = renderMarkdown.createHeaderId(header);\n                const anchor = document.createElement('a');\n                anchor.target = '_self';\n                anchor.textContent = '¶';\n                anchor.href = '#' + header.id;\n                anchor.classList.add('jp-InternalAnchorLink');\n                header.appendChild(anchor);\n            }\n        }\n    }\n    Private.headerAnchors = headerAnchors;\n    /**\n     * Handle a node with a `src` or `href` attribute.\n     */\n    async function handleAttr(node, name, resolver) {\n        const source = node.getAttribute(name) || '';\n        const isLocal = resolver.isLocal\n            ? resolver.isLocal(source)\n            : URLExt.isLocal(source);\n        if (!source || !isLocal) {\n            return;\n        }\n        try {\n            const urlPath = await resolver.resolveUrl(source);\n            let url = await resolver.getDownloadUrl(urlPath);\n            if (URLExt.parse(url).protocol !== 'data:') {\n                // Bust caching for local src attrs.\n                // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Bypassing_the_cache\n                url += (/\\?/.test(url) ? '&' : '?') + new Date().getTime();\n            }\n            node.setAttribute(name, url);\n        }\n        catch (err) {\n            // If there was an error getting the url,\n            // just make it an empty link and report the error.\n            node.setAttribute(name, '');\n            throw err;\n        }\n    }\n    /**\n     * Handle an anchor node.\n     */\n    async function handleAnchor(anchor, resolver, linkHandler) {\n        // Get the link path without the location prepended.\n        // (e.g. \"./foo.md#Header 1\" vs \"http://localhost:8888/foo.md#Header 1\")\n        let href = anchor.getAttribute('href') || '';\n        const isLocal = resolver.isLocal\n            ? resolver.isLocal(href)\n            : URLExt.isLocal(href);\n        // Bail if it is not a file-like url.\n        if (!href || !isLocal) {\n            return;\n        }\n        // Remove the hash until we can handle it.\n        const hash = anchor.hash;\n        if (hash) {\n            // Handle internal link in the file.\n            if (hash === href) {\n                anchor.target = '_self';\n                return;\n            }\n            // For external links, remove the hash until we have hash handling.\n            href = href.replace(hash, '');\n        }\n        // Get the appropriate file path.\n        return resolver\n            .resolveUrl(href)\n            .then(urlPath => {\n            // decode encoded url from url to api path\n            const path = decodeURIComponent(urlPath);\n            // Handle the click override.\n            if (linkHandler) {\n                linkHandler.handleLink(anchor, path, hash);\n            }\n            // Get the appropriate file download path.\n            return resolver.getDownloadUrl(urlPath);\n        })\n            .then(url => {\n            // Set the visible anchor.\n            anchor.href = url + hash;\n        })\n            .catch(err => {\n            // If there was an error getting the url,\n            // just make it an empty link.\n            anchor.href = '';\n        });\n    }\n    /**\n     * Handle an anchor node.\n     */\n    async function handlePathAnchor(anchor, resolver, linkHandler) {\n        let path = anchor.dataset.path || '';\n        let locator = anchor.dataset.locator ? '#' + anchor.dataset.locator : '';\n        delete anchor.dataset.path;\n        delete anchor.dataset.locator;\n        const allowRoot = true;\n        const isLocal = resolver.isLocal\n            ? resolver.isLocal(path, allowRoot)\n            : URLExt.isLocal(path, allowRoot);\n        // Bail if:\n        // - it is not a file-like url,\n        // - the resolver does not support paths\n        // - there is no link handler, or if it does not support paths\n        if (!path ||\n            !isLocal ||\n            !resolver.resolvePath ||\n            !linkHandler ||\n            !linkHandler.handlePath) {\n            anchor.replaceWith(...anchor.childNodes);\n            return;\n        }\n        try {\n            // Find given path\n            const resolution = await resolver.resolvePath(path);\n            if (!resolution) {\n                // Bail if the file does not exist\n                console.log('Path resolution bailing: does not exist');\n                return;\n            }\n            // Handle the click override.\n            linkHandler.handlePath(anchor, resolution.path, resolution.scope, locator);\n            // Set the visible anchor.\n            anchor.href = resolution.path + locator;\n        }\n        catch (err) {\n            // If there was an error getting the url,\n            // just make it an empty link.\n            console.warn('Path anchor error:', err);\n            anchor.href = '#linking-failed-see-console';\n        }\n    }\n    const ANSI_COLORS = [\n        'ansi-black',\n        'ansi-red',\n        'ansi-green',\n        'ansi-yellow',\n        'ansi-blue',\n        'ansi-magenta',\n        'ansi-cyan',\n        'ansi-white',\n        'ansi-black-intense',\n        'ansi-red-intense',\n        'ansi-green-intense',\n        'ansi-yellow-intense',\n        'ansi-blue-intense',\n        'ansi-magenta-intense',\n        'ansi-cyan-intense',\n        'ansi-white-intense'\n    ];\n    /**\n     * Create HTML tags for a string with given foreground, background etc. and\n     * add them to the `out` array.\n     */\n    function pushColoredChunk(chunk, fg, bg, bold, underline, inverse, out) {\n        if (chunk) {\n            const classes = [];\n            const styles = [];\n            if (bold && typeof fg === 'number' && 0 <= fg && fg < 8) {\n                fg += 8; // Bold text uses \"intense\" colors\n            }\n            if (inverse) {\n                [fg, bg] = [bg, fg];\n            }\n            if (typeof fg === 'number') {\n                classes.push(ANSI_COLORS[fg] + '-fg');\n            }\n            else if (fg.length) {\n                styles.push(`color: rgb(${fg})`);\n            }\n            else if (inverse) {\n                classes.push('ansi-default-inverse-fg');\n            }\n            if (typeof bg === 'number') {\n                classes.push(ANSI_COLORS[bg] + '-bg');\n            }\n            else if (bg.length) {\n                styles.push(`background-color: rgb(${bg})`);\n            }\n            else if (inverse) {\n                classes.push('ansi-default-inverse-bg');\n            }\n            if (bold) {\n                classes.push('ansi-bold');\n            }\n            if (underline) {\n                classes.push('ansi-underline');\n            }\n            if (classes.length || styles.length) {\n                out.push('<span');\n                if (classes.length) {\n                    out.push(` class=\"${classes.join(' ')}\"`);\n                }\n                if (styles.length) {\n                    out.push(` style=\"${styles.join('; ')}\"`);\n                }\n                out.push('>');\n                out.push(chunk);\n                out.push('</span>');\n            }\n            else {\n                out.push(chunk);\n            }\n        }\n    }\n    /**\n     * Convert ANSI extended colors to R/G/B triple.\n     */\n    function getExtendedColors(numbers) {\n        let r;\n        let g;\n        let b;\n        const n = numbers.shift();\n        if (n === 2 && numbers.length >= 3) {\n            // 24-bit RGB\n            r = numbers.shift();\n            g = numbers.shift();\n            b = numbers.shift();\n            if ([r, g, b].some(c => c < 0 || 255 < c)) {\n                throw new RangeError('Invalid range for RGB colors');\n            }\n        }\n        else if (n === 5 && numbers.length >= 1) {\n            // 256 colors\n            const idx = numbers.shift();\n            if (idx < 0) {\n                throw new RangeError('Color index must be >= 0');\n            }\n            else if (idx < 16) {\n                // 16 default terminal colors\n                return idx;\n            }\n            else if (idx < 232) {\n                // 6x6x6 color cube, see https://stackoverflow.com/a/27165165/500098\n                r = Math.floor((idx - 16) / 36);\n                r = r > 0 ? 55 + r * 40 : 0;\n                g = Math.floor(((idx - 16) % 36) / 6);\n                g = g > 0 ? 55 + g * 40 : 0;\n                b = (idx - 16) % 6;\n                b = b > 0 ? 55 + b * 40 : 0;\n            }\n            else if (idx < 256) {\n                // grayscale, see https://stackoverflow.com/a/27165165/500098\n                r = g = b = (idx - 232) * 10 + 8;\n            }\n            else {\n                throw new RangeError('Color index must be < 256');\n            }\n        }\n        else {\n            throw new RangeError('Invalid extended color specification');\n        }\n        return [r, g, b];\n    }\n    /**\n     * Transform ANSI color escape codes into HTML <span> tags with CSS\n     * classes such as \"ansi-green-intense-fg\".\n     * The actual colors used are set in the CSS file.\n     * This also removes non-color escape sequences.\n     * This is supposed to have the same behavior as nbconvert.filters.ansi2html()\n     */\n    function ansiSpan(str) {\n        const ansiRe = /\\x1b\\[(.*?)([@-~])/g; // eslint-disable-line no-control-regex\n        let fg = [];\n        let bg = [];\n        let bold = false;\n        let underline = false;\n        let inverse = false;\n        let match;\n        const out = [];\n        const numbers = [];\n        let start = 0;\n        str = escape(str);\n        str += '\\x1b[m'; // Ensure markup for trailing text\n        // tslint:disable-next-line\n        while ((match = ansiRe.exec(str))) {\n            if (match[2] === 'm') {\n                const items = match[1].split(';');\n                for (let i = 0; i < items.length; i++) {\n                    const item = items[i];\n                    if (item === '') {\n                        numbers.push(0);\n                    }\n                    else if (item.search(/^\\d+$/) !== -1) {\n                        numbers.push(parseInt(item, 10));\n                    }\n                    else {\n                        // Ignored: Invalid color specification\n                        numbers.length = 0;\n                        break;\n                    }\n                }\n            }\n            else {\n                // Ignored: Not a color code\n            }\n            const chunk = str.substring(start, match.index);\n            pushColoredChunk(chunk, fg, bg, bold, underline, inverse, out);\n            start = ansiRe.lastIndex;\n            while (numbers.length) {\n                const n = numbers.shift();\n                switch (n) {\n                    case 0:\n                        fg = bg = [];\n                        bold = false;\n                        underline = false;\n                        inverse = false;\n                        break;\n                    case 1:\n                    case 5:\n                        bold = true;\n                        break;\n                    case 4:\n                        underline = true;\n                        break;\n                    case 7:\n                        inverse = true;\n                        break;\n                    case 21:\n                    case 22:\n                        bold = false;\n                        break;\n                    case 24:\n                        underline = false;\n                        break;\n                    case 27:\n                        inverse = false;\n                        break;\n                    case 30:\n                    case 31:\n                    case 32:\n                    case 33:\n                    case 34:\n                    case 35:\n                    case 36:\n                    case 37:\n                        fg = n - 30;\n                        break;\n                    case 38:\n                        try {\n                            fg = getExtendedColors(numbers);\n                        }\n                        catch (e) {\n                            numbers.length = 0;\n                        }\n                        break;\n                    case 39:\n                        fg = [];\n                        break;\n                    case 40:\n                    case 41:\n                    case 42:\n                    case 43:\n                    case 44:\n                    case 45:\n                    case 46:\n                    case 47:\n                        bg = n - 40;\n                        break;\n                    case 48:\n                        try {\n                            bg = getExtendedColors(numbers);\n                        }\n                        catch (e) {\n                            numbers.length = 0;\n                        }\n                        break;\n                    case 49:\n                        bg = [];\n                        break;\n                    case 90:\n                    case 91:\n                    case 92:\n                    case 93:\n                    case 94:\n                    case 95:\n                    case 96:\n                    case 97:\n                        fg = n - 90 + 8;\n                        break;\n                    case 100:\n                    case 101:\n                    case 102:\n                    case 103:\n                    case 104:\n                    case 105:\n                    case 106:\n                    case 107:\n                        bg = n - 100 + 8;\n                        break;\n                    default:\n                    // Unknown codes are ignored\n                }\n            }\n        }\n        return out.join('');\n    }\n    Private.ansiSpan = ansiSpan;\n})(Private || (Private = {}));\n//# sourceMappingURL=renderers.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { Token } from '@lumino/coreutils';\n/**\n * The rendermime token.\n */\nexport const IRenderMimeRegistry = new Token('@jupyterlab/rendermime:IRenderMimeRegistry', 'A service for the rendermime registry for the application. Use this to create renderers for various mime-types in your extension. Many times it will be easier to create a \"mime renderer extension\" rather than using this service directly.');\n/**\n * The latex typesetter token.\n */\nexport const ILatexTypesetter = new Token('@jupyterlab/rendermime:ILatexTypesetter', 'A service for the LaTeX typesetter for the application. Use this if you want to typeset math in your extension.');\n/**\n * The markdown parser token.\n */\nexport const IMarkdownParser = new Token('@jupyterlab/rendermime:IMarkdownParser', 'A service for rendering markdown syntax as HTML content.');\n//# sourceMappingURL=tokens.js.map","import { nullTranslator } from '@jupyterlab/translation';\nimport { Widget } from '@lumino/widgets';\nimport * as renderers from './renderers';\n/**\n * A common base class for mime renderers.\n */\nexport class RenderedCommon extends Widget {\n    /**\n     * Construct a new rendered common widget.\n     *\n     * @param options - The options for initializing the widget.\n     */\n    constructor(options) {\n        var _a, _b;\n        super();\n        this.mimeType = options.mimeType;\n        this.sanitizer = options.sanitizer;\n        this.resolver = options.resolver;\n        this.linkHandler = options.linkHandler;\n        this.translator = (_a = options.translator) !== null && _a !== void 0 ? _a : nullTranslator;\n        this.latexTypesetter = options.latexTypesetter;\n        this.markdownParser = (_b = options.markdownParser) !== null && _b !== void 0 ? _b : null;\n        this.node.dataset['mimeType'] = this.mimeType;\n    }\n    /**\n     * Render a mime model.\n     *\n     * @param model - The mime model to render.\n     *\n     * @param keepExisting - Whether to keep the existing rendering.\n     *\n     * @returns A promise which resolves when rendering is complete.\n     *\n     * #### Notes\n     * By default, if the DOM node for this widget already has content, it\n     * is emptied before rendering. Subclasses that do not want this behavior\n     * (if, for instance, they are using DOM diffing), should override this\n     * method or call `super.renderModel(model, true)`.\n     */\n    async renderModel(model, keepExisting) {\n        // TODO compare model against old model for early bail?\n        // Empty any existing content in the node from previous renders\n        if (!keepExisting) {\n            while (this.node.firstChild) {\n                this.node.removeChild(this.node.firstChild);\n            }\n        }\n        // Toggle the trusted class on the widget.\n        this.toggleClass('jp-mod-trusted', model.trusted);\n        // Render the actual content.\n        await this.render(model);\n        // Handle the fragment identifier if given.\n        const { fragment } = model.metadata;\n        if (fragment) {\n            this.setFragment(fragment);\n        }\n    }\n    /**\n     * Set the URI fragment identifier.\n     *\n     * @param fragment - The URI fragment identifier.\n     */\n    setFragment(fragment) {\n        /* no-op */\n    }\n}\n/**\n * A common base class for HTML mime renderers.\n */\nexport class RenderedHTMLCommon extends RenderedCommon {\n    /**\n     * Construct a new rendered HTML common widget.\n     *\n     * @param options - The options for initializing the widget.\n     */\n    constructor(options) {\n        super(options);\n        this.addClass('jp-RenderedHTMLCommon');\n    }\n    setFragment(fragment) {\n        let el;\n        try {\n            el = this.node.querySelector(fragment.startsWith('#')\n                ? `#${CSS.escape(fragment.slice(1))}`\n                : fragment);\n        }\n        catch (error) {\n            console.warn('Unable to set URI fragment identifier.', error);\n        }\n        if (el) {\n            el.scrollIntoView();\n        }\n    }\n}\n/**\n * A mime renderer for displaying HTML and math.\n */\nexport class RenderedHTML extends RenderedHTMLCommon {\n    /**\n     * Construct a new rendered HTML widget.\n     *\n     * @param options - The options for initializing the widget.\n     */\n    constructor(options) {\n        super(options);\n        // A promise which resolves when most recent rendering is complete.\n        this._rendered = Promise.resolve();\n        this.addClass('jp-RenderedHTML');\n    }\n    /**\n     * Render a mime model.\n     *\n     * @param model - The mime model to render.\n     *\n     * @returns A promise which resolves when rendering is complete.\n     */\n    render(model) {\n        return (this._rendered = renderers.renderHTML({\n            host: this.node,\n            source: String(model.data[this.mimeType]),\n            trusted: model.trusted,\n            resolver: this.resolver,\n            sanitizer: this.sanitizer,\n            linkHandler: this.linkHandler,\n            shouldTypeset: this.isAttached,\n            latexTypesetter: this.latexTypesetter,\n            translator: this.translator\n        }));\n    }\n    /**\n     * A message handler invoked on an `'after-attach'` message.\n     */\n    onAfterAttach(msg) {\n        this._rendered\n            .then(() => {\n            if (this.latexTypesetter) {\n                this.latexTypesetter.typeset(this.node);\n            }\n        })\n            .catch(console.warn);\n    }\n}\n/**\n * A mime renderer for displaying LaTeX output.\n */\nexport class RenderedLatex extends RenderedCommon {\n    /**\n     * Construct a new rendered LaTeX widget.\n     *\n     * @param options - The options for initializing the widget.\n     */\n    constructor(options) {\n        super(options);\n        // A promise which resolves when most recent rendering is complete.\n        this._rendered = Promise.resolve();\n        this.addClass('jp-RenderedLatex');\n    }\n    /**\n     * Render a mime model.\n     *\n     * @param model - The mime model to render.\n     *\n     * @returns A promise which resolves when rendering is complete.\n     */\n    render(model) {\n        return (this._rendered = renderers.renderLatex({\n            host: this.node,\n            source: String(model.data[this.mimeType]),\n            shouldTypeset: this.isAttached,\n            latexTypesetter: this.latexTypesetter\n        }));\n    }\n    /**\n     * A message handler invoked on an `'after-attach'` message.\n     */\n    onAfterAttach(msg) {\n        this._rendered\n            .then(() => {\n            if (this.latexTypesetter) {\n                this.latexTypesetter.typeset(this.node);\n            }\n        })\n            .catch(console.warn);\n    }\n}\n/**\n * A mime renderer for displaying images.\n */\nexport class RenderedImage extends RenderedCommon {\n    /**\n     * Construct a new rendered image widget.\n     *\n     * @param options - The options for initializing the widget.\n     */\n    constructor(options) {\n        super(options);\n        this.addClass('jp-RenderedImage');\n    }\n    /**\n     * Render a mime model.\n     *\n     * @param model - The mime model to render.\n     *\n     * @returns A promise which resolves when rendering is complete.\n     */\n    render(model) {\n        const metadata = model.metadata[this.mimeType];\n        return renderers.renderImage({\n            host: this.node,\n            mimeType: this.mimeType,\n            source: String(model.data[this.mimeType]),\n            width: metadata && metadata.width,\n            height: metadata && metadata.height,\n            needsBackground: model.metadata['needs_background'],\n            unconfined: metadata && metadata.unconfined\n        });\n    }\n}\n/**\n * A mime renderer for displaying Markdown with embedded latex.\n */\nexport class RenderedMarkdown extends RenderedHTMLCommon {\n    /**\n     * Construct a new rendered markdown widget.\n     *\n     * @param options - The options for initializing the widget.\n     */\n    constructor(options) {\n        super(options);\n        // A promise which resolves when most recent rendering is complete.\n        this._rendered = Promise.resolve();\n        this.addClass('jp-RenderedMarkdown');\n    }\n    /**\n     * Render a mime model.\n     *\n     * @param model - The mime model to render.\n     *\n     * @returns A promise which resolves when rendering is complete.\n     */\n    render(model) {\n        return (this._rendered = renderers.renderMarkdown({\n            host: this.node,\n            source: String(model.data[this.mimeType]),\n            trusted: model.trusted,\n            resolver: this.resolver,\n            sanitizer: this.sanitizer,\n            linkHandler: this.linkHandler,\n            shouldTypeset: this.isAttached,\n            latexTypesetter: this.latexTypesetter,\n            markdownParser: this.markdownParser,\n            translator: this.translator\n        }));\n    }\n    /**\n     * Render a mime model.\n     *\n     * @param model - The mime model to render.\n     *\n     * @returns A promise which resolves when rendering is complete.\n     */\n    async renderModel(model) {\n        await super.renderModel(model, true);\n    }\n    /**\n     * A message handler invoked on an `'after-attach'` message.\n     */\n    onAfterAttach(msg) {\n        this._rendered\n            .then(() => {\n            if (this.latexTypesetter) {\n                this.latexTypesetter.typeset(this.node);\n            }\n        })\n            .catch(console.warn);\n    }\n}\n/**\n * A widget for displaying SVG content.\n */\nexport class RenderedSVG extends RenderedCommon {\n    /**\n     * Construct a new rendered SVG widget.\n     *\n     * @param options - The options for initializing the widget.\n     */\n    constructor(options) {\n        super(options);\n        // A promise which resolves when most recent rendering is complete.\n        this._rendered = Promise.resolve();\n        this.addClass('jp-RenderedSVG');\n    }\n    /**\n     * Render a mime model.\n     *\n     * @param model - The mime model to render.\n     *\n     * @returns A promise which resolves when rendering is complete.\n     */\n    render(model) {\n        const metadata = model.metadata[this.mimeType];\n        return (this._rendered = renderers.renderSVG({\n            host: this.node,\n            source: String(model.data[this.mimeType]),\n            trusted: model.trusted,\n            unconfined: metadata && metadata.unconfined,\n            translator: this.translator\n        }));\n    }\n    /**\n     * A message handler invoked on an `'after-attach'` message.\n     */\n    onAfterAttach(msg) {\n        this._rendered\n            .then(() => {\n            if (this.latexTypesetter) {\n                this.latexTypesetter.typeset(this.node);\n            }\n        })\n            .catch(console.warn);\n    }\n}\n/**\n * A widget for displaying plain text and console text.\n */\nexport class RenderedText extends RenderedCommon {\n    /**\n     * Construct a new rendered text widget.\n     *\n     * @param options - The options for initializing the widget.\n     */\n    constructor(options) {\n        super(options);\n        this.addClass('jp-RenderedText');\n    }\n    /**\n     * Render a mime model.\n     *\n     * @param model - The mime model to render.\n     *\n     * @returns A promise which resolves when rendering is complete.\n     */\n    render(model) {\n        return renderers.renderText({\n            host: this.node,\n            sanitizer: this.sanitizer,\n            source: String(model.data[this.mimeType]),\n            translator: this.translator\n        });\n    }\n}\nexport class RenderedError extends RenderedCommon {\n    constructor(options) {\n        super(options);\n        this.addClass('jp-RenderedText');\n    }\n    render(model) {\n        return renderers.renderError({\n            host: this.node,\n            sanitizer: this.sanitizer,\n            source: String(model.data[this.mimeType]),\n            linkHandler: this.linkHandler,\n            resolver: this.resolver,\n            translator: this.translator\n        });\n    }\n}\n/**\n * A widget for displaying JavaScript output.\n */\nexport class RenderedJavaScript extends RenderedCommon {\n    /**\n     * Construct a new rendered text widget.\n     *\n     * @param options - The options for initializing the widget.\n     */\n    constructor(options) {\n        super(options);\n        this.addClass('jp-RenderedJavaScript');\n    }\n    /**\n     * Render a mime model.\n     *\n     * @param model - The mime model to render.\n     *\n     * @returns A promise which resolves when rendering is complete.\n     */\n    render(model) {\n        const trans = this.translator.load('jupyterlab');\n        return renderers.renderText({\n            host: this.node,\n            sanitizer: this.sanitizer,\n            source: trans.__('JavaScript output is disabled in JupyterLab'),\n            translator: this.translator\n        });\n    }\n}\n//# sourceMappingURL=widgets.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Dialog, showDialog } from '@jupyterlab/apputils';\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { KernelAPI } from '@jupyterlab/services';\nimport { cleaningIcon, closeIcon, CommandToolbarButton, consoleIcon, jupyterIcon, kernelIcon, notebookIcon } from '@jupyterlab/ui-components';\nimport { Throttler } from '@lumino/polling';\nimport { Signal } from '@lumino/signaling';\nimport React from 'react';\nimport { CommandIDs } from '.';\nconst KERNEL_ITEM_CLASS = 'jp-mod-kernel';\nconst KERNELSPEC_ITEM_CLASS = 'jp-mod-kernelspec';\nconst WIDGET_ITEM_CLASS = 'jp-mod-kernel-widget';\nconst KERNEL_LABEL_ID = 'jp-RunningSessions-item-label-kernel-id';\n/**\n * Add the running kernel manager (notebooks & consoles) to the running panel.\n */\nexport async function addKernelRunningSessionManager(managers, translator, app) {\n    const { commands, contextMenu, serviceManager } = app;\n    const { kernels, kernelspecs, sessions } = serviceManager;\n    const { runningChanged, RunningKernel } = Private;\n    const throttler = new Throttler(() => runningChanged.emit(undefined), 100);\n    const trans = translator.load('jupyterlab');\n    const shutdownUnusedLabel = trans.__('Shut Down Unused');\n    let shutdownUnusedEnabled = false;\n    const shutdownUnusedThrottler = new Throttler(checkShutdownUnusedEnabled, 10000);\n    // Throttle signal emissions from the kernel and session managers.\n    kernels.runningChanged.connect(() => {\n        void throttler.invoke();\n        void shutdownUnusedThrottler.invoke();\n    });\n    sessions.runningChanged.connect(() => void throttler.invoke());\n    // Wait until the relevant services are ready.\n    await Promise.all([kernels.ready, kernelspecs.ready, sessions.ready]);\n    function getUnusedKernels() {\n        // Identifies unused kernels\n        return Array.from(kernels.running()).filter(kernel => { var _a; return ((_a = kernel.connections) !== null && _a !== void 0 ? _a : 1) < 1; });\n    }\n    async function checkShutdownUnusedEnabled() {\n        const wasEnabled = shutdownUnusedEnabled;\n        shutdownUnusedEnabled = getUnusedKernels().length > 0;\n        if (wasEnabled !== shutdownUnusedEnabled) {\n            commands.notifyCommandChanged(CommandIDs.kernelShutDownUnused);\n        }\n    }\n    commands.addCommand(CommandIDs.kernelShutDownUnused, {\n        label: args => (args.toolbar ? '' : shutdownUnusedLabel),\n        icon: args => (args.toolbar ? cleaningIcon : undefined),\n        execute: async () => {\n            const unusedKernels = getUnusedKernels();\n            if (unusedKernels.length === 0) {\n                return;\n            }\n            const confirmed = await showDialog({\n                title: shutdownUnusedLabel,\n                body: (React.createElement(React.Fragment, null,\n                    trans.__('Are you sure you want to shut down the following unused kernels?'),\n                    React.createElement(\"ul\", null, unusedKernels.map(kernel => (React.createElement(\"li\", { key: kernel.id }, trans.__('%1 (%2)', kernel.name, kernel.id.slice(0, 8)))))))),\n                buttons: [\n                    Dialog.cancelButton(),\n                    Dialog.warnButton({ label: shutdownUnusedLabel })\n                ]\n            });\n            if (confirmed.button.accept) {\n                await Promise.allSettled(unusedKernels.map(kernel => KernelAPI.shutdownKernel(kernel.id)));\n                await Promise.all([\n                    kernels.refreshRunning(),\n                    sessions.refreshRunning()\n                ]);\n            }\n        },\n        isEnabled: () => shutdownUnusedEnabled\n    });\n    // Add the kernels pane to the running sidebar.\n    managers.add({\n        name: trans.__('Kernels'),\n        supportsMultipleViews: true,\n        running: (options) => {\n            var _a;\n            const kernelsBySpec = new Map();\n            for (const kernel of kernels.running()) {\n                const list = (_a = kernelsBySpec.get(kernel.name)) !== null && _a !== void 0 ? _a : [];\n                kernelsBySpec.set(kernel.name, list);\n                list.push(new RunningKernel({\n                    commands,\n                    kernel,\n                    kernels,\n                    sessions,\n                    trans,\n                    mode: options.mode\n                }));\n            }\n            const treeItems = Array.from(kernelsBySpec.entries()).map(([spec, kernels]) => {\n                var _a;\n                return new Private.KernelSpecItem({\n                    name: spec,\n                    kernels,\n                    spec: (_a = kernelspecs.specs) === null || _a === void 0 ? void 0 : _a.kernelspecs[spec],\n                    trans\n                });\n            });\n            return options.mode === 'tree'\n                ? treeItems\n                : treeItems\n                    .map(item => item.children.map(i => { var _a; return (_a = i.children) !== null && _a !== void 0 ? _a : []; }).flat())\n                    .flat();\n        },\n        shutdownAll: () => kernels.shutdownAll(),\n        refreshRunning: () => Promise.all([kernels.refreshRunning(), sessions.refreshRunning()]),\n        runningChanged,\n        shutdownLabel: trans.__('Shut Down Kernel'),\n        shutdownAllLabel: trans.__('Shut Down All'),\n        shutdownAllConfirmationText: () => trans._n('Are you sure you want to permanently shut down the running kernel?', 'Are you sure you want to permanently shut down the %1 running kernels?', kernels.runningCount),\n        toolbarButtons: [\n            new CommandToolbarButton({\n                commands,\n                id: CommandIDs.kernelShutDownUnused,\n                caption: shutdownUnusedLabel,\n                args: { toolbar: true }\n            })\n        ]\n    });\n    // Add running kernels commands to the registry.\n    const test = (node) => node.classList.contains(KERNEL_ITEM_CLASS);\n    commands.addCommand(CommandIDs.kernelNewConsole, {\n        icon: consoleIcon,\n        label: trans.__('New Console for Kernel'),\n        execute: args => {\n            var _a;\n            const node = app.contextMenuHitTest(test);\n            const id = (_a = args.id) !== null && _a !== void 0 ? _a : node === null || node === void 0 ? void 0 : node.dataset['context'];\n            if (id) {\n                return commands.execute('console:create', { kernelPreference: { id } });\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.kernelNewNotebook, {\n        icon: notebookIcon,\n        label: trans.__('New Notebook for Kernel'),\n        execute: args => {\n            var _a;\n            const node = app.contextMenuHitTest(test);\n            const id = (_a = args.id) !== null && _a !== void 0 ? _a : node === null || node === void 0 ? void 0 : node.dataset['context'];\n            if (id) {\n                return commands.execute('notebook:create-new', { kernelId: id });\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.kernelOpenSession, {\n        icon: args => args.type === 'console'\n            ? consoleIcon\n            : args.type === 'notebook'\n                ? notebookIcon\n                : undefined,\n        isEnabled: ({ path, type }) => !!type || path !== undefined,\n        label: ({ name, path }) => name ||\n            PathExt.basename(path || trans.__('Unknown Session')),\n        execute: ({ path, type }) => {\n            if (!type || path === undefined) {\n                return;\n            }\n            const command = type === 'console' ? 'console:open' : 'docmanager:open';\n            return commands.execute(command, { path });\n        }\n    });\n    commands.addCommand(CommandIDs.kernelShutDown, {\n        icon: closeIcon,\n        label: trans.__('Shut Down Kernel'),\n        execute: args => {\n            var _a;\n            const node = app.contextMenuHitTest(test);\n            const id = (_a = args.id) !== null && _a !== void 0 ? _a : node === null || node === void 0 ? void 0 : node.dataset['context'];\n            if (id) {\n                return kernels.shutdown(id);\n            }\n        }\n    });\n    const sessionsItems = [];\n    // Populate connected sessions submenu when context menu is opened.\n    contextMenu.opened.connect(async () => {\n        var _a, _b, _c;\n        const submenu = (_b = (_a = contextMenu.menu.items.find(item => {\n            var _a;\n            return item.type === 'submenu' &&\n                ((_a = item.submenu) === null || _a === void 0 ? void 0 : _a.id) === 'jp-contextmenu-connected-sessions';\n        })) === null || _a === void 0 ? void 0 : _a.submenu) !== null && _b !== void 0 ? _b : null;\n        if (!submenu) {\n            // Bail early if the connected session menu is not found\n            return;\n        }\n        // Empty the connected sessions submenu.\n        sessionsItems.forEach(item => item.dispose());\n        sessionsItems.length = 0;\n        submenu.clearItems();\n        const node = app.contextMenuHitTest(test);\n        const id = node === null || node === void 0 ? void 0 : node.dataset['context'];\n        if (!id) {\n            return;\n        }\n        // Populate the submenu with sessions connected to this kernel.\n        const command = CommandIDs.kernelOpenSession;\n        for (const session of sessions.running()) {\n            if (id === ((_c = session.kernel) === null || _c === void 0 ? void 0 : _c.id)) {\n                const { name, path, type } = session;\n                sessionsItems.push(submenu.addItem({ command, args: { name, path, type } }));\n            }\n        }\n    });\n}\nvar Private;\n(function (Private) {\n    class KernelSpecItem {\n        constructor(options) {\n            this._name = options.name;\n            this.className = KERNELSPEC_ITEM_CLASS;\n            this._kernels = options.kernels;\n            this.spec = options.spec || null;\n            this.trans = options.trans;\n        }\n        icon() {\n            const { spec } = this;\n            if (!spec || !spec.resources) {\n                return jupyterIcon;\n            }\n            return (spec.resources['logo-svg'] ||\n                spec.resources['logo-64x64'] ||\n                spec.resources['logo-32x32']);\n        }\n        label() {\n            const { _name, spec } = this;\n            return (spec === null || spec === void 0 ? void 0 : spec.display_name) || _name;\n        }\n        get children() {\n            return this._kernels;\n        }\n    }\n    Private.KernelSpecItem = KernelSpecItem;\n    class RunningKernel {\n        constructor(options) {\n            this.className = KERNEL_ITEM_CLASS;\n            this.commands = options.commands;\n            this.kernel = options.kernel;\n            this.context = this.kernel.id;\n            this.kernels = options.kernels;\n            this.sessions = options.sessions;\n            this.trans = options.trans;\n            this._mode = options.mode;\n        }\n        get children() {\n            var _a;\n            const children = [];\n            const open = CommandIDs.kernelOpenSession;\n            const { commands } = this;\n            for (const session of this.sessions.running()) {\n                if (this.kernel.id === ((_a = session.kernel) === null || _a === void 0 ? void 0 : _a.id)) {\n                    const { name, path, type } = session;\n                    children.push({\n                        className: WIDGET_ITEM_CLASS,\n                        context: this.kernel.id,\n                        open: () => void commands.execute(open, { name, path, type }),\n                        icon: () => type === 'console'\n                            ? consoleIcon\n                            : type === 'notebook'\n                                ? notebookIcon\n                                : jupyterIcon,\n                        label: () => {\n                            if (this._mode === 'tree') {\n                                return name;\n                            }\n                            const kernelIdPrefix = this.kernel.id.split('-')[0];\n                            return (React.createElement(React.Fragment, null,\n                                name,\n                                ' ',\n                                React.createElement(\"span\", { className: KERNEL_LABEL_ID },\n                                    \"(\",\n                                    kernelIdPrefix,\n                                    \")\")));\n                        },\n                        labelTitle: () => path,\n                        name: () => name\n                    });\n                }\n            }\n            return children;\n        }\n        shutdown() {\n            return this.kernels.shutdown(this.kernel.id);\n        }\n        icon() {\n            return kernelIcon;\n        }\n        label() {\n            const { kernel } = this;\n            const kernelIdPrefix = kernel.id.split('-')[0];\n            return (React.createElement(React.Fragment, null,\n                this._summary,\n                ' ',\n                React.createElement(\"span\", { className: KERNEL_LABEL_ID },\n                    \"(\",\n                    kernelIdPrefix,\n                    \")\")));\n        }\n        labelTitle() {\n            var _a;\n            const { trans } = this;\n            const { id } = this.kernel;\n            const title = [`${this._summary}: ${id}`];\n            for (const session of this.sessions.running()) {\n                if (this.kernel.id === ((_a = session.kernel) === null || _a === void 0 ? void 0 : _a.id)) {\n                    const { path, type } = session;\n                    title.push(trans.__(`%1\\nPath: %2`, type, path));\n                }\n            }\n            return title.join('\\n\\n');\n        }\n        get _summary() {\n            const children = this.children;\n            if (children.length === 0) {\n                return this.trans.__('No sessions connected');\n            }\n            else if (children.length == 1) {\n                return children[0].name();\n            }\n            else {\n                return this.trans.__('%1 and %2 more', children[0].name(), children.length - 1);\n            }\n        }\n    }\n    Private.RunningKernel = RunningKernel;\n    Private.runningChanged = new Signal({});\n})(Private || (Private = {}));\n//# sourceMappingURL=kernels.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { DocumentWidget } from '@jupyterlab/docregistry';\nimport { fileIcon, LabIcon } from '@jupyterlab/ui-components';\nimport { Signal } from '@lumino/signaling';\n/**\n * A class used to consolidate the signals used to rerender the open tabs section.\n */\nclass OpenTabsSignaler {\n    constructor(labShell) {\n        this._tabsChanged = new Signal(this);\n        this._widgets = [];\n        this._labShell = labShell;\n        this._labShell.layoutModified.connect(this._emitTabsChanged, this);\n    }\n    /**\n     * A signal that fires when the open tabs section should be rerendered.\n     */\n    get tabsChanged() {\n        return this._tabsChanged;\n    }\n    /**\n     * Add a widget to watch for title changing.\n     *\n     * @param widget A widget whose title may change.\n     */\n    addWidget(widget) {\n        widget.title.changed.connect(this._emitTabsChanged, this);\n        this._widgets.push(widget);\n    }\n    /**\n     * Emit the main signal that indicates the open tabs should be rerendered.\n     */\n    _emitTabsChanged() {\n        this._widgets.forEach(widget => {\n            widget.title.changed.disconnect(this._emitTabsChanged, this);\n        });\n        this._widgets = [];\n        this._tabsChanged.emit(void 0);\n    }\n}\n/**\n * Add the open tabs section to the running panel.\n *\n * @param managers - The IRunningSessionManagers used to register this section.\n * @param translator - The translator to use.\n * @param labShell - The ILabShell.\n */\nexport function addOpenTabsSessionManager(managers, translator, labShell) {\n    const signaler = new OpenTabsSignaler(labShell);\n    const trans = translator.load('jupyterlab');\n    managers.add({\n        name: trans.__('Open Tabs'),\n        supportsMultipleViews: false,\n        running: () => {\n            return Array.from(labShell.widgets('main')).map((widget) => {\n                signaler.addWidget(widget);\n                return new OpenTab(widget);\n            });\n        },\n        shutdownAll: () => {\n            const widgets = Array.from(labShell.widgets('main'));\n            for (const widget of widgets) {\n                widget.close();\n            }\n        },\n        refreshRunning: () => {\n            return void 0;\n        },\n        runningChanged: signaler.tabsChanged,\n        shutdownLabel: trans.__('Close'),\n        shutdownAllLabel: trans.__('Close All'),\n        shutdownAllConfirmationText: trans.__('Are you sure you want to close all open tabs?')\n    });\n    class OpenTab {\n        constructor(widget) {\n            this._widget = widget;\n        }\n        open() {\n            labShell.activateById(this._widget.id);\n        }\n        shutdown() {\n            this._widget.close();\n        }\n        icon() {\n            const widgetIcon = this._widget.title.icon;\n            return widgetIcon instanceof LabIcon ? widgetIcon : fileIcon;\n        }\n        label() {\n            return this._widget.title.label;\n        }\n        labelTitle() {\n            let labelTitle;\n            if (this._widget instanceof DocumentWidget) {\n                labelTitle = this._widget.context.path;\n            }\n            else {\n                labelTitle = this._widget.title.label;\n            }\n            return labelTitle;\n        }\n    }\n}\n//# sourceMappingURL=opentabs.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { fileIcon, LabIcon } from '@jupyterlab/ui-components';\n/**\n * Add the 'recently closed' section to the running panel.\n *\n * @param managers - The IRunningSessionManagers used to register this section.\n * @param recentsManager - The recent documents manager.\n * @param commands - The command registry.\n * @param docRegistry - Document registry.\n * @param translator - The translator to use.\n */\nexport function addRecentlyClosedSessionManager(managers, recentsManager, commands, docRegistry, translator) {\n    const trans = translator.load('jupyterlab');\n    managers.add({\n        name: trans.__('Recently Closed'),\n        supportsMultipleViews: false,\n        running: () => {\n            return recentsManager.recentlyClosed.map((recent) => {\n                return new RecentItem(recent);\n            });\n        },\n        shutdownAll: () => {\n            for (const widget of recentsManager.recentlyClosed) {\n                recentsManager.removeRecent(widget, 'closed');\n            }\n        },\n        refreshRunning: () => {\n            return void 0;\n        },\n        runningChanged: recentsManager.changed,\n        shutdownLabel: trans.__('Forget'),\n        shutdownAllLabel: trans.__('Forget All'),\n        shutdownAllConfirmationText: trans.__('Are you sure you want to clear recently closed tabs?')\n    });\n    class RecentItem {\n        constructor(recent) {\n            this._recent = recent;\n        }\n        async open() {\n            const recent = this._recent;\n            const isValid = await recentsManager.validate(recent);\n            if (!isValid) {\n                return;\n            }\n            await commands.execute('docmanager:open', {\n                path: recent.path,\n                factory: recent.factory\n            });\n            recentsManager.removeRecent(recent, 'closed');\n        }\n        shutdown() {\n            recentsManager.removeRecent(this._recent, 'closed');\n        }\n        icon() {\n            if (!this._recent.factory) {\n                return fileIcon;\n            }\n            // Prefer path inference as it is more granular.\n            const fileTypes = docRegistry.getFileTypesForPath(this._recent.path);\n            for (const fileType of fileTypes) {\n                const icon = fileType.icon;\n                if (icon instanceof LabIcon) {\n                    return icon;\n                }\n            }\n            // Fallback to factory-base inference.\n            const factory = docRegistry.getWidgetFactory(this._recent.factory);\n            if (factory) {\n                for (const fileTypeName of factory.fileTypes) {\n                    const fileType = docRegistry.getFileType(fileTypeName);\n                    const icon = fileType === null || fileType === void 0 ? void 0 : fileType.icon;\n                    if (icon instanceof LabIcon) {\n                        return icon;\n                    }\n                }\n            }\n            return fileIcon;\n        }\n        label() {\n            return PathExt.basename(this._recent.path);\n        }\n        labelTitle() {\n            return this._recent.path;\n        }\n    }\n}\n//# sourceMappingURL=recents.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module running-extension\n */\nimport { ILabShell, ILayoutRestorer } from '@jupyterlab/application';\nimport { Dialog, ICommandPalette } from '@jupyterlab/apputils';\nimport { IRunningSessionManagers, IRunningSessionSidebar, RunningSessionManagers, RunningSessions, SearchableSessions } from '@jupyterlab/running';\nimport { IRecentsManager } from '@jupyterlab/docmanager';\nimport { IStateDB } from '@jupyterlab/statedb';\nimport { ITranslator } from '@jupyterlab/translation';\nimport { CommandToolbarButton, launcherIcon, runningIcon } from '@jupyterlab/ui-components';\nimport { addKernelRunningSessionManager } from './kernels';\nimport { addOpenTabsSessionManager } from './opentabs';\nimport { addRecentlyClosedSessionManager } from './recents';\n/**\n * The command IDs used by the running plugin.\n */\nexport var CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.kernelNewConsole = 'running:kernel-new-console';\n    CommandIDs.kernelNewNotebook = 'running:kernel-new-notebook';\n    CommandIDs.kernelOpenSession = 'running:kernel-open-session';\n    CommandIDs.kernelShutDown = 'running:kernel-shut-down';\n    CommandIDs.kernelShutDownUnused = 'running:kernel-shut-down-unused';\n    CommandIDs.showPanel = 'running:show-panel';\n    CommandIDs.showModal = 'running:show-modal';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The default running sessions extension.\n */\nconst plugin = {\n    id: '@jupyterlab/running-extension:plugin',\n    description: 'Provides the running session managers.',\n    provides: IRunningSessionManagers,\n    requires: [ITranslator],\n    optional: [ILabShell],\n    autoStart: true,\n    activate: (app, translator, labShell) => {\n        const runningSessionManagers = new RunningSessionManagers();\n        if (labShell) {\n            addOpenTabsSessionManager(runningSessionManagers, translator, labShell);\n        }\n        void addKernelRunningSessionManager(runningSessionManagers, translator, app);\n        return runningSessionManagers;\n    }\n};\n/**\n * The plugin enabling the running sidebar.\n */\nconst sidebarPlugin = {\n    id: '@jupyterlab/running-extension:sidebar',\n    description: 'Provides the running session sidebar.',\n    provides: IRunningSessionSidebar,\n    requires: [IRunningSessionManagers, ITranslator],\n    optional: [ILayoutRestorer, IStateDB],\n    autoStart: true,\n    activate: (app, manager, translator, restorer, state) => {\n        const trans = translator.load('jupyterlab');\n        const running = new RunningSessions(manager, translator, state);\n        running.id = 'jp-running-sessions';\n        running.title.caption = trans.__('Running Terminals and Kernels');\n        running.title.icon = runningIcon;\n        running.node.setAttribute('role', 'region');\n        running.node.setAttribute('aria-label', trans.__('Running Sessions section'));\n        // Let the application restorer track the running panel for restoration of\n        // application state (e.g. setting the running panel as the current side bar\n        // widget).\n        if (restorer) {\n            restorer.add(running, 'running-sessions');\n        }\n        // Rank has been chosen somewhat arbitrarily to give priority to the running\n        // sessions widget in the sidebar.\n        app.shell.add(running, 'left', { rank: 200, type: 'Sessions and Tabs' });\n        app.commands.addCommand(CommandIDs.showPanel, {\n            label: trans.__('Sessions and Tabs'),\n            execute: () => {\n                app.shell.activateById(running.id);\n            }\n        });\n        return running;\n    }\n};\n/**\n * An optional adding recently closed tabs.\n */\nconst recentsPlugin = {\n    id: '@jupyterlab/running-extension:recently-closed',\n    description: 'Adds recently closed documents list.',\n    requires: [IRunningSessionManagers, IRecentsManager, ITranslator],\n    autoStart: true,\n    activate: (app, manager, recents, translator) => {\n        addRecentlyClosedSessionManager(manager, recents, app.commands, app.docRegistry, translator);\n    }\n};\n/**\n * An optional plugin allowing to among running items.\n */\nconst searchPlugin = {\n    id: '@jupyterlab/running-extension:search-tabs',\n    description: 'Adds a widget to search open and closed tabs.',\n    requires: [IRunningSessionManagers, ITranslator],\n    optional: [ICommandPalette, IRunningSessionSidebar],\n    autoStart: true,\n    activate: (app, manager, translator, palette, sidebar) => {\n        const trans = translator.load('jupyterlab');\n        app.commands.addCommand(CommandIDs.showModal, {\n            execute: () => {\n                const running = new SearchableSessions(manager, translator);\n                const dialog = new Dialog({\n                    title: trans.__('Tabs and Running Sessions'),\n                    body: running,\n                    buttons: [Dialog.okButton({})],\n                    hasClose: true\n                });\n                dialog.addClass('jp-SearchableSessions-modal');\n                return dialog.launch();\n            },\n            label: trans.__('Search Tabs and Running Sessions')\n        });\n        if (palette) {\n            palette.addItem({\n                command: CommandIDs.showModal,\n                category: trans.__('Running')\n            });\n        }\n        if (sidebar) {\n            const button = new CommandToolbarButton({\n                commands: app.commands,\n                id: CommandIDs.showModal,\n                icon: launcherIcon,\n                label: ''\n            });\n            sidebar.toolbar.addItem('open-as-modal', button);\n        }\n    }\n};\n/**\n * Export the plugins.\n */\nexport default [plugin, sidebarPlugin, recentsPlugin, searchPlugin];\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/docmanager/style/index.js';\nimport '@jupyterlab/running/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module running\n */\nimport { Button, TreeItem, TreeView } from '@jupyter/react-components';\nimport { Dialog, showDialog } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { closeIcon, collapseAllIcon, CommandToolbarButton, expandAllIcon, FilterBox, getTreeItemElement, PanelWithToolbar, ReactWidget, refreshIcon, SidePanel, tableRowsIcon, ToolbarButton, treeViewIcon, UseSignal } from '@jupyterlab/ui-components';\nimport { Token } from '@lumino/coreutils';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { ElementExt } from '@lumino/domutils';\nimport { Signal } from '@lumino/signaling';\nimport { Panel, Widget } from '@lumino/widgets';\nimport React, { isValidElement, useCallback, useRef } from 'react';\n/**\n * The class name added to a running widget.\n */\nconst RUNNING_CLASS = 'jp-RunningSessions';\n/**\n * The class name added to a searchable widget.\n */\nconst SEARCHABLE_CLASS = 'jp-SearchableSessions';\n/**\n * The class name added to the running terminal sessions section.\n */\nconst SECTION_CLASS = 'jp-RunningSessions-section';\n/**\n * The class name added to a section container.\n */\nconst CONTAINER_CLASS = 'jp-RunningSessions-sectionContainer';\n/**\n * The class name added to the running sessions items.\n */\nconst ITEM_CLASS = 'jp-RunningSessions-item';\n/**\n * The class name added to a running session item label.\n */\nconst ITEM_LABEL_CLASS = 'jp-RunningSessions-itemLabel';\n/**\n * The class name added to a running session item detail.\n */\nconst ITEM_DETAIL_CLASS = 'jp-RunningSessions-itemDetail';\n/**\n * The class name added to a running session item shutdown button.\n */\nconst SHUTDOWN_BUTTON_CLASS = 'jp-RunningSessions-itemShutdown';\n/**\n * The class name added to a running session item shutdown button.\n */\nconst SHUTDOWN_ALL_BUTTON_CLASS = 'jp-RunningSessions-shutdownAll';\n/**\n * The class name added to icons.\n */\nconst ITEM_ICON_CLASS = 'jp-RunningSessions-icon';\n/**\n * Modifier added to a section when flattened list view is requested.\n */\nconst LIST_VIEW_CLASS = 'jp-mod-running-list-view';\n/**\n * The class name added to button switching between nested and flat view.\n */\nconst VIEW_BUTTON_CLASS = 'jp-RunningSessions-viewButton';\n/**\n * The class name added to button switching between nested and flat view.\n */\nconst COLLAPSE_EXPAND_BUTTON_CLASS = 'jp-RunningSessions-collapseButton';\n/**\n * Identifier used in the state database.\n */\nconst STATE_DB_ID = 'jp-running-sessions';\n/**\n * The running sessions managers token.\n */\nexport const IRunningSessionManagers = new Token('@jupyterlab/running:IRunningSessionManagers', 'A service to add running session managers.');\n/**\n * The running sessions token.\n */\nexport const IRunningSessionSidebar = new Token('@jupyterlab/running:IRunningSessionsSidebar', 'A token allowing to modify the running sessions sidebar.');\nexport class RunningSessionManagers {\n    constructor() {\n        this._added = new Signal(this);\n        this._managers = [];\n    }\n    /**\n     * Signal emitted when a new manager is added.\n     */\n    get added() {\n        return this._added;\n    }\n    /**\n     * Add a running item manager.\n     *\n     * @param manager - The running item manager.\n     *\n     */\n    add(manager) {\n        this._managers.push(manager);\n        this._added.emit(manager);\n        return new DisposableDelegate(() => {\n            const i = this._managers.indexOf(manager);\n            if (i > -1) {\n                this._managers.splice(i, 1);\n            }\n        });\n    }\n    /**\n     * Return an iterator of launcher items.\n     */\n    items() {\n        return this._managers;\n    }\n}\nfunction Item(props) {\n    var _a, _b;\n    const { runningItem } = props;\n    const [collapsed, setCollapsed] = React.useState(false);\n    // Use a ref instead of a state because the state does not have the time\n    // to update in the callbacks\n    const shuttingDown = useRef(false);\n    const classList = [ITEM_CLASS];\n    const detail = (_a = runningItem.detail) === null || _a === void 0 ? void 0 : _a.call(runningItem);\n    const icon = runningItem.icon();\n    const title = runningItem.labelTitle ? runningItem.labelTitle() : '';\n    const translator = props.translator || nullTranslator;\n    const trans = translator.load('jupyterlab');\n    // Handle shutdown requests.\n    const shutdownItemIcon = props.shutdownItemIcon || closeIcon;\n    const shutdownLabel = (_b = (typeof props.shutdownLabel === 'function'\n        ? props.shutdownLabel(runningItem)\n        : props.shutdownLabel)) !== null && _b !== void 0 ? _b : trans.__('Shut Down');\n    const shutdown = useCallback((event) => {\n        var _a;\n        shuttingDown.current = true;\n        event.preventDefault();\n        (_a = runningItem.shutdown) === null || _a === void 0 ? void 0 : _a.call(runningItem);\n    }, [runningItem, shuttingDown]);\n    // Materialise getter to avoid triggering it repeatedly\n    const children = runningItem.children;\n    // Manage collapsed state. Use the shutdown flag in lieu of `stopPropagation`.\n    const collapsible = !!(children === null || children === void 0 ? void 0 : children.length);\n    const onClick = useCallback((event) => {\n        if (shuttingDown.current) {\n            return;\n        }\n        const item = getTreeItemElement(event.target);\n        if (event.currentTarget !== item) {\n            return;\n        }\n        if (collapsible) {\n            setCollapsed(!collapsed);\n        }\n    }, [collapsible, collapsed, shuttingDown]);\n    // Listen to signal to collapse from outside\n    props.collapseToggled.connect((_emitter, newCollapseState) => setCollapsed(newCollapseState));\n    if (runningItem.className) {\n        classList.push(runningItem.className);\n    }\n    return (React.createElement(React.Fragment, null,\n        React.createElement(TreeItem, { className: `${classList.join(' ')} jp-TreeItem nested`, onClick: onClick, \"data-context\": runningItem.context || '', expanded: !collapsed },\n            icon ? (typeof icon === 'string' ? (React.createElement(\"img\", { src: icon, className: ITEM_ICON_CLASS, slot: \"start\" })) : (React.createElement(icon.react, { slot: \"start\", tag: \"span\", className: ITEM_ICON_CLASS }))) : undefined,\n            React.createElement(\"span\", { className: ITEM_LABEL_CLASS, title: title, onClick: runningItem.open && (() => runningItem.open()) }, runningItem.label()),\n            detail && React.createElement(\"span\", { className: ITEM_DETAIL_CLASS }, detail),\n            runningItem.shutdown && (React.createElement(Button, { appearance: \"stealth\", className: SHUTDOWN_BUTTON_CLASS, onClick: shutdown, title: shutdownLabel, slot: \"end\" },\n                React.createElement(shutdownItemIcon.react, { tag: null }))),\n            children && (React.createElement(List, { runningItems: children, shutdownItemIcon: shutdownItemIcon, translator: translator, collapseToggled: props.collapseToggled })))));\n}\nfunction List(props) {\n    const filter = props.filter;\n    const items = filter\n        ? props.runningItems\n            .map(item => {\n            return {\n                item,\n                score: filter(item)\n            };\n        })\n            .filter(({ score }) => score !== null)\n            .sort((a, b) => {\n            return a.score.score - b.score.score;\n        })\n            .map(({ item }) => item)\n        : props.runningItems;\n    return (React.createElement(React.Fragment, null, items.map((item, i) => (React.createElement(Item, { child: props.child, key: i, runningItem: item, shutdownLabel: props.shutdownLabel, shutdownItemIcon: props.shutdownItemIcon, translator: props.translator, collapseToggled: props.collapseToggled })))));\n}\nclass FilterWidget extends ReactWidget {\n    constructor(translator) {\n        super();\n        this._filterFn = (_) => {\n            return { score: 0 };\n        };\n        this._filterChanged = new Signal(this);\n        this.filter = this.filter.bind(this);\n        this._updateFilter = this._updateFilter.bind(this);\n        this._trans = translator.load('jupyterlab');\n        this.addClass('jp-SearchableSessions-filter');\n    }\n    get filterChanged() {\n        return this._filterChanged;\n    }\n    render() {\n        return (React.createElement(FilterBox, { placeholder: this._trans.__('Search'), updateFilter: this._updateFilter, useFuzzyFilter: false, caseSensitive: false }));\n    }\n    filter(item) {\n        var _a;\n        const labels = [this._getTextContent(item.label())];\n        for (const child of (_a = item.children) !== null && _a !== void 0 ? _a : []) {\n            labels.push(this._getTextContent(child.label()));\n        }\n        return this._filterFn(labels.join(' '));\n    }\n    _getTextContent(node) {\n        if (typeof node === 'string') {\n            return node;\n        }\n        if (typeof node === 'number') {\n            return '' + node;\n        }\n        if (typeof node === 'boolean') {\n            return '' + node;\n        }\n        if (Array.isArray(node)) {\n            return node.map(n => this._getTextContent(n)).join(' ');\n        }\n        if (node && isValidElement(node)) {\n            return node.props.children\n                .map((n) => this._getTextContent(n))\n                .join(' ');\n        }\n        return '';\n    }\n    _updateFilter(filterFn) {\n        this._filterFn = filterFn;\n        this._filterChanged.emit();\n    }\n}\nclass ListWidget extends ReactWidget {\n    constructor(_options) {\n        super();\n        this._options = _options;\n        this._update = new Signal(this);\n        _options.manager.runningChanged.connect(this._emitUpdate, this);\n        if (_options.filterProvider) {\n            _options.filterProvider.filterChanged.connect(this._emitUpdate, this);\n        }\n    }\n    /**\n     * Whether the items are displayed as a tree view\n     * or a flat list.\n     */\n    get mode() {\n        return this._mode;\n    }\n    set mode(v) {\n        if (this._mode !== v) {\n            this._mode = v;\n            this._update.emit();\n        }\n    }\n    dispose() {\n        Signal.clearData(this);\n        super.dispose();\n    }\n    onBeforeShow(msg) {\n        super.onBeforeShow(msg);\n        this._update.emit();\n    }\n    render() {\n        const options = this._options;\n        let cached = true;\n        return (React.createElement(UseSignal, { signal: this._update }, () => {\n            var _a;\n            // Cache the running items for the initial load and request from\n            // the service every subsequent load.\n            if (cached) {\n                cached = false;\n            }\n            else {\n                options.runningItems = options.manager.running({ mode: this.mode });\n            }\n            const classes = ['jp-TreeView'];\n            if (this.mode === 'list') {\n                classes.push('jp-mod-flat');\n            }\n            return (React.createElement(\"div\", { className: CONTAINER_CLASS },\n                React.createElement(TreeView, { className: classes.join(' ') },\n                    React.createElement(List, { runningItems: options.runningItems, shutdownLabel: options.manager.shutdownLabel, shutdownItemIcon: options.manager.shutdownItemIcon, filter: (_a = options.filterProvider) === null || _a === void 0 ? void 0 : _a.filter, translator: options.translator, collapseToggled: options.collapseToggled }))));\n        }));\n    }\n    _emitUpdate() {\n        if (!this.isVisible) {\n            return;\n        }\n        this._update.emit();\n    }\n}\n/**\n * The Section component contains the shared look and feel for an interactive\n * list of kernels and sessions.\n *\n * It is specialized for each based on its props.\n */\nclass Section extends PanelWithToolbar {\n    constructor(options) {\n        var _a;\n        super();\n        this._buttons = null;\n        this._listView = false;\n        this._collapseToggled = new Signal(this);\n        this._viewChanged = new Signal(this);\n        this._listView = ((_a = options.viewMode) !== null && _a !== void 0 ? _a : 'tree') === 'list';\n        this._manager = options.manager;\n        this._filterProvider = options.filterProvider;\n        const translator = options.translator || nullTranslator;\n        this._trans = translator.load('jupyterlab');\n        this.addClass(SECTION_CLASS);\n        this.title.label = options.manager.name;\n        this._manager.runningChanged.connect(this._onListChanged, this);\n        if (options.filterProvider) {\n            options.filterProvider.filterChanged.connect(this._onListChanged, this);\n        }\n        this._updateEmptyClass();\n        const runningItems = options.manager.running({\n            mode: options.manager.supportsMultipleViews && !this._listView\n                ? 'tree'\n                : 'list'\n        });\n        if (options.showToolbar !== false) {\n            this._initializeToolbar(runningItems);\n        }\n        this._listWidget = new ListWidget({\n            runningItems,\n            collapseToggled: this._collapseToggled,\n            ...options\n        });\n        this._listWidget.mode =\n            options.manager.supportsMultipleViews && !this._listView\n                ? 'tree'\n                : 'list';\n        this.addWidget(this._listWidget);\n    }\n    /**\n     * Toggle between list and tree view.\n     */\n    toggleListView(forceOn) {\n        const newState = typeof forceOn !== 'undefined' ? forceOn : !this._listView;\n        this._listView = newState;\n        if (this._buttons) {\n            const switchViewButton = this._buttons['switch-view'];\n            switchViewButton.pressed = newState;\n        }\n        this._collapseToggled.emit(false);\n        if (this._manager.supportsMultipleViews === undefined) {\n            this.toggleClass(LIST_VIEW_CLASS, newState);\n        }\n        this._updateButtons();\n        this._listWidget.mode =\n            this._manager.supportsMultipleViews && !this._listView ? 'tree' : 'list';\n        this._viewChanged.emit({ mode: newState ? 'list' : 'tree' });\n    }\n    /**\n     * Dispose the resources held by the widget\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        Signal.clearData(this);\n        super.dispose();\n    }\n    get _shutdownAllLabel() {\n        return this._manager.shutdownAllLabel || this._trans.__('Shut Down All');\n    }\n    _initializeToolbar(runningItems) {\n        const enabled = runningItems.length > 0;\n        const shutdownAllLabel = this._shutdownAllLabel;\n        const shutdownTitle = `${shutdownAllLabel}?`;\n        const onShutdown = () => {\n            var _a;\n            const shutdownAllConfirmationText = (_a = (typeof this._manager.shutdownAllConfirmationText === 'function'\n                ? this._manager.shutdownAllConfirmationText()\n                : this._manager.shutdownAllConfirmationText)) !== null && _a !== void 0 ? _a : `${shutdownAllLabel} ${this._manager.name}`;\n            void showDialog({\n                title: shutdownTitle,\n                body: shutdownAllConfirmationText,\n                buttons: [\n                    Dialog.cancelButton(),\n                    Dialog.warnButton({ label: shutdownAllLabel })\n                ]\n            }).then(result => {\n                if (result.button.accept) {\n                    this._manager.shutdownAll();\n                }\n            });\n        };\n        const shutdownAllButton = new ToolbarButton({\n            label: shutdownAllLabel,\n            className: `${SHUTDOWN_ALL_BUTTON_CLASS}${!enabled ? ' jp-mod-disabled' : ''}`,\n            enabled,\n            onClick: onShutdown.bind(this)\n        });\n        const switchViewButton = new ToolbarButton({\n            className: VIEW_BUTTON_CLASS,\n            enabled,\n            icon: tableRowsIcon,\n            pressedIcon: treeViewIcon,\n            onClick: () => this.toggleListView(),\n            tooltip: this._trans.__('Switch to List View'),\n            pressedTooltip: this._trans.__('Switch to Tree View')\n        });\n        const collapseExpandAllButton = new ToolbarButton({\n            className: COLLAPSE_EXPAND_BUTTON_CLASS,\n            enabled,\n            icon: collapseAllIcon,\n            pressedIcon: expandAllIcon,\n            onClick: () => {\n                const newState = !collapseExpandAllButton.pressed;\n                this._collapseToggled.emit(newState);\n                collapseExpandAllButton.pressed = newState;\n            },\n            tooltip: this._trans.__('Collapse All'),\n            pressedTooltip: this._trans.__('Expand All')\n        });\n        this._buttons = {\n            'switch-view': switchViewButton,\n            'collapse-expand': collapseExpandAllButton,\n            'shutdown-all': shutdownAllButton\n        };\n        // Update buttons once defined and before adding to DOM\n        this._updateButtons();\n        this._manager.runningChanged.connect(this._updateButtons, this);\n        // Add manager-specific buttons\n        if (this._manager.toolbarButtons) {\n            this._manager.toolbarButtons.forEach(button => this.toolbar.addItem(button instanceof CommandToolbarButton ? button.commandId : button.id, button));\n        }\n        for (const name of ['collapse-expand', 'switch-view', 'shutdown-all']) {\n            this.toolbar.addItem(name, this._buttons[name]);\n        }\n        this.toolbar.addClass('jp-RunningSessions-toolbar');\n        this._toolbar.node.setAttribute('aria-label', this._trans.__('%1 toolbar', this.title.label));\n    }\n    _onListChanged() {\n        this._updateButtons();\n        this._updateEmptyClass();\n    }\n    _updateEmptyClass() {\n        if (this._filterProvider) {\n            const items = this._manager\n                .running({\n                mode: this._manager.supportsMultipleViews && !this._listView\n                    ? 'tree'\n                    : 'list'\n            })\n                .filter(this._filterProvider.filter);\n            const empty = items.length === 0;\n            if (empty) {\n                this.node.classList.toggle('jp-mod-empty', true);\n            }\n            else {\n                this.node.classList.toggle('jp-mod-empty', false);\n            }\n        }\n    }\n    get viewChanged() {\n        return this._viewChanged;\n    }\n    _updateButtons() {\n        if (!this._buttons) {\n            return;\n        }\n        let runningItems = this._manager.running({\n            mode: this._manager.supportsMultipleViews && !this._listView ? 'tree' : 'list'\n        });\n        const enabled = runningItems.length > 0;\n        const hasNesting = \n        // If the flag is undefined fallback to the old behavior\n        // @deprecated we should remove the fallback in the next iteration\n        this._manager.supportsMultipleViews === undefined\n            ? runningItems.filter(item => item.children).length !== 0\n            : this._manager.supportsMultipleViews;\n        const inTreeView = hasNesting && !this._buttons['switch-view'].pressed;\n        this._buttons['switch-view'].node.style.display = hasNesting\n            ? 'flex'\n            : 'none';\n        this._buttons['collapse-expand'].node.style.display = inTreeView\n            ? 'flex'\n            : 'none';\n        this._buttons['collapse-expand'].enabled = enabled;\n        this._buttons['switch-view'].enabled = enabled;\n        this._buttons['shutdown-all'].enabled = enabled;\n    }\n}\n/**\n * A class that exposes the running terminal and kernel sessions.\n */\nexport class RunningSessions extends SidePanel {\n    /**\n     * Construct a new running widget.\n     */\n    constructor(managers, translator, stateDB) {\n        super();\n        this.managers = managers;\n        this._stateDB = stateDB !== null && stateDB !== void 0 ? stateDB : null;\n        this.translator = translator !== null && translator !== void 0 ? translator : nullTranslator;\n        const trans = this.translator.load('jupyterlab');\n        this.addClass(RUNNING_CLASS);\n        this.toolbar.addItem('refresh', new ToolbarButton({\n            tooltip: trans.__('Refresh List'),\n            icon: refreshIcon,\n            onClick: () => managers.items().forEach(manager => manager.refreshRunning())\n        }));\n        managers.items().forEach(manager => this.addSection(managers, manager));\n        managers.added.connect(this.addSection, this);\n    }\n    /**\n     * Dispose the resources held by the widget\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this.managers.added.disconnect(this.addSection, this);\n        super.dispose();\n    }\n    /**\n     * Add a section for a new manager.\n     *\n     * @param managers Managers\n     * @param manager New manager\n     */\n    async addSection(managers, manager) {\n        const section = new Section({ manager, translator: this.translator });\n        this.addWidget(section);\n        const state = await this._getState();\n        const sectionsInListView = state.listViewSections;\n        const sectionId = manager.name;\n        if (sectionsInListView && sectionsInListView.includes(sectionId)) {\n            section.toggleListView(true);\n        }\n        section.viewChanged.connect(async (_emitter, viewState) => {\n            await this._updateState(sectionId, viewState.mode);\n        });\n    }\n    /**\n     * Update state database with the new state of a given section.\n     */\n    async _updateState(sectionId, mode) {\n        var _a;\n        const state = await this._getState();\n        let listViewSections = (_a = state.listViewSections) !== null && _a !== void 0 ? _a : [];\n        if (mode === 'list' && !listViewSections.includes(sectionId)) {\n            listViewSections.push(sectionId);\n        }\n        else {\n            listViewSections = listViewSections.filter(e => e !== sectionId);\n        }\n        const newState = { listViewSections };\n        if (this._stateDB) {\n            await this._stateDB.save(STATE_DB_ID, newState);\n        }\n    }\n    /**\n     * Get current state from the state database.\n     */\n    async _getState() {\n        var _a;\n        if (!this._stateDB) {\n            return {};\n        }\n        return ((_a = (await this._stateDB.fetch(STATE_DB_ID))) !== null && _a !== void 0 ? _a : {});\n    }\n}\n/**\n * Section but rendering its own title before the content\n */\nclass TitledSection extends Section {\n    constructor(options) {\n        super(options);\n        const titleNode = document.createElement('h3');\n        titleNode.className = 'jp-SearchableSessions-title';\n        const label = titleNode.appendChild(document.createElement('span'));\n        label.className = 'jp-SearchableSessions-titleLabel';\n        label.textContent = this.title.label;\n        this.node.insertAdjacentElement('afterbegin', titleNode);\n    }\n}\nclass EmptyIndicator extends Widget {\n    constructor(translator) {\n        super();\n        const trans = translator.load('jupyterlab');\n        this.addClass('jp-SearchableSessions-emptyIndicator');\n        this.node.textContent = trans.__('No matches');\n    }\n}\n/**\n * A panel intended for use within `Dialog` to allow searching tabs and running sessions.\n */\nexport class SearchableSessions extends Panel {\n    constructor(managers, translator) {\n        super();\n        this._activeIndex = 0;\n        this._translator = translator !== null && translator !== void 0 ? translator : nullTranslator;\n        this.addClass(RUNNING_CLASS);\n        this.addClass(SEARCHABLE_CLASS);\n        this._filterWidget = new FilterWidget(this._translator);\n        this.addWidget(this._filterWidget);\n        this._list = new SearchableSessionsList(managers, this._filterWidget, translator);\n        this.addWidget(this._list);\n        this._filterWidget.filterChanged.connect(() => {\n            this._activeIndex = 0;\n            this._updateActive(0);\n        }, this);\n    }\n    /**\n     * Dispose the resources held by the widget\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        Signal.clearData(this);\n        super.dispose();\n    }\n    /**\n     * Click active element when the user confirmed the choice in the dialog.\n     */\n    getValue() {\n        const items = [\n            ...this.node.querySelectorAll('.' + ITEM_LABEL_CLASS)\n        ];\n        const pos = Math.min(Math.max(this._activeIndex, 0), items.length - 1);\n        items[pos].click();\n    }\n    /**\n     * Handle incoming events.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'keydown':\n                this._evtKeydown(event);\n                break;\n        }\n    }\n    /**\n     * A message handler invoked on an `'after-attach'` message.\n     */\n    onAfterAttach(_) {\n        this._forceFocusInput();\n        this.node.addEventListener('keydown', this);\n        setTimeout(() => {\n            this._updateActive(0);\n        }, 0);\n    }\n    /**\n     * A message handler invoked on an `'after-detach'` message.\n     */\n    onAfterDetach(_) {\n        this.node.removeEventListener('keydown', this);\n    }\n    /**\n     * Force focus on the filter input.\n     *\n     * Note: forces focus because this widget is intended to be used in `Dialog`,\n     * which does not support focusing React widget nested within a non-React\n     * widget (a limitation of `focusNodeSelector` option implementation).\n     */\n    _forceFocusInput() {\n        var _a;\n        (_a = this._filterWidget.renderPromise) === null || _a === void 0 ? void 0 : _a.then(() => {\n            var _a;\n            const jpSearch = this._filterWidget.node.querySelector('jp-search');\n            const input = (_a = jpSearch === null || jpSearch === void 0 ? void 0 : jpSearch.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('input');\n            if (!input) {\n                console.warn('Input element not found, cannot focus');\n                return;\n            }\n            input.focus();\n        }).catch(console.warn);\n    }\n    /**\n     * Navigate between items using up/down keys by shifting focus.\n     */\n    _evtKeydown(event) {\n        if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n            const direction = event.key === 'ArrowDown' ? +1 : -1;\n            const wasSet = this._updateActive(direction);\n            if (wasSet) {\n                event.preventDefault();\n            }\n        }\n    }\n    /**\n     * Set and mark active item relative to the current.\n     *\n     * Returns whether an active item was set.\n     */\n    _updateActive(direction) {\n        const items = [...this.node.querySelectorAll('.' + ITEM_CLASS)].filter(e => e.checkVisibility());\n        if (!items.length) {\n            return false;\n        }\n        for (const item of items) {\n            if (item.classList.contains('jp-mod-active')) {\n                item.classList.toggle('jp-mod-active', false);\n            }\n        }\n        const currentIndex = this._activeIndex;\n        let newIndex = null;\n        if (currentIndex === -1) {\n            // First or last\n            newIndex = direction === +1 ? 0 : items.length - 1;\n        }\n        else {\n            newIndex = Math.min(Math.max(currentIndex + direction, 0), items.length - 1);\n        }\n        if (newIndex !== null) {\n            items[newIndex].classList.add('jp-mod-active');\n            ElementExt.scrollIntoViewIfNeeded(this._list.node, items[newIndex]);\n            this._activeIndex = newIndex;\n            return true;\n        }\n        return false;\n    }\n}\n/**\n * A panel list of searchable sessions.\n */\nexport class SearchableSessionsList extends Panel {\n    constructor(managers, filterWidget, translator) {\n        super();\n        this._managers = managers;\n        this._translator = translator !== null && translator !== void 0 ? translator : nullTranslator;\n        this._filterWidget = filterWidget;\n        this.addClass('jp-SearchableSessions-list');\n        this._emptyIndicator = new EmptyIndicator(this._translator);\n        this.addWidget(this._emptyIndicator);\n        managers.items().forEach(manager => this.addSection(managers, manager));\n        managers.added.connect(this.addSection, this);\n    }\n    /**\n     * Dispose the resources held by the widget\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._managers.added.disconnect(this.addSection, this);\n        super.dispose();\n    }\n    /**\n     * Add a section for a new manager.\n     *\n     * @param managers Managers\n     * @param manager New manager\n     */\n    addSection(managers, manager) {\n        const section = new TitledSection({\n            manager,\n            translator: this._translator,\n            showToolbar: false,\n            filterProvider: this._filterWidget,\n            viewMode: 'list'\n        });\n        // Do not use tree view in searchable list\n        section.toggleListView(true);\n        this.addWidget(section);\n        // Move empty indicator to the end\n        this.addWidget(this._emptyIndicator);\n    }\n}\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\n\nimport './base.css';\n","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module services-extension\n */\nimport { ConfigSection, ConfigSectionManager, ConnectionStatus, ContentsManager, Drive, EventManager, IConfigSectionManager, IConnectionStatus, IContentsManager, IDefaultDrive, IEventManager, IKernelManager, IKernelSpecManager, INbConvertManager, IServerSettings, IServiceManager, ISessionManager, ISettingManager, ITerminalManager, IUserManager, IWorkspaceManager, KernelManager, KernelSpecManager, NbConvertManager, ServerConnection, ServiceManager, SessionManager, SettingManager, TerminalManager, UserManager, WorkspaceManager } from '@jupyterlab/services';\n/**\n * Config section manager plugin.\n */\nconst configSectionManager = {\n    id: '@jupyterlab/services-extension:config-section-manager',\n    autoStart: true,\n    provides: IConfigSectionManager,\n    optional: [IServerSettings],\n    description: 'Provides the config section manager.',\n    activate: (_, serverSettings) => {\n        const manager = new ConfigSectionManager({ serverSettings });\n        // Set the config section manager for the global ConfigSection.\n        ConfigSection._setConfigSectionManager(manager);\n        return manager;\n    }\n};\n/**\n * The default connection status provider.\n */\nconst connectionStatusPlugin = {\n    id: '@jupyterlab/services-extension:connection-status',\n    autoStart: true,\n    provides: IConnectionStatus,\n    description: 'Provides the default connection status.',\n    activate: () => {\n        return new ConnectionStatus();\n    }\n};\n/**\n * The default contents manager plugin.\n */\nconst contentsManagerPlugin = {\n    id: '@jupyterlab/services-extension:contents-manager',\n    description: 'The default contents manager plugin.',\n    autoStart: true,\n    provides: IContentsManager,\n    requires: [IDefaultDrive, IServerSettings],\n    activate: (_, defaultDrive, serverSettings) => {\n        return new ContentsManager({\n            defaultDrive,\n            serverSettings\n        });\n    }\n};\n/**\n * The default drive plugin.\n */\nconst defaultDrivePlugin = {\n    id: '@jupyterlab/services-extension:default-drive',\n    description: 'The default drive for the contents manager.',\n    autoStart: true,\n    provides: IDefaultDrive,\n    optional: [IServerSettings],\n    activate: (_, serverSettings) => {\n        return new Drive({ serverSettings: serverSettings !== null && serverSettings !== void 0 ? serverSettings : undefined });\n    }\n};\n/**\n * The event manager plugin.\n */\nconst eventManagerPlugin = {\n    id: '@jupyterlab/services-extension:event-manager',\n    description: 'The event manager plugin.',\n    autoStart: true,\n    provides: IEventManager,\n    optional: [IServerSettings],\n    activate: (_, serverSettings) => {\n        return new EventManager({ serverSettings });\n    }\n};\n/**\n * The kernel manager plugin.\n */\nconst kernelManagerPlugin = {\n    id: '@jupyterlab/services-extension:kernel-manager',\n    description: 'The kernel manager plugin.',\n    autoStart: true,\n    provides: IKernelManager,\n    optional: [IServerSettings],\n    activate: (_, serverSettings) => {\n        return new KernelManager({ serverSettings });\n    }\n};\n/**\n * The kernel spec manager plugin.\n */\nconst kernelSpecManagerPlugin = {\n    id: '@jupyterlab/services-extension:kernel-spec-manager',\n    description: 'The kernel spec manager plugin.',\n    autoStart: true,\n    provides: IKernelSpecManager,\n    optional: [IServerSettings],\n    activate: (_, serverSettings) => {\n        return new KernelSpecManager({ serverSettings });\n    }\n};\n/**\n * The nbconvert manager plugin.\n */\nconst nbConvertManagerPlugin = {\n    id: '@jupyterlab/services-extension:nbconvert-manager',\n    description: 'The nbconvert manager plugin.',\n    autoStart: true,\n    provides: INbConvertManager,\n    optional: [IServerSettings],\n    activate: (_, serverSettings) => {\n        return new NbConvertManager({ serverSettings });\n    }\n};\n/**\n * The session manager plugin.\n */\nconst sessionManagerPlugin = {\n    id: '@jupyterlab/services-extension:session-manager',\n    description: 'The session manager plugin.',\n    autoStart: true,\n    provides: ISessionManager,\n    requires: [IKernelManager],\n    optional: [IServerSettings],\n    activate: (_, kernelManager, serverSettings) => {\n        return new SessionManager({ kernelManager, serverSettings });\n    }\n};\n/**\n * The setting manager plugin.\n */\nconst settingManagerPlugin = {\n    id: '@jupyterlab/services-extension:setting-manager',\n    description: 'The setting manager plugin.',\n    autoStart: true,\n    provides: ISettingManager,\n    optional: [IServerSettings],\n    activate: (_, serverSettings) => {\n        return new SettingManager({ serverSettings });\n    }\n};\n/**\n * The terminal manager plugin.\n */\nconst terminalManagerPlugin = {\n    id: '@jupyterlab/services-extension:terminal-manager',\n    description: 'The terminal manager plugin.',\n    autoStart: true,\n    provides: ITerminalManager,\n    optional: [IServerSettings],\n    activate: (_, serverSettings) => {\n        return new TerminalManager({ serverSettings });\n    }\n};\n/**\n * The user manager plugin.\n */\nconst userManagerPlugin = {\n    id: '@jupyterlab/services-extension:user-manager',\n    description: 'The user manager plugin.',\n    autoStart: true,\n    provides: IUserManager,\n    optional: [IServerSettings],\n    activate: (_, serverSettings) => {\n        return new UserManager({ serverSettings });\n    }\n};\n/**\n * The workspace manager plugin.\n */\nconst workspaceManagerPlugin = {\n    id: '@jupyterlab/services-extension:workspace-manager',\n    description: 'The workspace manager plugin.',\n    autoStart: true,\n    provides: IWorkspaceManager,\n    optional: [IServerSettings],\n    activate: (_, serverSettings) => {\n        return new WorkspaceManager({ serverSettings });\n    }\n};\n/**\n * The default server settings plugin.\n */\nconst serverSettingsPlugin = {\n    id: '@jupyterlab/services-extension:server-settings',\n    description: 'The default server settings plugin.',\n    autoStart: true,\n    provides: IServerSettings,\n    activate: (_) => {\n        return ServerConnection.makeSettings();\n    }\n};\n/**\n * Instantiate a new service manager.\n */\nconst serviceManagerPlugin = {\n    id: '@jupyterlab/services-extension:service-manager',\n    description: 'The default service manager plugin.',\n    autoStart: true,\n    provides: IServiceManager,\n    // Builder is not exposed as a plugin since it is now deprecated.\n    optional: [\n        IConnectionStatus,\n        IContentsManager,\n        IDefaultDrive,\n        IServerSettings,\n        IEventManager,\n        IKernelManager,\n        IKernelSpecManager,\n        INbConvertManager,\n        ISessionManager,\n        ISettingManager,\n        ITerminalManager,\n        IUserManager,\n        IWorkspaceManager\n    ],\n    activate: (_, connectionStatus, contents, defaultDrive, serverSettings, events, kernels, kernelspecs, nbconvert, sessions, settings, terminals, user, workspaces) => {\n        return new ServiceManager({\n            standby: () => {\n                return !(connectionStatus === null || connectionStatus === void 0 ? void 0 : connectionStatus.isConnected) || 'when-hidden';\n            },\n            contents,\n            defaultDrive,\n            serverSettings,\n            events,\n            kernels,\n            kernelspecs,\n            nbconvert,\n            sessions,\n            settings,\n            terminals,\n            user,\n            workspaces\n        });\n    }\n};\nexport default [\n    configSectionManager,\n    connectionStatusPlugin,\n    contentsManagerPlugin,\n    defaultDrivePlugin,\n    eventManagerPlugin,\n    kernelManagerPlugin,\n    kernelSpecManagerPlugin,\n    nbConvertManagerPlugin,\n    sessionManagerPlugin,\n    settingManagerPlugin,\n    serverSettingsPlugin,\n    serviceManagerPlugin,\n    terminalManagerPlugin,\n    userManagerPlugin,\n    workspaceManagerPlugin\n];\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BaseManager = void 0;\nconst signaling_1 = require(\"@lumino/signaling\");\nconst serverconnection_1 = require(\"./serverconnection\");\nclass BaseManager {\n    constructor(options) {\n        var _a;\n        this._isDisposed = false;\n        this._disposed = new signaling_1.Signal(this);\n        this.serverSettings =\n            (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n    }\n    /**\n     * A signal emitted when the delegate is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * Test whether the delegate has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Whether the manager is active.\n     */\n    get isActive() {\n        return true;\n    }\n    /**\n     * Dispose of the delegate and invoke the callback function.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._disposed.emit(undefined);\n        signaling_1.Signal.clearData(this);\n    }\n}\nexports.BaseManager = BaseManager;\n//# sourceMappingURL=basemanager.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BuildManager = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst serverconnection_1 = require(\"../serverconnection\");\n/**\n * The url for the lab build service.\n */\nconst BUILD_SETTINGS_URL = 'api/build';\n/**\n * The build API service manager.\n */\nclass BuildManager {\n    /**\n     * Create a new setting manager.\n     */\n    constructor(options = {}) {\n        var _a;\n        this._url = '';\n        this.serverSettings =\n            (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n        const { baseUrl, appUrl } = this.serverSettings;\n        this._url = coreutils_1.URLExt.join(baseUrl, appUrl, BUILD_SETTINGS_URL);\n    }\n    /**\n     * Test whether the build service is available.\n     */\n    get isAvailable() {\n        return coreutils_1.PageConfig.getOption('buildAvailable').toLowerCase() === 'true';\n    }\n    /**\n     * Test whether to check build status automatically.\n     */\n    get shouldCheck() {\n        return coreutils_1.PageConfig.getOption('buildCheck').toLowerCase() === 'true';\n    }\n    /**\n     * Get whether the application should be built.\n     */\n    getStatus() {\n        const { _url, serverSettings } = this;\n        const promise = serverconnection_1.ServerConnection.makeRequest(_url, {}, serverSettings);\n        return promise\n            .then(response => {\n            if (response.status !== 200) {\n                throw new serverconnection_1.ServerConnection.ResponseError(response);\n            }\n            return response.json();\n        })\n            .then(data => {\n            if (typeof data.status !== 'string') {\n                throw new Error('Invalid data');\n            }\n            if (typeof data.message !== 'string') {\n                throw new Error('Invalid data');\n            }\n            return data;\n        });\n    }\n    /**\n     * Build the application.\n     */\n    build() {\n        const { _url, serverSettings } = this;\n        const init = { method: 'POST' };\n        const promise = serverconnection_1.ServerConnection.makeRequest(_url, init, serverSettings);\n        return promise.then(response => {\n            if (response.status === 400) {\n                throw new serverconnection_1.ServerConnection.ResponseError(response, 'Build aborted');\n            }\n            if (response.status !== 200) {\n                const message = `Build failed with ${response.status}.\n\n        If you are experiencing the build failure after installing an extension (or trying to include previously installed extension after updating JupyterLab) please check the extension repository for new installation instructions as many extensions migrated to the prebuilt extensions system which no longer requires rebuilding JupyterLab (but uses a different installation procedure, typically involving a package manager such as 'pip' or 'conda').\n\n        If you specifically intended to install a source extension, please run 'jupyter lab build' on the server for full output.`;\n                throw new serverconnection_1.ServerConnection.ResponseError(response, message);\n            }\n        });\n    }\n    /**\n     * Cancel an active build.\n     */\n    cancel() {\n        const { _url, serverSettings } = this;\n        const init = { method: 'DELETE' };\n        const promise = serverconnection_1.ServerConnection.makeRequest(_url, init, serverSettings);\n        return promise.then(response => {\n            if (response.status !== 204) {\n                throw new serverconnection_1.ServerConnection.ResponseError(response);\n            }\n        });\n    }\n}\nexports.BuildManager = BuildManager;\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ConfigWithDefaults = exports.ConfigSection = exports.ConfigSectionManager = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst __1 = require(\"..\");\n/**\n * The url for the config service.\n */\nconst SERVICE_CONFIG_URL = 'api/config';\n/**\n * A manager for config sections.\n */\nclass ConfigSectionManager {\n    /**\n     * Create a config section manager.\n     */\n    constructor(options) {\n        var _a;\n        this.serverSettings =\n            (_a = options.serverSettings) !== null && _a !== void 0 ? _a : __1.ServerConnection.makeSettings();\n    }\n    /**\n     * Create a config section.\n     */\n    async create(options) {\n        const section = new DefaultConfigSection({\n            ...options,\n            serverSettings: this.serverSettings\n        });\n        await section.load();\n        return section;\n    }\n}\nexports.ConfigSectionManager = ConfigSectionManager;\n/**\n * The namespace for ConfigSection statics.\n */\nvar ConfigSection;\n(function (ConfigSection) {\n    /**\n     * Create a config section.\n     *\n     * @returns A Promise that is fulfilled with the config section is loaded.\n     *\n     * @deprecated Creating a config section via the `ConfigSection.create()` global has been deprecated and may be removed in a future version.\n     * Instead, require the config section manager via the `IConfigSectionManager` token in a plugin.\n     */\n    async function create(options) {\n        if (!_configSectionManager) {\n            const section = new DefaultConfigSection(options);\n            await section.load();\n            return section;\n        }\n        const section = await _configSectionManager.create(options);\n        return section;\n    }\n    ConfigSection.create = create;\n    let _configSectionManager;\n    /**\n     * Internal function to set the config section manager.\n     *\n     * @deprecated This function is an internal helper kept for backward compatiblity.\n     * It is not part of the public API and may be removed in a future version.\n     */\n    function _setConfigSectionManager(manager) {\n        if (_configSectionManager) {\n            throw new Error('ConfigSectionManager already set. If you would like to create a config section, use the `IConfigSectionManager` token in a plugin.');\n        }\n        _configSectionManager = manager;\n    }\n    ConfigSection._setConfigSectionManager = _setConfigSectionManager;\n})(ConfigSection || (exports.ConfigSection = ConfigSection = {}));\n/**\n * Implementation of the Configurable data section.\n */\nclass DefaultConfigSection {\n    /**\n     * Construct a new config section.\n     */\n    constructor(options) {\n        var _a;\n        this._url = 'unknown';\n        const settings = (this.serverSettings =\n            (_a = options.serverSettings) !== null && _a !== void 0 ? _a : __1.ServerConnection.makeSettings());\n        this._url = coreutils_1.URLExt.join(settings.baseUrl, SERVICE_CONFIG_URL, encodeURIComponent(options.name));\n    }\n    /**\n     * Get the data for this section.\n     */\n    get data() {\n        return this._data;\n    }\n    /**\n     * Load the initial data for this section.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/config).\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     */\n    async load() {\n        const response = await __1.ServerConnection.makeRequest(this._url, {}, this.serverSettings);\n        if (response.status !== 200) {\n            const err = await __1.ServerConnection.ResponseError.create(response);\n            throw err;\n        }\n        this._data = await response.json();\n    }\n    /**\n     * Modify the stored config values.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/config).\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     *\n     * Updates the local data immediately, sends the change to the server,\n     * and updates the local data with the response, and fulfils the promise\n     * with that data.\n     */\n    async update(newdata) {\n        this._data = { ...this._data, ...newdata };\n        const init = {\n            method: 'PATCH',\n            body: JSON.stringify(newdata)\n        };\n        const response = await __1.ServerConnection.makeRequest(this._url, init, this.serverSettings);\n        if (response.status !== 200) {\n            const err = await __1.ServerConnection.ResponseError.create(response);\n            throw err;\n        }\n        this._data = await response.json();\n        return this._data;\n    }\n}\n/**\n * Configurable object with defaults.\n */\nclass ConfigWithDefaults {\n    /**\n     * Create a new config with defaults.\n     */\n    constructor(options) {\n        var _a, _b;\n        this._className = '';\n        this._section = options.section;\n        this._defaults = (_a = options.defaults) !== null && _a !== void 0 ? _a : {};\n        this._className = (_b = options.className) !== null && _b !== void 0 ? _b : '';\n    }\n    /**\n     * Get data from the config section or fall back to defaults.\n     */\n    get(key) {\n        const data = this._classData();\n        return key in data ? data[key] : this._defaults[key];\n    }\n    /**\n     * Set a config value.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/config).\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     *\n     * Sends the update to the server, and changes our local copy of the data\n     * immediately.\n     */\n    set(key, value) {\n        const d = {};\n        d[key] = value;\n        if (this._className) {\n            const d2 = {};\n            d2[this._className] = d;\n            return this._section.update(d2);\n        }\n        else {\n            return this._section.update(d);\n        }\n    }\n    /**\n     * Get data from the Section with our classname, if available.\n     *\n     * #### Notes\n     * If we have no classname, get all of the data in the Section\n     */\n    _classData() {\n        const data = this._section.data;\n        if (this._className && this._className in data) {\n            return data[this._className];\n        }\n        return data;\n    }\n}\nexports.ConfigWithDefaults = ConfigWithDefaults;\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ConnectionStatus = void 0;\n/**\n * Application connection status\n */\nclass ConnectionStatus {\n    constructor() {\n        /**\n         * Whether the application is connected to the server or not.\n         *\n         * #### Notes\n         *\n         * Every periodic network polling should be paused while this is set\n         * to `false`. Extensions should use this value to decide whether to proceed\n         * with the polling.\n         * The extensions may also set this value to `false` if there is no need to\n         * fetch anything from the server backend basing on some conditions\n         * (e.g. when an error message dialog is displayed).\n         * At the same time, the extensions are responsible for setting this value\n         * back to `true`.\n         */\n        this.isConnected = true;\n    }\n}\nexports.ConnectionStatus = ConnectionStatus;\n//# sourceMappingURL=connectionstatus.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RestContentProvider = exports.Drive = exports.ContentsManager = exports.Contents = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst disposable_1 = require(\"@lumino/disposable\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst __1 = require(\"..\");\nconst validate = __importStar(require(\"./validate\"));\n/**\n * The url for the default drive service.\n */\nconst SERVICE_DRIVE_URL = 'api/contents';\n/**\n * The url for the file access.\n */\nconst FILES_URL = 'files';\n/**\n * A namespace for contents interfaces.\n */\nvar Contents;\n(function (Contents) {\n    /**\n     * Validates an IModel, throwing an error if it does not pass.\n     */\n    function validateContentsModel(contents) {\n        validate.validateContentsModel(contents);\n    }\n    Contents.validateContentsModel = validateContentsModel;\n    /**\n     * Validates an ICheckpointModel, throwing an error if it does not pass.\n     */\n    function validateCheckpointModel(checkpoint) {\n        validate.validateCheckpointModel(checkpoint);\n    }\n    Contents.validateCheckpointModel = validateCheckpointModel;\n})(Contents || (exports.Contents = Contents = {}));\n/**\n * A contents manager that passes file operations to the server.\n * Multiple servers implementing the `IDrive` interface can be\n * attached to the contents manager, so that the same session can\n * perform file operations on multiple backends.\n *\n * This includes checkpointing with the normal file operations.\n */\nclass ContentsManager {\n    /**\n     * Construct a new contents manager object.\n     *\n     * @param options - The options used to initialize the object.\n     */\n    constructor(options = {}) {\n        var _a, _b;\n        this._isDisposed = false;\n        this._additionalDrives = new Map();\n        this._fileChanged = new signaling_1.Signal(this);\n        const serverSettings = (this.serverSettings =\n            (_a = options.serverSettings) !== null && _a !== void 0 ? _a : __1.ServerConnection.makeSettings());\n        this._defaultDrive = (_b = options.defaultDrive) !== null && _b !== void 0 ? _b : new Drive({ serverSettings });\n        this._defaultDrive.fileChanged.connect(this._onFileChanged, this);\n    }\n    /**\n     * The default drive associated with the manager.\n     */\n    get defaultDrive() {\n        return this._defaultDrive;\n    }\n    /**\n     * A signal emitted when a file operation takes place.\n     */\n    get fileChanged() {\n        return this._fileChanged;\n    }\n    /**\n     * Test whether the manager has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the manager.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        signaling_1.Signal.clearData(this);\n    }\n    /**\n     * Add an `IDrive` to the manager.\n     */\n    addDrive(drive) {\n        this._additionalDrives.set(drive.name, drive);\n        drive.fileChanged.connect(this._onFileChanged, this);\n    }\n    /**\n     * Given a path, get a shared model factory from the relevant backend.\n     * The factory defined on content provider best matching the given path\n     * takes precedence over the factory defined on the drive as a whole.\n     * Returns `null` if the backend does not provide one.\n     */\n    getSharedModelFactory(path, options) {\n        var _a, _b;\n        const [drive] = this._driveForPath(path);\n        const provider = (_a = drive.contentProviderRegistry) === null || _a === void 0 ? void 0 : _a.getProvider(options === null || options === void 0 ? void 0 : options.contentProviderId);\n        if (provider === null || provider === void 0 ? void 0 : provider.sharedModelFactory) {\n            return provider.sharedModelFactory;\n        }\n        return (_b = drive.sharedModelFactory) !== null && _b !== void 0 ? _b : null;\n    }\n    /**\n     * Given a path of the form `drive:local/portion/of/it.txt`\n     * get the local part of it.\n     *\n     * @param path the path.\n     *\n     * @returns The local part of the path.\n     */\n    localPath(path) {\n        const parts = path.split('/');\n        const firstParts = parts[0].split(':');\n        if (firstParts.length === 1 || !this._additionalDrives.has(firstParts[0])) {\n            return coreutils_1.PathExt.removeSlash(path);\n        }\n        return coreutils_1.PathExt.join(firstParts.slice(1).join(':'), ...parts.slice(1));\n    }\n    /**\n     * Normalize a global path. Reduces '..' and '.' parts, and removes\n     * leading slashes from the local part of the path, while retaining\n     * the drive name if it exists.\n     *\n     * @param path the path.\n     *\n     * @returns The normalized path.\n     */\n    normalize(path) {\n        const parts = path.split(':');\n        if (parts.length === 1) {\n            return coreutils_1.PathExt.normalize(path);\n        }\n        return `${parts[0]}:${coreutils_1.PathExt.normalize(parts.slice(1).join(':'))}`;\n    }\n    /**\n     * Resolve a global path, starting from the root path. Behaves like\n     * posix-path.resolve, with 3 differences:\n     *  - will never prepend cwd\n     *  - if root has a drive name, the result is prefixed with \"<drive>:\"\n     *  - before adding drive name, leading slashes are removed\n     *\n     * @param path the path.\n     *\n     * @returns The normalized path.\n     */\n    resolvePath(root, path) {\n        const driveName = this.driveName(root);\n        const localPath = this.localPath(root);\n        const resolved = coreutils_1.PathExt.resolve('/', localPath, path);\n        return driveName ? `${driveName}:${resolved}` : resolved;\n    }\n    /**\n     * Given a path of the form `drive:local/portion/of/it.txt`\n     * get the name of the drive. If the path is missing\n     * a drive portion, returns an empty string.\n     *\n     * @param path the path.\n     *\n     * @returns The drive name for the path, or the empty string.\n     */\n    driveName(path) {\n        const parts = path.split('/');\n        const firstParts = parts[0].split(':');\n        if (firstParts.length === 1) {\n            return '';\n        }\n        if (this._additionalDrives.has(firstParts[0])) {\n            return firstParts[0];\n        }\n        return '';\n    }\n    /**\n     * Get a file or directory.\n     *\n     * @param path The path to the file.\n     *\n     * @param options The options used to fetch the file.\n     *\n     * @returns A promise which resolves with the file content.\n     */\n    get(path, options) {\n        const [drive, localPath] = this._driveForPath(path);\n        return drive.get(localPath, options).then(contentsModel => {\n            const listing = [];\n            if (contentsModel.type === 'directory' && contentsModel.content) {\n                for (const item of contentsModel.content) {\n                    listing.push({ ...item, path: this._toGlobalPath(drive, item.path) });\n                }\n                return {\n                    ...contentsModel,\n                    path: this._toGlobalPath(drive, localPath),\n                    content: listing,\n                    serverPath: contentsModel.path\n                };\n            }\n            else {\n                return {\n                    ...contentsModel,\n                    path: this._toGlobalPath(drive, localPath),\n                    serverPath: contentsModel.path\n                };\n            }\n        });\n    }\n    /**\n     * Get an encoded download url given a file path.\n     *\n     * @param path - An absolute POSIX file path on the server.\n     *\n     * #### Notes\n     * It is expected that the path contains no relative paths.\n     *\n     * The returned URL may include a query parameter.\n     */\n    getDownloadUrl(path) {\n        const [drive, localPath] = this._driveForPath(path);\n        return drive.getDownloadUrl(localPath);\n    }\n    /**\n     * Create a new untitled file or directory in the specified directory path.\n     *\n     * @param options The options used to create the file.\n     *\n     * @returns A promise which resolves with the created file content when the\n     *    file is created.\n     */\n    newUntitled(options = {}) {\n        if (options.path) {\n            const globalPath = this.normalize(options.path);\n            const [drive, localPath] = this._driveForPath(globalPath);\n            return drive\n                .newUntitled({ ...options, path: localPath })\n                .then(contentsModel => {\n                return {\n                    ...contentsModel,\n                    path: coreutils_1.PathExt.join(globalPath, contentsModel.name),\n                    serverPath: contentsModel.path\n                };\n            });\n        }\n        else {\n            return this._defaultDrive.newUntitled(options);\n        }\n    }\n    /**\n     * Delete a file.\n     *\n     * @param path - The path to the file.\n     *\n     * @returns A promise which resolves when the file is deleted.\n     */\n    delete(path) {\n        const [drive, localPath] = this._driveForPath(path);\n        return drive.delete(localPath);\n    }\n    /**\n     * Rename a file or directory.\n     *\n     * @param path - The original file path.\n     *\n     * @param newPath - The new file path.\n     *\n     * @returns A promise which resolves with the new file contents model when\n     *   the file is renamed.\n     */\n    rename(path, newPath) {\n        const [drive1, path1] = this._driveForPath(path);\n        const [drive2, path2] = this._driveForPath(newPath);\n        if (drive1 !== drive2) {\n            throw Error('ContentsManager: renaming files must occur within a Drive');\n        }\n        return drive1.rename(path1, path2).then(contentsModel => {\n            return {\n                ...contentsModel,\n                path: this._toGlobalPath(drive1, path2),\n                serverPath: contentsModel.path\n            };\n        });\n    }\n    /**\n     * Save a file.\n     *\n     * @param path - The desired file path.\n     *\n     * @param options - Optional overrides to the model.\n     *\n     * @returns A promise which resolves with the file content model when the\n     *   file is saved.\n     *\n     * #### Notes\n     * Ensure that `model.content` is populated for the file.\n     */\n    save(path, options = {}) {\n        const globalPath = this.normalize(path);\n        const [drive, localPath] = this._driveForPath(path);\n        return drive\n            .save(localPath, { ...options, path: localPath })\n            .then(contentsModel => {\n            return {\n                ...contentsModel,\n                path: globalPath,\n                serverPath: contentsModel.path\n            };\n        });\n    }\n    /**\n     * Copy a file into a given directory.\n     *\n     * @param path - The original file path.\n     *\n     * @param toDir - The destination directory path.\n     *\n     * @returns A promise which resolves with the new contents model when the\n     *  file is copied.\n     *\n     * #### Notes\n     * The server will select the name of the copied file.\n     */\n    copy(fromFile, toDir) {\n        const [drive1, path1] = this._driveForPath(fromFile);\n        const [drive2, path2] = this._driveForPath(toDir);\n        if (drive1 === drive2) {\n            return drive1.copy(path1, path2).then(contentsModel => {\n                return {\n                    ...contentsModel,\n                    path: this._toGlobalPath(drive1, contentsModel.path),\n                    serverPath: contentsModel.path\n                };\n            });\n        }\n        else {\n            throw Error('Copying files between drives is not currently implemented');\n        }\n    }\n    /**\n     * Create a checkpoint for a file.\n     *\n     * @param path - The path of the file.\n     *\n     * @returns A promise which resolves with the new checkpoint model when the\n     *   checkpoint is created.\n     */\n    createCheckpoint(path) {\n        const [drive, localPath] = this._driveForPath(path);\n        return drive.createCheckpoint(localPath);\n    }\n    /**\n     * List available checkpoints for a file.\n     *\n     * @param path - The path of the file.\n     *\n     * @returns A promise which resolves with a list of checkpoint models for\n     *    the file.\n     */\n    listCheckpoints(path) {\n        const [drive, localPath] = this._driveForPath(path);\n        return drive.listCheckpoints(localPath);\n    }\n    /**\n     * Restore a file to a known checkpoint state.\n     *\n     * @param path - The path of the file.\n     *\n     * @param checkpointID - The id of the checkpoint to restore.\n     *\n     * @returns A promise which resolves when the checkpoint is restored.\n     */\n    restoreCheckpoint(path, checkpointID) {\n        const [drive, localPath] = this._driveForPath(path);\n        return drive.restoreCheckpoint(localPath, checkpointID);\n    }\n    /**\n     * Delete a checkpoint for a file.\n     *\n     * @param path - The path of the file.\n     *\n     * @param checkpointID - The id of the checkpoint to delete.\n     *\n     * @returns A promise which resolves when the checkpoint is deleted.\n     */\n    deleteCheckpoint(path, checkpointID) {\n        const [drive, localPath] = this._driveForPath(path);\n        return drive.deleteCheckpoint(localPath, checkpointID);\n    }\n    /**\n     * Given a drive and a local path, construct a fully qualified\n     * path. The inverse of `_driveForPath`.\n     *\n     * @param drive an `IDrive`.\n     *\n     * @param localPath the local path on the drive.\n     *\n     * @returns the fully qualified path.\n     */\n    _toGlobalPath(drive, localPath) {\n        if (drive === this._defaultDrive) {\n            return coreutils_1.PathExt.removeSlash(localPath);\n        }\n        else {\n            return `${drive.name}:${coreutils_1.PathExt.removeSlash(localPath)}`;\n        }\n    }\n    /**\n     * Given a path, get the `IDrive to which it refers,\n     * where the path satisfies the pattern\n     * `'driveName:path/to/file'`. If there is no `driveName`\n     * prepended to the path, it returns the default drive.\n     *\n     * @param path a path to a file.\n     *\n     * @returns A tuple containing an `IDrive` object for the path,\n     * and a local path for that drive.\n     */\n    _driveForPath(path) {\n        const driveName = this.driveName(path);\n        const localPath = this.localPath(path);\n        if (driveName) {\n            return [this._additionalDrives.get(driveName), localPath];\n        }\n        else {\n            return [this._defaultDrive, localPath];\n        }\n    }\n    /**\n     * Respond to fileChanged signals from the drives attached to\n     * the manager. This prepends the drive name to the path if necessary,\n     * and then forwards the signal.\n     */\n    _onFileChanged(sender, args) {\n        var _a, _b;\n        if (sender === this._defaultDrive) {\n            this._fileChanged.emit(args);\n        }\n        else {\n            let newValue = null;\n            let oldValue = null;\n            if ((_a = args.newValue) === null || _a === void 0 ? void 0 : _a.path) {\n                newValue = {\n                    ...args.newValue,\n                    path: this._toGlobalPath(sender, args.newValue.path)\n                };\n            }\n            if ((_b = args.oldValue) === null || _b === void 0 ? void 0 : _b.path) {\n                oldValue = {\n                    ...args.oldValue,\n                    path: this._toGlobalPath(sender, args.oldValue.path)\n                };\n            }\n            this._fileChanged.emit({\n                type: args.type,\n                newValue,\n                oldValue\n            });\n        }\n    }\n}\nexports.ContentsManager = ContentsManager;\n/**\n * A default implementation for an `IDrive`, talking to the\n * server using the Jupyter REST API.\n */\nclass Drive {\n    /**\n     * Construct a new contents manager object.\n     *\n     * @param options - The options used to initialize the object.\n     */\n    constructor(options = {}) {\n        var _a, _b, _c;\n        this._isDisposed = false;\n        this._fileChanged = new signaling_1.Signal(this);\n        this.name = (_a = options.name) !== null && _a !== void 0 ? _a : 'Default';\n        this._apiEndpoint = (_b = options.apiEndpoint) !== null && _b !== void 0 ? _b : SERVICE_DRIVE_URL;\n        this.serverSettings =\n            (_c = options.serverSettings) !== null && _c !== void 0 ? _c : __1.ServerConnection.makeSettings();\n        const restContentProvider = new RestContentProvider({\n            apiEndpoint: this._apiEndpoint,\n            serverSettings: this.serverSettings\n        });\n        this.contentProviderRegistry = new ContentProviderRegistry({\n            defaultProvider: restContentProvider\n        });\n        this.contentProviderRegistry.fileChanged.connect((registry, change) => {\n            this._fileChanged.emit(change);\n        });\n    }\n    /**\n     * A signal emitted when a file operation takes place.\n     */\n    get fileChanged() {\n        return this._fileChanged;\n    }\n    /**\n     * Test whether the manager has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the manager.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        signaling_1.Signal.clearData(this);\n    }\n    /**\n     * Get a file or directory.\n     *\n     * @param localPath The path to the file.\n     *\n     * @param options The options used to fetch the file.\n     *\n     * @returns A promise which resolves with the file content.\n     *\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n     */\n    async get(localPath, options) {\n        const contentProvider = this.contentProviderRegistry.getProvider(options === null || options === void 0 ? void 0 : options.contentProviderId);\n        return contentProvider.get(localPath, options);\n    }\n    /**\n     * Get an encoded download url given a file path.\n     *\n     * @param localPath - An absolute POSIX file path on the server.\n     *\n     * #### Notes\n     * It is expected that the path contains no relative paths.\n     *\n     * The returned URL may include a query parameter.\n     */\n    getDownloadUrl(localPath) {\n        const baseUrl = this.serverSettings.baseUrl;\n        let url = coreutils_1.URLExt.join(baseUrl, FILES_URL, coreutils_1.URLExt.encodeParts(localPath));\n        let cookie = '';\n        try {\n            cookie = document.cookie;\n        }\n        catch (e) {\n            // e.g. SecurityError in case of CSP Sandbox\n        }\n        const xsrfTokenMatch = cookie.match('\\\\b_xsrf=([^;]*)\\\\b');\n        if (xsrfTokenMatch) {\n            const fullUrl = new URL(url);\n            fullUrl.searchParams.append('_xsrf', xsrfTokenMatch[1]);\n            url = fullUrl.toString();\n        }\n        return Promise.resolve(url);\n    }\n    /**\n     * Create a new untitled file or directory in the specified directory path.\n     *\n     * @param options The options used to create the file.\n     *\n     * @returns A promise which resolves with the created file content when the\n     *    file is created.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n     */\n    async newUntitled(options = {}) {\n        var _a;\n        let body = '{}';\n        if (options) {\n            if (options.ext) {\n                options.ext = Private.normalizeExtension(options.ext);\n            }\n            body = JSON.stringify(options);\n        }\n        const settings = this.serverSettings;\n        const url = this._getUrl((_a = options.path) !== null && _a !== void 0 ? _a : '');\n        const init = {\n            method: 'POST',\n            body\n        };\n        const response = await __1.ServerConnection.makeRequest(url, init, settings);\n        if (response.status !== 201) {\n            const err = await __1.ServerConnection.ResponseError.create(response);\n            throw err;\n        }\n        const data = await response.json();\n        validate.validateContentsModel(data);\n        this._fileChanged.emit({\n            type: 'new',\n            oldValue: null,\n            newValue: data\n        });\n        return data;\n    }\n    /**\n     * Delete a file.\n     *\n     * @param localPath - The path to the file.\n     *\n     * @returns A promise which resolves when the file is deleted.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents).\n     */\n    async delete(localPath) {\n        const url = this._getUrl(localPath);\n        const settings = this.serverSettings;\n        const init = { method: 'DELETE' };\n        const response = await __1.ServerConnection.makeRequest(url, init, settings);\n        // TODO: update IPEP27 to specify errors more precisely, so\n        // that error types can be detected here with certainty.\n        if (response.status !== 204) {\n            const err = await __1.ServerConnection.ResponseError.create(response);\n            throw err;\n        }\n        this._fileChanged.emit({\n            type: 'delete',\n            oldValue: { path: localPath },\n            newValue: null\n        });\n    }\n    /**\n     * Rename a file or directory.\n     *\n     * @param oldLocalPath - The original file path.\n     *\n     * @param newLocalPath - The new file path.\n     *\n     * @returns A promise which resolves with the new file contents model when\n     *   the file is renamed.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n     */\n    async rename(oldLocalPath, newLocalPath) {\n        const settings = this.serverSettings;\n        const url = this._getUrl(oldLocalPath);\n        const init = {\n            method: 'PATCH',\n            body: JSON.stringify({ path: newLocalPath })\n        };\n        const response = await __1.ServerConnection.makeRequest(url, init, settings);\n        if (response.status !== 200) {\n            const err = await __1.ServerConnection.ResponseError.create(response);\n            throw err;\n        }\n        const data = await response.json();\n        validate.validateContentsModel(data);\n        this._fileChanged.emit({\n            type: 'rename',\n            oldValue: { path: oldLocalPath },\n            newValue: data\n        });\n        return data;\n    }\n    /**\n     * Save a file.\n     *\n     * @param localPath - The desired file path.\n     *\n     * @param options - Optional overrides to the model.\n     *\n     * @returns A promise which resolves with the file content model when the\n     *   file is saved.\n     *\n     * #### Notes\n     * Ensure that `model.content` is populated for the file.\n     *\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n     */\n    async save(localPath, options = {}) {\n        const contentProvider = this.contentProviderRegistry.getProvider(options === null || options === void 0 ? void 0 : options.contentProviderId);\n        const data = await contentProvider.save(localPath, options);\n        this._fileChanged.emit({\n            type: 'save',\n            oldValue: null,\n            newValue: data\n        });\n        return data;\n    }\n    /**\n     * Copy a file into a given directory.\n     *\n     * @param localPath - The original file path.\n     *\n     * @param toDir - The destination directory path.\n     *\n     * @returns A promise which resolves with the new contents model when the\n     *  file is copied.\n     *\n     * #### Notes\n     * The server will select the name of the copied file.\n     *\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n     */\n    async copy(fromFile, toDir) {\n        const settings = this.serverSettings;\n        const url = this._getUrl(toDir);\n        const init = {\n            method: 'POST',\n            body: JSON.stringify({ copy_from: fromFile })\n        };\n        const response = await __1.ServerConnection.makeRequest(url, init, settings);\n        if (response.status !== 201) {\n            const err = await __1.ServerConnection.ResponseError.create(response);\n            throw err;\n        }\n        const data = await response.json();\n        validate.validateContentsModel(data);\n        this._fileChanged.emit({\n            type: 'new',\n            oldValue: null,\n            newValue: data\n        });\n        return data;\n    }\n    /**\n     * Create a checkpoint for a file.\n     *\n     * @param localPath - The path of the file.\n     *\n     * @returns A promise which resolves with the new checkpoint model when the\n     *   checkpoint is created.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n     */\n    async createCheckpoint(localPath) {\n        const url = this._getUrl(localPath, 'checkpoints');\n        const init = { method: 'POST' };\n        const response = await __1.ServerConnection.makeRequest(url, init, this.serverSettings);\n        if (response.status !== 201) {\n            const err = await __1.ServerConnection.ResponseError.create(response);\n            throw err;\n        }\n        const data = await response.json();\n        validate.validateCheckpointModel(data);\n        return data;\n    }\n    /**\n     * List available checkpoints for a file.\n     *\n     * @param localPath - The path of the file.\n     *\n     * @returns A promise which resolves with a list of checkpoint models for\n     *    the file.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n     */\n    async listCheckpoints(localPath) {\n        const url = this._getUrl(localPath, 'checkpoints');\n        const response = await __1.ServerConnection.makeRequest(url, {}, this.serverSettings);\n        if (response.status !== 200) {\n            const err = await __1.ServerConnection.ResponseError.create(response);\n            throw err;\n        }\n        const data = await response.json();\n        if (!Array.isArray(data)) {\n            throw new Error('Invalid Checkpoint list');\n        }\n        for (let i = 0; i < data.length; i++) {\n            validate.validateCheckpointModel(data[i]);\n        }\n        return data;\n    }\n    /**\n     * Restore a file to a known checkpoint state.\n     *\n     * @param localPath - The path of the file.\n     *\n     * @param checkpointID - The id of the checkpoint to restore.\n     *\n     * @returns A promise which resolves when the checkpoint is restored.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents).\n     */\n    async restoreCheckpoint(localPath, checkpointID) {\n        const url = this._getUrl(localPath, 'checkpoints', checkpointID);\n        const init = { method: 'POST' };\n        const response = await __1.ServerConnection.makeRequest(url, init, this.serverSettings);\n        if (response.status !== 204) {\n            const err = await __1.ServerConnection.ResponseError.create(response);\n            throw err;\n        }\n    }\n    /**\n     * Delete a checkpoint for a file.\n     *\n     * @param localPath - The path of the file.\n     *\n     * @param checkpointID - The id of the checkpoint to delete.\n     *\n     * @returns A promise which resolves when the checkpoint is deleted.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents).\n     */\n    async deleteCheckpoint(localPath, checkpointID) {\n        const url = this._getUrl(localPath, 'checkpoints', checkpointID);\n        const init = { method: 'DELETE' };\n        const response = await __1.ServerConnection.makeRequest(url, init, this.serverSettings);\n        if (response.status !== 204) {\n            const err = await __1.ServerConnection.ResponseError.create(response);\n            throw err;\n        }\n    }\n    /**\n     * Get a REST url for a file given a path.\n     */\n    _getUrl(...args) {\n        const parts = args.map(path => coreutils_1.URLExt.encodeParts(path));\n        const baseUrl = this.serverSettings.baseUrl;\n        return coreutils_1.URLExt.join(baseUrl, this._apiEndpoint, ...parts);\n    }\n}\nexports.Drive = Drive;\n/**\n * A namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Normalize a file extension to be of the type `'.foo'`.\n     *\n     * Adds a leading dot if not present and converts to lower case.\n     */\n    function normalizeExtension(extension) {\n        if (extension.length > 0 && extension.indexOf('.') !== 0) {\n            extension = `.${extension}`;\n        }\n        return extension;\n    }\n    Private.normalizeExtension = normalizeExtension;\n})(Private || (Private = {}));\n/**\n * The default registry of content providers.\n */\nclass ContentProviderRegistry {\n    /**\n     * Construct a new content provider registry.\n     *\n     * @param options - The options used to initialize the registry.\n     */\n    constructor(options) {\n        this._providers = new Map();\n        this._fileChanged = new signaling_1.Signal(this);\n        this.register('default', options.defaultProvider);\n        this._defaultProvider = options.defaultProvider;\n    }\n    /**\n     * Add a content provider to the registry.\n     *\n     * @param identifier - The identifier of the provider; it can be reused between drives.\n     * @param provider - The content provider to register.\n     */\n    register(identifier, provider) {\n        if (this._providers.has(identifier)) {\n            throw Error(`Provider with ${identifier} identifier was already registered on this drive`);\n        }\n        this._providers.set(identifier, provider);\n        const fileChangedProxy = (_provider, change) => {\n            this._fileChanged.emit(change);\n        };\n        if (provider.fileChanged) {\n            provider.fileChanged.connect(fileChangedProxy);\n        }\n        return new disposable_1.DisposableDelegate(() => {\n            if (provider.fileChanged) {\n                provider.fileChanged.disconnect(fileChangedProxy);\n            }\n            if (this._providers.has(identifier)) {\n                this._providers.delete(identifier);\n            }\n        });\n    }\n    /**\n     * Get a content provider matching provided identifier.\n     *\n     * If no identifier is provided, return the default provider.\n     * Throws an error if a provider with given identifier is not found.\n     *\n     * @param identifier - identifier of the content provider.\n     */\n    getProvider(identifier) {\n        if (!identifier) {\n            return this._defaultProvider;\n        }\n        const provider = this._providers.get(identifier);\n        if (!provider) {\n            throw Error(`Provider ${identifier} is not registered`);\n        }\n        return provider;\n    }\n    /**\n     * A proxy of the file changed signal for all the providers.\n     */\n    get fileChanged() {\n        return this._fileChanged;\n    }\n}\n/**\n * A content provider using the Jupyter REST API.\n */\nclass RestContentProvider {\n    constructor(options) {\n        this._options = options;\n    }\n    /**\n     * Get a file or directory.\n     *\n     * @param localPath The path to the file.\n     *\n     * @param options The options used to fetch the file.\n     *\n     * @returns A promise which resolves with the file content.\n     *\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n     */\n    async get(localPath, options) {\n        let url = this._getUrl(localPath);\n        if (options) {\n            // The notebook type cannot take a format option.\n            if (options.type === 'notebook') {\n                delete options['format'];\n            }\n            const content = options.content ? '1' : '0';\n            const hash = options.hash ? '1' : '0';\n            const params = { ...options, content, hash };\n            url += coreutils_1.URLExt.objectToQueryString(params);\n        }\n        const settings = this._options.serverSettings;\n        const response = await __1.ServerConnection.makeRequest(url, {}, settings);\n        if (response.status !== 200) {\n            const err = await __1.ServerConnection.ResponseError.create(response);\n            throw err;\n        }\n        const data = await response.json();\n        validate.validateContentsModel(data);\n        return data;\n    }\n    /**\n     * Save a file.\n     *\n     * @param localPath - The desired file path.\n     *\n     * @param options - Optional overrides to the model.\n     *\n     * @returns A promise which resolves with the file content model when the\n     *   file is saved.\n     *\n     * #### Notes\n     * Ensure that `model.content` is populated for the file.\n     *\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/contents) and validates the response model.\n     */\n    async save(localPath, options = {}) {\n        const settings = this._options.serverSettings;\n        const url = this._getUrl(localPath);\n        const init = {\n            method: 'PUT',\n            body: JSON.stringify(options)\n        };\n        const response = await __1.ServerConnection.makeRequest(url, init, settings);\n        // will return 200 for an existing file and 201 for a new file\n        if (response.status !== 200 && response.status !== 201) {\n            const err = await __1.ServerConnection.ResponseError.create(response);\n            throw err;\n        }\n        const data = await response.json();\n        validate.validateContentsModel(data);\n        return data;\n    }\n    /**\n     * Get a REST url for a file given a path.\n     */\n    _getUrl(...args) {\n        const parts = args.map(path => coreutils_1.URLExt.encodeParts(path));\n        const baseUrl = this._options.serverSettings.baseUrl;\n        return coreutils_1.URLExt.join(baseUrl, this._options.apiEndpoint, ...parts);\n    }\n}\nexports.RestContentProvider = RestContentProvider;\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateContentsModel = validateContentsModel;\nexports.validateCheckpointModel = validateCheckpointModel;\nconst validate_1 = require(\"../validate\");\n/**\n * Validate an `Contents.IModel` object.\n */\nfunction validateContentsModel(model) {\n    (0, validate_1.validateProperty)(model, 'name', 'string');\n    (0, validate_1.validateProperty)(model, 'path', 'string');\n    (0, validate_1.validateProperty)(model, 'type', 'string');\n    (0, validate_1.validateProperty)(model, 'created', 'string');\n    (0, validate_1.validateProperty)(model, 'last_modified', 'string');\n    (0, validate_1.validateProperty)(model, 'mimetype', 'object');\n    (0, validate_1.validateProperty)(model, 'content', 'object');\n    (0, validate_1.validateProperty)(model, 'format', 'object');\n}\n/**\n * Validate an `Contents.ICheckpointModel` object.\n */\nfunction validateCheckpointModel(model) {\n    (0, validate_1.validateProperty)(model, 'id', 'string');\n    (0, validate_1.validateProperty)(model, 'last_modified', 'string');\n}\n//# sourceMappingURL=validate.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EventManager = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst polling_1 = require(\"@lumino/polling\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst serverconnection_1 = require(\"../serverconnection\");\n/**\n * The url for the jupyter-server events service.\n */\nconst SERVICE_EVENTS_URL = 'api/events';\n/**\n * The events API service manager.\n */\nclass EventManager {\n    /**\n     * Create a new event manager.\n     */\n    constructor(options = {}) {\n        var _a;\n        this._socket = null;\n        this.serverSettings =\n            (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n        // If subscription fails, the poll attempts to reconnect and backs off.\n        this._poll = new polling_1.Poll({ factory: () => this._subscribe() });\n        this._stream = new signaling_1.Stream(this);\n        // Subscribe to the events socket.\n        void this._poll.start();\n    }\n    /**\n     * Whether the event manager is disposed.\n     */\n    get isDisposed() {\n        return this._poll.isDisposed;\n    }\n    /**\n     * An event stream that emits and yields each new event.\n     */\n    get stream() {\n        return this._stream;\n    }\n    /**\n     * Dispose the event manager.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        // Clean up poll.\n        this._poll.dispose();\n        // Clean up socket.\n        const socket = this._socket;\n        if (socket) {\n            this._socket = null;\n            socket.onopen = () => undefined;\n            socket.onerror = () => undefined;\n            socket.onmessage = () => undefined;\n            socket.onclose = () => undefined;\n            socket.close();\n        }\n        // Clean up stream.\n        signaling_1.Signal.clearData(this);\n        this._stream.stop();\n    }\n    /**\n     * Post an event request to be emitted by the event bus.\n     */\n    async emit(event) {\n        const { serverSettings } = this;\n        const { baseUrl } = serverSettings;\n        const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n        const url = coreutils_1.URLExt.join(baseUrl, SERVICE_EVENTS_URL);\n        const init = { body: JSON.stringify(event), method: 'POST' };\n        const response = await makeRequest(url, init, serverSettings);\n        if (response.status !== 204) {\n            throw new ResponseError(response);\n        }\n    }\n    /**\n     * Subscribe to event bus emissions.\n     */\n    _subscribe() {\n        return new Promise((_, reject) => {\n            if (this.isDisposed) {\n                return;\n            }\n            const { appendToken, token, WebSocket, wsUrl } = this.serverSettings;\n            let url = coreutils_1.URLExt.join(wsUrl, SERVICE_EVENTS_URL, 'subscribe');\n            if (appendToken && token !== '') {\n                url += `?token=${encodeURIComponent(token)}`;\n            }\n            const socket = (this._socket = new WebSocket(url));\n            const stream = this._stream;\n            socket.onclose = () => reject(new Error('EventManager socket closed'));\n            socket.onmessage = msg => msg.data && stream.emit(JSON.parse(msg.data));\n        });\n    }\n}\nexports.EventManager = EventManager;\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module services\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./basemanager\"), exports);\n__exportStar(require(\"./config\"), exports);\n__exportStar(require(\"./connectionstatus\"), exports);\n__exportStar(require(\"./contents\"), exports);\n__exportStar(require(\"./event\"), exports);\n__exportStar(require(\"./kernel\"), exports);\n__exportStar(require(\"./kernelspec\"), exports);\n__exportStar(require(\"./manager\"), exports);\n__exportStar(require(\"./serverconnection\"), exports);\n__exportStar(require(\"./session\"), exports);\n__exportStar(require(\"./setting\"), exports);\n__exportStar(require(\"./terminal\"), exports);\n__exportStar(require(\"./tokens\"), exports);\n__exportStar(require(\"./user\"), exports);\n__exportStar(require(\"./workspace\"), exports);\n__exportStar(require(\"./nbconvert\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CommHandler = exports.CommsOverSubshells = void 0;\nconst coreutils_1 = require(\"@lumino/coreutils\");\nconst disposable_1 = require(\"@lumino/disposable\");\nconst KernelMessage = __importStar(require(\"./messages\"));\n/**\n * The Comm Over Subshell Enum\n */\nvar CommsOverSubshells;\n(function (CommsOverSubshells) {\n    CommsOverSubshells[\"Disabled\"] = \"disabled\";\n    CommsOverSubshells[\"PerComm\"] = \"perComm\";\n    CommsOverSubshells[\"PerCommTarget\"] = \"perCommTarget\";\n})(CommsOverSubshells || (exports.CommsOverSubshells = CommsOverSubshells = {}));\n/**\n * Comm channel handler.\n */\nclass CommHandler extends disposable_1.DisposableDelegate {\n    /**\n     * Construct a new comm channel.\n     */\n    constructor(target, id, kernel, disposeCb, commsOverSubshells) {\n        super(disposeCb);\n        this._subshellStarted = new coreutils_1.PromiseDelegate();\n        this._subshellId = null;\n        this._target = '';\n        this._id = '';\n        this._id = id;\n        this._target = target;\n        this._kernel = kernel;\n        // Clean subshell ids upon restart\n        this._kernel.statusChanged.connect(() => {\n            if (this._kernel.status === 'restarting') {\n                this._cleanSubshells();\n            }\n        });\n        this.commsOverSubshells =\n            commsOverSubshells !== null && commsOverSubshells !== void 0 ? commsOverSubshells : CommsOverSubshells.PerCommTarget;\n    }\n    /**\n     * The unique id for the comm channel.\n     */\n    get commId() {\n        return this._id;\n    }\n    /**\n     * The target name for the comm channel.\n     */\n    get targetName() {\n        return this._target;\n    }\n    /**\n     * The current subshell id.\n     */\n    get subshellId() {\n        return this._subshellId;\n    }\n    /**\n     * Promise that resolves when the subshell started, if any\n     */\n    get subshellStarted() {\n        return this._subshellStarted.promise;\n    }\n    /**\n     * Whether comms are running on a subshell, or not\n     */\n    get commsOverSubshells() {\n        return this._commsOverSubshells;\n    }\n    /**\n     * Set whether comms are running on subshells, or not\n     */\n    set commsOverSubshells(value) {\n        this._commsOverSubshells = value;\n        if (this._commsOverSubshells === CommsOverSubshells.Disabled) {\n            this._maybeCloseSubshell();\n        }\n        else {\n            void this._maybeStartSubshell();\n        }\n    }\n    /**\n     * Get the callback for a comm close event.\n     *\n     * #### Notes\n     * This is called when the comm is closed from either the server or client.\n     *\n     * **See also:** [[ICommClose]], [[close]]\n     */\n    get onClose() {\n        return this._onClose;\n    }\n    /**\n     * Set the callback for a comm close event.\n     *\n     * #### Notes\n     * This is called when the comm is closed from either the server or client. If\n     * the function returns a promise, and the kernel was closed from the server,\n     * kernel message processing will pause until the returned promise is\n     * fulfilled.\n     *\n     * **See also:** [[close]]\n     */\n    set onClose(cb) {\n        this._onClose = cb;\n    }\n    /**\n     * Get the callback for a comm message received event.\n     */\n    get onMsg() {\n        return this._onMsg;\n    }\n    /**\n     * Set the callback for a comm message received event.\n     *\n     * #### Notes\n     * This is called when a comm message is received. If the function returns a\n     * promise, kernel message processing will pause until it is fulfilled.\n     */\n    set onMsg(cb) {\n        this._onMsg = cb;\n    }\n    /**\n     * Open a comm with optional data and metadata.\n     *\n     * #### Notes\n     * This sends a `comm_open` message to the server.\n     *\n     * **See also:** [[ICommOpen]]\n     */\n    open(data, metadata, buffers = []) {\n        if (this.isDisposed || this._kernel.isDisposed) {\n            throw new Error('Cannot open');\n        }\n        const msg = KernelMessage.createMessage({\n            msgType: 'comm_open',\n            channel: 'shell',\n            username: this._kernel.username,\n            session: this._kernel.clientId,\n            subshellId: this._subshellId || this._kernel.subshellId,\n            content: {\n                comm_id: this._id,\n                target_name: this._target,\n                data: data !== null && data !== void 0 ? data : {}\n            },\n            metadata,\n            buffers\n        });\n        return this._kernel.sendShellMessage(msg, false, true);\n    }\n    /**\n     * Send a `comm_msg` message to the kernel.\n     *\n     * #### Notes\n     * This is a no-op if the comm has been closed.\n     *\n     * **See also:** [[ICommMsg]]\n     */\n    send(data, metadata, buffers = [], disposeOnDone = true) {\n        if (this.isDisposed || this._kernel.isDisposed) {\n            throw new Error('Cannot send');\n        }\n        const msg = KernelMessage.createMessage({\n            msgType: 'comm_msg',\n            channel: 'shell',\n            username: this._kernel.username,\n            session: this._kernel.clientId,\n            subshellId: this._subshellId || this._kernel.subshellId,\n            content: {\n                comm_id: this._id,\n                data: data\n            },\n            metadata,\n            buffers\n        });\n        return this._kernel.sendShellMessage(msg, false, disposeOnDone);\n    }\n    /**\n     * Close the comm.\n     *\n     * #### Notes\n     * This will send a `comm_close` message to the kernel, and call the\n     * `onClose` callback if set.\n     *\n     * This is a no-op if the comm is already closed.\n     *\n     * **See also:** [[ICommClose]], [[onClose]]\n     */\n    close(data, metadata, buffers = []) {\n        if (this.isDisposed || this._kernel.isDisposed) {\n            throw new Error('Cannot close');\n        }\n        const msg = KernelMessage.createMessage({\n            msgType: 'comm_close',\n            channel: 'shell',\n            username: this._kernel.username,\n            session: this._kernel.clientId,\n            subshellId: this._subshellId || this._kernel.subshellId,\n            content: {\n                comm_id: this._id,\n                data: data !== null && data !== void 0 ? data : {}\n            },\n            metadata,\n            buffers\n        });\n        const future = this._kernel.sendShellMessage(msg, false, true);\n        const onClose = this._onClose;\n        if (onClose) {\n            const ioMsg = KernelMessage.createMessage({\n                msgType: 'comm_close',\n                channel: 'iopub',\n                username: this._kernel.username,\n                session: this._kernel.clientId,\n                subshellId: this._subshellId || this._kernel.subshellId,\n                content: {\n                    comm_id: this._id,\n                    data: data !== null && data !== void 0 ? data : {}\n                },\n                metadata,\n                buffers\n            });\n            // In the future, we may want to communicate back to the user the possible\n            // promise returned from onClose.\n            void onClose(ioMsg);\n        }\n        this.dispose();\n        return future;\n    }\n    dispose() {\n        this._maybeCloseSubshell();\n        super.dispose();\n    }\n    _cleanSubshells() {\n        CommHandler._commTargetSubShellsId = {};\n    }\n    async _maybeStartSubshell() {\n        await this._kernel.info;\n        if (!this._kernel.supportsSubshells) {\n            return;\n        }\n        if (this._commsOverSubshells === CommsOverSubshells.PerComm) {\n            // Create subshell\n            const replyMsg = await this._kernel.requestCreateSubshell({}).done;\n            this._subshellId = replyMsg.content.subshell_id;\n            this._subshellStarted.resolve();\n            return;\n        }\n        // One shell per comm-target\n        if (CommHandler._commTargetSubShellsId[this._target]) {\n            this._subshellId = await CommHandler._commTargetSubShellsId[this._target];\n            this._subshellStarted.resolve();\n        }\n        else {\n            // Create subshell\n            CommHandler._commTargetSubShellsId[this._target] = this._kernel\n                .requestCreateSubshell({})\n                .done.then(replyMsg => {\n                this._subshellId = replyMsg.content.subshell_id;\n                return this._subshellId;\n            });\n            await CommHandler._commTargetSubShellsId[this._target];\n            this._subshellStarted.resolve();\n        }\n    }\n    _maybeCloseSubshell() {\n        // Only close subshell if we have one subshell per comm\n        if (this._commsOverSubshells !== CommsOverSubshells.PerComm) {\n            this._subshellId = null;\n            return;\n        }\n        if (this._subshellId && this._kernel.status !== 'dead') {\n            this._kernel.requestDeleteSubshell({ subshell_id: this._subshellId }, true);\n        }\n        this._subshellId = null;\n    }\n}\nexports.CommHandler = CommHandler;\nCommHandler._commTargetSubShellsId = {};\n//# sourceMappingURL=comm.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KernelConnection = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst coreutils_2 = require(\"@lumino/coreutils\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst __1 = require(\"..\");\nconst comm_1 = require(\"./comm\");\nconst KernelMessage = __importStar(require(\"./messages\"));\nconst future_1 = require(\"./future\");\nconst validate = __importStar(require(\"./validate\"));\nconst restapi_1 = require(\"./restapi\");\nconst restapi_2 = require(\"../kernelspec/restapi\");\nconst KERNEL_INFO_TIMEOUT = 3000;\nconst RESTARTING_KERNEL_SESSION = '_RESTARTING_';\nconst STARTING_KERNEL_SESSION = '';\n/**\n * Implementation of the Kernel object.\n *\n * #### Notes\n * Messages from the server are handled in the order they were received and\n * asynchronously. Any message handler can return a promise, and message\n * handling will pause until the promise is fulfilled.\n */\nclass KernelConnection {\n    /**\n     * Construct a kernel object.\n     */\n    constructor(options) {\n        var _a, _b, _c, _d, _e, _f, _g, _h;\n        /**\n         * Create the kernel websocket connection and add socket status handlers.\n         */\n        this._createSocket = (useProtocols = true) => {\n            this._errorIfDisposed();\n            // Make sure the socket is clear\n            this._clearSocket();\n            // Update the connection status to reflect opening a new connection.\n            this._updateConnectionStatus('connecting');\n            const settings = this.serverSettings;\n            const partialUrl = coreutils_1.URLExt.join(settings.wsUrl, restapi_1.KERNEL_SERVICE_URL, encodeURIComponent(this._id));\n            // Strip any authentication from the display string.\n            const display = partialUrl.replace(/^((?:\\w+:)?\\/\\/)(?:[^@\\/]+@)/, '$1');\n            console.debug(`Starting WebSocket: ${display}`);\n            let url = coreutils_1.URLExt.join(partialUrl, 'channels?session_id=' + encodeURIComponent(this._clientId));\n            // If token authentication is in use.\n            const token = settings.token;\n            if (settings.appendToken && token !== '') {\n                url = url + `&token=${encodeURIComponent(token)}`;\n            }\n            // Try opening the websocket with our list of subprotocols.\n            // If the server doesn't handle subprotocols,\n            // the accepted protocol will be ''.\n            // But we cannot send '' as a subprotocol, so if connection fails,\n            // reconnect without subprotocols.\n            const supportedProtocols = useProtocols ? this._supportedProtocols : [];\n            this._ws = new settings.WebSocket(url, supportedProtocols);\n            // Ensure incoming binary messages are not Blobs\n            this._ws.binaryType = 'arraybuffer';\n            let alreadyCalledOnclose = false;\n            const getKernelModel = async (evt) => {\n                var _a, _b;\n                if (this._isDisposed) {\n                    return;\n                }\n                this._reason = '';\n                this._model = undefined;\n                try {\n                    const model = await this._kernelAPIClient.getModel(this._id);\n                    this._model = model;\n                    if ((model === null || model === void 0 ? void 0 : model.execution_state) === 'dead') {\n                        this._updateStatus('dead');\n                    }\n                    else {\n                        this._onWSClose(evt);\n                    }\n                }\n                catch (err) {\n                    // Try again, if there is a network failure\n                    // Handle network errors, as well as cases where we are on a\n                    // JupyterHub and the server is not running. JupyterHub returns a\n                    // 503 (<2.0) or 424 (>2.0) in that case.\n                    if (err instanceof __1.ServerConnection.NetworkError ||\n                        ((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 503 ||\n                        ((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) === 424) {\n                        const timeout = Private.getRandomIntInclusive(10, 30) * 1e3;\n                        setTimeout(getKernelModel, timeout, evt);\n                    }\n                    else {\n                        this._reason = 'Kernel died unexpectedly';\n                        this._updateStatus('dead');\n                    }\n                }\n                return;\n            };\n            const earlyClose = async (evt) => {\n                // If the websocket was closed early, that could mean\n                // that the kernel is actually dead. Try getting\n                // information about the kernel from the API call,\n                // if that fails, then assume the kernel is dead,\n                // otherwise just follow the typical websocket closed\n                // protocol.\n                if (alreadyCalledOnclose) {\n                    return;\n                }\n                alreadyCalledOnclose = true;\n                await getKernelModel(evt);\n                return;\n            };\n            this._ws.onmessage = this._onWSMessage;\n            this._ws.onopen = this._onWSOpen;\n            this._ws.onclose = earlyClose;\n            this._ws.onerror = earlyClose;\n        };\n        // Make websocket callbacks arrow functions so they bind `this`.\n        /**\n         * Handle a websocket open event.\n         */\n        this._onWSOpen = (evt) => {\n            if (this._ws.protocol !== '' &&\n                !this._supportedProtocols.includes(this._ws.protocol)) {\n                console.log('Server selected unknown kernel wire protocol:', this._ws.protocol);\n                this._updateStatus('dead');\n                throw new Error(`Unknown kernel wire protocol:  ${this._ws.protocol}`);\n            }\n            // Remember the kernel wire protocol selected by the server.\n            this._selectedProtocol = this._ws.protocol;\n            this._ws.onclose = this._onWSClose;\n            this._ws.onerror = this._onWSClose;\n            this._updateConnectionStatus('connected');\n        };\n        /**\n         * Handle a websocket message, validating and routing appropriately.\n         */\n        this._onWSMessage = (evt) => {\n            // Notify immediately if there is an error with the message.\n            let msg;\n            try {\n                msg = this.serverSettings.serializer.deserialize(evt.data, this._ws.protocol);\n                validate.validateMessage(msg);\n            }\n            catch (error) {\n                error.message = `Kernel message validation error: ${error.message}`;\n                // We throw the error so that it bubbles up to the top, and displays the right stack.\n                throw error;\n            }\n            // Update the current kernel session id\n            this._kernelSession = msg.header.session;\n            // Handle the message asynchronously, in the order received.\n            this._msgChain = this._msgChain\n                .then(() => {\n                // Return so that any promises from handling a message are fulfilled\n                // before proceeding to the next message.\n                return this._handleMessage(msg);\n            })\n                .catch(error => {\n                // Log any errors in handling the message, thus resetting the _msgChain\n                // promise so we can process more messages.\n                // Ignore the \"Canceled\" errors that are thrown during kernel dispose.\n                if (error.message.startsWith('Canceled future for ')) {\n                    console.error(error);\n                }\n            });\n            // Emit the message receive signal\n            this._anyMessage.emit({ msg, direction: 'recv' });\n        };\n        /**\n         * Handle a websocket close event.\n         */\n        this._onWSClose = (evt) => {\n            if (!this.isDisposed) {\n                this._reconnect();\n            }\n        };\n        this._id = '';\n        this._name = '';\n        this._status = 'unknown';\n        this._connectionStatus = 'connecting';\n        this._kernelSession = '';\n        this._isDisposed = false;\n        /**\n         * Websocket to communicate with kernel.\n         */\n        this._ws = null;\n        this._username = '';\n        this._reconnectLimit = 7;\n        this._reconnectAttempt = 0;\n        this._reconnectTimeout = null;\n        this._supportedProtocols = Object.values(KernelMessage.supportedKernelWebSocketProtocols);\n        this._selectedProtocol = '';\n        this._commsOverSubshells = __1.CommsOverSubshells.PerCommTarget;\n        this._futures = new Map();\n        this._comms = new Map();\n        this._targetRegistry = Object.create(null);\n        this._info = new coreutils_2.PromiseDelegate();\n        this._pendingMessages = [];\n        this._statusChanged = new signaling_1.Signal(this);\n        this._connectionStatusChanged = new signaling_1.Signal(this);\n        this._disposed = new signaling_1.Signal(this);\n        this._iopubMessage = new signaling_1.Signal(this);\n        this._anyMessage = new signaling_1.Signal(this);\n        this._pendingInput = new signaling_1.Signal(this);\n        this._unhandledMessage = new signaling_1.Signal(this);\n        this._displayIdToParentIds = new Map();\n        this._msgIdToDisplayIds = new Map();\n        this._msgChain = Promise.resolve();\n        this._hasPendingInput = false;\n        this._reason = '';\n        this._noOp = () => {\n            /* no-op */\n        };\n        this._supportsSubshells = false;\n        this._name = options.model.name;\n        this._id = options.model.id;\n        this.serverSettings =\n            (_a = options.serverSettings) !== null && _a !== void 0 ? _a : __1.ServerConnection.makeSettings();\n        this._kernelAPIClient =\n            (_b = options.kernelAPIClient) !== null && _b !== void 0 ? _b : new restapi_1.KernelAPIClient({ serverSettings: this.serverSettings });\n        this._kernelSpecAPIClient =\n            (_c = options.kernelSpecAPIClient) !== null && _c !== void 0 ? _c : new restapi_2.KernelSpecAPIClient({ serverSettings: this.serverSettings });\n        this._clientId = (_d = options.clientId) !== null && _d !== void 0 ? _d : coreutils_2.UUID.uuid4();\n        this._username = (_e = options.username) !== null && _e !== void 0 ? _e : '';\n        this.handleComms = (_f = options.handleComms) !== null && _f !== void 0 ? _f : true;\n        this._commsOverSubshells =\n            (_g = options.commsOverSubshells) !== null && _g !== void 0 ? _g : __1.CommsOverSubshells.PerCommTarget;\n        this._subshellId = (_h = options.subshellId) !== null && _h !== void 0 ? _h : null;\n        this._createSocket();\n    }\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * Whether comm messages should be sent to kernel subshells, if the\n     * kernel supports it.\n     *\n     * #### Notes\n     * Sending comm messages over subshells allows processing comms whilst\n     * processing execute-request on the \"main shell\". This prevents blocking\n     * comm processing.\n     * Options are:\n     * - disabled: not using subshells\n     * - one subshell per comm-target (default)\n     * - one subshell per comm (can lead to issues if creating many comms)\n     */\n    get commsOverSubshells() {\n        return this._commsOverSubshells;\n    }\n    set commsOverSubshells(value) {\n        this._commsOverSubshells = value;\n        for (const [_, comm] of this._comms) {\n            comm.commsOverSubshells = value;\n        }\n    }\n    /**\n     * A signal emitted when the kernel status changes.\n     */\n    get statusChanged() {\n        return this._statusChanged;\n    }\n    /**\n     * A signal emitted when the kernel status changes.\n     */\n    get connectionStatusChanged() {\n        return this._connectionStatusChanged;\n    }\n    /**\n     * A signal emitted for iopub kernel messages.\n     *\n     * #### Notes\n     * This signal is emitted after the iopub message is handled asynchronously.\n     */\n    get iopubMessage() {\n        return this._iopubMessage;\n    }\n    /**\n     * A signal emitted for unhandled kernel message.\n     *\n     * #### Notes\n     * This signal is emitted for a message that was not handled. It is emitted\n     * during the asynchronous message handling code.\n     */\n    get unhandledMessage() {\n        return this._unhandledMessage;\n    }\n    /**\n     * The kernel model\n     */\n    get model() {\n        return (this._model || {\n            id: this.id,\n            name: this.name,\n            reason: this._reason\n        });\n    }\n    /**\n     * A signal emitted for any kernel message.\n     *\n     * #### Notes\n     * This signal is emitted when a message is received, before it is handled\n     * asynchronously.\n     *\n     * This message is emitted when a message is queued for sending (either in\n     * the websocket buffer, or our own pending message buffer). The message may\n     * actually be sent across the wire at a later time.\n     *\n     * The message emitted in this signal should not be modified in any way.\n     */\n    get anyMessage() {\n        return this._anyMessage;\n    }\n    /**\n     * A signal emitted when a kernel has pending inputs from the user.\n     */\n    get pendingInput() {\n        return this._pendingInput;\n    }\n    /**\n     * The id of the server-side kernel.\n     */\n    get id() {\n        return this._id;\n    }\n    /**\n     * The name of the server-side kernel.\n     */\n    get name() {\n        return this._name;\n    }\n    /**\n     * The client username.\n     */\n    get username() {\n        return this._username;\n    }\n    /**\n     * The client unique id.\n     */\n    get clientId() {\n        return this._clientId;\n    }\n    /**\n     * The subshell ID.\n     */\n    get subshellId() {\n        return this._subshellId;\n    }\n    /**\n     * Set the subshell ID.\n     */\n    set subshellId(value) {\n        this._subshellId = value;\n    }\n    /**\n     * The current status of the kernel.\n     */\n    get status() {\n        return this._status;\n    }\n    /**\n     * The current connection status of the kernel connection.\n     */\n    get connectionStatus() {\n        return this._connectionStatus;\n    }\n    /**\n     * Test whether the kernel has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * The cached kernel info.\n     *\n     * @returns A promise that resolves to the kernel info.\n     */\n    get info() {\n        return this._info.promise;\n    }\n    /**\n     * The kernel spec.\n     *\n     * @returns A promise that resolves to the kernel spec.\n     */\n    get spec() {\n        if (this._specPromise) {\n            return this._specPromise;\n        }\n        this._specPromise = this._kernelSpecAPIClient.get().then(specs => {\n            return specs.kernelspecs[this._name];\n        });\n        return this._specPromise;\n    }\n    /**\n     * Check if this kernel supports JEP 91 kernel subshells.\n     */\n    get supportsSubshells() {\n        return this._supportsSubshells;\n    }\n    /**\n     * Clone the current kernel with a new clientId.\n     */\n    clone(options = {}) {\n        return new KernelConnection({\n            model: this.model,\n            username: this.username,\n            serverSettings: this.serverSettings,\n            // handleComms defaults to false since that is safer\n            handleComms: false,\n            kernelAPIClient: this._kernelAPIClient,\n            commsOverSubshells: __1.CommsOverSubshells.Disabled,\n            ...options\n        });\n    }\n    /**\n     * Dispose of the resources held by the kernel.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        const cleanup = () => {\n            this._isDisposed = true;\n            this._disposed.emit();\n            this._updateConnectionStatus('disconnected');\n            this._clearKernelState();\n            this._pendingMessages = [];\n            this._clearSocket();\n            // Clear Lumino signals\n            signaling_1.Signal.clearData(this);\n        };\n        if (this._subshellId !== null) {\n            const future = this.requestDeleteSubshell({ subshell_id: this._subshellId }, true);\n            future.onReply = (msg) => {\n                // Ignore the response and clean up.\n                cleanup();\n            };\n        }\n        else {\n            cleanup();\n        }\n    }\n    /**\n     * Send a shell message to the kernel.\n     *\n     * #### Notes\n     * Send a message to the kernel's shell channel, yielding a future object\n     * for accepting replies.\n     *\n     * If `expectReply` is given and `true`, the future is disposed when both a\n     * shell reply and an idle status message are received. If `expectReply`\n     * is not given or is `false`, the future is resolved when an idle status\n     * message is received.\n     * If `disposeOnDone` is not given or is `true`, the Future is disposed at this point.\n     * If `disposeOnDone` is given and `false`, it is up to the caller to dispose of the Future.\n     *\n     * All replies are validated as valid kernel messages.\n     *\n     * If the kernel status is `dead`, this will throw an error.\n     */\n    sendShellMessage(msg, expectReply = false, disposeOnDone = true) {\n        return this._sendKernelShellControl(future_1.KernelShellFutureHandler, msg, expectReply, disposeOnDone);\n    }\n    /**\n     * Send a control message to the kernel.\n     *\n     * #### Notes\n     * Send a message to the kernel's control channel, yielding a future object\n     * for accepting replies.\n     *\n     * If `expectReply` is given and `true`, the future is disposed when both a\n     * control reply and an idle status message are received. If `expectReply`\n     * is not given or is `false`, the future is resolved when an idle status\n     * message is received.\n     * If `disposeOnDone` is not given or is `true`, the Future is disposed at this point.\n     * If `disposeOnDone` is given and `false`, it is up to the caller to dispose of the Future.\n     *\n     * All replies are validated as valid kernel messages.\n     *\n     * If the kernel status is `dead`, this will throw an error.\n     */\n    sendControlMessage(msg, expectReply = false, disposeOnDone = true) {\n        return this._sendKernelShellControl(future_1.KernelControlFutureHandler, msg, expectReply, disposeOnDone);\n    }\n    _sendKernelShellControl(ctor, msg, expectReply = false, disposeOnDone = true) {\n        this._sendMessage(msg);\n        this._anyMessage.emit({ msg, direction: 'send' });\n        const future = new ctor(() => {\n            const msgId = msg.header.msg_id;\n            this._futures.delete(msgId);\n            // Remove stored display id information.\n            const displayIds = this._msgIdToDisplayIds.get(msgId);\n            if (!displayIds) {\n                return;\n            }\n            displayIds.forEach(displayId => {\n                const msgIds = this._displayIdToParentIds.get(displayId);\n                if (msgIds) {\n                    const idx = msgIds.indexOf(msgId);\n                    if (idx === -1) {\n                        return;\n                    }\n                    if (msgIds.length === 1) {\n                        this._displayIdToParentIds.delete(displayId);\n                    }\n                    else {\n                        msgIds.splice(idx, 1);\n                        this._displayIdToParentIds.set(displayId, msgIds);\n                    }\n                }\n            });\n            this._msgIdToDisplayIds.delete(msgId);\n        }, msg, expectReply, disposeOnDone, this);\n        this._futures.set(msg.header.msg_id, future);\n        return future;\n    }\n    /**\n     * Send a message on the websocket.\n     *\n     * If queue is true, queue the message for later sending if we cannot send\n     * now. Otherwise throw an error.\n     *\n     * #### Notes\n     * As an exception to the queueing, if we are sending a kernel_info_request\n     * message while we think the kernel is restarting, we send the message\n     * immediately without queueing. This is so that we can trigger a message\n     * back, which will then clear the kernel restarting state.\n     */\n    _sendMessage(msg, queue = true) {\n        if (this.status === 'dead') {\n            throw new Error('Kernel is dead');\n        }\n        // If we have a kernel_info_request and we are starting or restarting, send the\n        // kernel_info_request immediately if we can, and if not throw an error so\n        // we can retry later. On restarting we do this because we must get at least one message\n        // from the kernel to reset the kernel session (thus clearing the restart\n        // status sentinel).\n        if ((this._kernelSession === STARTING_KERNEL_SESSION ||\n            this._kernelSession === RESTARTING_KERNEL_SESSION) &&\n            KernelMessage.isInfoRequestMsg(msg)) {\n            if (this.connectionStatus === 'connected') {\n                this._ws.send(this.serverSettings.serializer.serialize(msg, this._ws.protocol));\n                return;\n            }\n            else {\n                throw new Error('Could not send message: status is not connected');\n            }\n        }\n        // If there are pending messages, add to the queue so we keep messages in order\n        if (queue && this._pendingMessages.length > 0) {\n            this._pendingMessages.push(msg);\n            return;\n        }\n        // Send if the ws allows it, otherwise queue the message.\n        if (this.connectionStatus === 'connected' &&\n            this._kernelSession !== RESTARTING_KERNEL_SESSION) {\n            this._ws.send(this.serverSettings.serializer.serialize(msg, this._ws.protocol));\n        }\n        else if (queue) {\n            this._pendingMessages.push(msg);\n        }\n        else {\n            throw new Error('Could not send message');\n        }\n    }\n    /**\n     * Interrupt a kernel.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels).\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     *\n     * It is assumed that the API call does not mutate the kernel id or name.\n     *\n     * The promise will be rejected if the kernel status is `Dead` or if the\n     * request fails or the response is invalid.\n     */\n    async interrupt() {\n        this.hasPendingInput = false;\n        if (this.status === 'dead') {\n            throw new Error('Kernel is dead');\n        }\n        return this._kernelAPIClient.interrupt(this.id);\n    }\n    /**\n     * Request a kernel restart.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels)\n     * and validates the response model.\n     *\n     * Any existing Future or Comm objects are cleared once the kernel has\n     * actually be restarted.\n     *\n     * The promise is fulfilled on a valid server response (after the kernel restarts)\n     * and rejected otherwise.\n     *\n     * It is assumed that the API call does not mutate the kernel id or name.\n     *\n     * The promise will be rejected if the request fails or the response is\n     * invalid.\n     */\n    async restart() {\n        if (this.status === 'dead') {\n            throw new Error('Kernel is dead');\n        }\n        this._updateStatus('restarting');\n        this._clearKernelState();\n        this._kernelSession = RESTARTING_KERNEL_SESSION;\n        await this._kernelAPIClient.restart(this.id);\n        // Reconnect to the kernel to address cases where kernel ports\n        // have changed during the restart.\n        await this.reconnect();\n        this.hasPendingInput = false;\n    }\n    /**\n     * Reconnect to a kernel.\n     *\n     * #### Notes\n     * This may try multiple times to reconnect to a kernel, and will sever any\n     * existing connection.\n     */\n    reconnect() {\n        this._errorIfDisposed();\n        const result = new coreutils_2.PromiseDelegate();\n        // Set up a listener for the connection status changing, which accepts or\n        // rejects after the retries are done.\n        const fulfill = (sender, status) => {\n            if (status === 'connected') {\n                result.resolve();\n                this.connectionStatusChanged.disconnect(fulfill, this);\n            }\n            else if (status === 'disconnected') {\n                result.reject(new Error('Kernel connection disconnected'));\n                this.connectionStatusChanged.disconnect(fulfill, this);\n            }\n        };\n        this.connectionStatusChanged.connect(fulfill, this);\n        // Reset the reconnect limit so we start the connection attempts fresh\n        this._reconnectAttempt = 0;\n        // Start the reconnection process, which will also clear any existing\n        // connection.\n        this._reconnect();\n        // Return the promise that should resolve on connection or reject if the\n        // retries don't work.\n        return result.promise;\n    }\n    /**\n     * Shutdown a kernel.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels).\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     *\n     * On a valid response, disposes this kernel connection.\n     *\n     * If the kernel is already `dead`, disposes this kernel connection without\n     * a server request.\n     */\n    async shutdown() {\n        if (this.status !== 'dead') {\n            await this._kernelAPIClient.shutdown(this.id);\n        }\n        this.handleShutdown();\n    }\n    /**\n     * Handles a kernel shutdown.\n     *\n     * #### Notes\n     * This method should be called if we know from outside information that a\n     * kernel is dead (for example, we cannot find the kernel model on the\n     * server).\n     */\n    handleShutdown() {\n        this._updateStatus('dead');\n        this.dispose();\n    }\n    /**\n     * Send a `kernel_info_request` message.\n     *\n     * #### Notes\n     * See [Messaging in Jupyter](https://jupyter-client.readthedocs.io/en/latest/messaging.html#kernel-info).\n     *\n     * Fulfills with the `kernel_info_response` content when the shell reply is\n     * received and validated.\n     */\n    async requestKernelInfo() {\n        const msg = KernelMessage.createMessage({\n            msgType: 'kernel_info_request',\n            channel: 'shell',\n            username: this._username,\n            session: this._clientId,\n            subshellId: this._subshellId,\n            content: {}\n        });\n        let reply;\n        try {\n            reply = (await Private.handleShellMessage(this, msg));\n        }\n        catch (e) {\n            // If we rejected because the future was disposed, ignore and return.\n            if (this.isDisposed) {\n                return;\n            }\n            else {\n                throw e;\n            }\n        }\n        this._errorIfDisposed();\n        if (!reply) {\n            return;\n        }\n        // Kernels sometimes do not include a status field on kernel_info_reply\n        // messages, so set a default for now.\n        // See https://github.com/jupyterlab/jupyterlab/issues/6760\n        if (reply.content.status === undefined) {\n            reply.content.status = 'ok';\n        }\n        if (reply.content.status !== 'ok') {\n            this._info.reject('Kernel info reply errored');\n            return reply;\n        }\n        this._info.resolve(reply.content);\n        this._kernelSession = reply.header.session;\n        const supportedFeatures = reply.content.supported_features;\n        this._supportsSubshells =\n            supportedFeatures !== undefined &&\n                supportedFeatures.includes('kernel subshells');\n        return reply;\n    }\n    /**\n     * Send a `complete_request` message.\n     *\n     * #### Notes\n     * See [Messaging in Jupyter](https://jupyter-client.readthedocs.io/en/latest/messaging.html#completion).\n     *\n     * Fulfills with the `complete_reply` content when the shell reply is\n     * received and validated.\n     */\n    requestComplete(content) {\n        const msg = KernelMessage.createMessage({\n            msgType: 'complete_request',\n            channel: 'shell',\n            username: this._username,\n            session: this._clientId,\n            subshellId: this._subshellId,\n            content\n        });\n        return Private.handleShellMessage(this, msg);\n    }\n    /**\n     * Send an `inspect_request` message.\n     *\n     * #### Notes\n     * See [Messaging in Jupyter](https://jupyter-client.readthedocs.io/en/latest/messaging.html#introspection).\n     *\n     * Fulfills with the `inspect_reply` content when the shell reply is\n     * received and validated.\n     */\n    requestInspect(content) {\n        const msg = KernelMessage.createMessage({\n            msgType: 'inspect_request',\n            channel: 'shell',\n            username: this._username,\n            session: this._clientId,\n            subshellId: this._subshellId,\n            content: content\n        });\n        return Private.handleShellMessage(this, msg);\n    }\n    /**\n     * Send a `history_request` message.\n     *\n     * #### Notes\n     * See [Messaging in Jupyter](https://jupyter-client.readthedocs.io/en/latest/messaging.html#history).\n     *\n     * Fulfills with the `history_reply` content when the shell reply is\n     * received and validated.\n     */\n    requestHistory(content) {\n        const msg = KernelMessage.createMessage({\n            msgType: 'history_request',\n            channel: 'shell',\n            username: this._username,\n            session: this._clientId,\n            subshellId: this._subshellId,\n            content\n        });\n        return Private.handleShellMessage(this, msg);\n    }\n    /**\n     * Send an `execute_request` message.\n     *\n     * #### Notes\n     * See [Messaging in Jupyter](https://jupyter-client.readthedocs.io/en/latest/messaging.html#execute).\n     *\n     * Future `onReply` is called with the `execute_reply` content when the\n     * shell reply is received and validated. The future will resolve when\n     * this message is received and the `idle` iopub status is received.\n     * The future will also be disposed at this point unless `disposeOnDone`\n     * is specified and `false`, in which case it is up to the caller to dispose\n     * of the future.\n     *\n     * **See also:** [[IExecuteReply]]\n     */\n    requestExecute(content, disposeOnDone = true, metadata) {\n        const defaults = {\n            silent: false,\n            store_history: true,\n            user_expressions: {},\n            allow_stdin: true,\n            stop_on_error: false\n        };\n        const msg = KernelMessage.createMessage({\n            msgType: 'execute_request',\n            channel: 'shell',\n            username: this._username,\n            session: this._clientId,\n            subshellId: this._subshellId,\n            content: { ...defaults, ...content },\n            metadata\n        });\n        return this.sendShellMessage(msg, true, disposeOnDone);\n    }\n    /**\n     * Send an experimental `debug_request` message.\n     *\n     * @hidden\n     *\n     * #### Notes\n     * Debug messages are experimental messages that are not in the official\n     * kernel message specification. As such, this function is *NOT* considered\n     * part of the public API, and may change without notice.\n     */\n    requestDebug(content, disposeOnDone = true) {\n        const msg = KernelMessage.createMessage({\n            msgType: 'debug_request',\n            channel: 'control',\n            username: this._username,\n            session: this._clientId,\n            content\n        });\n        return this.sendControlMessage(msg, true, disposeOnDone);\n    }\n    /**\n     * Send a `create_subshell_request` message.\n     *\n     * https://github.com/jupyter/enhancement-proposals/pull/91\n     */\n    requestCreateSubshell(content, disposeOnDone = true) {\n        if (!this.supportsSubshells) {\n            throw new Error('Kernel subshells are not supported');\n        }\n        const msg = KernelMessage.createMessage({\n            msgType: 'create_subshell_request',\n            channel: 'control',\n            username: this._username,\n            session: this._clientId,\n            content\n        });\n        return this.sendControlMessage(msg, true, disposeOnDone);\n    }\n    /**\n     * Send a `delete_subshell_request` message.\n     *\n     * https://github.com/jupyter/enhancement-proposals/pull/91\n     */\n    requestDeleteSubshell(content, disposeOnDone = true) {\n        if (!this.supportsSubshells) {\n            throw new Error('Kernel subshells are not supported');\n        }\n        const msg = KernelMessage.createMessage({\n            msgType: 'delete_subshell_request',\n            channel: 'control',\n            username: this._username,\n            session: this._clientId,\n            content\n        });\n        return this.sendControlMessage(msg, true, disposeOnDone);\n    }\n    /**\n     * Send a `list_subshell_request` message.\n     *\n     * https://github.com/jupyter/enhancement-proposals/pull/91\n     */\n    requestListSubshell(content, disposeOnDone = true) {\n        if (!this.supportsSubshells) {\n            throw new Error('Kernel subshells are not supported');\n        }\n        const msg = KernelMessage.createMessage({\n            msgType: 'list_subshell_request',\n            channel: 'control',\n            username: this._username,\n            session: this._clientId,\n            content\n        });\n        return this.sendControlMessage(msg, true, disposeOnDone);\n    }\n    /**\n     * Send an `is_complete_request` message.\n     *\n     * #### Notes\n     * See [Messaging in Jupyter](https://jupyter-client.readthedocs.io/en/latest/messaging.html#code-completeness).\n     *\n     * Fulfills with the `is_complete_response` content when the shell reply is\n     * received and validated.\n     */\n    requestIsComplete(content) {\n        const msg = KernelMessage.createMessage({\n            msgType: 'is_complete_request',\n            channel: 'shell',\n            username: this._username,\n            session: this._clientId,\n            subshellId: this._subshellId,\n            content\n        });\n        return Private.handleShellMessage(this, msg);\n    }\n    /**\n     * Send a `comm_info_request` message.\n     *\n     * #### Notes\n     * Fulfills with the `comm_info_reply` content when the shell reply is\n     * received and validated.\n     */\n    requestCommInfo(content) {\n        const msg = KernelMessage.createMessage({\n            msgType: 'comm_info_request',\n            channel: 'shell',\n            username: this._username,\n            session: this._clientId,\n            subshellId: this._subshellId,\n            content\n        });\n        return Private.handleShellMessage(this, msg);\n    }\n    /**\n     * Send an `input_reply` message.\n     *\n     * #### Notes\n     * See [Messaging in Jupyter](https://jupyter-client.readthedocs.io/en/latest/messaging.html#messages-on-the-stdin-router-dealer-sockets).\n     */\n    sendInputReply(content, parent_header) {\n        const msg = KernelMessage.createMessage({\n            msgType: 'input_reply',\n            channel: 'stdin',\n            username: this._username,\n            session: this._clientId,\n            content\n        });\n        msg.parent_header = parent_header;\n        this._sendMessage(msg);\n        this._anyMessage.emit({ msg, direction: 'send' });\n        this.hasPendingInput = false;\n    }\n    /**\n     * Create a new comm.\n     *\n     * #### Notes\n     * If a client-side comm already exists with the given commId, an error is thrown.\n     * If the kernel does not handle comms, an error is thrown.\n     */\n    createComm(targetName, commId = coreutils_2.UUID.uuid4()) {\n        if (!this.handleComms) {\n            throw new Error('Comms are disabled on this kernel connection');\n        }\n        if (this._comms.has(commId)) {\n            throw new Error('Comm is already created');\n        }\n        const comm = new comm_1.CommHandler(targetName, commId, this, () => {\n            this._unregisterComm(commId);\n        }, this._commsOverSubshells);\n        this._comms.set(commId, comm);\n        return comm;\n    }\n    /**\n     * Check if a comm exists.\n     */\n    hasComm(commId) {\n        return this._comms.has(commId);\n    }\n    /**\n     * Register a comm target handler.\n     *\n     * @param targetName - The name of the comm target.\n     *\n     * @param callback - The callback invoked for a comm open message.\n     *\n     * @returns A disposable used to unregister the comm target.\n     *\n     * #### Notes\n     * Only one comm target can be registered to a target name at a time, an\n     * existing callback for the same target name will be overridden.  A registered\n     * comm target handler will take precedence over a comm which specifies a\n     * `target_module`.\n     *\n     * If the callback returns a promise, kernel message processing will pause\n     * until the returned promise is fulfilled.\n     */\n    registerCommTarget(targetName, callback) {\n        if (!this.handleComms) {\n            return;\n        }\n        this._targetRegistry[targetName] = callback;\n    }\n    /**\n     * Remove a comm target handler.\n     *\n     * @param targetName - The name of the comm target to remove.\n     *\n     * @param callback - The callback to remove.\n     *\n     * #### Notes\n     * The comm target is only removed if the callback argument matches.\n     */\n    removeCommTarget(targetName, callback) {\n        if (!this.handleComms) {\n            return;\n        }\n        if (!this.isDisposed && this._targetRegistry[targetName] === callback) {\n            delete this._targetRegistry[targetName];\n        }\n    }\n    /**\n     * Register an IOPub message hook.\n     *\n     * @param msg_id - The parent_header message id the hook will intercept.\n     *\n     * @param hook - The callback invoked for the message.\n     *\n     * #### Notes\n     * The IOPub hook system allows you to preempt the handlers for IOPub\n     * messages that are responses to a given message id.\n     *\n     * The most recently registered hook is run first. A hook can return a\n     * boolean or a promise to a boolean, in which case all kernel message\n     * processing pauses until the promise is fulfilled. If a hook return value\n     * resolves to false, any later hooks will not run and the function will\n     * return a promise resolving to false. If a hook throws an error, the error\n     * is logged to the console and the next hook is run. If a hook is\n     * registered during the hook processing, it will not run until the next\n     * message. If a hook is removed during the hook processing, it will be\n     * deactivated immediately.\n     *\n     * See also [[IFuture.registerMessageHook]].\n     */\n    registerMessageHook(msgId, hook) {\n        var _a;\n        const future = (_a = this._futures) === null || _a === void 0 ? void 0 : _a.get(msgId);\n        if (future) {\n            future.registerMessageHook(hook);\n        }\n    }\n    /**\n     * Remove an IOPub message hook.\n     *\n     * @param msg_id - The parent_header message id the hook intercepted.\n     *\n     * @param hook - The callback invoked for the message.\n     *\n     */\n    removeMessageHook(msgId, hook) {\n        var _a;\n        const future = (_a = this._futures) === null || _a === void 0 ? void 0 : _a.get(msgId);\n        if (future) {\n            future.removeMessageHook(hook);\n        }\n    }\n    /**\n     * Remove the input guard, if any.\n     */\n    removeInputGuard() {\n        this.hasPendingInput = false;\n    }\n    /**\n     * Handle a message with a display id.\n     *\n     * @returns Whether the message was handled.\n     */\n    async _handleDisplayId(displayId, msg) {\n        var _a, _b;\n        const msgId = msg.parent_header.msg_id;\n        let parentIds = this._displayIdToParentIds.get(displayId);\n        if (parentIds) {\n            // We've seen it before, update existing outputs with same display_id\n            // by handling display_data as update_display_data.\n            const updateMsg = {\n                header: coreutils_2.JSONExt.deepCopy(msg.header),\n                parent_header: coreutils_2.JSONExt.deepCopy(msg.parent_header),\n                metadata: coreutils_2.JSONExt.deepCopy(msg.metadata),\n                content: coreutils_2.JSONExt.deepCopy(msg.content),\n                channel: msg.channel,\n                buffers: msg.buffers ? msg.buffers.slice() : []\n            };\n            updateMsg.header.msg_type = 'update_display_data';\n            await Promise.all(parentIds.map(async (parentId) => {\n                const future = this._futures && this._futures.get(parentId);\n                if (future) {\n                    await future.handleMsg(updateMsg);\n                }\n            }));\n        }\n        // We're done here if it's update_display.\n        if (msg.header.msg_type === 'update_display_data') {\n            // It's an update, don't proceed to the normal display.\n            return true;\n        }\n        // Regular display_data with id, record it for future updating\n        // in _displayIdToParentIds for future lookup.\n        parentIds = (_a = this._displayIdToParentIds.get(displayId)) !== null && _a !== void 0 ? _a : [];\n        if (parentIds.indexOf(msgId) === -1) {\n            parentIds.push(msgId);\n        }\n        this._displayIdToParentIds.set(displayId, parentIds);\n        // Add to our map of display ids for this message.\n        const displayIds = (_b = this._msgIdToDisplayIds.get(msgId)) !== null && _b !== void 0 ? _b : [];\n        if (displayIds.indexOf(msgId) === -1) {\n            displayIds.push(msgId);\n        }\n        this._msgIdToDisplayIds.set(msgId, displayIds);\n        // Let the message propagate to the intended recipient.\n        return false;\n    }\n    /**\n     * Forcefully clear the socket state.\n     *\n     * #### Notes\n     * This will clear all socket state without calling any handlers and will\n     * not update the connection status. If you call this method, you are\n     * responsible for updating the connection status as needed and recreating\n     * the socket if you plan to reconnect.\n     */\n    _clearSocket() {\n        if (this._ws !== null) {\n            // Clear the websocket event handlers and the socket itself.\n            this._ws.onopen = this._noOp;\n            this._ws.onclose = this._noOp;\n            this._ws.onerror = this._noOp;\n            this._ws.onmessage = this._noOp;\n            this._ws.close();\n            this._ws = null;\n        }\n    }\n    /**\n     * Handle status iopub messages from the kernel.\n     */\n    _updateStatus(status) {\n        if (this._status === status || this._status === 'dead') {\n            return;\n        }\n        this._status = status;\n        Private.logKernelStatus(this);\n        this._statusChanged.emit(status);\n        if (status === 'dead') {\n            this.dispose();\n        }\n    }\n    /**\n     * Send pending messages to the kernel.\n     */\n    _sendPending() {\n        // We check to make sure we are still connected each time. For\n        // example, if a websocket buffer overflows, it may close, so we should\n        // stop sending messages.\n        while (this.connectionStatus === 'connected' &&\n            this._kernelSession !== RESTARTING_KERNEL_SESSION &&\n            this._pendingMessages.length > 0) {\n            this._sendMessage(this._pendingMessages[0], false);\n            // We shift the message off the queue after the message is sent so that\n            // if there is an exception, the message is still pending.\n            this._pendingMessages.shift();\n        }\n    }\n    /**\n     * Clear the internal state.\n     */\n    _clearKernelState() {\n        this._kernelSession = '';\n        this._pendingMessages = [];\n        this._futures.forEach(future => {\n            future.dispose();\n        });\n        this._comms.forEach(comm => {\n            comm.dispose();\n        });\n        this._msgChain = Promise.resolve();\n        this._futures = new Map();\n        this._comms = new Map();\n        this._displayIdToParentIds.clear();\n        this._msgIdToDisplayIds.clear();\n    }\n    /**\n     * Check to make sure it is okay to proceed to handle a message.\n     *\n     * #### Notes\n     * Because we handle messages asynchronously, before a message is handled the\n     * kernel might be disposed or restarted (and have a different session id).\n     * This function throws an error in each of these cases. This is meant to be\n     * called at the start of an asynchronous message handler to cancel message\n     * processing if the message no longer is valid.\n     */\n    _assertCurrentMessage(msg) {\n        this._errorIfDisposed();\n        if (msg.header.session !== this._kernelSession) {\n            throw new Error(`Canceling handling of old message: ${msg.header.msg_type}`);\n        }\n    }\n    /**\n     * Handle a `comm_open` kernel message.\n     */\n    async _handleCommOpen(msg) {\n        this._assertCurrentMessage(msg);\n        const content = msg.content;\n        const comm = new comm_1.CommHandler(content.target_name, content.comm_id, this, () => {\n            this._unregisterComm(content.comm_id);\n        }, this.commsOverSubshells);\n        this._comms.set(content.comm_id, comm);\n        try {\n            const target = await Private.loadObject(content.target_name, content.target_module, this._targetRegistry);\n            await target(comm, msg);\n        }\n        catch (e) {\n            // Close the comm asynchronously. We cannot block message processing on\n            // kernel messages to wait for another kernel message.\n            comm.close();\n            console.error('Exception opening new comm');\n            throw e;\n        }\n    }\n    /**\n     * Handle 'comm_close' kernel message.\n     */\n    async _handleCommClose(msg) {\n        this._assertCurrentMessage(msg);\n        const content = msg.content;\n        const comm = this._comms.get(content.comm_id);\n        if (!comm) {\n            console.error('Comm not found for comm id ' + content.comm_id);\n            return;\n        }\n        this._unregisterComm(comm.commId);\n        const onClose = comm.onClose;\n        if (onClose) {\n            // tslint:disable-next-line:await-promise\n            await onClose(msg);\n        }\n        comm.dispose();\n    }\n    /**\n     * Handle a 'comm_msg' kernel message.\n     */\n    async _handleCommMsg(msg) {\n        this._assertCurrentMessage(msg);\n        const content = msg.content;\n        const comm = this._comms.get(content.comm_id);\n        if (!comm) {\n            return;\n        }\n        const onMsg = comm.onMsg;\n        if (onMsg) {\n            // tslint:disable-next-line:await-promise\n            await onMsg(msg);\n        }\n    }\n    /**\n     * Unregister a comm instance.\n     */\n    _unregisterComm(commId) {\n        this._comms.delete(commId);\n    }\n    /**\n     * Handle connection status changes.\n     */\n    _updateConnectionStatus(connectionStatus) {\n        if (this._connectionStatus === connectionStatus) {\n            return;\n        }\n        this._connectionStatus = connectionStatus;\n        // If we are not 'connecting', reset any reconnection attempts.\n        if (connectionStatus !== 'connecting') {\n            this._reconnectAttempt = 0;\n            clearTimeout(this._reconnectTimeout);\n        }\n        if (this.status !== 'dead') {\n            if (connectionStatus === 'connected') {\n                let restarting = this._kernelSession === RESTARTING_KERNEL_SESSION;\n                // Send a kernel info request to make sure we send at least one\n                // message to get kernel status back. Always request kernel info\n                // first, to get kernel status back and ensure iopub is fully\n                // established. If we are restarting, this message will skip the queue\n                // and be sent immediately.\n                let p = this.requestKernelInfo();\n                // Send any pending messages after the kernelInfo resolves, or after a\n                // timeout as a failsafe.\n                let sendPendingCalled = false;\n                let sendPendingOnce = () => {\n                    if (sendPendingCalled) {\n                        return;\n                    }\n                    sendPendingCalled = true;\n                    if (restarting && this._kernelSession === RESTARTING_KERNEL_SESSION) {\n                        // We were restarting and a message didn't arrive to set the\n                        // session, but we just assume the restart succeeded and send any\n                        // pending messages.\n                        // FIXME: it would be better to retry the kernel_info_request here\n                        this._kernelSession = '';\n                    }\n                    clearTimeout(timeoutHandle);\n                    if (this._pendingMessages.length > 0) {\n                        this._sendPending();\n                    }\n                };\n                void p.then(sendPendingOnce);\n                // FIXME: if sent while zmq subscriptions are not established,\n                // kernelInfo may not resolve, so use a timeout to ensure we don't hang forever.\n                // It may be preferable to retry kernelInfo rather than give up after one timeout.\n                let timeoutHandle = setTimeout(sendPendingOnce, KERNEL_INFO_TIMEOUT);\n            }\n            else {\n                // If the connection is down, then we do not know what is happening\n                // with the kernel, so set the status to unknown.\n                this._updateStatus('unknown');\n            }\n        }\n        // Notify others that the connection status changed.\n        this._connectionStatusChanged.emit(connectionStatus);\n    }\n    async _handleMessage(msg) {\n        var _a, _b;\n        let handled = false;\n        // Check to see if we have a display_id we need to reroute.\n        if (msg.parent_header &&\n            msg.channel === 'iopub' &&\n            (KernelMessage.isDisplayDataMsg(msg) ||\n                KernelMessage.isUpdateDisplayDataMsg(msg) ||\n                KernelMessage.isExecuteResultMsg(msg))) {\n            // display_data messages may re-route based on their display_id.\n            const transient = ((_a = msg.content.transient) !== null && _a !== void 0 ? _a : {});\n            const displayId = transient['display_id'];\n            if (displayId) {\n                handled = await this._handleDisplayId(displayId, msg);\n                // The await above may make this message out of date, so check again.\n                this._assertCurrentMessage(msg);\n            }\n        }\n        if (!handled && msg.parent_header) {\n            const parentHeader = msg.parent_header;\n            const future = (_b = this._futures) === null || _b === void 0 ? void 0 : _b.get(parentHeader.msg_id);\n            if (future) {\n                await future.handleMsg(msg);\n                this._assertCurrentMessage(msg);\n            }\n            else {\n                // If the message was sent by us and was not iopub, it is orphaned.\n                const owned = parentHeader.session === this.clientId;\n                if (msg.channel !== 'iopub' && owned) {\n                    this._unhandledMessage.emit(msg);\n                }\n            }\n        }\n        if (msg.channel === 'iopub') {\n            switch (msg.header.msg_type) {\n                case 'status': {\n                    // Updating the status is synchronous, and we call no async user code\n                    const executionState = msg.content\n                        .execution_state;\n                    if (executionState === 'restarting') {\n                        // The kernel has been auto-restarted by the server. After\n                        // processing for this message is completely done, we want to\n                        // handle this restart, so we don't await, but instead schedule\n                        // the work as a microtask (i.e., in a promise resolution). We\n                        // schedule this here so that it comes before any microtasks that\n                        // might be scheduled in the status signal emission below.\n                        void Promise.resolve().then(async () => {\n                            this._updateStatus('autorestarting');\n                            this._clearKernelState();\n                            // We must reconnect since the kernel connection information may have\n                            // changed, and the server only refreshes its zmq connection when a new\n                            // websocket is opened.\n                            await this.reconnect();\n                        });\n                    }\n                    this._updateStatus(executionState);\n                    break;\n                }\n                case 'comm_open':\n                    if (this.handleComms) {\n                        await this._handleCommOpen(msg);\n                    }\n                    break;\n                case 'comm_msg':\n                    if (this.handleComms) {\n                        await this._handleCommMsg(msg);\n                    }\n                    break;\n                case 'comm_close':\n                    if (this.handleComms) {\n                        await this._handleCommClose(msg);\n                    }\n                    break;\n                default:\n                    break;\n            }\n            // If the message was a status dead message, we might have disposed ourselves.\n            if (!this.isDisposed) {\n                this._assertCurrentMessage(msg);\n                // the message wouldn't be emitted if we were disposed anyway.\n                this._iopubMessage.emit(msg);\n            }\n        }\n    }\n    /**\n     * Attempt a connection if we have not exhausted connection attempts.\n     */\n    _reconnect() {\n        this._errorIfDisposed();\n        // Clear any existing reconnection attempt\n        clearTimeout(this._reconnectTimeout);\n        // Update the connection status and schedule a possible reconnection.\n        if (this._reconnectAttempt < this._reconnectLimit) {\n            this._updateConnectionStatus('connecting');\n            // The first reconnect attempt should happen immediately, and subsequent\n            // attempts should pick a random number in a growing range so that we\n            // don't overload the server with synchronized reconnection attempts\n            // across multiple kernels.\n            const timeout = Private.getRandomIntInclusive(0, 1e3 * (Math.pow(2, this._reconnectAttempt) - 1));\n            console.warn(`Connection lost, reconnecting in ${Math.floor(timeout / 1000)} seconds.`);\n            // Try reconnection with subprotocols if the server had supported them.\n            // Otherwise, try reconnection without subprotocols.\n            const useProtocols = this._selectedProtocol !== '' ? true : false;\n            this._reconnectTimeout = setTimeout(this._createSocket, timeout, useProtocols);\n            this._reconnectAttempt += 1;\n        }\n        else {\n            this._updateConnectionStatus('disconnected');\n        }\n        // Clear the websocket event handlers and the socket itself.\n        this._clearSocket();\n    }\n    /**\n     * Utility function to throw an error if this instance is disposed.\n     */\n    _errorIfDisposed() {\n        if (this.isDisposed) {\n            throw new Error('Kernel connection is disposed');\n        }\n    }\n    get hasPendingInput() {\n        return this._hasPendingInput;\n    }\n    set hasPendingInput(value) {\n        this._hasPendingInput = value;\n        this._pendingInput.emit(value);\n    }\n}\nexports.KernelConnection = KernelConnection;\n/**\n * A private namespace for the Kernel.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Log the current kernel status.\n     */\n    function logKernelStatus(kernel) {\n        switch (kernel.status) {\n            case 'idle':\n            case 'busy':\n            case 'unknown':\n                return;\n            default:\n                console.debug(`Kernel: ${kernel.status} (${kernel.id})`);\n                break;\n        }\n    }\n    Private.logKernelStatus = logKernelStatus;\n    /**\n     * Send a kernel message to the kernel and resolve the reply message.\n     */\n    async function handleShellMessage(kernel, msg) {\n        const future = kernel.sendShellMessage(msg, true);\n        return future.done;\n    }\n    Private.handleShellMessage = handleShellMessage;\n    /**\n     * Try to load an object from a module or a registry.\n     *\n     * Try to load an object from a module asynchronously if a module\n     * is specified, otherwise tries to load an object from the global\n     * registry, if the global registry is provided.\n     *\n     * #### Notes\n     * Loading a module uses requirejs.\n     */\n    function loadObject(name, moduleName, registry) {\n        return new Promise((resolve, reject) => {\n            // Try loading the module using require.js\n            if (moduleName) {\n                if (typeof requirejs === 'undefined') {\n                    throw new Error('requirejs not found');\n                }\n                requirejs([moduleName], (mod) => {\n                    if (mod[name] === void 0) {\n                        const msg = `Object '${name}' not found in module '${moduleName}'`;\n                        reject(new Error(msg));\n                    }\n                    else {\n                        resolve(mod[name]);\n                    }\n                }, reject);\n            }\n            else {\n                if (registry === null || registry === void 0 ? void 0 : registry[name]) {\n                    resolve(registry[name]);\n                }\n                else {\n                    reject(new Error(`Object '${name}' not found in registry`));\n                }\n            }\n        });\n    }\n    Private.loadObject = loadObject;\n    /**\n     * Get a random integer between min and max, inclusive of both.\n     *\n     * #### Notes\n     * From\n     * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#Getting_a_random_integer_between_two_values_inclusive\n     *\n     * From the MDN page: It might be tempting to use Math.round() to accomplish\n     * that, but doing so would cause your random numbers to follow a non-uniform\n     * distribution, which may not be acceptable for your needs.\n     */\n    function getRandomIntInclusive(min, max) {\n        min = Math.ceil(min);\n        max = Math.floor(max);\n        return Math.floor(Math.random() * (max - min + 1)) + min;\n    }\n    Private.getRandomIntInclusive = getRandomIntInclusive;\n})(Private || (Private = {}));\n//# sourceMappingURL=default.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KernelShellFutureHandler = exports.KernelControlFutureHandler = exports.KernelFutureHandler = void 0;\nconst coreutils_1 = require(\"@lumino/coreutils\");\nconst disposable_1 = require(\"@lumino/disposable\");\nconst KernelMessage = __importStar(require(\"./messages\"));\n/**\n * Implementation of a kernel future.\n *\n * If a reply is expected, the Future is considered done when both a `reply`\n * message and an `idle` iopub status message have been received.  Otherwise, it\n * is considered done when the `idle` status is received.\n *\n */\nclass KernelFutureHandler extends disposable_1.DisposableDelegate {\n    /**\n     * Construct a new KernelFutureHandler.\n     */\n    constructor(cb, msg, expectReply, disposeOnDone, kernel) {\n        super(cb);\n        this._status = 0;\n        this._stdin = Private.noOp;\n        this._iopub = Private.noOp;\n        this._reply = Private.noOp;\n        this._done = new coreutils_1.PromiseDelegate();\n        this._hooks = new Private.HookList();\n        this._disposeOnDone = true;\n        this._msg = msg;\n        if (!expectReply) {\n            this._setFlag(Private.KernelFutureFlag.GotReply);\n        }\n        this._disposeOnDone = disposeOnDone;\n        this._kernel = kernel;\n    }\n    /**\n     * Get the original outgoing message.\n     */\n    get msg() {\n        return this._msg;\n    }\n    /**\n     * A promise that resolves when the future is done.\n     */\n    get done() {\n        return this._done.promise;\n    }\n    /**\n     * Get the reply handler.\n     */\n    get onReply() {\n        return this._reply;\n    }\n    /**\n     * Set the reply handler.\n     */\n    set onReply(cb) {\n        this._reply = cb;\n    }\n    /**\n     * Get the iopub handler.\n     */\n    get onIOPub() {\n        return this._iopub;\n    }\n    /**\n     * Set the iopub handler.\n     */\n    set onIOPub(cb) {\n        this._iopub = cb;\n    }\n    /**\n     * Get the stdin handler.\n     */\n    get onStdin() {\n        return this._stdin;\n    }\n    /**\n     * Set the stdin handler.\n     */\n    set onStdin(cb) {\n        this._stdin = cb;\n    }\n    /**\n     * Register hook for IOPub messages.\n     *\n     * @param hook - The callback invoked for an IOPub message.\n     *\n     * #### Notes\n     * The IOPub hook system allows you to preempt the handlers for IOPub\n     * messages handled by the future.\n     *\n     * The most recently registered hook is run first. A hook can return a\n     * boolean or a promise to a boolean, in which case all kernel message\n     * processing pauses until the promise is fulfilled. If a hook return value\n     * resolves to false, any later hooks will not run and the function will\n     * return a promise resolving to false. If a hook throws an error, the error\n     * is logged to the console and the next hook is run. If a hook is\n     * registered during the hook processing, it will not run until the next\n     * message. If a hook is removed during the hook processing, it will be\n     * deactivated immediately.\n     */\n    registerMessageHook(hook) {\n        if (this.isDisposed) {\n            throw new Error('Kernel future is disposed');\n        }\n        this._hooks.add(hook);\n    }\n    /**\n     * Remove a hook for IOPub messages.\n     *\n     * @param hook - The hook to remove.\n     *\n     * #### Notes\n     * If a hook is removed during the hook processing, it will be deactivated immediately.\n     */\n    removeMessageHook(hook) {\n        if (this.isDisposed) {\n            return;\n        }\n        this._hooks.remove(hook);\n    }\n    /**\n     * Send an `input_reply` message.\n     */\n    sendInputReply(content, parent_header) {\n        this._kernel.sendInputReply(content, parent_header);\n    }\n    /**\n     * Dispose and unregister the future.\n     */\n    dispose() {\n        this._stdin = Private.noOp;\n        this._iopub = Private.noOp;\n        this._reply = Private.noOp;\n        this._hooks = null;\n        if (!this._testFlag(Private.KernelFutureFlag.IsDone)) {\n            // TODO: Uncomment the following logging code, and check for any tests that trigger it.\n            // let status = [];\n            // if (!this._testFlag(Private.KernelFutureFlag.GotIdle)) {\n            //   status.push('idle');\n            // }\n            // if (!this._testFlag(Private.KernelFutureFlag.GotReply)) {\n            //   status.push('reply');\n            // }\n            // console.warn(\n            //   `*************** DISPOSED BEFORE DONE: K${this._kernel.id.slice(\n            //     0,\n            //     6\n            //   )} M${this._msg.header.msg_id.slice(0, 6)} missing ${status.join(' ')}`\n            // );\n            // Reject the `done` promise, but catch its error here in case no one else\n            // is waiting for the promise to resolve. This prevents the error from\n            // being displayed in the console, but does not prevent it from being\n            // caught by a client who is waiting for it.\n            // Note: any `.then` and `.finally` attached to the `done` promise\n            // will cause the error to be thrown as uncaught anyways.\n            this._done.promise.catch(() => {\n                /* no-op */\n            });\n            this._done.reject(new Error(`Canceled future for ${this.msg.header.msg_type} message before replies were done`));\n        }\n        super.dispose();\n    }\n    /**\n     * Handle an incoming kernel message.\n     */\n    async handleMsg(msg) {\n        switch (msg.channel) {\n            case 'control':\n            case 'shell':\n                if (msg.channel === this.msg.channel &&\n                    msg.parent_header.msg_id === this.msg.header.msg_id) {\n                    await this._handleReply(msg);\n                }\n                break;\n            case 'stdin':\n                await this._handleStdin(msg);\n                break;\n            case 'iopub':\n                await this._handleIOPub(msg);\n                break;\n            default:\n                break;\n        }\n    }\n    async _handleReply(msg) {\n        const reply = this._reply;\n        if (reply) {\n            // tslint:disable-next-line:await-promise\n            await reply(msg);\n        }\n        this._replyMsg = msg;\n        this._setFlag(Private.KernelFutureFlag.GotReply);\n        if (this._testFlag(Private.KernelFutureFlag.GotIdle)) {\n            this._handleDone();\n        }\n    }\n    async _handleStdin(msg) {\n        this._kernel.hasPendingInput = true;\n        const stdin = this._stdin;\n        if (stdin) {\n            // tslint:disable-next-line:await-promise\n            await stdin(msg);\n        }\n    }\n    async _handleIOPub(msg) {\n        const process = await this._hooks.process(msg);\n        const iopub = this._iopub;\n        if (process && iopub) {\n            // tslint:disable-next-line:await-promise\n            await iopub(msg);\n        }\n        if (KernelMessage.isStatusMsg(msg) &&\n            msg.content.execution_state === 'idle') {\n            this._setFlag(Private.KernelFutureFlag.GotIdle);\n            if (this._testFlag(Private.KernelFutureFlag.GotReply)) {\n                this._handleDone();\n            }\n        }\n    }\n    _handleDone() {\n        if (this._testFlag(Private.KernelFutureFlag.IsDone)) {\n            return;\n        }\n        this._setFlag(Private.KernelFutureFlag.IsDone);\n        this._done.resolve(this._replyMsg);\n        if (this._disposeOnDone) {\n            this.dispose();\n        }\n    }\n    /**\n     * Test whether the given future flag is set.\n     */\n    _testFlag(flag) {\n        // tslint:disable-next-line\n        return (this._status & flag) !== 0;\n    }\n    /**\n     * Set the given future flag.\n     */\n    _setFlag(flag) {\n        // tslint:disable-next-line\n        this._status |= flag;\n    }\n}\nexports.KernelFutureHandler = KernelFutureHandler;\nclass KernelControlFutureHandler extends KernelFutureHandler {\n}\nexports.KernelControlFutureHandler = KernelControlFutureHandler;\nclass KernelShellFutureHandler extends KernelFutureHandler {\n}\nexports.KernelShellFutureHandler = KernelShellFutureHandler;\nvar Private;\n(function (Private) {\n    /**\n     * A no-op function.\n     */\n    Private.noOp = () => {\n        /* no-op */\n    };\n    /**\n     * Defer a computation.\n     *\n     * #### NOTES\n     * We can't just use requestAnimationFrame since it is not available in node.\n     * This implementation is from Phosphor:\n     * https://github.com/phosphorjs/phosphor/blob/e88e4321289bb1198f3098e7bda40736501f2ed8/tests/test-messaging/src/index.spec.ts#L63\n     */\n    const defer = (() => {\n        const ok = typeof requestAnimationFrame === 'function';\n        return ok ? requestAnimationFrame : setImmediate;\n    })();\n    class HookList {\n        constructor() {\n            this._hooks = [];\n        }\n        /**\n         * Register a hook.\n         *\n         * @param hook - The callback to register.\n         */\n        add(hook) {\n            this.remove(hook);\n            this._hooks.push(hook);\n        }\n        /**\n         * Remove a hook, if it exists in the hook list.\n         *\n         * @param hook - The callback to remove.\n         */\n        remove(hook) {\n            const index = this._hooks.indexOf(hook);\n            if (index >= 0) {\n                this._hooks[index] = null;\n                this._scheduleCompact();\n            }\n        }\n        /**\n         * Process a message through the hooks.\n         *\n         * @returns a promise resolving to false if any hook resolved as false,\n         * otherwise true\n         *\n         * #### Notes\n         * The most recently registered hook is run first. A hook can return a\n         * boolean or a promise to a boolean, in which case processing pauses until\n         * the promise is fulfilled. If a hook return value resolves to false, any\n         * later hooks will not run and the function will return a promise resolving\n         * to false. If a hook throws an error, the error is logged to the console\n         * and the next hook is run. If a hook is registered during the hook\n         * processing, it will not run until the next message. If a hook is removed\n         * during the hook processing, it will be deactivated immediately.\n         */\n        async process(msg) {\n            // Wait until we can start a new process run.\n            await this._processing;\n            // Start the next process run.\n            const processing = new coreutils_1.PromiseDelegate();\n            this._processing = processing.promise;\n            let continueHandling;\n            // Call the end hook (most recently-added) first. Starting at the end also\n            // guarantees that hooks added during the processing will not be run in\n            // this process run.\n            for (let i = this._hooks.length - 1; i >= 0; i--) {\n                const hook = this._hooks[i];\n                // If the hook has been removed, continue to the next one.\n                if (hook === null) {\n                    continue;\n                }\n                // Execute the hook and log any errors.\n                try {\n                    // tslint:disable-next-line:await-promise\n                    continueHandling = await hook(msg);\n                }\n                catch (err) {\n                    continueHandling = true;\n                    console.error(err);\n                }\n                // If the hook resolved to false, stop processing and return.\n                if (continueHandling === false) {\n                    processing.resolve(undefined);\n                    return false;\n                }\n            }\n            // All hooks returned true (or errored out), so return true.\n            processing.resolve(undefined);\n            return true;\n        }\n        /**\n         * Schedule a cleanup of the list, removing any hooks that have been nulled out.\n         */\n        _scheduleCompact() {\n            if (!this._compactScheduled) {\n                this._compactScheduled = true;\n                // Schedule a compaction in between processing runs. We do the\n                // scheduling in an animation frame to rate-limit our compactions. If we\n                // need to compact more frequently, we can change this to directly\n                // schedule the compaction.\n                defer(() => {\n                    this._processing = this._processing.then(() => {\n                        this._compactScheduled = false;\n                        this._compact();\n                    });\n                });\n            }\n        }\n        /**\n         * Compact the list, removing any nulls.\n         */\n        _compact() {\n            let numNulls = 0;\n            for (let i = 0, len = this._hooks.length; i < len; i++) {\n                const hook = this._hooks[i];\n                if (this._hooks[i] === null) {\n                    numNulls++;\n                }\n                else {\n                    this._hooks[i - numNulls] = hook;\n                }\n            }\n            this._hooks.length -= numNulls;\n        }\n    }\n    Private.HookList = HookList;\n    /**\n     * Bit flags for the kernel future state.\n     */\n    let KernelFutureFlag;\n    (function (KernelFutureFlag) {\n        KernelFutureFlag[KernelFutureFlag[\"GotReply\"] = 1] = \"GotReply\";\n        KernelFutureFlag[KernelFutureFlag[\"GotIdle\"] = 2] = \"GotIdle\";\n        KernelFutureFlag[KernelFutureFlag[\"IsDone\"] = 4] = \"IsDone\";\n        KernelFutureFlag[KernelFutureFlag[\"DisposeOnDone\"] = 8] = \"DisposeOnDone\";\n    })(KernelFutureFlag = Private.KernelFutureFlag || (Private.KernelFutureFlag = {}));\n})(Private || (Private = {}));\n//# sourceMappingURL=future.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CommsOverSubshells = exports.KernelConnection = exports.KernelAPI = exports.KernelMessage = exports.Kernel = void 0;\n// Namespace some of our modules for convenience and backwards compatibility.\nconst comm_1 = require(\"./comm\");\nObject.defineProperty(exports, \"CommsOverSubshells\", { enumerable: true, get: function () { return comm_1.CommsOverSubshells; } });\nconst Kernel = __importStar(require(\"./kernel\"));\nexports.Kernel = Kernel;\nconst KernelMessage = __importStar(require(\"./messages\"));\nexports.KernelMessage = KernelMessage;\nconst KernelAPI = __importStar(require(\"./restapi\"));\nexports.KernelAPI = KernelAPI;\nconst default_1 = require(\"./default\");\nObject.defineProperty(exports, \"KernelConnection\", { enumerable: true, get: function () { return default_1.KernelConnection; } });\n__exportStar(require(\"./manager\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=kernel.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KernelManager = void 0;\nconst polling_1 = require(\"@lumino/polling\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst __1 = require(\"..\");\nconst basemanager_1 = require(\"../basemanager\");\nconst restapi_1 = require(\"./restapi\");\nconst default_1 = require(\"./default\");\nconst restapi_2 = require(\"../kernelspec/restapi\");\n/**\n * An implementation of a kernel manager.\n */\nclass KernelManager extends basemanager_1.BaseManager {\n    /**\n     * Construct a new kernel manager.\n     *\n     * @param options - The default options for kernel.\n     */\n    constructor(options = {}) {\n        var _a, _b, _c;\n        super(options);\n        this._commsOverSubshells = __1.CommsOverSubshells.PerCommTarget;\n        this._isReady = false;\n        this._kernelConnections = new Set();\n        this._models = new Map();\n        this._runningChanged = new signaling_1.Signal(this);\n        this._connectionFailure = new signaling_1.Signal(this);\n        this._kernelAPIClient =\n            (_a = options.kernelAPIClient) !== null && _a !== void 0 ? _a : new restapi_1.KernelAPIClient({ serverSettings: this.serverSettings });\n        this._kernelSpecAPIClient =\n            (_b = options.kernelSpecAPIClient) !== null && _b !== void 0 ? _b : new restapi_2.KernelSpecAPIClient({\n                serverSettings: this.serverSettings\n            });\n        // Start model and specs polling with exponential backoff.\n        this._pollModels = new polling_1.Poll({\n            auto: false,\n            factory: () => this.requestRunning(),\n            frequency: {\n                interval: 10 * 1000,\n                backoff: true,\n                max: 300 * 1000\n            },\n            name: `@jupyterlab/services:KernelManager#models`,\n            standby: (_c = options.standby) !== null && _c !== void 0 ? _c : 'when-hidden'\n        });\n        // Initialize internal data.\n        this._ready = (async () => {\n            await this._pollModels.start();\n            await this._pollModels.tick;\n            this._isReady = true;\n        })();\n    }\n    /**\n     * Test whether the manager is ready.\n     */\n    get isReady() {\n        return this._isReady;\n    }\n    /**\n     * A promise that fulfills when the manager is ready.\n     */\n    get ready() {\n        return this._ready;\n    }\n    /**\n     * A signal emitted when the running kernels change.\n     */\n    get runningChanged() {\n        return this._runningChanged;\n    }\n    /**\n     * A signal emitted when there is a connection failure.\n     */\n    get connectionFailure() {\n        return this._connectionFailure;\n    }\n    /**\n     * Dispose of the resources used by the manager.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._models.clear();\n        this._kernelConnections.forEach(x => x.dispose());\n        this._pollModels.dispose();\n        super.dispose();\n    }\n    /**\n     * Connect to an existing kernel.\n     *\n     * @returns The new kernel connection.\n     *\n     * #### Notes\n     * This will use the manager's server settings and ignore any server\n     * settings passed in the options.\n     */\n    connectTo(options) {\n        var _a;\n        const { id } = options.model;\n        let handleComms = (_a = options.handleComms) !== null && _a !== void 0 ? _a : true;\n        // By default, handle comms only if no other kernel connection is.\n        if (options.handleComms === undefined) {\n            for (const kc of this._kernelConnections) {\n                if (kc.id === id && kc.handleComms) {\n                    handleComms = false;\n                    break;\n                }\n            }\n        }\n        options.commsOverSubshells = this._commsOverSubshells;\n        const kernelConnection = new default_1.KernelConnection({\n            handleComms,\n            ...options,\n            serverSettings: this.serverSettings,\n            kernelAPIClient: this._kernelAPIClient,\n            kernelSpecAPIClient: this._kernelSpecAPIClient\n        });\n        this._onStarted(kernelConnection);\n        if (!this._models.has(id)) {\n            // We trust the user to connect to an existing kernel, but we verify\n            // asynchronously.\n            void this.refreshRunning().catch(() => {\n                /* no-op */\n            });\n        }\n        return kernelConnection;\n    }\n    /**\n     * Create an iterator over the most recent running kernels.\n     *\n     * @returns A new iterator over the running kernels.\n     */\n    running() {\n        return this._models.values();\n    }\n    /**\n     * The number of running kernels.\n     */\n    get runningCount() {\n        return this._models.size;\n    }\n    /**\n     * Whether comms are running on subshell or not.\n     */\n    get commsOverSubshells() {\n        return this._commsOverSubshells;\n    }\n    set commsOverSubshells(value) {\n        this._commsOverSubshells = value;\n        for (const connection of this._kernelConnections) {\n            connection.commsOverSubshells = value;\n        }\n    }\n    /**\n     * Force a refresh of the running kernels.\n     *\n     * @returns A promise that resolves when the running list has been refreshed.\n     *\n     * #### Notes\n     * This is not typically meant to be called by the user, since the\n     * manager maintains its own internal state.\n     */\n    async refreshRunning() {\n        await this._pollModels.refresh();\n        await this._pollModels.tick;\n    }\n    /**\n     * Start a new kernel.\n     *\n     * @param createOptions - The kernel creation options\n     *\n     * @param connectOptions - The kernel connection options\n     *\n     * @returns A promise that resolves with the kernel connection.\n     *\n     * #### Notes\n     * The manager `serverSettings` will be always be used.\n     */\n    async startNew(createOptions = {}, connectOptions = {}) {\n        const model = await this._kernelAPIClient.startNew(createOptions);\n        return this.connectTo({\n            ...connectOptions,\n            model\n        });\n    }\n    /**\n     * Shut down a kernel by id.\n     *\n     * @param id - The id of the target kernel.\n     *\n     * @returns A promise that resolves when the operation is complete.\n     */\n    async shutdown(id) {\n        await this._kernelAPIClient.shutdown(id);\n        await this.refreshRunning();\n    }\n    /**\n     * Shut down all kernels.\n     *\n     * @returns A promise that resolves when all of the kernels are shut down.\n     */\n    async shutdownAll() {\n        // Update the list of models to make sure our list is current.\n        await this.refreshRunning();\n        // Shut down all models.\n        await Promise.all([...this._models.keys()].map(id => this._kernelAPIClient.shutdown(id)));\n        // Update the list of models to clear out our state.\n        await this.refreshRunning();\n    }\n    /**\n     * Find a kernel by id.\n     *\n     * @param id - The id of the target kernel.\n     *\n     * @returns A promise that resolves with the kernel's model.\n     */\n    async findById(id) {\n        if (this._models.has(id)) {\n            return this._models.get(id);\n        }\n        await this.refreshRunning();\n        return this._models.get(id);\n    }\n    /**\n     * Execute a request to the server to poll running kernels and update state.\n     */\n    async requestRunning() {\n        var _a, _b;\n        let models;\n        try {\n            models = await this._kernelAPIClient.listRunning();\n        }\n        catch (err) {\n            // Handle network errors, as well as cases where we are on a\n            // JupyterHub and the server is not running. JupyterHub returns a\n            // 503 (<2.0) or 424 (>2.0) in that case.\n            if (err instanceof __1.ServerConnection.NetworkError ||\n                ((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 503 ||\n                ((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) === 424) {\n                this._connectionFailure.emit(err);\n            }\n            throw err;\n        }\n        if (this.isDisposed) {\n            return;\n        }\n        if (this._models.size === models.length &&\n            models.every(model => {\n                const existing = this._models.get(model.id);\n                if (!existing) {\n                    return false;\n                }\n                return (existing.connections === model.connections &&\n                    existing.execution_state === model.execution_state &&\n                    existing.last_activity === model.last_activity &&\n                    existing.name === model.name &&\n                    existing.reason === model.reason &&\n                    existing.traceback === model.traceback);\n            })) {\n            // Identical models list (presuming models does not contain duplicate\n            // ids), so just return\n            return;\n        }\n        this._models = new Map(models.map(x => [x.id, x]));\n        // For any kernel connection to a kernel that doesn't exist, notify it of\n        // the shutdown.\n        this._kernelConnections.forEach(kc => {\n            if (!this._models.has(kc.id)) {\n                kc.handleShutdown();\n            }\n        });\n        this._runningChanged.emit(models);\n    }\n    /**\n     * Handle a kernel starting.\n     */\n    _onStarted(kernelConnection) {\n        this._kernelConnections.add(kernelConnection);\n        kernelConnection.statusChanged.connect(this._onStatusChanged, this);\n        kernelConnection.disposed.connect(this._onDisposed, this);\n    }\n    _onDisposed(kernelConnection) {\n        this._kernelConnections.delete(kernelConnection);\n        // A dispose emission could mean the server session is deleted, or that\n        // the kernel JS object is disposed and the kernel still exists on the\n        // server, so we refresh from the server to make sure we reflect the\n        // server state.\n        void this.refreshRunning().catch(() => {\n            /* no-op */\n        });\n    }\n    _onStatusChanged(kernelConnection, status) {\n        if (status === 'dead') {\n            // We asynchronously update our list of kernels, which asynchronously\n            // will dispose them. We do not want to immediately dispose them because\n            // there may be other signal handlers that want to be called.\n            void this.refreshRunning().catch(() => {\n                /* no-op */\n            });\n        }\n    }\n}\nexports.KernelManager = KernelManager;\n/**\n * The namespace for `KernelManager` class statics.\n */\n(function (KernelManager) {\n    /**\n     * A no-op kernel manager to be used when starting kernels.\n     */\n    class NoopManager extends KernelManager {\n        constructor() {\n            super(...arguments);\n            this._readyPromise = new Promise(() => {\n                /* no-op */\n            });\n        }\n        /**\n         * Whether the manager is active.\n         */\n        get isActive() {\n            return false;\n        }\n        /**\n         * Used for testing.\n         */\n        get parentReady() {\n            return super.ready;\n        }\n        /**\n         * Start a new kernel - throws an error since it is not supported.\n         */\n        async startNew(createOptions = {}, connectOptions = {}) {\n            return Promise.reject(new Error('Not implemented in no-op Kernel Manager'));\n        }\n        /**\n         * Connect to an existing kernel - throws an error since it is not supported.\n         */\n        connectTo(options) {\n            throw new Error('Not implemented in no-op Kernel Manager');\n        }\n        /**\n         * Shut down a kernel by id - throws an error since it is not supported.\n         */\n        async shutdown(id) {\n            return Promise.reject(new Error('Not implemented in no-op Kernel Manager'));\n        }\n        /**\n         * A promise that fulfills when the manager is ready (never).\n         */\n        get ready() {\n            return this.parentReady.then(() => this._readyPromise);\n        }\n        /**\n         * Execute a request to the server to poll running kernels and update state.\n         */\n        async requestRunning() {\n            return Promise.resolve();\n        }\n    }\n    KernelManager.NoopManager = NoopManager;\n})(KernelManager || (exports.KernelManager = KernelManager = {}));\n//# sourceMappingURL=manager.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.supportedKernelWebSocketProtocols = void 0;\nexports.createMessage = createMessage;\nexports.isStreamMsg = isStreamMsg;\nexports.isDisplayDataMsg = isDisplayDataMsg;\nexports.isUpdateDisplayDataMsg = isUpdateDisplayDataMsg;\nexports.isExecuteInputMsg = isExecuteInputMsg;\nexports.isExecuteResultMsg = isExecuteResultMsg;\nexports.isErrorMsg = isErrorMsg;\nexports.isStatusMsg = isStatusMsg;\nexports.isClearOutputMsg = isClearOutputMsg;\nexports.isDebugEventMsg = isDebugEventMsg;\nexports.isCommOpenMsg = isCommOpenMsg;\nexports.isCommCloseMsg = isCommCloseMsg;\nexports.isCommMsgMsg = isCommMsgMsg;\nexports.isInfoRequestMsg = isInfoRequestMsg;\nexports.isExecuteReplyMsg = isExecuteReplyMsg;\nexports.isDebugRequestMsg = isDebugRequestMsg;\nexports.isDebugReplyMsg = isDebugReplyMsg;\nexports.isInputRequestMsg = isInputRequestMsg;\nexports.isInputReplyMsg = isInputReplyMsg;\nconst coreutils_1 = require(\"@lumino/coreutils\");\nfunction createMessage(options) {\n    var _a, _b, _c, _d, _e, _f;\n    return {\n        buffers: (_a = options.buffers) !== null && _a !== void 0 ? _a : [],\n        channel: options.channel,\n        content: options.content,\n        header: {\n            date: new Date().toISOString(),\n            msg_id: (_b = options.msgId) !== null && _b !== void 0 ? _b : coreutils_1.UUID.uuid4(),\n            msg_type: options.msgType,\n            session: options.session,\n            username: (_c = options.username) !== null && _c !== void 0 ? _c : '',\n            subshell_id: (_d = options.subshellId) !== null && _d !== void 0 ? _d : null,\n            version: '5.2'\n        },\n        metadata: (_e = options.metadata) !== null && _e !== void 0 ? _e : {},\n        parent_header: (_f = options.parentHeader) !== null && _f !== void 0 ? _f : {}\n    };\n}\n/**\n * Test whether a kernel message is a `'stream'` message.\n */\nfunction isStreamMsg(msg) {\n    return msg.header.msg_type === 'stream';\n}\n/**\n * Test whether a kernel message is an `'display_data'` message.\n */\nfunction isDisplayDataMsg(msg) {\n    return msg.header.msg_type === 'display_data';\n}\n/**\n * Test whether a kernel message is an `'update_display_data'` message.\n */\nfunction isUpdateDisplayDataMsg(msg) {\n    return msg.header.msg_type === 'update_display_data';\n}\n/**\n * Test whether a kernel message is an `'execute_input'` message.\n */\nfunction isExecuteInputMsg(msg) {\n    return msg.header.msg_type === 'execute_input';\n}\n/**\n * Test whether a kernel message is an `'execute_result'` message.\n */\nfunction isExecuteResultMsg(msg) {\n    return msg.header.msg_type === 'execute_result';\n}\n/**\n * Test whether a kernel message is an `'error'` message.\n */\nfunction isErrorMsg(msg) {\n    return msg.header.msg_type === 'error';\n}\n/**\n * Test whether a kernel message is a `'status'` message.\n */\nfunction isStatusMsg(msg) {\n    return msg.header.msg_type === 'status';\n}\n/**\n * Test whether a kernel message is a `'clear_output'` message.\n */\nfunction isClearOutputMsg(msg) {\n    return msg.header.msg_type === 'clear_output';\n}\n/**\n * Test whether a kernel message is an experimental `'debug_event'` message.\n *\n * @hidden\n *\n * #### Notes\n * Debug messages are experimental messages that are not in the official\n * kernel message specification. As such, this is *NOT* considered\n * part of the public API, and may change without notice.\n */\nfunction isDebugEventMsg(msg) {\n    return msg.header.msg_type === 'debug_event';\n}\n/**\n * Test whether a kernel message is a `'comm_open'` message.\n */\nfunction isCommOpenMsg(msg) {\n    return msg.header.msg_type === 'comm_open';\n}\n/**\n * Test whether a kernel message is a `'comm_close'` message.\n */\nfunction isCommCloseMsg(msg) {\n    return msg.header.msg_type === 'comm_close';\n}\n/**\n * Test whether a kernel message is a `'comm_msg'` message.\n */\nfunction isCommMsgMsg(msg) {\n    return msg.header.msg_type === 'comm_msg';\n}\n/**\n * Test whether a kernel message is a `'kernel_info_request'` message.\n */\nfunction isInfoRequestMsg(msg) {\n    return msg.header.msg_type === 'kernel_info_request';\n}\n/**\n * Test whether a kernel message is an `'execute_reply'` message.\n */\nfunction isExecuteReplyMsg(msg) {\n    return msg.header.msg_type === 'execute_reply';\n}\n/**\n * Test whether a kernel message is an experimental `'debug_request'` message.\n *\n * @hidden\n *\n * #### Notes\n * Debug messages are experimental messages that are not in the official\n * kernel message specification. As such, this is *NOT* considered\n * part of the public API, and may change without notice.\n */\nfunction isDebugRequestMsg(msg) {\n    return msg.header.msg_type === 'debug_request';\n}\n/**\n * Test whether a kernel message is an experimental `'debug_reply'` message.\n *\n * @hidden\n *\n * #### Notes\n * Debug messages are experimental messages that are not in the official\n * kernel message specification. As such, this is *NOT* considered\n * part of the public API, and may change without notice.\n */\nfunction isDebugReplyMsg(msg) {\n    return msg.header.msg_type === 'debug_reply';\n}\n/**\n * Test whether a kernel message is an `'input_request'` message.\n */\nfunction isInputRequestMsg(msg) {\n    return msg.header.msg_type === 'input_request';\n}\n/**\n * Test whether a kernel message is an `'input_reply'` message.\n */\nfunction isInputReplyMsg(msg) {\n    return msg.header.msg_type === 'input_reply';\n}\n// ///////////////////////////////////////////////\n// Message (de)serialization\n// ///////////////////////////////////////////////\n/**\n * The list of supported kernel wire protocols over websocket.\n */\nvar supportedKernelWebSocketProtocols;\n(function (supportedKernelWebSocketProtocols) {\n    supportedKernelWebSocketProtocols[\"v1KernelWebsocketJupyterOrg\"] = \"v1.kernel.websocket.jupyter.org\";\n})(supportedKernelWebSocketProtocols || (exports.supportedKernelWebSocketProtocols = supportedKernelWebSocketProtocols = {}));\n//# sourceMappingURL=messages.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KernelAPIClient = exports.KERNEL_SERVICE_URL = void 0;\nexports.listRunning = listRunning;\nexports.startNew = startNew;\nexports.restartKernel = restartKernel;\nexports.interruptKernel = interruptKernel;\nexports.shutdownKernel = shutdownKernel;\nexports.getKernelModel = getKernelModel;\nconst serverconnection_1 = require(\"../serverconnection\");\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst validate_1 = require(\"./validate\");\n/**\n * The url for the kernel service.\n */\nexports.KERNEL_SERVICE_URL = 'api/kernels';\n/**\n * Fetch the running kernels.\n *\n * @param settings - The optional server settings.\n *\n * @returns A promise that resolves with the list of running kernels.\n *\n * #### Notes\n * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n *\n * The promise is fulfilled on a valid response and rejected otherwise.\n */\nasync function listRunning(settings = serverconnection_1.ServerConnection.makeSettings()) {\n    const url = coreutils_1.URLExt.join(settings.baseUrl, exports.KERNEL_SERVICE_URL);\n    const response = await serverconnection_1.ServerConnection.makeRequest(url, {}, settings);\n    if (response.status !== 200) {\n        const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n        throw err;\n    }\n    const data = await response.json();\n    (0, validate_1.validateModels)(data);\n    return data;\n}\n/**\n * Start a new kernel.\n *\n * @param options - The options used to create the kernel.\n *\n * @returns A promise that resolves with a kernel connection object.\n *\n * #### Notes\n * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n *\n * The promise is fulfilled on a valid response and rejected otherwise.\n */\nasync function startNew(options = {}, settings = serverconnection_1.ServerConnection.makeSettings()) {\n    const url = coreutils_1.URLExt.join(settings.baseUrl, exports.KERNEL_SERVICE_URL);\n    const init = {\n        method: 'POST',\n        body: JSON.stringify(options)\n    };\n    const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n    if (response.status !== 201) {\n        const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n        throw err;\n    }\n    const data = await response.json();\n    (0, validate_1.validateModel)(data);\n    return data;\n}\n/**\n * Restart a kernel.\n *\n * #### Notes\n * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n *\n * The promise is fulfilled on a valid response (and thus after a restart) and rejected otherwise.\n */\nasync function restartKernel(id, settings = serverconnection_1.ServerConnection.makeSettings()) {\n    const url = coreutils_1.URLExt.join(settings.baseUrl, exports.KERNEL_SERVICE_URL, encodeURIComponent(id), 'restart');\n    const init = { method: 'POST' };\n    const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n    if (response.status !== 200) {\n        const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n        throw err;\n    }\n    const data = await response.json();\n    (0, validate_1.validateModel)(data);\n}\n/**\n * Interrupt a kernel.\n *\n * #### Notes\n * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n *\n * The promise is fulfilled on a valid response and rejected otherwise.\n */\nasync function interruptKernel(id, settings = serverconnection_1.ServerConnection.makeSettings()) {\n    const url = coreutils_1.URLExt.join(settings.baseUrl, exports.KERNEL_SERVICE_URL, encodeURIComponent(id), 'interrupt');\n    const init = { method: 'POST' };\n    const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n    if (response.status !== 204) {\n        const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n        throw err;\n    }\n}\n/**\n * Shut down a kernel.\n *\n * @param id - The id of the running kernel.\n *\n * @param settings - The server settings for the request.\n *\n * @returns A promise that resolves when the kernel is shut down.\n *\n *\n * #### Notes\n * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n *\n * The promise is fulfilled on a valid response and rejected otherwise.\n */\nasync function shutdownKernel(id, settings = serverconnection_1.ServerConnection.makeSettings()) {\n    const url = coreutils_1.URLExt.join(settings.baseUrl, exports.KERNEL_SERVICE_URL, encodeURIComponent(id));\n    const init = { method: 'DELETE' };\n    const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n    if (response.status === 404) {\n        const msg = `The kernel \"${id}\" does not exist on the server`;\n        console.warn(msg);\n    }\n    else if (response.status !== 204) {\n        const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n        throw err;\n    }\n}\n/**\n * Get a full kernel model from the server by kernel id string.\n *\n * #### Notes\n * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n *\n * The promise is fulfilled on a valid response and rejected otherwise.\n */\nasync function getKernelModel(id, settings = serverconnection_1.ServerConnection.makeSettings()) {\n    const url = coreutils_1.URLExt.join(settings.baseUrl, exports.KERNEL_SERVICE_URL, encodeURIComponent(id));\n    const response = await serverconnection_1.ServerConnection.makeRequest(url, {}, settings);\n    if (response.status === 404) {\n        return undefined;\n    }\n    else if (response.status !== 200) {\n        const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n        throw err;\n    }\n    const data = await response.json();\n    (0, validate_1.validateModel)(data);\n    return data;\n}\n/**\n * The kernel API client.\n *\n * #### Notes\n * Use this class to interact with the Jupyter Server Kernel API.\n * This class adheres to the Jupyter Server API endpoints.\n */\nclass KernelAPIClient {\n    /**\n     * Create a new kernel API client.\n     *\n     * @param options - The options used to create the client.\n     */\n    constructor(options = {}) {\n        var _a;\n        this.serverSettings =\n            (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n    }\n    /**\n     * List the running kernels.\n     *\n     * @returns A promise that resolves with the list of running kernel models.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     */\n    async listRunning() {\n        return listRunning(this.serverSettings);\n    }\n    /**\n     * Get a kernel model.\n     *\n     * @param id - The id of the kernel of interest.\n     *\n     * @returns A promise that resolves with the kernel model.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     * If the kernel does not exist on the server, the promise is resolved with `undefined`.\n     */\n    async getModel(id) {\n        return getKernelModel(id, this.serverSettings);\n    }\n    /**\n     * Start a new kernel.\n     *\n     * @param options - The options used to create the kernel.\n     *\n     * @returns A promise that resolves with the kernel model.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     */\n    async startNew(options = {}) {\n        return startNew(options, this.serverSettings);\n    }\n    /**\n     * Restart a kernel.\n     *\n     * @param id - The id of the kernel to restart.\n     *\n     * @returns A promise that resolves when the kernel is restarted.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     */\n    async restart(id) {\n        return restartKernel(id, this.serverSettings);\n    }\n    /**\n     * Interrupt a kernel.\n     *\n     * @param id - The id of the kernel to interrupt.\n     *\n     * @returns A promise that resolves when the kernel is interrupted.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     */\n    async interrupt(id) {\n        return interruptKernel(id, this.serverSettings);\n    }\n    /**\n     * Shut down a kernel by id.\n     *\n     * @param id - The id of the kernel to shut down.\n     *\n     * @returns A promise that resolves when the kernel is shut down.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernels) and validates the response model.\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     */\n    async shutdown(id) {\n        return shutdownKernel(id, this.serverSettings);\n    }\n}\nexports.KernelAPIClient = KernelAPIClient;\n//# sourceMappingURL=restapi.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.serialize = serialize;\nexports.deserialize = deserialize;\nconst KernelMessage = __importStar(require(\"./messages\"));\n/**\n * Serialize a kernel message for transport.\n */\nfunction serialize(msg, protocol = '') {\n    switch (protocol) {\n        case KernelMessage.supportedKernelWebSocketProtocols\n            .v1KernelWebsocketJupyterOrg:\n            return Private.serializeV1KernelWebsocketJupyterOrg(msg);\n        default:\n            return Private.serializeDefault(msg);\n    }\n}\n/**\n * Deserialize and return the unpacked message.\n */\nfunction deserialize(data, protocol = '') {\n    switch (protocol) {\n        case KernelMessage.supportedKernelWebSocketProtocols\n            .v1KernelWebsocketJupyterOrg:\n            return Private.deserializeV1KernelWebsocketJupyterOrg(data);\n        default:\n            return Private.deserializeDefault(data);\n    }\n}\nvar Private;\n(function (Private) {\n    /**\n     * Deserialize and return the unpacked message.\n     * Protocol `v1.kernel.websocket.jupyter.org`\n     */\n    function deserializeV1KernelWebsocketJupyterOrg(binMsg) {\n        let msg;\n        const data = new DataView(binMsg);\n        const offsetNumber = Number(data.getBigUint64(0, true /* littleEndian */));\n        let offsets = [];\n        for (let i = 0; i < offsetNumber; i++) {\n            // WARNING: we cast our 64-bit unsigned int to a number!\n            // so offsets cannot index up to 2**64 bytes\n            offsets.push(Number(data.getBigUint64(8 * (i + 1), true /* littleEndian */)));\n        }\n        const decoder = new TextDecoder('utf8');\n        const channel = decoder.decode(binMsg.slice(offsets[0], offsets[1]));\n        const header = JSON.parse(decoder.decode(binMsg.slice(offsets[1], offsets[2])));\n        const parent_header = JSON.parse(decoder.decode(binMsg.slice(offsets[2], offsets[3])));\n        const metadata = JSON.parse(decoder.decode(binMsg.slice(offsets[3], offsets[4])));\n        const content = JSON.parse(decoder.decode(binMsg.slice(offsets[4], offsets[5])));\n        let buffers = [];\n        for (let i = 5; i < offsets.length - 1; i++) {\n            buffers.push(new DataView(binMsg.slice(offsets[i], offsets[i + 1])));\n        }\n        msg = {\n            channel,\n            header,\n            parent_header,\n            metadata,\n            content,\n            buffers\n        };\n        return msg;\n    }\n    Private.deserializeV1KernelWebsocketJupyterOrg = deserializeV1KernelWebsocketJupyterOrg;\n    /**\n     * Serialize a kernel message for transport.\n     * Protocol `v1.kernel.websocket.jupyter.org`\n     */\n    function serializeV1KernelWebsocketJupyterOrg(msg) {\n        const header = JSON.stringify(msg.header);\n        const parentHeader = msg.parent_header == null ? '{}' : JSON.stringify(msg.parent_header);\n        const metadata = JSON.stringify(msg.metadata);\n        const content = JSON.stringify(msg.content);\n        const buffers = msg.buffers !== undefined ? msg.buffers : [];\n        const offsetNumber = 1 + 4 + buffers.length + 1;\n        let offsets = [];\n        offsets.push(8 * (1 + offsetNumber));\n        offsets.push(msg.channel.length + offsets[offsets.length - 1]);\n        const encoder = new TextEncoder();\n        const channelEncoded = encoder.encode(msg.channel);\n        const headerEncoded = encoder.encode(header);\n        const parentHeaderEncoded = encoder.encode(parentHeader);\n        const metadataEncoded = encoder.encode(metadata);\n        const contentEncoded = encoder.encode(content);\n        const binMsgNoBuff = new Uint8Array(channelEncoded.length +\n            headerEncoded.length +\n            parentHeaderEncoded.length +\n            metadataEncoded.length +\n            contentEncoded.length);\n        binMsgNoBuff.set(channelEncoded);\n        binMsgNoBuff.set(headerEncoded, channelEncoded.length);\n        binMsgNoBuff.set(parentHeaderEncoded, channelEncoded.length + headerEncoded.length);\n        binMsgNoBuff.set(metadataEncoded, channelEncoded.length + headerEncoded.length + parentHeaderEncoded.length);\n        binMsgNoBuff.set(contentEncoded, channelEncoded.length +\n            headerEncoded.length +\n            parentHeaderEncoded.length +\n            metadataEncoded.length);\n        for (let length of [\n            headerEncoded.length,\n            parentHeaderEncoded.length,\n            metadataEncoded.length,\n            contentEncoded.length\n        ]) {\n            offsets.push(length + offsets[offsets.length - 1]);\n        }\n        let buffersByteLength = 0;\n        for (let buffer of buffers) {\n            let length = buffer.byteLength;\n            offsets.push(length + offsets[offsets.length - 1]);\n            buffersByteLength += length;\n        }\n        const binMsg = new Uint8Array(8 * (1 + offsetNumber) + binMsgNoBuff.byteLength + buffersByteLength);\n        const word = new ArrayBuffer(8);\n        const data = new DataView(word);\n        data.setBigUint64(0, BigInt(offsetNumber), true /* littleEndian */);\n        binMsg.set(new Uint8Array(word), 0);\n        for (let i = 0; i < offsets.length; i++) {\n            data.setBigUint64(0, BigInt(offsets[i]), true /* littleEndian */);\n            binMsg.set(new Uint8Array(word), 8 * (i + 1));\n        }\n        binMsg.set(binMsgNoBuff, offsets[0]);\n        for (let i = 0; i < buffers.length; i++) {\n            const buffer = buffers[i];\n            binMsg.set(new Uint8Array(ArrayBuffer.isView(buffer) ? buffer.buffer : buffer), offsets[5 + i]);\n        }\n        return binMsg.buffer;\n    }\n    Private.serializeV1KernelWebsocketJupyterOrg = serializeV1KernelWebsocketJupyterOrg;\n    /**\n     * Deserialize and return the unpacked message.\n     * Default protocol\n     *\n     * #### Notes\n     * Handles JSON blob strings and binary messages.\n     */\n    function deserializeDefault(data) {\n        let value;\n        if (typeof data === 'string') {\n            value = JSON.parse(data);\n        }\n        else {\n            value = deserializeBinary(data);\n        }\n        return value;\n    }\n    Private.deserializeDefault = deserializeDefault;\n    /**\n     * Serialize a kernel message for transport.\n     * Default protocol\n     *\n     * #### Notes\n     * If there is binary content, an `ArrayBuffer` is returned,\n     * otherwise the message is converted to a JSON string.\n     */\n    function serializeDefault(msg) {\n        var _a;\n        let value;\n        if ((_a = msg.buffers) === null || _a === void 0 ? void 0 : _a.length) {\n            value = serializeBinary(msg);\n        }\n        else {\n            value = JSON.stringify(msg);\n        }\n        return value;\n    }\n    Private.serializeDefault = serializeDefault;\n    /**\n     * Deserialize a binary message to a Kernel Message.\n     */\n    function deserializeBinary(buf) {\n        const data = new DataView(buf);\n        // read the header: 1 + nbufs 32b integers\n        const nbufs = data.getUint32(0);\n        const offsets = [];\n        if (nbufs < 2) {\n            throw new Error('Invalid incoming Kernel Message');\n        }\n        for (let i = 1; i <= nbufs; i++) {\n            offsets.push(data.getUint32(i * 4));\n        }\n        const jsonBytes = new Uint8Array(buf.slice(offsets[0], offsets[1]));\n        const msg = JSON.parse(new TextDecoder('utf8').decode(jsonBytes));\n        // the remaining chunks are stored as DataViews in msg.buffers\n        msg.buffers = [];\n        for (let i = 1; i < nbufs; i++) {\n            const start = offsets[i];\n            const stop = offsets[i + 1] || buf.byteLength;\n            msg.buffers.push(new DataView(buf.slice(start, stop)));\n        }\n        return msg;\n    }\n    /**\n     * Implement the binary serialization protocol.\n     *\n     * Serialize Kernel message to ArrayBuffer.\n     */\n    function serializeBinary(msg) {\n        const offsets = [];\n        const buffers = [];\n        const encoder = new TextEncoder();\n        let origBuffers = [];\n        if (msg.buffers !== undefined) {\n            origBuffers = msg.buffers;\n            delete msg['buffers'];\n        }\n        const jsonUtf8 = encoder.encode(JSON.stringify(msg));\n        buffers.push(jsonUtf8.buffer);\n        for (let i = 0; i < origBuffers.length; i++) {\n            // msg.buffers elements could be either views or ArrayBuffers\n            // buffers elements are ArrayBuffers\n            const b = origBuffers[i];\n            buffers.push(ArrayBuffer.isView(b) ? b.buffer : b);\n        }\n        const nbufs = buffers.length;\n        offsets.push(4 * (nbufs + 1));\n        for (let i = 0; i + 1 < buffers.length; i++) {\n            offsets.push(offsets[offsets.length - 1] + buffers[i].byteLength);\n        }\n        const msgBuf = new Uint8Array(offsets[offsets.length - 1] + buffers[buffers.length - 1].byteLength);\n        // use DataView.setUint32 for network byte-order\n        const view = new DataView(msgBuf.buffer);\n        // write nbufs to first 4 bytes\n        view.setUint32(0, nbufs);\n        // write offsets to next 4 * nbufs bytes\n        for (let i = 0; i < offsets.length; i++) {\n            view.setUint32(4 * (i + 1), offsets[i]);\n        }\n        // write all the buffers at their respective offsets\n        for (let i = 0; i < buffers.length; i++) {\n            msgBuf.set(new Uint8Array(buffers[i]), offsets[i]);\n        }\n        return msgBuf.buffer;\n    }\n})(Private || (Private = {}));\n//# sourceMappingURL=serialize.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateMessage = validateMessage;\nexports.validateModel = validateModel;\nexports.validateModels = validateModels;\nconst validate_1 = require(\"../validate\");\n/**\n * Required fields for `IKernelHeader`.\n */\nconst HEADER_FIELDS = ['username', 'version', 'session', 'msg_id', 'msg_type'];\n/**\n * Required fields and types for contents of various types of `kernel.IMessage`\n * messages on the iopub channel.\n */\nconst IOPUB_CONTENT_FIELDS = {\n    stream: { name: 'string', text: 'string' },\n    display_data: { data: 'object', metadata: 'object' },\n    execute_input: { code: 'string', execution_count: 'number' },\n    execute_result: {\n        execution_count: 'number',\n        data: 'object',\n        metadata: 'object'\n    },\n    error: { ename: 'string', evalue: 'string', traceback: 'object' },\n    status: {\n        execution_state: [\n            'string',\n            ['starting', 'idle', 'busy', 'restarting', 'dead']\n        ]\n    },\n    clear_output: { wait: 'boolean' },\n    comm_open: { comm_id: 'string', target_name: 'string', data: 'object' },\n    comm_msg: { comm_id: 'string', data: 'object' },\n    comm_close: { comm_id: 'string' },\n    shutdown_reply: { restart: 'boolean' } // Emitted by the IPython kernel.\n};\n/**\n * Validate the header of a kernel message.\n */\nfunction validateHeader(header) {\n    for (let i = 0; i < HEADER_FIELDS.length; i++) {\n        (0, validate_1.validateProperty)(header, HEADER_FIELDS[i], 'string');\n    }\n}\n/**\n * Validate a kernel message object.\n */\nfunction validateMessage(msg) {\n    (0, validate_1.validateProperty)(msg, 'metadata', 'object');\n    (0, validate_1.validateProperty)(msg, 'content', 'object');\n    (0, validate_1.validateProperty)(msg, 'channel', 'string');\n    validateHeader(msg.header);\n    if (msg.channel === 'iopub') {\n        validateIOPubContent(msg);\n    }\n}\n/**\n * Validate content an kernel message on the iopub channel.\n */\nfunction validateIOPubContent(msg) {\n    if (msg.channel === 'iopub') {\n        const fields = IOPUB_CONTENT_FIELDS[msg.header.msg_type];\n        // Check for unknown message type.\n        if (fields === undefined) {\n            return;\n        }\n        const names = Object.keys(fields);\n        const content = msg.content;\n        for (let i = 0; i < names.length; i++) {\n            let args = fields[names[i]];\n            if (!Array.isArray(args)) {\n                args = [args];\n            }\n            (0, validate_1.validateProperty)(content, names[i], ...args);\n        }\n    }\n}\n/**\n * Validate a `Kernel.IModel` object.\n */\nfunction validateModel(model) {\n    (0, validate_1.validateProperty)(model, 'name', 'string');\n    (0, validate_1.validateProperty)(model, 'id', 'string');\n}\n/**\n * Validate an array of `IModel` objects.\n */\nfunction validateModels(models) {\n    if (!Array.isArray(models)) {\n        throw new Error('Invalid kernel list');\n    }\n    models.forEach(d => validateModel(d));\n}\n//# sourceMappingURL=validate.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KernelSpecAPI = exports.KernelSpec = void 0;\nconst KernelSpec = __importStar(require(\"./kernelspec\"));\nexports.KernelSpec = KernelSpec;\nconst KernelSpecAPI = __importStar(require(\"./restapi\"));\nexports.KernelSpecAPI = KernelSpecAPI;\n__exportStar(require(\"./manager\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=kernelspec.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KernelSpecManager = void 0;\nconst coreutils_1 = require(\"@lumino/coreutils\");\nconst polling_1 = require(\"@lumino/polling\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst basemanager_1 = require(\"../basemanager\");\nconst restapi_1 = require(\"./restapi\");\n/**\n * An implementation of a kernel spec manager.\n */\nclass KernelSpecManager extends basemanager_1.BaseManager {\n    /**\n     * Construct a new kernel spec manager.\n     *\n     * @param options - The default options for kernel.\n     */\n    constructor(options = {}) {\n        var _a, _b;\n        super(options);\n        this._isReady = false;\n        this._connectionFailure = new signaling_1.Signal(this);\n        this._specs = null;\n        this._specsChanged = new signaling_1.Signal(this);\n        this._kernelSpecAPIClient =\n            (_a = options.kernelSpecAPIClient) !== null && _a !== void 0 ? _a : new restapi_1.KernelSpecAPIClient({ serverSettings: this.serverSettings });\n        // Initialize internal data.\n        this._ready = Promise.all([this.requestSpecs()])\n            .then(_ => undefined)\n            .catch(_ => undefined)\n            .then(() => {\n            if (this.isDisposed) {\n                return;\n            }\n            this._isReady = true;\n        });\n        this._pollSpecs = new polling_1.Poll({\n            auto: false,\n            factory: () => this.requestSpecs(),\n            frequency: {\n                interval: 61 * 1000,\n                backoff: true,\n                max: 300 * 1000\n            },\n            name: `@jupyterlab/services:KernelSpecManager#specs`,\n            standby: (_b = options.standby) !== null && _b !== void 0 ? _b : 'when-hidden'\n        });\n        void this.ready.then(() => {\n            void this._pollSpecs.start();\n        });\n    }\n    /**\n     * Test whether the manager is ready.\n     */\n    get isReady() {\n        return this._isReady;\n    }\n    /**\n     * A promise that fulfills when the manager is ready.\n     */\n    get ready() {\n        return this._ready;\n    }\n    /**\n     * Get the most recently fetched kernel specs.\n     */\n    get specs() {\n        return this._specs;\n    }\n    /**\n     * A signal emitted when the specs change.\n     */\n    get specsChanged() {\n        return this._specsChanged;\n    }\n    /**\n     * A signal emitted when there is a connection failure.\n     */\n    get connectionFailure() {\n        return this._connectionFailure;\n    }\n    /**\n     * Dispose of the resources used by the manager.\n     */\n    dispose() {\n        this._pollSpecs.dispose();\n        super.dispose();\n    }\n    /**\n     * Force a refresh of the specs from the server.\n     *\n     * @returns A promise that resolves when the specs are fetched.\n     *\n     * #### Notes\n     * This is intended to be called only in response to a user action,\n     * since the manager maintains its internal state.\n     */\n    async refreshSpecs() {\n        await this._pollSpecs.refresh();\n        await this._pollSpecs.tick;\n    }\n    /**\n     * Execute a request to the server to poll specs and update state.\n     */\n    async requestSpecs() {\n        const specs = await this._kernelSpecAPIClient.get();\n        if (this.isDisposed) {\n            return;\n        }\n        if (!coreutils_1.JSONExt.deepEqual(specs, this._specs)) {\n            this._specs = specs;\n            this._specsChanged.emit(specs);\n        }\n    }\n}\nexports.KernelSpecManager = KernelSpecManager;\n//# sourceMappingURL=manager.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KernelSpecAPIClient = void 0;\nexports.getSpecs = getSpecs;\nconst serverconnection_1 = require(\"../serverconnection\");\nconst validate_1 = require(\"./validate\");\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\n/**\n * The url for the kernelspec service.\n */\nconst KERNELSPEC_SERVICE_URL = 'api/kernelspecs';\n/**\n * Fetch all of the kernel specs.\n *\n * @param settings - The optional server settings.\n * @param useCache - Whether to use the cache. If false, always request.\n *\n * @returns A promise that resolves with the kernel specs.\n *\n * #### Notes\n * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernelspecs).\n */\nasync function getSpecs(settings = serverconnection_1.ServerConnection.makeSettings()) {\n    const url = coreutils_1.URLExt.join(settings.baseUrl, KERNELSPEC_SERVICE_URL);\n    const response = await serverconnection_1.ServerConnection.makeRequest(url, {}, settings);\n    if (response.status !== 200) {\n        const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n        throw err;\n    }\n    const data = await response.json();\n    return (0, validate_1.validateSpecModels)(data);\n}\n/**\n * The Kernel Spec API client.\n *\n * #### Notes\n * Use this class to interact with the Jupyter Server Kernel Spec API.\n * This class adheres to the Jupyter Server API endpoints.\n */\nclass KernelSpecAPIClient {\n    /**\n     * Create a new Kernel Spec API client.\n     *\n     * @param options - The options used to create the client.\n     */\n    constructor(options = {}) {\n        var _a;\n        this.serverSettings =\n            (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n    }\n    /**\n     * Fetch all of the kernel specs.\n     *\n     * @returns A promise that resolves with the kernel specs.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/kernelspecs).\n     */\n    async get() {\n        return getSpecs(this.serverSettings);\n    }\n}\nexports.KernelSpecAPIClient = KernelSpecAPIClient;\n//# sourceMappingURL=restapi.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateSpecModel = validateSpecModel;\nexports.validateSpecModels = validateSpecModels;\nconst validate_1 = require(\"../validate\");\n/**\n * Validate a server kernelspec model to a client side model.\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction validateSpecModel(data) {\n    const spec = data.spec;\n    if (!spec) {\n        throw new Error('Invalid kernel spec');\n    }\n    (0, validate_1.validateProperty)(data, 'name', 'string');\n    (0, validate_1.validateProperty)(data, 'resources', 'object');\n    (0, validate_1.validateProperty)(spec, 'language', 'string');\n    (0, validate_1.validateProperty)(spec, 'display_name', 'string');\n    (0, validate_1.validateProperty)(spec, 'argv', 'array');\n    let metadata = null;\n    if (spec.hasOwnProperty('metadata')) {\n        (0, validate_1.validateProperty)(spec, 'metadata', 'object');\n        metadata = spec.metadata;\n    }\n    let env = null;\n    if (spec.hasOwnProperty('env')) {\n        (0, validate_1.validateProperty)(spec, 'env', 'object');\n        env = spec.env;\n    }\n    return {\n        name: data.name,\n        resources: data.resources,\n        language: spec.language,\n        display_name: spec.display_name,\n        argv: spec.argv,\n        metadata,\n        env\n    };\n}\n/**\n * Validate a `Kernel.ISpecModels` object.\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction validateSpecModels(data) {\n    if (!data.hasOwnProperty('kernelspecs')) {\n        throw new Error('No kernelspecs found');\n    }\n    let keys = Object.keys(data.kernelspecs);\n    const kernelspecs = Object.create(null);\n    let defaultSpec = data.default;\n    for (let i = 0; i < keys.length; i++) {\n        const ks = data.kernelspecs[keys[i]];\n        try {\n            kernelspecs[keys[i]] = validateSpecModel(ks);\n        }\n        catch (err) {\n            // Remove the errant kernel spec.\n            console.warn(`Removing errant kernel spec: ${keys[i]}`);\n        }\n    }\n    keys = Object.keys(kernelspecs);\n    if (!keys.length) {\n        throw new Error('No valid kernelspecs found');\n    }\n    if (!defaultSpec ||\n        typeof defaultSpec !== 'string' ||\n        !(defaultSpec in kernelspecs)) {\n        defaultSpec = keys[0];\n        console.warn(`Default kernel not found, using '${keys[0]}'`);\n    }\n    return {\n        default: defaultSpec,\n        kernelspecs\n    };\n}\n//# sourceMappingURL=validate.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ServiceManager = void 0;\nconst signaling_1 = require(\"@lumino/signaling\");\nconst builder_1 = require(\"./builder\");\nconst contents_1 = require(\"./contents\");\nconst event_1 = require(\"./event\");\nconst kernel_1 = require(\"./kernel\");\nconst kernelspec_1 = require(\"./kernelspec\");\nconst nbconvert_1 = require(\"./nbconvert\");\nconst serverconnection_1 = require(\"./serverconnection\");\nconst session_1 = require(\"./session\");\nconst setting_1 = require(\"./setting\");\nconst terminal_1 = require(\"./terminal\");\nconst user_1 = require(\"./user\");\nconst workspace_1 = require(\"./workspace\");\n/**\n * A Jupyter services manager.\n */\nclass ServiceManager {\n    /**\n     * Construct a new services provider.\n     */\n    constructor(options = {}) {\n        var _a, _b;\n        this._isDisposed = false;\n        this._connectionFailure = new signaling_1.Signal(this);\n        this._isReady = false;\n        const defaultDrive = options.defaultDrive;\n        const serverSettings = (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n        const standby = (_b = options.standby) !== null && _b !== void 0 ? _b : 'when-hidden';\n        const normalized = { defaultDrive, serverSettings, standby };\n        this.serverSettings = serverSettings;\n        this.contents = options.contents || new contents_1.ContentsManager(normalized);\n        this.events = options.events || new event_1.EventManager(normalized);\n        this.kernels = options.kernels || new kernel_1.KernelManager(normalized);\n        this.sessions =\n            options.sessions ||\n                new session_1.SessionManager({\n                    ...normalized,\n                    kernelManager: this.kernels\n                });\n        this.settings = options.settings || new setting_1.SettingManager(normalized);\n        this.terminals = options.terminals || new terminal_1.TerminalManager(normalized);\n        this.builder = options.builder || new builder_1.BuildManager(normalized);\n        this.workspaces = options.workspaces || new workspace_1.WorkspaceManager(normalized);\n        this.nbconvert = options.nbconvert || new nbconvert_1.NbConvertManager(normalized);\n        this.kernelspecs = options.kernelspecs || new kernelspec_1.KernelSpecManager(normalized);\n        this.user = options.user || new user_1.UserManager(normalized);\n        // Proxy all connection failures from the individual service managers.\n        this.kernelspecs.connectionFailure.connect(this._onConnectionFailure, this);\n        this.sessions.connectionFailure.connect(this._onConnectionFailure, this);\n        this.terminals.connectionFailure.connect(this._onConnectionFailure, this);\n        // Define promises that need to be resolved before service manager is ready.\n        const readyList = [this.sessions.ready, this.kernelspecs.ready];\n        if (this.terminals.isAvailable()) {\n            readyList.push(this.terminals.ready);\n        }\n        this._readyPromise = Promise.all(readyList).then(() => {\n            this._isReady = true;\n        });\n    }\n    /**\n     * A signal emitted when there is a connection failure with the kernel.\n     */\n    get connectionFailure() {\n        return this._connectionFailure;\n    }\n    /**\n     * Test whether the service manager is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources used by the manager.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        signaling_1.Signal.clearData(this);\n        this.contents.dispose();\n        this.events.dispose();\n        this.sessions.dispose();\n        this.terminals.dispose();\n    }\n    /**\n     * Test whether the manager is ready.\n     */\n    get isReady() {\n        return this._isReady;\n    }\n    /**\n     * A promise that fulfills when the manager is ready.\n     */\n    get ready() {\n        return this._readyPromise;\n    }\n    _onConnectionFailure(sender, err) {\n        this._connectionFailure.emit(err);\n    }\n}\nexports.ServiceManager = ServiceManager;\n//# sourceMappingURL=manager.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NbConvertManager = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst serverconnection_1 = require(\"../serverconnection\");\nconst coreutils_2 = require(\"@lumino/coreutils\");\n/**\n * The url for the lab nbconvert service.\n */\nconst NBCONVERT_SETTINGS_URL = 'api/nbconvert';\n/**\n * The nbconvert API service manager.\n */\nclass NbConvertManager {\n    /**\n     * Create a new nbconvert manager.\n     */\n    constructor(options = {}) {\n        var _a;\n        this._exportFormats = null;\n        this.serverSettings =\n            (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n    }\n    /**\n     * Fetch and cache the export formats from the expensive nbconvert handler.\n     */\n    async fetchExportFormats() {\n        this._requestingFormats = new coreutils_2.PromiseDelegate();\n        this._exportFormats = null;\n        const base = this.serverSettings.baseUrl;\n        const url = coreutils_1.URLExt.join(base, NBCONVERT_SETTINGS_URL);\n        const { serverSettings } = this;\n        const response = await serverconnection_1.ServerConnection.makeRequest(url, {}, serverSettings);\n        if (response.status !== 200) {\n            const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n            throw err;\n        }\n        const data = await response.json();\n        const exportList = {};\n        const keys = Object.keys(data);\n        keys.forEach(function (key) {\n            const mimeType = data[key].output_mimetype;\n            exportList[key] = { output_mimetype: mimeType };\n        });\n        this._exportFormats = exportList;\n        this._requestingFormats.resolve(exportList);\n        return exportList;\n    }\n    /**\n     * Get the list of export formats, preferring pre-cached ones.\n     */\n    async getExportFormats(force = true) {\n        if (this._requestingFormats) {\n            return this._requestingFormats.promise;\n        }\n        if (force || !this._exportFormats) {\n            return await this.fetchExportFormats();\n        }\n        return this._exportFormats;\n    }\n}\nexports.NbConvertManager = NbConvertManager;\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ServerConnection = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst serialize_1 = require(\"./kernel/serialize\");\nlet WEBSOCKET;\nif (typeof window === 'undefined') {\n    // Mangle the require statements so it does not get picked up in the\n    // browser assets.\n    WEBSOCKET = require('ws');\n}\nelse {\n    WEBSOCKET = WebSocket;\n}\n/**\n * The namespace for ServerConnection functions.\n *\n * #### Notes\n * This is only intended to manage communication with the Jupyter server.\n *\n * The default values can be used in a JupyterLab or Jupyter Notebook context.\n *\n * We use `token` authentication if available, falling back on an XSRF\n * cookie if one has been provided on the `document`.\n *\n * A content type of `'application/json'` is added when using authentication\n * and there is no body data to allow the server to prevent malicious forms.\n */\nvar ServerConnection;\n(function (ServerConnection) {\n    /**\n     * Create a settings object given a subset of options.\n     *\n     * @param options - An optional partial set of options.\n     *\n     * @returns The full settings object.\n     */\n    function makeSettings(options) {\n        return Private.makeSettings(options);\n    }\n    ServerConnection.makeSettings = makeSettings;\n    /**\n     * Make an request to the notebook server.\n     *\n     * @param url - The url for the request.\n     *\n     * @param init - The initialization options for the request.\n     *\n     * @param settings - The server settings to apply to the request.\n     *\n     * @returns a Promise that resolves with the response.\n     *\n     * @throws If the url of the request is not a notebook server url.\n     *\n     * #### Notes\n     * The `url` must start with `settings.baseUrl`.  The `init` settings are\n     * merged with `settings.init`, with `init` taking precedence.\n     * The headers in the two objects are not merged.\n     * If there is no body data, we set the content type to `application/json`\n     * because it is required by the Notebook server.\n     */\n    function makeRequest(url, init, settings) {\n        return Private.handleRequest(url, init, settings);\n    }\n    ServerConnection.makeRequest = makeRequest;\n    /**\n     * A wrapped error for a fetch response.\n     */\n    class ResponseError extends Error {\n        /**\n         * Create a ResponseError from a response, handling the traceback and message\n         * as appropriate.\n         *\n         * @param response The response object.\n         *\n         * @returns A promise that resolves with a `ResponseError` object.\n         */\n        static async create(response) {\n            try {\n                const data = await response.json();\n                const { message, traceback } = data;\n                if (traceback) {\n                    console.error(traceback);\n                }\n                return new ResponseError(response, message !== null && message !== void 0 ? message : ResponseError._defaultMessage(response), traceback !== null && traceback !== void 0 ? traceback : '');\n            }\n            catch (e) {\n                console.debug(e);\n                return new ResponseError(response);\n            }\n        }\n        /**\n         * Create a new response error.\n         */\n        constructor(response, message = ResponseError._defaultMessage(response), traceback = '') {\n            super(message);\n            this.response = response;\n            this.traceback = traceback;\n        }\n        static _defaultMessage(response) {\n            return `Invalid response: ${response.status} ${response.statusText}`;\n        }\n    }\n    ServerConnection.ResponseError = ResponseError;\n    /**\n     * A wrapped error for a network error.\n     */\n    class NetworkError extends TypeError {\n        /**\n         * Create a new network error.\n         */\n        constructor(original) {\n            super(original.message);\n            this.stack = original.stack;\n        }\n    }\n    ServerConnection.NetworkError = NetworkError;\n})(ServerConnection || (exports.ServerConnection = ServerConnection = {}));\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Handle the server connection settings, returning a new value.\n     */\n    function makeSettings(options = {}) {\n        var _a;\n        const pageBaseUrl = coreutils_1.PageConfig.getBaseUrl();\n        const pageWsUrl = coreutils_1.PageConfig.getWsUrl();\n        const baseUrl = coreutils_1.URLExt.normalize(options.baseUrl) || pageBaseUrl;\n        let wsUrl = options.wsUrl;\n        // Prefer the default wsUrl if we are using the default baseUrl.\n        if (!wsUrl && baseUrl === pageBaseUrl) {\n            wsUrl = pageWsUrl;\n        }\n        // Otherwise convert the baseUrl to a wsUrl if possible.\n        if (!wsUrl && baseUrl.indexOf('http') === 0) {\n            wsUrl = 'ws' + baseUrl.slice(4);\n        }\n        // Otherwise fall back on the default wsUrl.\n        wsUrl = wsUrl !== null && wsUrl !== void 0 ? wsUrl : pageWsUrl;\n        const appendTokenConfig = coreutils_1.PageConfig.getOption('appendToken').toLowerCase();\n        let appendToken;\n        if (appendTokenConfig === '') {\n            appendToken =\n                typeof window === 'undefined' ||\n                    (typeof process !== 'undefined' &&\n                        ((_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a.JEST_WORKER_ID) !== undefined) ||\n                    coreutils_1.URLExt.getHostName(pageBaseUrl) !== coreutils_1.URLExt.getHostName(wsUrl);\n        }\n        else {\n            appendToken = appendTokenConfig === 'true';\n        }\n        return {\n            init: { cache: 'no-store', credentials: 'same-origin' },\n            fetch,\n            Headers,\n            Request,\n            WebSocket: WEBSOCKET,\n            token: coreutils_1.PageConfig.getToken(),\n            appUrl: coreutils_1.PageConfig.getOption('appUrl'),\n            appendToken,\n            serializer: { serialize: serialize_1.serialize, deserialize: serialize_1.deserialize },\n            ...options,\n            baseUrl,\n            wsUrl\n        };\n    }\n    Private.makeSettings = makeSettings;\n    /**\n     * Handle a request.\n     *\n     * @param url - The url for the request.\n     *\n     * @param init - The overrides for the request init.\n     *\n     * @param settings - The settings object for the request.\n     *\n     * #### Notes\n     * The `url` must start with `settings.baseUrl`.  The `init` settings\n     * take precedence over `settings.init`.\n     */\n    function handleRequest(url, init, settings) {\n        var _a;\n        // Handle notebook server requests.\n        if (url.indexOf(settings.baseUrl) !== 0) {\n            throw new Error('Can only be used for notebook server requests');\n        }\n        // Use explicit cache buster when `no-store` is set since\n        // not all browsers use it properly.\n        const cache = (_a = init.cache) !== null && _a !== void 0 ? _a : settings.init.cache;\n        if (cache === 'no-store') {\n            // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Bypassing_the_cache\n            url += (/\\?/.test(url) ? '&' : '?') + new Date().getTime();\n        }\n        const request = new settings.Request(url, { ...settings.init, ...init });\n        // Handle authentication. Authentication can be overdetermined by\n        // settings token and XSRF token.\n        let authenticated = false;\n        if (settings.token) {\n            authenticated = true;\n            request.headers.append('Authorization', `token ${settings.token}`);\n        }\n        if (typeof document !== 'undefined') {\n            const xsrfToken = getCookie('_xsrf');\n            if (xsrfToken !== undefined) {\n                authenticated = true;\n                request.headers.append('X-XSRFToken', xsrfToken);\n            }\n        }\n        // Set the content type if there is no given data and we are\n        // using an authenticated connection.\n        if (!request.headers.has('Content-Type') && authenticated) {\n            request.headers.set('Content-Type', 'application/json');\n        }\n        // Use `call` to avoid a `TypeError` in the browser.\n        return settings.fetch.call(null, request).catch((e) => {\n            // Convert the TypeError into a more specific error.\n            throw new ServerConnection.NetworkError(e);\n        });\n        // TODO: *this* is probably where we need a system-wide connectionFailure\n        // signal we can hook into.\n    }\n    Private.handleRequest = handleRequest;\n    /**\n     * Get a cookie from the document.\n     */\n    function getCookie(name) {\n        // From http://www.tornadoweb.org/en/stable/guide/security.html\n        let cookie = '';\n        try {\n            cookie = document.cookie;\n        }\n        catch (e) {\n            // e.g. SecurityError in case of CSP Sandbox\n            return;\n        }\n        const matches = cookie.match('\\\\b' + name + '=([^;]*)\\\\b');\n        return matches === null || matches === void 0 ? void 0 : matches[1];\n    }\n})(Private || (Private = {}));\n//# sourceMappingURL=serverconnection.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SessionConnection = void 0;\nconst signaling_1 = require(\"@lumino/signaling\");\nconst __1 = require(\"..\");\nconst coreutils_1 = require(\"@lumino/coreutils\");\nconst restapi_1 = require(\"./restapi\");\n/**\n * Session object for accessing the session REST api. The session\n * should be used to start kernels and then shut them down -- for\n * all other kernel operations, the kernel object should be used.\n */\nclass SessionConnection {\n    /**\n     * Construct a new session.\n     */\n    constructor(options) {\n        var _a, _b, _c, _d, _e;\n        this._id = '';\n        this._path = '';\n        this._name = '';\n        this._type = '';\n        this._kernel = null;\n        this._isDisposed = false;\n        this._disposed = new signaling_1.Signal(this);\n        this._kernelChanged = new signaling_1.Signal(this);\n        this._statusChanged = new signaling_1.Signal(this);\n        this._connectionStatusChanged = new signaling_1.Signal(this);\n        this._pendingInput = new signaling_1.Signal(this);\n        this._iopubMessage = new signaling_1.Signal(this);\n        this._unhandledMessage = new signaling_1.Signal(this);\n        this._anyMessage = new signaling_1.Signal(this);\n        this._propertyChanged = new signaling_1.Signal(this);\n        this._id = options.model.id;\n        this._name = options.model.name;\n        this._path = options.model.path;\n        this._type = options.model.type;\n        this._username = (_a = options.username) !== null && _a !== void 0 ? _a : '';\n        this._clientId = (_b = options.clientId) !== null && _b !== void 0 ? _b : coreutils_1.UUID.uuid4();\n        this._connectToKernel = options.connectToKernel;\n        this._kernelConnectionOptions = (_c = options.kernelConnectionOptions) !== null && _c !== void 0 ? _c : {};\n        this.serverSettings =\n            (_d = options.serverSettings) !== null && _d !== void 0 ? _d : __1.ServerConnection.makeSettings();\n        this._sessionAPIClient =\n            (_e = options.sessionAPIClient) !== null && _e !== void 0 ? _e : new restapi_1.SessionAPIClient({ serverSettings: this.serverSettings });\n        this.setupKernel(options.model.kernel);\n    }\n    /**\n     * A signal emitted when the session is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * A signal emitted when the kernel changes.\n     */\n    get kernelChanged() {\n        return this._kernelChanged;\n    }\n    /**\n     * A signal proxied from the connection about the kernel status.\n     */\n    get statusChanged() {\n        return this._statusChanged;\n    }\n    /**\n     * A signal proxied from the kernel about the connection status.\n     */\n    get connectionStatusChanged() {\n        return this._connectionStatusChanged;\n    }\n    /**\n     * A signal proxied from the kernel pending input.\n     */\n    get pendingInput() {\n        return this._pendingInput;\n    }\n    /**\n     * A signal proxied from the kernel about iopub kernel messages.\n     */\n    get iopubMessage() {\n        return this._iopubMessage;\n    }\n    /**\n     * A signal proxied from the kernel for an unhandled kernel message.\n     */\n    get unhandledMessage() {\n        return this._unhandledMessage;\n    }\n    /**\n     * A signal proxied from the kernel emitted for any kernel message.\n     *\n     * #### Notes\n     * The behavior is undefined if the message is modified during message\n     * handling. As such, it should be treated as read-only.\n     */\n    get anyMessage() {\n        return this._anyMessage;\n    }\n    /**\n     * A signal emitted when a session property changes.\n     */\n    get propertyChanged() {\n        return this._propertyChanged;\n    }\n    /**\n     * Get the session id.\n     */\n    get id() {\n        return this._id;\n    }\n    /**\n     * Get the session kernel connection object.\n     *\n     * #### Notes\n     * This is a read-only property, and can be altered by [changeKernel].\n     */\n    get kernel() {\n        return this._kernel;\n    }\n    /**\n     * Get the session path.\n     */\n    get path() {\n        return this._path;\n    }\n    /**\n     * Get the session type.\n     */\n    get type() {\n        return this._type;\n    }\n    /**\n     * Get the session name.\n     */\n    get name() {\n        return this._name;\n    }\n    /**\n     * Get the model associated with the session.\n     */\n    get model() {\n        return {\n            id: this.id,\n            kernel: this.kernel && { id: this.kernel.id, name: this.kernel.name },\n            path: this._path,\n            type: this._type,\n            name: this._name\n        };\n    }\n    /**\n     * Test whether the session has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Update the session based on a session model from the server.\n     *\n     * #### Notes\n     * This only updates this session connection instance. Use `setPath`,\n     * `setName`, `setType`, and `changeKernel` to change the session values on\n     * the server.\n     */\n    update(model) {\n        const oldModel = this.model;\n        this._path = model.path;\n        this._name = model.name;\n        this._type = model.type;\n        if ((this._kernel === null && model.kernel !== null) ||\n            (this._kernel !== null && model.kernel === null) ||\n            (this._kernel !== null &&\n                model.kernel !== null &&\n                this._kernel.id !== model.kernel.id)) {\n            if (this._kernel !== null) {\n                this._kernel.dispose();\n            }\n            const oldValue = this._kernel || null;\n            this.setupKernel(model.kernel);\n            const newValue = this._kernel || null;\n            this._kernelChanged.emit({ name: 'kernel', oldValue, newValue });\n        }\n        this._handleModelChange(oldModel);\n    }\n    /**\n     * Dispose of the resources held by the session.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._disposed.emit();\n        if (this._kernel) {\n            this._kernel.dispose();\n            const oldValue = this._kernel;\n            this._kernel = null;\n            const newValue = this._kernel;\n            this._kernelChanged.emit({ name: 'kernel', oldValue, newValue });\n        }\n        signaling_1.Signal.clearData(this);\n    }\n    /**\n     * Change the session path.\n     *\n     * @param path - The new session path.\n     *\n     * @returns A promise that resolves when the session has renamed.\n     *\n     * #### Notes\n     * This uses the Jupyter REST API, and the response is validated.\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     */\n    async setPath(path) {\n        if (this.isDisposed) {\n            throw new Error('Session is disposed');\n        }\n        await this._patch({ path });\n    }\n    /**\n     * Change the session name.\n     */\n    async setName(name) {\n        if (this.isDisposed) {\n            throw new Error('Session is disposed');\n        }\n        await this._patch({ name });\n    }\n    /**\n     * Change the session type.\n     */\n    async setType(type) {\n        if (this.isDisposed) {\n            throw new Error('Session is disposed');\n        }\n        await this._patch({ type });\n    }\n    /**\n     * Change the kernel.\n     *\n     * @param options - The name or id of the new kernel.\n     *\n     * #### Notes\n     * This shuts down the existing kernel and creates a new kernel,\n     * keeping the existing session ID and session path.\n     */\n    async changeKernel(options) {\n        if (this.isDisposed) {\n            throw new Error('Session is disposed');\n        }\n        await this._patch({ kernel: options });\n        return this.kernel;\n    }\n    /**\n     * Kill the kernel and shutdown the session.\n     *\n     * @returns - The promise fulfilled on a valid response from the server.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/sessions), and validates the response.\n     * Disposes of the session and emits a [sessionDied] signal on success.\n     */\n    async shutdown() {\n        if (this.isDisposed) {\n            throw new Error('Session is disposed');\n        }\n        await this._sessionAPIClient.shutdown(this.id);\n        this.dispose();\n    }\n    /**\n     * Create a new kernel connection and connect to its signals.\n     *\n     * #### Notes\n     * This method is not meant to be subclassed.\n     */\n    setupKernel(model) {\n        if (model === null) {\n            this._kernel = null;\n            return;\n        }\n        const kc = this._connectToKernel({\n            ...this._kernelConnectionOptions,\n            model,\n            username: this._username,\n            clientId: this._clientId,\n            serverSettings: this.serverSettings\n        });\n        this._kernel = kc;\n        kc.statusChanged.connect(this.onKernelStatus, this);\n        kc.connectionStatusChanged.connect(this.onKernelConnectionStatus, this);\n        kc.pendingInput.connect(this.onPendingInput, this);\n        kc.unhandledMessage.connect(this.onUnhandledMessage, this);\n        kc.iopubMessage.connect(this.onIOPubMessage, this);\n        kc.anyMessage.connect(this.onAnyMessage, this);\n    }\n    /**\n     * Handle to changes in the Kernel status.\n     */\n    onKernelStatus(sender, state) {\n        this._statusChanged.emit(state);\n    }\n    /**\n     * Handle to changes in the Kernel status.\n     */\n    onKernelConnectionStatus(sender, state) {\n        this._connectionStatusChanged.emit(state);\n    }\n    /**\n     * Handle a change in the pendingInput.\n     */\n    onPendingInput(sender, state) {\n        this._pendingInput.emit(state);\n    }\n    /**\n     * Handle iopub kernel messages.\n     */\n    onIOPubMessage(sender, msg) {\n        this._iopubMessage.emit(msg);\n    }\n    /**\n     * Handle unhandled kernel messages.\n     */\n    onUnhandledMessage(sender, msg) {\n        this._unhandledMessage.emit(msg);\n    }\n    /**\n     * Handle any kernel messages.\n     */\n    onAnyMessage(sender, args) {\n        this._anyMessage.emit(args);\n    }\n    /**\n     * Send a PATCH to the server, updating the session path or the kernel.\n     */\n    async _patch(body) {\n        const model = await this._sessionAPIClient.update({\n            ...body,\n            id: this._id\n        });\n        this.update(model);\n        return model;\n    }\n    /**\n     * Handle a change to the model.\n     */\n    _handleModelChange(oldModel) {\n        if (oldModel.name !== this._name) {\n            this._propertyChanged.emit('name');\n        }\n        if (oldModel.type !== this._type) {\n            this._propertyChanged.emit('type');\n        }\n        if (oldModel.path !== this._path) {\n            this._propertyChanged.emit('path');\n        }\n    }\n}\nexports.SessionConnection = SessionConnection;\n//# sourceMappingURL=default.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SessionAPI = exports.Session = void 0;\nconst Session = __importStar(require(\"./session\"));\nexports.Session = Session;\nconst SessionAPI = __importStar(require(\"./restapi\"));\nexports.SessionAPI = SessionAPI;\n__exportStar(require(\"./manager\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SessionManager = void 0;\nconst polling_1 = require(\"@lumino/polling\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst serverconnection_1 = require(\"../serverconnection\");\nconst basemanager_1 = require(\"../basemanager\");\nconst default_1 = require(\"./default\");\nconst restapi_1 = require(\"./restapi\");\n/**\n * An implementation of a session manager.\n */\nclass SessionManager extends basemanager_1.BaseManager {\n    /**\n     * Construct a new session manager.\n     *\n     * @param options - The default options for each session.\n     */\n    constructor(options) {\n        var _a, _b;\n        super(options);\n        this._isReady = false;\n        this._sessionConnections = new Set();\n        this._models = new Map();\n        this._runningChanged = new signaling_1.Signal(this);\n        this._connectionFailure = new signaling_1.Signal(this);\n        // We define these here so they bind `this` correctly\n        this._connectToKernel = (options) => {\n            return this._kernelManager.connectTo(options);\n        };\n        this._kernelManager = options.kernelManager;\n        this._sessionAPIClient =\n            (_a = options.sessionAPIClient) !== null && _a !== void 0 ? _a : new restapi_1.SessionAPIClient({ serverSettings: options.serverSettings });\n        // Start model polling with exponential backoff.\n        this._pollModels = new polling_1.Poll({\n            auto: false,\n            factory: () => this.requestRunning(),\n            frequency: {\n                interval: 10 * 1000,\n                backoff: true,\n                max: 300 * 1000\n            },\n            name: `@jupyterlab/services:SessionManager#models`,\n            standby: (_b = options.standby) !== null && _b !== void 0 ? _b : 'when-hidden'\n        });\n        // Initialize internal data.\n        this._ready = (async () => {\n            await this._pollModels.start();\n            await this._pollModels.tick;\n            if (this._kernelManager.isActive) {\n                await this._kernelManager.ready;\n            }\n            this._isReady = true;\n        })();\n    }\n    /**\n     * Test whether the manager is ready.\n     */\n    get isReady() {\n        return this._isReady;\n    }\n    /**\n     * A promise that fulfills when the manager is ready.\n     */\n    get ready() {\n        return this._ready;\n    }\n    /**\n     * A signal emitted when the running sessions change.\n     */\n    get runningChanged() {\n        return this._runningChanged;\n    }\n    /**\n     * A signal emitted when there is a connection failure.\n     */\n    get connectionFailure() {\n        return this._connectionFailure;\n    }\n    /**\n     * Dispose of the resources used by the manager.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._models.clear();\n        this._sessionConnections.forEach(x => x.dispose());\n        this._pollModels.dispose();\n        super.dispose();\n    }\n    /*\n     * Connect to a running session.  See also [[connectToSession]].\n     */\n    connectTo(options) {\n        const sessionConnection = new default_1.SessionConnection({\n            ...options,\n            connectToKernel: this._connectToKernel,\n            serverSettings: this.serverSettings,\n            sessionAPIClient: this._sessionAPIClient\n        });\n        this._onStarted(sessionConnection);\n        if (!this._models.has(options.model.id)) {\n            // We trust the user to connect to an existing session, but we verify\n            // asynchronously.\n            void this.refreshRunning().catch(() => {\n                /* no-op */\n            });\n        }\n        return sessionConnection;\n    }\n    /**\n     * Create an iterator over the most recent running sessions.\n     *\n     * @returns A new iterator over the running sessions.\n     */\n    running() {\n        return this._models.values();\n    }\n    /**\n     * Force a refresh of the running sessions.\n     *\n     * @returns A promise that with the list of running sessions.\n     *\n     * #### Notes\n     * This is not typically meant to be called by the user, since the\n     * manager maintains its own internal state.\n     */\n    async refreshRunning() {\n        await this._pollModels.refresh();\n        await this._pollModels.tick;\n    }\n    /**\n     * Start a new session.  See also [[startNewSession]].\n     *\n     * @param createOptions - Options for creating the session\n     *\n     * @param connectOptions - Options for connecting to the session\n     */\n    async startNew(createOptions, connectOptions = {}) {\n        const model = await this._sessionAPIClient.startNew(createOptions);\n        await this.refreshRunning();\n        return this.connectTo({ ...connectOptions, model });\n    }\n    /**\n     * Shut down a session by id.\n     */\n    async shutdown(id) {\n        await this._sessionAPIClient.shutdown(id);\n        await this.refreshRunning();\n    }\n    /**\n     * Shut down all sessions.\n     *\n     * @returns A promise that resolves when all of the kernels are shut down.\n     */\n    async shutdownAll() {\n        // Update the list of models to make sure our list is current.\n        await this.refreshRunning();\n        // Shut down all models.\n        await Promise.all([...this._models.keys()].map(id => this._sessionAPIClient.shutdown(id)));\n        // Update the list of models to clear out our state.\n        await this.refreshRunning();\n    }\n    /**\n     * Find a session associated with a path and stop it if it is the only session\n     * using that kernel.\n     *\n     * @param path - The path in question.\n     *\n     * @returns A promise that resolves when the relevant sessions are stopped.\n     */\n    async stopIfNeeded(path) {\n        try {\n            const sessions = await this._sessionAPIClient.listRunning();\n            const matches = sessions.filter(value => value.path === path);\n            if (matches.length === 1) {\n                const id = matches[0].id;\n                await this.shutdown(id);\n            }\n        }\n        catch (error) {\n            /* Always succeed. */\n        }\n    }\n    /**\n     * Find a session by id.\n     */\n    async findById(id) {\n        if (this._models.has(id)) {\n            return this._models.get(id);\n        }\n        await this.refreshRunning();\n        return this._models.get(id);\n    }\n    /**\n     * Find a session by path.\n     */\n    async findByPath(path) {\n        for (const m of this._models.values()) {\n            if (m.path === path) {\n                return m;\n            }\n        }\n        await this.refreshRunning();\n        for (const m of this._models.values()) {\n            if (m.path === path) {\n                return m;\n            }\n        }\n        return undefined;\n    }\n    /**\n     * Execute a request to the server to poll running kernels and update state.\n     */\n    async requestRunning() {\n        var _a, _b;\n        let models;\n        try {\n            models = await this._sessionAPIClient.listRunning();\n        }\n        catch (err) {\n            // Handle network errors, as well as cases where we are on a\n            // JupyterHub and the server is not running. JupyterHub returns a\n            // 503 (<2.0) or 424 (>2.0) in that case.\n            if (err instanceof serverconnection_1.ServerConnection.NetworkError ||\n                ((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 503 ||\n                ((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) === 424) {\n                this._connectionFailure.emit(err);\n            }\n            throw err;\n        }\n        if (this.isDisposed) {\n            return;\n        }\n        if (this._models.size === models.length &&\n            models.every(model => {\n                var _a, _b, _c, _d;\n                const existing = this._models.get(model.id);\n                if (!existing) {\n                    return false;\n                }\n                return (((_a = existing.kernel) === null || _a === void 0 ? void 0 : _a.id) === ((_b = model.kernel) === null || _b === void 0 ? void 0 : _b.id) &&\n                    ((_c = existing.kernel) === null || _c === void 0 ? void 0 : _c.name) === ((_d = model.kernel) === null || _d === void 0 ? void 0 : _d.name) &&\n                    existing.name === model.name &&\n                    existing.path === model.path &&\n                    existing.type === model.type);\n            })) {\n            // Identical models list (presuming models does not contain duplicate\n            // ids), so just return\n            return;\n        }\n        this._models = new Map(models.map(x => [x.id, x]));\n        this._sessionConnections.forEach(sc => {\n            if (this._models.has(sc.id)) {\n                sc.update(this._models.get(sc.id));\n            }\n            else {\n                sc.dispose();\n            }\n        });\n        this._runningChanged.emit(models);\n    }\n    /**\n     * Handle a session starting.\n     */\n    _onStarted(sessionConnection) {\n        this._sessionConnections.add(sessionConnection);\n        sessionConnection.disposed.connect(this._onDisposed, this);\n        sessionConnection.propertyChanged.connect(this._onChanged, this);\n        sessionConnection.kernelChanged.connect(this._onChanged, this);\n    }\n    _onDisposed(sessionConnection) {\n        this._sessionConnections.delete(sessionConnection);\n        // A session termination emission could mean the server session is deleted,\n        // or that the session JS object is disposed and the session still exists on\n        // the server, so we refresh from the server to make sure we reflect the\n        // server state.\n        void this.refreshRunning().catch(() => {\n            /* no-op */\n        });\n    }\n    _onChanged() {\n        void this.refreshRunning().catch(() => {\n            /* no-op */\n        });\n    }\n}\nexports.SessionManager = SessionManager;\n/**\n * The namespace for `SessionManager` class statics.\n */\n(function (SessionManager) {\n    /**\n     * A no-op session manager to be used when starting sessions is not supported.\n     */\n    class NoopManager extends SessionManager {\n        constructor() {\n            super(...arguments);\n            this._readyPromise = new Promise(() => {\n                /* no-op */\n            });\n        }\n        /**\n         * Whether the manager is active.\n         */\n        get isActive() {\n            return false;\n        }\n        /**\n         * Used for testing.\n         */\n        get parentReady() {\n            return super.ready;\n        }\n        /**\n         * Start a new session - throw an error since it is not supported.\n         */\n        async startNew(createOptions, connectOptions = {}) {\n            return Promise.reject(new Error('Not implemented in no-op Session Manager'));\n        }\n        /*\n         * Connect to a running session - throw an error since it is not supported.\n         */\n        connectTo(options) {\n            throw Error('Not implemented in no-op Session Manager');\n        }\n        /**\n         * A promise that fulfills when the manager is ready (never).\n         */\n        get ready() {\n            return this.parentReady.then(() => this._readyPromise);\n        }\n        /**\n         * Shut down a session by id - throw an error since it is not supported.\n         */\n        async shutdown(id) {\n            return Promise.reject(new Error('Not implemented in no-op Session Manager'));\n        }\n        /**\n         * Execute a request to the server to poll running sessions and update state.\n         */\n        async requestRunning() {\n            return Promise.resolve();\n        }\n    }\n    SessionManager.NoopManager = NoopManager;\n})(SessionManager || (exports.SessionManager = SessionManager = {}));\n//# sourceMappingURL=manager.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SessionAPIClient = exports.SESSION_SERVICE_URL = void 0;\nexports.listRunning = listRunning;\nexports.getSessionUrl = getSessionUrl;\nexports.shutdownSession = shutdownSession;\nexports.getSessionModel = getSessionModel;\nexports.startSession = startSession;\nexports.updateSession = updateSession;\nconst serverconnection_1 = require(\"../serverconnection\");\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst validate_1 = require(\"./validate\");\n/**\n * The url for the session service.\n */\nexports.SESSION_SERVICE_URL = 'api/sessions';\n/**\n * List the running sessions.\n */\nasync function listRunning(settings = serverconnection_1.ServerConnection.makeSettings()) {\n    const url = coreutils_1.URLExt.join(settings.baseUrl, exports.SESSION_SERVICE_URL);\n    const response = await serverconnection_1.ServerConnection.makeRequest(url, {}, settings);\n    if (response.status !== 200) {\n        const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n        throw err;\n    }\n    const data = await response.json();\n    if (!Array.isArray(data)) {\n        throw new Error('Invalid Session list');\n    }\n    data.forEach(m => {\n        (0, validate_1.updateLegacySessionModel)(m);\n        (0, validate_1.validateModel)(m);\n    });\n    return data;\n}\n/**\n * Get a session url.\n */\nfunction getSessionUrl(baseUrl, id) {\n    const servicesBase = coreutils_1.URLExt.join(baseUrl, exports.SESSION_SERVICE_URL);\n    const result = coreutils_1.URLExt.join(servicesBase, id);\n    if (!result.startsWith(servicesBase)) {\n        throw new Error('Can only be used for services requests');\n    }\n    return result;\n}\n/**\n * Shut down a session by id.\n */\nasync function shutdownSession(id, settings = serverconnection_1.ServerConnection.makeSettings()) {\n    var _a;\n    const url = getSessionUrl(settings.baseUrl, id);\n    const init = { method: 'DELETE' };\n    const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n    if (response.status === 404) {\n        const data = await response.json();\n        const msg = (_a = data.message) !== null && _a !== void 0 ? _a : `The session \"${id}\"\" does not exist on the server`;\n        console.warn(msg);\n    }\n    else if (response.status === 410) {\n        throw new serverconnection_1.ServerConnection.ResponseError(response, 'The kernel was deleted but the session was not');\n    }\n    else if (response.status !== 204) {\n        const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n        throw err;\n    }\n}\n/**\n * Get a full session model from the server by session id string.\n */\nasync function getSessionModel(id, settings = serverconnection_1.ServerConnection.makeSettings()) {\n    const url = getSessionUrl(settings.baseUrl, id);\n    const response = await serverconnection_1.ServerConnection.makeRequest(url, {}, settings);\n    if (response.status !== 200) {\n        const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n        throw err;\n    }\n    const data = await response.json();\n    (0, validate_1.updateLegacySessionModel)(data);\n    (0, validate_1.validateModel)(data);\n    return data;\n}\n/**\n * Create a new session, or return an existing session if the session path\n * already exists.\n */\nasync function startSession(options, settings = serverconnection_1.ServerConnection.makeSettings()) {\n    const url = coreutils_1.URLExt.join(settings.baseUrl, exports.SESSION_SERVICE_URL);\n    const init = {\n        method: 'POST',\n        body: JSON.stringify(options)\n    };\n    const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n    if (response.status !== 201) {\n        const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n        throw err;\n    }\n    const data = await response.json();\n    (0, validate_1.updateLegacySessionModel)(data);\n    (0, validate_1.validateModel)(data);\n    return data;\n}\n/**\n * Send a PATCH to the server, updating the session path or the kernel.\n */\nasync function updateSession(model, settings = serverconnection_1.ServerConnection.makeSettings()) {\n    const url = getSessionUrl(settings.baseUrl, model.id);\n    const init = {\n        method: 'PATCH',\n        body: JSON.stringify(model)\n    };\n    const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n    if (response.status !== 200) {\n        const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n        throw err;\n    }\n    const data = await response.json();\n    (0, validate_1.updateLegacySessionModel)(data);\n    (0, validate_1.validateModel)(data);\n    return data;\n}\n/**\n * The session API client.\n *\n * #### Notes\n * Use this class to interact with the Jupyter Server Session API.\n * This class adheres to the Jupyter Server API endpoints.\n */\nclass SessionAPIClient {\n    /**\n     * Create a new session API client.\n     *\n     * @param options - The options used to create the client.\n     */\n    constructor(options) {\n        var _a;\n        this.serverSettings =\n            (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n    }\n    /**\n     * List the running sessions.\n     *\n     * @returns A promise that resolves with the list of running session models.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/sessions) and validates the response model.\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     */\n    async listRunning() {\n        return listRunning(this.serverSettings);\n    }\n    /**\n     * Get a session model.\n     *\n     * @param id - The id of the session of interest.\n     *\n     * @returns A promise that resolves with the session model.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/sessions) and validates the response model.\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     */\n    async getModel(id) {\n        return getSessionModel(id, this.serverSettings);\n    }\n    /**\n     * Create a new session.\n     *\n     * @param options - The options used to create the session.\n     *\n     * @returns A promise that resolves with the session model.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/sessions) and validates the response model.\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     */\n    async startNew(options) {\n        return startSession(options, this.serverSettings);\n    }\n    /**\n     * Shut down a session by id.\n     *\n     * @param id - The id of the session to shut down.\n     *\n     * @returns A promise that resolves when the session is shut down.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/sessions) and validates the response model.\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     */\n    async shutdown(id) {\n        return shutdownSession(id, this.serverSettings);\n    }\n    /**\n     * Update a session by id.\n     *\n     * @param model - The session model to update.\n     *\n     * @returns A promise that resolves with the updated session model.\n     *\n     * #### Notes\n     * Uses the [Jupyter Server API](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/jupyter-server/jupyter_server/main/jupyter_server/services/api/api.yaml#!/sessions) and validates the response model.\n     *\n     * The promise is fulfilled on a valid response and rejected otherwise.\n     */\n    async update(model) {\n        return updateSession(model, this.serverSettings);\n    }\n}\nexports.SessionAPIClient = SessionAPIClient;\n//# sourceMappingURL=restapi.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=session.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateModel = validateModel;\nexports.updateLegacySessionModel = updateLegacySessionModel;\nexports.validateModels = validateModels;\nconst validate_1 = require(\"../kernel/validate\");\nconst validate_2 = require(\"../validate\");\n/**\n * Validate an `Session.IModel` object.\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction validateModel(data) {\n    (0, validate_2.validateProperty)(data, 'id', 'string');\n    (0, validate_2.validateProperty)(data, 'type', 'string');\n    (0, validate_2.validateProperty)(data, 'name', 'string');\n    (0, validate_2.validateProperty)(data, 'path', 'string');\n    (0, validate_2.validateProperty)(data, 'kernel', 'object');\n    (0, validate_1.validateModel)(data.kernel);\n}\n/**\n * Update model from legacy session data.\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction updateLegacySessionModel(data) {\n    if (data.path === undefined && data.notebook !== undefined) {\n        data.path = data.notebook.path;\n        data.type = 'notebook';\n        data.name = '';\n    }\n}\n/**\n * Validate an array of `Session.IModel` objects.\n */\nfunction validateModels(models) {\n    if (!Array.isArray(models)) {\n        throw new Error('Invalid session list');\n    }\n    models.forEach(d => validateModel(d));\n}\n//# sourceMappingURL=validate.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SettingManager = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst statedb_1 = require(\"@jupyterlab/statedb\");\nconst serverconnection_1 = require(\"../serverconnection\");\n/**\n * The url for the lab settings service.\n */\nconst SERVICE_SETTINGS_URL = 'api/settings';\n/**\n * The settings API service manager.\n */\nclass SettingManager extends statedb_1.DataConnector {\n    /**\n     * Create a new setting manager.\n     */\n    constructor(options = {}) {\n        var _a;\n        super();\n        this.serverSettings =\n            (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n    }\n    /**\n     * Fetch a plugin's settings.\n     *\n     * @param id - The plugin's ID.\n     *\n     * @returns A promise that resolves if successful.\n     */\n    async fetch(id) {\n        if (!id) {\n            throw new Error('Plugin `id` parameter is required for settings fetch.');\n        }\n        const { serverSettings } = this;\n        const { baseUrl, appUrl } = serverSettings;\n        const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n        const base = baseUrl + appUrl;\n        const url = Private.url(base, id);\n        const response = await makeRequest(url, {}, serverSettings);\n        if (response.status !== 200) {\n            const err = await ResponseError.create(response);\n            throw err;\n        }\n        // Assert what type the server response is returning.\n        return response.json();\n    }\n    /**\n     * Fetch the list of all plugin setting bundles.\n     *\n     * @returns A promise that resolves if successful.\n     */\n    async list(query) {\n        var _a, _b, _c, _d;\n        const { serverSettings } = this;\n        const { baseUrl, appUrl } = serverSettings;\n        const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n        const base = baseUrl + appUrl;\n        const url = Private.url(base, '', query === 'ids');\n        const response = await makeRequest(url, {}, serverSettings);\n        if (response.status !== 200) {\n            throw new ResponseError(response);\n        }\n        const json = await response.json();\n        const ids = (_b = (_a = json === null || json === void 0 ? void 0 : json['settings']) === null || _a === void 0 ? void 0 : _a.map((plugin) => plugin.id)) !== null && _b !== void 0 ? _b : [];\n        let values = [];\n        if (!query) {\n            values =\n                (_d = (_c = json === null || json === void 0 ? void 0 : json['settings']) === null || _c === void 0 ? void 0 : _c.map((plugin) => {\n                    plugin.data = { composite: {}, user: {} };\n                    return plugin;\n                })) !== null && _d !== void 0 ? _d : [];\n        }\n        return { ids, values };\n    }\n    /**\n     * Save a plugin's settings.\n     *\n     * @param id - The plugin's ID.\n     *\n     * @param raw - The user setting values as a raw string of JSON with comments.\n     *\n     * @returns A promise that resolves if successful.\n     */\n    async save(id, raw) {\n        const { serverSettings } = this;\n        const { baseUrl, appUrl } = serverSettings;\n        const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n        const base = baseUrl + appUrl;\n        const url = Private.url(base, id);\n        // NOTE: 'raw' is JSON5 (not valid JSON), so we encode it as a string in a valid JSON body\n        const init = { body: JSON.stringify({ raw }), method: 'PUT' };\n        const response = await makeRequest(url, init, serverSettings);\n        if (response.status !== 204) {\n            throw new ResponseError(response);\n        }\n    }\n}\nexports.SettingManager = SettingManager;\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Get the url for a plugin's settings.\n     */\n    function url(base, id, idsOnly) {\n        const idsOnlyParam = idsOnly\n            ? coreutils_1.URLExt.objectToQueryString({ ids_only: true })\n            : '';\n        const settingsBase = coreutils_1.URLExt.join(base, SERVICE_SETTINGS_URL);\n        const result = coreutils_1.URLExt.join(settingsBase, id);\n        if (!result.startsWith(settingsBase)) {\n            throw new Error('Can only be used for workspaces requests');\n        }\n        return `${result}${idsOnlyParam}`;\n    }\n    Private.url = url;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\"use strict\";\n/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = WebSocket;\n//# sourceMappingURL=ws.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TerminalConnection = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst coreutils_2 = require(\"@lumino/coreutils\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst __1 = require(\"..\");\nconst restapi_1 = require(\"./restapi\");\n/**\n * An implementation of a terminal interface.\n */\nclass TerminalConnection {\n    /**\n     * Construct a new terminal session.\n     */\n    constructor(options) {\n        var _a, _b;\n        /**\n         * Create the terminal websocket connection and add socket status handlers.\n         *\n         * #### Notes\n         * You are responsible for updating the connection status as appropriate.\n         */\n        this._createSocket = () => {\n            this._errorIfDisposed();\n            // Make sure the socket is clear\n            this._clearSocket();\n            // Update the connection status to reflect opening a new connection.\n            this._updateConnectionStatus('connecting');\n            const name = this._name;\n            const settings = this.serverSettings;\n            let url = coreutils_1.URLExt.join(settings.wsUrl, 'terminals', 'websocket', encodeURIComponent(name));\n            // If token authentication is in use.\n            const token = settings.token;\n            if (settings.appendToken && token !== '') {\n                url = url + `?token=${encodeURIComponent(token)}`;\n            }\n            this._ws = new settings.WebSocket(url);\n            this._ws.onmessage = this._onWSMessage;\n            this._ws.onclose = this._onWSClose;\n            this._ws.onerror = this._onWSClose;\n        };\n        // Websocket messages events are defined as variables to bind `this`\n        this._onWSMessage = (event) => {\n            if (this._isDisposed) {\n                return;\n            }\n            const data = JSON.parse(event.data);\n            // Handle a disconnect message.\n            if (data[0] === 'disconnect') {\n                this.dispose();\n            }\n            if (this._connectionStatus === 'connecting') {\n                // After reconnection, ignore all messages until a 'setup' message\n                // before we are truly connected. Setting the connection status to\n                // connected only then means that if we do not get a setup message\n                // before our retry timeout, we will delete the websocket and try again.\n                if (data[0] === 'setup') {\n                    this._updateConnectionStatus('connected');\n                }\n                return;\n            }\n            this._messageReceived.emit({\n                type: data[0],\n                content: data.slice(1)\n            });\n        };\n        this._onWSClose = (event) => {\n            console.warn(`Terminal websocket closed: ${event.code}`);\n            if (!this.isDisposed) {\n                this._reconnect();\n            }\n        };\n        this._connectionStatus = 'connecting';\n        this._connectionStatusChanged = new signaling_1.Signal(this);\n        this._isDisposed = false;\n        this._disposed = new signaling_1.Signal(this);\n        this._messageReceived = new signaling_1.Signal(this);\n        this._reconnectTimeout = null;\n        this._ws = null;\n        this._noOp = () => {\n            /* no-op */\n        };\n        this._reconnectLimit = 7;\n        this._reconnectAttempt = 0;\n        this._pendingMessages = [];\n        this._name = options.model.name;\n        this.serverSettings =\n            (_a = options.serverSettings) !== null && _a !== void 0 ? _a : __1.ServerConnection.makeSettings();\n        this._terminalAPIClient =\n            (_b = options.terminalAPIClient) !== null && _b !== void 0 ? _b : new restapi_1.TerminalAPIClient({ serverSettings: this.serverSettings });\n        this._createSocket();\n    }\n    /**\n     * A signal emitted when the session is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * A signal emitted when a message is received from the server.\n     */\n    get messageReceived() {\n        return this._messageReceived;\n    }\n    /**\n     * Get the name of the terminal session.\n     */\n    get name() {\n        return this._name;\n    }\n    /**\n     * Get the model for the terminal session.\n     */\n    get model() {\n        return { name: this._name };\n    }\n    /**\n     * Test whether the session is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the session.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._disposed.emit();\n        this._updateConnectionStatus('disconnected');\n        this._clearSocket();\n        signaling_1.Signal.clearData(this);\n    }\n    /**\n     * Send a message to the terminal session.\n     *\n     * #### Notes\n     * If the connection is down, the message will be queued for sending when\n     * the connection comes back up.\n     */\n    send(message) {\n        this._sendMessage(message);\n    }\n    /**\n     * Send a message on the websocket, or possibly queue for later sending.\n     *\n     * @param queue - whether to queue the message if it cannot be sent\n     */\n    _sendMessage(message, queue = true) {\n        if (this._isDisposed || !message.content) {\n            return;\n        }\n        if (this.connectionStatus === 'connected' && this._ws) {\n            const msg = [message.type, ...message.content];\n            this._ws.send(JSON.stringify(msg));\n        }\n        else if (queue) {\n            this._pendingMessages.push(message);\n        }\n        else {\n            throw new Error(`Could not send message: ${JSON.stringify(message)}`);\n        }\n    }\n    /**\n     * Send pending messages to the kernel.\n     */\n    _sendPending() {\n        // We check to make sure we are still connected each time. For\n        // example, if a websocket buffer overflows, it may close, so we should\n        // stop sending messages.\n        while (this.connectionStatus === 'connected' &&\n            this._pendingMessages.length > 0) {\n            this._sendMessage(this._pendingMessages[0], false);\n            // We shift the message off the queue after the message is sent so that\n            // if there is an exception, the message is still pending.\n            this._pendingMessages.shift();\n        }\n    }\n    /**\n     * Reconnect to a terminal.\n     *\n     * #### Notes\n     * This may try multiple times to reconnect to a terminal, and will sever\n     * any existing connection.\n     */\n    reconnect() {\n        this._errorIfDisposed();\n        const result = new coreutils_2.PromiseDelegate();\n        // Set up a listener for the connection status changing, which accepts or\n        // rejects after the retries are done.\n        const fulfill = (sender, status) => {\n            if (status === 'connected') {\n                result.resolve();\n                this.connectionStatusChanged.disconnect(fulfill, this);\n            }\n            else if (status === 'disconnected') {\n                result.reject(new Error('Terminal connection disconnected'));\n                this.connectionStatusChanged.disconnect(fulfill, this);\n            }\n        };\n        this.connectionStatusChanged.connect(fulfill, this);\n        // Reset the reconnect limit so we start the connection attempts fresh\n        this._reconnectAttempt = 0;\n        // Start the reconnection process, which will also clear any existing\n        // connection.\n        this._reconnect();\n        // Return the promise that should resolve on connection or reject if the\n        // retries don't work.\n        return result.promise;\n    }\n    /**\n     * Attempt a connection if we have not exhausted connection attempts.\n     */\n    _reconnect() {\n        this._errorIfDisposed();\n        // Clear any existing reconnection attempt\n        clearTimeout(this._reconnectTimeout);\n        // Update the connection status and schedule a possible reconnection.\n        if (this._reconnectAttempt < this._reconnectLimit) {\n            this._updateConnectionStatus('connecting');\n            // The first reconnect attempt should happen immediately, and subsequent\n            // attempts should pick a random number in a growing range so that we\n            // don't overload the server with synchronized reconnection attempts\n            // across multiple kernels.\n            const timeout = Private.getRandomIntInclusive(0, 1e3 * (Math.pow(2, this._reconnectAttempt) - 1));\n            console.error(`Connection lost, reconnecting in ${Math.floor(timeout / 1000)} seconds.`);\n            this._reconnectTimeout = setTimeout(this._createSocket, timeout);\n            this._reconnectAttempt += 1;\n        }\n        else {\n            this._updateConnectionStatus('disconnected');\n        }\n        // Clear the websocket event handlers and the socket itself.\n        this._clearSocket();\n    }\n    /**\n     * Forcefully clear the socket state.\n     *\n     * #### Notes\n     * This will clear all socket state without calling any handlers and will\n     * not update the connection status. If you call this method, you are\n     * responsible for updating the connection status as needed and recreating\n     * the socket if you plan to reconnect.\n     */\n    _clearSocket() {\n        if (this._ws !== null) {\n            // Clear the websocket event handlers and the socket itself.\n            this._ws.onopen = this._noOp;\n            this._ws.onclose = this._noOp;\n            this._ws.onerror = this._noOp;\n            this._ws.onmessage = this._noOp;\n            this._ws.close();\n            this._ws = null;\n        }\n    }\n    /**\n     * Shut down the terminal session.\n     */\n    async shutdown() {\n        await this._terminalAPIClient.shutdown(this.name);\n        this.dispose();\n    }\n    /**\n     * Clone the current terminal connection.\n     */\n    clone() {\n        return new TerminalConnection({\n            model: this.model,\n            serverSettings: this.serverSettings,\n            terminalAPIClient: this._terminalAPIClient\n        });\n    }\n    /**\n     * Handle connection status changes.\n     */\n    _updateConnectionStatus(connectionStatus) {\n        if (this._connectionStatus === connectionStatus) {\n            return;\n        }\n        this._connectionStatus = connectionStatus;\n        // If we are not 'connecting', stop any reconnection attempts.\n        if (connectionStatus !== 'connecting') {\n            this._reconnectAttempt = 0;\n            clearTimeout(this._reconnectTimeout);\n        }\n        // Send the pending messages if we just connected.\n        if (connectionStatus === 'connected') {\n            this._sendPending();\n        }\n        // Notify others that the connection status changed.\n        this._connectionStatusChanged.emit(connectionStatus);\n    }\n    /**\n     * Utility function to throw an error if this instance is disposed.\n     */\n    _errorIfDisposed() {\n        if (this.isDisposed) {\n            throw new Error('Terminal connection is disposed');\n        }\n    }\n    /**\n     * A signal emitted when the terminal connection status changes.\n     */\n    get connectionStatusChanged() {\n        return this._connectionStatusChanged;\n    }\n    /**\n     * The current connection status of the terminal connection.\n     */\n    get connectionStatus() {\n        return this._connectionStatus;\n    }\n}\nexports.TerminalConnection = TerminalConnection;\nvar Private;\n(function (Private) {\n    /**\n     * Get a random integer between min and max, inclusive of both.\n     *\n     * #### Notes\n     * From\n     * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#Getting_a_random_integer_between_two_values_inclusive\n     *\n     * From the MDN page: It might be tempting to use Math.round() to accomplish\n     * that, but doing so would cause your random numbers to follow a non-uniform\n     * distribution, which may not be acceptable for your needs.\n     */\n    function getRandomIntInclusive(min, max) {\n        min = Math.ceil(min);\n        max = Math.floor(max);\n        return Math.floor(Math.random() * (max - min + 1)) + min;\n    }\n    Private.getRandomIntInclusive = getRandomIntInclusive;\n})(Private || (Private = {}));\n//# sourceMappingURL=default.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TerminalAPI = exports.Terminal = void 0;\nconst Terminal = __importStar(require(\"./terminal\"));\nexports.Terminal = Terminal;\nconst TerminalAPI = __importStar(require(\"./restapi\"));\nexports.TerminalAPI = TerminalAPI;\n__exportStar(require(\"./manager\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TerminalManager = void 0;\nconst polling_1 = require(\"@lumino/polling\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst __1 = require(\"..\");\nconst basemanager_1 = require(\"../basemanager\");\nconst restapi_1 = require(\"./restapi\");\nconst default_1 = require(\"./default\");\n/**\n * A terminal session manager.\n */\nclass TerminalManager extends basemanager_1.BaseManager {\n    /**\n     * Construct a new terminal manager.\n     */\n    constructor(options = {}) {\n        var _a, _b;\n        super(options);\n        this._isReady = false;\n        // As an optimization, we unwrap the models to just store the names.\n        this._names = [];\n        this._terminalConnections = new Set();\n        this._runningChanged = new signaling_1.Signal(this);\n        this._connectionFailure = new signaling_1.Signal(this);\n        this._terminalAPIClient =\n            (_a = options.terminalAPIClient) !== null && _a !== void 0 ? _a : new restapi_1.TerminalAPIClient({ serverSettings: this.serverSettings });\n        // Check if terminals are available\n        if (!this.isAvailable()) {\n            this._ready = Promise.reject('Terminals unavailable');\n            this._ready.catch(_ => undefined);\n            return;\n        }\n        // Start polling with exponential backoff.\n        this._pollModels = new polling_1.Poll({\n            auto: false,\n            factory: () => this.requestRunning(),\n            frequency: {\n                interval: 10 * 1000,\n                backoff: true,\n                max: 300 * 1000\n            },\n            name: `@jupyterlab/services:TerminalManager#models`,\n            standby: (_b = options.standby) !== null && _b !== void 0 ? _b : 'when-hidden'\n        });\n        // Initialize internal data.\n        this._ready = (async () => {\n            await this._pollModels.start();\n            await this._pollModels.tick;\n            this._isReady = true;\n        })();\n    }\n    /**\n     * Test whether the manager is ready.\n     */\n    get isReady() {\n        return this._isReady;\n    }\n    /**\n     * A promise that fulfills when the manager is ready.\n     */\n    get ready() {\n        return this._ready;\n    }\n    /**\n     * A signal emitted when the running terminals change.\n     */\n    get runningChanged() {\n        return this._runningChanged;\n    }\n    /**\n     * A signal emitted when there is a connection failure.\n     */\n    get connectionFailure() {\n        return this._connectionFailure;\n    }\n    /**\n     * Dispose of the resources used by the manager.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._names.length = 0;\n        this._terminalConnections.forEach(x => x.dispose());\n        this._pollModels.dispose();\n        super.dispose();\n    }\n    /**\n     * Whether the terminal service is available.\n     */\n    isAvailable() {\n        return this._terminalAPIClient.isAvailable;\n    }\n    /*\n     * Connect to a running terminal.\n     *\n     * @param options - The options used to connect to the terminal.\n     *\n     * @returns The new terminal connection instance.\n     *\n     * #### Notes\n     * The manager `serverSettings` will be used.\n     */\n    connectTo(options) {\n        const terminalConnection = new default_1.TerminalConnection({\n            ...options,\n            serverSettings: this.serverSettings,\n            terminalAPIClient: this._terminalAPIClient\n        });\n        this._onStarted(terminalConnection);\n        if (!this._names.includes(options.model.name)) {\n            // We trust the user to connect to an existing session, but we verify\n            // asynchronously.\n            void this.refreshRunning().catch(() => {\n                /* no-op */\n            });\n        }\n        return terminalConnection;\n    }\n    /**\n     * Create an iterator over the most recent running terminals.\n     *\n     * @returns A new iterator over the running terminals.\n     */\n    running() {\n        return this._models[Symbol.iterator]();\n    }\n    /**\n     * Force a refresh of the running terminals.\n     *\n     * @returns A promise that with the list of running terminals.\n     *\n     * #### Notes\n     * This is intended to be called only in response to a user action,\n     * since the manager maintains its internal state.\n     */\n    async refreshRunning() {\n        await this._pollModels.refresh();\n        await this._pollModels.tick;\n    }\n    /**\n     * Create a new terminal session.\n     *\n     * @param options - The options used to create the terminal.\n     *\n     * @returns A promise that resolves with the terminal connection instance.\n     *\n     * #### Notes\n     * The manager `serverSettings` will be used unless overridden in the\n     * options.\n     */\n    async startNew(options = {}) {\n        const { name, cwd } = options;\n        const model = await this._terminalAPIClient.startNew({\n            name,\n            cwd\n        });\n        await this.refreshRunning();\n        return this.connectTo({ model });\n    }\n    /**\n     * Shut down a terminal session by name.\n     */\n    async shutdown(name) {\n        await this._terminalAPIClient.shutdown(name);\n        await this.refreshRunning();\n    }\n    /**\n     * Shut down all terminal sessions.\n     *\n     * @returns A promise that resolves when all of the sessions are shut down.\n     */\n    async shutdownAll() {\n        // Update the list of models to make sure our list is current.\n        await this.refreshRunning();\n        // Shut down all models.\n        await Promise.all(this._names.map(name => this._terminalAPIClient.shutdown(name)));\n        // Update the list of models to clear out our state.\n        await this.refreshRunning();\n    }\n    /**\n     * Execute a request to the server to poll running terminals and update state.\n     */\n    async requestRunning() {\n        var _a, _b;\n        let models;\n        try {\n            models = await this._terminalAPIClient.listRunning();\n        }\n        catch (err) {\n            // Handle network errors, as well as cases where we are on a\n            // JupyterHub and the server is not running. JupyterHub returns a\n            // 503 (<2.0) or 424 (>2.0) in that case.\n            if (err instanceof __1.ServerConnection.NetworkError ||\n                ((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === 503 ||\n                ((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) === 424) {\n                this._connectionFailure.emit(err);\n            }\n            throw err;\n        }\n        if (this.isDisposed) {\n            return;\n        }\n        const names = models.map(({ name }) => name).sort();\n        if (names === this._names) {\n            // Identical models list, so just return\n            return;\n        }\n        this._names = names;\n        this._terminalConnections.forEach(tc => {\n            if (!names.includes(tc.name)) {\n                tc.dispose();\n            }\n        });\n        this._runningChanged.emit(this._models);\n    }\n    /**\n     * Handle a session starting.\n     */\n    _onStarted(terminalConnection) {\n        this._terminalConnections.add(terminalConnection);\n        terminalConnection.disposed.connect(this._onDisposed, this);\n    }\n    /**\n     * Handle a session terminating.\n     */\n    _onDisposed(terminalConnection) {\n        this._terminalConnections.delete(terminalConnection);\n        // Update the running models to make sure we reflect the server state\n        void this.refreshRunning().catch(() => {\n            /* no-op */\n        });\n    }\n    get _models() {\n        return this._names.map(name => {\n            return { name };\n        });\n    }\n}\nexports.TerminalManager = TerminalManager;\n/**\n * The namespace for TerminalManager statics.\n */\n(function (TerminalManager) {\n    /**\n     * A no-op terminal manager to be used when starting terminals is not supported.\n     */\n    class NoopManager extends TerminalManager {\n        constructor() {\n            super(...arguments);\n            this._readyPromise = new Promise(() => {\n                /* no-op */\n            });\n        }\n        /**\n         * Whether the manager is active.\n         */\n        get isActive() {\n            return false;\n        }\n        /**\n         * Used for testing.\n         */\n        get parentReady() {\n            return super.ready;\n        }\n        /**\n         * A promise that fulfills when the manager is ready (never).\n         */\n        get ready() {\n            return this.parentReady.then(() => this._readyPromise);\n        }\n        /**\n         * Create a new terminal session - throw an error since it is not supported.\n         *\n         */\n        async startNew(options) {\n            return Promise.reject(new Error('Not implemented in no-op Terminal Manager'));\n        }\n        /*\n         * Connect to a running terminal - throw an error since it is not supported.\n         */\n        connectTo(options) {\n            throw Error('Not implemented in no-op Terminal Manager');\n        }\n        /**\n         * Shut down a session by id - throw an error since it is not supported.\n         */\n        async shutdown(id) {\n            return Promise.reject(new Error('Not implemented in no-op Terminal Manager'));\n        }\n        /**\n         * Execute a request to the server to poll running sessions and update state.\n         */\n        async requestRunning() {\n            return Promise.resolve();\n        }\n    }\n    TerminalManager.NoopManager = NoopManager;\n})(TerminalManager || (exports.TerminalManager = TerminalManager = {}));\n//# sourceMappingURL=manager.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TerminalAPIClient = exports.TERMINAL_SERVICE_URL = void 0;\nexports.isAvailable = isAvailable;\nexports.startNew = startNew;\nexports.listRunning = listRunning;\nexports.shutdownTerminal = shutdownTerminal;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst serverconnection_1 = require(\"../serverconnection\");\n/**\n * The url for the terminal service.\n */\nexports.TERMINAL_SERVICE_URL = 'api/terminals';\n/**\n * Whether the terminal service is available.\n */\nfunction isAvailable() {\n    const available = String(coreutils_1.PageConfig.getOption('terminalsAvailable'));\n    return available.toLowerCase() === 'true';\n}\n/**\n * Start a new terminal session.\n *\n * @param settings - The server settings to use.\n *\n * @param name - The name of the target terminal.\n *\n * @param cwd - The path in which the terminal will start.\n *\n * @returns A promise that resolves with the session model.\n */\nasync function startNew(settings = serverconnection_1.ServerConnection.makeSettings(), name, cwd) {\n    Private.errorIfNotAvailable();\n    const url = coreutils_1.URLExt.join(settings.baseUrl, exports.TERMINAL_SERVICE_URL);\n    const init = {\n        method: 'POST',\n        body: JSON.stringify({ name, cwd })\n    };\n    const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n    if (response.status !== 200) {\n        const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n        throw err;\n    }\n    const data = await response.json();\n    // TODO: Validate model\n    return data;\n}\n/**\n * List the running terminal sessions.\n *\n * @param settings - The server settings to use.\n *\n * @returns A promise that resolves with the list of running session models.\n */\nasync function listRunning(settings = serverconnection_1.ServerConnection.makeSettings()) {\n    Private.errorIfNotAvailable();\n    const url = coreutils_1.URLExt.join(settings.baseUrl, exports.TERMINAL_SERVICE_URL);\n    const response = await serverconnection_1.ServerConnection.makeRequest(url, {}, settings);\n    if (response.status !== 200) {\n        const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n        throw err;\n    }\n    const data = await response.json();\n    if (!Array.isArray(data)) {\n        throw new Error('Invalid terminal list');\n    }\n    // TODO: validate each model\n    return data;\n}\n/**\n * Shut down a terminal session by name.\n *\n * @param name - The name of the target session.\n *\n * @param settings - The server settings to use.\n *\n * @returns A promise that resolves when the session is shut down.\n */\nasync function shutdownTerminal(name, settings = serverconnection_1.ServerConnection.makeSettings()) {\n    var _a;\n    Private.errorIfNotAvailable();\n    const workspacesBase = coreutils_1.URLExt.join(settings.baseUrl, exports.TERMINAL_SERVICE_URL);\n    const url = coreutils_1.URLExt.join(workspacesBase, name);\n    if (!url.startsWith(workspacesBase)) {\n        throw new Error('Can only be used for terminal requests');\n    }\n    const init = { method: 'DELETE' };\n    const response = await serverconnection_1.ServerConnection.makeRequest(url, init, settings);\n    if (response.status === 404) {\n        const data = await response.json();\n        const msg = (_a = data.message) !== null && _a !== void 0 ? _a : `The terminal session \"${name}\"\" does not exist on the server`;\n        console.warn(msg);\n    }\n    else if (response.status !== 204) {\n        const err = await serverconnection_1.ServerConnection.ResponseError.create(response);\n        throw err;\n    }\n}\n/**\n * The Terminal API client.\n *\n * #### Notes\n * Use this class to interact with the Jupyter Server Terminal API.\n * This class adheres to the Jupyter Server API endpoints.\n */\nclass TerminalAPIClient {\n    /**\n     * Create a new Terminal API client.\n     */\n    constructor(options = {}) {\n        var _a;\n        this.serverSettings =\n            (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n    }\n    /**\n     * Whether terminals are available.\n     */\n    get isAvailable() {\n        return isAvailable();\n    }\n    /**\n     * Start a new terminal session.\n     *\n     * @param options - The options used to create the terminal.\n     *\n     * @returns A promise that resolves with the terminal session model.\n     */\n    async startNew(options = {}) {\n        const { name, cwd } = options;\n        return startNew(this.serverSettings, name, cwd);\n    }\n    /**\n     * List the running terminal sessions.\n     *\n     * @returns A promise that resolves with the list of running session models.\n     */\n    async listRunning() {\n        return listRunning(this.serverSettings);\n    }\n    /**\n     * Shut down a terminal session by name.\n     *\n     * @param name - The name of the target session.\n     *\n     * @returns A promise that resolves when the session is shut down.\n     */\n    async shutdown(name) {\n        return shutdownTerminal(name, this.serverSettings);\n    }\n}\nexports.TerminalAPIClient = TerminalAPIClient;\n/**\n * Namespace for private statics.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Throw an error if terminals are not available.\n     */\n    function errorIfNotAvailable() {\n        if (!isAvailable()) {\n            throw new Error('Terminals Unavailable');\n        }\n    }\n    Private.errorIfNotAvailable = errorIfNotAvailable;\n})(Private || (Private = {}));\n//# sourceMappingURL=restapi.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAvailable = void 0;\nconst restapi_1 = require(\"./restapi\");\nObject.defineProperty(exports, \"isAvailable\", { enumerable: true, get: function () { return restapi_1.isAvailable; } });\n//# sourceMappingURL=terminal.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IWorkspaceManager = exports.IUserManager = exports.ITerminalManager = exports.IServiceManager = exports.ISettingManager = exports.ISessionManager = exports.IServerSettings = exports.INbConvertManager = exports.IKernelSpecManager = exports.IKernelManager = exports.IEventManager = exports.IDefaultDrive = exports.IContentsManager = exports.IConfigSectionManager = exports.IConnectionStatus = void 0;\nconst coreutils_1 = require(\"@lumino/coreutils\");\n/**\n * Token providing the application connection status.\n */\nexports.IConnectionStatus = new coreutils_1.Token('@jupyterlab/application:IConnectionStatus', 'A service providing the application connection status.');\n/**\n * Token providing the config section manager.\n */\nexports.IConfigSectionManager = new coreutils_1.Token('@jupyterlab/services:IConfigSectionManager', 'A service providing the config section manager.');\n/**\n * The contents manager token.\n */\nexports.IContentsManager = new coreutils_1.Token('@jupyterlab/services:IContentsManager', 'The contents manager token.');\n/**\n * The default drive token.\n */\nexports.IDefaultDrive = new coreutils_1.Token('@jupyterlab/services:IDefaultDrive', 'The default drive for the contents manager.');\n/**\n * The event manager token.\n */\nexports.IEventManager = new coreutils_1.Token('@jupyterlab/services:IEventManager', 'The event manager token.');\n/**\n * The kernel manager token.\n */\nexports.IKernelManager = new coreutils_1.Token('@jupyterlab/services:IKernelManager', 'The kernel manager token.');\n/**\n * The kernel spec manager token.\n */\nexports.IKernelSpecManager = new coreutils_1.Token('@jupyterlab/services:IKernelSpecManager', 'The kernel spec manager token.');\n/**\n * The nbconvert manager token.\n */\nexports.INbConvertManager = new coreutils_1.Token('@jupyterlab/services:INbConvertManager', 'The nbconvert manager token.');\n/**\n * The server settings token.\n */\nexports.IServerSettings = new coreutils_1.Token('@jupyterlab/services:IServerSettings', 'The server settings for the application.');\n/**\n * The session manager token.\n */\nexports.ISessionManager = new coreutils_1.Token('@jupyterlab/services:ISessionManager', 'The session manager token.');\n/**\n * The setting manager token.\n */\nexports.ISettingManager = new coreutils_1.Token('@jupyterlab/services:ISettingManager', 'The setting manager token.');\n/**\n * The default service manager token.\n */\nexports.IServiceManager = new coreutils_1.Token('@jupyterlab/services:IServiceManager', 'The service manager for the application.');\n/**\n * The terminal manager token.\n */\nexports.ITerminalManager = new coreutils_1.Token('@jupyterlab/services:ITerminalManager', 'The terminal manager token.');\n/**\n * The user manager token.\n */\nexports.IUserManager = new coreutils_1.Token('@jupyterlab/services:IUserManager', 'The user manager token.');\n/**\n * The workspace manager token.\n */\nexports.IWorkspaceManager = new coreutils_1.Token('@jupyterlab/services:IWorkspaceManager', 'The workspace manager token.');\n//# sourceMappingURL=tokens.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserManager = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst coreutils_2 = require(\"@lumino/coreutils\");\nconst polling_1 = require(\"@lumino/polling\");\nconst signaling_1 = require(\"@lumino/signaling\");\nconst serverconnection_1 = require(\"../serverconnection\");\nconst basemanager_1 = require(\"../basemanager\");\n/**\n * The url for the lab workspaces service.\n */\nconst SERVICE_USER_URL = 'api/me';\n/**\n * The service's ID.\n * Used to uniquely identify the poll, and\n * the item in local storage.\n */\nconst SERVICE_ID = '@jupyterlab/services:UserManager#user';\n/**\n * The user API service manager.\n */\nclass UserManager extends basemanager_1.BaseManager {\n    /**\n     * Create a new user manager.\n     */\n    constructor(options = {}) {\n        var _a;\n        super(options);\n        this._isReady = false;\n        this._userChanged = new signaling_1.Signal(this);\n        this._connectionFailure = new signaling_1.Signal(this);\n        // Initialize internal data.\n        this._ready = this.requestUser()\n            .then(() => {\n            if (this.isDisposed) {\n                return;\n            }\n            this._isReady = true;\n        })\n            .catch(_ => \n        // Return a promise that will never resolve, so user service is never ready\n        // This typically occurs when the backend has no user service\n        new Promise(() => {\n            // no-op\n        }));\n        this._pollSpecs = new polling_1.Poll({\n            auto: false,\n            factory: () => this.requestUser(),\n            frequency: {\n                interval: 61 * 1000,\n                backoff: true,\n                max: 300 * 1000\n            },\n            name: SERVICE_ID,\n            standby: (_a = options.standby) !== null && _a !== void 0 ? _a : 'when-hidden'\n        });\n        void this.ready.then(() => {\n            void this._pollSpecs.start();\n        });\n    }\n    /**\n     * Test whether the manager is ready.\n     */\n    get isReady() {\n        return this._isReady;\n    }\n    /**\n     * A promise that fulfills when the manager is ready.\n     */\n    get ready() {\n        return this._ready;\n    }\n    /**\n     * Get the most recently fetched identity.\n     */\n    get identity() {\n        return this._identity;\n    }\n    /**\n     * Get the most recently fetched permissions.\n     */\n    get permissions() {\n        return this._permissions;\n    }\n    /**\n     * A signal emitted when the user changes.\n     */\n    get userChanged() {\n        return this._userChanged;\n    }\n    /**\n     * A signal emitted when there is a connection failure.\n     */\n    get connectionFailure() {\n        return this._connectionFailure;\n    }\n    /**\n     * Dispose of the resources used by the manager.\n     */\n    dispose() {\n        this._pollSpecs.dispose();\n        super.dispose();\n    }\n    /**\n     * Force a refresh of the specs from the server.\n     *\n     * @returns A promise that resolves when the specs are fetched.\n     *\n     * #### Notes\n     * This is intended to be called only in response to a user action,\n     * since the manager maintains its internal state.\n     */\n    async refreshUser() {\n        await this._pollSpecs.refresh();\n        await this._pollSpecs.tick;\n    }\n    /**\n     * Execute a request to the server to poll the user and update state.\n     */\n    async requestUser() {\n        if (this.isDisposed) {\n            return;\n        }\n        const { baseUrl } = this.serverSettings;\n        const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n        const url = coreutils_1.URLExt.join(baseUrl, SERVICE_USER_URL);\n        const response = await makeRequest(url, {}, this.serverSettings);\n        if (response.status !== 200) {\n            const err = await ResponseError.create(response);\n            throw err;\n        }\n        const oldUser = {\n            identity: this._identity,\n            permissions: this._permissions\n        };\n        const newUser = await response.json();\n        const identity = newUser.identity;\n        // store the color and initials for the user\n        // this info is not provided by the server\n        const { localStorage } = window;\n        const data = localStorage.getItem(SERVICE_ID);\n        if (data && (!identity.initials || !identity.color)) {\n            const localUser = JSON.parse(data);\n            identity.initials =\n                identity.initials ||\n                    localUser.initials ||\n                    identity.name.substring(0, 1);\n            identity.color =\n                identity.color || localUser.color || Private.getRandomColor();\n        }\n        if (!coreutils_2.JSONExt.deepEqual(newUser, oldUser)) {\n            this._identity = identity;\n            this._permissions = newUser.permissions;\n            localStorage.setItem(SERVICE_ID, JSON.stringify(identity));\n            this._userChanged.emit(newUser);\n        }\n    }\n}\nexports.UserManager = UserManager;\n/**\n * A namespace for module-private functionality.\n *\n * Note: We do not want to export this function\n * to move it to css variables in the Theme.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Predefined colors for users\n     */\n    const userColors = [\n        'var(--jp-collaborator-color1)',\n        'var(--jp-collaborator-color2)',\n        'var(--jp-collaborator-color3)',\n        'var(--jp-collaborator-color4)',\n        'var(--jp-collaborator-color5)',\n        'var(--jp-collaborator-color6)',\n        'var(--jp-collaborator-color7)'\n    ];\n    /**\n     * Get a random color from the list of colors.\n     */\n    Private.getRandomColor = () => userColors[Math.floor(Math.random() * userColors.length)];\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateProperty = validateProperty;\n/**\n * Validate a property as being on an object, and optionally\n * of a given type and among a given set of values.\n */\nfunction validateProperty(\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nobject, name, typeName, values = []) {\n    if (!object.hasOwnProperty(name)) {\n        throw Error(`Missing property '${name}'`);\n    }\n    const value = object[name];\n    if (typeName !== void 0) {\n        let valid = true;\n        switch (typeName) {\n            case 'array':\n                valid = Array.isArray(value);\n                break;\n            case 'object':\n                valid = typeof value !== 'undefined';\n                break;\n            default:\n                valid = typeof value === typeName;\n        }\n        if (!valid) {\n            throw new Error(`Property '${name}' is not of type '${typeName}'`);\n        }\n        if (values.length > 0) {\n            let valid = true;\n            switch (typeName) {\n                case 'string':\n                case 'number':\n                case 'boolean':\n                    valid = values.includes(value);\n                    break;\n                default:\n                    valid = values.findIndex(v => v === value) >= 0;\n                    break;\n            }\n            if (!valid) {\n                throw new Error(`Property '${name}' is not one of the valid values ${JSON.stringify(values)}`);\n            }\n        }\n    }\n}\n//# sourceMappingURL=validate.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WorkspaceManager = void 0;\nconst coreutils_1 = require(\"@jupyterlab/coreutils\");\nconst statedb_1 = require(\"@jupyterlab/statedb\");\nconst serverconnection_1 = require(\"../serverconnection\");\n/**\n * The url for the lab workspaces service.\n */\nconst SERVICE_WORKSPACES_URL = 'api/workspaces';\n/**\n * The workspaces API service manager.\n */\nclass WorkspaceManager extends statedb_1.DataConnector {\n    /**\n     * Create a new workspace manager.\n     */\n    constructor(options = {}) {\n        var _a;\n        super();\n        this.serverSettings =\n            (_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();\n    }\n    /**\n     * Fetch a workspace.\n     *\n     * @param id - The workspace's ID.\n     *\n     * @returns A promise that resolves if successful.\n     */\n    async fetch(id) {\n        const { serverSettings } = this;\n        const { baseUrl, appUrl } = serverSettings;\n        const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n        const base = baseUrl + appUrl;\n        const url = Private.url(base, id);\n        const response = await makeRequest(url, {}, serverSettings);\n        if (response.status !== 200) {\n            const err = await ResponseError.create(response);\n            throw err;\n        }\n        return response.json();\n    }\n    /**\n     * Fetch the list of workspace IDs that exist on the server.\n     *\n     * @returns A promise that resolves if successful.\n     */\n    async list() {\n        const { serverSettings } = this;\n        const { baseUrl, appUrl } = serverSettings;\n        const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n        const base = baseUrl + appUrl;\n        const url = Private.url(base, '');\n        const response = await makeRequest(url, {}, serverSettings);\n        if (response.status !== 200) {\n            const err = await ResponseError.create(response);\n            throw err;\n        }\n        const result = await response.json();\n        return result.workspaces;\n    }\n    /**\n     * Remove a workspace from the server.\n     *\n     * @param id - The workspaces's ID.\n     *\n     * @returns A promise that resolves if successful.\n     */\n    async remove(id) {\n        const { serverSettings } = this;\n        const { baseUrl, appUrl } = serverSettings;\n        const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n        const base = baseUrl + appUrl;\n        const url = Private.url(base, id);\n        const init = { method: 'DELETE' };\n        const response = await makeRequest(url, init, serverSettings);\n        if (response.status !== 204) {\n            const err = await ResponseError.create(response);\n            throw err;\n        }\n    }\n    /**\n     * Save a workspace.\n     *\n     * @param id - The workspace's ID.\n     *\n     * @param workspace - The workspace being saved.\n     *\n     * @returns A promise that resolves if successful.\n     */\n    async save(id, workspace) {\n        const { serverSettings } = this;\n        const { baseUrl, appUrl } = serverSettings;\n        const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;\n        const base = baseUrl + appUrl;\n        const url = Private.url(base, id);\n        const init = { body: JSON.stringify(workspace), method: 'PUT' };\n        const response = await makeRequest(url, init, serverSettings);\n        if (response.status !== 204) {\n            const err = await ResponseError.create(response);\n            throw err;\n        }\n    }\n}\nexports.WorkspaceManager = WorkspaceManager;\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Get the url for a workspace.\n     */\n    function url(base, id) {\n        const workspacesBase = coreutils_1.URLExt.join(base, SERVICE_WORKSPACES_URL);\n        const result = coreutils_1.URLExt.join(workspacesBase, id);\n        if (!result.startsWith(workspacesBase)) {\n            throw new Error('Can only be used for workspaces requests');\n        }\n        return result;\n    }\n    Private.url = url;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { ReactWidget } from '@jupyterlab/ui-components';\nimport React, { useState } from 'react';\nconst SettingsImport = (props) => {\n    const trans = props.translator.load('jupyterlab');\n    const [checkedStates, setCheckedStates] = useState(props.importedSettings.reduce((acc, key) => {\n        acc[key] = true;\n        return acc;\n    }, {}));\n    const handleCheckboxChange = (key, isChecked) => {\n        const updatedStates = { ...checkedStates, [key]: isChecked };\n        setCheckedStates(updatedStates);\n    };\n    return (React.createElement(\"div\", { className: \"jp-SettingsImport-container\" },\n        React.createElement(\"div\", { className: \"jp-SettingsImport-header\" },\n            React.createElement(\"span\", { className: \"jp-SettingsImport-title\" }, trans.__('Select settings sections to import')),\n            React.createElement(\"button\", { className: \"jp-Button jp-mod-styled jp-mod-accept\", onClick: () => {\n                    props.handleImport(Object.keys(checkedStates).filter(key => !checkedStates[key]));\n                } }, trans.__('Import'))),\n        React.createElement(\"div\", { className: \"jp-SettingsImport-list\" }, props.importedSettings.map(key => (React.createElement(\"label\", { key: key, className: \"jp-SettingsImport-item\" },\n            React.createElement(\"span\", { className: \"jp-SettingsImport-itemKey\" }, key),\n            React.createElement(\"input\", { type: \"checkbox\", checked: checkedStates[key], onChange: e => handleCheckboxChange(key, e.target.checked), className: \"jp-SettingsImport-checkbox\" })))))));\n};\n/**\n * A widget for importing settings with checkboxes.\n */\nexport class ImportSettingsWidget extends ReactWidget {\n    /**\n     * Constructs a new ImportSettingsWidget.\n     *\n     * @param importedSettings - The settings to display.\n     * @param handleImport - A callback for handling imports.\n     */\n    constructor(options) {\n        const { importedSettings, handleImport, translator } = options;\n        super();\n        this.importedSettings = importedSettings;\n        this.handleImport = handleImport;\n        this.addClass('jp-SettingsImport-widget');\n        this.translator = translator;\n    }\n    render() {\n        return (React.createElement(SettingsImport, { importedSettings: this.importedSettings, handleImport: this.handleImport, translator: this.translator }));\n    }\n}\nconst ImportSettingsDialogBody = (props) => {\n    return (React.createElement(\"div\", null,\n        React.createElement(\"div\", null, props.successMessage),\n        props.failureMessage && (React.createElement(\"div\", null,\n            React.createElement(\"br\", null),\n            React.createElement(\"div\", null, props.failureMessage),\n            props.failedSettings &&\n                props.failedSettings.map((setting, index) => (React.createElement(\"div\", { key: index }, setting)))))));\n};\nexport class ImportSettingsDialogBodyWidget extends ReactWidget {\n    constructor(_props) {\n        super();\n        this._props = _props;\n    }\n    render() {\n        return React.createElement(ImportSettingsDialogBody, { ...this._props });\n    }\n}\n//# sourceMappingURL=importSettingsWidget.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module settingeditor-extension\n */\nimport { ILabStatus, ILayoutRestorer } from '@jupyterlab/application';\nimport { Dialog, ICommandPalette, MainAreaWidget, showDialog, showErrorMessage, WidgetTracker } from '@jupyterlab/apputils';\nimport { IEditorServices } from '@jupyterlab/codeeditor';\nimport { CommandToolbarButton, IFormRendererRegistry, launchIcon, Toolbar, ToolbarButton } from '@jupyterlab/ui-components';\nimport { IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { IJSONSettingEditorTracker, ISettingEditorTracker } from '@jupyterlab/settingeditor/lib/tokens';\nimport { IPluginManager } from '@jupyterlab/pluginmanager';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { IStateDB } from '@jupyterlab/statedb';\nimport { ITranslator } from '@jupyterlab/translation';\nimport { downloadIcon, fileUploadIcon, saveIcon, settingsIcon, undoIcon } from '@jupyterlab/ui-components';\nimport { ImportSettingsDialogBodyWidget, ImportSettingsWidget } from './importSettingsWidget';\n/**\n * The command IDs used by the setting editor.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.open = 'settingeditor:open';\n    CommandIDs.openJSON = 'settingeditor:open-json';\n    CommandIDs.revert = 'settingeditor:revert';\n    CommandIDs.save = 'settingeditor:save';\n    CommandIDs.exportSettings = 'settingeditor:export';\n    CommandIDs.importSettings = 'settingeditor:import';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The default setting editor extension.\n */\nconst plugin = {\n    id: '@jupyterlab/settingeditor-extension:form-ui',\n    description: 'Adds the interactive settings editor and provides its tracker.',\n    requires: [\n        ISettingRegistry,\n        IStateDB,\n        ITranslator,\n        IFormRendererRegistry,\n        ILabStatus\n    ],\n    optional: [\n        ILayoutRestorer,\n        ICommandPalette,\n        IJSONSettingEditorTracker,\n        IPluginManager\n    ],\n    autoStart: true,\n    provides: ISettingEditorTracker,\n    activate\n};\n/**\n * Activate the setting editor extension.\n */\nfunction activate(app, registry, state, translator, editorRegistry, status, restorer, palette, jsonEditor, pluginManager) {\n    const trans = translator.load('jupyterlab');\n    const { commands, shell } = app;\n    const namespace = 'setting-editor';\n    const tracker = new WidgetTracker({\n        namespace\n    });\n    // Handle state restoration.\n    if (restorer) {\n        void restorer.restore(tracker, {\n            command: CommandIDs.open,\n            args: widget => ({}),\n            name: widget => namespace\n        });\n    }\n    const openUi = async (args) => {\n        if (tracker.currentWidget && !tracker.currentWidget.isDisposed) {\n            if (!tracker.currentWidget.isAttached) {\n                shell.add(tracker.currentWidget, 'main', { type: 'Settings' });\n            }\n            shell.activateById(tracker.currentWidget.id);\n            if (args.query) {\n                tracker.currentWidget.content.updateQuery(args.query);\n            }\n            return;\n        }\n        const key = plugin.id;\n        const { SettingsEditor } = await import('@jupyterlab/settingeditor');\n        const editor = new MainAreaWidget({\n            content: new SettingsEditor({\n                editorRegistry,\n                key,\n                registry,\n                state,\n                commands,\n                toSkip: [\n                    '@jupyterlab/application-extension:context-menu',\n                    '@jupyterlab/mainmenu-extension:plugin'\n                ],\n                translator,\n                status,\n                query: args.query\n            })\n        });\n        editor.toolbar.addItem('export-settings', new CommandToolbarButton({\n            commands,\n            id: CommandIDs.exportSettings,\n            icon: downloadIcon,\n            label: trans.__('Export'),\n            caption: trans.__('Export settings to a JSON file')\n        }));\n        editor.toolbar.addItem('import-settings', new CommandToolbarButton({\n            commands,\n            id: CommandIDs.importSettings,\n            icon: fileUploadIcon,\n            label: trans.__('Import'),\n            caption: trans.__('Import settings from a JSON file')\n        }));\n        editor.toolbar.addItem('spacer', Toolbar.createSpacerItem());\n        if (pluginManager) {\n            editor.toolbar.addItem('open-plugin-manager', new ToolbarButton({\n                onClick: async () => {\n                    await pluginManager.open();\n                },\n                icon: launchIcon,\n                label: trans.__('Plugin Manager')\n            }));\n        }\n        if (jsonEditor) {\n            editor.toolbar.addItem('open-json-editor', new CommandToolbarButton({\n                commands,\n                id: CommandIDs.openJSON,\n                icon: launchIcon,\n                label: trans.__('JSON Settings Editor')\n            }));\n        }\n        editor.id = namespace;\n        editor.title.icon = settingsIcon;\n        editor.title.label = trans.__('Settings');\n        editor.title.closable = true;\n        void tracker.add(editor);\n        shell.add(editor, 'main', { type: 'Settings' });\n    };\n    commands.addCommand(CommandIDs.open, {\n        execute: async (args) => {\n            var _a;\n            if (args.settingEditorType === 'ui') {\n                void commands.execute(CommandIDs.open, { query: (_a = args.query) !== null && _a !== void 0 ? _a : '' });\n            }\n            else if (args.settingEditorType === 'json') {\n                void commands.execute(CommandIDs.openJSON);\n            }\n            else {\n                void registry.load(plugin.id).then(settings => {\n                    var _a;\n                    settings.get('settingEditorType').composite ===\n                        'json'\n                        ? void commands.execute(CommandIDs.openJSON)\n                        : void openUi({ query: (_a = args.query) !== null && _a !== void 0 ? _a : '' });\n                });\n            }\n        },\n        label: args => {\n            if (args.label) {\n                return args.label;\n            }\n            return trans.__('Settings Editor');\n        }\n    });\n    if (palette) {\n        palette.addItem({\n            category: trans.__('Settings'),\n            command: CommandIDs.open,\n            args: { settingEditorType: 'ui' }\n        });\n    }\n    return tracker;\n}\n/**\n * The default setting editor extension.\n */\nconst jsonPlugin = {\n    id: '@jupyterlab/settingeditor-extension:plugin',\n    description: 'Adds the JSON settings editor and provides its tracker.',\n    requires: [\n        ISettingRegistry,\n        IEditorServices,\n        IStateDB,\n        IRenderMimeRegistry,\n        ILabStatus,\n        ITranslator\n    ],\n    optional: [ILayoutRestorer, ICommandPalette],\n    autoStart: true,\n    provides: IJSONSettingEditorTracker,\n    activate: activateJSON\n};\n/**\n * Activate the setting editor extension.\n */\nfunction activateJSON(app, registry, editorServices, state, rendermime, status, translator, restorer, palette) {\n    const trans = translator.load('jupyterlab');\n    const { commands, shell } = app;\n    const namespace = 'json-setting-editor';\n    const factoryService = editorServices.factoryService;\n    const editorFactory = factoryService.newInlineEditor;\n    const tracker = new WidgetTracker({\n        namespace\n    });\n    // Handle state restoration.\n    if (restorer) {\n        void restorer.restore(tracker, {\n            command: CommandIDs.openJSON,\n            args: widget => ({}),\n            name: widget => namespace\n        });\n    }\n    commands.addCommand(CommandIDs.openJSON, {\n        execute: async () => {\n            if (tracker.currentWidget && !tracker.currentWidget.isDisposed) {\n                if (!tracker.currentWidget.isAttached) {\n                    shell.add(tracker.currentWidget, 'main', {\n                        type: 'Advanced Settings'\n                    });\n                }\n                shell.activateById(tracker.currentWidget.id);\n                return;\n            }\n            const key = plugin.id;\n            const when = app.restored;\n            const { JsonSettingEditor } = await import('@jupyterlab/settingeditor');\n            const editor = new JsonSettingEditor({\n                commands: {\n                    registry: commands,\n                    revert: CommandIDs.revert,\n                    save: CommandIDs.save\n                },\n                editorFactory,\n                key,\n                registry,\n                rendermime,\n                state,\n                translator,\n                when\n            });\n            let disposable = null;\n            // Notify the command registry when the visibility status of the setting\n            // editor's commands change. The setting editor toolbar listens for this\n            // signal from the command registry.\n            editor.commandsChanged.connect((sender, args) => {\n                args.forEach(id => {\n                    commands.notifyCommandChanged(id);\n                });\n                if (editor.canSaveRaw) {\n                    if (!disposable) {\n                        disposable = status.setDirty();\n                    }\n                }\n                else if (disposable) {\n                    disposable.dispose();\n                    disposable = null;\n                }\n                editor.disposed.connect(() => {\n                    if (disposable) {\n                        disposable.dispose();\n                    }\n                });\n            });\n            const container = new MainAreaWidget({\n                content: editor\n            });\n            container.id = namespace;\n            container.title.icon = settingsIcon;\n            container.title.label = trans.__('Advanced Settings Editor');\n            container.title.closable = true;\n            void tracker.add(container);\n            shell.add(container, 'main', { type: 'Advanced Settings' });\n        },\n        label: trans.__('Advanced Settings Editor')\n    });\n    if (palette) {\n        palette.addItem({\n            category: trans.__('Settings'),\n            command: CommandIDs.openJSON\n        });\n    }\n    commands.addCommand(CommandIDs.revert, {\n        execute: () => {\n            var _a;\n            (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content.revert();\n        },\n        icon: undoIcon,\n        label: trans.__('Revert User Settings'),\n        isEnabled: () => { var _a, _b; return (_b = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content.canRevertRaw) !== null && _b !== void 0 ? _b : false; }\n    });\n    commands.addCommand(CommandIDs.save, {\n        execute: () => { var _a; return (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content.save(); },\n        icon: saveIcon,\n        label: trans.__('Save User Settings'),\n        isEnabled: () => { var _a, _b; return (_b = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content.canSaveRaw) !== null && _b !== void 0 ? _b : false; }\n    });\n    commands.addCommand(CommandIDs.exportSettings, {\n        execute: () => {\n            const userSettings = collectUserSettings(registry);\n            const jsonContent = JSON.stringify(userSettings, null, 2);\n            downloadSettings(jsonContent, 'overrides.json');\n        },\n        label: trans.__('Export Settings'),\n        icon: downloadIcon\n    });\n    commands.addCommand(CommandIDs.importSettings, {\n        execute: () => {\n            const fileInput = document.createElement('input');\n            fileInput.type = 'file';\n            fileInput.accept = '.json'; // Accept only JSON files\n            const JSON_INDENTATION = 4; // Indentation for the JSON file to be uploaded\n            fileInput.addEventListener('change', async (event) => {\n                var _a;\n                const file = (_a = event.target.files) === null || _a === void 0 ? void 0 : _a[0];\n                if (!file) {\n                    return;\n                }\n                try {\n                    const fileContent = await file.text();\n                    const importedSettings = JSON.parse(fileContent);\n                    // Validate the JSON structure\n                    if (typeof importedSettings !== 'object' ||\n                        Array.isArray(importedSettings)) {\n                        throw new Error('Invalid settings file format');\n                    }\n                    const errorUploading = [];\n                    const applySettings = async (settings) => {\n                        var _a;\n                        const settingsEntries = Object.entries(importedSettings);\n                        for (const [pluginId, pluginSettings] of settingsEntries) {\n                            if (typeof pluginSettings === 'object' &&\n                                !Array.isArray(pluginSettings)) {\n                                try {\n                                    await registry.upload(pluginId, JSON.stringify(pluginSettings, undefined, JSON_INDENTATION));\n                                }\n                                catch (error) {\n                                    console.warn(`Failed to save settings for ${pluginId}:`, error);\n                                    errorUploading.push(pluginId);\n                                }\n                            }\n                            else {\n                                console.warn(`Invalid settings for plugin ${pluginId}. Skipping.`);\n                            }\n                        }\n                        (_a = app.shell.currentWidget) === null || _a === void 0 ? void 0 : _a.close();\n                        if (settingsEntries.length) {\n                            const successCount = settingsEntries.length - errorUploading.length;\n                            const successMessage = trans.__(`Imported settings across ${successCount} ${successCount === 1 ? 'category' : 'categories'} successfully.`);\n                            const failureMessage = errorUploading.length\n                                ? trans.__(`Failed to upload settings for the following ${errorUploading.length} ${errorUploading.length === 1 ? 'plugin' : 'plugins'}`)\n                                : '';\n                            const body = new ImportSettingsDialogBodyWidget({\n                                successMessage,\n                                failureMessage,\n                                failedSettings: errorUploading\n                            });\n                            await showDialog({\n                                title: trans.__('Settings Imported'),\n                                body,\n                                buttons: [Dialog.okButton()]\n                            });\n                        }\n                    };\n                    const settingsKeys = Object.keys(importedSettings);\n                    const content = new ImportSettingsWidget({\n                        importedSettings: settingsKeys,\n                        handleImport: applySettings,\n                        translator: translator\n                    });\n                    const widget = new MainAreaWidget({ content });\n                    widget.title.label = trans.__('Import Settings');\n                    widget.title.icon = fileUploadIcon;\n                    app.shell.add(widget, 'main');\n                    app.shell.activateById(widget.id);\n                }\n                catch (error) {\n                    await showErrorMessage('Failed to import settings', error);\n                }\n            });\n            // Trigger the file input\n            fileInput.click();\n        },\n        label: trans.__('Import Settings'),\n        icon: fileUploadIcon\n    });\n    /**\n     * Collect user settings from the registry.\n     */\n    function collectUserSettings(registry) {\n        const userSettings = {};\n        for (const [pluginId, plugin] of Object.entries(registry.plugins)) {\n            if (plugin) {\n                try {\n                    if (plugin.raw) {\n                        const withoutSingleLineComments = plugin.raw.replace(/\\/\\/.*$/gm, '');\n                        const withoutComments = withoutSingleLineComments.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n                        const preferredSettings = JSON.parse(withoutComments);\n                        if (Object.keys(preferredSettings).length > 0) {\n                            userSettings[pluginId] = preferredSettings;\n                        }\n                    }\n                }\n                catch (error) {\n                    console.error(`Error loading settings for plugin ${pluginId}:`, error);\n                }\n            }\n        }\n        return userSettings;\n    }\n    /**\n     * Trigger a download of the settings as a JSON file.\n     */\n    function downloadSettings(jsonContent, filename) {\n        const blob = new Blob([jsonContent], { type: 'application/json' });\n        const url = URL.createObjectURL(blob);\n        const a = document.createElement('a');\n        a.href = url;\n        a.download = filename;\n        document.body.appendChild(a);\n        a.click();\n        document.body.removeChild(a);\n        URL.revokeObjectURL(url);\n    }\n    return tracker;\n}\nexport default [plugin, jsonPlugin];\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\n\nimport './base.css';\n","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/inspector/style/index.js';\n\nimport './base.css';\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/pluginmanager/style/index.js';\nimport '@jupyterlab/settingeditor/style/index.js';\n","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport React from 'react';\nimport { ReactWidget } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { classes, FilterBox, LabIcon, settingsIcon, updateFilterFunction } from '@jupyterlab/ui-components';\nimport { StringExt } from '@lumino/algorithm';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\n/**\n * The JupyterLab plugin schema key for the setting editor\n * icon class of a plugin.\n */\nconst ICON_KEY = 'jupyter.lab.setting-icon';\n/**\n * The JupyterLab plugin schema key for the setting editor\n * icon class of a plugin.\n */\nconst ICON_CLASS_KEY = 'jupyter.lab.setting-icon-class';\n/**\n * The JupyterLab plugin schema key for the setting editor\n * icon label of a plugin.\n */\nconst ICON_LABEL_KEY = 'jupyter.lab.setting-icon-label';\n/**\n * A list of plugins with editable settings.\n */\nexport class PluginList extends ReactWidget {\n    /**\n     * Create a new plugin list.\n     */\n    constructor(options) {\n        var _a, _b;\n        super();\n        this._changed = new Signal(this);\n        this._handleSelectSignal = new Signal(this);\n        this._updateFilterSignal = new Signal(this);\n        this._scrollTop = 0;\n        this._selection = '';\n        this._registry = this.registry = options.registry;\n        this.translator = options.translator || nullTranslator;\n        this.addClass('jp-PluginList');\n        this._confirm = options.confirm;\n        this._model = (_a = options.model) !== null && _a !== void 0 ? _a : new PluginList.Model(options);\n        this._model.ready\n            .then(() => {\n            this.update();\n            this._model.changed.connect(() => {\n                this.update();\n            });\n        })\n            .catch(reason => {\n            console.error(`Failed to load the plugin list model:\\n${reason}`);\n        });\n        this.mapPlugins = this.mapPlugins.bind(this);\n        this.setFilter = this.setFilter.bind(this);\n        this.setFilter(options.query ? updateFilterFunction(options.query, false, false) : null);\n        this.setError = this.setError.bind(this);\n        this._evtMousedown = this._evtMousedown.bind(this);\n        this._query = (_b = options.query) !== null && _b !== void 0 ? _b : '';\n        this._errors = {};\n    }\n    /**\n     * A signal emitted when a list user interaction happens.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * The selection value of the plugin list.\n     */\n    get scrollTop() {\n        var _a;\n        return (_a = this.node.querySelector('ul')) === null || _a === void 0 ? void 0 : _a.scrollTop;\n    }\n    get hasErrors() {\n        for (const id in this._errors) {\n            if (this._errors[id]) {\n                return true;\n            }\n        }\n        return false;\n    }\n    get filter() {\n        return this._filter;\n    }\n    /**\n     * The selection value of the plugin list.\n     */\n    get selection() {\n        return this._selection;\n    }\n    set selection(selection) {\n        this._selection = selection;\n        this.update();\n    }\n    /**\n     * Signal that fires when search filter is updated so that settings panel can filter results.\n     */\n    get updateFilterSignal() {\n        return this._updateFilterSignal;\n    }\n    get handleSelectSignal() {\n        return this._handleSelectSignal;\n    }\n    /**\n     * Handle `'update-request'` messages.\n     */\n    onUpdateRequest(msg) {\n        const ul = this.node.querySelector('ul');\n        if (ul && this._scrollTop !== undefined) {\n            ul.scrollTop = this._scrollTop;\n        }\n        super.onUpdateRequest(msg);\n    }\n    /**\n     * Handle the `'mousedown'` event for the plugin list.\n     *\n     * @param event - The DOM event sent to the widget\n     */\n    _evtMousedown(event) {\n        const target = event.currentTarget;\n        const id = target.getAttribute('data-id');\n        if (!id) {\n            return;\n        }\n        if (this._confirm) {\n            this._confirm(id)\n                .then(() => {\n                this.selection = id;\n                this._changed.emit(undefined);\n                this.update();\n            })\n                .catch(() => {\n                /* no op */\n            });\n        }\n        else {\n            this._scrollTop = this.scrollTop;\n            this._selection = id;\n            this._handleSelectSignal.emit(id);\n            this._changed.emit(undefined);\n            this.update();\n        }\n    }\n    /**\n     * Check the plugin for a rendering hint's value.\n     *\n     * #### Notes\n     * The order of priority for overridden hints is as follows, from most\n     * important to least:\n     * 1. Data set by the end user in a settings file.\n     * 2. Data set by the plugin author as a schema default.\n     * 3. Data set by the plugin author as a top-level key of the schema.\n     */\n    getHint(key, registry, plugin) {\n        // First, give priority to checking if the hint exists in the user data.\n        let hint = plugin.data.user[key];\n        // Second, check to see if the hint exists in composite data, which folds\n        // in default values from the schema.\n        if (!hint) {\n            hint = plugin.data.composite[key];\n        }\n        // Third, check to see if the plugin schema has defined the hint.\n        if (!hint) {\n            hint = plugin.schema[key];\n        }\n        // Finally, use the defaults from the registry schema.\n        if (!hint) {\n            const { properties } = registry.schema;\n            hint = properties && properties[key] && properties[key].default;\n        }\n        return typeof hint === 'string' ? hint : '';\n    }\n    /**\n     * Function to recursively filter properties that match search results.\n     * @param filter - Function to filter based on search results\n     * @param props - Schema properties being filtered\n     * @param definitions - Definitions to use for filling in references in properties\n     * @param ref - Reference to a definition\n     * @returns - String array of properties that match the search results.\n     */\n    getFilterString(filter, props, definitions, ref) {\n        var _a;\n        // If properties given are references, populate properties\n        // with corresponding definition.\n        if (ref && definitions) {\n            ref = ref.replace('#/definitions/', '');\n            props = (_a = definitions[ref]) !== null && _a !== void 0 ? _a : {};\n        }\n        // If given properties are an object, advance into the properties\n        // for that object instead.\n        if (props.properties) {\n            props = props.properties;\n            // If given properties are an array, advance into the properties\n            // for the items instead.\n        }\n        else if (props.items) {\n            props = props.items;\n            // Otherwise, you've reached the base case and don't need to check for matching properties\n        }\n        else {\n            return [];\n        }\n        // If reference found, recurse\n        if (props['$ref']) {\n            return this.getFilterString(filter, props, definitions, props['$ref']);\n        }\n        // Make sure props is non-empty before calling reduce\n        if (Object.keys(props).length === 0) {\n            return [];\n        }\n        // Iterate through the properties and check for titles / descriptions that match search.\n        return Object.keys(props).reduce((acc, value) => {\n            var _a, _b;\n            // If this is the base case, check for matching title / description\n            const subProps = props[value];\n            if (!subProps) {\n                if (filter((_a = props.title) !== null && _a !== void 0 ? _a : '')) {\n                    return props.title;\n                }\n                if (filter(value)) {\n                    return value;\n                }\n            }\n            // If there are properties in the object, check for title / description\n            if (filter((_b = subProps.title) !== null && _b !== void 0 ? _b : '')) {\n                acc.push(subProps.title);\n            }\n            if (filter(value)) {\n                acc.push(value);\n            }\n            // Finally, recurse on the properties left.\n            acc.concat(this.getFilterString(filter, subProps, definitions, subProps['$ref']));\n            return acc;\n        }, []);\n    }\n    /**\n     * Updates the filter when the search bar value changes.\n     * @param filter Filter function passed by search bar based on search value.\n     */\n    setFilter(filter, query) {\n        if (filter) {\n            this._filter = (plugin) => {\n                var _a, _b;\n                if (!filter || filter((_a = plugin.schema.title) !== null && _a !== void 0 ? _a : '')) {\n                    return null;\n                }\n                const filtered = this.getFilterString(filter, (_b = plugin.schema) !== null && _b !== void 0 ? _b : {}, plugin.schema.definitions);\n                return filtered;\n            };\n        }\n        else {\n            this._filter = null;\n        }\n        this._query = query;\n        this._updateFilterSignal.emit(this._filter);\n        this.update();\n    }\n    setError(id, error) {\n        if (this._errors[id] !== error) {\n            this._errors[id] = error;\n            this.update();\n        }\n        else {\n            this._errors[id] = error;\n        }\n    }\n    mapPlugins(plugin) {\n        var _a, _b, _c, _d;\n        const { id, schema, version } = plugin;\n        const trans = this.translator.load('jupyterlab');\n        const title = typeof schema.title === 'string' ? trans._p('schema', schema.title) : id;\n        const highlightedTitleIndices = StringExt.matchSumOfSquares(title.toLocaleLowerCase(), (_b = (_a = this._query) === null || _a === void 0 ? void 0 : _a.toLocaleLowerCase()) !== null && _b !== void 0 ? _b : '');\n        const hightlightedTitle = StringExt.highlight(title, (_c = highlightedTitleIndices === null || highlightedTitleIndices === void 0 ? void 0 : highlightedTitleIndices.indices) !== null && _c !== void 0 ? _c : [], chunk => {\n            return React.createElement(\"mark\", null, chunk);\n        });\n        const description = typeof schema.description === 'string'\n            ? trans._p('schema', schema.description)\n            : '';\n        const itemTitle = `${description}\\n${id}\\n${version}`;\n        const icon = this.getHint(ICON_KEY, this._registry, plugin);\n        const iconClass = this.getHint(ICON_CLASS_KEY, this._registry, plugin);\n        const iconTitle = this.getHint(ICON_LABEL_KEY, this._registry, plugin);\n        const filteredProperties = this._filter\n            ? (_d = this._filter(plugin)) === null || _d === void 0 ? void 0 : _d.map(fieldValue => {\n                var _a, _b, _c;\n                const highlightedIndices = StringExt.matchSumOfSquares(fieldValue.toLocaleLowerCase(), (_b = (_a = this._query) === null || _a === void 0 ? void 0 : _a.toLocaleLowerCase()) !== null && _b !== void 0 ? _b : '');\n                const highlighted = StringExt.highlight(fieldValue, (_c = highlightedIndices === null || highlightedIndices === void 0 ? void 0 : highlightedIndices.indices) !== null && _c !== void 0 ? _c : [], chunk => {\n                    return React.createElement(\"mark\", null, chunk);\n                });\n                return React.createElement(\"li\", { key: `${id}-${fieldValue}` },\n                    \" \",\n                    highlighted,\n                    \" \");\n            })\n            : undefined;\n        return (React.createElement(\"div\", { onClick: this._evtMousedown, className: `${id === this.selection\n                ? 'jp-mod-selected jp-PluginList-entry'\n                : 'jp-PluginList-entry'} ${this._errors[id] ? 'jp-ErrorPlugin' : ''}`, \"data-id\": id, key: id, title: itemTitle },\n            React.createElement(\"div\", { className: \"jp-PluginList-entry-label\", role: \"tab\" },\n                React.createElement(\"div\", { className: \"jp-SelectedIndicator\" }),\n                React.createElement(LabIcon.resolveReact, { icon: icon || (iconClass ? undefined : settingsIcon), iconClass: classes(iconClass, 'jp-Icon'), title: iconTitle, tag: \"span\", stylesheet: \"settingsEditor\" }),\n                React.createElement(\"span\", { className: \"jp-PluginList-entry-label-text\" }, hightlightedTitle)),\n            React.createElement(\"ul\", null, filteredProperties)));\n    }\n    render() {\n        const trans = this.translator.load('jupyterlab');\n        // Filter all plugins based on search value before displaying list.\n        const allPlugins = this._model.plugins.filter(plugin => {\n            if (!this._filter) {\n                return false;\n            }\n            const filtered = this._filter(plugin);\n            return filtered === null || filtered.length > 0;\n        });\n        const modifiedPlugins = allPlugins.filter(plugin => {\n            var _a;\n            return (_a = this._model.settings[plugin.id]) === null || _a === void 0 ? void 0 : _a.isModified;\n        });\n        const modifiedItems = modifiedPlugins.map(this.mapPlugins);\n        const otherItems = allPlugins\n            .filter(plugin => {\n            return !modifiedPlugins.includes(plugin);\n        })\n            .map(this.mapPlugins);\n        return (React.createElement(\"div\", { className: \"jp-PluginList-wrapper\" },\n            React.createElement(FilterBox, { updateFilter: this.setFilter, useFuzzyFilter: false, placeholder: trans.__('Search settings…'), forceRefresh: false, caseSensitive: false, initialQuery: this._query }),\n            modifiedItems.length > 0 && (React.createElement(\"div\", null,\n                React.createElement(\"h1\", { className: \"jp-PluginList-header\" }, trans.__('Modified')),\n                React.createElement(\"ul\", null, modifiedItems))),\n            otherItems.length > 0 && (React.createElement(\"div\", null,\n                React.createElement(\"h1\", { className: \"jp-PluginList-header\" }, trans.__('Settings')),\n                React.createElement(\"ul\", null, otherItems))),\n            modifiedItems.length === 0 && otherItems.length === 0 && (React.createElement(\"p\", { className: \"jp-PluginList-noResults\" }, trans.__('No items match your search.')))));\n    }\n}\n/**\n * A namespace for `PluginList` statics.\n */\n(function (PluginList) {\n    /**\n     * Sort a list of plugins by title and ID.\n     * @deprecated - prior to 4.3 this function was used to reimplement\n     * the same ordering between the plugin list and editor; it is no\n     * longer needed as the order is now tracked by the model.\n     */\n    function sortPlugins(registry) {\n        return Object.keys(registry.plugins)\n            .map(plugin => registry.plugins[plugin])\n            .sort((a, b) => {\n            return (a.schema.title || a.id).localeCompare(b.schema.title || b.id);\n        });\n    }\n    PluginList.sortPlugins = sortPlugins;\n    /**\n     * Model for plugin list\n     */\n    class Model {\n        /**\n         * Create a new plugin list model.\n         */\n        constructor(options) {\n            var _a;\n            this._plugins = [];\n            this._changed = new Signal(this);\n            this._ready = new PromiseDelegate();\n            this._settings = {};\n            this._settingsModified = {};\n            this._toSkip = (_a = options.toSkip) !== null && _a !== void 0 ? _a : [];\n            this._registry = options.registry;\n            this._registry.pluginChanged.connect(async (_emitter, pluginId) => {\n                let changed = false;\n                // Either plugin can be missing (if plugin was not loaded at all yet)\n                // or just plugin's settings may be missing (if transform step has no completed).\n                if (!this._plugins.map(plugin => plugin.id).includes(pluginId)) {\n                    this._plugins = this._loadPlugins();\n                    changed = true;\n                }\n                if (!this._settings[pluginId]) {\n                    const pluginsToLoad = this._plugins.filter(plugin => plugin.id === pluginId);\n                    await this._loadSettings(pluginsToLoad);\n                    changed = true;\n                }\n                if (changed) {\n                    this._changed.emit();\n                }\n            }, this);\n            this._plugins = this._loadPlugins();\n            this._loadSettings(this._plugins)\n                .then(() => {\n                this._ready.resolve(undefined);\n            })\n                .catch(reason => {\n                console.error(`Failed to load the settings:\\n${reason}`);\n            });\n        }\n        /**\n         * A list of loaded plugins.\n         */\n        get plugins() {\n            return this._plugins;\n        }\n        /**\n         * A promise which resolves when an initial loading of plugins completed.\n         *\n         * Note: this does not guarantee that all `plugins` nor `settings` are available\n         * as these can be also loaded later as plugins are added or transformed.\n         */\n        get ready() {\n            return this._ready.promise;\n        }\n        /**\n         * Settings keyed by plugin name.\n         *\n         * Note: settings for plugins can be loaded later than the plugin\n         * itself, which is the case for plugins using a `transform` step.\n         */\n        get settings() {\n            return this._settings;\n        }\n        /**\n         * Signal emitted when list of plugins change.\n         *\n         * This signal will be emitted when new plugins are added to the registry,\n         * when settings schema of an already present plugin changes, and when the\n         * settings state changes from default to modified or vice versa.\n         */\n        get changed() {\n            return this._changed;\n        }\n        /**\n         * Loads, sorts and filters plugins from the registry.\n         */\n        _loadPlugins() {\n            return this._sortPlugins(this._registry).filter(plugin => {\n                const { schema } = plugin;\n                const deprecated = schema['jupyter.lab.setting-deprecated'] === true;\n                const editable = Object.keys(schema.properties || {}).length > 0;\n                const extensible = schema.additionalProperties !== false;\n                const correctEditor = !this._toSkip.includes(plugin.id);\n                return !deprecated && correctEditor && (editable || extensible);\n            });\n        }\n        /**\n         * Loads settings and stores them for easy access when displaying search results.\n         */\n        async _loadSettings(plugins) {\n            for (const plugin of plugins) {\n                const pluginSettings = (await this._registry.load(plugin.id));\n                pluginSettings.changed.connect(() => {\n                    if (pluginSettings.isModified !== this._settingsModified[plugin.id]) {\n                        this._changed.emit();\n                        this._settingsModified[plugin.id] = pluginSettings.isModified;\n                    }\n                });\n                this._settings[plugin.id] = pluginSettings;\n                this._settingsModified[plugin.id] = pluginSettings.isModified;\n            }\n        }\n        _sortPlugins(registry) {\n            return Object.keys(registry.plugins)\n                .map(plugin => registry.plugins[plugin])\n                .sort((a, b) => {\n                return (a.schema.title || a.id).localeCompare(b.schema.title || b.id);\n            });\n        }\n    }\n    PluginList.Model = Model;\n})(PluginList || (PluginList = {}));\n//# sourceMappingURL=pluginlist.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport React from 'react';\nimport { showErrorMessage } from '@jupyterlab/apputils';\nimport { FormComponent } from '@jupyterlab/ui-components';\nimport { JSONExt } from '@lumino/coreutils';\nimport { Debouncer } from '@lumino/polling';\nimport validatorAjv8 from '@rjsf/validator-ajv8';\nimport { Button } from '@jupyterlab/ui-components';\n/**\n * Indentation to use when saving the settings as JSON document.\n */\nconst JSON_INDENTATION = 4;\n/**\n * A React component that prepares the settings for a\n * given plugin to be rendered in the FormEditor.\n */\nexport class SettingsFormEditor extends React.Component {\n    constructor(props) {\n        super(props);\n        /**\n         * Handler for the \"Restore to defaults\" button - clears all\n         * modified settings then calls `setFormData` to restore the\n         * values.\n         */\n        this.reset = async (event) => {\n            event.stopPropagation();\n            for (const field in this.props.settings.user) {\n                await this.props.settings.remove(field);\n            }\n            this._formData = this.props.settings.composite;\n            this.setState({ isModified: false });\n        };\n        this._syncFormDataWithSettings = () => {\n            this._formData = this.props.settings.composite;\n            this.setState((prevState, props) => ({\n                isModified: props.settings.isModified\n            }));\n        };\n        this._onChange = (e) => {\n            this.props.hasError(e.errors.length !== 0);\n            // Create a deep copy of the current form data to work with\n            const updatedFormData = JSONExt.deepCopy(this._formData);\n            // Only update fields that are actually present in the filtered view\n            if (e.formData) {\n                // Safely iterate over the keys in e.formData\n                Object.keys(e.formData).forEach(key => {\n                    // Use type assertion to tell TypeScript this is safe\n                    const formData = e.formData;\n                    if (formData && key in formData) {\n                        updatedFormData[key] = formData[key];\n                    }\n                });\n            }\n            // Convert back to ReadonlyJSONObject for this._formData\n            this._formData = updatedFormData;\n            if (e.errors.length === 0) {\n                this.props.updateDirtyState(true);\n                void this._debouncer.invoke();\n            }\n            this.props.onSelect(this.props.settings.id);\n        };\n        const { settings } = props;\n        settings.changed.connect(this._syncFormDataWithSettings);\n        this._formData = settings.composite;\n        this.state = {\n            isModified: settings.isModified,\n            uiSchema: {},\n            filteredSchema: this.props.settings.schema,\n            formContext: {\n                defaultFormData: this.props.settings.default(),\n                settings: this.props.settings,\n                schema: JSONExt.deepCopy(this.props.settings.schema)\n            }\n        };\n        this.handleChange = this.handleChange.bind(this);\n        this._debouncer = new Debouncer(this.handleChange);\n    }\n    componentDidMount() {\n        this._setUiSchema();\n        this._setFilteredSchema();\n    }\n    componentDidUpdate(prevProps) {\n        this._setUiSchema(prevProps.renderers[prevProps.settings.id]);\n        this._setFilteredSchema(prevProps.filteredValues);\n        if (prevProps.settings !== this.props.settings) {\n            this.setState(previousState => ({\n                formContext: {\n                    ...previousState.formContext,\n                    settings: this.props.settings,\n                    defaultFormData: this.props.settings.default()\n                }\n            }));\n        }\n    }\n    componentWillUnmount() {\n        this._debouncer.dispose();\n    }\n    /**\n     * Handler for edits made in the form editor.\n     */\n    handleChange() {\n        // Prevent unnecessary save when opening settings that haven't been modified.\n        if (!this.props.settings.isModified &&\n            this._formData &&\n            this.props.settings.isDefault(this._formData)) {\n            this.props.updateDirtyState(false);\n            return;\n        }\n        this.props.settings\n            .save(JSON.stringify(this._formData, undefined, JSON_INDENTATION))\n            .then(() => {\n            this.props.updateDirtyState(false);\n            this.setState({ isModified: this.props.settings.isModified });\n        })\n            .catch((reason) => {\n            this.props.updateDirtyState(false);\n            const trans = this.props.translator.load('jupyterlab');\n            void showErrorMessage(trans.__('Error saving settings.'), reason);\n        });\n    }\n    render() {\n        const trans = this.props.translator.load('jupyterlab');\n        return (React.createElement(React.Fragment, null,\n            React.createElement(\"div\", { className: \"jp-SettingsHeader\" },\n                React.createElement(\"h2\", { className: \"jp-SettingsHeader-title\", title: this.props.settings.schema.description }, this.props.settings.schema.title),\n                React.createElement(\"div\", { className: \"jp-SettingsHeader-buttonbar\" }, this.state.isModified && (React.createElement(Button, { className: \"jp-RestoreButton\", onClick: this.reset }, trans.__('Restore to Defaults')))),\n                React.createElement(\"div\", { className: \"jp-SettingsHeader-description\" }, this.props.settings.schema.description)),\n            React.createElement(FormComponent, { validator: validatorAjv8, schema: this.state.filteredSchema, formData: this._getFilteredFormData(this.state.filteredSchema), uiSchema: this.state.uiSchema, fields: this.props.renderers[this.props.settings.id], formContext: this.state.formContext, liveValidate: true, idPrefix: `jp-SettingsEditor-${this.props.settings.id}`, onChange: this._onChange, translator: this.props.translator, experimental_defaultFormStateBehavior: {\n                    emptyObjectFields: 'populateRequiredDefaults'\n                } })));\n    }\n    _setUiSchema(prevRenderers) {\n        var _a;\n        const renderers = this.props.renderers[this.props.settings.id];\n        if (!JSONExt.deepEqual(Object.keys(prevRenderers !== null && prevRenderers !== void 0 ? prevRenderers : {}).sort(), Object.keys(renderers !== null && renderers !== void 0 ? renderers : {}).sort())) {\n            /**\n             * Construct uiSchema to pass any custom renderers to the form editor.\n             */\n            const uiSchema = {};\n            for (const id in this.props.renderers[this.props.settings.id]) {\n                if (Object.keys((_a = this.props.settings.schema.properties) !== null && _a !== void 0 ? _a : {}).includes(id)) {\n                    uiSchema[id] = {\n                        'ui:field': id\n                    };\n                }\n            }\n            this.setState({ uiSchema });\n        }\n    }\n    _setFilteredSchema(prevFilteredValues) {\n        var _a, _b, _c, _d;\n        // Update the filtered value if the filter or the schema has changed.\n        if (prevFilteredValues === undefined ||\n            !JSONExt.deepEqual(prevFilteredValues, this.props.filteredValues) ||\n            !JSONExt.deepEqual(this.state.formContext.schema, this.props.settings.schema)) {\n            /**\n             * Only show fields that match search value.\n             */\n            const filteredSchema = JSONExt.deepCopy(this.props.settings.schema);\n            if ((_b = (_a = this.props.filteredValues) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0 > 0) {\n                for (const field in filteredSchema.properties) {\n                    if (!((_c = this.props.filteredValues) === null || _c === void 0 ? void 0 : _c.includes((_d = filteredSchema.properties[field].title) !== null && _d !== void 0 ? _d : field))) {\n                        delete filteredSchema.properties[field];\n                    }\n                }\n            }\n            this.setState(previousState => ({\n                filteredSchema,\n                formContext: {\n                    ...previousState.formContext,\n                    schema: JSONExt.deepCopy(this.props.settings.schema)\n                }\n            }));\n        }\n    }\n    _getFilteredFormData(filteredSchema) {\n        if (!(filteredSchema === null || filteredSchema === void 0 ? void 0 : filteredSchema.properties)) {\n            return this._formData;\n        }\n        const filteredFormData = JSONExt.deepCopy(this._formData);\n        for (const field in filteredFormData) {\n            if (!filteredSchema.properties[field]) {\n                delete filteredFormData[field];\n            }\n        }\n        return filteredFormData;\n    }\n}\n//# sourceMappingURL=SettingsFormEditor.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport React from 'react';\nexport const SettingsEditorPlaceholder = ({ translator }) => {\n    const trans = translator.load('jupyterlab');\n    return (React.createElement(\"div\", { className: \"jp-SettingsEditor-placeholder\" },\n        React.createElement(\"div\", { className: \"jp-SettingsEditor-placeholderContent\" },\n            React.createElement(\"h3\", null, trans.__('No Plugin Selected')),\n            React.createElement(\"p\", null, trans.__('Select a plugin from the list to view and edit its preferences.')))));\n};\n//# sourceMappingURL=InstructionsPlaceholder.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport React, { useEffect, useState } from 'react';\nimport { SettingsFormEditor } from './SettingsFormEditor';\nimport { SettingsEditorPlaceholder } from './InstructionsPlaceholder';\n/**\n * React component that displays a list of SettingsFormEditor\n * components.\n */\nexport const SettingsPanel = ({ settings, editorRegistry, onSelect, handleSelectSignal, hasError, updateDirtyState, updateFilterSignal, translator, initialFilter }) => {\n    const [activePluginId, setActivePluginId] = useState(null);\n    const [filterPlugin, setFilter] = useState(initialFilter ? () => initialFilter : null);\n    const wrapperRef = React.useRef(null);\n    const editorDirtyStates = React.useRef({});\n    useEffect(() => {\n        var _a;\n        const onFilterUpdate = (list, newFilter) => {\n            newFilter ? setFilter(() => newFilter) : setFilter(null);\n        };\n        // When filter updates, only show plugins that match search.\n        updateFilterSignal.connect(onFilterUpdate);\n        const onSelectChange = (list, pluginId) => {\n            setActivePluginId(pluginId);\n        };\n        (_a = handleSelectSignal === null || handleSelectSignal === void 0 ? void 0 : handleSelectSignal.connect) === null || _a === void 0 ? void 0 : _a.call(handleSelectSignal, onSelectChange);\n        return () => {\n            var _a;\n            updateFilterSignal.disconnect(onFilterUpdate);\n            (_a = handleSelectSignal === null || handleSelectSignal === void 0 ? void 0 : handleSelectSignal.disconnect) === null || _a === void 0 ? void 0 : _a.call(handleSelectSignal, onSelectChange);\n        };\n    }, []);\n    const updateDirtyStates = React.useCallback((id, dirty) => {\n        if (editorDirtyStates.current) {\n            editorDirtyStates.current[id] = dirty;\n            for (const editor in editorDirtyStates.current) {\n                if (editorDirtyStates.current[editor]) {\n                    updateDirtyState(true);\n                    return;\n                }\n            }\n        }\n        updateDirtyState(false);\n    }, [editorDirtyStates, updateDirtyState]);\n    const renderers = React.useMemo(() => Object.entries(editorRegistry.renderers).reduce((agg, [id, renderer]) => {\n        const splitPosition = id.lastIndexOf('.');\n        const pluginId = id.substring(0, splitPosition);\n        const propertyName = id.substring(splitPosition + 1);\n        if (!agg[pluginId]) {\n            agg[pluginId] = {};\n        }\n        if (!agg[pluginId][propertyName] && renderer.fieldRenderer) {\n            agg[pluginId][propertyName] = renderer.fieldRenderer;\n        }\n        return agg;\n    }, {}), [editorRegistry]);\n    if (!activePluginId && !filterPlugin) {\n        return React.createElement(SettingsEditorPlaceholder, { translator: translator });\n    }\n    return (React.createElement(\"div\", { className: \"jp-SettingsPanel\", ref: wrapperRef }, settings.map(pluginSettings => {\n        // Pass filtered results to SettingsFormEditor to only display filtered fields.\n        const filtered = filterPlugin\n            ? filterPlugin(pluginSettings.plugin)\n            : null;\n        // If filtered results are an array, only show if the array is non-empty.\n        if ((activePluginId && activePluginId !== pluginSettings.id) ||\n            (filtered !== null && filtered.length === 0)) {\n            return undefined;\n        }\n        return (React.createElement(\"div\", { className: \"jp-SettingsForm\", key: `${pluginSettings.id}SettingsEditor` },\n            React.createElement(SettingsFormEditor, { filteredValues: filtered, settings: pluginSettings, renderers: renderers, hasError: (error) => {\n                    hasError(pluginSettings.id, error);\n                }, updateDirtyState: (dirty) => {\n                    updateDirtyStates(pluginSettings.id, dirty);\n                }, onSelect: onSelect, translator: translator })));\n    })));\n};\n//# sourceMappingURL=settingspanel.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { showDialog } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { ReactWidget, updateFilterFunction, UseSignal } from '@jupyterlab/ui-components';\nimport { Signal } from '@lumino/signaling';\nimport { SplitPanel } from '@lumino/widgets';\nimport React from 'react';\nimport { PluginList } from './pluginlist';\nimport { SettingsPanel } from './settingspanel';\n/**\n * Form based interface for editing settings.\n */\nexport class SettingsEditor extends SplitPanel {\n    constructor(options) {\n        super({\n            orientation: 'horizontal',\n            renderer: SplitPanel.defaultRenderer,\n            spacing: 1\n        });\n        this._clearDirty = null;\n        this._dirty = false;\n        this._saveStateChange = new Signal(this);\n        this.translator = options.translator || nullTranslator;\n        this._status = options.status;\n        this._listModel = new PluginList.Model({\n            registry: options.registry,\n            // Filters out a couple of plugins that take too long to load in the new settings editor.\n            toSkip: options.toSkip\n        });\n        this._list = new PluginList({\n            registry: options.registry,\n            translator: this.translator,\n            query: options.query,\n            model: this._listModel\n        });\n        this._listModel.changed.connect(() => {\n            this.update();\n        });\n        this.addWidget(this._list);\n        this.setDirtyState = this.setDirtyState.bind(this);\n        const settingsPanel = ReactWidget.create(React.createElement(UseSignal, { signal: this._listModel.changed }, () => (React.createElement(SettingsPanel, { settings: [...Object.values(this._listModel.settings)], editorRegistry: options.editorRegistry, handleSelectSignal: this._list.handleSelectSignal, onSelect: (id) => (this._list.selection = id), hasError: this._list.setError, updateFilterSignal: this._list.updateFilterSignal, updateDirtyState: this.setDirtyState, translator: this.translator, initialFilter: this._list.filter }))));\n        // Initializes the settings panel after loading the schema for all plugins.\n        this._listModel.ready\n            .then(() => {\n            this.addWidget(settingsPanel);\n        })\n            .catch(reason => {\n            console.error(`Failed to load the setting plugins:\\n${reason}`);\n        });\n    }\n    /**\n     * A signal emitted on the start and end of a saving operation.\n     */\n    get saveStateChanged() {\n        return this._saveStateChange;\n    }\n    /**\n     * Set the dirty state status\n     *\n     * @param dirty New status\n     */\n    setDirtyState(dirty) {\n        this._dirty = dirty;\n        if (this._dirty && !this._clearDirty) {\n            this._clearDirty = this._status.setDirty();\n        }\n        else if (!this._dirty && this._clearDirty) {\n            this._clearDirty.dispose();\n            this._clearDirty = null;\n        }\n        if (dirty) {\n            if (!this.title.className.includes('jp-mod-dirty')) {\n                this.title.className += ' jp-mod-dirty';\n            }\n        }\n        else {\n            this.title.className = this.title.className.replace('jp-mod-dirty', '');\n        }\n        this._saveStateChange.emit(dirty ? 'started' : 'completed');\n    }\n    /**\n     * Updates the filter of the plugin list.\n     *\n     * @param query The query to filter the plugin list\n     */\n    updateQuery(query) {\n        this._list.setFilter(query ? updateFilterFunction(query, false, false) : null, query);\n    }\n    /**\n     * A message handler invoked on a `'close-request'` message.\n     *\n     * @param msg Widget message\n     */\n    onCloseRequest(msg) {\n        const trans = this.translator.load('jupyterlab');\n        if (this._list.hasErrors) {\n            void showDialog({\n                title: trans.__('Warning'),\n                body: trans.__('Unsaved changes due to validation error. Continue without saving?')\n            }).then(value => {\n                if (value.button.accept) {\n                    this.dispose();\n                    super.onCloseRequest(msg);\n                }\n            });\n        }\n        else if (this._dirty) {\n            void showDialog({\n                title: trans.__('Warning'),\n                body: trans.__('Some changes have not been saved. Continue without saving?')\n            }).then(value => {\n                if (value.button.accept) {\n                    this.dispose();\n                    super.onCloseRequest(msg);\n                }\n            });\n        }\n        else {\n            this.dispose();\n            super.onCloseRequest(msg);\n        }\n    }\n}\n//# sourceMappingURL=settingseditor.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Printing } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { Panel, Widget } from '@lumino/widgets';\n/**\n * The class name added to inspector panels.\n */\nconst PANEL_CLASS = 'jp-Inspector';\n/**\n * The class name added to inspector content.\n */\nconst CONTENT_CLASS = 'jp-Inspector-content';\n/**\n * The class name added to default inspector content.\n */\nconst DEFAULT_CONTENT_CLASS = 'jp-Inspector-placeholderContent';\n/**\n * A panel which contains a set of inspectors.\n */\nexport class InspectorPanel extends Panel {\n    /**\n     * Construct an inspector.\n     */\n    constructor(options = {}) {\n        super();\n        this._source = null;\n        this.translator = options.translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        if (options.initialContent instanceof Widget) {\n            this._content = options.initialContent;\n        }\n        else if (typeof options.initialContent === 'string') {\n            this._content = InspectorPanel._generateContentWidget(`<p>${options.initialContent}</p>`);\n        }\n        else {\n            const placeholderHeadline = `<h3>${this._trans.__('No Documentation')}</h3>`;\n            const placeholderText = `<p>${this._trans.__('Move the cursor to a code fragment (e.g. function or object) to request information about it from the kernel attached to the editor.')}</p>`;\n            this._content = InspectorPanel._generateContentWidget(`${placeholderHeadline}${placeholderText}`);\n        }\n        this.addClass(PANEL_CLASS);\n        this.layout.addWidget(this._content);\n    }\n    /**\n     * Print in iframe\n     */\n    [Printing.symbol]() {\n        return () => Printing.printWidget(this);\n    }\n    /**\n     * The source of events the inspector panel listens for.\n     */\n    get source() {\n        return this._source;\n    }\n    set source(source) {\n        if (this._source === source) {\n            return;\n        }\n        // Disconnect old signal handler.\n        if (this._source) {\n            this._source.standby = true;\n            this._source.inspected.disconnect(this.onInspectorUpdate, this);\n            this._source.disposed.disconnect(this.onSourceDisposed, this);\n        }\n        // Reject a source that is already disposed.\n        if (source && source.isDisposed) {\n            source = null;\n        }\n        // Update source.\n        this._source = source;\n        // Connect new signal handler.\n        if (this._source) {\n            this._source.standby = false;\n            this._source.inspected.connect(this.onInspectorUpdate, this);\n            this._source.disposed.connect(this.onSourceDisposed, this);\n        }\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this.source = null;\n        super.dispose();\n    }\n    /**\n     * Handle inspector update signals.\n     */\n    onInspectorUpdate(sender, args) {\n        const { content } = args;\n        // Update the content of the inspector widget.\n        if (!content || content === this._content) {\n            return;\n        }\n        this._content.dispose();\n        this._content = content;\n        content.addClass(CONTENT_CLASS);\n        this.layout.addWidget(content);\n    }\n    /**\n     * Handle source disposed signals.\n     */\n    onSourceDisposed(sender, args) {\n        this.source = null;\n    }\n    /**\n     * Generate content widget from string\n     */\n    static _generateContentWidget(message) {\n        const widget = new Widget();\n        widget.node.innerHTML = message;\n        widget.addClass(CONTENT_CLASS);\n        widget.addClass(DEFAULT_CONTENT_CLASS);\n        return widget;\n    }\n}\n//# sourceMappingURL=inspector.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Text } from '@jupyterlab/coreutils';\nimport { MimeModel } from '@jupyterlab/rendermime';\nimport { JSONExt } from '@lumino/coreutils';\nimport { Debouncer } from '@lumino/polling';\nimport { Signal } from '@lumino/signaling';\n/**\n * An object that handles code inspection.\n */\nexport class InspectionHandler {\n    /**\n     * Construct a new inspection handler for a widget.\n     */\n    constructor(options) {\n        this._cleared = new Signal(this);\n        this._disposed = new Signal(this);\n        this._editor = null;\n        this._inspected = new Signal(this);\n        this._isDisposed = false;\n        this._pending = 0;\n        this._standby = true;\n        this._lastInspectedReply = null;\n        this._connector = options.connector;\n        this._rendermime = options.rendermime;\n        this._debouncer = new Debouncer(this.onEditorChange.bind(this), 250);\n    }\n    /**\n     * A signal emitted when the inspector should clear all items.\n     */\n    get cleared() {\n        return this._cleared;\n    }\n    /**\n     * A signal emitted when the handler is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * A signal emitted when an inspector value is generated.\n     */\n    get inspected() {\n        return this._inspected;\n    }\n    /**\n     * The editor widget used by the inspection handler.\n     */\n    get editor() {\n        return this._editor;\n    }\n    set editor(newValue) {\n        if (newValue === this._editor) {\n            return;\n        }\n        // Remove all of our listeners.\n        Signal.disconnectReceiver(this);\n        const editor = (this._editor = newValue);\n        if (editor) {\n            // Clear the inspector in preparation for a new editor.\n            this._cleared.emit(void 0);\n            // Call onEditorChange to cover the case where the user changes\n            // the active cell\n            this.onEditorChange();\n            editor.model.selections.changed.connect(this._onChange, this);\n            editor.model.sharedModel.changed.connect(this._onChange, this);\n        }\n    }\n    /**\n     * Indicates whether the handler makes API inspection requests or stands by.\n     *\n     * #### Notes\n     * The use case for this attribute is to limit the API traffic when no\n     * inspector is visible.\n     */\n    get standby() {\n        return this._standby;\n    }\n    set standby(value) {\n        this._standby = value;\n    }\n    /**\n     * Get whether the inspection handler is disposed.\n     *\n     * #### Notes\n     * This is a read-only property.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources used by the handler.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._debouncer.dispose();\n        this._disposed.emit(void 0);\n        Signal.clearData(this);\n    }\n    /**\n     * Handle a text changed signal from an editor.\n     *\n     * #### Notes\n     * Update the hints inspector based on a text change.\n     */\n    onEditorChange(customText) {\n        // If the handler is in standby mode, bail.\n        if (this._standby) {\n            return;\n        }\n        const editor = this.editor;\n        if (!editor) {\n            return;\n        }\n        const text = customText ? customText : editor.model.sharedModel.getSource();\n        const position = editor.getCursorPosition();\n        const offset = Text.jsIndexToCharIndex(editor.getOffsetAt(position), text);\n        const update = { content: null };\n        const pending = ++this._pending;\n        void this._connector\n            .fetch({ offset, text })\n            .then(reply => {\n            // If handler has been disposed or a newer request is pending, bail.\n            if (!reply || this.isDisposed || pending !== this._pending) {\n                this._lastInspectedReply = null;\n                this._inspected.emit(update);\n                return;\n            }\n            const { data } = reply;\n            // Do not update if there would be no change.\n            if (this._lastInspectedReply &&\n                JSONExt.deepEqual(this._lastInspectedReply, data)) {\n                return;\n            }\n            const mimeType = this._rendermime.preferredMimeType(data);\n            if (mimeType) {\n                const widget = this._rendermime.createRenderer(mimeType);\n                const model = new MimeModel({ data });\n                void widget.renderModel(model);\n                update.content = widget;\n            }\n            this._lastInspectedReply = reply.data;\n            this._inspected.emit(update);\n        })\n            .catch(reason => {\n            // Since almost all failures are benign, fail silently.\n            this._lastInspectedReply = null;\n            this._inspected.emit(update);\n        });\n    }\n    /**\n     * Handle changes to the editor state, debouncing.\n     */\n    _onChange() {\n        void this._debouncer.invoke();\n    }\n}\n//# sourceMappingURL=handler.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { InspectionHandler, InspectorPanel } from '@jupyterlab/inspector';\nimport { RenderMimeRegistry, standardRendererFactories } from '@jupyterlab/rendermime';\nimport { DataConnector } from '@jupyterlab/statedb';\nimport { nullTranslator } from '@jupyterlab/translation';\n/**\n * Create a raw editor inspector.\n */\nexport function createInspector(editor, rendermime, translator) {\n    translator = translator || nullTranslator;\n    const trans = translator.load('jupyterlab');\n    const connector = new InspectorConnector(editor, translator);\n    const inspector = new InspectorPanel({\n        initialContent: trans.__('Any errors will be listed here'),\n        translator: translator\n    });\n    const handler = new InspectionHandler({\n        connector,\n        rendermime: rendermime ||\n            new RenderMimeRegistry({\n                initialFactories: standardRendererFactories,\n                translator: translator\n            })\n    });\n    inspector.addClass('jp-SettingsDebug');\n    inspector.source = handler;\n    handler.editor = editor.source;\n    return inspector;\n}\n/**\n * The data connector used to populate a code inspector.\n *\n * #### Notes\n * This data connector debounces fetch requests to throttle them at no more than\n * one request per 100ms. This means that using the connector to populate\n * multiple client objects can lead to missed fetch responses.\n */\nclass InspectorConnector extends DataConnector {\n    constructor(editor, translator) {\n        super();\n        this._current = 0;\n        this._editor = editor;\n        this._trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n    }\n    /**\n     * Fetch inspection requests.\n     */\n    fetch(request) {\n        return new Promise(resolve => {\n            // Debounce requests at a rate of 100ms.\n            const current = (this._current = window.setTimeout(() => {\n                if (current !== this._current) {\n                    return resolve(undefined);\n                }\n                const errors = this._validate(request.text);\n                if (!errors) {\n                    return resolve({\n                        data: { 'text/markdown': this._trans.__('No errors found') },\n                        metadata: {}\n                    });\n                }\n                resolve({ data: this.render(errors), metadata: {} });\n            }, 100));\n        });\n    }\n    /**\n     * Render validation errors as an HTML string.\n     */\n    render(errors) {\n        return {\n            'text/markdown': errors.map(this.renderError.bind(this)).join('')\n        };\n    }\n    /**\n     * Render an individual validation error as a markdown string.\n     */\n    renderError(error) {\n        var _a;\n        switch (error.keyword) {\n            case 'additionalProperties':\n                return `**\\`[${this._trans.__('additional property error')}]\\`**\n          ${this._trans.__('`%1` is not a valid property', (_a = error.params) === null || _a === void 0 ? void 0 : _a.additionalProperty)}`;\n            case 'syntax':\n                return `**\\`[${this._trans.__('syntax error')}]\\`** *${error.message}*`;\n            case 'type':\n                return `**\\`[${this._trans.__('type error')}]\\`**\n          \\`${error.instancePath}\\` ${error.message}`;\n            default:\n                return `**\\`[${this._trans.__('error')}]\\`** *${error.message}*`;\n        }\n    }\n    _validate(raw) {\n        const editor = this._editor;\n        if (!editor.settings) {\n            return null;\n        }\n        const { id, schema, version } = editor.settings;\n        const data = { composite: {}, user: {} };\n        const validator = editor.registry.validator;\n        return validator.validateData({ data, id, raw, schema, version }, false);\n    }\n}\n//# sourceMappingURL=inspector.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { CodeEditor, CodeEditorWrapper } from '@jupyterlab/codeeditor';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { CommandToolbarButton, Toolbar } from '@jupyterlab/ui-components';\nimport { Signal } from '@lumino/signaling';\nimport { BoxLayout, SplitPanel, Widget } from '@lumino/widgets';\nimport { createInspector } from './inspector';\n/**\n * A class name added to all raw editors.\n */\nconst RAW_EDITOR_CLASS = 'jp-SettingsRawEditor';\n/**\n * A class name added to the user settings editor.\n */\nconst USER_CLASS = 'jp-SettingsRawEditor-user';\n/**\n * A class name added to the user editor when there are validation errors.\n */\nconst ERROR_CLASS = 'jp-mod-error';\n/**\n * A raw JSON settings editor.\n */\nexport class RawEditor extends SplitPanel {\n    /**\n     * Create a new plugin editor.\n     */\n    constructor(options) {\n        super({\n            orientation: 'horizontal',\n            renderer: SplitPanel.defaultRenderer,\n            spacing: 1\n        });\n        this._canRevert = false;\n        this._canSave = false;\n        this._commandsChanged = new Signal(this);\n        this._settings = null;\n        this._toolbar = new Toolbar();\n        const { commands, editorFactory, registry, translator } = options;\n        this.registry = registry;\n        this.translator = translator || nullTranslator;\n        this._commands = commands;\n        // Create read-only defaults editor.\n        const defaults = (this._defaults = new CodeEditorWrapper({\n            editorOptions: {\n                config: { readOnly: true }\n            },\n            model: new CodeEditor.Model({ mimeType: 'text/javascript' }),\n            factory: editorFactory\n        }));\n        // Create read-write user settings editor.\n        const user = (this._user = new CodeEditorWrapper({\n            editorOptions: {\n                config: { lineNumbers: true }\n            },\n            model: new CodeEditor.Model({ mimeType: 'text/javascript' }),\n            factory: editorFactory\n        }));\n        user.addClass(USER_CLASS);\n        user.editor.model.sharedModel.changed.connect(this._onTextChanged, this);\n        // Create and set up an inspector.\n        this._inspector = createInspector(this, options.rendermime, this.translator);\n        this.addClass(RAW_EDITOR_CLASS);\n        this._onSaveError = options.onSaveError;\n        this.addWidget(Private.defaultsEditor(defaults, this.translator));\n        this.addWidget(Private.userEditor(user, this._toolbar, this._inspector, this.translator));\n    }\n    /**\n     * Whether the raw editor revert functionality is enabled.\n     */\n    get canRevert() {\n        return this._canRevert;\n    }\n    /**\n     * Whether the raw editor save functionality is enabled.\n     */\n    get canSave() {\n        return this._canSave;\n    }\n    /**\n     * Emits when the commands passed in at instantiation change.\n     */\n    get commandsChanged() {\n        return this._commandsChanged;\n    }\n    /**\n     * Tests whether the settings have been modified and need saving.\n     */\n    get isDirty() {\n        var _a, _b;\n        return ((_b = this._user.editor.model.sharedModel.getSource() !== ((_a = this._settings) === null || _a === void 0 ? void 0 : _a.raw)) !== null && _b !== void 0 ? _b : '');\n    }\n    /**\n     * The plugin settings being edited.\n     */\n    get settings() {\n        return this._settings;\n    }\n    set settings(settings) {\n        if (!settings && !this._settings) {\n            return;\n        }\n        const samePlugin = settings && this._settings && settings.plugin === this._settings.plugin;\n        if (samePlugin) {\n            return;\n        }\n        const defaults = this._defaults;\n        const user = this._user;\n        // Disconnect old settings change handler.\n        if (this._settings) {\n            this._settings.changed.disconnect(this._onSettingsChanged, this);\n        }\n        if (settings) {\n            this._settings = settings;\n            this._settings.changed.connect(this._onSettingsChanged, this);\n            this._onSettingsChanged();\n        }\n        else {\n            this._settings = null;\n            defaults.editor.model.sharedModel.setSource('');\n            user.editor.model.sharedModel.setSource('');\n        }\n        this.update();\n    }\n    /**\n     * Get the relative sizes of the two editor panels.\n     */\n    get sizes() {\n        return this.relativeSizes();\n    }\n    set sizes(sizes) {\n        this.setRelativeSizes(sizes);\n    }\n    /**\n     * The inspectable source editor for user input.\n     */\n    get source() {\n        return this._user.editor;\n    }\n    /**\n     * Dispose of the resources held by the raw editor.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._defaults.model.dispose();\n        this._defaults.dispose();\n        this._user.model.dispose();\n        this._user.dispose();\n        super.dispose();\n    }\n    /**\n     * Revert the editor back to original settings.\n     */\n    revert() {\n        var _a, _b;\n        this._user.editor.model.sharedModel.setSource((_b = (_a = this.settings) === null || _a === void 0 ? void 0 : _a.raw) !== null && _b !== void 0 ? _b : '');\n        this._updateToolbar(false, false);\n    }\n    /**\n     * Save the contents of the raw editor.\n     */\n    save() {\n        if (!this.isDirty || !this._settings) {\n            return Promise.resolve(undefined);\n        }\n        const settings = this._settings;\n        const source = this._user.editor.model.sharedModel.getSource();\n        return settings\n            .save(source)\n            .then(() => {\n            this._updateToolbar(false, false);\n        })\n            .catch(reason => {\n            this._updateToolbar(true, false);\n            this._onSaveError(reason, this.translator);\n        });\n    }\n    /**\n     * Handle `after-attach` messages.\n     */\n    onAfterAttach(msg) {\n        Private.populateToolbar(this._commands, this._toolbar);\n        this.update();\n    }\n    /**\n     * Handle text changes in the underlying editor.\n     */\n    _onTextChanged() {\n        const raw = this._user.editor.model.sharedModel.getSource();\n        const settings = this._settings;\n        this.removeClass(ERROR_CLASS);\n        // If there are no settings loaded or there are no changes, bail.\n        if (!settings || settings.raw === raw) {\n            this._updateToolbar(false, false);\n            return;\n        }\n        const errors = settings.validate(raw);\n        if (errors) {\n            this.addClass(ERROR_CLASS);\n            this._updateToolbar(true, false);\n            return;\n        }\n        this._updateToolbar(true, true);\n    }\n    /**\n     * Handle updates to the settings.\n     */\n    _onSettingsChanged() {\n        var _a, _b;\n        const settings = this._settings;\n        const defaults = this._defaults;\n        const user = this._user;\n        defaults.editor.model.sharedModel.setSource((_a = settings === null || settings === void 0 ? void 0 : settings.annotatedDefaults()) !== null && _a !== void 0 ? _a : '');\n        user.editor.model.sharedModel.setSource((_b = settings === null || settings === void 0 ? void 0 : settings.raw) !== null && _b !== void 0 ? _b : '');\n    }\n    _updateToolbar(revert = this._canRevert, save = this._canSave) {\n        const commands = this._commands;\n        this._canRevert = revert;\n        this._canSave = save;\n        this._commandsChanged.emit([commands.revert, commands.save]);\n    }\n}\n/**\n * A namespace for private module data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Returns the wrapped setting defaults editor.\n     */\n    function defaultsEditor(editor, translator) {\n        translator = translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        const widget = new Widget();\n        const layout = (widget.layout = new BoxLayout({ spacing: 0 }));\n        const banner = new Widget();\n        const bar = new Toolbar();\n        bar.node.setAttribute('aria-label', trans.__('Default editor toolbar'));\n        const defaultTitle = trans.__('System Defaults');\n        banner.node.innerText = defaultTitle;\n        bar.insertItem(0, 'banner', banner);\n        layout.addWidget(bar);\n        layout.addWidget(editor);\n        return widget;\n    }\n    Private.defaultsEditor = defaultsEditor;\n    /**\n     * Populate the raw editor toolbar.\n     */\n    function populateToolbar(commands, toolbar) {\n        const { registry, revert, save } = commands;\n        toolbar.addItem('spacer', Toolbar.createSpacerItem());\n        // Note the button order. The rationale here is that no matter what state\n        // the toolbar is in, the relative location of the revert button in the\n        // toolbar remains the same.\n        [revert, save].forEach(name => {\n            const item = new CommandToolbarButton({ commands: registry, id: name });\n            toolbar.addItem(name, item);\n        });\n    }\n    Private.populateToolbar = populateToolbar;\n    /**\n     * Returns the wrapped user overrides editor.\n     */\n    function userEditor(editor, toolbar, inspector, translator) {\n        translator = translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        const userTitle = trans.__('User Preferences');\n        const widget = new Widget();\n        const layout = (widget.layout = new BoxLayout({ spacing: 0 }));\n        const banner = new Widget();\n        banner.node.innerText = userTitle;\n        toolbar.insertItem(0, 'banner', banner);\n        layout.addWidget(toolbar);\n        layout.addWidget(editor);\n        layout.addWidget(inspector);\n        return widget;\n    }\n    Private.userEditor = userEditor;\n})(Private || (Private = {}));\n//# sourceMappingURL=raweditor.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { Dialog, showDialog, showErrorMessage } from '@jupyterlab/apputils';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { JSONExt } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\nimport { StackedLayout, Widget } from '@lumino/widgets';\nimport { RawEditor } from './raweditor';\n/**\n * The class name added to all plugin editors.\n */\nconst PLUGIN_EDITOR_CLASS = 'jp-PluginEditor';\n/**\n * An individual plugin settings editor.\n */\nexport class PluginEditor extends Widget {\n    /**\n     * Create a new plugin editor.\n     *\n     * @param options - The plugin editor instantiation options.\n     */\n    constructor(options) {\n        super();\n        this._settings = null;\n        this._stateChanged = new Signal(this);\n        this.addClass(PLUGIN_EDITOR_CLASS);\n        const { commands, editorFactory, registry, rendermime, translator } = options;\n        this.translator = translator || nullTranslator;\n        this._trans = this.translator.load('jupyterlab');\n        // TODO: Remove this layout. We were using this before when we\n        // when we had a way to switch between the raw and table editor\n        // Now, the raw editor is the only child and probably could merged into\n        // this class directly in the future.\n        const layout = (this.layout = new StackedLayout());\n        const { onSaveError } = Private;\n        this.raw = this._rawEditor = new RawEditor({\n            commands,\n            editorFactory,\n            onSaveError,\n            registry,\n            rendermime,\n            translator\n        });\n        this._rawEditor.handleMoved.connect(this._onStateChanged, this);\n        layout.addWidget(this._rawEditor);\n    }\n    /**\n     * Tests whether the settings have been modified and need saving.\n     */\n    get isDirty() {\n        return this._rawEditor.isDirty;\n    }\n    /**\n     * The plugin settings being edited.\n     */\n    get settings() {\n        return this._settings;\n    }\n    set settings(settings) {\n        if (this._settings === settings) {\n            return;\n        }\n        const raw = this._rawEditor;\n        this._settings = raw.settings = settings;\n        this.update();\n    }\n    /**\n     * The plugin editor layout state.\n     */\n    get state() {\n        const plugin = this._settings ? this._settings.id : '';\n        const { sizes } = this._rawEditor;\n        return { plugin, sizes };\n    }\n    set state(state) {\n        if (JSONExt.deepEqual(this.state, state)) {\n            return;\n        }\n        this._rawEditor.sizes = state.sizes;\n        this.update();\n    }\n    /**\n     * A signal that emits when editor layout state changes and needs to be saved.\n     */\n    get stateChanged() {\n        return this._stateChanged;\n    }\n    /**\n     * If the editor is in a dirty state, confirm that the user wants to leave.\n     */\n    confirm() {\n        if (this.isHidden || !this.isAttached || !this.isDirty) {\n            return Promise.resolve(undefined);\n        }\n        return showDialog({\n            title: this._trans.__('You have unsaved changes.'),\n            body: this._trans.__('Do you want to leave without saving?'),\n            buttons: [\n                Dialog.cancelButton({ label: this._trans.__('Cancel') }),\n                Dialog.okButton({ label: this._trans.__('Ok') })\n            ]\n        }).then(result => {\n            if (!result.button.accept) {\n                throw new Error('User canceled.');\n            }\n        });\n    }\n    /**\n     * Dispose of the resources held by the plugin editor.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        super.dispose();\n        this._rawEditor.dispose();\n    }\n    /**\n     * Handle `after-attach` messages.\n     */\n    onAfterAttach(msg) {\n        this.update();\n    }\n    /**\n     * Handle `'update-request'` messages.\n     */\n    onUpdateRequest(msg) {\n        const raw = this._rawEditor;\n        const settings = this._settings;\n        if (!settings) {\n            this.hide();\n            return;\n        }\n        this.show();\n        raw.show();\n    }\n    /**\n     * Handle layout state changes that need to be saved.\n     */\n    _onStateChanged() {\n        this.stateChanged.emit(undefined);\n    }\n}\n/**\n * A namespace for private module data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Handle save errors.\n     */\n    function onSaveError(reason, translator) {\n        translator = translator || nullTranslator;\n        const trans = translator.load('jupyterlab');\n        console.error(`Saving setting editor value failed: ${reason.message}`);\n        void showErrorMessage(trans.__('Your changes were not saved.'), reason);\n    }\n    Private.onSaveError = onSaveError;\n})(Private || (Private = {}));\n//# sourceMappingURL=plugineditor.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { ReactWidget } from '@jupyterlab/ui-components';\nimport { JSONExt } from '@lumino/coreutils';\nimport { SplitPanel } from '@lumino/widgets';\nimport * as React from 'react';\nimport { SettingsEditorPlaceholder } from './InstructionsPlaceholder';\nimport { PluginEditor } from './plugineditor';\nimport { PluginList } from './pluginlist';\n/**\n * The ratio panes in the setting editor.\n */\nconst DEFAULT_LAYOUT = {\n    sizes: [1, 3],\n    container: {\n        editor: 'raw',\n        plugin: '',\n        sizes: [1, 1]\n    }\n};\n/**\n * An interface for modifying and saving application settings.\n */\nexport class JsonSettingEditor extends SplitPanel {\n    /**\n     * Create a new setting editor.\n     */\n    constructor(options) {\n        super({\n            orientation: 'horizontal',\n            renderer: SplitPanel.defaultRenderer,\n            spacing: 1\n        });\n        this._fetching = null;\n        this._saving = false;\n        this._state = JSONExt.deepCopy(DEFAULT_LAYOUT);\n        this.translator = options.translator || nullTranslator;\n        this.addClass('jp-SettingEditor');\n        this.key = options.key;\n        this.state = options.state;\n        const { commands, editorFactory, rendermime } = options;\n        const registry = (this.registry = options.registry);\n        const instructions = (this._instructions = ReactWidget.create(React.createElement(SettingsEditorPlaceholder, { translator: this.translator })));\n        instructions.addClass('jp-SettingEditorInstructions');\n        const editor = (this._editor = new PluginEditor({\n            commands,\n            editorFactory,\n            registry,\n            rendermime,\n            translator: this.translator\n        }));\n        const confirm = () => editor.confirm();\n        const list = (this._list = new PluginList({\n            confirm,\n            registry,\n            translator: this.translator\n        }));\n        const when = options.when;\n        if (when) {\n            this._when = Array.isArray(when) ? Promise.all(when) : when;\n        }\n        this.addWidget(list);\n        this.addWidget(instructions);\n        SplitPanel.setStretch(list, 0);\n        SplitPanel.setStretch(instructions, 1);\n        SplitPanel.setStretch(editor, 1);\n        editor.stateChanged.connect(this._onStateChanged, this);\n        list.changed.connect(this._onStateChanged, this);\n        this.handleMoved.connect(this._onStateChanged, this);\n    }\n    /**\n     * Whether the raw editor revert functionality is enabled.\n     */\n    get canRevertRaw() {\n        return this._editor.raw.canRevert;\n    }\n    /**\n     * Whether the raw editor save functionality is enabled.\n     */\n    get canSaveRaw() {\n        return this._editor.raw.canSave;\n    }\n    /**\n     * Emits when the commands passed in at instantiation change.\n     */\n    get commandsChanged() {\n        return this._editor.raw.commandsChanged;\n    }\n    /**\n     * The currently loaded settings.\n     */\n    get settings() {\n        return this._editor.settings;\n    }\n    /**\n     * The inspectable raw user editor source for the currently loaded settings.\n     */\n    get source() {\n        return this._editor.raw.source;\n    }\n    /**\n     * Dispose of the resources held by the setting editor.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        super.dispose();\n        this._editor.dispose();\n        this._instructions.dispose();\n        this._list.dispose();\n    }\n    /**\n     * Revert raw editor back to original settings.\n     */\n    revert() {\n        this._editor.raw.revert();\n    }\n    /**\n     * Save the contents of the raw editor.\n     */\n    save() {\n        return this._editor.raw.save();\n    }\n    /**\n     * Handle `'after-attach'` messages.\n     */\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        this.hide();\n        this._fetchState()\n            .then(() => {\n            this.show();\n            this._setState();\n        })\n            .catch(reason => {\n            console.error('Fetching setting editor state failed', reason);\n            this.show();\n            this._setState();\n        });\n    }\n    /**\n     * Handle `'close-request'` messages.\n     */\n    onCloseRequest(msg) {\n        this._editor\n            .confirm()\n            .then(() => {\n            super.onCloseRequest(msg);\n            this.dispose();\n        })\n            .catch(() => {\n            /* no op */\n        });\n    }\n    /**\n     * Get the state of the panel.\n     */\n    _fetchState() {\n        if (this._fetching) {\n            return this._fetching;\n        }\n        const { key, state } = this;\n        const promises = [state.fetch(key), this._when];\n        return (this._fetching = Promise.all(promises).then(([value]) => {\n            this._fetching = null;\n            if (this._saving) {\n                return;\n            }\n            this._state = Private.normalizeState(value, this._state);\n        }));\n    }\n    /**\n     * Handle root level layout state changes.\n     */\n    async _onStateChanged() {\n        this._state.sizes = this.relativeSizes();\n        this._state.container = this._editor.state;\n        this._state.container.plugin = this._list.selection;\n        try {\n            await this._saveState();\n        }\n        catch (error) {\n            console.error('Saving setting editor state failed', error);\n        }\n        this._setState();\n    }\n    /**\n     * Set the state of the setting editor.\n     */\n    async _saveState() {\n        const { key, state } = this;\n        const value = this._state;\n        this._saving = true;\n        try {\n            await state.save(key, value);\n            this._saving = false;\n        }\n        catch (error) {\n            this._saving = false;\n            throw error;\n        }\n    }\n    /**\n     * Set the layout sizes.\n     */\n    _setLayout() {\n        const editor = this._editor;\n        const state = this._state;\n        editor.state = state.container;\n        // Allow the message queue (which includes fit requests that might disrupt\n        // setting relative sizes) to clear before setting sizes.\n        requestAnimationFrame(() => {\n            this.setRelativeSizes(state.sizes);\n        });\n    }\n    /**\n     * Set the presets of the setting editor.\n     */\n    _setState() {\n        const editor = this._editor;\n        const list = this._list;\n        const { container } = this._state;\n        if (!container.plugin) {\n            editor.settings = null;\n            list.selection = '';\n            this._setLayout();\n            return;\n        }\n        if (editor.settings && editor.settings.id === container.plugin) {\n            this._setLayout();\n            return;\n        }\n        const instructions = this._instructions;\n        this.registry\n            .load(container.plugin)\n            .then(settings => {\n            if (instructions.isAttached) {\n                instructions.parent = null;\n            }\n            if (!editor.isAttached) {\n                this.addWidget(editor);\n            }\n            editor.settings = settings;\n            list.selection = container.plugin;\n            this._setLayout();\n        })\n            .catch(reason => {\n            console.error(`Loading ${container.plugin} settings failed.`, reason);\n            list.selection = this._state.container.plugin = '';\n            editor.settings = null;\n            this._setLayout();\n        });\n    }\n}\n/**\n * A namespace for private module data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Return a normalized restored layout state that defaults to the presets.\n     */\n    function normalizeState(saved, current) {\n        if (!saved) {\n            return JSONExt.deepCopy(DEFAULT_LAYOUT);\n        }\n        if (!('sizes' in saved) || !numberArray(saved.sizes)) {\n            saved.sizes = JSONExt.deepCopy(DEFAULT_LAYOUT.sizes);\n        }\n        if (!('container' in saved)) {\n            saved.container = JSONExt.deepCopy(DEFAULT_LAYOUT.container);\n            return saved;\n        }\n        const container = 'container' in saved &&\n            saved.container &&\n            typeof saved.container === 'object'\n            ? saved.container\n            : {};\n        saved.container = {\n            plugin: typeof container.plugin === 'string'\n                ? container.plugin\n                : DEFAULT_LAYOUT.container.plugin,\n            sizes: numberArray(container.sizes)\n                ? container.sizes\n                : JSONExt.deepCopy(DEFAULT_LAYOUT.container.sizes)\n        };\n        return saved;\n    }\n    Private.normalizeState = normalizeState;\n    /**\n     * Tests whether an array consists exclusively of numbers.\n     */\n    function numberArray(value) {\n        return Array.isArray(value) && value.every(x => typeof x === 'number');\n    }\n})(Private || (Private = {}));\n//# sourceMappingURL=jsonsettingeditor.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module settingeditor\n */\nexport * from './settingseditor';\nexport * from './jsonsettingeditor';\nexport * from './tokens';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The setting editor tracker token.\n */\nexport const ISettingEditorTracker = new Token('@jupyterlab/settingeditor:ISettingEditorTracker', `A widget tracker for the interactive setting editor.\n  Use this if you want to be able to iterate over and interact with setting editors\n  created by the application.`);\n/**\n * The setting editor tracker token.\n */\nexport const IJSONSettingEditorTracker = new Token('@jupyterlab/settingeditor:IJSONSettingEditorTracker', `A widget tracker for the JSON setting editor.\n  Use this if you want to be able to iterate over and interact with setting editors\n  created by the application.`);\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { CommandRegistry } from '@lumino/commands';\nimport { JSONExt } from '@lumino/coreutils';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Signal } from '@lumino/signaling';\nimport Ajv from 'ajv';\nimport * as json5 from 'json5';\nimport SCHEMA from './plugin-schema.json';\n/**\n * An alias for the JSON deep copy function.\n */\nconst copy = JSONExt.deepCopy;\n/** Default arguments for Ajv instances.\n *\n * https://ajv.js.org/options.html\n */\nconst AJV_DEFAULT_OPTIONS = {\n    /**\n     * @todo the implications of enabling strict mode are beyond the scope of\n     *       the initial PR\n     */\n    strict: false\n};\n/**\n * The ASCII record separator character.\n */\nconst RECORD_SEPARATOR = String.fromCharCode(30);\n/**\n * The default implementation of a schema validator.\n */\nexport class DefaultSchemaValidator {\n    /**\n     * Instantiate a schema validator.\n     */\n    constructor() {\n        this._composer = new Ajv({\n            useDefaults: true,\n            ...AJV_DEFAULT_OPTIONS\n        });\n        this._validator = new Ajv({ ...AJV_DEFAULT_OPTIONS });\n        this._composer.addSchema(SCHEMA, 'jupyterlab-plugin-schema');\n        this._validator.addSchema(SCHEMA, 'jupyterlab-plugin-schema');\n    }\n    /**\n     * Validate a plugin's schema and user data; populate the `composite` data.\n     *\n     * @param plugin - The plugin being validated. Its `composite` data will be\n     * populated by reference.\n     *\n     * @param populate - Whether plugin data should be populated, defaults to\n     * `true`.\n     *\n     * @returns A list of errors if either the schema or data fail to validate or\n     * `null` if there are no errors.\n     */\n    validateData(plugin, populate = true) {\n        const validate = this._validator.getSchema(plugin.id);\n        const compose = this._composer.getSchema(plugin.id);\n        // If the schemas do not exist, add them to the validator and continue.\n        if (!validate || !compose) {\n            if (plugin.schema.type !== 'object') {\n                const keyword = 'schema';\n                const message = `Setting registry schemas' root-level type must be ` +\n                    `'object', rejecting type: ${plugin.schema.type}`;\n                return [{ instancePath: 'type', keyword, schemaPath: '', message }];\n            }\n            const errors = this._addSchema(plugin.id, plugin.schema);\n            return errors || this.validateData(plugin);\n        }\n        // Parse the raw commented JSON into a user map.\n        let user;\n        try {\n            user = json5.parse(plugin.raw);\n        }\n        catch (error) {\n            if (error instanceof SyntaxError) {\n                return [\n                    {\n                        instancePath: '',\n                        keyword: 'syntax',\n                        schemaPath: '',\n                        message: error.message\n                    }\n                ];\n            }\n            const { column, description } = error;\n            const line = error.lineNumber;\n            return [\n                {\n                    instancePath: '',\n                    keyword: 'parse',\n                    schemaPath: '',\n                    message: `${description} (line ${line} column ${column})`\n                }\n            ];\n        }\n        if (!validate(user)) {\n            return validate.errors;\n        }\n        // Copy the user data before merging defaults into composite map.\n        const composite = copy(user);\n        if (!compose(composite)) {\n            return compose.errors;\n        }\n        if (populate) {\n            plugin.data = { composite, user };\n        }\n        return null;\n    }\n    /**\n     * Add a schema to the validator.\n     *\n     * @param plugin - The plugin ID.\n     *\n     * @param schema - The schema being added.\n     *\n     * @returns A list of errors if the schema fails to validate or `null` if there\n     * are no errors.\n     *\n     * #### Notes\n     * It is safe to call this function multiple times with the same plugin name.\n     */\n    _addSchema(plugin, schema) {\n        const composer = this._composer;\n        const validator = this._validator;\n        const validate = validator.getSchema('jupyterlab-plugin-schema');\n        // Validate against the main schema.\n        if (!validate(schema)) {\n            return validate.errors;\n        }\n        // Validate against the JSON schema meta-schema.\n        if (!validator.validateSchema(schema)) {\n            return validator.errors;\n        }\n        // Remove if schema already exists.\n        composer.removeSchema(plugin);\n        validator.removeSchema(plugin);\n        // Add schema to the validator and composer.\n        composer.addSchema(schema, plugin);\n        validator.addSchema(schema, plugin);\n        return null;\n    }\n}\n/**\n * The default concrete implementation of a setting registry.\n */\nexport class SettingRegistry {\n    /**\n     * Create a new setting registry.\n     */\n    constructor(options) {\n        /**\n         * The schema of the setting registry.\n         */\n        this.schema = SCHEMA;\n        /**\n         * The collection of setting registry plugins.\n         */\n        this.plugins = Object.create(null);\n        this._pluginChanged = new Signal(this);\n        this._ready = Promise.resolve();\n        this._transformers = Object.create(null);\n        this._unloadedPlugins = new Map();\n        this.connector = options.connector;\n        this.validator = options.validator || new DefaultSchemaValidator();\n        // Plugins with transformation may not be loaded if the transformation function is\n        // not yet available. To avoid fetching again the associated data when the transformation\n        // function is available, the plugin data is kept in cache.\n        if (options.plugins) {\n            options.plugins\n                .filter(plugin => plugin.schema['jupyter.lab.transform'])\n                .forEach(plugin => this._unloadedPlugins.set(plugin.id, plugin));\n            // Preload with any available data at instantiation-time.\n            this._ready = this._preload(options.plugins);\n        }\n    }\n    /**\n     * A signal that emits the name of a plugin when its settings change.\n     */\n    get pluginChanged() {\n        return this._pluginChanged;\n    }\n    /**\n     * Get an individual setting.\n     *\n     * @param plugin - The name of the plugin whose settings are being retrieved.\n     *\n     * @param key - The name of the setting being retrieved.\n     *\n     * @returns A promise that resolves when the setting is retrieved.\n     */\n    async get(plugin, key) {\n        // Wait for data preload before allowing normal operation.\n        await this._ready;\n        const plugins = this.plugins;\n        if (plugin in plugins) {\n            const { composite, user } = plugins[plugin].data;\n            return {\n                composite: composite[key] !== undefined ? copy(composite[key]) : undefined,\n                user: user[key] !== undefined ? copy(user[key]) : undefined\n            };\n        }\n        return this.load(plugin).then(() => this.get(plugin, key));\n    }\n    /**\n     * Load a plugin's settings into the setting registry.\n     *\n     * @param plugin - The name of the plugin whose settings are being loaded.\n     *\n     * @param forceTransform - An optional parameter to force replay the transforms methods.\n     *\n     * @returns A promise that resolves with a plugin settings object or rejects\n     * if the plugin is not found.\n     */\n    async load(plugin, forceTransform = false) {\n        // Wait for data preload before allowing normal operation.\n        await this._ready;\n        const plugins = this.plugins;\n        const registry = this; // eslint-disable-line\n        // If the plugin exists, resolve.\n        if (plugin in plugins) {\n            // Force replaying the transform function if expected.\n            if (forceTransform) {\n                // Empty the composite and user data before replaying the transforms.\n                plugins[plugin].data = { composite: {}, user: {} };\n                await this._load(await this._transform('fetch', plugins[plugin]));\n                this._pluginChanged.emit(plugin);\n            }\n            return new Settings({ plugin: plugins[plugin], registry });\n        }\n        // If the plugin is not loaded but has already been fetched.\n        if (this._unloadedPlugins.has(plugin) && plugin in this._transformers) {\n            await this._load(await this._transform('fetch', this._unloadedPlugins.get(plugin)));\n            if (plugin in plugins) {\n                this._pluginChanged.emit(plugin);\n                this._unloadedPlugins.delete(plugin);\n                return new Settings({ plugin: plugins[plugin], registry });\n            }\n        }\n        // If the plugin needs to be loaded from the data connector, fetch.\n        return this.reload(plugin);\n    }\n    /**\n     * Reload a plugin's settings into the registry even if they already exist.\n     *\n     * @param plugin - The name of the plugin whose settings are being reloaded.\n     *\n     * @returns A promise that resolves with a plugin settings object or rejects\n     * with a list of `ISchemaValidator.IError` objects if it fails.\n     */\n    async reload(plugin) {\n        // Wait for data preload before allowing normal operation.\n        await this._ready;\n        const fetched = await this.connector.fetch(plugin);\n        const plugins = this.plugins; // eslint-disable-line\n        const registry = this; // eslint-disable-line\n        if (fetched === undefined) {\n            throw [\n                {\n                    instancePath: '',\n                    keyword: 'id',\n                    message: `Could not fetch settings for ${plugin}.`,\n                    schemaPath: ''\n                }\n            ];\n        }\n        await this._load(await this._transform('fetch', fetched));\n        this._pluginChanged.emit(plugin);\n        return new Settings({ plugin: plugins[plugin], registry });\n    }\n    /**\n     * Remove a single setting in the registry.\n     *\n     * @param plugin - The name of the plugin whose setting is being removed.\n     *\n     * @param key - The name of the setting being removed.\n     *\n     * @returns A promise that resolves when the setting is removed.\n     */\n    async remove(plugin, key) {\n        // Wait for data preload before allowing normal operation.\n        await this._ready;\n        const plugins = this.plugins;\n        if (!(plugin in plugins)) {\n            return;\n        }\n        const raw = json5.parse(plugins[plugin].raw);\n        // Delete both the value and any associated comment.\n        delete raw[key];\n        delete raw[`// ${key}`];\n        plugins[plugin].raw = Private.annotatedPlugin(plugins[plugin], raw);\n        return this._save(plugin);\n    }\n    /**\n     * Set a single setting in the registry.\n     *\n     * @param plugin - The name of the plugin whose setting is being set.\n     *\n     * @param key - The name of the setting being set.\n     *\n     * @param value - The value of the setting being set.\n     *\n     * @returns A promise that resolves when the setting has been saved.\n     *\n     */\n    async set(plugin, key, value) {\n        // Wait for data preload before allowing normal operation.\n        await this._ready;\n        const plugins = this.plugins;\n        if (!(plugin in plugins)) {\n            return this.load(plugin).then(() => this.set(plugin, key, value));\n        }\n        // Parse the raw JSON string removing all comments and return an object.\n        const raw = json5.parse(plugins[plugin].raw);\n        plugins[plugin].raw = Private.annotatedPlugin(plugins[plugin], {\n            ...raw,\n            [key]: value\n        });\n        return this._save(plugin);\n    }\n    /**\n     * Register a plugin transform function to act on a specific plugin.\n     *\n     * @param plugin - The name of the plugin whose settings are transformed.\n     *\n     * @param transforms - The transform functions applied to the plugin.\n     *\n     * @returns A disposable that removes the transforms from the registry.\n     *\n     * #### Notes\n     * - `compose` transformations: The registry automatically overwrites a\n     * plugin's default values with user overrides, but a plugin may instead wish\n     * to merge values. This behavior can be accomplished in a `compose`\n     * transformation.\n     * - `fetch` transformations: The registry uses the plugin data that is\n     * fetched from its connector. If a plugin wants to override, e.g. to update\n     * its schema with dynamic defaults, a `fetch` transformation can be applied.\n     */\n    transform(plugin, transforms) {\n        const transformers = this._transformers;\n        if (plugin in transformers) {\n            const error = new Error(`${plugin} already has a transformer.`);\n            error.name = 'TransformError';\n            throw error;\n        }\n        transformers[plugin] = {\n            fetch: transforms.fetch || (plugin => plugin),\n            compose: transforms.compose || (plugin => plugin)\n        };\n        return new DisposableDelegate(() => {\n            delete transformers[plugin];\n        });\n    }\n    /**\n     * Upload a plugin's settings.\n     *\n     * @param plugin - The name of the plugin whose settings are being set.\n     *\n     * @param raw - The raw plugin settings being uploaded.\n     *\n     * @returns A promise that resolves when the settings have been saved.\n     */\n    async upload(plugin, raw) {\n        // Wait for data preload before allowing normal operation.\n        await this._ready;\n        const plugins = this.plugins;\n        if (!(plugin in plugins)) {\n            return this.load(plugin).then(() => this.upload(plugin, raw));\n        }\n        // Set the local copy.\n        plugins[plugin].raw = raw;\n        return this._save(plugin);\n    }\n    /**\n     * A promise which resolves when the pre-fetched plugins passed to the registry finished pre-loading.\n     */\n    get ready() {\n        return this._ready;\n    }\n    /**\n     * Load a plugin into the registry.\n     */\n    async _load(data) {\n        const plugin = data.id;\n        // Validate and preload the item.\n        try {\n            await this._validate(data);\n        }\n        catch (errors) {\n            const output = [`Validating ${plugin} failed:`];\n            errors.forEach((error, index) => {\n                const { instancePath, schemaPath, keyword, message } = error;\n                if (instancePath || schemaPath) {\n                    output.push(`${index} - schema @ ${schemaPath}, data @ ${instancePath}`);\n                }\n                output.push(`{${keyword}} ${message}`);\n            });\n            console.warn(output.join('\\n'));\n            throw errors;\n        }\n    }\n    /**\n     * Preload a list of plugins and fail gracefully.\n     */\n    async _preload(plugins) {\n        await Promise.all(plugins.map(async (plugin) => {\n            var _a;\n            try {\n                // Apply a transformation to the plugin if necessary.\n                await this._load(await this._transform('fetch', plugin));\n            }\n            catch (errors) {\n                /* Ignore silently if no transformers. */\n                if (((_a = errors[0]) === null || _a === void 0 ? void 0 : _a.keyword) !== 'unset') {\n                    console.warn('Ignored setting registry preload errors.', errors);\n                }\n            }\n        }));\n    }\n    /**\n     * Save a plugin in the registry.\n     */\n    async _save(plugin) {\n        const plugins = this.plugins;\n        if (!(plugin in plugins)) {\n            throw new Error(`${plugin} does not exist in setting registry.`);\n        }\n        try {\n            await this._validate(plugins[plugin]);\n        }\n        catch (errors) {\n            console.warn(`${plugin} validation errors:`, errors);\n            throw new Error(`${plugin} failed to validate; check console.`);\n        }\n        await this.connector.save(plugin, plugins[plugin].raw);\n        // Fetch and reload the data to guarantee server and client are in sync.\n        const fetched = await this.connector.fetch(plugin);\n        if (fetched === undefined) {\n            throw [\n                {\n                    instancePath: '',\n                    keyword: 'id',\n                    message: `Could not fetch settings for ${plugin}.`,\n                    schemaPath: ''\n                }\n            ];\n        }\n        await this._load(await this._transform('fetch', fetched));\n        this._pluginChanged.emit(plugin);\n    }\n    /**\n     * Transform the plugin if necessary.\n     */\n    async _transform(phase, plugin) {\n        const id = plugin.id;\n        const transformers = this._transformers;\n        if (!plugin.schema['jupyter.lab.transform']) {\n            return plugin;\n        }\n        if (id in transformers) {\n            const transformed = transformers[id][phase].call(null, plugin);\n            if (transformed.id !== id) {\n                throw [\n                    {\n                        instancePath: '',\n                        keyword: 'id',\n                        message: 'Plugin transformations cannot change plugin IDs.',\n                        schemaPath: ''\n                    }\n                ];\n            }\n            return transformed;\n        }\n        // If the plugin has no transformers, throw an error and bail.\n        throw [\n            {\n                instancePath: '',\n                keyword: 'unset',\n                message: `${plugin.id} has no transformers yet.`,\n                schemaPath: ''\n            }\n        ];\n    }\n    /**\n     * Validate and preload a plugin, compose the `composite` data.\n     */\n    async _validate(plugin) {\n        // Validate the user data and create the composite data.\n        const errors = this.validator.validateData(plugin);\n        if (errors) {\n            throw errors;\n        }\n        // Apply a transformation if necessary and set the local copy.\n        this.plugins[plugin.id] = await this._transform('compose', plugin);\n    }\n}\n/**\n * Base settings specified by a JSON schema.\n */\nexport class BaseSettings {\n    constructor(options) {\n        this._schema = options.schema;\n    }\n    /**\n     * The plugin's schema.\n     */\n    get schema() {\n        return this._schema;\n    }\n    /**\n     * Checks if any fields are different from the default value.\n     */\n    isDefault(user) {\n        for (const key in this.schema.properties) {\n            const value = user[key];\n            const defaultValue = this.default(key);\n            if (value === undefined ||\n                defaultValue === undefined ||\n                JSONExt.deepEqual(value, JSONExt.emptyObject) ||\n                JSONExt.deepEqual(value, JSONExt.emptyArray)) {\n                continue;\n            }\n            if (!JSONExt.deepEqual(value, defaultValue)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Calculate the default value of a setting by iterating through the schema.\n     *\n     * @param key - The name of the setting whose default value is calculated.\n     *\n     * @returns A calculated default JSON value for a specific setting.\n     */\n    default(key) {\n        return Private.reifyDefault(this.schema, key);\n    }\n}\n/**\n * A manager for a specific plugin's settings.\n */\nexport class Settings extends BaseSettings {\n    /**\n     * Instantiate a new plugin settings manager.\n     */\n    constructor(options) {\n        super({ schema: options.plugin.schema });\n        this._changed = new Signal(this);\n        this._isDisposed = false;\n        this.id = options.plugin.id;\n        this.registry = options.registry;\n        this.registry.pluginChanged.connect(this._onPluginChanged, this);\n    }\n    /**\n     * A signal that emits when the plugin's settings have changed.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * The composite of user settings and extension defaults.\n     */\n    get composite() {\n        return this.plugin.data.composite;\n    }\n    /**\n     * Test whether the plugin settings manager disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    get plugin() {\n        return this.registry.plugins[this.id];\n    }\n    /**\n     * The plugin settings raw text value.\n     */\n    get raw() {\n        return this.plugin.raw;\n    }\n    /**\n     * Whether the settings have been modified by the user or not.\n     */\n    get isModified() {\n        return !this.isDefault(this.user);\n    }\n    /**\n     * The user settings.\n     */\n    get user() {\n        return this.plugin.data.user;\n    }\n    /**\n     * The published version of the NPM package containing these settings.\n     */\n    get version() {\n        return this.plugin.version;\n    }\n    /**\n     * Return the defaults in a commented JSON format.\n     */\n    annotatedDefaults() {\n        return Private.annotatedDefaults(this.schema, this.id);\n    }\n    /**\n     * Dispose of the plugin settings resources.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n    }\n    /**\n     * Get an individual setting.\n     *\n     * @param key - The name of the setting being retrieved.\n     *\n     * @returns The setting value.\n     *\n     * #### Notes\n     * This method returns synchronously because it uses a cached copy of the\n     * plugin settings that is synchronized with the registry.\n     */\n    get(key) {\n        const { composite, user } = this;\n        return {\n            composite: composite[key] !== undefined ? copy(composite[key]) : undefined,\n            user: user[key] !== undefined ? copy(user[key]) : undefined\n        };\n    }\n    /**\n     * Remove a single setting.\n     *\n     * @param key - The name of the setting being removed.\n     *\n     * @returns A promise that resolves when the setting is removed.\n     *\n     * #### Notes\n     * This function is asynchronous because it writes to the setting registry.\n     */\n    remove(key) {\n        return this.registry.remove(this.plugin.id, key);\n    }\n    /**\n     * Save all of the plugin's user settings at once.\n     */\n    save(raw) {\n        return this.registry.upload(this.plugin.id, raw);\n    }\n    /**\n     * Set a single setting.\n     *\n     * @param key - The name of the setting being set.\n     *\n     * @param value - The value of the setting.\n     *\n     * @returns A promise that resolves when the setting has been saved.\n     *\n     * #### Notes\n     * This function is asynchronous because it writes to the setting registry.\n     */\n    set(key, value) {\n        return this.registry.set(this.plugin.id, key, value);\n    }\n    /**\n     * Validates raw settings with comments.\n     *\n     * @param raw - The JSON with comments string being validated.\n     *\n     * @returns A list of errors or `null` if valid.\n     */\n    validate(raw) {\n        const data = { composite: {}, user: {} };\n        const { id, schema } = this.plugin;\n        const validator = this.registry.validator;\n        const version = this.version;\n        return validator.validateData({ data, id, raw, schema, version }, false);\n    }\n    /**\n     * Handle plugin changes in the setting registry.\n     */\n    _onPluginChanged(sender, plugin) {\n        if (plugin === this.plugin.id) {\n            this._changed.emit(undefined);\n        }\n    }\n}\n/**\n * A namespace for `SettingRegistry` statics.\n */\n(function (SettingRegistry) {\n    /**\n     * Reconcile the menus.\n     *\n     * @param reference The reference list of menus.\n     * @param addition The list of menus to add.\n     * @param warn Warn if the command items are duplicated within the same menu.\n     * @returns The reconciled list of menus.\n     */\n    function reconcileMenus(reference, addition, warn = false, addNewItems = true) {\n        if (!reference) {\n            return addition && addNewItems ? JSONExt.deepCopy(addition) : [];\n        }\n        if (!addition) {\n            return JSONExt.deepCopy(reference);\n        }\n        const merged = JSONExt.deepCopy(reference);\n        addition.forEach(menu => {\n            const refIndex = merged.findIndex(ref => ref.id === menu.id);\n            if (refIndex >= 0) {\n                merged[refIndex] = {\n                    ...merged[refIndex],\n                    ...menu,\n                    items: reconcileItems(merged[refIndex].items, menu.items, warn, addNewItems)\n                };\n            }\n            else {\n                if (addNewItems) {\n                    merged.push(menu);\n                }\n            }\n        });\n        return merged;\n    }\n    SettingRegistry.reconcileMenus = reconcileMenus;\n    /**\n     * Merge two set of menu items.\n     *\n     * @param reference Reference set of menu items\n     * @param addition New items to add\n     * @param warn Whether to warn if item is duplicated; default to false\n     * @returns The merged set of items\n     */\n    function reconcileItems(reference, addition, warn = false, addNewItems = true) {\n        if (!reference) {\n            return addition ? JSONExt.deepCopy(addition) : undefined;\n        }\n        if (!addition) {\n            return JSONExt.deepCopy(reference);\n        }\n        const items = JSONExt.deepCopy(reference);\n        // Merge array element depending on the type\n        addition.forEach(item => {\n            var _a;\n            switch ((_a = item.type) !== null && _a !== void 0 ? _a : 'command') {\n                case 'separator':\n                    if (addNewItems) {\n                        items.push({ ...item });\n                    }\n                    break;\n                case 'submenu':\n                    if (item.submenu) {\n                        const refIndex = items.findIndex(ref => { var _a, _b; return ref.type === 'submenu' && ((_a = ref.submenu) === null || _a === void 0 ? void 0 : _a.id) === ((_b = item.submenu) === null || _b === void 0 ? void 0 : _b.id); });\n                        if (refIndex < 0) {\n                            if (addNewItems) {\n                                items.push(JSONExt.deepCopy(item));\n                            }\n                        }\n                        else {\n                            items[refIndex] = {\n                                ...items[refIndex],\n                                ...item,\n                                submenu: reconcileMenus(items[refIndex].submenu\n                                    ? [items[refIndex].submenu]\n                                    : null, [item.submenu], warn, addNewItems)[0]\n                            };\n                        }\n                    }\n                    break;\n                case 'command':\n                    if (item.command) {\n                        const refIndex = items.findIndex(ref => {\n                            var _a, _b;\n                            return ref.command === item.command &&\n                                ref.selector === item.selector &&\n                                JSONExt.deepEqual((_a = ref.args) !== null && _a !== void 0 ? _a : {}, (_b = item.args) !== null && _b !== void 0 ? _b : {});\n                        });\n                        if (refIndex < 0) {\n                            if (addNewItems) {\n                                items.push({ ...item });\n                            }\n                        }\n                        else {\n                            if (warn) {\n                                console.warn(`Menu entry for command '${item.command}' is duplicated.`);\n                            }\n                            items[refIndex] = { ...items[refIndex], ...item };\n                        }\n                    }\n            }\n        });\n        return items;\n    }\n    SettingRegistry.reconcileItems = reconcileItems;\n    /**\n     * Remove disabled entries from menu items\n     *\n     * @param items Menu items\n     * @returns Filtered menu items\n     */\n    function filterDisabledItems(items) {\n        return items.reduce((final, value) => {\n            var _a;\n            const copy = { ...value };\n            if (!copy.disabled) {\n                if (copy.type === 'submenu') {\n                    const { submenu } = copy;\n                    if (submenu && !submenu.disabled) {\n                        copy.submenu = {\n                            ...submenu,\n                            items: filterDisabledItems((_a = submenu.items) !== null && _a !== void 0 ? _a : [])\n                        };\n                    }\n                }\n                final.push(copy);\n            }\n            return final;\n        }, []);\n    }\n    SettingRegistry.filterDisabledItems = filterDisabledItems;\n    /**\n     * Reconcile default and user shortcuts and return the composite list.\n     *\n     * @param defaults - The list of default shortcuts.\n     *\n     * @param user - The list of user shortcut overrides and additions.\n     *\n     * @returns A loadable list of shortcuts (omitting disabled and overridden).\n     */\n    function reconcileShortcuts(defaults, user) {\n        const memo = {};\n        // If a user shortcut collides with another user shortcut warn and filter.\n        user = [\n            // Reorder so that disabled are first\n            ...user.filter(s => !!s.disabled),\n            ...user.filter(s => !s.disabled)\n        ].filter(shortcut => {\n            const keys = CommandRegistry.normalizeKeys(shortcut).join(RECORD_SEPARATOR);\n            if (!keys) {\n                console.warn('Skipping this shortcut because there are no actionable keys on this platform', shortcut);\n                return false;\n            }\n            if (!(keys in memo)) {\n                memo[keys] = {};\n            }\n            const { disabled, selector } = shortcut;\n            if (!(selector in memo[keys])) {\n                memo[keys][selector] = {\n                    enabledUserShortcut: disabled ? null : shortcut,\n                    enabledDefaultShortcut: null,\n                    shouldDisableDefaultShortcut: !!disabled\n                };\n                return !disabled;\n            }\n            if (memo[keys][selector].enabledUserShortcut === null) {\n                if (disabled) {\n                    memo[keys][selector].shouldDisableDefaultShortcut = true;\n                    return false;\n                }\n                else {\n                    memo[keys][selector].enabledUserShortcut = shortcut;\n                    return true;\n                }\n            }\n            else {\n                console.warn('Skipping', shortcut, 'shortcut because it collides with another enabled shortcut:', memo[keys][selector].enabledUserShortcut);\n                return false;\n            }\n        });\n        // If a default shortcut collides with another default, warn and filter,\n        // unless one of the shortcuts is a disabling shortcut (so look through\n        // disabled shortcuts first). If a shortcut has already been added by the\n        // user preferences, filter it out too (this includes shortcuts that are\n        // disabled by user preferences).\n        defaults = [\n            ...defaults.filter(s => !!s.disabled),\n            ...defaults.filter(s => !s.disabled)\n        ].filter(shortcut => {\n            const keys = CommandRegistry.normalizeKeys(shortcut).join(RECORD_SEPARATOR);\n            if (!keys) {\n                return false;\n            }\n            if (!(keys in memo)) {\n                memo[keys] = {};\n            }\n            const { disabled, selector } = shortcut;\n            if (!(selector in memo[keys])) {\n                memo[keys][selector] = {\n                    enabledUserShortcut: null, // we would have seen it already as we processed user shortcuts earlier\n                    enabledDefaultShortcut: disabled ? null : shortcut,\n                    shouldDisableDefaultShortcut: !!disabled\n                };\n                return !disabled;\n            }\n            if (memo[keys][selector].enabledDefaultShortcut === null) {\n                if (disabled) {\n                    memo[keys][selector].shouldDisableDefaultShortcut = true;\n                    return false;\n                }\n                else {\n                    if (memo[keys][selector].shouldDisableDefaultShortcut) {\n                        // Default shortcut was disabled - no warning\n                        return false;\n                    }\n                    else {\n                        memo[keys][selector].enabledDefaultShortcut = shortcut;\n                        return true;\n                    }\n                }\n            }\n            else {\n                if (memo[keys][selector].shouldDisableDefaultShortcut) {\n                    // Default shortcut was disabled - no warning\n                    return false;\n                }\n                else {\n                    // Default shortcut conflicts - emit warning\n                    console.warn('Skipping', shortcut, 'default shortcut because it collides with another enabled default shortcut:', memo[keys][selector].enabledDefaultShortcut);\n                    return false;\n                }\n            }\n        });\n        // Return all the shortcuts that should be registered\n        return Private.upgradeShortcuts(user\n            .concat(defaults)\n            .filter(shortcut => !shortcut.disabled)\n            // Fix shortcuts comparison in rjsf Form to avoid polluting the user settings\n            .map(shortcut => {\n            return { args: {}, ...shortcut };\n        }));\n    }\n    SettingRegistry.reconcileShortcuts = reconcileShortcuts;\n    /**\n     * Merge two set of toolbar items.\n     *\n     * @param reference Reference set of toolbar items\n     * @param addition New items to add\n     * @param warn Whether to warn if item is duplicated; default to false\n     * @returns The merged set of items\n     */\n    function reconcileToolbarItems(reference, addition, warn = false) {\n        if (!reference) {\n            return addition ? JSONExt.deepCopy(addition) : undefined;\n        }\n        if (!addition) {\n            return JSONExt.deepCopy(reference);\n        }\n        const items = JSONExt.deepCopy(reference);\n        // Merge array element depending on the type\n        addition.forEach(item => {\n            // Name must be unique so it's sufficient to only compare it\n            const refIndex = items.findIndex(ref => ref.name === item.name);\n            if (refIndex < 0) {\n                items.push({ ...item });\n            }\n            else {\n                if (warn &&\n                    JSONExt.deepEqual(Object.keys(item), Object.keys(items[refIndex]))) {\n                    console.warn(`Toolbar item '${item.name}' is duplicated.`);\n                }\n                items[refIndex] = { ...items[refIndex], ...item };\n            }\n        });\n        return items;\n    }\n    SettingRegistry.reconcileToolbarItems = reconcileToolbarItems;\n})(SettingRegistry || (SettingRegistry = {}));\n/**\n * A namespace for private module data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The default indentation level, uses spaces instead of tabs.\n     */\n    const indent = '    ';\n    /**\n     * Replacement text for schema properties missing a `description` field.\n     */\n    const nondescript = '[missing schema description]';\n    /**\n     * Replacement text for schema properties missing a `title` field.\n     */\n    const untitled = '[missing schema title]';\n    /**\n     * Returns an annotated (JSON with comments) version of a schema's defaults.\n     */\n    function annotatedDefaults(schema, plugin) {\n        const { description, properties, title } = schema;\n        const keys = properties\n            ? Object.keys(properties).sort((a, b) => a.localeCompare(b))\n            : [];\n        const length = Math.max((description || nondescript).length, plugin.length);\n        return [\n            '{',\n            prefix(`${title || untitled}`),\n            prefix(plugin),\n            prefix(description || nondescript),\n            prefix('*'.repeat(length)),\n            '',\n            join(keys.map(key => defaultDocumentedValue(schema, key))),\n            '}'\n        ].join('\\n');\n    }\n    Private.annotatedDefaults = annotatedDefaults;\n    /**\n     * Returns an annotated (JSON with comments) version of a plugin's\n     * setting data.\n     */\n    function annotatedPlugin(plugin, data) {\n        const { description, title } = plugin.schema;\n        const keys = Object.keys(data).sort((a, b) => a.localeCompare(b));\n        const length = Math.max((description || nondescript).length, plugin.id.length);\n        return [\n            '{',\n            prefix(`${title || untitled}`),\n            prefix(plugin.id),\n            prefix(description || nondescript),\n            prefix('*'.repeat(length)),\n            '',\n            join(keys.map(key => documentedValue(plugin.schema, key, data[key]))),\n            '}'\n        ].join('\\n');\n    }\n    Private.annotatedPlugin = annotatedPlugin;\n    /**\n     * Returns the default value-with-documentation-string for a\n     * specific schema property.\n     */\n    function defaultDocumentedValue(schema, key) {\n        const props = (schema.properties && schema.properties[key]) || {};\n        const type = props['type'];\n        const description = props['description'] || nondescript;\n        const title = props['title'] || '';\n        const reified = reifyDefault(schema, key);\n        const spaces = indent.length;\n        const defaults = reified !== undefined\n            ? prefix(`\"${key}\": ${JSON.stringify(reified, null, spaces)}`, indent)\n            : prefix(`\"${key}\": ${type}`);\n        return [prefix(title), prefix(description), defaults]\n            .filter(str => str.length)\n            .join('\\n');\n    }\n    /**\n     * Returns a value-with-documentation-string for a specific schema property.\n     */\n    function documentedValue(schema, key, value) {\n        const props = schema.properties && schema.properties[key];\n        const description = (props && props['description']) || nondescript;\n        const title = (props && props['title']) || untitled;\n        const spaces = indent.length;\n        const attribute = prefix(`\"${key}\": ${JSON.stringify(value, null, spaces)}`, indent);\n        return [prefix(title), prefix(description), attribute].join('\\n');\n    }\n    /**\n     * Returns a joined string with line breaks and commas where appropriate.\n     */\n    function join(body) {\n        return body.reduce((acc, val, idx) => {\n            const rows = val.split('\\n');\n            const last = rows[rows.length - 1];\n            const comment = last.trim().indexOf('//') === 0;\n            const comma = comment || idx === body.length - 1 ? '' : ',';\n            const separator = idx === body.length - 1 ? '' : '\\n\\n';\n            return acc + val + comma + separator;\n        }, '');\n    }\n    /**\n     * Returns a documentation string with a comment prefix added on every line.\n     */\n    function prefix(source, pre = `${indent}// `) {\n        return pre + source.split('\\n').join(`\\n${pre}`);\n    }\n    /**\n     * Create a fully extrapolated default value for a root key in a schema.\n     *\n     * @todo This function would ideally reuse `getDefaultFormState` from rjsf\n     * with appropriate`defaultFormStateBehavior` setting, as currently\n     * these two implementations duplicate each other.\n     *\n     * Note: absence of a property may mean something else than the default.\n     */\n    function reifyDefault(schema, root, definitions, required) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        definitions = definitions !== null && definitions !== void 0 ? definitions : schema.definitions;\n        // If the property is at the root level, traverse its schema.\n        required = root\n            ? schema.required instanceof Array &&\n                ((_a = schema.required) === null || _a === void 0 ? void 0 : _a.includes(root))\n            : required;\n        schema = (root ? (_b = schema.properties) === null || _b === void 0 ? void 0 : _b[root] : schema) || {};\n        if (schema.type === 'object') {\n            // Make a copy of the default value to populate.\n            const result = JSONExt.deepCopy(schema.default);\n            // Iterate through and populate each child property.\n            const props = schema.properties || {};\n            for (const property in props) {\n                result[property] = reifyDefault(props[property], undefined, definitions, schema.required instanceof Array &&\n                    ((_c = schema.required) === null || _c === void 0 ? void 0 : _c.includes(property)));\n            }\n            return result;\n        }\n        else if (schema.type === 'array') {\n            const defaultDefined = typeof schema.default !== 'undefined';\n            const shouldPopulateDefaultArray = defaultDefined || required;\n            if (!shouldPopulateDefaultArray) {\n                return undefined;\n            }\n            // Make a copy of the default value to populate.\n            const result = defaultDefined\n                ? JSONExt.deepCopy(schema.default)\n                : [];\n            // Items defines the properties of each item in the array\n            let props = schema.items || {};\n            // Use referenced definition if one exists\n            if (props['$ref'] && definitions) {\n                const ref = props['$ref'].replace('#/definitions/', '');\n                props = (_d = definitions[ref]) !== null && _d !== void 0 ? _d : {};\n            }\n            // Iterate through the items in the array and fill in defaults\n            for (const item in result) {\n                if (props.type === 'object') {\n                    // Use the values that are hard-coded in the default array over the defaults for each field.\n                    const reified = (_f = (_e = reifyDefault(props, undefined, definitions)) !== null && _e !== void 0 ? _e : result[item]) !== null && _f !== void 0 ? _f : {};\n                    for (const prop in reified) {\n                        if ((_g = result[item]) === null || _g === void 0 ? void 0 : _g[prop]) {\n                            reified[prop] = result[item][prop];\n                        }\n                    }\n                    result[item] = reified;\n                }\n            }\n            return result;\n        }\n        else {\n            return schema.default;\n        }\n    }\n    Private.reifyDefault = reifyDefault;\n    /**\n     * Selectors which were previously warned about.\n     */\n    const selectorsAlreadyWarnedAbout = new Set();\n    /**\n     * Upgrade shortcuts to ensure no breaking changes between minor versions.\n     */\n    function upgradeShortcuts(shortcuts) {\n        const selectorDeprecationWarnings = new Set();\n        const changes = [\n            {\n                old: '.jp-Notebook:focus.jp-mod-commandMode',\n                new: '.jp-Notebook.jp-mod-commandMode:not(.jp-mod-readWrite) :focus',\n                versionDeprecated: 'JupyterLab 4.1'\n            },\n            {\n                old: '.jp-Notebook.jp-mod-commandMode :focus:not(:read-write)',\n                new: '.jp-Notebook.jp-mod-commandMode:not(.jp-mod-readWrite) :focus',\n                versionDeprecated: 'JupyterLab 4.1.1'\n            },\n            {\n                old: '.jp-Notebook:focus',\n                new: '.jp-Notebook.jp-mod-commandMode:not(.jp-mod-readWrite) :focus',\n                versionDeprecated: 'JupyterLab 4.1'\n            },\n            {\n                old: '[data-jp-traversable]:focus',\n                new: '.jp-Notebook.jp-mod-commandMode:not(.jp-mod-readWrite) :focus',\n                versionDeprecated: 'JupyterLab 4.1'\n            },\n            {\n                old: '[data-jp-kernel-user]:focus',\n                new: '[data-jp-kernel-user]:not(.jp-mod-readWrite) :focus:not(:read-write)',\n                versionDeprecated: 'JupyterLab 4.1'\n            },\n            {\n                old: '[data-jp-kernel-user] :focus:not(:read-write)',\n                new: '[data-jp-kernel-user]:not(.jp-mod-readWrite) :focus:not(:read-write)',\n                versionDeprecated: 'JupyterLab 4.1.1'\n            }\n        ];\n        const upgraded = shortcuts.map(shortcut => {\n            const oldSelector = shortcut.selector;\n            let newSelector = oldSelector;\n            for (const change of changes) {\n                if (oldSelector.includes(change.old)) {\n                    newSelector = oldSelector.replace(change.old, change.new);\n                    if (!selectorsAlreadyWarnedAbout.has(oldSelector)) {\n                        selectorDeprecationWarnings.add(`\"${change.old}\" was replaced with \"${change.new}\" in ${change.versionDeprecated} (present in \"${oldSelector}\")`);\n                        selectorsAlreadyWarnedAbout.add(oldSelector);\n                    }\n                }\n            }\n            shortcut.selector = newSelector;\n            return shortcut;\n        });\n        if (selectorDeprecationWarnings.size > 0) {\n            console.warn('Deprecated shortcut selectors: ' +\n                [...selectorDeprecationWarnings].join('\\n') +\n                '\\n\\nThe selectors will be substituted transparently this time, but need to be updated at source before next major release.');\n        }\n        return upgraded;\n    }\n    Private.upgradeShortcuts = upgradeShortcuts;\n})(Private || (Private = {}));\n//# sourceMappingURL=settingregistry.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { Token } from '@lumino/coreutils';\n/**\n * A service to connect to the settings endpoint.\n */\nexport const ISettingConnector = new Token('@jupyterlab/coreutils:ISettingConnector', 'A service to connect to the settings endpoint.');\n/**\n * The setting registry token.\n */\nexport const ISettingRegistry = new Token('@jupyterlab/coreutils:ISettingRegistry', `A service for the JupyterLab settings system.\n  Use this if you want to store settings for your application.\n  See \"schemaDir\" for more information.`);\n//# sourceMappingURL=tokens.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module settingregistry\n */\nexport * from './settingregistry';\nexport * from './tokens';\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv = void 0;\nconst core_1 = require(\"./core\");\nconst draft7_1 = require(\"./vocabularies/draft7\");\nconst discriminator_1 = require(\"./vocabularies/discriminator\");\nconst draft7MetaSchema = require(\"./refs/json-schema-draft-07.json\");\nconst META_SUPPORT_DATA = [\"/properties\"];\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\";\nclass Ajv extends core_1.default {\n    _addVocabularies() {\n        super._addVocabularies();\n        draft7_1.default.forEach((v) => this.addVocabulary(v));\n        if (this.opts.discriminator)\n            this.addKeyword(discriminator_1.default);\n    }\n    _addDefaultMetaSchema() {\n        super._addDefaultMetaSchema();\n        if (!this.opts.meta)\n            return;\n        const metaSchema = this.opts.$data\n            ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n            : draft7MetaSchema;\n        this.addMetaSchema(metaSchema, META_SCHEMA_ID, false);\n        this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID;\n    }\n    defaultMeta() {\n        return (this.opts.defaultMeta =\n            super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined));\n    }\n}\nexports.Ajv = Ajv;\nmodule.exports = exports = Ajv;\nmodule.exports.Ajv = Ajv;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Ajv;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nvar validation_error_1 = require(\"./runtime/validation_error\");\nObject.defineProperty(exports, \"ValidationError\", { enumerable: true, get: function () { return validation_error_1.default; } });\nvar ref_error_1 = require(\"./compile/ref_error\");\nObject.defineProperty(exports, \"MissingRefError\", { enumerable: true, get: function () { return ref_error_1.default; } });\n//# sourceMappingURL=ajv.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = void 0;\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nclass _CodeOrName {\n}\nexports._CodeOrName = _CodeOrName;\nexports.IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;\nclass Name extends _CodeOrName {\n    constructor(s) {\n        super();\n        if (!exports.IDENTIFIER.test(s))\n            throw new Error(\"CodeGen: name must be a valid identifier\");\n        this.str = s;\n    }\n    toString() {\n        return this.str;\n    }\n    emptyStr() {\n        return false;\n    }\n    get names() {\n        return { [this.str]: 1 };\n    }\n}\nexports.Name = Name;\nclass _Code extends _CodeOrName {\n    constructor(code) {\n        super();\n        this._items = typeof code === \"string\" ? [code] : code;\n    }\n    toString() {\n        return this.str;\n    }\n    emptyStr() {\n        if (this._items.length > 1)\n            return false;\n        const item = this._items[0];\n        return item === \"\" || item === '\"\"';\n    }\n    get str() {\n        var _a;\n        return ((_a = this._str) !== null && _a !== void 0 ? _a : (this._str = this._items.reduce((s, c) => `${s}${c}`, \"\")));\n    }\n    get names() {\n        var _a;\n        return ((_a = this._names) !== null && _a !== void 0 ? _a : (this._names = this._items.reduce((names, c) => {\n            if (c instanceof Name)\n                names[c.str] = (names[c.str] || 0) + 1;\n            return names;\n        }, {})));\n    }\n}\nexports._Code = _Code;\nexports.nil = new _Code(\"\");\nfunction _(strs, ...args) {\n    const code = [strs[0]];\n    let i = 0;\n    while (i < args.length) {\n        addCodeArg(code, args[i]);\n        code.push(strs[++i]);\n    }\n    return new _Code(code);\n}\nexports._ = _;\nconst plus = new _Code(\"+\");\nfunction str(strs, ...args) {\n    const expr = [safeStringify(strs[0])];\n    let i = 0;\n    while (i < args.length) {\n        expr.push(plus);\n        addCodeArg(expr, args[i]);\n        expr.push(plus, safeStringify(strs[++i]));\n    }\n    optimize(expr);\n    return new _Code(expr);\n}\nexports.str = str;\nfunction addCodeArg(code, arg) {\n    if (arg instanceof _Code)\n        code.push(...arg._items);\n    else if (arg instanceof Name)\n        code.push(arg);\n    else\n        code.push(interpolate(arg));\n}\nexports.addCodeArg = addCodeArg;\nfunction optimize(expr) {\n    let i = 1;\n    while (i < expr.length - 1) {\n        if (expr[i] === plus) {\n            const res = mergeExprItems(expr[i - 1], expr[i + 1]);\n            if (res !== undefined) {\n                expr.splice(i - 1, 3, res);\n                continue;\n            }\n            expr[i++] = \"+\";\n        }\n        i++;\n    }\n}\nfunction mergeExprItems(a, b) {\n    if (b === '\"\"')\n        return a;\n    if (a === '\"\"')\n        return b;\n    if (typeof a == \"string\") {\n        if (b instanceof Name || a[a.length - 1] !== '\"')\n            return;\n        if (typeof b != \"string\")\n            return `${a.slice(0, -1)}${b}\"`;\n        if (b[0] === '\"')\n            return a.slice(0, -1) + b.slice(1);\n        return;\n    }\n    if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name))\n        return `\"${a}${b.slice(1)}`;\n    return;\n}\nfunction strConcat(c1, c2) {\n    return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str `${c1}${c2}`;\n}\nexports.strConcat = strConcat;\n// TODO do not allow arrays here\nfunction interpolate(x) {\n    return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n        ? x\n        : safeStringify(Array.isArray(x) ? x.join(\",\") : x);\n}\nfunction stringify(x) {\n    return new _Code(safeStringify(x));\n}\nexports.stringify = stringify;\nfunction safeStringify(x) {\n    return JSON.stringify(x)\n        .replace(/\\u2028/g, \"\\\\u2028\")\n        .replace(/\\u2029/g, \"\\\\u2029\");\n}\nexports.safeStringify = safeStringify;\nfunction getProperty(key) {\n    return typeof key == \"string\" && exports.IDENTIFIER.test(key) ? new _Code(`.${key}`) : _ `[${key}]`;\n}\nexports.getProperty = getProperty;\n//Does best effort to format the name properly\nfunction getEsmExportName(key) {\n    if (typeof key == \"string\" && exports.IDENTIFIER.test(key)) {\n        return new _Code(`${key}`);\n    }\n    throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`);\n}\nexports.getEsmExportName = getEsmExportName;\nfunction regexpCode(rx) {\n    return new _Code(rx.toString());\n}\nexports.regexpCode = regexpCode;\n//# sourceMappingURL=code.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = void 0;\nconst code_1 = require(\"./code\");\nconst scope_1 = require(\"./scope\");\nvar code_2 = require(\"./code\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return code_2._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return code_2.str; } });\nObject.defineProperty(exports, \"strConcat\", { enumerable: true, get: function () { return code_2.strConcat; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return code_2.nil; } });\nObject.defineProperty(exports, \"getProperty\", { enumerable: true, get: function () { return code_2.getProperty; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return code_2.stringify; } });\nObject.defineProperty(exports, \"regexpCode\", { enumerable: true, get: function () { return code_2.regexpCode; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return code_2.Name; } });\nvar scope_2 = require(\"./scope\");\nObject.defineProperty(exports, \"Scope\", { enumerable: true, get: function () { return scope_2.Scope; } });\nObject.defineProperty(exports, \"ValueScope\", { enumerable: true, get: function () { return scope_2.ValueScope; } });\nObject.defineProperty(exports, \"ValueScopeName\", { enumerable: true, get: function () { return scope_2.ValueScopeName; } });\nObject.defineProperty(exports, \"varKinds\", { enumerable: true, get: function () { return scope_2.varKinds; } });\nexports.operators = {\n    GT: new code_1._Code(\">\"),\n    GTE: new code_1._Code(\">=\"),\n    LT: new code_1._Code(\"<\"),\n    LTE: new code_1._Code(\"<=\"),\n    EQ: new code_1._Code(\"===\"),\n    NEQ: new code_1._Code(\"!==\"),\n    NOT: new code_1._Code(\"!\"),\n    OR: new code_1._Code(\"||\"),\n    AND: new code_1._Code(\"&&\"),\n    ADD: new code_1._Code(\"+\"),\n};\nclass Node {\n    optimizeNodes() {\n        return this;\n    }\n    optimizeNames(_names, _constants) {\n        return this;\n    }\n}\nclass Def extends Node {\n    constructor(varKind, name, rhs) {\n        super();\n        this.varKind = varKind;\n        this.name = name;\n        this.rhs = rhs;\n    }\n    render({ es5, _n }) {\n        const varKind = es5 ? scope_1.varKinds.var : this.varKind;\n        const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`;\n        return `${varKind} ${this.name}${rhs};` + _n;\n    }\n    optimizeNames(names, constants) {\n        if (!names[this.name.str])\n            return;\n        if (this.rhs)\n            this.rhs = optimizeExpr(this.rhs, names, constants);\n        return this;\n    }\n    get names() {\n        return this.rhs instanceof code_1._CodeOrName ? this.rhs.names : {};\n    }\n}\nclass Assign extends Node {\n    constructor(lhs, rhs, sideEffects) {\n        super();\n        this.lhs = lhs;\n        this.rhs = rhs;\n        this.sideEffects = sideEffects;\n    }\n    render({ _n }) {\n        return `${this.lhs} = ${this.rhs};` + _n;\n    }\n    optimizeNames(names, constants) {\n        if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects)\n            return;\n        this.rhs = optimizeExpr(this.rhs, names, constants);\n        return this;\n    }\n    get names() {\n        const names = this.lhs instanceof code_1.Name ? {} : { ...this.lhs.names };\n        return addExprNames(names, this.rhs);\n    }\n}\nclass AssignOp extends Assign {\n    constructor(lhs, op, rhs, sideEffects) {\n        super(lhs, rhs, sideEffects);\n        this.op = op;\n    }\n    render({ _n }) {\n        return `${this.lhs} ${this.op}= ${this.rhs};` + _n;\n    }\n}\nclass Label extends Node {\n    constructor(label) {\n        super();\n        this.label = label;\n        this.names = {};\n    }\n    render({ _n }) {\n        return `${this.label}:` + _n;\n    }\n}\nclass Break extends Node {\n    constructor(label) {\n        super();\n        this.label = label;\n        this.names = {};\n    }\n    render({ _n }) {\n        const label = this.label ? ` ${this.label}` : \"\";\n        return `break${label};` + _n;\n    }\n}\nclass Throw extends Node {\n    constructor(error) {\n        super();\n        this.error = error;\n    }\n    render({ _n }) {\n        return `throw ${this.error};` + _n;\n    }\n    get names() {\n        return this.error.names;\n    }\n}\nclass AnyCode extends Node {\n    constructor(code) {\n        super();\n        this.code = code;\n    }\n    render({ _n }) {\n        return `${this.code};` + _n;\n    }\n    optimizeNodes() {\n        return `${this.code}` ? this : undefined;\n    }\n    optimizeNames(names, constants) {\n        this.code = optimizeExpr(this.code, names, constants);\n        return this;\n    }\n    get names() {\n        return this.code instanceof code_1._CodeOrName ? this.code.names : {};\n    }\n}\nclass ParentNode extends Node {\n    constructor(nodes = []) {\n        super();\n        this.nodes = nodes;\n    }\n    render(opts) {\n        return this.nodes.reduce((code, n) => code + n.render(opts), \"\");\n    }\n    optimizeNodes() {\n        const { nodes } = this;\n        let i = nodes.length;\n        while (i--) {\n            const n = nodes[i].optimizeNodes();\n            if (Array.isArray(n))\n                nodes.splice(i, 1, ...n);\n            else if (n)\n                nodes[i] = n;\n            else\n                nodes.splice(i, 1);\n        }\n        return nodes.length > 0 ? this : undefined;\n    }\n    optimizeNames(names, constants) {\n        const { nodes } = this;\n        let i = nodes.length;\n        while (i--) {\n            // iterating backwards improves 1-pass optimization\n            const n = nodes[i];\n            if (n.optimizeNames(names, constants))\n                continue;\n            subtractNames(names, n.names);\n            nodes.splice(i, 1);\n        }\n        return nodes.length > 0 ? this : undefined;\n    }\n    get names() {\n        return this.nodes.reduce((names, n) => addNames(names, n.names), {});\n    }\n}\nclass BlockNode extends ParentNode {\n    render(opts) {\n        return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n;\n    }\n}\nclass Root extends ParentNode {\n}\nclass Else extends BlockNode {\n}\nElse.kind = \"else\";\nclass If extends BlockNode {\n    constructor(condition, nodes) {\n        super(nodes);\n        this.condition = condition;\n    }\n    render(opts) {\n        let code = `if(${this.condition})` + super.render(opts);\n        if (this.else)\n            code += \"else \" + this.else.render(opts);\n        return code;\n    }\n    optimizeNodes() {\n        super.optimizeNodes();\n        const cond = this.condition;\n        if (cond === true)\n            return this.nodes; // else is ignored here\n        let e = this.else;\n        if (e) {\n            const ns = e.optimizeNodes();\n            e = this.else = Array.isArray(ns) ? new Else(ns) : ns;\n        }\n        if (e) {\n            if (cond === false)\n                return e instanceof If ? e : e.nodes;\n            if (this.nodes.length)\n                return this;\n            return new If(not(cond), e instanceof If ? [e] : e.nodes);\n        }\n        if (cond === false || !this.nodes.length)\n            return undefined;\n        return this;\n    }\n    optimizeNames(names, constants) {\n        var _a;\n        this.else = (_a = this.else) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n        if (!(super.optimizeNames(names, constants) || this.else))\n            return;\n        this.condition = optimizeExpr(this.condition, names, constants);\n        return this;\n    }\n    get names() {\n        const names = super.names;\n        addExprNames(names, this.condition);\n        if (this.else)\n            addNames(names, this.else.names);\n        return names;\n    }\n}\nIf.kind = \"if\";\nclass For extends BlockNode {\n}\nFor.kind = \"for\";\nclass ForLoop extends For {\n    constructor(iteration) {\n        super();\n        this.iteration = iteration;\n    }\n    render(opts) {\n        return `for(${this.iteration})` + super.render(opts);\n    }\n    optimizeNames(names, constants) {\n        if (!super.optimizeNames(names, constants))\n            return;\n        this.iteration = optimizeExpr(this.iteration, names, constants);\n        return this;\n    }\n    get names() {\n        return addNames(super.names, this.iteration.names);\n    }\n}\nclass ForRange extends For {\n    constructor(varKind, name, from, to) {\n        super();\n        this.varKind = varKind;\n        this.name = name;\n        this.from = from;\n        this.to = to;\n    }\n    render(opts) {\n        const varKind = opts.es5 ? scope_1.varKinds.var : this.varKind;\n        const { name, from, to } = this;\n        return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts);\n    }\n    get names() {\n        const names = addExprNames(super.names, this.from);\n        return addExprNames(names, this.to);\n    }\n}\nclass ForIter extends For {\n    constructor(loop, varKind, name, iterable) {\n        super();\n        this.loop = loop;\n        this.varKind = varKind;\n        this.name = name;\n        this.iterable = iterable;\n    }\n    render(opts) {\n        return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts);\n    }\n    optimizeNames(names, constants) {\n        if (!super.optimizeNames(names, constants))\n            return;\n        this.iterable = optimizeExpr(this.iterable, names, constants);\n        return this;\n    }\n    get names() {\n        return addNames(super.names, this.iterable.names);\n    }\n}\nclass Func extends BlockNode {\n    constructor(name, args, async) {\n        super();\n        this.name = name;\n        this.args = args;\n        this.async = async;\n    }\n    render(opts) {\n        const _async = this.async ? \"async \" : \"\";\n        return `${_async}function ${this.name}(${this.args})` + super.render(opts);\n    }\n}\nFunc.kind = \"func\";\nclass Return extends ParentNode {\n    render(opts) {\n        return \"return \" + super.render(opts);\n    }\n}\nReturn.kind = \"return\";\nclass Try extends BlockNode {\n    render(opts) {\n        let code = \"try\" + super.render(opts);\n        if (this.catch)\n            code += this.catch.render(opts);\n        if (this.finally)\n            code += this.finally.render(opts);\n        return code;\n    }\n    optimizeNodes() {\n        var _a, _b;\n        super.optimizeNodes();\n        (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNodes();\n        (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNodes();\n        return this;\n    }\n    optimizeNames(names, constants) {\n        var _a, _b;\n        super.optimizeNames(names, constants);\n        (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n        (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNames(names, constants);\n        return this;\n    }\n    get names() {\n        const names = super.names;\n        if (this.catch)\n            addNames(names, this.catch.names);\n        if (this.finally)\n            addNames(names, this.finally.names);\n        return names;\n    }\n}\nclass Catch extends BlockNode {\n    constructor(error) {\n        super();\n        this.error = error;\n    }\n    render(opts) {\n        return `catch(${this.error})` + super.render(opts);\n    }\n}\nCatch.kind = \"catch\";\nclass Finally extends BlockNode {\n    render(opts) {\n        return \"finally\" + super.render(opts);\n    }\n}\nFinally.kind = \"finally\";\nclass CodeGen {\n    constructor(extScope, opts = {}) {\n        this._values = {};\n        this._blockStarts = [];\n        this._constants = {};\n        this.opts = { ...opts, _n: opts.lines ? \"\\n\" : \"\" };\n        this._extScope = extScope;\n        this._scope = new scope_1.Scope({ parent: extScope });\n        this._nodes = [new Root()];\n    }\n    toString() {\n        return this._root.render(this.opts);\n    }\n    // returns unique name in the internal scope\n    name(prefix) {\n        return this._scope.name(prefix);\n    }\n    // reserves unique name in the external scope\n    scopeName(prefix) {\n        return this._extScope.name(prefix);\n    }\n    // reserves unique name in the external scope and assigns value to it\n    scopeValue(prefixOrName, value) {\n        const name = this._extScope.value(prefixOrName, value);\n        const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set());\n        vs.add(name);\n        return name;\n    }\n    getScopeValue(prefix, keyOrRef) {\n        return this._extScope.getValue(prefix, keyOrRef);\n    }\n    // return code that assigns values in the external scope to the names that are used internally\n    // (same names that were returned by gen.scopeName or gen.scopeValue)\n    scopeRefs(scopeName) {\n        return this._extScope.scopeRefs(scopeName, this._values);\n    }\n    scopeCode() {\n        return this._extScope.scopeCode(this._values);\n    }\n    _def(varKind, nameOrPrefix, rhs, constant) {\n        const name = this._scope.toName(nameOrPrefix);\n        if (rhs !== undefined && constant)\n            this._constants[name.str] = rhs;\n        this._leafNode(new Def(varKind, name, rhs));\n        return name;\n    }\n    // `const` declaration (`var` in es5 mode)\n    const(nameOrPrefix, rhs, _constant) {\n        return this._def(scope_1.varKinds.const, nameOrPrefix, rhs, _constant);\n    }\n    // `let` declaration with optional assignment (`var` in es5 mode)\n    let(nameOrPrefix, rhs, _constant) {\n        return this._def(scope_1.varKinds.let, nameOrPrefix, rhs, _constant);\n    }\n    // `var` declaration with optional assignment\n    var(nameOrPrefix, rhs, _constant) {\n        return this._def(scope_1.varKinds.var, nameOrPrefix, rhs, _constant);\n    }\n    // assignment code\n    assign(lhs, rhs, sideEffects) {\n        return this._leafNode(new Assign(lhs, rhs, sideEffects));\n    }\n    // `+=` code\n    add(lhs, rhs) {\n        return this._leafNode(new AssignOp(lhs, exports.operators.ADD, rhs));\n    }\n    // appends passed SafeExpr to code or executes Block\n    code(c) {\n        if (typeof c == \"function\")\n            c();\n        else if (c !== code_1.nil)\n            this._leafNode(new AnyCode(c));\n        return this;\n    }\n    // returns code for object literal for the passed argument list of key-value pairs\n    object(...keyValues) {\n        const code = [\"{\"];\n        for (const [key, value] of keyValues) {\n            if (code.length > 1)\n                code.push(\",\");\n            code.push(key);\n            if (key !== value || this.opts.es5) {\n                code.push(\":\");\n                (0, code_1.addCodeArg)(code, value);\n            }\n        }\n        code.push(\"}\");\n        return new code_1._Code(code);\n    }\n    // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n    if(condition, thenBody, elseBody) {\n        this._blockNode(new If(condition));\n        if (thenBody && elseBody) {\n            this.code(thenBody).else().code(elseBody).endIf();\n        }\n        else if (thenBody) {\n            this.code(thenBody).endIf();\n        }\n        else if (elseBody) {\n            throw new Error('CodeGen: \"else\" body without \"then\" body');\n        }\n        return this;\n    }\n    // `else if` clause - invalid without `if` or after `else` clauses\n    elseIf(condition) {\n        return this._elseNode(new If(condition));\n    }\n    // `else` clause - only valid after `if` or `else if` clauses\n    else() {\n        return this._elseNode(new Else());\n    }\n    // end `if` statement (needed if gen.if was used only with condition)\n    endIf() {\n        return this._endBlockNode(If, Else);\n    }\n    _for(node, forBody) {\n        this._blockNode(node);\n        if (forBody)\n            this.code(forBody).endFor();\n        return this;\n    }\n    // a generic `for` clause (or statement if `forBody` is passed)\n    for(iteration, forBody) {\n        return this._for(new ForLoop(iteration), forBody);\n    }\n    // `for` statement for a range of values\n    forRange(nameOrPrefix, from, to, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.let) {\n        const name = this._scope.toName(nameOrPrefix);\n        return this._for(new ForRange(varKind, name, from, to), () => forBody(name));\n    }\n    // `for-of` statement (in es5 mode replace with a normal for loop)\n    forOf(nameOrPrefix, iterable, forBody, varKind = scope_1.varKinds.const) {\n        const name = this._scope.toName(nameOrPrefix);\n        if (this.opts.es5) {\n            const arr = iterable instanceof code_1.Name ? iterable : this.var(\"_arr\", iterable);\n            return this.forRange(\"_i\", 0, (0, code_1._) `${arr}.length`, (i) => {\n                this.var(name, (0, code_1._) `${arr}[${i}]`);\n                forBody(name);\n            });\n        }\n        return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name));\n    }\n    // `for-in` statement.\n    // With option `ownProperties` replaced with a `for-of` loop for object keys\n    forIn(nameOrPrefix, obj, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.const) {\n        if (this.opts.ownProperties) {\n            return this.forOf(nameOrPrefix, (0, code_1._) `Object.keys(${obj})`, forBody);\n        }\n        const name = this._scope.toName(nameOrPrefix);\n        return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name));\n    }\n    // end `for` loop\n    endFor() {\n        return this._endBlockNode(For);\n    }\n    // `label` statement\n    label(label) {\n        return this._leafNode(new Label(label));\n    }\n    // `break` statement\n    break(label) {\n        return this._leafNode(new Break(label));\n    }\n    // `return` statement\n    return(value) {\n        const node = new Return();\n        this._blockNode(node);\n        this.code(value);\n        if (node.nodes.length !== 1)\n            throw new Error('CodeGen: \"return\" should have one node');\n        return this._endBlockNode(Return);\n    }\n    // `try` statement\n    try(tryBody, catchCode, finallyCode) {\n        if (!catchCode && !finallyCode)\n            throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"');\n        const node = new Try();\n        this._blockNode(node);\n        this.code(tryBody);\n        if (catchCode) {\n            const error = this.name(\"e\");\n            this._currNode = node.catch = new Catch(error);\n            catchCode(error);\n        }\n        if (finallyCode) {\n            this._currNode = node.finally = new Finally();\n            this.code(finallyCode);\n        }\n        return this._endBlockNode(Catch, Finally);\n    }\n    // `throw` statement\n    throw(error) {\n        return this._leafNode(new Throw(error));\n    }\n    // start self-balancing block\n    block(body, nodeCount) {\n        this._blockStarts.push(this._nodes.length);\n        if (body)\n            this.code(body).endBlock(nodeCount);\n        return this;\n    }\n    // end the current self-balancing block\n    endBlock(nodeCount) {\n        const len = this._blockStarts.pop();\n        if (len === undefined)\n            throw new Error(\"CodeGen: not in self-balancing block\");\n        const toClose = this._nodes.length - len;\n        if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n            throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`);\n        }\n        this._nodes.length = len;\n        return this;\n    }\n    // `function` heading (or definition if funcBody is passed)\n    func(name, args = code_1.nil, async, funcBody) {\n        this._blockNode(new Func(name, args, async));\n        if (funcBody)\n            this.code(funcBody).endFunc();\n        return this;\n    }\n    // end function definition\n    endFunc() {\n        return this._endBlockNode(Func);\n    }\n    optimize(n = 1) {\n        while (n-- > 0) {\n            this._root.optimizeNodes();\n            this._root.optimizeNames(this._root.names, this._constants);\n        }\n    }\n    _leafNode(node) {\n        this._currNode.nodes.push(node);\n        return this;\n    }\n    _blockNode(node) {\n        this._currNode.nodes.push(node);\n        this._nodes.push(node);\n    }\n    _endBlockNode(N1, N2) {\n        const n = this._currNode;\n        if (n instanceof N1 || (N2 && n instanceof N2)) {\n            this._nodes.pop();\n            return this;\n        }\n        throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`);\n    }\n    _elseNode(node) {\n        const n = this._currNode;\n        if (!(n instanceof If)) {\n            throw new Error('CodeGen: \"else\" without \"if\"');\n        }\n        this._currNode = n.else = node;\n        return this;\n    }\n    get _root() {\n        return this._nodes[0];\n    }\n    get _currNode() {\n        const ns = this._nodes;\n        return ns[ns.length - 1];\n    }\n    set _currNode(node) {\n        const ns = this._nodes;\n        ns[ns.length - 1] = node;\n    }\n}\nexports.CodeGen = CodeGen;\nfunction addNames(names, from) {\n    for (const n in from)\n        names[n] = (names[n] || 0) + (from[n] || 0);\n    return names;\n}\nfunction addExprNames(names, from) {\n    return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names;\n}\nfunction optimizeExpr(expr, names, constants) {\n    if (expr instanceof code_1.Name)\n        return replaceName(expr);\n    if (!canOptimize(expr))\n        return expr;\n    return new code_1._Code(expr._items.reduce((items, c) => {\n        if (c instanceof code_1.Name)\n            c = replaceName(c);\n        if (c instanceof code_1._Code)\n            items.push(...c._items);\n        else\n            items.push(c);\n        return items;\n    }, []));\n    function replaceName(n) {\n        const c = constants[n.str];\n        if (c === undefined || names[n.str] !== 1)\n            return n;\n        delete names[n.str];\n        return c;\n    }\n    function canOptimize(e) {\n        return (e instanceof code_1._Code &&\n            e._items.some((c) => c instanceof code_1.Name && names[c.str] === 1 && constants[c.str] !== undefined));\n    }\n}\nfunction subtractNames(names, from) {\n    for (const n in from)\n        names[n] = (names[n] || 0) - (from[n] || 0);\n}\nfunction not(x) {\n    return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : (0, code_1._) `!${par(x)}`;\n}\nexports.not = not;\nconst andCode = mappend(exports.operators.AND);\n// boolean AND (&&) expression with the passed arguments\nfunction and(...args) {\n    return args.reduce(andCode);\n}\nexports.and = and;\nconst orCode = mappend(exports.operators.OR);\n// boolean OR (||) expression with the passed arguments\nfunction or(...args) {\n    return args.reduce(orCode);\n}\nexports.or = or;\nfunction mappend(op) {\n    return (x, y) => (x === code_1.nil ? y : y === code_1.nil ? x : (0, code_1._) `${par(x)} ${op} ${par(y)}`);\n}\nfunction par(x) {\n    return x instanceof code_1.Name ? x : (0, code_1._) `(${x})`;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = void 0;\nconst code_1 = require(\"./code\");\nclass ValueError extends Error {\n    constructor(name) {\n        super(`CodeGen: \"code\" for ${name} not defined`);\n        this.value = name.value;\n    }\n}\nvar UsedValueState;\n(function (UsedValueState) {\n    UsedValueState[UsedValueState[\"Started\"] = 0] = \"Started\";\n    UsedValueState[UsedValueState[\"Completed\"] = 1] = \"Completed\";\n})(UsedValueState || (exports.UsedValueState = UsedValueState = {}));\nexports.varKinds = {\n    const: new code_1.Name(\"const\"),\n    let: new code_1.Name(\"let\"),\n    var: new code_1.Name(\"var\"),\n};\nclass Scope {\n    constructor({ prefixes, parent } = {}) {\n        this._names = {};\n        this._prefixes = prefixes;\n        this._parent = parent;\n    }\n    toName(nameOrPrefix) {\n        return nameOrPrefix instanceof code_1.Name ? nameOrPrefix : this.name(nameOrPrefix);\n    }\n    name(prefix) {\n        return new code_1.Name(this._newName(prefix));\n    }\n    _newName(prefix) {\n        const ng = this._names[prefix] || this._nameGroup(prefix);\n        return `${prefix}${ng.index++}`;\n    }\n    _nameGroup(prefix) {\n        var _a, _b;\n        if (((_b = (_a = this._parent) === null || _a === void 0 ? void 0 : _a._prefixes) === null || _b === void 0 ? void 0 : _b.has(prefix)) || (this._prefixes && !this._prefixes.has(prefix))) {\n            throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`);\n        }\n        return (this._names[prefix] = { prefix, index: 0 });\n    }\n}\nexports.Scope = Scope;\nclass ValueScopeName extends code_1.Name {\n    constructor(prefix, nameStr) {\n        super(nameStr);\n        this.prefix = prefix;\n    }\n    setValue(value, { property, itemIndex }) {\n        this.value = value;\n        this.scopePath = (0, code_1._) `.${new code_1.Name(property)}[${itemIndex}]`;\n    }\n}\nexports.ValueScopeName = ValueScopeName;\nconst line = (0, code_1._) `\\n`;\nclass ValueScope extends Scope {\n    constructor(opts) {\n        super(opts);\n        this._values = {};\n        this._scope = opts.scope;\n        this.opts = { ...opts, _n: opts.lines ? line : code_1.nil };\n    }\n    get() {\n        return this._scope;\n    }\n    name(prefix) {\n        return new ValueScopeName(prefix, this._newName(prefix));\n    }\n    value(nameOrPrefix, value) {\n        var _a;\n        if (value.ref === undefined)\n            throw new Error(\"CodeGen: ref must be passed in value\");\n        const name = this.toName(nameOrPrefix);\n        const { prefix } = name;\n        const valueKey = (_a = value.key) !== null && _a !== void 0 ? _a : value.ref;\n        let vs = this._values[prefix];\n        if (vs) {\n            const _name = vs.get(valueKey);\n            if (_name)\n                return _name;\n        }\n        else {\n            vs = this._values[prefix] = new Map();\n        }\n        vs.set(valueKey, name);\n        const s = this._scope[prefix] || (this._scope[prefix] = []);\n        const itemIndex = s.length;\n        s[itemIndex] = value.ref;\n        name.setValue(value, { property: prefix, itemIndex });\n        return name;\n    }\n    getValue(prefix, keyOrRef) {\n        const vs = this._values[prefix];\n        if (!vs)\n            return;\n        return vs.get(keyOrRef);\n    }\n    scopeRefs(scopeName, values = this._values) {\n        return this._reduceValues(values, (name) => {\n            if (name.scopePath === undefined)\n                throw new Error(`CodeGen: name \"${name}\" has no value`);\n            return (0, code_1._) `${scopeName}${name.scopePath}`;\n        });\n    }\n    scopeCode(values = this._values, usedValues, getCode) {\n        return this._reduceValues(values, (name) => {\n            if (name.value === undefined)\n                throw new Error(`CodeGen: name \"${name}\" has no value`);\n            return name.value.code;\n        }, usedValues, getCode);\n    }\n    _reduceValues(values, valueCode, usedValues = {}, getCode) {\n        let code = code_1.nil;\n        for (const prefix in values) {\n            const vs = values[prefix];\n            if (!vs)\n                continue;\n            const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map());\n            vs.forEach((name) => {\n                if (nameSet.has(name))\n                    return;\n                nameSet.set(name, UsedValueState.Started);\n                let c = valueCode(name);\n                if (c) {\n                    const def = this.opts.es5 ? exports.varKinds.var : exports.varKinds.const;\n                    code = (0, code_1._) `${code}${def} ${name} = ${c};${this.opts._n}`;\n                }\n                else if ((c = getCode === null || getCode === void 0 ? void 0 : getCode(name))) {\n                    code = (0, code_1._) `${code}${c}${this.opts._n}`;\n                }\n                else {\n                    throw new ValueError(name);\n                }\n                nameSet.set(name, UsedValueState.Completed);\n            });\n        }\n        return code;\n    }\n}\nexports.ValueScope = ValueScope;\n//# sourceMappingURL=scope.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst util_1 = require(\"./util\");\nconst names_1 = require(\"./names\");\nexports.keywordError = {\n    message: ({ keyword }) => (0, codegen_1.str) `must pass \"${keyword}\" keyword validation`,\n};\nexports.keyword$DataError = {\n    message: ({ keyword, schemaType }) => schemaType\n        ? (0, codegen_1.str) `\"${keyword}\" keyword must be ${schemaType} ($data)`\n        : (0, codegen_1.str) `\"${keyword}\" keyword is invalid ($data)`,\n};\nfunction reportError(cxt, error = exports.keywordError, errorPaths, overrideAllErrors) {\n    const { it } = cxt;\n    const { gen, compositeRule, allErrors } = it;\n    const errObj = errorObjectCode(cxt, error, errorPaths);\n    if (overrideAllErrors !== null && overrideAllErrors !== void 0 ? overrideAllErrors : (compositeRule || allErrors)) {\n        addError(gen, errObj);\n    }\n    else {\n        returnErrors(it, (0, codegen_1._) `[${errObj}]`);\n    }\n}\nexports.reportError = reportError;\nfunction reportExtraError(cxt, error = exports.keywordError, errorPaths) {\n    const { it } = cxt;\n    const { gen, compositeRule, allErrors } = it;\n    const errObj = errorObjectCode(cxt, error, errorPaths);\n    addError(gen, errObj);\n    if (!(compositeRule || allErrors)) {\n        returnErrors(it, names_1.default.vErrors);\n    }\n}\nexports.reportExtraError = reportExtraError;\nfunction resetErrorsCount(gen, errsCount) {\n    gen.assign(names_1.default.errors, errsCount);\n    gen.if((0, codegen_1._) `${names_1.default.vErrors} !== null`, () => gen.if(errsCount, () => gen.assign((0, codegen_1._) `${names_1.default.vErrors}.length`, errsCount), () => gen.assign(names_1.default.vErrors, null)));\n}\nexports.resetErrorsCount = resetErrorsCount;\nfunction extendErrors({ gen, keyword, schemaValue, data, errsCount, it, }) {\n    /* istanbul ignore if */\n    if (errsCount === undefined)\n        throw new Error(\"ajv implementation error\");\n    const err = gen.name(\"err\");\n    gen.forRange(\"i\", errsCount, names_1.default.errors, (i) => {\n        gen.const(err, (0, codegen_1._) `${names_1.default.vErrors}[${i}]`);\n        gen.if((0, codegen_1._) `${err}.instancePath === undefined`, () => gen.assign((0, codegen_1._) `${err}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath)));\n        gen.assign((0, codegen_1._) `${err}.schemaPath`, (0, codegen_1.str) `${it.errSchemaPath}/${keyword}`);\n        if (it.opts.verbose) {\n            gen.assign((0, codegen_1._) `${err}.schema`, schemaValue);\n            gen.assign((0, codegen_1._) `${err}.data`, data);\n        }\n    });\n}\nexports.extendErrors = extendErrors;\nfunction addError(gen, errObj) {\n    const err = gen.const(\"err\", errObj);\n    gen.if((0, codegen_1._) `${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._) `[${err}]`), (0, codegen_1._) `${names_1.default.vErrors}.push(${err})`);\n    gen.code((0, codegen_1._) `${names_1.default.errors}++`);\n}\nfunction returnErrors(it, errs) {\n    const { gen, validateName, schemaEnv } = it;\n    if (schemaEnv.$async) {\n        gen.throw((0, codegen_1._) `new ${it.ValidationError}(${errs})`);\n    }\n    else {\n        gen.assign((0, codegen_1._) `${validateName}.errors`, errs);\n        gen.return(false);\n    }\n}\nconst E = {\n    keyword: new codegen_1.Name(\"keyword\"),\n    schemaPath: new codegen_1.Name(\"schemaPath\"), // also used in JTD errors\n    params: new codegen_1.Name(\"params\"),\n    propertyName: new codegen_1.Name(\"propertyName\"),\n    message: new codegen_1.Name(\"message\"),\n    schema: new codegen_1.Name(\"schema\"),\n    parentSchema: new codegen_1.Name(\"parentSchema\"),\n};\nfunction errorObjectCode(cxt, error, errorPaths) {\n    const { createErrors } = cxt.it;\n    if (createErrors === false)\n        return (0, codegen_1._) `{}`;\n    return errorObject(cxt, error, errorPaths);\n}\nfunction errorObject(cxt, error, errorPaths = {}) {\n    const { gen, it } = cxt;\n    const keyValues = [\n        errorInstancePath(it, errorPaths),\n        errorSchemaPath(cxt, errorPaths),\n    ];\n    extraErrorProps(cxt, error, keyValues);\n    return gen.object(...keyValues);\n}\nfunction errorInstancePath({ errorPath }, { instancePath }) {\n    const instPath = instancePath\n        ? (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(instancePath, util_1.Type.Str)}`\n        : errorPath;\n    return [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, instPath)];\n}\nfunction errorSchemaPath({ keyword, it: { errSchemaPath } }, { schemaPath, parentSchema }) {\n    let schPath = parentSchema ? errSchemaPath : (0, codegen_1.str) `${errSchemaPath}/${keyword}`;\n    if (schemaPath) {\n        schPath = (0, codegen_1.str) `${schPath}${(0, util_1.getErrorPath)(schemaPath, util_1.Type.Str)}`;\n    }\n    return [E.schemaPath, schPath];\n}\nfunction extraErrorProps(cxt, { params, message }, keyValues) {\n    const { keyword, data, schemaValue, it } = cxt;\n    const { opts, propertyName, topSchemaRef, schemaPath } = it;\n    keyValues.push([E.keyword, keyword], [E.params, typeof params == \"function\" ? params(cxt) : params || (0, codegen_1._) `{}`]);\n    if (opts.messages) {\n        keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message]);\n    }\n    if (opts.verbose) {\n        keyValues.push([E.schema, schemaValue], [E.parentSchema, (0, codegen_1._) `${topSchemaRef}${schemaPath}`], [names_1.default.data, data]);\n    }\n    if (propertyName)\n        keyValues.push([E.propertyName, propertyName]);\n}\n//# sourceMappingURL=errors.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst validation_error_1 = require(\"../runtime/validation_error\");\nconst names_1 = require(\"./names\");\nconst resolve_1 = require(\"./resolve\");\nconst util_1 = require(\"./util\");\nconst validate_1 = require(\"./validate\");\nclass SchemaEnv {\n    constructor(env) {\n        var _a;\n        this.refs = {};\n        this.dynamicAnchors = {};\n        let schema;\n        if (typeof env.schema == \"object\")\n            schema = env.schema;\n        this.schema = env.schema;\n        this.schemaId = env.schemaId;\n        this.root = env.root || this;\n        this.baseId = (_a = env.baseId) !== null && _a !== void 0 ? _a : (0, resolve_1.normalizeId)(schema === null || schema === void 0 ? void 0 : schema[env.schemaId || \"$id\"]);\n        this.schemaPath = env.schemaPath;\n        this.localRefs = env.localRefs;\n        this.meta = env.meta;\n        this.$async = schema === null || schema === void 0 ? void 0 : schema.$async;\n        this.refs = {};\n    }\n}\nexports.SchemaEnv = SchemaEnv;\n// let codeSize = 0\n// let nodeCount = 0\n// Compiles schema in SchemaEnv\nfunction compileSchema(sch) {\n    // TODO refactor - remove compilations\n    const _sch = getCompilingSchema.call(this, sch);\n    if (_sch)\n        return _sch;\n    const rootId = (0, resolve_1.getFullPath)(this.opts.uriResolver, sch.root.baseId); // TODO if getFullPath removed 1 tests fails\n    const { es5, lines } = this.opts.code;\n    const { ownProperties } = this.opts;\n    const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties });\n    let _ValidationError;\n    if (sch.$async) {\n        _ValidationError = gen.scopeValue(\"Error\", {\n            ref: validation_error_1.default,\n            code: (0, codegen_1._) `require(\"ajv/dist/runtime/validation_error\").default`,\n        });\n    }\n    const validateName = gen.scopeName(\"validate\");\n    sch.validateName = validateName;\n    const schemaCxt = {\n        gen,\n        allErrors: this.opts.allErrors,\n        data: names_1.default.data,\n        parentData: names_1.default.parentData,\n        parentDataProperty: names_1.default.parentDataProperty,\n        dataNames: [names_1.default.data],\n        dataPathArr: [codegen_1.nil], // TODO can its length be used as dataLevel if nil is removed?\n        dataLevel: 0,\n        dataTypes: [],\n        definedProperties: new Set(),\n        topSchemaRef: gen.scopeValue(\"schema\", this.opts.code.source === true\n            ? { ref: sch.schema, code: (0, codegen_1.stringify)(sch.schema) }\n            : { ref: sch.schema }),\n        validateName,\n        ValidationError: _ValidationError,\n        schema: sch.schema,\n        schemaEnv: sch,\n        rootId,\n        baseId: sch.baseId || rootId,\n        schemaPath: codegen_1.nil,\n        errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n        errorPath: (0, codegen_1._) `\"\"`,\n        opts: this.opts,\n        self: this,\n    };\n    let sourceCode;\n    try {\n        this._compilations.add(sch);\n        (0, validate_1.validateFunctionCode)(schemaCxt);\n        gen.optimize(this.opts.code.optimize);\n        // gen.optimize(1)\n        const validateCode = gen.toString();\n        sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${validateCode}`;\n        // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n        if (this.opts.code.process)\n            sourceCode = this.opts.code.process(sourceCode, sch);\n        // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n        const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode);\n        const validate = makeValidate(this, this.scope.get());\n        this.scope.value(validateName, { ref: validate });\n        validate.errors = null;\n        validate.schema = sch.schema;\n        validate.schemaEnv = sch;\n        if (sch.$async)\n            validate.$async = true;\n        if (this.opts.code.source === true) {\n            validate.source = { validateName, validateCode, scopeValues: gen._values };\n        }\n        if (this.opts.unevaluated) {\n            const { props, items } = schemaCxt;\n            validate.evaluated = {\n                props: props instanceof codegen_1.Name ? undefined : props,\n                items: items instanceof codegen_1.Name ? undefined : items,\n                dynamicProps: props instanceof codegen_1.Name,\n                dynamicItems: items instanceof codegen_1.Name,\n            };\n            if (validate.source)\n                validate.source.evaluated = (0, codegen_1.stringify)(validate.evaluated);\n        }\n        sch.validate = validate;\n        return sch;\n    }\n    catch (e) {\n        delete sch.validate;\n        delete sch.validateName;\n        if (sourceCode)\n            this.logger.error(\"Error compiling schema, function code:\", sourceCode);\n        // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n        throw e;\n    }\n    finally {\n        this._compilations.delete(sch);\n    }\n}\nexports.compileSchema = compileSchema;\nfunction resolveRef(root, baseId, ref) {\n    var _a;\n    ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, ref);\n    const schOrFunc = root.refs[ref];\n    if (schOrFunc)\n        return schOrFunc;\n    let _sch = resolve.call(this, root, ref);\n    if (_sch === undefined) {\n        const schema = (_a = root.localRefs) === null || _a === void 0 ? void 0 : _a[ref]; // TODO maybe localRefs should hold SchemaEnv\n        const { schemaId } = this.opts;\n        if (schema)\n            _sch = new SchemaEnv({ schema, schemaId, root, baseId });\n    }\n    if (_sch === undefined)\n        return;\n    return (root.refs[ref] = inlineOrCompile.call(this, _sch));\n}\nexports.resolveRef = resolveRef;\nfunction inlineOrCompile(sch) {\n    if ((0, resolve_1.inlineRef)(sch.schema, this.opts.inlineRefs))\n        return sch.schema;\n    return sch.validate ? sch : compileSchema.call(this, sch);\n}\n// Index of schema compilation in the currently compiled list\nfunction getCompilingSchema(schEnv) {\n    for (const sch of this._compilations) {\n        if (sameSchemaEnv(sch, schEnv))\n            return sch;\n    }\n}\nexports.getCompilingSchema = getCompilingSchema;\nfunction sameSchemaEnv(s1, s2) {\n    return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;\n}\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(root, // information about the root schema for the current schema\nref // reference to resolve\n) {\n    let sch;\n    while (typeof (sch = this.refs[ref]) == \"string\")\n        ref = sch;\n    return sch || this.schemas[ref] || resolveSchema.call(this, root, ref);\n}\n// Resolve schema, its root and baseId\nfunction resolveSchema(root, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\nref // reference to resolve\n) {\n    const p = this.opts.uriResolver.parse(ref);\n    const refPath = (0, resolve_1._getFullPath)(this.opts.uriResolver, p);\n    let baseId = (0, resolve_1.getFullPath)(this.opts.uriResolver, root.baseId, undefined);\n    // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n    if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n        return getJsonPointer.call(this, p, root);\n    }\n    const id = (0, resolve_1.normalizeId)(refPath);\n    const schOrRef = this.refs[id] || this.schemas[id];\n    if (typeof schOrRef == \"string\") {\n        const sch = resolveSchema.call(this, root, schOrRef);\n        if (typeof (sch === null || sch === void 0 ? void 0 : sch.schema) !== \"object\")\n            return;\n        return getJsonPointer.call(this, p, sch);\n    }\n    if (typeof (schOrRef === null || schOrRef === void 0 ? void 0 : schOrRef.schema) !== \"object\")\n        return;\n    if (!schOrRef.validate)\n        compileSchema.call(this, schOrRef);\n    if (id === (0, resolve_1.normalizeId)(ref)) {\n        const { schema } = schOrRef;\n        const { schemaId } = this.opts;\n        const schId = schema[schemaId];\n        if (schId)\n            baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n        return new SchemaEnv({ schema, schemaId, root, baseId });\n    }\n    return getJsonPointer.call(this, p, schOrRef);\n}\nexports.resolveSchema = resolveSchema;\nconst PREVENT_SCOPE_CHANGE = new Set([\n    \"properties\",\n    \"patternProperties\",\n    \"enum\",\n    \"dependencies\",\n    \"definitions\",\n]);\nfunction getJsonPointer(parsedRef, { baseId, schema, root }) {\n    var _a;\n    if (((_a = parsedRef.fragment) === null || _a === void 0 ? void 0 : _a[0]) !== \"/\")\n        return;\n    for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n        if (typeof schema === \"boolean\")\n            return;\n        const partSchema = schema[(0, util_1.unescapeFragment)(part)];\n        if (partSchema === undefined)\n            return;\n        schema = partSchema;\n        // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n        const schId = typeof schema === \"object\" && schema[this.opts.schemaId];\n        if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n            baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n        }\n    }\n    let env;\n    if (typeof schema != \"boolean\" && schema.$ref && !(0, util_1.schemaHasRulesButRef)(schema, this.RULES)) {\n        const $ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schema.$ref);\n        env = resolveSchema.call(this, root, $ref);\n    }\n    // even though resolution failed we need to return SchemaEnv to throw exception\n    // so that compileAsync loads missing schema.\n    const { schemaId } = this.opts;\n    env = env || new SchemaEnv({ schema, schemaId, root, baseId });\n    if (env.schema !== env.root.schema)\n        return env;\n    return undefined;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"./codegen\");\nconst names = {\n    // validation function arguments\n    data: new codegen_1.Name(\"data\"), // data passed to validation function\n    // args passed from referencing schema\n    valCxt: new codegen_1.Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n    instancePath: new codegen_1.Name(\"instancePath\"),\n    parentData: new codegen_1.Name(\"parentData\"),\n    parentDataProperty: new codegen_1.Name(\"parentDataProperty\"),\n    rootData: new codegen_1.Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n    dynamicAnchors: new codegen_1.Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n    // function scoped variables\n    vErrors: new codegen_1.Name(\"vErrors\"), // null or array of validation errors\n    errors: new codegen_1.Name(\"errors\"), // counter of validation errors\n    this: new codegen_1.Name(\"this\"),\n    // \"globals\"\n    self: new codegen_1.Name(\"self\"),\n    scope: new codegen_1.Name(\"scope\"),\n    // JTD serialize/parse name for JSON string and position\n    json: new codegen_1.Name(\"json\"),\n    jsonPos: new codegen_1.Name(\"jsonPos\"),\n    jsonLen: new codegen_1.Name(\"jsonLen\"),\n    jsonPart: new codegen_1.Name(\"jsonPart\"),\n};\nexports.default = names;\n//# sourceMappingURL=names.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst resolve_1 = require(\"./resolve\");\nclass MissingRefError extends Error {\n    constructor(resolver, baseId, ref, msg) {\n        super(msg || `can't resolve reference ${ref} from id ${baseId}`);\n        this.missingRef = (0, resolve_1.resolveUrl)(resolver, baseId, ref);\n        this.missingSchema = (0, resolve_1.normalizeId)((0, resolve_1.getFullPath)(resolver, this.missingRef));\n    }\n}\nexports.default = MissingRefError;\n//# sourceMappingURL=ref_error.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSchemaRefs = exports.resolveUrl = exports.normalizeId = exports._getFullPath = exports.getFullPath = exports.inlineRef = void 0;\nconst util_1 = require(\"./util\");\nconst equal = require(\"fast-deep-equal\");\nconst traverse = require(\"json-schema-traverse\");\n// TODO refactor to use keyword definitions\nconst SIMPLE_INLINED = new Set([\n    \"type\",\n    \"format\",\n    \"pattern\",\n    \"maxLength\",\n    \"minLength\",\n    \"maxProperties\",\n    \"minProperties\",\n    \"maxItems\",\n    \"minItems\",\n    \"maximum\",\n    \"minimum\",\n    \"uniqueItems\",\n    \"multipleOf\",\n    \"required\",\n    \"enum\",\n    \"const\",\n]);\nfunction inlineRef(schema, limit = true) {\n    if (typeof schema == \"boolean\")\n        return true;\n    if (limit === true)\n        return !hasRef(schema);\n    if (!limit)\n        return false;\n    return countKeys(schema) <= limit;\n}\nexports.inlineRef = inlineRef;\nconst REF_KEYWORDS = new Set([\n    \"$ref\",\n    \"$recursiveRef\",\n    \"$recursiveAnchor\",\n    \"$dynamicRef\",\n    \"$dynamicAnchor\",\n]);\nfunction hasRef(schema) {\n    for (const key in schema) {\n        if (REF_KEYWORDS.has(key))\n            return true;\n        const sch = schema[key];\n        if (Array.isArray(sch) && sch.some(hasRef))\n            return true;\n        if (typeof sch == \"object\" && hasRef(sch))\n            return true;\n    }\n    return false;\n}\nfunction countKeys(schema) {\n    let count = 0;\n    for (const key in schema) {\n        if (key === \"$ref\")\n            return Infinity;\n        count++;\n        if (SIMPLE_INLINED.has(key))\n            continue;\n        if (typeof schema[key] == \"object\") {\n            (0, util_1.eachItem)(schema[key], (sch) => (count += countKeys(sch)));\n        }\n        if (count === Infinity)\n            return Infinity;\n    }\n    return count;\n}\nfunction getFullPath(resolver, id = \"\", normalize) {\n    if (normalize !== false)\n        id = normalizeId(id);\n    const p = resolver.parse(id);\n    return _getFullPath(resolver, p);\n}\nexports.getFullPath = getFullPath;\nfunction _getFullPath(resolver, p) {\n    const serialized = resolver.serialize(p);\n    return serialized.split(\"#\")[0] + \"#\";\n}\nexports._getFullPath = _getFullPath;\nconst TRAILING_SLASH_HASH = /#\\/?$/;\nfunction normalizeId(id) {\n    return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\";\n}\nexports.normalizeId = normalizeId;\nfunction resolveUrl(resolver, baseId, id) {\n    id = normalizeId(id);\n    return resolver.resolve(baseId, id);\n}\nexports.resolveUrl = resolveUrl;\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i;\nfunction getSchemaRefs(schema, baseId) {\n    if (typeof schema == \"boolean\")\n        return {};\n    const { schemaId, uriResolver } = this.opts;\n    const schId = normalizeId(schema[schemaId] || baseId);\n    const baseIds = { \"\": schId };\n    const pathPrefix = getFullPath(uriResolver, schId, false);\n    const localRefs = {};\n    const schemaRefs = new Set();\n    traverse(schema, { allKeys: true }, (sch, jsonPtr, _, parentJsonPtr) => {\n        if (parentJsonPtr === undefined)\n            return;\n        const fullPath = pathPrefix + jsonPtr;\n        let innerBaseId = baseIds[parentJsonPtr];\n        if (typeof sch[schemaId] == \"string\")\n            innerBaseId = addRef.call(this, sch[schemaId]);\n        addAnchor.call(this, sch.$anchor);\n        addAnchor.call(this, sch.$dynamicAnchor);\n        baseIds[jsonPtr] = innerBaseId;\n        function addRef(ref) {\n            // eslint-disable-next-line @typescript-eslint/unbound-method\n            const _resolve = this.opts.uriResolver.resolve;\n            ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref);\n            if (schemaRefs.has(ref))\n                throw ambiguos(ref);\n            schemaRefs.add(ref);\n            let schOrRef = this.refs[ref];\n            if (typeof schOrRef == \"string\")\n                schOrRef = this.refs[schOrRef];\n            if (typeof schOrRef == \"object\") {\n                checkAmbiguosRef(sch, schOrRef.schema, ref);\n            }\n            else if (ref !== normalizeId(fullPath)) {\n                if (ref[0] === \"#\") {\n                    checkAmbiguosRef(sch, localRefs[ref], ref);\n                    localRefs[ref] = sch;\n                }\n                else {\n                    this.refs[ref] = fullPath;\n                }\n            }\n            return ref;\n        }\n        function addAnchor(anchor) {\n            if (typeof anchor == \"string\") {\n                if (!ANCHOR.test(anchor))\n                    throw new Error(`invalid anchor \"${anchor}\"`);\n                addRef.call(this, `#${anchor}`);\n            }\n        }\n    });\n    return localRefs;\n    function checkAmbiguosRef(sch1, sch2, ref) {\n        if (sch2 !== undefined && !equal(sch1, sch2))\n            throw ambiguos(ref);\n    }\n    function ambiguos(ref) {\n        return new Error(`reference \"${ref}\" resolves to more than one schema`);\n    }\n}\nexports.getSchemaRefs = getSchemaRefs;\n//# sourceMappingURL=resolve.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRules = exports.isJSONType = void 0;\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"];\nconst jsonTypes = new Set(_jsonTypes);\nfunction isJSONType(x) {\n    return typeof x == \"string\" && jsonTypes.has(x);\n}\nexports.isJSONType = isJSONType;\nfunction getRules() {\n    const groups = {\n        number: { type: \"number\", rules: [] },\n        string: { type: \"string\", rules: [] },\n        array: { type: \"array\", rules: [] },\n        object: { type: \"object\", rules: [] },\n    };\n    return {\n        types: { ...groups, integer: true, boolean: true, null: true },\n        rules: [{ rules: [] }, groups.number, groups.string, groups.array, groups.object],\n        post: { rules: [] },\n        all: {},\n        keywords: {},\n    };\n}\nexports.getRules = getRules;\n//# sourceMappingURL=rules.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst code_1 = require(\"./codegen/code\");\n// TODO refactor to use Set\nfunction toHash(arr) {\n    const hash = {};\n    for (const item of arr)\n        hash[item] = true;\n    return hash;\n}\nexports.toHash = toHash;\nfunction alwaysValidSchema(it, schema) {\n    if (typeof schema == \"boolean\")\n        return schema;\n    if (Object.keys(schema).length === 0)\n        return true;\n    checkUnknownRules(it, schema);\n    return !schemaHasRules(schema, it.self.RULES.all);\n}\nexports.alwaysValidSchema = alwaysValidSchema;\nfunction checkUnknownRules(it, schema = it.schema) {\n    const { opts, self } = it;\n    if (!opts.strictSchema)\n        return;\n    if (typeof schema === \"boolean\")\n        return;\n    const rules = self.RULES.keywords;\n    for (const key in schema) {\n        if (!rules[key])\n            checkStrictMode(it, `unknown keyword: \"${key}\"`);\n    }\n}\nexports.checkUnknownRules = checkUnknownRules;\nfunction schemaHasRules(schema, rules) {\n    if (typeof schema == \"boolean\")\n        return !schema;\n    for (const key in schema)\n        if (rules[key])\n            return true;\n    return false;\n}\nexports.schemaHasRules = schemaHasRules;\nfunction schemaHasRulesButRef(schema, RULES) {\n    if (typeof schema == \"boolean\")\n        return !schema;\n    for (const key in schema)\n        if (key !== \"$ref\" && RULES.all[key])\n            return true;\n    return false;\n}\nexports.schemaHasRulesButRef = schemaHasRulesButRef;\nfunction schemaRefOrVal({ topSchemaRef, schemaPath }, schema, keyword, $data) {\n    if (!$data) {\n        if (typeof schema == \"number\" || typeof schema == \"boolean\")\n            return schema;\n        if (typeof schema == \"string\")\n            return (0, codegen_1._) `${schema}`;\n    }\n    return (0, codegen_1._) `${topSchemaRef}${schemaPath}${(0, codegen_1.getProperty)(keyword)}`;\n}\nexports.schemaRefOrVal = schemaRefOrVal;\nfunction unescapeFragment(str) {\n    return unescapeJsonPointer(decodeURIComponent(str));\n}\nexports.unescapeFragment = unescapeFragment;\nfunction escapeFragment(str) {\n    return encodeURIComponent(escapeJsonPointer(str));\n}\nexports.escapeFragment = escapeFragment;\nfunction escapeJsonPointer(str) {\n    if (typeof str == \"number\")\n        return `${str}`;\n    return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\nexports.escapeJsonPointer = escapeJsonPointer;\nfunction unescapeJsonPointer(str) {\n    return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\nexports.unescapeJsonPointer = unescapeJsonPointer;\nfunction eachItem(xs, f) {\n    if (Array.isArray(xs)) {\n        for (const x of xs)\n            f(x);\n    }\n    else {\n        f(xs);\n    }\n}\nexports.eachItem = eachItem;\nfunction makeMergeEvaluated({ mergeNames, mergeToName, mergeValues, resultToName, }) {\n    return (gen, from, to, toName) => {\n        const res = to === undefined\n            ? from\n            : to instanceof codegen_1.Name\n                ? (from instanceof codegen_1.Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n                : from instanceof codegen_1.Name\n                    ? (mergeToName(gen, to, from), from)\n                    : mergeValues(from, to);\n        return toName === codegen_1.Name && !(res instanceof codegen_1.Name) ? resultToName(gen, res) : res;\n    };\n}\nexports.mergeEvaluated = {\n    props: makeMergeEvaluated({\n        mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => {\n            gen.if((0, codegen_1._) `${from} === true`, () => gen.assign(to, true), () => gen.assign(to, (0, codegen_1._) `${to} || {}`).code((0, codegen_1._) `Object.assign(${to}, ${from})`));\n        }),\n        mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => {\n            if (from === true) {\n                gen.assign(to, true);\n            }\n            else {\n                gen.assign(to, (0, codegen_1._) `${to} || {}`);\n                setEvaluated(gen, to, from);\n            }\n        }),\n        mergeValues: (from, to) => (from === true ? true : { ...from, ...to }),\n        resultToName: evaluatedPropsToName,\n    }),\n    items: makeMergeEvaluated({\n        mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => gen.assign(to, (0, codegen_1._) `${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)),\n        mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => gen.assign(to, from === true ? true : (0, codegen_1._) `${to} > ${from} ? ${to} : ${from}`)),\n        mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n        resultToName: (gen, items) => gen.var(\"items\", items),\n    }),\n};\nfunction evaluatedPropsToName(gen, ps) {\n    if (ps === true)\n        return gen.var(\"props\", true);\n    const props = gen.var(\"props\", (0, codegen_1._) `{}`);\n    if (ps !== undefined)\n        setEvaluated(gen, props, ps);\n    return props;\n}\nexports.evaluatedPropsToName = evaluatedPropsToName;\nfunction setEvaluated(gen, props, ps) {\n    Object.keys(ps).forEach((p) => gen.assign((0, codegen_1._) `${props}${(0, codegen_1.getProperty)(p)}`, true));\n}\nexports.setEvaluated = setEvaluated;\nconst snippets = {};\nfunction useFunc(gen, f) {\n    return gen.scopeValue(\"func\", {\n        ref: f,\n        code: snippets[f.code] || (snippets[f.code] = new code_1._Code(f.code)),\n    });\n}\nexports.useFunc = useFunc;\nvar Type;\n(function (Type) {\n    Type[Type[\"Num\"] = 0] = \"Num\";\n    Type[Type[\"Str\"] = 1] = \"Str\";\n})(Type || (exports.Type = Type = {}));\nfunction getErrorPath(dataProp, dataPropType, jsPropertySyntax) {\n    // let path\n    if (dataProp instanceof codegen_1.Name) {\n        const isNumber = dataPropType === Type.Num;\n        return jsPropertySyntax\n            ? isNumber\n                ? (0, codegen_1._) `\"[\" + ${dataProp} + \"]\"`\n                : (0, codegen_1._) `\"['\" + ${dataProp} + \"']\"`\n            : isNumber\n                ? (0, codegen_1._) `\"/\" + ${dataProp}`\n                : (0, codegen_1._) `\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")`; // TODO maybe use global escapePointer\n    }\n    return jsPropertySyntax ? (0, codegen_1.getProperty)(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp);\n}\nexports.getErrorPath = getErrorPath;\nfunction checkStrictMode(it, msg, mode = it.opts.strictSchema) {\n    if (!mode)\n        return;\n    msg = `strict mode: ${msg}`;\n    if (mode === true)\n        throw new Error(msg);\n    it.self.logger.warn(msg);\n}\nexports.checkStrictMode = checkStrictMode;\n//# sourceMappingURL=util.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = void 0;\nfunction schemaHasRulesForType({ schema, self }, type) {\n    const group = self.RULES.types[type];\n    return group && group !== true && shouldUseGroup(schema, group);\n}\nexports.schemaHasRulesForType = schemaHasRulesForType;\nfunction shouldUseGroup(schema, group) {\n    return group.rules.some((rule) => shouldUseRule(schema, rule));\n}\nexports.shouldUseGroup = shouldUseGroup;\nfunction shouldUseRule(schema, rule) {\n    var _a;\n    return (schema[rule.keyword] !== undefined ||\n        ((_a = rule.definition.implements) === null || _a === void 0 ? void 0 : _a.some((kwd) => schema[kwd] !== undefined)));\n}\nexports.shouldUseRule = shouldUseRule;\n//# sourceMappingURL=applicability.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.boolOrEmptySchema = exports.topBoolOrEmptySchema = void 0;\nconst errors_1 = require(\"../errors\");\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst boolError = {\n    message: \"boolean schema is false\",\n};\nfunction topBoolOrEmptySchema(it) {\n    const { gen, schema, validateName } = it;\n    if (schema === false) {\n        falseSchemaError(it, false);\n    }\n    else if (typeof schema == \"object\" && schema.$async === true) {\n        gen.return(names_1.default.data);\n    }\n    else {\n        gen.assign((0, codegen_1._) `${validateName}.errors`, null);\n        gen.return(true);\n    }\n}\nexports.topBoolOrEmptySchema = topBoolOrEmptySchema;\nfunction boolOrEmptySchema(it, valid) {\n    const { gen, schema } = it;\n    if (schema === false) {\n        gen.var(valid, false); // TODO var\n        falseSchemaError(it);\n    }\n    else {\n        gen.var(valid, true); // TODO var\n    }\n}\nexports.boolOrEmptySchema = boolOrEmptySchema;\nfunction falseSchemaError(it, overrideAllErrors) {\n    const { gen, data } = it;\n    // TODO maybe some other interface should be used for non-keyword validation errors...\n    const cxt = {\n        gen,\n        keyword: \"false schema\",\n        data,\n        schema: false,\n        schemaCode: false,\n        schemaValue: false,\n        params: {},\n        it,\n    };\n    (0, errors_1.reportError)(cxt, boolError, undefined, overrideAllErrors);\n}\n//# sourceMappingURL=boolSchema.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = void 0;\nconst rules_1 = require(\"../rules\");\nconst applicability_1 = require(\"./applicability\");\nconst errors_1 = require(\"../errors\");\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nvar DataType;\n(function (DataType) {\n    DataType[DataType[\"Correct\"] = 0] = \"Correct\";\n    DataType[DataType[\"Wrong\"] = 1] = \"Wrong\";\n})(DataType || (exports.DataType = DataType = {}));\nfunction getSchemaTypes(schema) {\n    const types = getJSONTypes(schema.type);\n    const hasNull = types.includes(\"null\");\n    if (hasNull) {\n        if (schema.nullable === false)\n            throw new Error(\"type: null contradicts nullable: false\");\n    }\n    else {\n        if (!types.length && schema.nullable !== undefined) {\n            throw new Error('\"nullable\" cannot be used without \"type\"');\n        }\n        if (schema.nullable === true)\n            types.push(\"null\");\n    }\n    return types;\n}\nexports.getSchemaTypes = getSchemaTypes;\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nfunction getJSONTypes(ts) {\n    const types = Array.isArray(ts) ? ts : ts ? [ts] : [];\n    if (types.every(rules_1.isJSONType))\n        return types;\n    throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"));\n}\nexports.getJSONTypes = getJSONTypes;\nfunction coerceAndCheckDataType(it, types) {\n    const { gen, data, opts } = it;\n    const coerceTo = coerceToTypes(types, opts.coerceTypes);\n    const checkTypes = types.length > 0 &&\n        !(coerceTo.length === 0 && types.length === 1 && (0, applicability_1.schemaHasRulesForType)(it, types[0]));\n    if (checkTypes) {\n        const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong);\n        gen.if(wrongType, () => {\n            if (coerceTo.length)\n                coerceData(it, types, coerceTo);\n            else\n                reportTypeError(it);\n        });\n    }\n    return checkTypes;\n}\nexports.coerceAndCheckDataType = coerceAndCheckDataType;\nconst COERCIBLE = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"]);\nfunction coerceToTypes(types, coerceTypes) {\n    return coerceTypes\n        ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n        : [];\n}\nfunction coerceData(it, types, coerceTo) {\n    const { gen, data, opts } = it;\n    const dataType = gen.let(\"dataType\", (0, codegen_1._) `typeof ${data}`);\n    const coerced = gen.let(\"coerced\", (0, codegen_1._) `undefined`);\n    if (opts.coerceTypes === \"array\") {\n        gen.if((0, codegen_1._) `${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () => gen\n            .assign(data, (0, codegen_1._) `${data}[0]`)\n            .assign(dataType, (0, codegen_1._) `typeof ${data}`)\n            .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data)));\n    }\n    gen.if((0, codegen_1._) `${coerced} !== undefined`);\n    for (const t of coerceTo) {\n        if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n            coerceSpecificType(t);\n        }\n    }\n    gen.else();\n    reportTypeError(it);\n    gen.endIf();\n    gen.if((0, codegen_1._) `${coerced} !== undefined`, () => {\n        gen.assign(data, coerced);\n        assignParentData(it, coerced);\n    });\n    function coerceSpecificType(t) {\n        switch (t) {\n            case \"string\":\n                gen\n                    .elseIf((0, codegen_1._) `${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n                    .assign(coerced, (0, codegen_1._) `\"\" + ${data}`)\n                    .elseIf((0, codegen_1._) `${data} === null`)\n                    .assign(coerced, (0, codegen_1._) `\"\"`);\n                return;\n            case \"number\":\n                gen\n                    .elseIf((0, codegen_1._) `${dataType} == \"boolean\" || ${data} === null\n              || (${dataType} == \"string\" && ${data} && ${data} == +${data})`)\n                    .assign(coerced, (0, codegen_1._) `+${data}`);\n                return;\n            case \"integer\":\n                gen\n                    .elseIf((0, codegen_1._) `${dataType} === \"boolean\" || ${data} === null\n              || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`)\n                    .assign(coerced, (0, codegen_1._) `+${data}`);\n                return;\n            case \"boolean\":\n                gen\n                    .elseIf((0, codegen_1._) `${data} === \"false\" || ${data} === 0 || ${data} === null`)\n                    .assign(coerced, false)\n                    .elseIf((0, codegen_1._) `${data} === \"true\" || ${data} === 1`)\n                    .assign(coerced, true);\n                return;\n            case \"null\":\n                gen.elseIf((0, codegen_1._) `${data} === \"\" || ${data} === 0 || ${data} === false`);\n                gen.assign(coerced, null);\n                return;\n            case \"array\":\n                gen\n                    .elseIf((0, codegen_1._) `${dataType} === \"string\" || ${dataType} === \"number\"\n              || ${dataType} === \"boolean\" || ${data} === null`)\n                    .assign(coerced, (0, codegen_1._) `[${data}]`);\n        }\n    }\n}\nfunction assignParentData({ gen, parentData, parentDataProperty }, expr) {\n    // TODO use gen.property\n    gen.if((0, codegen_1._) `${parentData} !== undefined`, () => gen.assign((0, codegen_1._) `${parentData}[${parentDataProperty}]`, expr));\n}\nfunction checkDataType(dataType, data, strictNums, correct = DataType.Correct) {\n    const EQ = correct === DataType.Correct ? codegen_1.operators.EQ : codegen_1.operators.NEQ;\n    let cond;\n    switch (dataType) {\n        case \"null\":\n            return (0, codegen_1._) `${data} ${EQ} null`;\n        case \"array\":\n            cond = (0, codegen_1._) `Array.isArray(${data})`;\n            break;\n        case \"object\":\n            cond = (0, codegen_1._) `${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`;\n            break;\n        case \"integer\":\n            cond = numCond((0, codegen_1._) `!(${data} % 1) && !isNaN(${data})`);\n            break;\n        case \"number\":\n            cond = numCond();\n            break;\n        default:\n            return (0, codegen_1._) `typeof ${data} ${EQ} ${dataType}`;\n    }\n    return correct === DataType.Correct ? cond : (0, codegen_1.not)(cond);\n    function numCond(_cond = codegen_1.nil) {\n        return (0, codegen_1.and)((0, codegen_1._) `typeof ${data} == \"number\"`, _cond, strictNums ? (0, codegen_1._) `isFinite(${data})` : codegen_1.nil);\n    }\n}\nexports.checkDataType = checkDataType;\nfunction checkDataTypes(dataTypes, data, strictNums, correct) {\n    if (dataTypes.length === 1) {\n        return checkDataType(dataTypes[0], data, strictNums, correct);\n    }\n    let cond;\n    const types = (0, util_1.toHash)(dataTypes);\n    if (types.array && types.object) {\n        const notObj = (0, codegen_1._) `typeof ${data} != \"object\"`;\n        cond = types.null ? notObj : (0, codegen_1._) `!${data} || ${notObj}`;\n        delete types.null;\n        delete types.array;\n        delete types.object;\n    }\n    else {\n        cond = codegen_1.nil;\n    }\n    if (types.number)\n        delete types.integer;\n    for (const t in types)\n        cond = (0, codegen_1.and)(cond, checkDataType(t, data, strictNums, correct));\n    return cond;\n}\nexports.checkDataTypes = checkDataTypes;\nconst typeError = {\n    message: ({ schema }) => `must be ${schema}`,\n    params: ({ schema, schemaValue }) => typeof schema == \"string\" ? (0, codegen_1._) `{type: ${schema}}` : (0, codegen_1._) `{type: ${schemaValue}}`,\n};\nfunction reportTypeError(it) {\n    const cxt = getTypeErrorContext(it);\n    (0, errors_1.reportError)(cxt, typeError);\n}\nexports.reportTypeError = reportTypeError;\nfunction getTypeErrorContext(it) {\n    const { gen, data, schema } = it;\n    const schemaCode = (0, util_1.schemaRefOrVal)(it, schema, \"type\");\n    return {\n        gen,\n        keyword: \"type\",\n        data,\n        schema: schema.type,\n        schemaCode,\n        schemaValue: schemaCode,\n        parentSchema: schema,\n        params: {},\n        it,\n    };\n}\n//# sourceMappingURL=dataType.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.assignDefaults = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nfunction assignDefaults(it, ty) {\n    const { properties, items } = it.schema;\n    if (ty === \"object\" && properties) {\n        for (const key in properties) {\n            assignDefault(it, key, properties[key].default);\n        }\n    }\n    else if (ty === \"array\" && Array.isArray(items)) {\n        items.forEach((sch, i) => assignDefault(it, i, sch.default));\n    }\n}\nexports.assignDefaults = assignDefaults;\nfunction assignDefault(it, prop, defaultValue) {\n    const { gen, compositeRule, data, opts } = it;\n    if (defaultValue === undefined)\n        return;\n    const childData = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(prop)}`;\n    if (compositeRule) {\n        (0, util_1.checkStrictMode)(it, `default is ignored for: ${childData}`);\n        return;\n    }\n    let condition = (0, codegen_1._) `${childData} === undefined`;\n    if (opts.useDefaults === \"empty\") {\n        condition = (0, codegen_1._) `${condition} || ${childData} === null || ${childData} === \"\"`;\n    }\n    // `${childData} === undefined` +\n    // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n    gen.if(condition, (0, codegen_1._) `${childData} = ${(0, codegen_1.stringify)(defaultValue)}`);\n}\n//# sourceMappingURL=defaults.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getData = exports.KeywordCxt = exports.validateFunctionCode = void 0;\nconst boolSchema_1 = require(\"./boolSchema\");\nconst dataType_1 = require(\"./dataType\");\nconst applicability_1 = require(\"./applicability\");\nconst dataType_2 = require(\"./dataType\");\nconst defaults_1 = require(\"./defaults\");\nconst keyword_1 = require(\"./keyword\");\nconst subschema_1 = require(\"./subschema\");\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst resolve_1 = require(\"../resolve\");\nconst util_1 = require(\"../util\");\nconst errors_1 = require(\"../errors\");\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nfunction validateFunctionCode(it) {\n    if (isSchemaObj(it)) {\n        checkKeywords(it);\n        if (schemaCxtHasRules(it)) {\n            topSchemaObjCode(it);\n            return;\n        }\n    }\n    validateFunction(it, () => (0, boolSchema_1.topBoolOrEmptySchema)(it));\n}\nexports.validateFunctionCode = validateFunctionCode;\nfunction validateFunction({ gen, validateName, schema, schemaEnv, opts }, body) {\n    if (opts.code.es5) {\n        gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${names_1.default.valCxt}`, schemaEnv.$async, () => {\n            gen.code((0, codegen_1._) `\"use strict\"; ${funcSourceUrl(schema, opts)}`);\n            destructureValCxtES5(gen, opts);\n            gen.code(body);\n        });\n    }\n    else {\n        gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () => gen.code(funcSourceUrl(schema, opts)).code(body));\n    }\n}\nfunction destructureValCxt(opts) {\n    return (0, codegen_1._) `{${names_1.default.instancePath}=\"\", ${names_1.default.parentData}, ${names_1.default.parentDataProperty}, ${names_1.default.rootData}=${names_1.default.data}${opts.dynamicRef ? (0, codegen_1._) `, ${names_1.default.dynamicAnchors}={}` : codegen_1.nil}}={}`;\n}\nfunction destructureValCxtES5(gen, opts) {\n    gen.if(names_1.default.valCxt, () => {\n        gen.var(names_1.default.instancePath, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.instancePath}`);\n        gen.var(names_1.default.parentData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentData}`);\n        gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentDataProperty}`);\n        gen.var(names_1.default.rootData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.rootData}`);\n        if (opts.dynamicRef)\n            gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.dynamicAnchors}`);\n    }, () => {\n        gen.var(names_1.default.instancePath, (0, codegen_1._) `\"\"`);\n        gen.var(names_1.default.parentData, (0, codegen_1._) `undefined`);\n        gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `undefined`);\n        gen.var(names_1.default.rootData, names_1.default.data);\n        if (opts.dynamicRef)\n            gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `{}`);\n    });\n}\nfunction topSchemaObjCode(it) {\n    const { schema, opts, gen } = it;\n    validateFunction(it, () => {\n        if (opts.$comment && schema.$comment)\n            commentKeyword(it);\n        checkNoDefault(it);\n        gen.let(names_1.default.vErrors, null);\n        gen.let(names_1.default.errors, 0);\n        if (opts.unevaluated)\n            resetEvaluated(it);\n        typeAndKeywords(it);\n        returnResults(it);\n    });\n    return;\n}\nfunction resetEvaluated(it) {\n    // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n    const { gen, validateName } = it;\n    it.evaluated = gen.const(\"evaluated\", (0, codegen_1._) `${validateName}.evaluated`);\n    gen.if((0, codegen_1._) `${it.evaluated}.dynamicProps`, () => gen.assign((0, codegen_1._) `${it.evaluated}.props`, (0, codegen_1._) `undefined`));\n    gen.if((0, codegen_1._) `${it.evaluated}.dynamicItems`, () => gen.assign((0, codegen_1._) `${it.evaluated}.items`, (0, codegen_1._) `undefined`));\n}\nfunction funcSourceUrl(schema, opts) {\n    const schId = typeof schema == \"object\" && schema[opts.schemaId];\n    return schId && (opts.code.source || opts.code.process) ? (0, codegen_1._) `/*# sourceURL=${schId} */` : codegen_1.nil;\n}\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it, valid) {\n    if (isSchemaObj(it)) {\n        checkKeywords(it);\n        if (schemaCxtHasRules(it)) {\n            subSchemaObjCode(it, valid);\n            return;\n        }\n    }\n    (0, boolSchema_1.boolOrEmptySchema)(it, valid);\n}\nfunction schemaCxtHasRules({ schema, self }) {\n    if (typeof schema == \"boolean\")\n        return !schema;\n    for (const key in schema)\n        if (self.RULES.all[key])\n            return true;\n    return false;\n}\nfunction isSchemaObj(it) {\n    return typeof it.schema != \"boolean\";\n}\nfunction subSchemaObjCode(it, valid) {\n    const { schema, gen, opts } = it;\n    if (opts.$comment && schema.$comment)\n        commentKeyword(it);\n    updateContext(it);\n    checkAsyncSchema(it);\n    const errsCount = gen.const(\"_errs\", names_1.default.errors);\n    typeAndKeywords(it, errsCount);\n    // TODO var\n    gen.var(valid, (0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n}\nfunction checkKeywords(it) {\n    (0, util_1.checkUnknownRules)(it);\n    checkRefsAndKeywords(it);\n}\nfunction typeAndKeywords(it, errsCount) {\n    if (it.opts.jtd)\n        return schemaKeywords(it, [], false, errsCount);\n    const types = (0, dataType_1.getSchemaTypes)(it.schema);\n    const checkedTypes = (0, dataType_1.coerceAndCheckDataType)(it, types);\n    schemaKeywords(it, types, !checkedTypes, errsCount);\n}\nfunction checkRefsAndKeywords(it) {\n    const { schema, errSchemaPath, opts, self } = it;\n    if (schema.$ref && opts.ignoreKeywordsWithRef && (0, util_1.schemaHasRulesButRef)(schema, self.RULES)) {\n        self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`);\n    }\n}\nfunction checkNoDefault(it) {\n    const { schema, opts } = it;\n    if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n        (0, util_1.checkStrictMode)(it, \"default is ignored in the schema root\");\n    }\n}\nfunction updateContext(it) {\n    const schId = it.schema[it.opts.schemaId];\n    if (schId)\n        it.baseId = (0, resolve_1.resolveUrl)(it.opts.uriResolver, it.baseId, schId);\n}\nfunction checkAsyncSchema(it) {\n    if (it.schema.$async && !it.schemaEnv.$async)\n        throw new Error(\"async schema in sync schema\");\n}\nfunction commentKeyword({ gen, schemaEnv, schema, errSchemaPath, opts }) {\n    const msg = schema.$comment;\n    if (opts.$comment === true) {\n        gen.code((0, codegen_1._) `${names_1.default.self}.logger.log(${msg})`);\n    }\n    else if (typeof opts.$comment == \"function\") {\n        const schemaPath = (0, codegen_1.str) `${errSchemaPath}/$comment`;\n        const rootName = gen.scopeValue(\"root\", { ref: schemaEnv.root });\n        gen.code((0, codegen_1._) `${names_1.default.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`);\n    }\n}\nfunction returnResults(it) {\n    const { gen, schemaEnv, validateName, ValidationError, opts } = it;\n    if (schemaEnv.$async) {\n        // TODO assign unevaluated\n        gen.if((0, codegen_1._) `${names_1.default.errors} === 0`, () => gen.return(names_1.default.data), () => gen.throw((0, codegen_1._) `new ${ValidationError}(${names_1.default.vErrors})`));\n    }\n    else {\n        gen.assign((0, codegen_1._) `${validateName}.errors`, names_1.default.vErrors);\n        if (opts.unevaluated)\n            assignEvaluated(it);\n        gen.return((0, codegen_1._) `${names_1.default.errors} === 0`);\n    }\n}\nfunction assignEvaluated({ gen, evaluated, props, items }) {\n    if (props instanceof codegen_1.Name)\n        gen.assign((0, codegen_1._) `${evaluated}.props`, props);\n    if (items instanceof codegen_1.Name)\n        gen.assign((0, codegen_1._) `${evaluated}.items`, items);\n}\nfunction schemaKeywords(it, types, typeErrors, errsCount) {\n    const { gen, schema, data, allErrors, opts, self } = it;\n    const { RULES } = self;\n    if (schema.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema, RULES))) {\n        gen.block(() => keywordCode(it, \"$ref\", RULES.all.$ref.definition)); // TODO typecast\n        return;\n    }\n    if (!opts.jtd)\n        checkStrictTypes(it, types);\n    gen.block(() => {\n        for (const group of RULES.rules)\n            groupKeywords(group);\n        groupKeywords(RULES.post);\n    });\n    function groupKeywords(group) {\n        if (!(0, applicability_1.shouldUseGroup)(schema, group))\n            return;\n        if (group.type) {\n            gen.if((0, dataType_2.checkDataType)(group.type, data, opts.strictNumbers));\n            iterateKeywords(it, group);\n            if (types.length === 1 && types[0] === group.type && typeErrors) {\n                gen.else();\n                (0, dataType_2.reportTypeError)(it);\n            }\n            gen.endIf();\n        }\n        else {\n            iterateKeywords(it, group);\n        }\n        // TODO make it \"ok\" call?\n        if (!allErrors)\n            gen.if((0, codegen_1._) `${names_1.default.errors} === ${errsCount || 0}`);\n    }\n}\nfunction iterateKeywords(it, group) {\n    const { gen, schema, opts: { useDefaults }, } = it;\n    if (useDefaults)\n        (0, defaults_1.assignDefaults)(it, group.type);\n    gen.block(() => {\n        for (const rule of group.rules) {\n            if ((0, applicability_1.shouldUseRule)(schema, rule)) {\n                keywordCode(it, rule.keyword, rule.definition, group.type);\n            }\n        }\n    });\n}\nfunction checkStrictTypes(it, types) {\n    if (it.schemaEnv.meta || !it.opts.strictTypes)\n        return;\n    checkContextTypes(it, types);\n    if (!it.opts.allowUnionTypes)\n        checkMultipleTypes(it, types);\n    checkKeywordTypes(it, it.dataTypes);\n}\nfunction checkContextTypes(it, types) {\n    if (!types.length)\n        return;\n    if (!it.dataTypes.length) {\n        it.dataTypes = types;\n        return;\n    }\n    types.forEach((t) => {\n        if (!includesType(it.dataTypes, t)) {\n            strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`);\n        }\n    });\n    narrowSchemaTypes(it, types);\n}\nfunction checkMultipleTypes(it, ts) {\n    if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n        strictTypesError(it, \"use allowUnionTypes to allow union type keyword\");\n    }\n}\nfunction checkKeywordTypes(it, ts) {\n    const rules = it.self.RULES.all;\n    for (const keyword in rules) {\n        const rule = rules[keyword];\n        if (typeof rule == \"object\" && (0, applicability_1.shouldUseRule)(it.schema, rule)) {\n            const { type } = rule.definition;\n            if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n                strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`);\n            }\n        }\n    }\n}\nfunction hasApplicableType(schTs, kwdT) {\n    return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"));\n}\nfunction includesType(ts, t) {\n    return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"));\n}\nfunction narrowSchemaTypes(it, withTypes) {\n    const ts = [];\n    for (const t of it.dataTypes) {\n        if (includesType(withTypes, t))\n            ts.push(t);\n        else if (withTypes.includes(\"integer\") && t === \"number\")\n            ts.push(\"integer\");\n    }\n    it.dataTypes = ts;\n}\nfunction strictTypesError(it, msg) {\n    const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n    msg += ` at \"${schemaPath}\" (strictTypes)`;\n    (0, util_1.checkStrictMode)(it, msg, it.opts.strictTypes);\n}\nclass KeywordCxt {\n    constructor(it, def, keyword) {\n        (0, keyword_1.validateKeywordUsage)(it, def, keyword);\n        this.gen = it.gen;\n        this.allErrors = it.allErrors;\n        this.keyword = keyword;\n        this.data = it.data;\n        this.schema = it.schema[keyword];\n        this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data;\n        this.schemaValue = (0, util_1.schemaRefOrVal)(it, this.schema, keyword, this.$data);\n        this.schemaType = def.schemaType;\n        this.parentSchema = it.schema;\n        this.params = {};\n        this.it = it;\n        this.def = def;\n        if (this.$data) {\n            this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it));\n        }\n        else {\n            this.schemaCode = this.schemaValue;\n            if (!(0, keyword_1.validSchemaType)(this.schema, def.schemaType, def.allowUndefined)) {\n                throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`);\n            }\n        }\n        if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n            this.errsCount = it.gen.const(\"_errs\", names_1.default.errors);\n        }\n    }\n    result(condition, successAction, failAction) {\n        this.failResult((0, codegen_1.not)(condition), successAction, failAction);\n    }\n    failResult(condition, successAction, failAction) {\n        this.gen.if(condition);\n        if (failAction)\n            failAction();\n        else\n            this.error();\n        if (successAction) {\n            this.gen.else();\n            successAction();\n            if (this.allErrors)\n                this.gen.endIf();\n        }\n        else {\n            if (this.allErrors)\n                this.gen.endIf();\n            else\n                this.gen.else();\n        }\n    }\n    pass(condition, failAction) {\n        this.failResult((0, codegen_1.not)(condition), undefined, failAction);\n    }\n    fail(condition) {\n        if (condition === undefined) {\n            this.error();\n            if (!this.allErrors)\n                this.gen.if(false); // this branch will be removed by gen.optimize\n            return;\n        }\n        this.gen.if(condition);\n        this.error();\n        if (this.allErrors)\n            this.gen.endIf();\n        else\n            this.gen.else();\n    }\n    fail$data(condition) {\n        if (!this.$data)\n            return this.fail(condition);\n        const { schemaCode } = this;\n        this.fail((0, codegen_1._) `${schemaCode} !== undefined && (${(0, codegen_1.or)(this.invalid$data(), condition)})`);\n    }\n    error(append, errorParams, errorPaths) {\n        if (errorParams) {\n            this.setParams(errorParams);\n            this._error(append, errorPaths);\n            this.setParams({});\n            return;\n        }\n        this._error(append, errorPaths);\n    }\n    _error(append, errorPaths) {\n        ;\n        (append ? errors_1.reportExtraError : errors_1.reportError)(this, this.def.error, errorPaths);\n    }\n    $dataError() {\n        (0, errors_1.reportError)(this, this.def.$dataError || errors_1.keyword$DataError);\n    }\n    reset() {\n        if (this.errsCount === undefined)\n            throw new Error('add \"trackErrors\" to keyword definition');\n        (0, errors_1.resetErrorsCount)(this.gen, this.errsCount);\n    }\n    ok(cond) {\n        if (!this.allErrors)\n            this.gen.if(cond);\n    }\n    setParams(obj, assign) {\n        if (assign)\n            Object.assign(this.params, obj);\n        else\n            this.params = obj;\n    }\n    block$data(valid, codeBlock, $dataValid = codegen_1.nil) {\n        this.gen.block(() => {\n            this.check$data(valid, $dataValid);\n            codeBlock();\n        });\n    }\n    check$data(valid = codegen_1.nil, $dataValid = codegen_1.nil) {\n        if (!this.$data)\n            return;\n        const { gen, schemaCode, schemaType, def } = this;\n        gen.if((0, codegen_1.or)((0, codegen_1._) `${schemaCode} === undefined`, $dataValid));\n        if (valid !== codegen_1.nil)\n            gen.assign(valid, true);\n        if (schemaType.length || def.validateSchema) {\n            gen.elseIf(this.invalid$data());\n            this.$dataError();\n            if (valid !== codegen_1.nil)\n                gen.assign(valid, false);\n        }\n        gen.else();\n    }\n    invalid$data() {\n        const { gen, schemaCode, schemaType, def, it } = this;\n        return (0, codegen_1.or)(wrong$DataType(), invalid$DataSchema());\n        function wrong$DataType() {\n            if (schemaType.length) {\n                /* istanbul ignore if */\n                if (!(schemaCode instanceof codegen_1.Name))\n                    throw new Error(\"ajv implementation error\");\n                const st = Array.isArray(schemaType) ? schemaType : [schemaType];\n                return (0, codegen_1._) `${(0, dataType_2.checkDataTypes)(st, schemaCode, it.opts.strictNumbers, dataType_2.DataType.Wrong)}`;\n            }\n            return codegen_1.nil;\n        }\n        function invalid$DataSchema() {\n            if (def.validateSchema) {\n                const validateSchemaRef = gen.scopeValue(\"validate$data\", { ref: def.validateSchema }); // TODO value.code for standalone\n                return (0, codegen_1._) `!${validateSchemaRef}(${schemaCode})`;\n            }\n            return codegen_1.nil;\n        }\n    }\n    subschema(appl, valid) {\n        const subschema = (0, subschema_1.getSubschema)(this.it, appl);\n        (0, subschema_1.extendSubschemaData)(subschema, this.it, appl);\n        (0, subschema_1.extendSubschemaMode)(subschema, appl);\n        const nextContext = { ...this.it, ...subschema, items: undefined, props: undefined };\n        subschemaCode(nextContext, valid);\n        return nextContext;\n    }\n    mergeEvaluated(schemaCxt, toName) {\n        const { it, gen } = this;\n        if (!it.opts.unevaluated)\n            return;\n        if (it.props !== true && schemaCxt.props !== undefined) {\n            it.props = util_1.mergeEvaluated.props(gen, schemaCxt.props, it.props, toName);\n        }\n        if (it.items !== true && schemaCxt.items !== undefined) {\n            it.items = util_1.mergeEvaluated.items(gen, schemaCxt.items, it.items, toName);\n        }\n    }\n    mergeValidEvaluated(schemaCxt, valid) {\n        const { it, gen } = this;\n        if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n            gen.if(valid, () => this.mergeEvaluated(schemaCxt, codegen_1.Name));\n            return true;\n        }\n    }\n}\nexports.KeywordCxt = KeywordCxt;\nfunction keywordCode(it, keyword, def, ruleType) {\n    const cxt = new KeywordCxt(it, def, keyword);\n    if (\"code\" in def) {\n        def.code(cxt, ruleType);\n    }\n    else if (cxt.$data && def.validate) {\n        (0, keyword_1.funcKeywordCode)(cxt, def);\n    }\n    else if (\"macro\" in def) {\n        (0, keyword_1.macroKeywordCode)(cxt, def);\n    }\n    else if (def.compile || def.validate) {\n        (0, keyword_1.funcKeywordCode)(cxt, def);\n    }\n}\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/;\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\nfunction getData($data, { dataLevel, dataNames, dataPathArr }) {\n    let jsonPointer;\n    let data;\n    if ($data === \"\")\n        return names_1.default.rootData;\n    if ($data[0] === \"/\") {\n        if (!JSON_POINTER.test($data))\n            throw new Error(`Invalid JSON-pointer: ${$data}`);\n        jsonPointer = $data;\n        data = names_1.default.rootData;\n    }\n    else {\n        const matches = RELATIVE_JSON_POINTER.exec($data);\n        if (!matches)\n            throw new Error(`Invalid JSON-pointer: ${$data}`);\n        const up = +matches[1];\n        jsonPointer = matches[2];\n        if (jsonPointer === \"#\") {\n            if (up >= dataLevel)\n                throw new Error(errorMsg(\"property/index\", up));\n            return dataPathArr[dataLevel - up];\n        }\n        if (up > dataLevel)\n            throw new Error(errorMsg(\"data\", up));\n        data = dataNames[dataLevel - up];\n        if (!jsonPointer)\n            return data;\n    }\n    let expr = data;\n    const segments = jsonPointer.split(\"/\");\n    for (const segment of segments) {\n        if (segment) {\n            data = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)((0, util_1.unescapeJsonPointer)(segment))}`;\n            expr = (0, codegen_1._) `${expr} && ${data}`;\n        }\n    }\n    return expr;\n    function errorMsg(pointerType, up) {\n        return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`;\n    }\n}\nexports.getData = getData;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst code_1 = require(\"../../vocabularies/code\");\nconst errors_1 = require(\"../errors\");\nfunction macroKeywordCode(cxt, def) {\n    const { gen, keyword, schema, parentSchema, it } = cxt;\n    const macroSchema = def.macro.call(it.self, schema, parentSchema, it);\n    const schemaRef = useKeyword(gen, keyword, macroSchema);\n    if (it.opts.validateSchema !== false)\n        it.self.validateSchema(macroSchema, true);\n    const valid = gen.name(\"valid\");\n    cxt.subschema({\n        schema: macroSchema,\n        schemaPath: codegen_1.nil,\n        errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n        topSchemaRef: schemaRef,\n        compositeRule: true,\n    }, valid);\n    cxt.pass(valid, () => cxt.error(true));\n}\nexports.macroKeywordCode = macroKeywordCode;\nfunction funcKeywordCode(cxt, def) {\n    var _a;\n    const { gen, keyword, schema, parentSchema, $data, it } = cxt;\n    checkAsyncKeyword(it, def);\n    const validate = !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate;\n    const validateRef = useKeyword(gen, keyword, validate);\n    const valid = gen.let(\"valid\");\n    cxt.block$data(valid, validateKeyword);\n    cxt.ok((_a = def.valid) !== null && _a !== void 0 ? _a : valid);\n    function validateKeyword() {\n        if (def.errors === false) {\n            assignValid();\n            if (def.modifying)\n                modifyData(cxt);\n            reportErrs(() => cxt.error());\n        }\n        else {\n            const ruleErrs = def.async ? validateAsync() : validateSync();\n            if (def.modifying)\n                modifyData(cxt);\n            reportErrs(() => addErrs(cxt, ruleErrs));\n        }\n    }\n    function validateAsync() {\n        const ruleErrs = gen.let(\"ruleErrs\", null);\n        gen.try(() => assignValid((0, codegen_1._) `await `), (e) => gen.assign(valid, false).if((0, codegen_1._) `${e} instanceof ${it.ValidationError}`, () => gen.assign(ruleErrs, (0, codegen_1._) `${e}.errors`), () => gen.throw(e)));\n        return ruleErrs;\n    }\n    function validateSync() {\n        const validateErrs = (0, codegen_1._) `${validateRef}.errors`;\n        gen.assign(validateErrs, null);\n        assignValid(codegen_1.nil);\n        return validateErrs;\n    }\n    function assignValid(_await = def.async ? (0, codegen_1._) `await ` : codegen_1.nil) {\n        const passCxt = it.opts.passContext ? names_1.default.this : names_1.default.self;\n        const passSchema = !((\"compile\" in def && !$data) || def.schema === false);\n        gen.assign(valid, (0, codegen_1._) `${_await}${(0, code_1.callValidateCode)(cxt, validateRef, passCxt, passSchema)}`, def.modifying);\n    }\n    function reportErrs(errors) {\n        var _a;\n        gen.if((0, codegen_1.not)((_a = def.valid) !== null && _a !== void 0 ? _a : valid), errors);\n    }\n}\nexports.funcKeywordCode = funcKeywordCode;\nfunction modifyData(cxt) {\n    const { gen, data, it } = cxt;\n    gen.if(it.parentData, () => gen.assign(data, (0, codegen_1._) `${it.parentData}[${it.parentDataProperty}]`));\n}\nfunction addErrs(cxt, errs) {\n    const { gen } = cxt;\n    gen.if((0, codegen_1._) `Array.isArray(${errs})`, () => {\n        gen\n            .assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`)\n            .assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n        (0, errors_1.extendErrors)(cxt);\n    }, () => cxt.error());\n}\nfunction checkAsyncKeyword({ schemaEnv }, def) {\n    if (def.async && !schemaEnv.$async)\n        throw new Error(\"async keyword in sync schema\");\n}\nfunction useKeyword(gen, keyword, result) {\n    if (result === undefined)\n        throw new Error(`keyword \"${keyword}\" failed to compile`);\n    return gen.scopeValue(\"keyword\", typeof result == \"function\" ? { ref: result } : { ref: result, code: (0, codegen_1.stringify)(result) });\n}\nfunction validSchemaType(schema, schemaType, allowUndefined = false) {\n    // TODO add tests\n    return (!schemaType.length ||\n        schemaType.some((st) => st === \"array\"\n            ? Array.isArray(schema)\n            : st === \"object\"\n                ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n                : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")));\n}\nexports.validSchemaType = validSchemaType;\nfunction validateKeywordUsage({ schema, opts, self, errSchemaPath }, def, keyword) {\n    /* istanbul ignore if */\n    if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n        throw new Error(\"ajv implementation error\");\n    }\n    const deps = def.dependencies;\n    if (deps === null || deps === void 0 ? void 0 : deps.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n        throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`);\n    }\n    if (def.validateSchema) {\n        const valid = def.validateSchema(schema[keyword]);\n        if (!valid) {\n            const msg = `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n                self.errorsText(def.validateSchema.errors);\n            if (opts.validateSchema === \"log\")\n                self.logger.error(msg);\n            else\n                throw new Error(msg);\n        }\n    }\n}\nexports.validateKeywordUsage = validateKeywordUsage;\n//# sourceMappingURL=keyword.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nfunction getSubschema(it, { keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef }) {\n    if (keyword !== undefined && schema !== undefined) {\n        throw new Error('both \"keyword\" and \"schema\" passed, only one allowed');\n    }\n    if (keyword !== undefined) {\n        const sch = it.schema[keyword];\n        return schemaProp === undefined\n            ? {\n                schema: sch,\n                schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}`,\n                errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n            }\n            : {\n                schema: sch[schemaProp],\n                schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}${(0, codegen_1.getProperty)(schemaProp)}`,\n                errSchemaPath: `${it.errSchemaPath}/${keyword}/${(0, util_1.escapeFragment)(schemaProp)}`,\n            };\n    }\n    if (schema !== undefined) {\n        if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n            throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"');\n        }\n        return {\n            schema,\n            schemaPath,\n            topSchemaRef,\n            errSchemaPath,\n        };\n    }\n    throw new Error('either \"keyword\" or \"schema\" must be passed');\n}\nexports.getSubschema = getSubschema;\nfunction extendSubschemaData(subschema, it, { dataProp, dataPropType: dpType, data, dataTypes, propertyName }) {\n    if (data !== undefined && dataProp !== undefined) {\n        throw new Error('both \"data\" and \"dataProp\" passed, only one allowed');\n    }\n    const { gen } = it;\n    if (dataProp !== undefined) {\n        const { errorPath, dataPathArr, opts } = it;\n        const nextData = gen.let(\"data\", (0, codegen_1._) `${it.data}${(0, codegen_1.getProperty)(dataProp)}`, true);\n        dataContextProps(nextData);\n        subschema.errorPath = (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(dataProp, dpType, opts.jsPropertySyntax)}`;\n        subschema.parentDataProperty = (0, codegen_1._) `${dataProp}`;\n        subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty];\n    }\n    if (data !== undefined) {\n        const nextData = data instanceof codegen_1.Name ? data : gen.let(\"data\", data, true); // replaceable if used once?\n        dataContextProps(nextData);\n        if (propertyName !== undefined)\n            subschema.propertyName = propertyName;\n        // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n    }\n    if (dataTypes)\n        subschema.dataTypes = dataTypes;\n    function dataContextProps(_nextData) {\n        subschema.data = _nextData;\n        subschema.dataLevel = it.dataLevel + 1;\n        subschema.dataTypes = [];\n        it.definedProperties = new Set();\n        subschema.parentData = it.data;\n        subschema.dataNames = [...it.dataNames, _nextData];\n    }\n}\nexports.extendSubschemaData = extendSubschemaData;\nfunction extendSubschemaMode(subschema, { jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors }) {\n    if (compositeRule !== undefined)\n        subschema.compositeRule = compositeRule;\n    if (createErrors !== undefined)\n        subschema.createErrors = createErrors;\n    if (allErrors !== undefined)\n        subschema.allErrors = allErrors;\n    subschema.jtdDiscriminator = jtdDiscriminator; // not inherited\n    subschema.jtdMetadata = jtdMetadata; // not inherited\n}\nexports.extendSubschemaMode = extendSubschemaMode;\n//# sourceMappingURL=subschema.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nconst validation_error_1 = require(\"./runtime/validation_error\");\nconst ref_error_1 = require(\"./compile/ref_error\");\nconst rules_1 = require(\"./compile/rules\");\nconst compile_1 = require(\"./compile\");\nconst codegen_2 = require(\"./compile/codegen\");\nconst resolve_1 = require(\"./compile/resolve\");\nconst dataType_1 = require(\"./compile/validate/dataType\");\nconst util_1 = require(\"./compile/util\");\nconst $dataRefSchema = require(\"./refs/data.json\");\nconst uri_1 = require(\"./runtime/uri\");\nconst defaultRegExp = (str, flags) => new RegExp(str, flags);\ndefaultRegExp.code = \"new RegExp\";\nconst META_IGNORE_OPTIONS = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"];\nconst EXT_SCOPE_NAMES = new Set([\n    \"validate\",\n    \"serialize\",\n    \"parse\",\n    \"wrapper\",\n    \"root\",\n    \"schema\",\n    \"keyword\",\n    \"pattern\",\n    \"formats\",\n    \"validate$data\",\n    \"func\",\n    \"obj\",\n    \"Error\",\n]);\nconst removedOptions = {\n    errorDataPath: \"\",\n    format: \"`validateFormats: false` can be used instead.\",\n    nullable: '\"nullable\" keyword is supported by default.',\n    jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n    extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n    missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n    processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n    sourceCode: \"Use option `code: {source: true}`\",\n    strictDefaults: \"It is default now, see option `strict`.\",\n    strictKeywords: \"It is default now, see option `strict`.\",\n    uniqueItems: '\"uniqueItems\" keyword is always validated.',\n    unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n    cache: \"Map is used as cache, schema object as key.\",\n    serialize: \"Map is used as cache, schema object as key.\",\n    ajvErrors: \"It is default now.\",\n};\nconst deprecatedOptions = {\n    ignoreKeywordsWithRef: \"\",\n    jsPropertySyntax: \"\",\n    unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n};\nconst MAX_EXPRESSION = 200;\n// eslint-disable-next-line complexity\nfunction requiredOptions(o) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;\n    const s = o.strict;\n    const _optz = (_a = o.code) === null || _a === void 0 ? void 0 : _a.optimize;\n    const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0;\n    const regExp = (_c = (_b = o.code) === null || _b === void 0 ? void 0 : _b.regExp) !== null && _c !== void 0 ? _c : defaultRegExp;\n    const uriResolver = (_d = o.uriResolver) !== null && _d !== void 0 ? _d : uri_1.default;\n    return {\n        strictSchema: (_f = (_e = o.strictSchema) !== null && _e !== void 0 ? _e : s) !== null && _f !== void 0 ? _f : true,\n        strictNumbers: (_h = (_g = o.strictNumbers) !== null && _g !== void 0 ? _g : s) !== null && _h !== void 0 ? _h : true,\n        strictTypes: (_k = (_j = o.strictTypes) !== null && _j !== void 0 ? _j : s) !== null && _k !== void 0 ? _k : \"log\",\n        strictTuples: (_m = (_l = o.strictTuples) !== null && _l !== void 0 ? _l : s) !== null && _m !== void 0 ? _m : \"log\",\n        strictRequired: (_p = (_o = o.strictRequired) !== null && _o !== void 0 ? _o : s) !== null && _p !== void 0 ? _p : false,\n        code: o.code ? { ...o.code, optimize, regExp } : { optimize, regExp },\n        loopRequired: (_q = o.loopRequired) !== null && _q !== void 0 ? _q : MAX_EXPRESSION,\n        loopEnum: (_r = o.loopEnum) !== null && _r !== void 0 ? _r : MAX_EXPRESSION,\n        meta: (_s = o.meta) !== null && _s !== void 0 ? _s : true,\n        messages: (_t = o.messages) !== null && _t !== void 0 ? _t : true,\n        inlineRefs: (_u = o.inlineRefs) !== null && _u !== void 0 ? _u : true,\n        schemaId: (_v = o.schemaId) !== null && _v !== void 0 ? _v : \"$id\",\n        addUsedSchema: (_w = o.addUsedSchema) !== null && _w !== void 0 ? _w : true,\n        validateSchema: (_x = o.validateSchema) !== null && _x !== void 0 ? _x : true,\n        validateFormats: (_y = o.validateFormats) !== null && _y !== void 0 ? _y : true,\n        unicodeRegExp: (_z = o.unicodeRegExp) !== null && _z !== void 0 ? _z : true,\n        int32range: (_0 = o.int32range) !== null && _0 !== void 0 ? _0 : true,\n        uriResolver: uriResolver,\n    };\n}\nclass Ajv {\n    constructor(opts = {}) {\n        this.schemas = {};\n        this.refs = {};\n        this.formats = {};\n        this._compilations = new Set();\n        this._loading = {};\n        this._cache = new Map();\n        opts = this.opts = { ...opts, ...requiredOptions(opts) };\n        const { es5, lines } = this.opts.code;\n        this.scope = new codegen_2.ValueScope({ scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines });\n        this.logger = getLogger(opts.logger);\n        const formatOpt = opts.validateFormats;\n        opts.validateFormats = false;\n        this.RULES = (0, rules_1.getRules)();\n        checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\");\n        checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\");\n        this._metaOpts = getMetaSchemaOptions.call(this);\n        if (opts.formats)\n            addInitialFormats.call(this);\n        this._addVocabularies();\n        this._addDefaultMetaSchema();\n        if (opts.keywords)\n            addInitialKeywords.call(this, opts.keywords);\n        if (typeof opts.meta == \"object\")\n            this.addMetaSchema(opts.meta);\n        addInitialSchemas.call(this);\n        opts.validateFormats = formatOpt;\n    }\n    _addVocabularies() {\n        this.addKeyword(\"$async\");\n    }\n    _addDefaultMetaSchema() {\n        const { $data, meta, schemaId } = this.opts;\n        let _dataRefSchema = $dataRefSchema;\n        if (schemaId === \"id\") {\n            _dataRefSchema = { ...$dataRefSchema };\n            _dataRefSchema.id = _dataRefSchema.$id;\n            delete _dataRefSchema.$id;\n        }\n        if (meta && $data)\n            this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false);\n    }\n    defaultMeta() {\n        const { meta, schemaId } = this.opts;\n        return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined);\n    }\n    validate(schemaKeyRef, // key, ref or schema object\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    data // to be validated\n    ) {\n        let v;\n        if (typeof schemaKeyRef == \"string\") {\n            v = this.getSchema(schemaKeyRef);\n            if (!v)\n                throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`);\n        }\n        else {\n            v = this.compile(schemaKeyRef);\n        }\n        const valid = v(data);\n        if (!(\"$async\" in v))\n            this.errors = v.errors;\n        return valid;\n    }\n    compile(schema, _meta) {\n        const sch = this._addSchema(schema, _meta);\n        return (sch.validate || this._compileSchemaEnv(sch));\n    }\n    compileAsync(schema, meta) {\n        if (typeof this.opts.loadSchema != \"function\") {\n            throw new Error(\"options.loadSchema should be a function\");\n        }\n        const { loadSchema } = this.opts;\n        return runCompileAsync.call(this, schema, meta);\n        async function runCompileAsync(_schema, _meta) {\n            await loadMetaSchema.call(this, _schema.$schema);\n            const sch = this._addSchema(_schema, _meta);\n            return sch.validate || _compileAsync.call(this, sch);\n        }\n        async function loadMetaSchema($ref) {\n            if ($ref && !this.getSchema($ref)) {\n                await runCompileAsync.call(this, { $ref }, true);\n            }\n        }\n        async function _compileAsync(sch) {\n            try {\n                return this._compileSchemaEnv(sch);\n            }\n            catch (e) {\n                if (!(e instanceof ref_error_1.default))\n                    throw e;\n                checkLoaded.call(this, e);\n                await loadMissingSchema.call(this, e.missingSchema);\n                return _compileAsync.call(this, sch);\n            }\n        }\n        function checkLoaded({ missingSchema: ref, missingRef }) {\n            if (this.refs[ref]) {\n                throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`);\n            }\n        }\n        async function loadMissingSchema(ref) {\n            const _schema = await _loadSchema.call(this, ref);\n            if (!this.refs[ref])\n                await loadMetaSchema.call(this, _schema.$schema);\n            if (!this.refs[ref])\n                this.addSchema(_schema, ref, meta);\n        }\n        async function _loadSchema(ref) {\n            const p = this._loading[ref];\n            if (p)\n                return p;\n            try {\n                return await (this._loading[ref] = loadSchema(ref));\n            }\n            finally {\n                delete this._loading[ref];\n            }\n        }\n    }\n    // Adds schema to the instance\n    addSchema(schema, // If array is passed, `key` will be ignored\n    key, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n    _meta, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n    _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n    ) {\n        if (Array.isArray(schema)) {\n            for (const sch of schema)\n                this.addSchema(sch, undefined, _meta, _validateSchema);\n            return this;\n        }\n        let id;\n        if (typeof schema === \"object\") {\n            const { schemaId } = this.opts;\n            id = schema[schemaId];\n            if (id !== undefined && typeof id != \"string\") {\n                throw new Error(`schema ${schemaId} must be string`);\n            }\n        }\n        key = (0, resolve_1.normalizeId)(key || id);\n        this._checkUnique(key);\n        this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true);\n        return this;\n    }\n    // Add schema that will be used to validate other schemas\n    // options in META_IGNORE_OPTIONS are alway set to false\n    addMetaSchema(schema, key, // schema key\n    _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n    ) {\n        this.addSchema(schema, key, true, _validateSchema);\n        return this;\n    }\n    //  Validate schema against its meta-schema\n    validateSchema(schema, throwOrLogError) {\n        if (typeof schema == \"boolean\")\n            return true;\n        let $schema;\n        $schema = schema.$schema;\n        if ($schema !== undefined && typeof $schema != \"string\") {\n            throw new Error(\"$schema must be a string\");\n        }\n        $schema = $schema || this.opts.defaultMeta || this.defaultMeta();\n        if (!$schema) {\n            this.logger.warn(\"meta-schema not available\");\n            this.errors = null;\n            return true;\n        }\n        const valid = this.validate($schema, schema);\n        if (!valid && throwOrLogError) {\n            const message = \"schema is invalid: \" + this.errorsText();\n            if (this.opts.validateSchema === \"log\")\n                this.logger.error(message);\n            else\n                throw new Error(message);\n        }\n        return valid;\n    }\n    // Get compiled schema by `key` or `ref`.\n    // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n    getSchema(keyRef) {\n        let sch;\n        while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\")\n            keyRef = sch;\n        if (sch === undefined) {\n            const { schemaId } = this.opts;\n            const root = new compile_1.SchemaEnv({ schema: {}, schemaId });\n            sch = compile_1.resolveSchema.call(this, root, keyRef);\n            if (!sch)\n                return;\n            this.refs[keyRef] = sch;\n        }\n        return (sch.validate || this._compileSchemaEnv(sch));\n    }\n    // Remove cached schema(s).\n    // If no parameter is passed all schemas but meta-schemas are removed.\n    // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n    // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n    removeSchema(schemaKeyRef) {\n        if (schemaKeyRef instanceof RegExp) {\n            this._removeAllSchemas(this.schemas, schemaKeyRef);\n            this._removeAllSchemas(this.refs, schemaKeyRef);\n            return this;\n        }\n        switch (typeof schemaKeyRef) {\n            case \"undefined\":\n                this._removeAllSchemas(this.schemas);\n                this._removeAllSchemas(this.refs);\n                this._cache.clear();\n                return this;\n            case \"string\": {\n                const sch = getSchEnv.call(this, schemaKeyRef);\n                if (typeof sch == \"object\")\n                    this._cache.delete(sch.schema);\n                delete this.schemas[schemaKeyRef];\n                delete this.refs[schemaKeyRef];\n                return this;\n            }\n            case \"object\": {\n                const cacheKey = schemaKeyRef;\n                this._cache.delete(cacheKey);\n                let id = schemaKeyRef[this.opts.schemaId];\n                if (id) {\n                    id = (0, resolve_1.normalizeId)(id);\n                    delete this.schemas[id];\n                    delete this.refs[id];\n                }\n                return this;\n            }\n            default:\n                throw new Error(\"ajv.removeSchema: invalid parameter\");\n        }\n    }\n    // add \"vocabulary\" - a collection of keywords\n    addVocabulary(definitions) {\n        for (const def of definitions)\n            this.addKeyword(def);\n        return this;\n    }\n    addKeyword(kwdOrDef, def // deprecated\n    ) {\n        let keyword;\n        if (typeof kwdOrDef == \"string\") {\n            keyword = kwdOrDef;\n            if (typeof def == \"object\") {\n                this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\");\n                def.keyword = keyword;\n            }\n        }\n        else if (typeof kwdOrDef == \"object\" && def === undefined) {\n            def = kwdOrDef;\n            keyword = def.keyword;\n            if (Array.isArray(keyword) && !keyword.length) {\n                throw new Error(\"addKeywords: keyword must be string or non-empty array\");\n            }\n        }\n        else {\n            throw new Error(\"invalid addKeywords parameters\");\n        }\n        checkKeyword.call(this, keyword, def);\n        if (!def) {\n            (0, util_1.eachItem)(keyword, (kwd) => addRule.call(this, kwd));\n            return this;\n        }\n        keywordMetaschema.call(this, def);\n        const definition = {\n            ...def,\n            type: (0, dataType_1.getJSONTypes)(def.type),\n            schemaType: (0, dataType_1.getJSONTypes)(def.schemaType),\n        };\n        (0, util_1.eachItem)(keyword, definition.type.length === 0\n            ? (k) => addRule.call(this, k, definition)\n            : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t)));\n        return this;\n    }\n    getKeyword(keyword) {\n        const rule = this.RULES.all[keyword];\n        return typeof rule == \"object\" ? rule.definition : !!rule;\n    }\n    // Remove keyword\n    removeKeyword(keyword) {\n        // TODO return type should be Ajv\n        const { RULES } = this;\n        delete RULES.keywords[keyword];\n        delete RULES.all[keyword];\n        for (const group of RULES.rules) {\n            const i = group.rules.findIndex((rule) => rule.keyword === keyword);\n            if (i >= 0)\n                group.rules.splice(i, 1);\n        }\n        return this;\n    }\n    // Add format\n    addFormat(name, format) {\n        if (typeof format == \"string\")\n            format = new RegExp(format);\n        this.formats[name] = format;\n        return this;\n    }\n    errorsText(errors = this.errors, // optional array of validation errors\n    { separator = \", \", dataVar = \"data\" } = {} // optional options with properties `separator` and `dataVar`\n    ) {\n        if (!errors || errors.length === 0)\n            return \"No errors\";\n        return errors\n            .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n            .reduce((text, msg) => text + separator + msg);\n    }\n    $dataMetaSchema(metaSchema, keywordsJsonPointers) {\n        const rules = this.RULES.all;\n        metaSchema = JSON.parse(JSON.stringify(metaSchema));\n        for (const jsonPointer of keywordsJsonPointers) {\n            const segments = jsonPointer.split(\"/\").slice(1); // first segment is an empty string\n            let keywords = metaSchema;\n            for (const seg of segments)\n                keywords = keywords[seg];\n            for (const key in rules) {\n                const rule = rules[key];\n                if (typeof rule != \"object\")\n                    continue;\n                const { $data } = rule.definition;\n                const schema = keywords[key];\n                if ($data && schema)\n                    keywords[key] = schemaOrData(schema);\n            }\n        }\n        return metaSchema;\n    }\n    _removeAllSchemas(schemas, regex) {\n        for (const keyRef in schemas) {\n            const sch = schemas[keyRef];\n            if (!regex || regex.test(keyRef)) {\n                if (typeof sch == \"string\") {\n                    delete schemas[keyRef];\n                }\n                else if (sch && !sch.meta) {\n                    this._cache.delete(sch.schema);\n                    delete schemas[keyRef];\n                }\n            }\n        }\n    }\n    _addSchema(schema, meta, baseId, validateSchema = this.opts.validateSchema, addSchema = this.opts.addUsedSchema) {\n        let id;\n        const { schemaId } = this.opts;\n        if (typeof schema == \"object\") {\n            id = schema[schemaId];\n        }\n        else {\n            if (this.opts.jtd)\n                throw new Error(\"schema must be object\");\n            else if (typeof schema != \"boolean\")\n                throw new Error(\"schema must be object or boolean\");\n        }\n        let sch = this._cache.get(schema);\n        if (sch !== undefined)\n            return sch;\n        baseId = (0, resolve_1.normalizeId)(id || baseId);\n        const localRefs = resolve_1.getSchemaRefs.call(this, schema, baseId);\n        sch = new compile_1.SchemaEnv({ schema, schemaId, meta, baseId, localRefs });\n        this._cache.set(sch.schema, sch);\n        if (addSchema && !baseId.startsWith(\"#\")) {\n            // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n            if (baseId)\n                this._checkUnique(baseId);\n            this.refs[baseId] = sch;\n        }\n        if (validateSchema)\n            this.validateSchema(schema, true);\n        return sch;\n    }\n    _checkUnique(id) {\n        if (this.schemas[id] || this.refs[id]) {\n            throw new Error(`schema with key or id \"${id}\" already exists`);\n        }\n    }\n    _compileSchemaEnv(sch) {\n        if (sch.meta)\n            this._compileMetaSchema(sch);\n        else\n            compile_1.compileSchema.call(this, sch);\n        /* istanbul ignore if */\n        if (!sch.validate)\n            throw new Error(\"ajv implementation error\");\n        return sch.validate;\n    }\n    _compileMetaSchema(sch) {\n        const currentOpts = this.opts;\n        this.opts = this._metaOpts;\n        try {\n            compile_1.compileSchema.call(this, sch);\n        }\n        finally {\n            this.opts = currentOpts;\n        }\n    }\n}\nAjv.ValidationError = validation_error_1.default;\nAjv.MissingRefError = ref_error_1.default;\nexports.default = Ajv;\nfunction checkOptions(checkOpts, options, msg, log = \"error\") {\n    for (const key in checkOpts) {\n        const opt = key;\n        if (opt in options)\n            this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`);\n    }\n}\nfunction getSchEnv(keyRef) {\n    keyRef = (0, resolve_1.normalizeId)(keyRef); // TODO tests fail without this line\n    return this.schemas[keyRef] || this.refs[keyRef];\n}\nfunction addInitialSchemas() {\n    const optsSchemas = this.opts.schemas;\n    if (!optsSchemas)\n        return;\n    if (Array.isArray(optsSchemas))\n        this.addSchema(optsSchemas);\n    else\n        for (const key in optsSchemas)\n            this.addSchema(optsSchemas[key], key);\n}\nfunction addInitialFormats() {\n    for (const name in this.opts.formats) {\n        const format = this.opts.formats[name];\n        if (format)\n            this.addFormat(name, format);\n    }\n}\nfunction addInitialKeywords(defs) {\n    if (Array.isArray(defs)) {\n        this.addVocabulary(defs);\n        return;\n    }\n    this.logger.warn(\"keywords option as map is deprecated, pass array\");\n    for (const keyword in defs) {\n        const def = defs[keyword];\n        if (!def.keyword)\n            def.keyword = keyword;\n        this.addKeyword(def);\n    }\n}\nfunction getMetaSchemaOptions() {\n    const metaOpts = { ...this.opts };\n    for (const opt of META_IGNORE_OPTIONS)\n        delete metaOpts[opt];\n    return metaOpts;\n}\nconst noLogs = { log() { }, warn() { }, error() { } };\nfunction getLogger(logger) {\n    if (logger === false)\n        return noLogs;\n    if (logger === undefined)\n        return console;\n    if (logger.log && logger.warn && logger.error)\n        return logger;\n    throw new Error(\"logger must implement log, warn and error methods\");\n}\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i;\nfunction checkKeyword(keyword, def) {\n    const { RULES } = this;\n    (0, util_1.eachItem)(keyword, (kwd) => {\n        if (RULES.keywords[kwd])\n            throw new Error(`Keyword ${kwd} is already defined`);\n        if (!KEYWORD_NAME.test(kwd))\n            throw new Error(`Keyword ${kwd} has invalid name`);\n    });\n    if (!def)\n        return;\n    if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n        throw new Error('$data keyword must have \"code\" or \"validate\" function');\n    }\n}\nfunction addRule(keyword, definition, dataType) {\n    var _a;\n    const post = definition === null || definition === void 0 ? void 0 : definition.post;\n    if (dataType && post)\n        throw new Error('keyword with \"post\" flag cannot have \"type\"');\n    const { RULES } = this;\n    let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t }) => t === dataType);\n    if (!ruleGroup) {\n        ruleGroup = { type: dataType, rules: [] };\n        RULES.rules.push(ruleGroup);\n    }\n    RULES.keywords[keyword] = true;\n    if (!definition)\n        return;\n    const rule = {\n        keyword,\n        definition: {\n            ...definition,\n            type: (0, dataType_1.getJSONTypes)(definition.type),\n            schemaType: (0, dataType_1.getJSONTypes)(definition.schemaType),\n        },\n    };\n    if (definition.before)\n        addBeforeRule.call(this, ruleGroup, rule, definition.before);\n    else\n        ruleGroup.rules.push(rule);\n    RULES.all[keyword] = rule;\n    (_a = definition.implements) === null || _a === void 0 ? void 0 : _a.forEach((kwd) => this.addKeyword(kwd));\n}\nfunction addBeforeRule(ruleGroup, rule, before) {\n    const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before);\n    if (i >= 0) {\n        ruleGroup.rules.splice(i, 0, rule);\n    }\n    else {\n        ruleGroup.rules.push(rule);\n        this.logger.warn(`rule ${before} is not defined`);\n    }\n}\nfunction keywordMetaschema(def) {\n    let { metaSchema } = def;\n    if (metaSchema === undefined)\n        return;\n    if (def.$data && this.opts.$data)\n        metaSchema = schemaOrData(metaSchema);\n    def.validateSchema = this.compile(metaSchema, true);\n}\nconst $dataRef = {\n    $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n};\nfunction schemaOrData(schema) {\n    return { anyOf: [schema, $dataRef] };\n}\n//# sourceMappingURL=core.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://github.com/ajv-validator/ajv/issues/889\nconst equal = require(\"fast-deep-equal\");\nequal.code = 'require(\"ajv/dist/runtime/equal\").default';\nexports.default = equal;\n//# sourceMappingURL=equal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nfunction ucs2length(str) {\n    const len = str.length;\n    let length = 0;\n    let pos = 0;\n    let value;\n    while (pos < len) {\n        length++;\n        value = str.charCodeAt(pos++);\n        if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n            // high surrogate, and there is a next character\n            value = str.charCodeAt(pos);\n            if ((value & 0xfc00) === 0xdc00)\n                pos++; // low surrogate\n        }\n    }\n    return length;\n}\nexports.default = ucs2length;\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default';\n//# sourceMappingURL=ucs2length.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst uri = require(\"fast-uri\");\nuri.code = 'require(\"ajv/dist/runtime/uri\").default';\nexports.default = uri;\n//# sourceMappingURL=uri.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass ValidationError extends Error {\n    constructor(errors) {\n        super(\"validation failed\");\n        this.errors = errors;\n        this.ajv = this.validation = true;\n    }\n}\nexports.default = ValidationError;\n//# sourceMappingURL=validation_error.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateAdditionalItems = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n    params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n    keyword: \"additionalItems\",\n    type: \"array\",\n    schemaType: [\"boolean\", \"object\"],\n    before: \"uniqueItems\",\n    error,\n    code(cxt) {\n        const { parentSchema, it } = cxt;\n        const { items } = parentSchema;\n        if (!Array.isArray(items)) {\n            (0, util_1.checkStrictMode)(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas');\n            return;\n        }\n        validateAdditionalItems(cxt, items);\n    },\n};\nfunction validateAdditionalItems(cxt, items) {\n    const { gen, schema, data, keyword, it } = cxt;\n    it.items = true;\n    const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n    if (schema === false) {\n        cxt.setParams({ len: items.length });\n        cxt.pass((0, codegen_1._) `${len} <= ${items.length}`);\n    }\n    else if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n        const valid = gen.var(\"valid\", (0, codegen_1._) `${len} <= ${items.length}`); // TODO var\n        gen.if((0, codegen_1.not)(valid), () => validateItems(valid));\n        cxt.ok(valid);\n    }\n    function validateItems(valid) {\n        gen.forRange(\"i\", items.length, len, (i) => {\n            cxt.subschema({ keyword, dataProp: i, dataPropType: util_1.Type.Num }, valid);\n            if (!it.allErrors)\n                gen.if((0, codegen_1.not)(valid), () => gen.break());\n        });\n    }\n}\nexports.validateAdditionalItems = validateAdditionalItems;\nexports.default = def;\n//# sourceMappingURL=additionalItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: \"must NOT have additional properties\",\n    params: ({ params }) => (0, codegen_1._) `{additionalProperty: ${params.additionalProperty}}`,\n};\nconst def = {\n    keyword: \"additionalProperties\",\n    type: [\"object\"],\n    schemaType: [\"boolean\", \"object\"],\n    allowUndefined: true,\n    trackErrors: true,\n    error,\n    code(cxt) {\n        const { gen, schema, parentSchema, data, errsCount, it } = cxt;\n        /* istanbul ignore if */\n        if (!errsCount)\n            throw new Error(\"ajv implementation error\");\n        const { allErrors, opts } = it;\n        it.props = true;\n        if (opts.removeAdditional !== \"all\" && (0, util_1.alwaysValidSchema)(it, schema))\n            return;\n        const props = (0, code_1.allSchemaProperties)(parentSchema.properties);\n        const patProps = (0, code_1.allSchemaProperties)(parentSchema.patternProperties);\n        checkAdditionalProperties();\n        cxt.ok((0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n        function checkAdditionalProperties() {\n            gen.forIn(\"key\", data, (key) => {\n                if (!props.length && !patProps.length)\n                    additionalPropertyCode(key);\n                else\n                    gen.if(isAdditional(key), () => additionalPropertyCode(key));\n            });\n        }\n        function isAdditional(key) {\n            let definedProp;\n            if (props.length > 8) {\n                // TODO maybe an option instead of hard-coded 8?\n                const propsSchema = (0, util_1.schemaRefOrVal)(it, parentSchema.properties, \"properties\");\n                definedProp = (0, code_1.isOwnProperty)(gen, propsSchema, key);\n            }\n            else if (props.length) {\n                definedProp = (0, codegen_1.or)(...props.map((p) => (0, codegen_1._) `${key} === ${p}`));\n            }\n            else {\n                definedProp = codegen_1.nil;\n            }\n            if (patProps.length) {\n                definedProp = (0, codegen_1.or)(definedProp, ...patProps.map((p) => (0, codegen_1._) `${(0, code_1.usePattern)(cxt, p)}.test(${key})`));\n            }\n            return (0, codegen_1.not)(definedProp);\n        }\n        function deleteAdditional(key) {\n            gen.code((0, codegen_1._) `delete ${data}[${key}]`);\n        }\n        function additionalPropertyCode(key) {\n            if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n                deleteAdditional(key);\n                return;\n            }\n            if (schema === false) {\n                cxt.setParams({ additionalProperty: key });\n                cxt.error();\n                if (!allErrors)\n                    gen.break();\n                return;\n            }\n            if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n                const valid = gen.name(\"valid\");\n                if (opts.removeAdditional === \"failing\") {\n                    applyAdditionalSchema(key, valid, false);\n                    gen.if((0, codegen_1.not)(valid), () => {\n                        cxt.reset();\n                        deleteAdditional(key);\n                    });\n                }\n                else {\n                    applyAdditionalSchema(key, valid);\n                    if (!allErrors)\n                        gen.if((0, codegen_1.not)(valid), () => gen.break());\n                }\n            }\n        }\n        function applyAdditionalSchema(key, valid, errors) {\n            const subschema = {\n                keyword: \"additionalProperties\",\n                dataProp: key,\n                dataPropType: util_1.Type.Str,\n            };\n            if (errors === false) {\n                Object.assign(subschema, {\n                    compositeRule: true,\n                    createErrors: false,\n                    allErrors: false,\n                });\n            }\n            cxt.subschema(subschema, valid);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=additionalProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: \"allOf\",\n    schemaType: \"array\",\n    code(cxt) {\n        const { gen, schema, it } = cxt;\n        /* istanbul ignore if */\n        if (!Array.isArray(schema))\n            throw new Error(\"ajv implementation error\");\n        const valid = gen.name(\"valid\");\n        schema.forEach((sch, i) => {\n            if ((0, util_1.alwaysValidSchema)(it, sch))\n                return;\n            const schCxt = cxt.subschema({ keyword: \"allOf\", schemaProp: i }, valid);\n            cxt.ok(valid);\n            cxt.mergeEvaluated(schCxt);\n        });\n    },\n};\nexports.default = def;\n//# sourceMappingURL=allOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst def = {\n    keyword: \"anyOf\",\n    schemaType: \"array\",\n    trackErrors: true,\n    code: code_1.validateUnion,\n    error: { message: \"must match a schema in anyOf\" },\n};\nexports.default = def;\n//# sourceMappingURL=anyOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params: { min, max } }) => max === undefined\n        ? (0, codegen_1.str) `must contain at least ${min} valid item(s)`\n        : (0, codegen_1.str) `must contain at least ${min} and no more than ${max} valid item(s)`,\n    params: ({ params: { min, max } }) => max === undefined ? (0, codegen_1._) `{minContains: ${min}}` : (0, codegen_1._) `{minContains: ${min}, maxContains: ${max}}`,\n};\nconst def = {\n    keyword: \"contains\",\n    type: \"array\",\n    schemaType: [\"object\", \"boolean\"],\n    before: \"uniqueItems\",\n    trackErrors: true,\n    error,\n    code(cxt) {\n        const { gen, schema, parentSchema, data, it } = cxt;\n        let min;\n        let max;\n        const { minContains, maxContains } = parentSchema;\n        if (it.opts.next) {\n            min = minContains === undefined ? 1 : minContains;\n            max = maxContains;\n        }\n        else {\n            min = 1;\n        }\n        const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n        cxt.setParams({ min, max });\n        if (max === undefined && min === 0) {\n            (0, util_1.checkStrictMode)(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`);\n            return;\n        }\n        if (max !== undefined && min > max) {\n            (0, util_1.checkStrictMode)(it, `\"minContains\" > \"maxContains\" is always invalid`);\n            cxt.fail();\n            return;\n        }\n        if ((0, util_1.alwaysValidSchema)(it, schema)) {\n            let cond = (0, codegen_1._) `${len} >= ${min}`;\n            if (max !== undefined)\n                cond = (0, codegen_1._) `${cond} && ${len} <= ${max}`;\n            cxt.pass(cond);\n            return;\n        }\n        it.items = true;\n        const valid = gen.name(\"valid\");\n        if (max === undefined && min === 1) {\n            validateItems(valid, () => gen.if(valid, () => gen.break()));\n        }\n        else if (min === 0) {\n            gen.let(valid, true);\n            if (max !== undefined)\n                gen.if((0, codegen_1._) `${data}.length > 0`, validateItemsWithCount);\n        }\n        else {\n            gen.let(valid, false);\n            validateItemsWithCount();\n        }\n        cxt.result(valid, () => cxt.reset());\n        function validateItemsWithCount() {\n            const schValid = gen.name(\"_valid\");\n            const count = gen.let(\"count\", 0);\n            validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)));\n        }\n        function validateItems(_valid, block) {\n            gen.forRange(\"i\", 0, len, (i) => {\n                cxt.subschema({\n                    keyword: \"contains\",\n                    dataProp: i,\n                    dataPropType: util_1.Type.Num,\n                    compositeRule: true,\n                }, _valid);\n                block();\n            });\n        }\n        function checkLimits(count) {\n            gen.code((0, codegen_1._) `${count}++`);\n            if (max === undefined) {\n                gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true).break());\n            }\n            else {\n                gen.if((0, codegen_1._) `${count} > ${max}`, () => gen.assign(valid, false).break());\n                if (min === 1)\n                    gen.assign(valid, true);\n                else\n                    gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true));\n            }\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=contains.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nexports.error = {\n    message: ({ params: { property, depsCount, deps } }) => {\n        const property_ies = depsCount === 1 ? \"property\" : \"properties\";\n        return (0, codegen_1.str) `must have ${property_ies} ${deps} when property ${property} is present`;\n    },\n    params: ({ params: { property, depsCount, deps, missingProperty } }) => (0, codegen_1._) `{property: ${property},\n    missingProperty: ${missingProperty},\n    depsCount: ${depsCount},\n    deps: ${deps}}`, // TODO change to reference\n};\nconst def = {\n    keyword: \"dependencies\",\n    type: \"object\",\n    schemaType: \"object\",\n    error: exports.error,\n    code(cxt) {\n        const [propDeps, schDeps] = splitDependencies(cxt);\n        validatePropertyDeps(cxt, propDeps);\n        validateSchemaDeps(cxt, schDeps);\n    },\n};\nfunction splitDependencies({ schema }) {\n    const propertyDeps = {};\n    const schemaDeps = {};\n    for (const key in schema) {\n        if (key === \"__proto__\")\n            continue;\n        const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps;\n        deps[key] = schema[key];\n    }\n    return [propertyDeps, schemaDeps];\n}\nfunction validatePropertyDeps(cxt, propertyDeps = cxt.schema) {\n    const { gen, data, it } = cxt;\n    if (Object.keys(propertyDeps).length === 0)\n        return;\n    const missing = gen.let(\"missing\");\n    for (const prop in propertyDeps) {\n        const deps = propertyDeps[prop];\n        if (deps.length === 0)\n            continue;\n        const hasProperty = (0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties);\n        cxt.setParams({\n            property: prop,\n            depsCount: deps.length,\n            deps: deps.join(\", \"),\n        });\n        if (it.allErrors) {\n            gen.if(hasProperty, () => {\n                for (const depProp of deps) {\n                    (0, code_1.checkReportMissingProp)(cxt, depProp);\n                }\n            });\n        }\n        else {\n            gen.if((0, codegen_1._) `${hasProperty} && (${(0, code_1.checkMissingProp)(cxt, deps, missing)})`);\n            (0, code_1.reportMissingProp)(cxt, missing);\n            gen.else();\n        }\n    }\n}\nexports.validatePropertyDeps = validatePropertyDeps;\nfunction validateSchemaDeps(cxt, schemaDeps = cxt.schema) {\n    const { gen, data, keyword, it } = cxt;\n    const valid = gen.name(\"valid\");\n    for (const prop in schemaDeps) {\n        if ((0, util_1.alwaysValidSchema)(it, schemaDeps[prop]))\n            continue;\n        gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties), () => {\n            const schCxt = cxt.subschema({ keyword, schemaProp: prop }, valid);\n            cxt.mergeValidEvaluated(schCxt, valid);\n        }, () => gen.var(valid, true) // TODO var\n        );\n        cxt.ok(valid);\n    }\n}\nexports.validateSchemaDeps = validateSchemaDeps;\nexports.default = def;\n//# sourceMappingURL=dependencies.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params }) => (0, codegen_1.str) `must match \"${params.ifClause}\" schema`,\n    params: ({ params }) => (0, codegen_1._) `{failingKeyword: ${params.ifClause}}`,\n};\nconst def = {\n    keyword: \"if\",\n    schemaType: [\"object\", \"boolean\"],\n    trackErrors: true,\n    error,\n    code(cxt) {\n        const { gen, parentSchema, it } = cxt;\n        if (parentSchema.then === undefined && parentSchema.else === undefined) {\n            (0, util_1.checkStrictMode)(it, '\"if\" without \"then\" and \"else\" is ignored');\n        }\n        const hasThen = hasSchema(it, \"then\");\n        const hasElse = hasSchema(it, \"else\");\n        if (!hasThen && !hasElse)\n            return;\n        const valid = gen.let(\"valid\", true);\n        const schValid = gen.name(\"_valid\");\n        validateIf();\n        cxt.reset();\n        if (hasThen && hasElse) {\n            const ifClause = gen.let(\"ifClause\");\n            cxt.setParams({ ifClause });\n            gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause));\n        }\n        else if (hasThen) {\n            gen.if(schValid, validateClause(\"then\"));\n        }\n        else {\n            gen.if((0, codegen_1.not)(schValid), validateClause(\"else\"));\n        }\n        cxt.pass(valid, () => cxt.error(true));\n        function validateIf() {\n            const schCxt = cxt.subschema({\n                keyword: \"if\",\n                compositeRule: true,\n                createErrors: false,\n                allErrors: false,\n            }, schValid);\n            cxt.mergeEvaluated(schCxt);\n        }\n        function validateClause(keyword, ifClause) {\n            return () => {\n                const schCxt = cxt.subschema({ keyword }, schValid);\n                gen.assign(valid, schValid);\n                cxt.mergeValidEvaluated(schCxt, valid);\n                if (ifClause)\n                    gen.assign(ifClause, (0, codegen_1._) `${keyword}`);\n                else\n                    cxt.setParams({ ifClause: keyword });\n            };\n        }\n    },\n};\nfunction hasSchema(it, keyword) {\n    const schema = it.schema[keyword];\n    return schema !== undefined && !(0, util_1.alwaysValidSchema)(it, schema);\n}\nexports.default = def;\n//# sourceMappingURL=if.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst additionalItems_1 = require(\"./additionalItems\");\nconst prefixItems_1 = require(\"./prefixItems\");\nconst items_1 = require(\"./items\");\nconst items2020_1 = require(\"./items2020\");\nconst contains_1 = require(\"./contains\");\nconst dependencies_1 = require(\"./dependencies\");\nconst propertyNames_1 = require(\"./propertyNames\");\nconst additionalProperties_1 = require(\"./additionalProperties\");\nconst properties_1 = require(\"./properties\");\nconst patternProperties_1 = require(\"./patternProperties\");\nconst not_1 = require(\"./not\");\nconst anyOf_1 = require(\"./anyOf\");\nconst oneOf_1 = require(\"./oneOf\");\nconst allOf_1 = require(\"./allOf\");\nconst if_1 = require(\"./if\");\nconst thenElse_1 = require(\"./thenElse\");\nfunction getApplicator(draft2020 = false) {\n    const applicator = [\n        // any\n        not_1.default,\n        anyOf_1.default,\n        oneOf_1.default,\n        allOf_1.default,\n        if_1.default,\n        thenElse_1.default,\n        // object\n        propertyNames_1.default,\n        additionalProperties_1.default,\n        dependencies_1.default,\n        properties_1.default,\n        patternProperties_1.default,\n    ];\n    // array\n    if (draft2020)\n        applicator.push(prefixItems_1.default, items2020_1.default);\n    else\n        applicator.push(additionalItems_1.default, items_1.default);\n    applicator.push(contains_1.default);\n    return applicator;\n}\nexports.default = getApplicator;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateTuple = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nconst def = {\n    keyword: \"items\",\n    type: \"array\",\n    schemaType: [\"object\", \"array\", \"boolean\"],\n    before: \"uniqueItems\",\n    code(cxt) {\n        const { schema, it } = cxt;\n        if (Array.isArray(schema))\n            return validateTuple(cxt, \"additionalItems\", schema);\n        it.items = true;\n        if ((0, util_1.alwaysValidSchema)(it, schema))\n            return;\n        cxt.ok((0, code_1.validateArray)(cxt));\n    },\n};\nfunction validateTuple(cxt, extraItems, schArr = cxt.schema) {\n    const { gen, parentSchema, data, keyword, it } = cxt;\n    checkStrictTuple(parentSchema);\n    if (it.opts.unevaluated && schArr.length && it.items !== true) {\n        it.items = util_1.mergeEvaluated.items(gen, schArr.length, it.items);\n    }\n    const valid = gen.name(\"valid\");\n    const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n    schArr.forEach((sch, i) => {\n        if ((0, util_1.alwaysValidSchema)(it, sch))\n            return;\n        gen.if((0, codegen_1._) `${len} > ${i}`, () => cxt.subschema({\n            keyword,\n            schemaProp: i,\n            dataProp: i,\n        }, valid));\n        cxt.ok(valid);\n    });\n    function checkStrictTuple(sch) {\n        const { opts, errSchemaPath } = it;\n        const l = schArr.length;\n        const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false);\n        if (opts.strictTuples && !fullTuple) {\n            const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`;\n            (0, util_1.checkStrictMode)(it, msg, opts.strictTuples);\n        }\n    }\n}\nexports.validateTuple = validateTuple;\nexports.default = def;\n//# sourceMappingURL=items.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nconst additionalItems_1 = require(\"./additionalItems\");\nconst error = {\n    message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n    params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n    keyword: \"items\",\n    type: \"array\",\n    schemaType: [\"object\", \"boolean\"],\n    before: \"uniqueItems\",\n    error,\n    code(cxt) {\n        const { schema, parentSchema, it } = cxt;\n        const { prefixItems } = parentSchema;\n        it.items = true;\n        if ((0, util_1.alwaysValidSchema)(it, schema))\n            return;\n        if (prefixItems)\n            (0, additionalItems_1.validateAdditionalItems)(cxt, prefixItems);\n        else\n            cxt.ok((0, code_1.validateArray)(cxt));\n    },\n};\nexports.default = def;\n//# sourceMappingURL=items2020.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: \"not\",\n    schemaType: [\"object\", \"boolean\"],\n    trackErrors: true,\n    code(cxt) {\n        const { gen, schema, it } = cxt;\n        if ((0, util_1.alwaysValidSchema)(it, schema)) {\n            cxt.fail();\n            return;\n        }\n        const valid = gen.name(\"valid\");\n        cxt.subschema({\n            keyword: \"not\",\n            compositeRule: true,\n            createErrors: false,\n            allErrors: false,\n        }, valid);\n        cxt.failResult(valid, () => cxt.reset(), () => cxt.error());\n    },\n    error: { message: \"must NOT be valid\" },\n};\nexports.default = def;\n//# sourceMappingURL=not.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: \"must match exactly one schema in oneOf\",\n    params: ({ params }) => (0, codegen_1._) `{passingSchemas: ${params.passing}}`,\n};\nconst def = {\n    keyword: \"oneOf\",\n    schemaType: \"array\",\n    trackErrors: true,\n    error,\n    code(cxt) {\n        const { gen, schema, parentSchema, it } = cxt;\n        /* istanbul ignore if */\n        if (!Array.isArray(schema))\n            throw new Error(\"ajv implementation error\");\n        if (it.opts.discriminator && parentSchema.discriminator)\n            return;\n        const schArr = schema;\n        const valid = gen.let(\"valid\", false);\n        const passing = gen.let(\"passing\", null);\n        const schValid = gen.name(\"_valid\");\n        cxt.setParams({ passing });\n        // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n        gen.block(validateOneOf);\n        cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n        function validateOneOf() {\n            schArr.forEach((sch, i) => {\n                let schCxt;\n                if ((0, util_1.alwaysValidSchema)(it, sch)) {\n                    gen.var(schValid, true);\n                }\n                else {\n                    schCxt = cxt.subschema({\n                        keyword: \"oneOf\",\n                        schemaProp: i,\n                        compositeRule: true,\n                    }, schValid);\n                }\n                if (i > 0) {\n                    gen\n                        .if((0, codegen_1._) `${schValid} && ${valid}`)\n                        .assign(valid, false)\n                        .assign(passing, (0, codegen_1._) `[${passing}, ${i}]`)\n                        .else();\n                }\n                gen.if(schValid, () => {\n                    gen.assign(valid, true);\n                    gen.assign(passing, i);\n                    if (schCxt)\n                        cxt.mergeEvaluated(schCxt, codegen_1.Name);\n                });\n            });\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=oneOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst util_2 = require(\"../../compile/util\");\nconst def = {\n    keyword: \"patternProperties\",\n    type: \"object\",\n    schemaType: \"object\",\n    code(cxt) {\n        const { gen, schema, data, parentSchema, it } = cxt;\n        const { opts } = it;\n        const patterns = (0, code_1.allSchemaProperties)(schema);\n        const alwaysValidPatterns = patterns.filter((p) => (0, util_1.alwaysValidSchema)(it, schema[p]));\n        if (patterns.length === 0 ||\n            (alwaysValidPatterns.length === patterns.length &&\n                (!it.opts.unevaluated || it.props === true))) {\n            return;\n        }\n        const checkProperties = opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties;\n        const valid = gen.name(\"valid\");\n        if (it.props !== true && !(it.props instanceof codegen_1.Name)) {\n            it.props = (0, util_2.evaluatedPropsToName)(gen, it.props);\n        }\n        const { props } = it;\n        validatePatternProperties();\n        function validatePatternProperties() {\n            for (const pat of patterns) {\n                if (checkProperties)\n                    checkMatchingProperties(pat);\n                if (it.allErrors) {\n                    validateProperties(pat);\n                }\n                else {\n                    gen.var(valid, true); // TODO var\n                    validateProperties(pat);\n                    gen.if(valid);\n                }\n            }\n        }\n        function checkMatchingProperties(pat) {\n            for (const prop in checkProperties) {\n                if (new RegExp(pat).test(prop)) {\n                    (0, util_1.checkStrictMode)(it, `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`);\n                }\n            }\n        }\n        function validateProperties(pat) {\n            gen.forIn(\"key\", data, (key) => {\n                gen.if((0, codegen_1._) `${(0, code_1.usePattern)(cxt, pat)}.test(${key})`, () => {\n                    const alwaysValid = alwaysValidPatterns.includes(pat);\n                    if (!alwaysValid) {\n                        cxt.subschema({\n                            keyword: \"patternProperties\",\n                            schemaProp: pat,\n                            dataProp: key,\n                            dataPropType: util_2.Type.Str,\n                        }, valid);\n                    }\n                    if (it.opts.unevaluated && props !== true) {\n                        gen.assign((0, codegen_1._) `${props}[${key}]`, true);\n                    }\n                    else if (!alwaysValid && !it.allErrors) {\n                        // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n                        // or if all properties were evaluated (props === true)\n                        gen.if((0, codegen_1.not)(valid), () => gen.break());\n                    }\n                });\n            });\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=patternProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst items_1 = require(\"./items\");\nconst def = {\n    keyword: \"prefixItems\",\n    type: \"array\",\n    schemaType: [\"array\"],\n    before: \"uniqueItems\",\n    code: (cxt) => (0, items_1.validateTuple)(cxt, \"items\"),\n};\nexports.default = def;\n//# sourceMappingURL=prefixItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validate_1 = require(\"../../compile/validate\");\nconst code_1 = require(\"../code\");\nconst util_1 = require(\"../../compile/util\");\nconst additionalProperties_1 = require(\"./additionalProperties\");\nconst def = {\n    keyword: \"properties\",\n    type: \"object\",\n    schemaType: \"object\",\n    code(cxt) {\n        const { gen, schema, parentSchema, data, it } = cxt;\n        if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n            additionalProperties_1.default.code(new validate_1.KeywordCxt(it, additionalProperties_1.default, \"additionalProperties\"));\n        }\n        const allProps = (0, code_1.allSchemaProperties)(schema);\n        for (const prop of allProps) {\n            it.definedProperties.add(prop);\n        }\n        if (it.opts.unevaluated && allProps.length && it.props !== true) {\n            it.props = util_1.mergeEvaluated.props(gen, (0, util_1.toHash)(allProps), it.props);\n        }\n        const properties = allProps.filter((p) => !(0, util_1.alwaysValidSchema)(it, schema[p]));\n        if (properties.length === 0)\n            return;\n        const valid = gen.name(\"valid\");\n        for (const prop of properties) {\n            if (hasDefault(prop)) {\n                applyPropertySchema(prop);\n            }\n            else {\n                gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties));\n                applyPropertySchema(prop);\n                if (!it.allErrors)\n                    gen.else().var(valid, true);\n                gen.endIf();\n            }\n            cxt.it.definedProperties.add(prop);\n            cxt.ok(valid);\n        }\n        function hasDefault(prop) {\n            return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined;\n        }\n        function applyPropertySchema(prop) {\n            cxt.subschema({\n                keyword: \"properties\",\n                schemaProp: prop,\n                dataProp: prop,\n            }, valid);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=properties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: \"property name must be valid\",\n    params: ({ params }) => (0, codegen_1._) `{propertyName: ${params.propertyName}}`,\n};\nconst def = {\n    keyword: \"propertyNames\",\n    type: \"object\",\n    schemaType: [\"object\", \"boolean\"],\n    error,\n    code(cxt) {\n        const { gen, schema, data, it } = cxt;\n        if ((0, util_1.alwaysValidSchema)(it, schema))\n            return;\n        const valid = gen.name(\"valid\");\n        gen.forIn(\"key\", data, (key) => {\n            cxt.setParams({ propertyName: key });\n            cxt.subschema({\n                keyword: \"propertyNames\",\n                data: key,\n                dataTypes: [\"string\"],\n                propertyName: key,\n                compositeRule: true,\n            }, valid);\n            gen.if((0, codegen_1.not)(valid), () => {\n                cxt.error(true);\n                if (!it.allErrors)\n                    gen.break();\n            });\n        });\n        cxt.ok(valid);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=propertyNames.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: [\"then\", \"else\"],\n    schemaType: [\"object\", \"boolean\"],\n    code({ keyword, parentSchema, it }) {\n        if (parentSchema.if === undefined)\n            (0, util_1.checkStrictMode)(it, `\"${keyword}\" without \"if\" is ignored`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=thenElse.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = void 0;\nconst codegen_1 = require(\"../compile/codegen\");\nconst util_1 = require(\"../compile/util\");\nconst names_1 = require(\"../compile/names\");\nconst util_2 = require(\"../compile/util\");\nfunction checkReportMissingProp(cxt, prop) {\n    const { gen, data, it } = cxt;\n    gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n        cxt.setParams({ missingProperty: (0, codegen_1._) `${prop}` }, true);\n        cxt.error();\n    });\n}\nexports.checkReportMissingProp = checkReportMissingProp;\nfunction checkMissingProp({ gen, data, it: { opts } }, properties, missing) {\n    return (0, codegen_1.or)(...properties.map((prop) => (0, codegen_1.and)(noPropertyInData(gen, data, prop, opts.ownProperties), (0, codegen_1._) `${missing} = ${prop}`)));\n}\nexports.checkMissingProp = checkMissingProp;\nfunction reportMissingProp(cxt, missing) {\n    cxt.setParams({ missingProperty: missing }, true);\n    cxt.error();\n}\nexports.reportMissingProp = reportMissingProp;\nfunction hasPropFunc(gen) {\n    return gen.scopeValue(\"func\", {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        ref: Object.prototype.hasOwnProperty,\n        code: (0, codegen_1._) `Object.prototype.hasOwnProperty`,\n    });\n}\nexports.hasPropFunc = hasPropFunc;\nfunction isOwnProperty(gen, data, property) {\n    return (0, codegen_1._) `${hasPropFunc(gen)}.call(${data}, ${property})`;\n}\nexports.isOwnProperty = isOwnProperty;\nfunction propertyInData(gen, data, property, ownProperties) {\n    const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} !== undefined`;\n    return ownProperties ? (0, codegen_1._) `${cond} && ${isOwnProperty(gen, data, property)}` : cond;\n}\nexports.propertyInData = propertyInData;\nfunction noPropertyInData(gen, data, property, ownProperties) {\n    const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} === undefined`;\n    return ownProperties ? (0, codegen_1.or)(cond, (0, codegen_1.not)(isOwnProperty(gen, data, property))) : cond;\n}\nexports.noPropertyInData = noPropertyInData;\nfunction allSchemaProperties(schemaMap) {\n    return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : [];\n}\nexports.allSchemaProperties = allSchemaProperties;\nfunction schemaProperties(it, schemaMap) {\n    return allSchemaProperties(schemaMap).filter((p) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p]));\n}\nexports.schemaProperties = schemaProperties;\nfunction callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context, passSchema) {\n    const dataAndSchema = passSchema ? (0, codegen_1._) `${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data;\n    const valCxt = [\n        [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, errorPath)],\n        [names_1.default.parentData, it.parentData],\n        [names_1.default.parentDataProperty, it.parentDataProperty],\n        [names_1.default.rootData, names_1.default.rootData],\n    ];\n    if (it.opts.dynamicRef)\n        valCxt.push([names_1.default.dynamicAnchors, names_1.default.dynamicAnchors]);\n    const args = (0, codegen_1._) `${dataAndSchema}, ${gen.object(...valCxt)}`;\n    return context !== codegen_1.nil ? (0, codegen_1._) `${func}.call(${context}, ${args})` : (0, codegen_1._) `${func}(${args})`;\n}\nexports.callValidateCode = callValidateCode;\nconst newRegExp = (0, codegen_1._) `new RegExp`;\nfunction usePattern({ gen, it: { opts } }, pattern) {\n    const u = opts.unicodeRegExp ? \"u\" : \"\";\n    const { regExp } = opts.code;\n    const rx = regExp(pattern, u);\n    return gen.scopeValue(\"pattern\", {\n        key: rx.toString(),\n        ref: rx,\n        code: (0, codegen_1._) `${regExp.code === \"new RegExp\" ? newRegExp : (0, util_2.useFunc)(gen, regExp)}(${pattern}, ${u})`,\n    });\n}\nexports.usePattern = usePattern;\nfunction validateArray(cxt) {\n    const { gen, data, keyword, it } = cxt;\n    const valid = gen.name(\"valid\");\n    if (it.allErrors) {\n        const validArr = gen.let(\"valid\", true);\n        validateItems(() => gen.assign(validArr, false));\n        return validArr;\n    }\n    gen.var(valid, true);\n    validateItems(() => gen.break());\n    return valid;\n    function validateItems(notValid) {\n        const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n        gen.forRange(\"i\", 0, len, (i) => {\n            cxt.subschema({\n                keyword,\n                dataProp: i,\n                dataPropType: util_1.Type.Num,\n            }, valid);\n            gen.if((0, codegen_1.not)(valid), notValid);\n        });\n    }\n}\nexports.validateArray = validateArray;\nfunction validateUnion(cxt) {\n    const { gen, schema, keyword, it } = cxt;\n    /* istanbul ignore if */\n    if (!Array.isArray(schema))\n        throw new Error(\"ajv implementation error\");\n    const alwaysValid = schema.some((sch) => (0, util_1.alwaysValidSchema)(it, sch));\n    if (alwaysValid && !it.opts.unevaluated)\n        return;\n    const valid = gen.let(\"valid\", false);\n    const schValid = gen.name(\"_valid\");\n    gen.block(() => schema.forEach((_sch, i) => {\n        const schCxt = cxt.subschema({\n            keyword,\n            schemaProp: i,\n            compositeRule: true,\n        }, schValid);\n        gen.assign(valid, (0, codegen_1._) `${valid} || ${schValid}`);\n        const merged = cxt.mergeValidEvaluated(schCxt, schValid);\n        // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n        // or if all properties and items were evaluated (it.props === true && it.items === true)\n        if (!merged)\n            gen.if((0, codegen_1.not)(valid));\n    }));\n    cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n}\nexports.validateUnion = validateUnion;\n//# sourceMappingURL=code.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst def = {\n    keyword: \"id\",\n    code() {\n        throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID');\n    },\n};\nexports.default = def;\n//# sourceMappingURL=id.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst id_1 = require(\"./id\");\nconst ref_1 = require(\"./ref\");\nconst core = [\n    \"$schema\",\n    \"$id\",\n    \"$defs\",\n    \"$vocabulary\",\n    { keyword: \"$comment\" },\n    \"definitions\",\n    id_1.default,\n    ref_1.default,\n];\nexports.default = core;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.callRef = exports.getValidate = void 0;\nconst ref_error_1 = require(\"../../compile/ref_error\");\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst compile_1 = require(\"../../compile\");\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: \"$ref\",\n    schemaType: \"string\",\n    code(cxt) {\n        const { gen, schema: $ref, it } = cxt;\n        const { baseId, schemaEnv: env, validateName, opts, self } = it;\n        const { root } = env;\n        if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId)\n            return callRootRef();\n        const schOrEnv = compile_1.resolveRef.call(self, root, baseId, $ref);\n        if (schOrEnv === undefined)\n            throw new ref_error_1.default(it.opts.uriResolver, baseId, $ref);\n        if (schOrEnv instanceof compile_1.SchemaEnv)\n            return callValidate(schOrEnv);\n        return inlineRefSchema(schOrEnv);\n        function callRootRef() {\n            if (env === root)\n                return callRef(cxt, validateName, env, env.$async);\n            const rootName = gen.scopeValue(\"root\", { ref: root });\n            return callRef(cxt, (0, codegen_1._) `${rootName}.validate`, root, root.$async);\n        }\n        function callValidate(sch) {\n            const v = getValidate(cxt, sch);\n            callRef(cxt, v, sch, sch.$async);\n        }\n        function inlineRefSchema(sch) {\n            const schName = gen.scopeValue(\"schema\", opts.code.source === true ? { ref: sch, code: (0, codegen_1.stringify)(sch) } : { ref: sch });\n            const valid = gen.name(\"valid\");\n            const schCxt = cxt.subschema({\n                schema: sch,\n                dataTypes: [],\n                schemaPath: codegen_1.nil,\n                topSchemaRef: schName,\n                errSchemaPath: $ref,\n            }, valid);\n            cxt.mergeEvaluated(schCxt);\n            cxt.ok(valid);\n        }\n    },\n};\nfunction getValidate(cxt, sch) {\n    const { gen } = cxt;\n    return sch.validate\n        ? gen.scopeValue(\"validate\", { ref: sch.validate })\n        : (0, codegen_1._) `${gen.scopeValue(\"wrapper\", { ref: sch })}.validate`;\n}\nexports.getValidate = getValidate;\nfunction callRef(cxt, v, sch, $async) {\n    const { gen, it } = cxt;\n    const { allErrors, schemaEnv: env, opts } = it;\n    const passCxt = opts.passContext ? names_1.default.this : codegen_1.nil;\n    if ($async)\n        callAsyncRef();\n    else\n        callSyncRef();\n    function callAsyncRef() {\n        if (!env.$async)\n            throw new Error(\"async schema referenced by sync schema\");\n        const valid = gen.let(\"valid\");\n        gen.try(() => {\n            gen.code((0, codegen_1._) `await ${(0, code_1.callValidateCode)(cxt, v, passCxt)}`);\n            addEvaluatedFrom(v); // TODO will not work with async, it has to be returned with the result\n            if (!allErrors)\n                gen.assign(valid, true);\n        }, (e) => {\n            gen.if((0, codegen_1._) `!(${e} instanceof ${it.ValidationError})`, () => gen.throw(e));\n            addErrorsFrom(e);\n            if (!allErrors)\n                gen.assign(valid, false);\n        });\n        cxt.ok(valid);\n    }\n    function callSyncRef() {\n        cxt.result((0, code_1.callValidateCode)(cxt, v, passCxt), () => addEvaluatedFrom(v), () => addErrorsFrom(v));\n    }\n    function addErrorsFrom(source) {\n        const errs = (0, codegen_1._) `${source}.errors`;\n        gen.assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`); // TODO tagged\n        gen.assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n    }\n    function addEvaluatedFrom(source) {\n        var _a;\n        if (!it.opts.unevaluated)\n            return;\n        const schEvaluated = (_a = sch === null || sch === void 0 ? void 0 : sch.validate) === null || _a === void 0 ? void 0 : _a.evaluated;\n        // TODO refactor\n        if (it.props !== true) {\n            if (schEvaluated && !schEvaluated.dynamicProps) {\n                if (schEvaluated.props !== undefined) {\n                    it.props = util_1.mergeEvaluated.props(gen, schEvaluated.props, it.props);\n                }\n            }\n            else {\n                const props = gen.var(\"props\", (0, codegen_1._) `${source}.evaluated.props`);\n                it.props = util_1.mergeEvaluated.props(gen, props, it.props, codegen_1.Name);\n            }\n        }\n        if (it.items !== true) {\n            if (schEvaluated && !schEvaluated.dynamicItems) {\n                if (schEvaluated.items !== undefined) {\n                    it.items = util_1.mergeEvaluated.items(gen, schEvaluated.items, it.items);\n                }\n            }\n            else {\n                const items = gen.var(\"items\", (0, codegen_1._) `${source}.evaluated.items`);\n                it.items = util_1.mergeEvaluated.items(gen, items, it.items, codegen_1.Name);\n            }\n        }\n    }\n}\nexports.callRef = callRef;\nexports.default = def;\n//# sourceMappingURL=ref.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst types_1 = require(\"../discriminator/types\");\nconst compile_1 = require(\"../../compile\");\nconst ref_error_1 = require(\"../../compile/ref_error\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params: { discrError, tagName } }) => discrError === types_1.DiscrError.Tag\n        ? `tag \"${tagName}\" must be string`\n        : `value of tag \"${tagName}\" must be in oneOf`,\n    params: ({ params: { discrError, tag, tagName } }) => (0, codegen_1._) `{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n};\nconst def = {\n    keyword: \"discriminator\",\n    type: \"object\",\n    schemaType: \"object\",\n    error,\n    code(cxt) {\n        const { gen, data, schema, parentSchema, it } = cxt;\n        const { oneOf } = parentSchema;\n        if (!it.opts.discriminator) {\n            throw new Error(\"discriminator: requires discriminator option\");\n        }\n        const tagName = schema.propertyName;\n        if (typeof tagName != \"string\")\n            throw new Error(\"discriminator: requires propertyName\");\n        if (schema.mapping)\n            throw new Error(\"discriminator: mapping is not supported\");\n        if (!oneOf)\n            throw new Error(\"discriminator: requires oneOf keyword\");\n        const valid = gen.let(\"valid\", false);\n        const tag = gen.const(\"tag\", (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(tagName)}`);\n        gen.if((0, codegen_1._) `typeof ${tag} == \"string\"`, () => validateMapping(), () => cxt.error(false, { discrError: types_1.DiscrError.Tag, tag, tagName }));\n        cxt.ok(valid);\n        function validateMapping() {\n            const mapping = getMapping();\n            gen.if(false);\n            for (const tagValue in mapping) {\n                gen.elseIf((0, codegen_1._) `${tag} === ${tagValue}`);\n                gen.assign(valid, applyTagSchema(mapping[tagValue]));\n            }\n            gen.else();\n            cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag, tagName });\n            gen.endIf();\n        }\n        function applyTagSchema(schemaProp) {\n            const _valid = gen.name(\"valid\");\n            const schCxt = cxt.subschema({ keyword: \"oneOf\", schemaProp }, _valid);\n            cxt.mergeEvaluated(schCxt, codegen_1.Name);\n            return _valid;\n        }\n        function getMapping() {\n            var _a;\n            const oneOfMapping = {};\n            const topRequired = hasRequired(parentSchema);\n            let tagRequired = true;\n            for (let i = 0; i < oneOf.length; i++) {\n                let sch = oneOf[i];\n                if ((sch === null || sch === void 0 ? void 0 : sch.$ref) && !(0, util_1.schemaHasRulesButRef)(sch, it.self.RULES)) {\n                    const ref = sch.$ref;\n                    sch = compile_1.resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref);\n                    if (sch instanceof compile_1.SchemaEnv)\n                        sch = sch.schema;\n                    if (sch === undefined)\n                        throw new ref_error_1.default(it.opts.uriResolver, it.baseId, ref);\n                }\n                const propSch = (_a = sch === null || sch === void 0 ? void 0 : sch.properties) === null || _a === void 0 ? void 0 : _a[tagName];\n                if (typeof propSch != \"object\") {\n                    throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`);\n                }\n                tagRequired = tagRequired && (topRequired || hasRequired(sch));\n                addMappings(propSch, i);\n            }\n            if (!tagRequired)\n                throw new Error(`discriminator: \"${tagName}\" must be required`);\n            return oneOfMapping;\n            function hasRequired({ required }) {\n                return Array.isArray(required) && required.includes(tagName);\n            }\n            function addMappings(sch, i) {\n                if (sch.const) {\n                    addMapping(sch.const, i);\n                }\n                else if (sch.enum) {\n                    for (const tagValue of sch.enum) {\n                        addMapping(tagValue, i);\n                    }\n                }\n                else {\n                    throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`);\n                }\n            }\n            function addMapping(tagValue, i) {\n                if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n                    throw new Error(`discriminator: \"${tagName}\" values must be unique strings`);\n                }\n                oneOfMapping[tagValue] = i;\n            }\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DiscrError = void 0;\nvar DiscrError;\n(function (DiscrError) {\n    DiscrError[\"Tag\"] = \"tag\";\n    DiscrError[\"Mapping\"] = \"mapping\";\n})(DiscrError || (exports.DiscrError = DiscrError = {}));\n//# sourceMappingURL=types.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst core_1 = require(\"./core\");\nconst validation_1 = require(\"./validation\");\nconst applicator_1 = require(\"./applicator\");\nconst format_1 = require(\"./format\");\nconst metadata_1 = require(\"./metadata\");\nconst draft7Vocabularies = [\n    core_1.default,\n    validation_1.default,\n    (0, applicator_1.default)(),\n    format_1.default,\n    metadata_1.metadataVocabulary,\n    metadata_1.contentVocabulary,\n];\nexports.default = draft7Vocabularies;\n//# sourceMappingURL=draft7.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n    message: ({ schemaCode }) => (0, codegen_1.str) `must match format \"${schemaCode}\"`,\n    params: ({ schemaCode }) => (0, codegen_1._) `{format: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"format\",\n    type: [\"number\", \"string\"],\n    schemaType: \"string\",\n    $data: true,\n    error,\n    code(cxt, ruleType) {\n        const { gen, data, $data, schema, schemaCode, it } = cxt;\n        const { opts, errSchemaPath, schemaEnv, self } = it;\n        if (!opts.validateFormats)\n            return;\n        if ($data)\n            validate$DataFormat();\n        else\n            validateFormat();\n        function validate$DataFormat() {\n            const fmts = gen.scopeValue(\"formats\", {\n                ref: self.formats,\n                code: opts.code.formats,\n            });\n            const fDef = gen.const(\"fDef\", (0, codegen_1._) `${fmts}[${schemaCode}]`);\n            const fType = gen.let(\"fType\");\n            const format = gen.let(\"format\");\n            // TODO simplify\n            gen.if((0, codegen_1._) `typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`, () => gen.assign(fType, (0, codegen_1._) `${fDef}.type || \"string\"`).assign(format, (0, codegen_1._) `${fDef}.validate`), () => gen.assign(fType, (0, codegen_1._) `\"string\"`).assign(format, fDef));\n            cxt.fail$data((0, codegen_1.or)(unknownFmt(), invalidFmt()));\n            function unknownFmt() {\n                if (opts.strictSchema === false)\n                    return codegen_1.nil;\n                return (0, codegen_1._) `${schemaCode} && !${format}`;\n            }\n            function invalidFmt() {\n                const callFormat = schemaEnv.$async\n                    ? (0, codegen_1._) `(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n                    : (0, codegen_1._) `${format}(${data})`;\n                const validData = (0, codegen_1._) `(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`;\n                return (0, codegen_1._) `${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`;\n            }\n        }\n        function validateFormat() {\n            const formatDef = self.formats[schema];\n            if (!formatDef) {\n                unknownFormat();\n                return;\n            }\n            if (formatDef === true)\n                return;\n            const [fmtType, format, fmtRef] = getFormat(formatDef);\n            if (fmtType === ruleType)\n                cxt.pass(validCondition());\n            function unknownFormat() {\n                if (opts.strictSchema === false) {\n                    self.logger.warn(unknownMsg());\n                    return;\n                }\n                throw new Error(unknownMsg());\n                function unknownMsg() {\n                    return `unknown format \"${schema}\" ignored in schema at path \"${errSchemaPath}\"`;\n                }\n            }\n            function getFormat(fmtDef) {\n                const code = fmtDef instanceof RegExp\n                    ? (0, codegen_1.regexpCode)(fmtDef)\n                    : opts.code.formats\n                        ? (0, codegen_1._) `${opts.code.formats}${(0, codegen_1.getProperty)(schema)}`\n                        : undefined;\n                const fmt = gen.scopeValue(\"formats\", { key: schema, ref: fmtDef, code });\n                if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n                    return [fmtDef.type || \"string\", fmtDef.validate, (0, codegen_1._) `${fmt}.validate`];\n                }\n                return [\"string\", fmtDef, fmt];\n            }\n            function validCondition() {\n                if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n                    if (!schemaEnv.$async)\n                        throw new Error(\"async format in sync schema\");\n                    return (0, codegen_1._) `await ${fmtRef}(${data})`;\n                }\n                return typeof format == \"function\" ? (0, codegen_1._) `${fmtRef}(${data})` : (0, codegen_1._) `${fmtRef}.test(${data})`;\n            }\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=format.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst format_1 = require(\"./format\");\nconst format = [format_1.default];\nexports.default = format;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.contentVocabulary = exports.metadataVocabulary = void 0;\nexports.metadataVocabulary = [\n    \"title\",\n    \"description\",\n    \"default\",\n    \"deprecated\",\n    \"readOnly\",\n    \"writeOnly\",\n    \"examples\",\n];\nexports.contentVocabulary = [\n    \"contentMediaType\",\n    \"contentEncoding\",\n    \"contentSchema\",\n];\n//# sourceMappingURL=metadata.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n    message: \"must be equal to constant\",\n    params: ({ schemaCode }) => (0, codegen_1._) `{allowedValue: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"const\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, data, $data, schemaCode, schema } = cxt;\n        if ($data || (schema && typeof schema == \"object\")) {\n            cxt.fail$data((0, codegen_1._) `!${(0, util_1.useFunc)(gen, equal_1.default)}(${data}, ${schemaCode})`);\n        }\n        else {\n            cxt.fail((0, codegen_1._) `${schema} !== ${data}`);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=const.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n    message: \"must be equal to one of the allowed values\",\n    params: ({ schemaCode }) => (0, codegen_1._) `{allowedValues: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"enum\",\n    schemaType: \"array\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, data, $data, schema, schemaCode, it } = cxt;\n        if (!$data && schema.length === 0)\n            throw new Error(\"enum must have non-empty array\");\n        const useLoop = schema.length >= it.opts.loopEnum;\n        let eql;\n        const getEql = () => (eql !== null && eql !== void 0 ? eql : (eql = (0, util_1.useFunc)(gen, equal_1.default)));\n        let valid;\n        if (useLoop || $data) {\n            valid = gen.let(\"valid\");\n            cxt.block$data(valid, loopEnum);\n        }\n        else {\n            /* istanbul ignore if */\n            if (!Array.isArray(schema))\n                throw new Error(\"ajv implementation error\");\n            const vSchema = gen.const(\"vSchema\", schemaCode);\n            valid = (0, codegen_1.or)(...schema.map((_x, i) => equalCode(vSchema, i)));\n        }\n        cxt.pass(valid);\n        function loopEnum() {\n            gen.assign(valid, false);\n            gen.forOf(\"v\", schemaCode, (v) => gen.if((0, codegen_1._) `${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break()));\n        }\n        function equalCode(vSchema, i) {\n            const sch = schema[i];\n            return typeof sch === \"object\" && sch !== null\n                ? (0, codegen_1._) `${getEql()}(${data}, ${vSchema}[${i}])`\n                : (0, codegen_1._) `${data} === ${sch}`;\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=enum.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst limitNumber_1 = require(\"./limitNumber\");\nconst multipleOf_1 = require(\"./multipleOf\");\nconst limitLength_1 = require(\"./limitLength\");\nconst pattern_1 = require(\"./pattern\");\nconst limitProperties_1 = require(\"./limitProperties\");\nconst required_1 = require(\"./required\");\nconst limitItems_1 = require(\"./limitItems\");\nconst uniqueItems_1 = require(\"./uniqueItems\");\nconst const_1 = require(\"./const\");\nconst enum_1 = require(\"./enum\");\nconst validation = [\n    // number\n    limitNumber_1.default,\n    multipleOf_1.default,\n    // string\n    limitLength_1.default,\n    pattern_1.default,\n    // object\n    limitProperties_1.default,\n    required_1.default,\n    // array\n    limitItems_1.default,\n    uniqueItems_1.default,\n    // any\n    { keyword: \"type\", schemaType: [\"string\", \"array\"] },\n    { keyword: \"nullable\", schemaType: \"boolean\" },\n    const_1.default,\n    enum_1.default,\n];\nexports.default = validation;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n    message({ keyword, schemaCode }) {\n        const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\";\n        return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} items`;\n    },\n    params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n    keyword: [\"maxItems\", \"minItems\"],\n    type: \"array\",\n    schemaType: \"number\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { keyword, data, schemaCode } = cxt;\n        const op = keyword === \"maxItems\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n        cxt.fail$data((0, codegen_1._) `${data}.length ${op} ${schemaCode}`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=limitItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst ucs2length_1 = require(\"../../runtime/ucs2length\");\nconst error = {\n    message({ keyword, schemaCode }) {\n        const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\";\n        return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} characters`;\n    },\n    params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n    keyword: [\"maxLength\", \"minLength\"],\n    type: \"string\",\n    schemaType: \"number\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { keyword, data, schemaCode, it } = cxt;\n        const op = keyword === \"maxLength\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n        const len = it.opts.unicode === false ? (0, codegen_1._) `${data}.length` : (0, codegen_1._) `${(0, util_1.useFunc)(cxt.gen, ucs2length_1.default)}(${data})`;\n        cxt.fail$data((0, codegen_1._) `${len} ${op} ${schemaCode}`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=limitLength.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst ops = codegen_1.operators;\nconst KWDs = {\n    maximum: { okStr: \"<=\", ok: ops.LTE, fail: ops.GT },\n    minimum: { okStr: \">=\", ok: ops.GTE, fail: ops.LT },\n    exclusiveMaximum: { okStr: \"<\", ok: ops.LT, fail: ops.GTE },\n    exclusiveMinimum: { okStr: \">\", ok: ops.GT, fail: ops.LTE },\n};\nconst error = {\n    message: ({ keyword, schemaCode }) => (0, codegen_1.str) `must be ${KWDs[keyword].okStr} ${schemaCode}`,\n    params: ({ keyword, schemaCode }) => (0, codegen_1._) `{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`,\n};\nconst def = {\n    keyword: Object.keys(KWDs),\n    type: \"number\",\n    schemaType: \"number\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { keyword, data, schemaCode } = cxt;\n        cxt.fail$data((0, codegen_1._) `${data} ${KWDs[keyword].fail} ${schemaCode} || isNaN(${data})`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=limitNumber.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n    message({ keyword, schemaCode }) {\n        const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\";\n        return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} properties`;\n    },\n    params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n    keyword: [\"maxProperties\", \"minProperties\"],\n    type: \"object\",\n    schemaType: \"number\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { keyword, data, schemaCode } = cxt;\n        const op = keyword === \"maxProperties\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n        cxt.fail$data((0, codegen_1._) `Object.keys(${data}).length ${op} ${schemaCode}`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=limitProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n    message: ({ schemaCode }) => (0, codegen_1.str) `must be multiple of ${schemaCode}`,\n    params: ({ schemaCode }) => (0, codegen_1._) `{multipleOf: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"multipleOf\",\n    type: \"number\",\n    schemaType: \"number\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, data, schemaCode, it } = cxt;\n        // const bdt = bad$DataType(schemaCode, <string>def.schemaType, $data)\n        const prec = it.opts.multipleOfPrecision;\n        const res = gen.let(\"res\");\n        const invalid = prec\n            ? (0, codegen_1._) `Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n            : (0, codegen_1._) `${res} !== parseInt(${res})`;\n        cxt.fail$data((0, codegen_1._) `(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=multipleOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n    message: ({ schemaCode }) => (0, codegen_1.str) `must match pattern \"${schemaCode}\"`,\n    params: ({ schemaCode }) => (0, codegen_1._) `{pattern: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"pattern\",\n    type: \"string\",\n    schemaType: \"string\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { data, $data, schema, schemaCode, it } = cxt;\n        // TODO regexp should be wrapped in try/catchs\n        const u = it.opts.unicodeRegExp ? \"u\" : \"\";\n        const regExp = $data ? (0, codegen_1._) `(new RegExp(${schemaCode}, ${u}))` : (0, code_1.usePattern)(cxt, schema);\n        cxt.fail$data((0, codegen_1._) `!${regExp}.test(${data})`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=pattern.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params: { missingProperty } }) => (0, codegen_1.str) `must have required property '${missingProperty}'`,\n    params: ({ params: { missingProperty } }) => (0, codegen_1._) `{missingProperty: ${missingProperty}}`,\n};\nconst def = {\n    keyword: \"required\",\n    type: \"object\",\n    schemaType: \"array\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, schema, schemaCode, data, $data, it } = cxt;\n        const { opts } = it;\n        if (!$data && schema.length === 0)\n            return;\n        const useLoop = schema.length >= opts.loopRequired;\n        if (it.allErrors)\n            allErrorsMode();\n        else\n            exitOnErrorMode();\n        if (opts.strictRequired) {\n            const props = cxt.parentSchema.properties;\n            const { definedProperties } = cxt.it;\n            for (const requiredKey of schema) {\n                if ((props === null || props === void 0 ? void 0 : props[requiredKey]) === undefined && !definedProperties.has(requiredKey)) {\n                    const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n                    const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`;\n                    (0, util_1.checkStrictMode)(it, msg, it.opts.strictRequired);\n                }\n            }\n        }\n        function allErrorsMode() {\n            if (useLoop || $data) {\n                cxt.block$data(codegen_1.nil, loopAllRequired);\n            }\n            else {\n                for (const prop of schema) {\n                    (0, code_1.checkReportMissingProp)(cxt, prop);\n                }\n            }\n        }\n        function exitOnErrorMode() {\n            const missing = gen.let(\"missing\");\n            if (useLoop || $data) {\n                const valid = gen.let(\"valid\", true);\n                cxt.block$data(valid, () => loopUntilMissing(missing, valid));\n                cxt.ok(valid);\n            }\n            else {\n                gen.if((0, code_1.checkMissingProp)(cxt, schema, missing));\n                (0, code_1.reportMissingProp)(cxt, missing);\n                gen.else();\n            }\n        }\n        function loopAllRequired() {\n            gen.forOf(\"prop\", schemaCode, (prop) => {\n                cxt.setParams({ missingProperty: prop });\n                gen.if((0, code_1.noPropertyInData)(gen, data, prop, opts.ownProperties), () => cxt.error());\n            });\n        }\n        function loopUntilMissing(missing, valid) {\n            cxt.setParams({ missingProperty: missing });\n            gen.forOf(missing, schemaCode, () => {\n                gen.assign(valid, (0, code_1.propertyInData)(gen, data, missing, opts.ownProperties));\n                gen.if((0, codegen_1.not)(valid), () => {\n                    cxt.error();\n                    gen.break();\n                });\n            }, codegen_1.nil);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=required.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dataType_1 = require(\"../../compile/validate/dataType\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n    message: ({ params: { i, j } }) => (0, codegen_1.str) `must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n    params: ({ params: { i, j } }) => (0, codegen_1._) `{i: ${i}, j: ${j}}`,\n};\nconst def = {\n    keyword: \"uniqueItems\",\n    type: \"array\",\n    schemaType: \"boolean\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, data, $data, schema, parentSchema, schemaCode, it } = cxt;\n        if (!$data && !schema)\n            return;\n        const valid = gen.let(\"valid\");\n        const itemTypes = parentSchema.items ? (0, dataType_1.getSchemaTypes)(parentSchema.items) : [];\n        cxt.block$data(valid, validateUniqueItems, (0, codegen_1._) `${schemaCode} === false`);\n        cxt.ok(valid);\n        function validateUniqueItems() {\n            const i = gen.let(\"i\", (0, codegen_1._) `${data}.length`);\n            const j = gen.let(\"j\");\n            cxt.setParams({ i, j });\n            gen.assign(valid, true);\n            gen.if((0, codegen_1._) `${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j));\n        }\n        function canOptimize() {\n            return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\");\n        }\n        function loopN(i, j) {\n            const item = gen.name(\"item\");\n            const wrongType = (0, dataType_1.checkDataTypes)(itemTypes, item, it.opts.strictNumbers, dataType_1.DataType.Wrong);\n            const indices = gen.const(\"indices\", (0, codegen_1._) `{}`);\n            gen.for((0, codegen_1._) `;${i}--;`, () => {\n                gen.let(item, (0, codegen_1._) `${data}[${i}]`);\n                gen.if(wrongType, (0, codegen_1._) `continue`);\n                if (itemTypes.length > 1)\n                    gen.if((0, codegen_1._) `typeof ${item} == \"string\"`, (0, codegen_1._) `${item} += \"_\"`);\n                gen\n                    .if((0, codegen_1._) `typeof ${indices}[${item}] == \"number\"`, () => {\n                    gen.assign(j, (0, codegen_1._) `${indices}[${item}]`);\n                    cxt.error();\n                    gen.assign(valid, false).break();\n                })\n                    .code((0, codegen_1._) `${indices}[${item}] = ${i}`);\n            });\n        }\n        function loopN2(i, j) {\n            const eql = (0, util_1.useFunc)(gen, equal_1.default);\n            const outer = gen.name(\"outer\");\n            gen.label(outer).for((0, codegen_1._) `;${i}--;`, () => gen.for((0, codegen_1._) `${j} = ${i}; ${j}--;`, () => gen.if((0, codegen_1._) `${eql}(${data}[${i}], ${data}[${j}])`, () => {\n                cxt.error();\n                gen.assign(valid, false).break(outer);\n            })));\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=uniqueItems.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n/**\n * Identifiers of commands registered by shortcuts UI.\n */\nexport var CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.editBinding = 'shortcuts:edit-keybinding';\n    CommandIDs.addBinding = 'shortcuts:add-keybinding';\n    CommandIDs.deleteBinding = 'shortcuts:delete-keybinding';\n    CommandIDs.toggleSelectors = 'shortcuts:toggle-selectors';\n    CommandIDs.resetAll = 'shortcuts:reset-all';\n})(CommandIDs || (CommandIDs = {}));\n//# sourceMappingURL=types.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport * as React from 'react';\nimport { JSONExt } from '@lumino/coreutils';\nimport { EN_US } from '@lumino/keyboard';\nimport { checkIcon, errorIcon } from '@jupyterlab/ui-components';\nexport const CONFLICT_CONTAINER_CLASS = 'jp-Shortcuts-ConflictContainer';\nexport class ShortcutInput extends React.Component {\n    constructor(props) {\n        super(props);\n        this.handleSubmit = async () => {\n            if (!this._isReplacingExistingKeybinding) {\n                await this._updateShortcut();\n                this.props.toggleInput();\n            }\n            else {\n                /** don't replace if field has not been edited */\n                if (this.state.selected) {\n                    this.props.toggleInput();\n                }\n                else {\n                    await this._updateShortcut();\n                }\n            }\n        };\n        this._updateShortcut = async () => {\n            const keys = [...this.state.keys, this.state.currentChain];\n            this.setState({ keys });\n            if (this.props.keybinding) {\n                await this.props.replaceKeybinding(this.props.shortcut, this.props.keybinding, keys);\n            }\n            else {\n                await this.props.addKeybinding(this.props.shortcut, keys);\n            }\n        };\n        this._handleOverwrite = async (conflicts, keys) => {\n            for (const conflict of conflicts) {\n                const conflictingBinding = conflict.keybindings.filter(binding => JSONExt.deepEqual(binding.keys, keys) ||\n                    keys.some(key => JSONExt.deepEqual(binding.keys, [key])))[0];\n                if (!conflictingBinding) {\n                    console.error(`Conflicting binding could not be found for ${conflict} using keys ${keys}`);\n                    continue;\n                }\n                await this.props.deleteKeybinding(conflict, conflictingBinding);\n            }\n            await this._updateShortcut();\n        };\n        /** Parse user input for chained shortcuts */\n        this.parseChaining = (event, value, userInput, keys, currentChain) => {\n            let key = EN_US.keyForKeydownEvent(event.nativeEvent);\n            const modKeys = ['Shift', 'Control', 'Alt', 'Meta', 'Ctrl', 'Accel'];\n            if (event.key === 'Backspace') {\n                userInput = '';\n                value = '';\n                keys = [];\n                currentChain = '';\n                this.setState({\n                    value: value,\n                    userInput: userInput,\n                    keys: keys,\n                    currentChain: currentChain\n                });\n            }\n            else if (event.key !== 'CapsLock') {\n                const lastKey = userInput\n                    .substr(userInput.lastIndexOf(' ') + 1, userInput.length)\n                    .trim();\n                /** if last key was not a modifier then there is a chain */\n                if (modKeys.lastIndexOf(lastKey) === -1 && lastKey != '') {\n                    userInput = userInput + ',';\n                    keys.push(currentChain);\n                    currentChain = '';\n                    /** check if a modifier key was held down through chain */\n                    if (event.ctrlKey && event.key != 'Control') {\n                        userInput = (userInput + ' Ctrl').trim();\n                        currentChain = (currentChain + ' Ctrl').trim();\n                    }\n                    if (event.metaKey && event.key != 'Meta') {\n                        userInput = (userInput + ' Accel').trim();\n                        currentChain = (currentChain + ' Accel').trim();\n                    }\n                    if (event.altKey && event.key != 'Alt') {\n                        userInput = (userInput + ' Alt').trim();\n                        currentChain = (currentChain + ' Alt').trim();\n                    }\n                    if (event.shiftKey && event.key != 'Shift') {\n                        userInput = (userInput + ' Shift').trim();\n                        currentChain = (currentChain + ' Shift').trim();\n                    }\n                    /** if not a modifier key, add to user input and current chain */\n                    if (modKeys.lastIndexOf(event.key) === -1) {\n                        userInput = (userInput + ' ' + key).trim();\n                        currentChain = (currentChain + ' ' + key).trim();\n                        /** if a modifier key, add to user input and current chain */\n                    }\n                    else {\n                        if (event.key === 'Meta') {\n                            userInput = (userInput + ' Accel').trim();\n                            currentChain = (currentChain + ' Accel').trim();\n                        }\n                        else if (event.key === 'Control') {\n                            userInput = (userInput + ' Ctrl').trim();\n                            currentChain = (currentChain + ' Ctrl').trim();\n                        }\n                        else if (event.key === 'Shift') {\n                            userInput = (userInput + ' Shift').trim();\n                            currentChain = (currentChain + ' Shift').trim();\n                        }\n                        else if (event.key === 'Alt') {\n                            userInput = (userInput + ' Alt').trim();\n                            currentChain = (currentChain + ' Alt').trim();\n                        }\n                        else {\n                            userInput = (userInput + ' ' + event.key).trim();\n                            currentChain = (currentChain + ' ' + event.key).trim();\n                        }\n                    }\n                    /** if not a chain, add the key to user input and current chain */\n                }\n                else {\n                    /** if modifier key, rename */\n                    if (event.key === 'Control') {\n                        userInput = (userInput + ' Ctrl').trim();\n                        currentChain = (currentChain + ' Ctrl').trim();\n                    }\n                    else if (event.key === 'Meta') {\n                        userInput = (userInput + ' Accel').trim();\n                        currentChain = (currentChain + ' Accel').trim();\n                    }\n                    else if (event.key === 'Shift') {\n                        userInput = (userInput + ' Shift').trim();\n                        currentChain = (currentChain + ' Shift').trim();\n                    }\n                    else if (event.key === 'Alt') {\n                        userInput = (userInput + ' Alt').trim();\n                        currentChain = (currentChain + ' Alt').trim();\n                        /** if not a modifier key, add it regularly */\n                    }\n                    else {\n                        userInput = (userInput + ' ' + key).trim();\n                        currentChain = (currentChain + ' ' + key).trim();\n                    }\n                }\n            }\n            /** update state of keys and currentChain */\n            this.setState({\n                keys: keys,\n                currentChain: currentChain\n            });\n            return [userInput, keys, currentChain];\n        };\n        /**\n         * Check if shortcut being typed will work\n         * (does not end with ctrl, alt, command, or shift)\n         * */\n        this.checkNonFunctional = () => {\n            const dontEnd = ['Ctrl', 'Alt', 'Accel', 'Shift'];\n            const shortcutKeys = this.state.currentChain.split(' ');\n            const last = shortcutKeys[shortcutKeys.length - 1];\n            this.setState({\n                isFunctional: !(dontEnd.indexOf(last) !== -1)\n            });\n            return dontEnd.indexOf(last) !== -1;\n        };\n        /** Check if shortcut being typed is already taken */\n        this.checkShortcutAvailability = (userInput, keys, currentChain) => {\n            const conflicts = this.props.findConflictsFor([...keys, currentChain], this.props.shortcut.selector);\n            const isAvailable = userInput === '' || conflicts.length === 0;\n            // Allow to set shortcut to what it initially was if replacing.\n            if (!isAvailable) {\n                // TODO: should we keep this logic? It masks what may be a genuine\n                // conflict in the defaults or between extensions; ideally we would\n                // allow saving, but still warn the user.\n                if (conflicts.length === 1 &&\n                    conflicts[0].id === this.props.shortcut.id &&\n                    this._isReplacingExistingKeybinding) {\n                    this.setState({ isAvailable: true });\n                    return [];\n                }\n            }\n            this.setState({ isAvailable: isAvailable });\n            return conflicts;\n        };\n        /** Parse and normalize user input */\n        this.handleInput = (event) => {\n            event.preventDefault();\n            this.setState({ selected: false });\n            const parsed = this.parseChaining(event, this.state.value, this.state.userInput, this.state.keys, this.state.currentChain);\n            const userInput = parsed[0];\n            const keys = parsed[1];\n            const currentChain = parsed[2];\n            const value = this.props.toSymbols(userInput);\n            let conflicts = this.checkShortcutAvailability(userInput, keys, currentChain);\n            this.setState({\n                value: value,\n                userInput: userInput,\n                keys: keys,\n                currentChain: currentChain\n            }, () => {\n                this.checkNonFunctional();\n                this._emitConflicts(conflicts);\n            });\n        };\n        this._handleBlur = (event) => {\n            var _a, _b;\n            if ((_a = this._ref.current) === null || _a === void 0 ? void 0 : _a.contains(event.relatedTarget)) {\n                // Do not hide when clicking inside the input\n                return;\n            }\n            if ((_b = event.relatedTarget) === null || _b === void 0 ? void 0 : _b.closest(`.${CONFLICT_CONTAINER_CLASS}`)) {\n                // Do not hide input when clicking on conflict container as this would destroy the state\n                return;\n            }\n            // Hide the input\n            this.props.toggleInput();\n        };\n        this._ref = React.createRef();\n        this.state = {\n            value: this.props.placeholder,\n            userInput: '',\n            isAvailable: true,\n            isFunctional: this._isReplacingExistingKeybinding,\n            keys: [],\n            currentChain: '',\n            selected: true\n        };\n    }\n    /** Whether this input replaces existing keybinding or creates a new one */\n    get _isReplacingExistingKeybinding() {\n        return !!this.props.keybinding;\n    }\n    _emitConflicts(conflicts) {\n        const keys = [...this.state.keys, this.state.currentChain];\n        this.props.displayConflicts({\n            conflictsWith: conflicts,\n            keys: this.state.keys,\n            overwrite: async () => {\n                this.setState({\n                    // Since user decided to overwrite, no need to show it as conflicted anymore\n                    isAvailable: true\n                });\n                // Try to overwrite\n                await this._handleOverwrite(conflicts, keys);\n                // Only hide the input after the overwrite took place\n                this.props.toggleInput();\n            },\n            cancel: () => {\n                // Hide the input\n                this.props.toggleInput();\n            }\n        });\n    }\n    render() {\n        const trans = this.props.translator.load('jupyterlab');\n        let inputClassName = 'jp-Shortcuts-Input';\n        if (!this.state.isAvailable) {\n            inputClassName += ' jp-mod-unavailable-Input';\n        }\n        return (React.createElement(\"div\", { className: this.props.displayInput\n                ? !this._isReplacingExistingKeybinding\n                    ? 'jp-Shortcuts-InputBox jp-Shortcuts-InputBoxNew'\n                    : 'jp-Shortcuts-InputBox'\n                : 'jp-mod-hidden', ref: this._ref, onBlur: this._handleBlur },\n            React.createElement(\"div\", { tabIndex: 0, className: inputClassName, onKeyDown: this.handleInput, ref: input => input && input.focus(), \"data-lm-suppress-shortcuts\": \"true\" },\n                React.createElement(\"p\", { className: this.state.selected && this._isReplacingExistingKeybinding\n                        ? 'jp-Shortcuts-InputText jp-mod-selected-InputText'\n                        : this.state.value === ''\n                            ? 'jp-Shortcuts-InputText jp-mod-waiting-InputText'\n                            : 'jp-Shortcuts-InputText' }, this.state.value === ''\n                    ? trans.__('press keys')\n                    : this.state.value)),\n            React.createElement(\"button\", { className: !this.state.isFunctional\n                    ? 'jp-Shortcuts-Submit jp-mod-defunc-Submit'\n                    : !this.state.isAvailable\n                        ? 'jp-Shortcuts-Submit jp-mod-conflict-Submit'\n                        : 'jp-Shortcuts-Submit', disabled: !this.state.isAvailable || !this.state.isFunctional, onClick: this.handleSubmit, tabIndex: 0 }, this.state.isAvailable ? React.createElement(checkIcon.react, null) : React.createElement(errorIcon.react, null))));\n    }\n}\n//# sourceMappingURL=ShortcutInput.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { Platform } from '@lumino/domutils';\nimport * as React from 'react';\nimport { CONFLICT_CONTAINER_CLASS, ShortcutInput } from './ShortcutInput';\n/** React component for each command shortcut item */\nexport class ShortcutItem extends React.Component {\n    constructor(props) {\n        super(props);\n        /** Toggle display state of input box */\n        this.toggleInputNew = () => {\n            this.setState({\n                displayNewInput: !this.state.displayNewInput,\n                // reset conflicts\n                conflicts: new Map()\n            });\n        };\n        /** Transform special key names into unicode characters */\n        this.toSymbols = (value) => {\n            return value.split(' ').reduce((result, key) => {\n                if (key === 'Ctrl') {\n                    return (result + ' ⌃').trim();\n                }\n                else if (key === 'Alt') {\n                    return (result + ' ⌥').trim();\n                }\n                else if (key === 'Shift') {\n                    return (result + ' ⇧').trim();\n                }\n                else if (key === 'Accel' && Platform.IS_MAC) {\n                    return (result + ' ⌘').trim();\n                }\n                else if (key === 'Accel') {\n                    return (result + ' ⌃').trim();\n                }\n                else {\n                    return (result + ' ' + key).trim();\n                }\n            }, '');\n        };\n        this._trans = this.props.external.translator.load('jupyterlab');\n        this.state = {\n            displayNewInput: false,\n            displayReplaceInput: Object.freeze({}),\n            conflicts: new Map()\n        };\n    }\n    componentDidMount() {\n        this.props.external.actionRequested.connect(this._onActionRequested, this);\n    }\n    componentWillUnmount() {\n        this.props.external.actionRequested.disconnect(this._onActionRequested, this);\n    }\n    async _onActionRequested(_, action) {\n        if ('shortcutId' in action &&\n            action.shortcutId !== this.props.shortcut.id) {\n            return;\n        }\n        if (action.request === 'add-keybinding') {\n            return this.toggleInputNew();\n        }\n        if (action.request === 'edit-keybinding') {\n            this.toggleInputReplaceMethod(action.keybinding);\n        }\n        if (action.request === 'delete-keybinding') {\n            const target = this.props.shortcut;\n            const binding = target.keybindings[action.keybinding];\n            this.props.deleteKeybinding(target, binding).catch(console.error);\n        }\n    }\n    getCategoryCell() {\n        return (React.createElement(\"div\", { className: \"jp-Shortcuts-Cell\" }, this.props.shortcut.category));\n    }\n    getLabelCell() {\n        var _a;\n        return (React.createElement(\"div\", { className: \"jp-Shortcuts-Cell\" },\n            React.createElement(\"div\", { className: \"jp-label\" }, (_a = this.props.shortcut.label) !== null && _a !== void 0 ? _a : this._trans.__('(Command label missing)'))));\n    }\n    getResetShortCutLink() {\n        return (React.createElement(\"a\", { className: \"jp-Shortcuts-Reset\", onClick: () => this.props.resetKeybindings(this.props.shortcut) }, this._trans.__('Reset')));\n    }\n    getSourceCell() {\n        const allDefault = this.props.shortcut.keybindings.every(binding => binding.isDefault);\n        return (React.createElement(\"div\", { className: \"jp-Shortcuts-Cell\" },\n            React.createElement(\"div\", { className: \"jp-Shortcuts-SourceCell\" }, allDefault ? this._trans.__('Default') : this._trans.__('Custom')),\n            !allDefault ? this.getResetShortCutLink() : ''));\n    }\n    getOptionalSelectorCell() {\n        return this.props.showSelectors ? (React.createElement(\"div\", { className: \"jp-Shortcuts-Cell\" },\n            React.createElement(\"div\", { className: \"jp-selector\" }, this.props.shortcut.selector))) : null;\n    }\n    getClassNameForShortCuts(nonEmptyBindings) {\n        const classes = ['jp-Shortcuts-ShortcutCell'];\n        switch (nonEmptyBindings.length) {\n            case 1:\n                classes.push('jp-Shortcuts-SingleCell');\n                break;\n            case 0:\n                classes.push('jp-Shortcuts-EmptyCell');\n                break;\n        }\n        return classes.join(' ');\n    }\n    toggleInputReplaceMethod(location) {\n        const previous = this.state.displayReplaceInput[location];\n        this.setState({\n            displayReplaceInput: {\n                ...this.state.displayReplaceInput,\n                [location]: !previous\n            },\n            // Clear old conflicts\n            conflicts: new Map()\n        });\n    }\n    getDisplayReplaceInput(location) {\n        return this.state.displayReplaceInput[location];\n    }\n    getOrDiplayIfNeeded(force) {\n        const classes = ['jp-Shortcuts-Or'];\n        if (force || this.state.displayNewInput) {\n            classes.push('jp-Shortcuts-Or-Forced');\n        }\n        return React.createElement(\"div\", { className: classes.join(' ') }, this._trans.__('or'));\n    }\n    getShortCutAsInput(binding, location) {\n        return (React.createElement(ShortcutInput, { addKeybinding: this.props.addKeybinding, replaceKeybinding: this.props.replaceKeybinding, deleteKeybinding: this.props.deleteKeybinding, findConflictsFor: this.props.findConflictsFor, toggleInput: () => this.toggleInputReplaceMethod(location), shortcut: this.props.shortcut, keybinding: binding, displayConflicts: (data) => {\n                const conflicts = new Map(this.state.conflicts);\n                conflicts.set(binding, data);\n                this.setState({ conflicts });\n            }, toSymbols: this.toSymbols, displayInput: this.getDisplayReplaceInput(location), placeholder: this.toSymbols(binding.keys.join(', ')), translator: this.props.external.translator }));\n    }\n    getShortCutForDisplayOnly(binding) {\n        return binding.keys.map((keyboardKey, index) => (React.createElement(\"div\", { className: \"jp-Shortcuts-ShortcutKeysContainer\", key: index },\n            React.createElement(\"div\", { className: \"jp-Shortcuts-ShortcutKeys\" }, this.toSymbols(keyboardKey)),\n            index + 1 < binding.keys.length ? (React.createElement(\"div\", { className: \"jp-Shortcuts-Comma\" }, \",\")) : null)));\n    }\n    isLocationBeingEdited(location) {\n        return this.state.displayReplaceInput[location];\n    }\n    getDivForKey(index, binding, nonEmptyBindings) {\n        return (React.createElement(\"div\", { className: \"jp-Shortcuts-ShortcutContainer\", key: this.props.shortcut.id + '_' + index, \"data-keybinding\": index, \"data-shortcut\": this.props.shortcut.id, onClick: () => this.toggleInputReplaceMethod(index) },\n            this.isLocationBeingEdited(index)\n                ? this.getShortCutAsInput(binding, index)\n                : this.getShortCutForDisplayOnly(binding),\n            !(index === this._nonEmptyBindings.length - 1 &&\n                Object.values(this.state.displayReplaceInput).some(Boolean)) &&\n                this.getOrDiplayIfNeeded(index < this._nonEmptyBindings.length - 1)));\n    }\n    getAddLink() {\n        return (React.createElement(\"a\", { className: !this.state.displayNewInput ? 'jp-Shortcuts-Plus' : '', onClick: () => {\n                this.toggleInputNew();\n            } }, this._trans.__('Add')));\n    }\n    getInputBoxWhenToggled() {\n        return this.state.displayNewInput ? (React.createElement(ShortcutInput, { addKeybinding: this.props.addKeybinding, replaceKeybinding: this.props.replaceKeybinding, deleteKeybinding: this.props.deleteKeybinding, findConflictsFor: this.props.findConflictsFor, toggleInput: this.toggleInputNew, shortcut: this.props.shortcut, displayConflicts: (data) => {\n                const conflicts = new Map(this.state.conflicts);\n                conflicts.set(null, data);\n                this.setState({ conflicts });\n            }, toSymbols: this.toSymbols, displayInput: this.state.displayNewInput, placeholder: '', translator: this.props.external.translator })) : (React.createElement(\"div\", null));\n    }\n    getShortCutsCell(nonEmptyBindings) {\n        return (React.createElement(\"div\", { className: \"jp-Shortcuts-Cell\" },\n            React.createElement(\"div\", { className: this.getClassNameForShortCuts(nonEmptyBindings) },\n                nonEmptyBindings.map((key, index) => this.getDivForKey(index, key, nonEmptyBindings)),\n                nonEmptyBindings.length >= 1 &&\n                    !this.state.displayNewInput &&\n                    !Object.values(this.state.displayReplaceInput).some(Boolean) &&\n                    this.getAddLink(),\n                nonEmptyBindings.length === 0 &&\n                    !this.state.displayNewInput &&\n                    this.getAddLink(),\n                this.getInputBoxWhenToggled())));\n    }\n    getConflicts() {\n        const conflicts = [...this.state.conflicts.values()].filter(conflict => conflict.conflictsWith.length !== 0);\n        if (conflicts.length === 0) {\n            return React.createElement(React.Fragment, null);\n        }\n        return (React.createElement(\"div\", { className: \"jp-Shortcuts-Row jp-Shortcuts-RowWithConflict\" },\n            React.createElement(\"div\", { className: CONFLICT_CONTAINER_CLASS }, conflicts.map(conflict => {\n                const key = conflict.keys.join(' ') +\n                    '_' +\n                    conflict.conflictsWith.map(target => target.id).join('');\n                return (React.createElement(\"div\", { className: \"jp-Shortcuts-Conflict\", key: key },\n                    React.createElement(\"div\", { className: \"jp-Shortcuts-ErrorMessage\" }, this._trans.__('Shortcut already in use by %1. Overwrite it?', conflict.conflictsWith\n                        .map(target => { var _a; return (_a = target.label) !== null && _a !== void 0 ? _a : target.command; })\n                        .join(', '))),\n                    React.createElement(\"div\", { className: \"jp-Shortcuts-ErrorButton\" },\n                        React.createElement(\"button\", { className: \"jp-Button jp-mod-reject jp-mod-styled\", onClick: () => {\n                                this._clearConflict(conflict);\n                                conflict.cancel();\n                            } }, this._trans.__('Cancel')),\n                        React.createElement(\"button\", { className: \"jp-Button jp-mod-warn jp-mod-styled\", onClick: () => {\n                                // Clear the conflict first to prevent user from accidentally clicking this button twice\n                                this._clearConflict(conflict);\n                                conflict.overwrite();\n                            } }, this._trans.__('Overwrite')))));\n            }))));\n    }\n    /**\n     * Mark conflict as resolved.\n     */\n    _clearConflict(conflictToClear) {\n        const conflicts = new Map();\n        const idToSkip = this._conflictId(conflictToClear);\n        for (const [binding, conflict] of this.state.conflicts.entries()) {\n            if (this._conflictId(conflict) !== idToSkip) {\n                conflicts.set(binding, conflict);\n            }\n        }\n        this.setState({ conflicts });\n    }\n    /**\n     * Create a unique conflict identifier.\n     */\n    _conflictId(conflict) {\n        return (conflict.keys.join(' ') +\n            '_' +\n            conflict.conflictsWith.map(target => target.id).join(''));\n    }\n    get _nonEmptyBindings() {\n        return this.props.shortcut.keybindings.filter(binding => binding.keys.filter(k => k != '').length !== 0);\n    }\n    render() {\n        return (React.createElement(React.Fragment, null,\n            React.createElement(\"div\", { className: \"jp-Shortcuts-Row\", \"data-shortcut\": this.props.shortcut.id },\n                this.getCategoryCell(),\n                this.getLabelCell(),\n                this.getShortCutsCell(this._nonEmptyBindings),\n                this.getSourceCell(),\n                this.getOptionalSelectorCell()),\n            this.getConflicts()));\n    }\n}\n//# sourceMappingURL=ShortcutItem.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport * as React from 'react';\nimport { ShortcutItem } from './ShortcutItem';\nconst TOPNAV_HEIGHT = 115;\n/** React component for list of shortcuts */\nexport class ShortcutList extends React.Component {\n    render() {\n        return (React.createElement(\"div\", { className: \"jp-Shortcuts-ShortcutListContainer\", style: {\n                height: `${this.props.height - TOPNAV_HEIGHT}px`\n            }, id: \"shortcutListContainer\" },\n            React.createElement(\"div\", { className: \"jp-Shortcuts-ShortcutList\" }, this.props.shortcuts.map((shortcut) => {\n                return (React.createElement(ShortcutItem, { key: shortcut.id, addKeybinding: this.props.addKeybinding, replaceKeybinding: this.props.replaceKeybinding, deleteKeybinding: this.props.deleteKeybinding, resetKeybindings: this.props.resetKeybindings, findConflictsFor: this.props.findConflictsFor, shortcut: shortcut, showSelectors: this.props.showSelectors, external: this.props.external }));\n            }))));\n    }\n}\n//# sourceMappingURL=ShortcutList.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { caretDownEmptyThinIcon } from '@jupyterlab/ui-components';\nimport * as React from 'react';\nexport class ShortcutTitleItem extends React.Component {\n    render() {\n        return (React.createElement(\"div\", { className: this.props.title.toLowerCase() === this.props.active\n                ? 'jp-Shortcuts-Header jp-Shortcuts-CurrentHeader'\n                : 'jp-Shortcuts-Header', onClick: () => this.props.updateSort(this.props.columnId) },\n            this.props.title,\n            React.createElement(caretDownEmptyThinIcon.react, { className: 'jp-Shortcuts-SortButton jp-ShortcutTitleItem-sortButton' })));\n    }\n}\n//# sourceMappingURL=ShortcutTitleItem.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { FilterBox } from '@jupyterlab/ui-components';\nimport * as React from 'react';\nimport { ShortcutTitleItem } from './ShortcutTitleItem';\nfunction Symbols(props) {\n    return (React.createElement(\"div\", { className: \"jp-Shortcuts-Symbols\" },\n        React.createElement(\"table\", null,\n            React.createElement(\"tbody\", null,\n                React.createElement(\"tr\", null,\n                    React.createElement(\"td\", null,\n                        React.createElement(\"kbd\", null, \"Cmd\")),\n                    React.createElement(\"td\", null, \"\\u2318\"),\n                    React.createElement(\"td\", null,\n                        React.createElement(\"kbd\", null, \"Ctrl\")),\n                    React.createElement(\"td\", null, \"\\u2303\")),\n                React.createElement(\"tr\", null,\n                    React.createElement(\"td\", null,\n                        React.createElement(\"kbd\", null, \"Alt\")),\n                    React.createElement(\"td\", null, \"\\u2325\"),\n                    React.createElement(\"td\", null,\n                        React.createElement(\"kbd\", null, \"Shift\")),\n                    React.createElement(\"td\", null, \"\\u21E7\"))))));\n}\nfunction AdvancedOptions(props) {\n    const trans = props.translator.load('jupyterlab');\n    return (React.createElement(\"div\", { className: \"jp-Shortcuts-AdvancedOptions\" },\n        React.createElement(\"a\", { className: \"jp-Shortcuts-AdvancedOptionsLink\", onClick: () => props.toggleSelectors() }, props.showSelectors\n            ? trans.__('Hide Selectors')\n            : trans.__('Show Selectors')),\n        React.createElement(\"a\", { className: \"jp-Shortcuts-AdvancedOptionsLink\", onClick: () => props.resetShortcuts() }, trans.__('Reset All'))));\n}\n/** React component for top navigation */\nexport class TopNav extends React.Component {\n    constructor(props) {\n        super(props);\n    }\n    getShortCutTitleItem(title, columnId) {\n        return (React.createElement(\"div\", { className: \"jp-Shortcuts-Cell\" },\n            React.createElement(ShortcutTitleItem, { title: title, updateSort: this.props.updateSort, active: this.props.currentSort, columnId: columnId })));\n    }\n    render() {\n        const trans = this.props.translator.load('jupyterlab');\n        return (React.createElement(\"div\", { className: \"jp-Shortcuts-Top\" },\n            React.createElement(\"div\", { className: \"jp-Shortcuts-TopNav\" },\n                React.createElement(Symbols, null),\n                React.createElement(FilterBox, { \"aria-label\": trans.__('Search shortcuts'), updateFilter: (_, query) => this.props.updateSearchQuery(query !== null && query !== void 0 ? query : ''), placeholder: trans.__('Search…'), useFuzzyFilter: false }),\n                React.createElement(AdvancedOptions, { toggleSelectors: this.props.toggleSelectors, showSelectors: this.props.showSelectors, resetShortcuts: this.props.resetShortcuts, translator: this.props.translator })),\n            React.createElement(\"div\", { className: \"jp-Shortcuts-HeaderRowContainer\" },\n                React.createElement(\"div\", { className: \"jp-Shortcuts-HeaderRow\" },\n                    this.getShortCutTitleItem(trans.__('Category'), 'category'),\n                    this.getShortCutTitleItem(trans.__('Command'), 'command'),\n                    React.createElement(\"div\", { className: \"jp-Shortcuts-Cell\" },\n                        React.createElement(\"div\", { className: \"title-div\" }, trans.__('Shortcut'))),\n                    this.getShortCutTitleItem(trans.__('Source'), 'source'),\n                    this.props.showSelectors &&\n                        this.getShortCutTitleItem(trans.__('Selectors'), 'selector')))));\n    }\n}\n//# sourceMappingURL=TopNav.js.map","/**\n * Shortcut registry used by Shortcut UI component.\n */\nexport class ShortcutRegistry extends Map {\n    constructor(options) {\n        var _a, _b, _c;\n        super();\n        const { settings, commandRegistry } = options;\n        const userBindings = (_a = settings.user.shortcuts) !== null && _a !== void 0 ? _a : [];\n        const setByUser = new Set(userBindings.map(this._computeKeybindingId.bind(this)));\n        const luminoKeybindings = (_b = settings.composite.shortcuts) !== null && _b !== void 0 ? _b : [];\n        for (const shortcut of luminoKeybindings) {\n            const targetKey = this._computeTargetId(shortcut);\n            const keybindingKey = this._computeKeybindingId(shortcut);\n            const keybinding = {\n                keys: shortcut.keys,\n                isDefault: !setByUser.has(keybindingKey)\n            };\n            const shortcutTarget = this.get(targetKey);\n            if (shortcutTarget) {\n                shortcutTarget.keybindings.push(keybinding);\n            }\n            else {\n                const commandParts = shortcut.command.split(':');\n                const label = (_c = commandRegistry.label(shortcut.command, shortcut.args)) !== null && _c !== void 0 ? _c : (commandParts.length > 1 ? commandParts[1] : undefined);\n                const category = commandParts[0];\n                this.set(targetKey, {\n                    id: targetKey,\n                    selector: shortcut.selector,\n                    command: shortcut.command,\n                    category,\n                    label,\n                    args: shortcut.args,\n                    keybindings: [keybinding]\n                });\n            }\n        }\n    }\n    /**\n     * Find targets that would conflict with given keys chord under given sequence.\n     */\n    findConflictsFor(keys, selector) {\n        const checker = new KeybindingsConflictChecker({ registry: this });\n        // First check the full chain\n        let conflicts = checker.findConflicts(keys, selector);\n        if (conflicts.length !== 0) {\n            return conflicts;\n        }\n        // Then check each piece of the chain\n        for (const binding of keys) {\n            conflicts = checker.findConflicts([binding], selector);\n            if (conflicts.length !== 0) {\n                return conflicts;\n            }\n        }\n        return [];\n    }\n    _computeTargetId(shortcut) {\n        var _a;\n        return (shortcut.command +\n            '_' +\n            shortcut.selector +\n            '_' +\n            JSON.stringify((_a = shortcut.args) !== null && _a !== void 0 ? _a : {}));\n    }\n    _computeKeybindingId(shortcut) {\n        var _a;\n        return [\n            shortcut.command,\n            shortcut.selector,\n            JSON.stringify((_a = shortcut.args) !== null && _a !== void 0 ? _a : {}),\n            shortcut.keys.join(' ')\n        ].join('_');\n    }\n}\n/**\n * Allows checking if a given keybinding is available, or directly conflicts with other targets.\n */\nclass KeybindingsConflictChecker {\n    constructor(options) {\n        var _a;\n        const keybindingsMap = new Map();\n        for (const shortcutTarget of options.registry.values()) {\n            for (const keybinding of shortcutTarget.keybindings) {\n                const hash = this._keybindingHash(keybinding.keys, shortcutTarget.selector);\n                const list = (_a = keybindingsMap.get(hash)) !== null && _a !== void 0 ? _a : [];\n                list.push(shortcutTarget);\n                keybindingsMap.set(hash, list);\n            }\n        }\n        this._keybindingsMap = keybindingsMap;\n    }\n    findConflicts(keys, selector) {\n        var _a;\n        const hash = this._keybindingHash(keys, selector);\n        return (_a = this._keybindingsMap.get(hash)) !== null && _a !== void 0 ? _a : [];\n    }\n    _keybindingHash(keys, selector) {\n        return keys.join(' ') + '_' + selector;\n    }\n}\n//# sourceMappingURL=registry.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { ArrayExt, StringExt } from '@lumino/algorithm';\nimport { JSONExt } from '@lumino/coreutils';\nimport { ShortcutList } from './ShortcutList';\nimport { TopNav } from './TopNav';\nimport { ShortcutRegistry } from '../registry';\nimport * as React from 'react';\n/** Normalize the query text for a fuzzy search. */\nfunction normalizeQuery(text) {\n    return text.replace(/\\s+/g, '').toLowerCase();\n}\n/** Perform a fuzzy search on a single command item. */\nfunction fuzzySearch(item, query) {\n    var _a;\n    // Create the source text to be searched.\n    const category = item.category.toLowerCase();\n    const label = ((_a = item['label']) !== null && _a !== void 0 ? _a : '').toLowerCase();\n    const source = `${category} ${label}`;\n    // Set up the match score and indices array.\n    let score = Infinity;\n    let indices = null;\n    // The regex for search word boundaries\n    const rgx = /\\b\\w/g;\n    // Search the source by word boundary.\n    // eslint-disable-next-line\n    while (true) {\n        // Find the next word boundary in the source.\n        const rgxMatch = rgx.exec(source);\n        // Break if there is no more source context.\n        if (!rgxMatch) {\n            break;\n        }\n        // Run the string match on the relevant substring.\n        const match = StringExt.matchSumOfDeltas(source, query, rgxMatch.index);\n        // Break if there is no match.\n        if (!match) {\n            break;\n        }\n        // Update the match if the score is better.\n        if (match && match.score <= score) {\n            score = match.score;\n            indices = match.indices;\n        }\n    }\n    // Bail if there was no match.\n    if (!indices || score === Infinity) {\n        return null;\n    }\n    // Compute the pivot index between category and label text.\n    const pivot = category.length + 1;\n    // Find the slice index to separate matched indices.\n    const j = ArrayExt.lowerBound(indices, pivot, (a, b) => a - b);\n    // Extract the matched category and label indices.\n    const categoryIndices = indices.slice(0, j);\n    const labelIndices = indices.slice(j);\n    // Adjust the label indices for the pivot offset.\n    for (let i = 0, n = labelIndices.length; i < n; ++i) {\n        labelIndices[i] -= pivot;\n    }\n    // Handle a pure label match.\n    if (categoryIndices.length === 0) {\n        return {\n            matchType: 0 /* MatchType.Label */,\n            categoryIndices: null,\n            labelIndices,\n            score,\n            item\n        };\n    }\n    // Handle a pure category match.\n    if (labelIndices.length === 0) {\n        return {\n            matchType: 1 /* MatchType.Category */,\n            categoryIndices,\n            labelIndices: null,\n            score,\n            item\n        };\n    }\n    // Handle a split match.\n    return {\n        matchType: 2 /* MatchType.Split */,\n        categoryIndices,\n        labelIndices,\n        score,\n        item\n    };\n}\n/** Perform a fuzzy match on an array of command items. */\nfunction matchItems(items, query) {\n    // Normalize the query text to lower case with no whitespace.\n    query = normalizeQuery(query);\n    // Create the array to hold the scores.\n    let scores = [];\n    // Iterate over the items and match against the query.\n    for (const item of items.values()) {\n        // If the query is empty, all items are matched by default.\n        if (!query) {\n            scores.push({\n                matchType: 3 /* MatchType.Default */,\n                categoryIndices: null,\n                labelIndices: null,\n                score: 0,\n                item\n            });\n            continue;\n        }\n        // Run the fuzzy search for the item and query.\n        let score = fuzzySearch(item, query);\n        // Ignore the item if it is not a match.\n        if (!score) {\n            continue;\n        }\n        // Add the score to the results.\n        scores.push(score);\n    }\n    // Return the final array of scores.\n    return scores;\n}\n/** Top level React component for widget */\nexport class ShortcutUI extends React.Component {\n    constructor(props) {\n        super(props);\n        /** Set the current search query */\n        this.updateSearchQuery = (query) => {\n            this.setState({\n                searchQuery: query\n            }, () => {\n                const registry = this.state.shortcutRegistry;\n                this.setState({\n                    filteredShortcutList: this._searchFilterShortcuts(registry)\n                }, () => {\n                    this.sortShortcuts();\n                });\n            });\n        };\n        /**\n         * Reset all keybindings to their defaults\n         */\n        this.resetShortcuts = async () => {\n            const settings = await this.props.external.getSettings();\n            await settings.set('shortcuts', []);\n            await this._refreshShortcutList();\n        };\n        /**\n         * Reset keybindings for given target to defaults.\n         */\n        this.resetKeybindings = async (target) => {\n            await this._setKeybinding(target, []);\n        };\n        /**\n         * Replace the given keybinding with a new keybinding as defined by given keys.\n         */\n        this.replaceKeybinding = async (target, keybinding, keys) => {\n            return this._setKeybinding(target, keys, keybinding);\n        };\n        /**\n         * Delete a single keybinding for given shortcut target.\n         */\n        this.deleteKeybinding = async (target, keybinding) => {\n            await this._setKeybinding(target, [], keybinding);\n        };\n        /**\n         * Add a new keybinding.\n         */\n        this.addKeybinding = async (target, keys) => {\n            await this._setKeybinding(target, keys);\n        };\n        /** Toggles showing command selectors */\n        this.toggleSelectors = () => {\n            this.setState({ showSelectors: !this.state.showSelectors });\n        };\n        /**\n         * Set the sort order for the shortcuts listing.\n         */\n        this.updateSort = (value) => {\n            if (value !== this.state.currentSort) {\n                this.setState({ currentSort: value }, this.sortShortcuts);\n            }\n        };\n        this.state = {\n            shortcutRegistry: null,\n            filteredShortcutList: new Array(),\n            shortcutsFetched: false,\n            searchQuery: '',\n            showSelectors: false,\n            currentSort: 'category'\n        };\n    }\n    /** Fetch shortcut list on mount */\n    componentDidMount() {\n        this.props.external.actionRequested.connect(this._onActionRequested, this);\n        void this._refreshShortcutList();\n    }\n    componentWillUnmount() {\n        this.props.external.actionRequested.disconnect(this._onActionRequested, this);\n    }\n    async _onActionRequested(_, action) {\n        if (action.request === 'toggle-selectors') {\n            return this.toggleSelectors();\n        }\n        if (action.request === 'reset-all') {\n            await this.resetShortcuts();\n        }\n    }\n    /** Fetch shortcut list from SettingRegistry  */\n    async _refreshShortcutList() {\n        const settings = await this.props.external.getSettings();\n        const shortcutRegistry = new ShortcutRegistry({\n            commandRegistry: this.props.external.commandRegistry,\n            settings\n        });\n        this.setState({\n            shortcutRegistry: shortcutRegistry,\n            filteredShortcutList: this._searchFilterShortcuts(shortcutRegistry),\n            shortcutsFetched: true\n        }, () => {\n            this.sortShortcuts();\n        });\n    }\n    /** Filter shortcut list using current search query */\n    _searchFilterShortcuts(registry) {\n        if (!registry) {\n            return [];\n        }\n        const filteredShortcuts = matchItems(registry, this.state.searchQuery).map((item) => {\n            return item.item;\n        });\n        return filteredShortcuts;\n    }\n    /**\n     * Replace the given keybinding with a new keybinding as defined by given keys.\n     *\n     * If keybinding is not given a new keybinding will be created.\n     * If keys are empty (or include a single empty string) the keybinding will be deleted.\n     * If keybinding is a default keybinding and the provided keys differ from default, it will be disabled.\n     */\n    async _setKeybinding(target, keys, keybinding) {\n        var _a, _b, _c, _d, _e;\n        if (keys.length === 1 && keys[0] == '') {\n            keys = [];\n        }\n        const settings = await this.props.external.getSettings();\n        const userShortcuts = (_a = settings.user.shortcuts) !== null && _a !== void 0 ? _a : [];\n        const newUserShortcuts = [];\n        let found = false;\n        // Copy over existing user keybindings\n        for (let shortcut of userShortcuts) {\n            // If this is the query keybinding, update it with new `keys`\n            if (shortcut.command === target.command &&\n                shortcut.selector === target.selector &&\n                JSONExt.deepEqual((_b = shortcut.args) !== null && _b !== void 0 ? _b : {}, (_c = target.args) !== null && _c !== void 0 ? _c : {}) &&\n                keybinding &&\n                JSONExt.deepEqual(keybinding.keys, shortcut.keys)) {\n                const matchesDefault = keybinding &&\n                    keybinding.isDefault &&\n                    JSONExt.deepEqual(keybinding.keys, keys);\n                // If the new `keys` are empty, do not copy this one over.\n                // Also, if the keybinding is a default keybinding and the desired\n                // new `keys` are the same as default, it does not need to be added.\n                if (keys.length !== 0 && !matchesDefault) {\n                    newUserShortcuts.push({\n                        command: shortcut.command,\n                        selector: shortcut.selector,\n                        keys: keys\n                    });\n                }\n                found = true;\n            }\n            else if (shortcut.command === target.command &&\n                shortcut.selector === target.selector &&\n                JSONExt.deepEqual((_d = shortcut.args) !== null && _d !== void 0 ? _d : {}, (_e = target.args) !== null && _e !== void 0 ? _e : {}) &&\n                !keybinding &&\n                keys.length === 0) {\n                continue;\n            }\n            else {\n                newUserShortcuts.push(shortcut);\n            }\n        }\n        if (!found) {\n            const requiresChange = !keybinding || !JSONExt.deepEqual(keybinding.keys, keys);\n            const shouldDisableDefault = keybinding && keybinding.isDefault && requiresChange;\n            if (shouldDisableDefault) {\n                // If the replaced keybinding is the default, disable it.\n                newUserShortcuts.push({\n                    command: target.command,\n                    selector: target.selector,\n                    disabled: true,\n                    keys: keybinding.keys\n                });\n            }\n            if (keys.length !== 0) {\n                newUserShortcuts.push({\n                    command: target.command,\n                    selector: target.selector,\n                    keys: keys\n                });\n            }\n        }\n        await settings.set('shortcuts', newUserShortcuts);\n        await this._refreshShortcutList();\n    }\n    /**\n     * Sort shortcut list using current sort property.\n     */\n    sortShortcuts() {\n        const shortcuts = this.state.filteredShortcutList;\n        let sortCriteria = this.state.currentSort;\n        if (sortCriteria === 'command') {\n            sortCriteria = 'label';\n        }\n        const getValue = (target) => {\n            var _a;\n            if (sortCriteria === 'source') {\n                return target.keybindings.every(k => k.isDefault) ? 'default' : 'other';\n            }\n            return (_a = target[sortCriteria]) !== null && _a !== void 0 ? _a : '';\n        };\n        shortcuts.sort((a, b) => {\n            var _a, _b;\n            const compareA = getValue(a);\n            const compareB = getValue(b);\n            const compareResult = compareA.localeCompare(compareB);\n            if (compareResult) {\n                return compareResult;\n            }\n            else {\n                const aLabel = (_a = a['label']) !== null && _a !== void 0 ? _a : '';\n                const bLabel = (_b = b['label']) !== null && _b !== void 0 ? _b : '';\n                return aLabel.localeCompare(bLabel);\n            }\n        });\n        this.setState({ filteredShortcutList: shortcuts });\n    }\n    render() {\n        if (!this.state.shortcutsFetched) {\n            return null;\n        }\n        return (React.createElement(\"div\", { className: \"jp-Shortcuts-ShortcutUI\", id: \"jp-shortcutui\" },\n            React.createElement(TopNav, { updateSearchQuery: this.updateSearchQuery, resetShortcuts: this.resetShortcuts, toggleSelectors: this.toggleSelectors, showSelectors: this.state.showSelectors, updateSort: this.updateSort, currentSort: this.state.currentSort, width: this.props.width, translator: this.props.external.translator }),\n            React.createElement(ShortcutList, { shortcuts: this.state.filteredShortcutList, resetKeybindings: this.resetKeybindings, addKeybinding: this.addKeybinding, replaceKeybinding: this.replaceKeybinding, deleteKeybinding: this.deleteKeybinding, showSelectors: this.state.showSelectors, findConflictsFor: (keys, selector) => {\n                    if (this.state.shortcutRegistry) {\n                        return this.state.shortcutRegistry.findConflictsFor(keys, selector);\n                    }\n                    else {\n                        console.error('Cannot search for keybinding conflicts at this time: registry is not ready');\n                        return [];\n                    }\n                }, height: this.props.height, external: this.props.external })));\n    }\n}\n//# sourceMappingURL=ShortcutUI.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport React from 'react';\nimport { ShortcutUI } from './components';\nexport const renderShortCut = (props) => {\n    return React.createElement(ShortcutUI, { external: props.external, height: 1000, width: 1000 });\n};\n//# sourceMappingURL=renderer.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module shortcuts-extension\n */\nimport { ISettingRegistry, SettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { IFormRendererRegistry } from '@jupyterlab/ui-components';\nimport { CommandRegistry } from '@lumino/commands';\nimport { JSONExt } from '@lumino/coreutils';\nimport { DisposableSet } from '@lumino/disposable';\nimport { Platform } from '@lumino/domutils';\nimport { CommandIDs } from './types';\nimport { renderShortCut } from './renderer';\nimport { Signal } from '@lumino/signaling';\nconst SHORTCUT_PLUGIN_ID = '@jupyterlab/shortcuts-extension:shortcuts';\nfunction getExternalForJupyterLab(settingRegistry, app, translator, actionRequested) {\n    return {\n        translator,\n        getSettings: () => settingRegistry.load(SHORTCUT_PLUGIN_ID, true),\n        commandRegistry: app.commands,\n        actionRequested\n    };\n}\n/**\n * The default shortcuts extension.\n *\n * #### Notes\n * Shortcut values are stored in the setting system. The default values for each\n * shortcut are preset in the settings schema file of this extension.\n * Additionally, each shortcut can be individually set by the end user by\n * modifying its setting (either in the text editor or by modifying its\n * underlying JSON schema file).\n *\n * When setting shortcut selectors, there are two concepts to consider:\n * specificity and matchability. These two interact in sometimes\n * counterintuitive ways. Keyboard events are triggered from an element and\n * they propagate up the DOM until they reach the `documentElement` (`<body>`).\n *\n * When a registered shortcut sequence is fired, the shortcut manager checks\n * the node that fired the event and each of its ancestors until a node matches\n * one or more registered selectors. The *first* matching selector in the\n * chain of ancestors will invoke the shortcut handler and the traversal will\n * end at that point. If a node matches more than one selector, the handler for\n * whichever selector is more *specific* fires.\n * @see https://www.w3.org/TR/css3-selectors/#specificity\n *\n * The practical consequence of this is that a very broadly matching selector,\n * e.g. `'*'` or `'div'` may match and therefore invoke a handler *before* a\n * more specific selector. The most common pitfall is to use the universal\n * (`'*'`) selector. For almost any use case where a global keyboard shortcut is\n * required, using the `'body'` selector is more appropriate.\n */\nconst shortcuts = {\n    id: SHORTCUT_PLUGIN_ID,\n    description: 'Adds the keyboard shortcuts editor.',\n    requires: [ISettingRegistry],\n    optional: [ITranslator, IFormRendererRegistry],\n    activate: async (app, registry, translator, editorRegistry) => {\n        const translator_ = translator !== null && translator !== void 0 ? translator : nullTranslator;\n        const trans = translator_.load('jupyterlab');\n        const { commands } = app;\n        let canonical;\n        // Stores initial value of the shortcuts `default` value,\n        // which reflects the `overrides.json` contents.\n        let cannonicalOverrides;\n        let loaded = {};\n        if (editorRegistry) {\n            const actionRequested = new Signal({});\n            const isKeybindingNode = (node) => node.dataset['shortcut'] !== undefined;\n            app.commands.addCommand(CommandIDs.editBinding, {\n                label: trans.__('Edit Keybinding'),\n                caption: trans.__('Edit existing keybinding'),\n                execute: () => {\n                    const node = app.contextMenuHitTest(isKeybindingNode);\n                    const keybinding = node === null || node === void 0 ? void 0 : node.dataset['keybinding'];\n                    const shortcutId = node === null || node === void 0 ? void 0 : node.dataset['shortcut'];\n                    if (!shortcutId || !keybinding) {\n                        return console.log('Missing shortcut id/keybinding information');\n                    }\n                    actionRequested.emit({\n                        request: 'edit-keybinding',\n                        keybinding: parseInt(keybinding, 10),\n                        shortcutId\n                    });\n                }\n            });\n            app.commands.addCommand(CommandIDs.deleteBinding, {\n                label: trans.__('Delete Keybinding'),\n                caption: trans.__('Delete chosen keybinding'),\n                execute: () => {\n                    const node = app.contextMenuHitTest(isKeybindingNode);\n                    const keybinding = node === null || node === void 0 ? void 0 : node.dataset['keybinding'];\n                    const shortcutId = node === null || node === void 0 ? void 0 : node.dataset['shortcut'];\n                    if (!shortcutId || !keybinding) {\n                        return console.log('Missing shortcut id/keybinding information');\n                    }\n                    actionRequested.emit({\n                        request: 'delete-keybinding',\n                        keybinding: parseInt(keybinding, 10),\n                        shortcutId\n                    });\n                }\n            });\n            app.commands.addCommand(CommandIDs.addBinding, {\n                label: trans.__('Add Keybinding'),\n                caption: trans.__('Add new keybinding for existing shortcut target'),\n                execute: () => {\n                    const node = app.contextMenuHitTest(isKeybindingNode);\n                    const shortcutId = node === null || node === void 0 ? void 0 : node.dataset['shortcut'];\n                    if (!shortcutId) {\n                        return console.log('Missing shortcut id to add keybinding to');\n                    }\n                    actionRequested.emit({\n                        request: 'add-keybinding',\n                        shortcutId\n                    });\n                }\n            });\n            commands.addCommand(CommandIDs.toggleSelectors, {\n                label: trans.__('Toggle Selectors'),\n                caption: trans.__('Toggle command selectors'),\n                execute: () => {\n                    actionRequested.emit({\n                        request: 'toggle-selectors'\n                    });\n                }\n            });\n            commands.addCommand(CommandIDs.resetAll, {\n                label: trans.__('Reset All'),\n                caption: trans.__('Reset all shortcuts'),\n                execute: () => {\n                    actionRequested.emit({\n                        request: 'reset-all'\n                    });\n                }\n            });\n            const component = {\n                fieldRenderer: (props) => {\n                    return renderShortCut({\n                        external: getExternalForJupyterLab(registry, app, translator_, actionRequested),\n                        ...props\n                    });\n                }\n            };\n            editorRegistry.addRenderer(`${shortcuts.id}.shortcuts`, component);\n        }\n        /**\n         * Populate the plugin's schema defaults.\n         */\n        function populate(schema) {\n            const commands = app.commands.listCommands().join('\\n');\n            if (!cannonicalOverrides) {\n                cannonicalOverrides = JSONExt.deepCopy(schema.properties.shortcuts.default);\n            }\n            loaded = {};\n            schema.properties.shortcuts.default = Object.keys(registry.plugins)\n                .map(plugin => {\n                const shortcuts = registry.plugins[plugin].schema['jupyter.lab.shortcuts'] || [];\n                loaded[plugin] = shortcuts;\n                return shortcuts;\n            })\n                .concat([cannonicalOverrides])\n                .reduce((acc, val) => {\n                if (Platform.IS_MAC) {\n                    return acc.concat(val);\n                }\n                else {\n                    // If platform is not MacOS, remove all shortcuts containing Cmd\n                    // as they will be modified; e.g. `Cmd A` becomes `A`\n                    return acc.concat(val.filter(shortcut => !shortcut.keys.some(key => {\n                        const { cmd } = CommandRegistry.parseKeystroke(key);\n                        return cmd;\n                    })));\n                }\n            }, []) // flatten one level\n                .sort((a, b) => a.command.localeCompare(b.command));\n            schema.properties.shortcuts.description = trans.__(`Note: To disable a system default shortcut,\ncopy it to User Preferences and add the\n\"disabled\" key, for example:\n{\n    \"command\": \"application:activate-next-tab\",\n    \"keys\": [\n        \"Ctrl Shift ]\"\n    ],\n    \"selector\": \"body\",\n    \"disabled\": true\n}\n\nList of commands followed by keyboard shortcuts:\n%1\n\nList of keyboard shortcuts:`, commands);\n        }\n        registry.pluginChanged.connect(async (_, plugin) => {\n            if (plugin !== shortcuts.id) {\n                // If the plugin changed its shortcuts, reload everything.\n                const oldShortcuts = loaded[plugin];\n                const newShortcuts = registry.plugins[plugin].schema['jupyter.lab.shortcuts'] || [];\n                if (oldShortcuts === undefined ||\n                    !JSONExt.deepEqual(oldShortcuts, newShortcuts)) {\n                    // Empty the default values to avoid shortcut collisions.\n                    canonical = null;\n                    const schema = registry.plugins[shortcuts.id].schema;\n                    schema.properties.shortcuts.default = cannonicalOverrides;\n                    // Reload the settings.\n                    await registry.load(shortcuts.id, true);\n                }\n            }\n        });\n        // Transform the plugin object to return different schema than the default.\n        registry.transform(shortcuts.id, {\n            compose: plugin => {\n                var _a, _b, _c, _d;\n                // Only override the canonical schema the first time.\n                if (!canonical) {\n                    canonical = JSONExt.deepCopy(plugin.schema);\n                    populate(canonical);\n                }\n                const defaults = (_c = (_b = (_a = canonical.properties) === null || _a === void 0 ? void 0 : _a.shortcuts) === null || _b === void 0 ? void 0 : _b.default) !== null && _c !== void 0 ? _c : [];\n                const user = {\n                    shortcuts: (_d = plugin.data.user.shortcuts) !== null && _d !== void 0 ? _d : []\n                };\n                const composite = {\n                    shortcuts: SettingRegistry.reconcileShortcuts(defaults, user.shortcuts)\n                };\n                plugin.data = { composite, user };\n                return plugin;\n            },\n            fetch: plugin => {\n                // Only override the canonical schema the first time.\n                if (!canonical) {\n                    canonical = JSONExt.deepCopy(plugin.schema);\n                    populate(canonical);\n                }\n                return {\n                    data: plugin.data,\n                    id: plugin.id,\n                    raw: plugin.raw,\n                    schema: canonical,\n                    version: plugin.version\n                };\n            }\n        });\n        try {\n            // Repopulate the canonical variable after the setting registry has\n            // preloaded all initial plugins.\n            canonical = null;\n            const settings = await registry.load(shortcuts.id);\n            Private.loadShortcuts(commands, settings.composite);\n            settings.changed.connect(() => {\n                Private.loadShortcuts(commands, settings.composite);\n            });\n        }\n        catch (error) {\n            console.error(`Loading ${shortcuts.id} failed.`, error);\n        }\n    },\n    autoStart: true\n};\n/**\n * Export the shortcut plugin as default.\n */\nexport default shortcuts;\n/**\n * A namespace for private module data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The internal collection of currently loaded shortcuts.\n     */\n    let disposables;\n    /**\n     * Load the keyboard shortcuts from settings.\n     */\n    function loadShortcuts(commands, composite) {\n        var _a;\n        const shortcuts = ((_a = composite === null || composite === void 0 ? void 0 : composite.shortcuts) !== null && _a !== void 0 ? _a : []);\n        if (disposables) {\n            disposables.dispose();\n        }\n        disposables = shortcuts.reduce((acc, val) => {\n            const options = normalizeOptions(val);\n            if (options) {\n                acc.add(commands.addKeyBinding(options));\n            }\n            return acc;\n        }, new DisposableSet());\n    }\n    Private.loadShortcuts = loadShortcuts;\n    /**\n     * Normalize potential keyboard shortcut options.\n     */\n    function normalizeOptions(value) {\n        if (!value || typeof value !== 'object') {\n            return undefined;\n        }\n        const { isArray } = Array;\n        const valid = 'command' in value &&\n            'keys' in value &&\n            'selector' in value &&\n            isArray(value.keys);\n        return valid ? value : undefined;\n    }\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/ui-components/style/index.js';\n\nimport './base.css';\n","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DataConnector = void 0;\n/**\n * An abstract class that adheres to the data connector interface.\n *\n * @typeparam T - The basic entity response type a service's connector.\n *\n * @typeparam U - The basic entity request type, which is conventionally the\n * same as the response type but may be different if a service's implementation\n * requires input data to be different from output responses. Defaults to `T`.\n *\n * @typeparam V - The basic token applied to a request, conventionally a string\n * ID or filter, but may be set to a different type when an implementation\n * requires it. Defaults to `string`.\n *\n * @typeparam W - The type of the optional `query` parameter of the `list`\n * method. Defaults to `string`.\n *\n * #### Notes\n * The only abstract method in this class is the `fetch` method, which must be\n * reimplemented by all subclasses. The `remove` and `save` methods have a\n * default implementation that returns a promise that will always reject. This\n * class is a convenience superclass for connectors that only need to `fetch`.\n */\nclass DataConnector {\n    /**\n     * Retrieve the list of items available from the data connector.\n     *\n     * @param query - The optional query filter to apply to the connector request.\n     *\n     * @returns A promise that always rejects with an error.\n     *\n     * #### Notes\n     * Subclasses should reimplement if they support a back-end that can list.\n     */\n    async list(query) {\n        throw new Error('DataConnector#list method has not been implemented.');\n    }\n    /**\n     * Remove a value using the data connector.\n     *\n     * @param id - The identifier for the data being removed.\n     *\n     * @returns A promise that always rejects with an error.\n     *\n     * #### Notes\n     * Subclasses should reimplement if they support a back-end that can remove.\n     */\n    async remove(id) {\n        throw new Error('DataConnector#remove method has not been implemented.');\n    }\n    /**\n     * Save a value using the data connector.\n     *\n     * @param id - The identifier for the data being saved.\n     *\n     * @param value - The data being saved.\n     *\n     * @returns A promise that always rejects with an error.\n     *\n     * #### Notes\n     * Subclasses should reimplement if they support a back-end that can save.\n     */\n    async save(id, value) {\n        throw new Error('DataConnector#save method has not been implemented.');\n    }\n}\nexports.DataConnector = DataConnector;\n//# sourceMappingURL=dataconnector.js.map","\"use strict\";\n/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module statedb\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./dataconnector\"), exports);\n__exportStar(require(\"./interfaces\"), exports);\n__exportStar(require(\"./restorablepool\"), exports);\n__exportStar(require(\"./statedb\"), exports);\n__exportStar(require(\"./tokens\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=interfaces.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RestorablePool = void 0;\nconst coreutils_1 = require(\"@lumino/coreutils\");\nconst properties_1 = require(\"@lumino/properties\");\nconst signaling_1 = require(\"@lumino/signaling\");\n/**\n * An object pool that supports restoration.\n *\n * @typeparam T - The type of object being tracked.\n */\nclass RestorablePool {\n    /**\n     * Create a new restorable pool.\n     *\n     * @param options - The instantiation options for a restorable pool.\n     */\n    constructor(options) {\n        this._added = new signaling_1.Signal(this);\n        this._current = null;\n        this._currentChanged = new signaling_1.Signal(this);\n        this._hasRestored = false;\n        this._isDisposed = false;\n        this._objects = new Set();\n        this._restore = null;\n        this._restored = new coreutils_1.PromiseDelegate();\n        this._updated = new signaling_1.Signal(this);\n        this.namespace = options.namespace;\n    }\n    /**\n     * A signal emitted when an object object is added.\n     *\n     * #### Notes\n     * This signal will only fire when an object is added to the pool.\n     * It will not fire if an object injected into the pool.\n     */\n    get added() {\n        return this._added;\n    }\n    /**\n     * The current object.\n     *\n     * #### Notes\n     * The restorable pool does not set `current`. It is intended for client use.\n     *\n     * If `current` is set to an object that does not exist in the pool, it is a\n     * no-op.\n     */\n    get current() {\n        return this._current;\n    }\n    set current(obj) {\n        if (this._current === obj) {\n            return;\n        }\n        if (obj !== null && this._objects.has(obj)) {\n            this._current = obj;\n            this._currentChanged.emit(this._current);\n        }\n    }\n    /**\n     * A signal emitted when the current widget changes.\n     */\n    get currentChanged() {\n        return this._currentChanged;\n    }\n    /**\n     * Test whether the pool is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * A promise resolved when the restorable pool has been restored.\n     */\n    get restored() {\n        return this._restored.promise;\n    }\n    /**\n     * The number of objects held by the pool.\n     */\n    get size() {\n        return this._objects.size;\n    }\n    /**\n     * A signal emitted when an object is updated.\n     */\n    get updated() {\n        return this._updated;\n    }\n    /**\n     * Add a new object to the pool.\n     *\n     * @param obj - The object object being added.\n     *\n     * #### Notes\n     * The object passed into the pool is added synchronously; its existence in\n     * the pool can be checked with the `has()` method. The promise this method\n     * returns resolves after the object has been added and saved to an underlying\n     * restoration connector, if one is available.\n     */\n    async add(obj) {\n        var _a, _b;\n        if (obj.isDisposed) {\n            const warning = 'A disposed object cannot be added.';\n            console.warn(warning, obj);\n            throw new Error(warning);\n        }\n        if (this._objects.has(obj)) {\n            const warning = 'This object already exists in the pool.';\n            console.warn(warning, obj);\n            throw new Error(warning);\n        }\n        this._objects.add(obj);\n        obj.disposed.connect(this._onInstanceDisposed, this);\n        if (Private.injectedProperty.get(obj)) {\n            return;\n        }\n        if (this._restore) {\n            const { connector } = this._restore;\n            const objName = this._restore.name(obj);\n            if (objName) {\n                const name = `${this.namespace}:${objName}`;\n                const data = (_b = (_a = this._restore).args) === null || _b === void 0 ? void 0 : _b.call(_a, obj);\n                Private.nameProperty.set(obj, name);\n                await connector.save(name, { data });\n            }\n        }\n        // Emit the added signal.\n        this._added.emit(obj);\n    }\n    /**\n     * Dispose of the resources held by the pool.\n     *\n     * #### Notes\n     * Disposing a pool does not affect the underlying data in the data connector,\n     * it simply disposes the client-side pool without making any connector calls.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._current = null;\n        this._isDisposed = true;\n        this._objects.clear();\n        signaling_1.Signal.clearData(this);\n    }\n    /**\n     * Find the first object in the pool that satisfies a filter function.\n     *\n     * @param fn The filter function to call on each object.\n     */\n    find(fn) {\n        const values = this._objects.values();\n        for (const value of values) {\n            if (fn(value)) {\n                return value;\n            }\n        }\n        return undefined;\n    }\n    /**\n     * Iterate through each object in the pool.\n     *\n     * @param fn - The function to call on each object.\n     */\n    forEach(fn) {\n        this._objects.forEach(fn);\n    }\n    /**\n     * Filter the objects in the pool based on a predicate.\n     *\n     * @param fn - The function by which to filter.\n     */\n    filter(fn) {\n        const filtered = [];\n        this.forEach(obj => {\n            if (fn(obj)) {\n                filtered.push(obj);\n            }\n        });\n        return filtered;\n    }\n    /**\n     * Inject an object into the restorable pool without the pool handling its\n     * restoration lifecycle.\n     *\n     * @param obj - The object to inject into the pool.\n     */\n    inject(obj) {\n        Private.injectedProperty.set(obj, true);\n        return this.add(obj);\n    }\n    /**\n     * Check if this pool has the specified object.\n     *\n     * @param obj - The object whose existence is being checked.\n     */\n    has(obj) {\n        return this._objects.has(obj);\n    }\n    /**\n     * Restore the objects in this pool's namespace.\n     *\n     * @param options - The configuration options that describe restoration.\n     *\n     * @returns A promise that resolves when restoration has completed.\n     *\n     * #### Notes\n     * This function should almost never be invoked by client code. Its primary\n     * use case is to be invoked by a layout restorer plugin that handles\n     * multiple restorable pools and, when ready, asks them each to restore their\n     * respective objects.\n     */\n    async restore(options) {\n        if (this._hasRestored) {\n            throw new Error('This pool has already been restored.');\n        }\n        this._hasRestored = true;\n        const { command, connector, registry, when } = options;\n        const namespace = this.namespace;\n        const promises = when\n            ? [connector.list(namespace)].concat(when)\n            : [connector.list(namespace)];\n        this._restore = options;\n        const [saved] = await Promise.all(promises);\n        const values = await Promise.all(saved.ids.map(async (id, index) => {\n            const value = saved.values[index];\n            const args = value && value.data;\n            if (args === undefined) {\n                return connector.remove(id);\n            }\n            // Execute the command and if it fails, delete the state restore data.\n            return registry\n                .execute(command, args)\n                .catch(() => connector.remove(id));\n        }));\n        this._restored.resolve();\n        return values;\n    }\n    /**\n     * Save the restore data for a given object.\n     *\n     * @param obj - The object being saved.\n     */\n    async save(obj) {\n        var _a, _b;\n        const injected = Private.injectedProperty.get(obj);\n        if (!this._restore || !this.has(obj) || injected) {\n            return;\n        }\n        const { connector } = this._restore;\n        const objName = this._restore.name(obj);\n        const oldName = Private.nameProperty.get(obj);\n        const newName = objName ? `${this.namespace}:${objName}` : '';\n        if (oldName && oldName !== newName) {\n            await connector.remove(oldName);\n        }\n        // Set the name property irrespective of whether the new name is null.\n        Private.nameProperty.set(obj, newName);\n        if (newName) {\n            const data = (_b = (_a = this._restore).args) === null || _b === void 0 ? void 0 : _b.call(_a, obj);\n            await connector.save(newName, { data });\n        }\n        if (oldName !== newName) {\n            this._updated.emit(obj);\n        }\n    }\n    /**\n     * Clean up after disposed objects.\n     */\n    _onInstanceDisposed(obj) {\n        this._objects.delete(obj);\n        if (obj === this._current) {\n            this._current = null;\n            this._currentChanged.emit(this._current);\n        }\n        if (Private.injectedProperty.get(obj)) {\n            return;\n        }\n        if (!this._restore) {\n            return;\n        }\n        const { connector } = this._restore;\n        const name = Private.nameProperty.get(obj);\n        if (name) {\n            void connector.remove(name);\n        }\n    }\n}\nexports.RestorablePool = RestorablePool;\n/*\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * An attached property to indicate whether an object has been injected.\n     */\n    Private.injectedProperty = new properties_1.AttachedProperty({\n        name: 'injected',\n        create: () => false\n    });\n    /**\n     * An attached property for an object's ID.\n     */\n    Private.nameProperty = new properties_1.AttachedProperty({\n        name: 'name',\n        create: () => ''\n    });\n})(Private || (Private = {}));\n//# sourceMappingURL=restorablepool.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StateDB = void 0;\nconst signaling_1 = require(\"@lumino/signaling\");\n/**\n * The default concrete implementation of a state database.\n */\nclass StateDB {\n    /**\n     * Create a new state database.\n     *\n     * @param options - The instantiation options for a state database.\n     */\n    constructor(options = {}) {\n        this._changed = new signaling_1.Signal(this);\n        const { connector, transform } = options;\n        this._connector = connector || new StateDB.Connector();\n        if (!transform) {\n            this._ready = Promise.resolve(undefined);\n        }\n        else {\n            this._ready = transform.then(transformation => {\n                const { contents, type } = transformation;\n                switch (type) {\n                    case 'cancel':\n                        return;\n                    case 'clear':\n                        return this._clear();\n                    case 'merge':\n                        return this._merge(contents || {});\n                    case 'overwrite':\n                        return this._overwrite(contents || {});\n                    default:\n                        return;\n                }\n            });\n        }\n    }\n    /**\n     * A signal that emits the change type any time a value changes.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Clear the entire database.\n     */\n    async clear() {\n        await this._ready;\n        await this._clear();\n    }\n    /**\n     * Retrieve a saved bundle from the database.\n     *\n     * @param id - The identifier used to retrieve a data bundle.\n     *\n     * @returns A promise that bears a data payload if available.\n     *\n     * #### Notes\n     * The `id` values of stored items in the state database are formatted:\n     * `'namespace:identifier'`, which is the same convention that command\n     * identifiers in JupyterLab use as well. While this is not a technical\n     * requirement for `fetch()`, `remove()`, and `save()`, it *is* necessary for\n     * using the `list(namespace: string)` method.\n     *\n     * The promise returned by this method may be rejected if an error occurs in\n     * retrieving the data. Non-existence of an `id` will succeed with the `value`\n     * `undefined`.\n     */\n    async fetch(id) {\n        await this._ready;\n        return this._fetch(id);\n    }\n    /**\n     * Retrieve all the saved bundles for a namespace.\n     *\n     * @param namespace The namespace prefix to retrieve.\n     *\n     * @returns A promise that bears a collection of payloads for a namespace.\n     *\n     * #### Notes\n     * Namespaces are entirely conventional entities. The `id` values of stored\n     * items in the state database are formatted: `'namespace:identifier'`, which\n     * is the same convention that command identifiers in JupyterLab use as well.\n     *\n     * If there are any errors in retrieving the data, they will be logged to the\n     * console in order to optimistically return any extant data without failing.\n     * This promise will always succeed.\n     */\n    async list(namespace) {\n        await this._ready;\n        return this._list(namespace);\n    }\n    /**\n     * Remove a value from the database.\n     *\n     * @param id - The identifier for the data being removed.\n     *\n     * @returns A promise that is rejected if remove fails and succeeds otherwise.\n     */\n    async remove(id) {\n        await this._ready;\n        await this._remove(id);\n        this._changed.emit({ id, type: 'remove' });\n    }\n    /**\n     * Save a value in the database.\n     *\n     * @param id - The identifier for the data being saved.\n     *\n     * @param value - The data being saved.\n     *\n     * @returns A promise that is rejected if saving fails and succeeds otherwise.\n     *\n     * #### Notes\n     * The `id` values of stored items in the state database are formatted:\n     * `'namespace:identifier'`, which is the same convention that command\n     * identifiers in JupyterLab use as well. While this is not a technical\n     * requirement for `fetch()`, `remove()`, and `save()`, it *is* necessary for\n     * using the `list(namespace: string)` method.\n     */\n    async save(id, value) {\n        await this._ready;\n        await this._save(id, value);\n        this._changed.emit({ id, type: 'save' });\n    }\n    /**\n     * Return a serialized copy of the state database's entire contents.\n     *\n     * @returns A promise that resolves with the database contents as JSON.\n     */\n    async toJSON() {\n        await this._ready;\n        const { ids, values } = await this._list();\n        return values.reduce((acc, val, idx) => {\n            acc[ids[idx]] = val;\n            return acc;\n        }, {});\n    }\n    /**\n     * Clear the entire database.\n     */\n    async _clear() {\n        await Promise.all((await this._list()).ids.map(id => this._remove(id)));\n    }\n    /**\n     * Fetch a value from the database.\n     */\n    async _fetch(id) {\n        const value = await this._connector.fetch(id);\n        if (value) {\n            return JSON.parse(value).v;\n        }\n    }\n    /**\n     * Fetch a list from the database.\n     */\n    async _list(namespace = '') {\n        const { ids, values } = await this._connector.list(namespace);\n        return {\n            ids,\n            values: values.map(val => JSON.parse(val).v)\n        };\n    }\n    /**\n     * Merge data into the state database.\n     */\n    async _merge(contents) {\n        await Promise.all(Object.keys(contents).map(key => contents[key] && this._save(key, contents[key])));\n    }\n    /**\n     * Overwrite the entire database with new contents.\n     */\n    async _overwrite(contents) {\n        await this._clear();\n        await this._merge(contents);\n    }\n    /**\n     * Remove a key in the database.\n     */\n    async _remove(id) {\n        return this._connector.remove(id);\n    }\n    /**\n     * Save a key and its value in the database.\n     */\n    async _save(id, value) {\n        return this._connector.save(id, JSON.stringify({ v: value }));\n    }\n}\nexports.StateDB = StateDB;\n/**\n * A namespace for StateDB statics.\n */\n(function (StateDB) {\n    /**\n     * An in-memory string key/value data connector.\n     */\n    class Connector {\n        constructor() {\n            this._storage = {};\n        }\n        /**\n         * Retrieve an item from the data connector.\n         */\n        async fetch(id) {\n            return this._storage[id];\n        }\n        /**\n         * Retrieve the list of items available from the data connector.\n         *\n         * @param namespace - If not empty, only keys whose first token before `:`\n         * exactly match `namespace` will be returned, e.g. `foo` in `foo:bar`.\n         */\n        async list(namespace = '') {\n            return Object.keys(this._storage).reduce((acc, val) => {\n                if (namespace === '' ? true : namespace === val.split(':')[0]) {\n                    acc.ids.push(val);\n                    acc.values.push(this._storage[val]);\n                }\n                return acc;\n            }, { ids: [], values: [] });\n        }\n        /**\n         * Remove a value using the data connector.\n         */\n        async remove(id) {\n            delete this._storage[id];\n        }\n        /**\n         * Save a value using the data connector.\n         */\n        async save(id, value) {\n            this._storage[id] = value;\n        }\n    }\n    StateDB.Connector = Connector;\n})(StateDB || (exports.StateDB = StateDB = {}));\n//# sourceMappingURL=statedb.js.map","\"use strict\";\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IStateDB = void 0;\nconst coreutils_1 = require(\"@lumino/coreutils\");\n/**\n * The default state database token.\n */\nexports.IStateDB = new coreutils_1.Token('@jupyterlab/coreutils:IStateDB', `A service for the JupyterLab state database.\n  Use this if you want to store data that will persist across page loads.\n  See \"state database\" for more information.`);\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport * as React from 'react';\n/**\n * A tsx component for a set of items logically grouped together.\n */\nexport function GroupItem(props) {\n    const { spacing, children, className, ...rest } = props;\n    // Filter out null or undefined children for clean rendering.\n    const validChildren = React.Children.toArray(children).filter(Boolean);\n    const numChildren = validChildren.length;\n    return (React.createElement(\"div\", { className: `jp-StatusBar-GroupItem ${className || ''}`, ...rest }, validChildren.map((child, i) => {\n        const key = `group-item-${i}`;\n        if (i === 0) {\n            return (React.createElement(\"div\", { key: key, style: { marginRight: `${spacing}px` } }, child));\n        }\n        else if (i === numChildren - 1) {\n            return (React.createElement(\"div\", { key: key, style: { marginLeft: `${spacing}px` } }, child));\n        }\n        else {\n            return (React.createElement(\"div\", { key: key, style: { margin: `0px ${spacing}px` } }, child));\n        }\n    })));\n}\n//# sourceMappingURL=group.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { HoverBox } from '@jupyterlab/ui-components';\nimport { PanelLayout, Widget } from '@lumino/widgets';\n/**\n * Create and show a popup component.\n *\n * @param options - options for the popup\n *\n * @returns the popup that was created.\n */\nexport function showPopup(options) {\n    const dialog = new Popup(options);\n    if (!options.startHidden) {\n        dialog.launch();\n    }\n    return dialog;\n}\n/**\n * A class for a Popup widget.\n */\nexport class Popup extends Widget {\n    /**\n     * Construct a new Popup.\n     */\n    constructor(options) {\n        super();\n        this.addClass('jp-ThemedContainer');\n        this._body = options.body;\n        this._body.addClass('jp-StatusBar-HoverItem');\n        this._anchor = options.anchor;\n        this._align = options.align;\n        if (options.hasDynamicSize) {\n            this._observer = new ResizeObserver(() => {\n                this.update();\n            });\n        }\n        const layout = (this.layout = new PanelLayout());\n        layout.addWidget(options.body);\n        this._body.node.addEventListener('resize', () => {\n            this.update();\n        });\n    }\n    /**\n     * Attach the popup widget to the page.\n     */\n    launch() {\n        this._setGeometry();\n        Widget.attach(this, document.body);\n        this.update();\n        this._anchor.addClass('jp-mod-clicked');\n        this._anchor.removeClass('jp-mod-highlight');\n    }\n    /**\n     * Handle `'update'` messages for the widget.\n     */\n    onUpdateRequest(msg) {\n        this._setGeometry();\n        super.onUpdateRequest(msg);\n    }\n    /**\n     * Handle `'after-attach'` messages for the widget.\n     */\n    onAfterAttach(msg) {\n        var _a;\n        document.addEventListener('click', this, false);\n        this.node.addEventListener('keydown', this, false);\n        window.addEventListener('resize', this, false);\n        (_a = this._observer) === null || _a === void 0 ? void 0 : _a.observe(this._body.node);\n    }\n    /**\n     * Handle `'before-detach'` messages for the widget.\n     */\n    onBeforeDetach(msg) {\n        var _a;\n        (_a = this._observer) === null || _a === void 0 ? void 0 : _a.disconnect();\n        document.removeEventListener('click', this, false);\n        this.node.removeEventListener('keydown', this, false);\n        window.removeEventListener('resize', this, false);\n    }\n    /**\n     * Handle `'resize'` messages for the widget.\n     */\n    onResize() {\n        this.update();\n    }\n    /**\n     * Dispose of the widget.\n     */\n    dispose() {\n        var _a;\n        (_a = this._observer) === null || _a === void 0 ? void 0 : _a.disconnect();\n        super.dispose();\n        this._anchor.removeClass('jp-mod-clicked');\n        this._anchor.addClass('jp-mod-highlight');\n    }\n    /**\n     * Handle DOM events for the widget.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'keydown':\n                this._evtKeydown(event);\n                break;\n            case 'click':\n                this._evtClick(event);\n                break;\n            case 'resize':\n                this.onResize();\n                break;\n            default:\n                break;\n        }\n    }\n    _evtClick(event) {\n        if (!!event.target &&\n            !(this._body.node.contains(event.target) ||\n                this._anchor.node.contains(event.target))) {\n            this.dispose();\n        }\n    }\n    _evtKeydown(event) {\n        // Check for escape key\n        switch (event.keyCode) {\n            case 27: // Escape.\n                event.stopPropagation();\n                event.preventDefault();\n                this.dispose();\n                break;\n            default:\n                break;\n        }\n    }\n    _setGeometry() {\n        let aligned = 0;\n        const anchorRect = this._anchor.node.getBoundingClientRect();\n        const bodyRect = this._body.node.getBoundingClientRect();\n        if (this._align === 'right') {\n            aligned = -(bodyRect.width - anchorRect.width);\n        }\n        const style = window.getComputedStyle(this._body.node);\n        HoverBox.setGeometry({\n            anchor: anchorRect,\n            host: document.body,\n            maxHeight: 500,\n            minHeight: 20,\n            node: this._body.node,\n            offset: {\n                horizontal: aligned\n            },\n            privilege: 'forceAbove',\n            style\n        });\n    }\n}\n//# sourceMappingURL=hover.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport * as React from 'react';\n/**\n * A functional tsx component for a progress bar.\n */\nexport function ProgressBar(props) {\n    const { width, percentage, ...rest } = props;\n    return (React.createElement(\"div\", { className: 'jp-Statusbar-ProgressBar-progress-bar', role: \"progressbar\", \"aria-valuemin\": 0, \"aria-valuemax\": 100, \"aria-valuenow\": percentage },\n        React.createElement(Filler, { percentage, ...rest, contentWidth: width })));\n}\n/**\n * A functional tsx component for a partially filled div.\n */\nfunction Filler(props) {\n    return (React.createElement(\"div\", { style: {\n            width: `${props.percentage}%`\n        } },\n        React.createElement(\"p\", null, props.content)));\n}\n//# sourceMappingURL=progressBar.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport * as React from 'react';\n/**\n * A functional tsx component for a text item.\n */\nexport function TextItem(props) {\n    const { title, source, className, ...rest } = props;\n    return (React.createElement(\"span\", { className: `jp-StatusBar-TextItem ${className}`, title: title, ...rest }, source));\n}\n//# sourceMappingURL=text.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport React from 'react';\nexport function ProgressCircle(props) {\n    const radius = 104;\n    const d = (progress) => {\n        const angle = Math.max(progress * 3.6, 0.1);\n        const rad = (angle * Math.PI) / 180, x = Math.sin(rad) * radius, y = Math.cos(rad) * -radius, mid = angle < 180 ? 1 : 0, shape = `M 0 0 v -${radius} A ${radius} ${radius} 1 ` +\n            mid +\n            ' 0 ' +\n            x.toFixed(4) +\n            ' ' +\n            y.toFixed(4) +\n            ' z';\n        return shape;\n    };\n    return (React.createElement(\"div\", { className: 'jp-Statusbar-ProgressCircle', role: \"progressbar\", \"aria-label\": props.label || 'Unlabelled progress circle', \"aria-valuemin\": 0, \"aria-valuemax\": 100, \"aria-valuenow\": props.progress },\n        React.createElement(\"svg\", { viewBox: \"0 0 250 250\" },\n            React.createElement(\"circle\", { cx: \"125\", cy: \"125\", r: `${radius}`, stroke: \"var(--jp-inverse-layout-color3)\", strokeWidth: \"20\", fill: \"none\" }),\n            React.createElement(\"path\", { className: 'jp-Statusbar-ProgressCirclePath', transform: \"translate(125,125) scale(.9)\", d: d(props.progress), fill: 'var(--jp-inverse-layout-color3)' }))));\n}\n//# sourceMappingURL=progressCircle.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nexport * from './group';\nexport * from './hover';\nexport * from './progressBar';\nexport * from './text';\nexport * from './progressCircle';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ArrayExt } from '@lumino/algorithm';\nimport { DisposableDelegate, DisposableSet } from '@lumino/disposable';\nimport { Panel, PanelLayout, Widget } from '@lumino/widgets';\n/**\n * Main status bar object which contains all items.\n */\nexport class StatusBar extends Widget {\n    constructor() {\n        super();\n        this._isWindowNarrow = () => {\n            // The value for 630px was chosen by trial and error.\n            // When the screen width drops below 630px, there is no\n            // longer enough space for all the items in the status bar\n            // (with notebook open), and items become clipped.\n            return window.innerWidth <= 630;\n        };\n        this._leftRankItems = [];\n        this._rightRankItems = [];\n        this._statusItems = {};\n        this._disposables = new DisposableSet();\n        this.addClass('jp-StatusBar-Widget');\n        const rootLayout = (this.layout = new PanelLayout());\n        const leftPanel = (this._leftSide = new Panel());\n        const middlePanel = (this._middlePanel = new Panel());\n        const rightPanel = (this._rightSide = new Panel());\n        leftPanel.addClass('jp-StatusBar-Left');\n        middlePanel.addClass('jp-StatusBar-Middle');\n        rightPanel.addClass('jp-StatusBar-Right');\n        rootLayout.addWidget(leftPanel);\n        rootLayout.addWidget(middlePanel);\n        rootLayout.addWidget(rightPanel);\n    }\n    /**\n     * Register a new status item.\n     *\n     * @param id - a unique id for the status item.\n     * @param statusItem - The item to add to the status bar.\n     *\n     * @returns Disposable status bar item\n     */\n    registerStatusItem(id, statusItem) {\n        if (id in this._statusItems) {\n            throw new Error(`Status item ${id} already registered.`);\n        }\n        // Populate defaults for the optional properties of the status item.\n        const fullStatusItem = {\n            ...Private.statusItemDefaults,\n            ...statusItem\n        };\n        const { align, item, rank, priority } = fullStatusItem;\n        // Connect the activeStateChanged signal to refreshing the status item,\n        // if the signal was provided.\n        const onActiveStateChanged = () => {\n            this._refreshItem(id);\n        };\n        if (fullStatusItem.activeStateChanged) {\n            fullStatusItem.activeStateChanged.connect(onActiveStateChanged);\n        }\n        const rankItem = { id, rank, priority };\n        fullStatusItem.item.addClass('jp-StatusBar-Item');\n        this._statusItems[id] = fullStatusItem;\n        if (align === 'left') {\n            const insertIndex = this._findInsertIndex(this._leftRankItems, rankItem);\n            if (insertIndex === -1) {\n                this._leftSide.addWidget(item);\n                this._leftRankItems.push(rankItem);\n            }\n            else {\n                ArrayExt.insert(this._leftRankItems, insertIndex, rankItem);\n                this._leftSide.insertWidget(insertIndex, item);\n            }\n        }\n        else if (align === 'right') {\n            const insertIndex = this._findInsertIndex(this._rightRankItems, rankItem);\n            if (insertIndex === -1) {\n                this._rightSide.addWidget(item);\n                this._rightRankItems.push(rankItem);\n            }\n            else {\n                ArrayExt.insert(this._rightRankItems, insertIndex, rankItem);\n                this._rightSide.insertWidget(insertIndex, item);\n            }\n        }\n        else {\n            this._middlePanel.addWidget(item);\n        }\n        this._refreshItem(id); // Initially refresh the status item.\n        const disposable = new DisposableDelegate(() => {\n            delete this._statusItems[id];\n            if (fullStatusItem.activeStateChanged) {\n                fullStatusItem.activeStateChanged.disconnect(onActiveStateChanged);\n            }\n            item.parent = null;\n            item.dispose();\n        });\n        this._disposables.add(disposable);\n        return disposable;\n    }\n    /**\n     * Dispose of the status bar.\n     */\n    dispose() {\n        this._leftRankItems.length = 0;\n        this._rightRankItems.length = 0;\n        this._disposables.dispose();\n        super.dispose();\n    }\n    /**\n     * Handle an 'update-request' message to the status bar.\n     */\n    onUpdateRequest(msg) {\n        this._refreshAll();\n        super.onUpdateRequest(msg);\n    }\n    _findInsertIndex(side, newItem) {\n        return ArrayExt.findFirstIndex(side, item => item.rank > newItem.rank);\n    }\n    _refreshItem(id) {\n        const statusItem = this._statusItems[id];\n        if (statusItem.isActive() &&\n            !(statusItem.priority === 0 && this._isWindowNarrow())) {\n            statusItem.item.show();\n            statusItem.item.update();\n        }\n        else {\n            statusItem.item.hide();\n        }\n    }\n    _refreshAll() {\n        Object.keys(this._statusItems).forEach(id => {\n            this._refreshItem(id);\n        });\n    }\n}\n/**\n * A namespace for private functionality.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Default options for a status item, less the item itself.\n     */\n    Private.statusItemDefaults = {\n        align: 'left',\n        rank: 0,\n        priority: 0,\n        isActive: () => true,\n        activeStateChanged: undefined\n    };\n})(Private || (Private = {}));\n//# sourceMappingURL=statusbar.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n// tslint:disable-next-line:variable-name\nexport const IStatusBar = new Token('@jupyterlab/statusbar:IStatusBar', 'A service for the status bar on the application. Use this if you want to add new status bar items.');\n//# sourceMappingURL=tokens.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module statusbar\n */\nexport * from './components';\nexport * from './statusbar';\nexport * from './tokens';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module terminal-extension\n */\nimport { ILayoutRestorer } from '@jupyterlab/application';\nimport { Clipboard, ICommandPalette, IThemeManager, MainAreaWidget, WidgetTracker } from '@jupyterlab/apputils';\nimport { ILauncher } from '@jupyterlab/launcher';\nimport { IMainMenu } from '@jupyterlab/mainmenu';\nimport { IRunningSessionManagers } from '@jupyterlab/running';\nimport { TerminalAPI } from '@jupyterlab/services';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITerminalTracker, Terminal as XTerm } from '@jupyterlab/terminal';\nimport { ITranslator } from '@jupyterlab/translation';\nimport { copyIcon, pasteIcon, refreshIcon, terminalIcon } from '@jupyterlab/ui-components';\nimport { Menu } from '@lumino/widgets';\n/**\n * The command IDs used by the terminal plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.copy = 'terminal:copy';\n    CommandIDs.createNew = 'terminal:create-new';\n    CommandIDs.open = 'terminal:open';\n    CommandIDs.refresh = 'terminal:refresh';\n    CommandIDs.increaseFont = 'terminal:increase-font';\n    CommandIDs.decreaseFont = 'terminal:decrease-font';\n    CommandIDs.paste = 'terminal:paste';\n    CommandIDs.setTheme = 'terminal:set-theme';\n    CommandIDs.shutdown = 'terminal:shut-down';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The default terminal extension.\n */\nconst plugin = {\n    activate,\n    id: '@jupyterlab/terminal-extension:plugin',\n    description: 'Adds terminal and provides its tracker.',\n    provides: ITerminalTracker,\n    requires: [ISettingRegistry, ITranslator],\n    optional: [\n        ICommandPalette,\n        ILauncher,\n        ILayoutRestorer,\n        IMainMenu,\n        IThemeManager,\n        IRunningSessionManagers\n    ],\n    autoStart: true\n};\n/**\n * Export the plugin as default.\n */\nexport default plugin;\n/**\n * Activate the terminal plugin.\n */\nfunction activate(app, settingRegistry, translator, palette, launcher, restorer, mainMenu, themeManager, runningSessionManagers) {\n    const trans = translator.load('jupyterlab');\n    const { serviceManager, commands } = app;\n    const category = trans.__('Terminal');\n    const namespace = 'terminal';\n    const tracker = new WidgetTracker({\n        namespace\n    });\n    // Bail if there are no terminals available.\n    if (!serviceManager.terminals.isAvailable()) {\n        console.warn('Disabling terminals plugin because they are not available on the server');\n        return tracker;\n    }\n    // Handle state restoration.\n    if (restorer) {\n        void restorer.restore(tracker, {\n            command: CommandIDs.createNew,\n            args: widget => ({ name: widget.content.session.name }),\n            name: widget => widget.content.session.name\n        });\n    }\n    // The cached terminal options from the setting editor.\n    const options = {};\n    /**\n     * Update the cached option values.\n     */\n    function updateOptions(settings) {\n        // Update the cached options by doing a shallow copy of key/values.\n        // This is needed because options is passed and used in addcommand-palette and needs\n        // to reflect the current cached values.\n        Object.keys(settings.composite).forEach((key) => {\n            options[key] = settings.composite[key];\n        });\n    }\n    /**\n     * Update terminal\n     */\n    function updateTerminal(widget) {\n        const terminal = widget.content;\n        if (!terminal) {\n            return;\n        }\n        Object.keys(options).forEach((key) => {\n            terminal.setOption(key, options[key]);\n        });\n    }\n    /**\n     * Update the settings of the current tracker instances.\n     */\n    function updateTracker() {\n        tracker.forEach(widget => updateTerminal(widget));\n    }\n    // Fetch the initial state of the settings.\n    settingRegistry\n        .load(plugin.id)\n        .then(settings => {\n        updateOptions(settings);\n        updateTracker();\n        settings.changed.connect(() => {\n            updateOptions(settings);\n            updateTracker();\n        });\n    })\n        .catch(Private.showErrorMessage);\n    // Subscribe to changes in theme. This is needed as the theme\n    // is computed dynamically based on the string value and DOM\n    // properties.\n    themeManager === null || themeManager === void 0 ? void 0 : themeManager.themeChanged.connect((sender, args) => {\n        tracker.forEach(widget => {\n            const terminal = widget.content;\n            if (terminal.getOption('theme') === 'inherit') {\n                terminal.setOption('theme', 'inherit');\n            }\n        });\n    });\n    addCommands(app, tracker, settingRegistry, translator, options);\n    if (mainMenu) {\n        // Add \"Terminal Theme\" menu below \"Theme\" menu.\n        const themeMenu = new Menu({ commands });\n        themeMenu.title.label = trans._p('menu', 'Terminal Theme');\n        themeMenu.addItem({\n            command: CommandIDs.setTheme,\n            args: {\n                theme: 'inherit',\n                displayName: trans.__('Inherit'),\n                isPalette: false\n            }\n        });\n        themeMenu.addItem({\n            command: CommandIDs.setTheme,\n            args: {\n                theme: 'light',\n                displayName: trans.__('Light'),\n                isPalette: false\n            }\n        });\n        themeMenu.addItem({\n            command: CommandIDs.setTheme,\n            args: { theme: 'dark', displayName: trans.__('Dark'), isPalette: false }\n        });\n        // Add some commands to the \"View\" menu.\n        mainMenu.settingsMenu.addGroup([\n            { command: CommandIDs.increaseFont },\n            { command: CommandIDs.decreaseFont },\n            { type: 'submenu', submenu: themeMenu }\n        ], 40);\n        // Add terminal creation to the file menu.\n        mainMenu.fileMenu.newMenu.addItem({\n            command: CommandIDs.createNew,\n            rank: 20\n        });\n        // Add terminal close-and-shutdown to the file menu.\n        mainMenu.fileMenu.closeAndCleaners.add({\n            id: CommandIDs.shutdown,\n            isEnabled: (w) => tracker.currentWidget !== null && tracker.has(w)\n        });\n    }\n    if (palette) {\n        // Add command palette items.\n        [\n            CommandIDs.createNew,\n            CommandIDs.refresh,\n            CommandIDs.increaseFont,\n            CommandIDs.decreaseFont\n        ].forEach(command => {\n            palette.addItem({ command, category, args: { isPalette: true } });\n        });\n        palette.addItem({\n            command: CommandIDs.setTheme,\n            category,\n            args: {\n                theme: 'inherit',\n                displayName: trans.__('Inherit'),\n                isPalette: true\n            }\n        });\n        palette.addItem({\n            command: CommandIDs.setTheme,\n            category,\n            args: { theme: 'light', displayName: trans.__('Light'), isPalette: true }\n        });\n        palette.addItem({\n            command: CommandIDs.setTheme,\n            category,\n            args: { theme: 'dark', displayName: trans.__('Dark'), isPalette: true }\n        });\n    }\n    // Add a launcher item if the launcher is available.\n    if (launcher) {\n        launcher.add({\n            command: CommandIDs.createNew,\n            category: trans.__('Other'),\n            rank: 0\n        });\n    }\n    // Add a sessions manager if the running extension is available\n    if (runningSessionManagers) {\n        addRunningSessionManager(runningSessionManagers, app, translator);\n    }\n    return tracker;\n}\n/**\n * Add the running terminal manager to the running panel.\n */\nfunction addRunningSessionManager(managers, app, translator) {\n    const trans = translator.load('jupyterlab');\n    const manager = app.serviceManager.terminals;\n    class RunningTerminal {\n        constructor(model) {\n            this._model = model;\n        }\n        open() {\n            void app.commands.execute('terminal:open', { name: this._model.name });\n        }\n        icon() {\n            return terminalIcon;\n        }\n        label() {\n            return `terminals/${this._model.name}`;\n        }\n        shutdown() {\n            return manager.shutdown(this._model.name);\n        }\n    }\n    managers.add({\n        name: trans.__('Terminals'),\n        supportsMultipleViews: false,\n        running: () => Array.from(manager.running()).map(model => new RunningTerminal(model)),\n        shutdownAll: () => manager.shutdownAll(),\n        refreshRunning: () => manager.refreshRunning(),\n        runningChanged: manager.runningChanged,\n        shutdownLabel: trans.__('Shut Down'),\n        shutdownAllLabel: trans.__('Shut Down All'),\n        shutdownAllConfirmationText: trans.__('Are you sure you want to permanently shut down all running terminals?')\n    });\n}\n/**\n * Add the commands for the terminal.\n */\nfunction addCommands(app, tracker, settingRegistry, translator, options) {\n    var _a;\n    const trans = translator.load('jupyterlab');\n    const { commands, serviceManager } = app;\n    const isEnabled = () => tracker.currentWidget !== null &&\n        tracker.currentWidget === app.shell.currentWidget;\n    // Add terminal commands.\n    commands.addCommand(CommandIDs.createNew, {\n        label: args => args['isPalette'] ? trans.__('New Terminal') : trans.__('Terminal'),\n        caption: trans.__('Start a new terminal session'),\n        icon: args => (args['isPalette'] ? undefined : terminalIcon),\n        execute: async (args) => {\n            const name = args['name'];\n            const cwd = args['cwd'];\n            const localPath = cwd\n                ? serviceManager.contents.localPath(cwd)\n                : undefined;\n            let session;\n            if (name) {\n                const models = await TerminalAPI.listRunning(serviceManager.serverSettings);\n                if (models.map(d => d.name).includes(name)) {\n                    // we are restoring a terminal widget and the corresponding terminal exists\n                    // let's connect to it\n                    session = serviceManager.terminals.connectTo({ model: { name } });\n                }\n                else {\n                    // we are restoring a terminal widget but the corresponding terminal was closed\n                    // let's start a new terminal with the original name\n                    session = await serviceManager.terminals.startNew({\n                        name,\n                        cwd: localPath\n                    });\n                }\n            }\n            else {\n                // we are creating a new terminal widget with a new terminal\n                // let the server choose the terminal name\n                session = await serviceManager.terminals.startNew({ cwd: localPath });\n            }\n            const term = new XTerm(session, options, translator);\n            term.title.icon = terminalIcon;\n            term.title.label = '...';\n            const main = new MainAreaWidget({ content: term, reveal: term.ready });\n            app.shell.add(main, 'main', { type: 'Terminal' });\n            void tracker.add(main);\n            app.shell.activateById(main.id);\n            return main;\n        }\n    });\n    commands.addCommand(CommandIDs.open, {\n        label: trans.__('Open a terminal by its `name`.'),\n        execute: args => {\n            const name = args['name'];\n            // Check for a running terminal with the given name.\n            const widget = tracker.find(value => {\n                const content = value.content;\n                return content.session.name === name || false;\n            });\n            if (widget) {\n                app.shell.activateById(widget.id);\n            }\n            else {\n                // Otherwise, create a new terminal with a given name.\n                return commands.execute(CommandIDs.createNew, { name });\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.refresh, {\n        label: trans.__('Refresh Terminal'),\n        caption: trans.__('Refresh the current terminal session'),\n        execute: async () => {\n            const current = tracker.currentWidget;\n            if (!current) {\n                return;\n            }\n            app.shell.activateById(current.id);\n            try {\n                await current.content.refresh();\n                if (current) {\n                    current.content.activate();\n                }\n            }\n            catch (err) {\n                Private.showErrorMessage(err);\n            }\n        },\n        icon: args => args['isPalette']\n            ? undefined\n            : refreshIcon.bindprops({ stylesheet: 'menuItem' }),\n        isEnabled\n    });\n    /**\n     * Add copy command\n     */\n    commands.addCommand(CommandIDs.copy, {\n        execute: () => {\n            var _a;\n            const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n            if (!widget) {\n                return;\n            }\n            const text = widget.getSelection();\n            if (text) {\n                Clipboard.copyToSystem(text);\n                // Focus the widget to ensure user can continue typing\n                widget.activate();\n            }\n        },\n        isEnabled: () => {\n            var _a;\n            if (!isEnabled()) {\n                return false;\n            }\n            const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n            if (!widget) {\n                return false;\n            }\n            // Enable command if there is a text selection in the terminal\n            return widget.hasSelection();\n        },\n        icon: copyIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: trans.__('Copy')\n    });\n    /**\n     * Add paste command\n     */\n    commands.addCommand(CommandIDs.paste, {\n        execute: async () => {\n            var _a;\n            const widget = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content;\n            if (!widget) {\n                return;\n            }\n            // Get data from clipboard\n            const clipboard = window.navigator.clipboard;\n            const clipboardData = await clipboard.readText();\n            if (clipboardData) {\n                // Paste data to the terminal\n                widget.paste(clipboardData);\n                // Focus the widget to ensure user can continue typing\n                widget.activate();\n            }\n        },\n        isEnabled: () => { var _a; return Boolean(isEnabled() && ((_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.content)); },\n        icon: pasteIcon.bindprops({ stylesheet: 'menuItem' }),\n        label: trans.__('Paste')\n    });\n    commands.addCommand(CommandIDs.shutdown, {\n        label: trans.__('Shutdown Terminal'),\n        execute: () => {\n            const current = tracker.currentWidget;\n            if (!current) {\n                return;\n            }\n            // The widget is automatically disposed upon session shutdown.\n            return current.content.session.shutdown();\n        },\n        isEnabled\n    });\n    commands.addCommand(CommandIDs.increaseFont, {\n        label: trans.__('Increase Terminal Font Size'),\n        execute: async () => {\n            const { fontSize } = options;\n            if (fontSize && fontSize < 72) {\n                try {\n                    await settingRegistry.set(plugin.id, 'fontSize', fontSize + 1);\n                }\n                catch (err) {\n                    Private.showErrorMessage(err);\n                }\n            }\n        }\n    });\n    commands.addCommand(CommandIDs.decreaseFont, {\n        label: trans.__('Decrease Terminal Font Size'),\n        execute: async () => {\n            const { fontSize } = options;\n            if (fontSize && fontSize > 9) {\n                try {\n                    await settingRegistry.set(plugin.id, 'fontSize', fontSize - 1);\n                }\n                catch (err) {\n                    Private.showErrorMessage(err);\n                }\n            }\n        }\n    });\n    const themeDisplayedName = {\n        inherit: trans.__('Inherit'),\n        light: trans.__('Light'),\n        dark: trans.__('Dark')\n    };\n    commands.addCommand(CommandIDs.setTheme, {\n        label: args => {\n            if (args.theme === undefined) {\n                return trans.__('Set terminal theme to the provided `theme`.');\n            }\n            const theme = args['theme'];\n            const displayName = theme in themeDisplayedName\n                ? themeDisplayedName[theme]\n                : trans.__(theme[0].toUpperCase() + theme.slice(1));\n            return args['isPalette']\n                ? trans.__('Use Terminal Theme: %1', displayName)\n                : displayName;\n        },\n        caption: trans.__('Set the terminal theme'),\n        isToggled: args => {\n            const { theme } = options;\n            return args['theme'] === theme;\n        },\n        execute: async (args) => {\n            const theme = args['theme'];\n            try {\n                await settingRegistry.set(plugin.id, 'theme', theme);\n                commands.notifyCommandChanged(CommandIDs.setTheme);\n            }\n            catch (err) {\n                console.log(err);\n                Private.showErrorMessage(err);\n            }\n        }\n    });\n    // All commands with isEnabled defined directly or in a semantic commands\n    const commandIds = [\n        CommandIDs.refresh,\n        CommandIDs.copy,\n        CommandIDs.paste,\n        CommandIDs.shutdown\n    ];\n    const notify = () => {\n        commandIds.forEach(id => commands.notifyCommandChanged(id));\n    };\n    tracker.currentChanged.connect(notify);\n    (_a = app.shell.currentChanged) === null || _a === void 0 ? void 0 : _a.connect(notify);\n}\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     *  Utility function for consistent error reporting\n     */\n    function showErrorMessage(error) {\n        console.error(`Failed to configure ${plugin.id}: ${error.message}`);\n    }\n    Private.showErrorMessage = showErrorMessage;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@xterm/xterm/css/xterm.css';\n\nimport './base.css';\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/launcher/style/index.js';\nimport '@jupyterlab/mainmenu/style/index.js';\nimport '@jupyterlab/running/style/index.js';\nimport '@jupyterlab/terminal/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The editor tracker token.\n */\nexport const ITerminalTracker = new Token('@jupyterlab/terminal:ITerminalTracker', `A widget tracker for terminals.\n  Use this if you want to be able to iterate over and interact with terminals\n  created by the application.`);\n/**\n * The namespace for terminals. Separated from the widget so it can be lazy\n * loaded.\n */\nexport var ITerminal;\n(function (ITerminal) {\n    /**\n     * The default options used for creating terminals.\n     */\n    ITerminal.defaultOptions = {\n        theme: 'inherit',\n        fontFamily: 'Menlo, Consolas, \"DejaVu Sans Mono\", monospace',\n        fontSize: 13,\n        lineHeight: 1.0,\n        scrollback: 1000,\n        shutdownOnClose: false,\n        closeOnExit: true,\n        cursorBlink: true,\n        initialCommand: '',\n        screenReaderMode: false, // False by default, can cause scrollbar mouse interaction issues.\n        pasteWithCtrlV: true,\n        autoFit: true,\n        macOptionIsMeta: false\n    };\n})(ITerminal || (ITerminal = {}));\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { Platform } from '@lumino/domutils';\nimport { MessageLoop } from '@lumino/messaging';\nimport { Widget } from '@lumino/widgets';\nimport { ITerminal } from '.';\n/**\n * The class name added to a terminal widget.\n */\nconst TERMINAL_CLASS = 'jp-Terminal';\n/**\n * The class name added to a terminal body.\n */\nconst TERMINAL_BODY_CLASS = 'jp-Terminal-body';\n/**\n * A widget which manages a terminal session.\n */\nexport class Terminal extends Widget {\n    /**\n     * Construct a new terminal widget.\n     *\n     * @param session - The terminal session object.\n     *\n     * @param options - The terminal configuration options.\n     *\n     * @param translator - The language translator.\n     */\n    constructor(session, options = {}, translator) {\n        super();\n        this._needsResize = true;\n        this._offsetWidth = -1;\n        this._offsetHeight = -1;\n        this._isReady = false;\n        this._ready = new PromiseDelegate();\n        this._termOpened = false;\n        translator = translator || nullTranslator;\n        this._trans = translator.load('jupyterlab');\n        this.session = session;\n        // Initialize settings.\n        this._options = { ...ITerminal.defaultOptions, ...options };\n        const { theme, ...other } = this._options;\n        const xtermOptions = {\n            theme: Private.getXTermTheme(theme),\n            ...other\n        };\n        this.addClass(TERMINAL_CLASS);\n        this._setThemeAttribute(theme);\n        // Buffer session message while waiting for the terminal\n        let buffer = '';\n        const bufferMessage = (sender, msg) => {\n            switch (msg.type) {\n                case 'stdout':\n                    if (msg.content) {\n                        buffer += msg.content[0];\n                    }\n                    break;\n                default:\n                    break;\n            }\n        };\n        session.messageReceived.connect(bufferMessage);\n        session.disposed.connect(() => {\n            if (this.getOption('closeOnExit')) {\n                this.dispose();\n            }\n        }, this);\n        // Create the xterm.\n        Private.createTerminal(xtermOptions)\n            .then(([term, fitAddon]) => {\n            this._term = term;\n            this._fitAddon = fitAddon;\n            this._initializeTerm();\n            this.id = `jp-Terminal-${Private.id++}`;\n            this.title.label = this._trans.__('Terminal');\n            this._isReady = true;\n            this._ready.resolve();\n            if (buffer) {\n                this._term.write(buffer);\n            }\n            session.messageReceived.disconnect(bufferMessage);\n            session.messageReceived.connect(this._onMessage, this);\n            if (session.connectionStatus === 'connected') {\n                this._initialConnection();\n            }\n            else {\n                session.connectionStatusChanged.connect(this._initialConnection, this);\n            }\n            this.update();\n        })\n            .catch(reason => {\n            console.error('Failed to create a terminal.\\n', reason);\n            this._ready.reject(reason);\n        });\n    }\n    /**\n     * A promise that is fulfilled when the terminal is ready.\n     */\n    get ready() {\n        return this._ready.promise;\n    }\n    /**\n     * Get a config option for the terminal.\n     */\n    getOption(option) {\n        return this._options[option];\n    }\n    /**\n     * Set a config option for the terminal.\n     */\n    setOption(option, value) {\n        if (option !== 'theme' &&\n            (this._options[option] === value || option === 'initialCommand')) {\n            return;\n        }\n        this._options[option] = value;\n        switch (option) {\n            case 'fontFamily':\n                this._term.options.fontFamily = value;\n                break;\n            case 'fontSize':\n                this._term.options.fontSize = value;\n                break;\n            case 'lineHeight':\n                this._term.options.lineHeight = value;\n                break;\n            case 'screenReaderMode':\n                this._term.options.screenReaderMode = value;\n                break;\n            case 'scrollback':\n                this._term.options.scrollback = value;\n                break;\n            case 'theme':\n                this._term.options.theme = {\n                    ...Private.getXTermTheme(value)\n                };\n                this._setThemeAttribute(value);\n                break;\n            case 'macOptionIsMeta':\n                this._term.options.macOptionIsMeta = value;\n                break;\n            default:\n                // Do not transmit options not listed above to XTerm\n                break;\n        }\n        this._needsResize = true;\n        this.update();\n    }\n    /**\n     * Dispose of the resources held by the terminal widget.\n     */\n    dispose() {\n        if (!this.session.isDisposed) {\n            if (this.getOption('shutdownOnClose')) {\n                this.session.shutdown().catch(reason => {\n                    console.error(`Terminal not shut down: ${reason}`);\n                });\n            }\n        }\n        void this.ready.then(() => {\n            this._term.dispose();\n        });\n        super.dispose();\n    }\n    /**\n     * Refresh the terminal session.\n     *\n     * #### Notes\n     * Failure to reconnect to the session should be caught appropriately\n     */\n    async refresh() {\n        if (!this.isDisposed && this._isReady) {\n            await this.session.reconnect();\n            this._term.clear();\n        }\n    }\n    /**\n     * Check if terminal has any text selected.\n     */\n    hasSelection() {\n        if (!this.isDisposed && this._isReady) {\n            return this._term.hasSelection();\n        }\n        return false;\n    }\n    /**\n     * Paste text into terminal.\n     */\n    paste(data) {\n        if (!this.isDisposed && this._isReady) {\n            return this._term.paste(data);\n        }\n    }\n    /**\n     * Get selected text from terminal.\n     */\n    getSelection() {\n        if (!this.isDisposed && this._isReady) {\n            return this._term.getSelection();\n        }\n        return null;\n    }\n    /**\n     * Process a message sent to the widget.\n     *\n     * @param msg - The message sent to the widget.\n     *\n     * #### Notes\n     * Subclasses may reimplement this method as needed.\n     */\n    processMessage(msg) {\n        super.processMessage(msg);\n        switch (msg.type) {\n            case 'fit-request':\n                this.onFitRequest(msg);\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Set the size of the terminal when attached if dirty.\n     */\n    onAfterAttach(msg) {\n        this.update();\n    }\n    /**\n     * Set the size of the terminal when shown if dirty.\n     */\n    onAfterShow(msg) {\n        this.update();\n    }\n    /**\n     * On resize, use the computed row and column sizes to resize the terminal.\n     */\n    onResize(msg) {\n        this._offsetWidth = msg.width;\n        this._offsetHeight = msg.height;\n        this._needsResize = true;\n        this.update();\n    }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     */\n    onUpdateRequest(msg) {\n        var _a;\n        if (!this.isVisible || !this.isAttached || !this._isReady) {\n            return;\n        }\n        // Open the terminal if necessary.\n        if (!this._termOpened) {\n            this._term.open(this.node);\n            (_a = this._term.element) === null || _a === void 0 ? void 0 : _a.classList.add(TERMINAL_BODY_CLASS);\n            this._termOpened = true;\n        }\n        if (this._needsResize) {\n            this._resizeTerminal();\n        }\n    }\n    /**\n     * A message handler invoked on an `'fit-request'` message.\n     */\n    onFitRequest(msg) {\n        const resize = Widget.ResizeMessage.UnknownSize;\n        MessageLoop.sendMessage(this, resize);\n    }\n    /**\n     * Handle `'activate-request'` messages.\n     */\n    onActivateRequest(msg) {\n        var _a;\n        (_a = this._term) === null || _a === void 0 ? void 0 : _a.focus();\n    }\n    _initialConnection() {\n        if (this.isDisposed) {\n            return;\n        }\n        if (this.session.connectionStatus !== 'connected') {\n            return;\n        }\n        this.title.label = this._trans.__('Terminal %1', this.session.name);\n        this._setSessionSize();\n        if (this._options.initialCommand) {\n            this.session.send({\n                type: 'stdin',\n                content: [this._options.initialCommand + '\\r']\n            });\n        }\n        // Only run this initial connection logic once.\n        this.session.connectionStatusChanged.disconnect(this._initialConnection, this);\n    }\n    /**\n     * Initialize the terminal object.\n     */\n    _initializeTerm() {\n        const term = this._term;\n        term.onData((data) => {\n            if (this.isDisposed) {\n                return;\n            }\n            this.session.send({\n                type: 'stdin',\n                content: [data]\n            });\n        });\n        term.onTitleChange((title) => {\n            this.title.label = title;\n        });\n        // Do not add any Ctrl+C/Ctrl+V handling on macOS,\n        // where Cmd+C/Cmd+V works as intended.\n        if (Platform.IS_MAC) {\n            return;\n        }\n        term.attachCustomKeyEventHandler(event => {\n            if (event.ctrlKey && event.key === 'c' && term.hasSelection()) {\n                // Return so that the usual OS copy happens\n                // instead of interrupt signal.\n                return false;\n            }\n            if (event.ctrlKey && event.key === 'v' && this._options.pasteWithCtrlV) {\n                // Return so that the usual paste happens.\n                return false;\n            }\n            return true;\n        });\n    }\n    /**\n     * Handle a message from the terminal session.\n     */\n    _onMessage(sender, msg) {\n        switch (msg.type) {\n            case 'stdout':\n                if (msg.content) {\n                    this._term.write(msg.content[0]);\n                }\n                break;\n            case 'disconnect':\n                this._term.write('\\r\\n\\r\\n[Finished… Term Session]\\r\\n');\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Resize the terminal based on computed geometry.\n     */\n    _resizeTerminal() {\n        if (this._options.autoFit) {\n            this._fitAddon.fit();\n        }\n        if (this._offsetWidth === -1) {\n            this._offsetWidth = this.node.offsetWidth;\n        }\n        if (this._offsetHeight === -1) {\n            this._offsetHeight = this.node.offsetHeight;\n        }\n        this._setSessionSize();\n        this._needsResize = false;\n    }\n    /**\n     * Set the size of the terminal in the session.\n     */\n    _setSessionSize() {\n        const content = [\n            this._term.rows,\n            this._term.cols,\n            this._offsetHeight,\n            this._offsetWidth\n        ];\n        if (!this.isDisposed) {\n            this.session.send({ type: 'set_size', content });\n        }\n    }\n    _setThemeAttribute(theme) {\n        if (this.isDisposed) {\n            return;\n        }\n        this.node.setAttribute('data-term-theme', theme ? theme.toLowerCase() : 'inherit');\n    }\n}\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * An incrementing counter for ids.\n     */\n    Private.id = 0;\n    /**\n     * The light terminal theme.\n     */\n    Private.lightTheme = {\n        foreground: '#000',\n        background: '#fff',\n        cursor: '#616161', // md-grey-700\n        cursorAccent: '#F5F5F5', // md-grey-100\n        selectionBackground: 'rgba(97, 97, 97, 0.3)', // md-grey-700\n        selectionInactiveBackground: 'rgba(189, 189, 189, 0.3)' // md-grey-400\n    };\n    /**\n     * The dark terminal theme.\n     */\n    Private.darkTheme = {\n        foreground: '#fff',\n        background: '#000',\n        cursor: '#fff',\n        cursorAccent: '#000',\n        selectionBackground: 'rgba(255, 255, 255, 0.3)',\n        selectionInactiveBackground: 'rgba(238, 238, 238, 0.3)' // md-grey-200\n    };\n    /**\n     * The current theme.\n     */\n    Private.inheritTheme = () => ({\n        foreground: getComputedStyle(document.body)\n            .getPropertyValue('--jp-ui-font-color0')\n            .trim(),\n        background: getComputedStyle(document.body)\n            .getPropertyValue('--jp-layout-color0')\n            .trim(),\n        cursor: getComputedStyle(document.body)\n            .getPropertyValue('--jp-ui-font-color1')\n            .trim(),\n        cursorAccent: getComputedStyle(document.body)\n            .getPropertyValue('--jp-ui-inverse-font-color0')\n            .trim(),\n        selectionBackground: getComputedStyle(document.body)\n            .getPropertyValue('--jp-layout-color3')\n            .trim(),\n        selectionInactiveBackground: getComputedStyle(document.body)\n            .getPropertyValue('--jp-layout-color2')\n            .trim()\n    });\n    function getXTermTheme(theme) {\n        switch (theme) {\n            case 'light':\n                return Private.lightTheme;\n            case 'dark':\n                return Private.darkTheme;\n            case 'inherit':\n            default:\n                return Private.inheritTheme();\n        }\n    }\n    Private.getXTermTheme = getXTermTheme;\n})(Private || (Private = {}));\n/**\n * Utility functions for creating a Terminal widget\n */\n(function (Private) {\n    let supportWebGL = false;\n    let Xterm_;\n    let FitAddon_;\n    let WeblinksAddon_;\n    let Renderer_;\n    /**\n     * Detect if the browser supports WebGL or not.\n     *\n     * Reference: https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/By_example/Detect_WebGL\n     */\n    function hasWebGLContext() {\n        // Create canvas element. The canvas is not added to the\n        // document itself, so it is never displayed in the\n        // browser window.\n        const canvas = document.createElement('canvas');\n        // Get WebGLRenderingContext from canvas element.\n        const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n        // Report the result.\n        try {\n            return gl instanceof WebGLRenderingContext;\n        }\n        catch (error) {\n            return false;\n        }\n    }\n    function addRenderer(term) {\n        let renderer = new Renderer_();\n        term.loadAddon(renderer);\n        if (supportWebGL) {\n            renderer.onContextLoss(event => {\n                console.debug('WebGL context lost - reinitialize Xtermjs renderer.');\n                renderer.dispose();\n                // If the Webgl context is lost, reinitialize the addon\n                addRenderer(term);\n            });\n        }\n    }\n    /**\n     * Create a xterm.js terminal asynchronously.\n     */\n    async function createTerminal(options) {\n        var _a;\n        if (!Xterm_) {\n            supportWebGL = hasWebGLContext();\n            const [xterm_, fitAddon_, renderer_, weblinksAddon_] = await Promise.all([\n                import('@xterm/xterm'),\n                import('@xterm/addon-fit'),\n                supportWebGL\n                    ? import('@xterm/addon-webgl')\n                    : import('@xterm/addon-canvas'),\n                import('@xterm/addon-web-links')\n            ]);\n            Xterm_ = xterm_.Terminal;\n            FitAddon_ = fitAddon_.FitAddon;\n            Renderer_ =\n                (_a = renderer_.WebglAddon) !== null && _a !== void 0 ? _a : renderer_.CanvasAddon;\n            WeblinksAddon_ = weblinksAddon_.WebLinksAddon;\n        }\n        const term = new Xterm_(options);\n        addRenderer(term);\n        const fitAddon = new FitAddon_();\n        term.loadAddon(fitAddon);\n        term.loadAddon(new WeblinksAddon_());\n        return [term, fitAddon];\n    }\n    Private.createTerminal = createTerminal;\n})(Private || (Private = {}));\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module terminal\n */\nexport * from './tokens';\nexport * from './widget';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module theme-dark-extension\n */\nimport { IThemeManager } from '@jupyterlab/apputils';\nimport { ITranslator } from '@jupyterlab/translation';\n/**\n * A plugin for the Jupyter Dark Theme.\n */\nconst plugin = {\n    id: '@jupyterlab/theme-dark-extension:plugin',\n    description: 'Adds a dark theme.',\n    requires: [IThemeManager, ITranslator],\n    activate: (app, manager, translator) => {\n        const trans = translator.load('jupyterlab');\n        const style = '@jupyterlab/theme-dark-extension/index.css';\n        manager.register({\n            name: 'JupyterLab Dark',\n            displayName: trans.__('JupyterLab Dark'),\n            isLight: false,\n            themeScrollbars: true,\n            load: () => manager.loadCSS(style),\n            unload: () => Promise.resolve(undefined)\n        });\n    },\n    autoStart: true\n};\nexport default plugin;\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module theme-dark-high-contrast-extension\n */\nimport { IThemeManager } from '@jupyterlab/apputils';\nimport { ITranslator } from '@jupyterlab/translation';\n/**\n * A plugin for the Jupyter Dark Theme.\n */\nconst plugin = {\n    id: '@jupyterlab/theme-dark-high-contrast-extension:plugin',\n    description: 'Adds a dark high contrast theme.',\n    requires: [IThemeManager, ITranslator],\n    activate: (app, manager, translator) => {\n        const trans = translator.load('jupyterlab');\n        const style = '@jupyterlab/theme-dark-high-contrast-extension/index.css';\n        manager.register({\n            name: 'JupyterLab Dark High Contrast',\n            displayName: trans.__('JupyterLab Dark High Contrast'),\n            isLight: false,\n            themeScrollbars: true,\n            load: () => manager.loadCSS(style),\n            unload: () => Promise.resolve(undefined)\n        });\n    },\n    autoStart: true\n};\nexport default plugin;\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module theme-light-extension\n */\nimport { IThemeManager } from '@jupyterlab/apputils';\nimport { ITranslator } from '@jupyterlab/translation';\n/**\n * A plugin for the Jupyter Light Theme.\n */\nconst plugin = {\n    id: '@jupyterlab/theme-light-extension:plugin',\n    description: 'Adds a light theme.',\n    requires: [IThemeManager, ITranslator],\n    activate: (app, manager, translator) => {\n        const trans = translator.load('jupyterlab');\n        const style = '@jupyterlab/theme-light-extension/index.css';\n        manager.register({\n            name: 'JupyterLab Light',\n            displayName: trans.__('JupyterLab Light'),\n            isLight: true,\n            themeScrollbars: false,\n            load: () => manager.loadCSS(style),\n            unload: () => Promise.resolve(undefined)\n        });\n    },\n    autoStart: true\n};\nexport default plugin;\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module toc-extension\n */\nimport { ILabShell, ILayoutRestorer } from '@jupyterlab/application';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITableOfContentsRegistry, ITableOfContentsTracker, TableOfContents, TableOfContentsPanel, TableOfContentsRegistry, TableOfContentsTracker } from '@jupyterlab/toc';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { collapseAllIcon, CommandToolbarButton, ellipsesIcon, expandAllIcon, MenuSvg, numberingIcon, tocIcon, Toolbar, ToolbarButton } from '@jupyterlab/ui-components';\n/**\n * A namespace for command IDs of table of contents plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.displayNumbering = 'toc:display-numbering';\n    CommandIDs.displayH1Numbering = 'toc:display-h1-numbering';\n    CommandIDs.displayOutputNumbering = 'toc:display-outputs-numbering';\n    CommandIDs.showPanel = 'toc:show-panel';\n    CommandIDs.toggleCollapse = 'toc:toggle-collapse';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * Activates the ToC extension.\n *\n * @private\n * @param app - Jupyter application\n * @param tocRegistry - Table of contents registry\n * @param translator - translator\n * @param restorer - application layout restorer\n * @param labShell - Jupyter lab shell\n * @param settingRegistry - setting registry\n * @returns table of contents registry\n */\nasync function activateTOC(app, tocRegistry, translator, restorer, labShell, settingRegistry) {\n    const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n    let configuration = { ...TableOfContents.defaultConfig };\n    // Create the ToC widget:\n    const toc = new TableOfContentsPanel(translator !== null && translator !== void 0 ? translator : undefined);\n    toc.title.icon = tocIcon;\n    toc.title.caption = trans.__('Table of Contents');\n    toc.id = 'table-of-contents';\n    toc.node.setAttribute('role', 'region');\n    toc.node.setAttribute('aria-label', trans.__('Table of Contents section'));\n    app.commands.addCommand(CommandIDs.displayH1Numbering, {\n        label: trans.__('Show first-level heading number'),\n        execute: () => {\n            if (toc.model) {\n                toc.model.setConfiguration({\n                    numberingH1: !toc.model.configuration.numberingH1\n                });\n            }\n        },\n        isEnabled: () => { var _a, _b; return (_b = (_a = toc.model) === null || _a === void 0 ? void 0 : _a.supportedOptions.includes('numberingH1')) !== null && _b !== void 0 ? _b : false; },\n        isToggled: () => { var _a, _b; return (_b = (_a = toc.model) === null || _a === void 0 ? void 0 : _a.configuration.numberingH1) !== null && _b !== void 0 ? _b : false; }\n    });\n    app.commands.addCommand(CommandIDs.displayNumbering, {\n        label: trans.__('Show heading number in the document'),\n        icon: args => (args.toolbar ? numberingIcon : undefined),\n        execute: () => {\n            if (toc.model) {\n                toc.model.setConfiguration({\n                    numberHeaders: !toc.model.configuration.numberHeaders\n                });\n                app.commands.notifyCommandChanged(CommandIDs.displayNumbering);\n            }\n        },\n        isEnabled: () => { var _a, _b; return (_b = (_a = toc.model) === null || _a === void 0 ? void 0 : _a.supportedOptions.includes('numberHeaders')) !== null && _b !== void 0 ? _b : false; },\n        isToggled: () => { var _a, _b; return (_b = (_a = toc.model) === null || _a === void 0 ? void 0 : _a.configuration.numberHeaders) !== null && _b !== void 0 ? _b : false; }\n    });\n    app.commands.addCommand(CommandIDs.displayOutputNumbering, {\n        label: trans.__('Show output headings'),\n        execute: () => {\n            if (toc.model) {\n                toc.model.setConfiguration({\n                    includeOutput: !toc.model.configuration.includeOutput\n                });\n            }\n        },\n        isEnabled: () => { var _a, _b; return (_b = (_a = toc.model) === null || _a === void 0 ? void 0 : _a.supportedOptions.includes('includeOutput')) !== null && _b !== void 0 ? _b : false; },\n        isToggled: () => { var _a, _b; return (_b = (_a = toc.model) === null || _a === void 0 ? void 0 : _a.configuration.includeOutput) !== null && _b !== void 0 ? _b : false; }\n    });\n    app.commands.addCommand(CommandIDs.showPanel, {\n        label: trans.__('Table of Contents'),\n        execute: () => {\n            app.shell.activateById(toc.id);\n        }\n    });\n    function someExpanded(model) {\n        return model.headings.some(h => { var _a; return !((_a = h.collapsed) !== null && _a !== void 0 ? _a : false); });\n    }\n    app.commands.addCommand(CommandIDs.toggleCollapse, {\n        label: () => toc.model && !someExpanded(toc.model)\n            ? trans.__('Expand All Headings')\n            : trans.__('Collapse All Headings'),\n        icon: args => args.toolbar\n            ? toc.model && !someExpanded(toc.model)\n                ? expandAllIcon\n                : collapseAllIcon\n            : undefined,\n        execute: () => {\n            if (toc.model) {\n                if (someExpanded(toc.model)) {\n                    toc.model.toggleCollapse({ collapsed: true });\n                }\n                else {\n                    toc.model.toggleCollapse({ collapsed: false });\n                }\n            }\n        },\n        isEnabled: () => toc.model !== null\n    });\n    const tracker = new TableOfContentsTracker();\n    if (restorer) {\n        // Add the ToC widget to the application restorer:\n        restorer.add(toc, '@jupyterlab/toc:plugin');\n    }\n    // Attempt to load plugin settings:\n    let settings;\n    if (settingRegistry) {\n        try {\n            settings = await settingRegistry.load(registry.id);\n            const updateSettings = (plugin) => {\n                const composite = plugin.composite;\n                for (const key of [...Object.keys(configuration)]) {\n                    const value = composite[key];\n                    if (value !== undefined) {\n                        configuration[key] = value;\n                    }\n                }\n                if (labShell) {\n                    for (const widget of labShell.widgets('main')) {\n                        const model = tracker.get(widget);\n                        if (model) {\n                            model.setConfiguration(configuration);\n                        }\n                    }\n                }\n                else {\n                    if (app.shell.currentWidget) {\n                        const model = tracker.get(app.shell.currentWidget);\n                        if (model) {\n                            model.setConfiguration(configuration);\n                        }\n                    }\n                }\n            };\n            if (settings) {\n                settings.changed.connect(updateSettings);\n                updateSettings(settings);\n            }\n        }\n        catch (error) {\n            console.error(`Failed to load settings for the Table of Contents extension.\\n\\n${error}`);\n        }\n    }\n    // Set up the panel toolbar\n    const numbering = new CommandToolbarButton({\n        commands: app.commands,\n        id: CommandIDs.displayNumbering,\n        args: {\n            toolbar: true\n        },\n        label: ''\n    });\n    numbering.addClass('jp-toc-numberingButton');\n    toc.toolbar.node.setAttribute('aria-label', trans.__('Table of contents sidepanel toolbar'));\n    toc.toolbar.addItem('display-numbering', numbering);\n    toc.toolbar.addItem('spacer', Toolbar.createSpacerItem());\n    toc.toolbar.addItem('collapse-all', new CommandToolbarButton({\n        commands: app.commands,\n        id: CommandIDs.toggleCollapse,\n        args: {\n            toolbar: true\n        },\n        label: ''\n    }));\n    const toolbarMenu = new MenuSvg({ commands: app.commands });\n    toolbarMenu.addItem({\n        command: CommandIDs.displayH1Numbering\n    });\n    toolbarMenu.addItem({\n        command: CommandIDs.displayOutputNumbering\n    });\n    const menuButton = new ToolbarButton({\n        tooltip: trans.__('More actions…'),\n        icon: ellipsesIcon,\n        noFocusOnClick: false,\n        onClick: () => {\n            const bbox = menuButton.node.getBoundingClientRect();\n            toolbarMenu.open(bbox.x, bbox.bottom);\n        }\n    });\n    toc.toolbar.addItem('submenu', menuButton);\n    // Add the ToC to the left area:\n    app.shell.add(toc, 'left', { rank: 400, type: 'Table of Contents' });\n    // Update the ToC when the active widget changes:\n    if (labShell) {\n        labShell.currentChanged.connect(onConnect);\n    }\n    // Connect to current widget\n    void app.restored.then(() => {\n        onConnect();\n    });\n    return tracker;\n    /**\n     * Callback invoked when the active widget changes.\n     *\n     * @private\n     */\n    function onConnect() {\n        var _a;\n        let widget = app.shell.currentWidget;\n        if (!widget) {\n            return;\n        }\n        let model = tracker.get(widget);\n        if (!model) {\n            model = (_a = tocRegistry.getModel(widget, configuration)) !== null && _a !== void 0 ? _a : null;\n            if (model) {\n                tracker.add(widget, model);\n            }\n            widget.disposed.connect(() => {\n                model === null || model === void 0 ? void 0 : model.dispose();\n            });\n        }\n        if (toc.model) {\n            toc.model.headingsChanged.disconnect(onCollapseChange);\n            toc.model.collapseChanged.disconnect(onCollapseChange);\n        }\n        toc.model = model;\n        if (toc.model) {\n            toc.model.headingsChanged.connect(onCollapseChange);\n            toc.model.collapseChanged.connect(onCollapseChange);\n        }\n        setToolbarButtonsState();\n    }\n    function setToolbarButtonsState() {\n        app.commands.notifyCommandChanged(CommandIDs.displayNumbering);\n        app.commands.notifyCommandChanged(CommandIDs.toggleCollapse);\n    }\n    function onCollapseChange() {\n        app.commands.notifyCommandChanged(CommandIDs.toggleCollapse);\n    }\n}\n/**\n * Table of contents registry plugin.\n */\nconst registry = {\n    id: '@jupyterlab/toc-extension:registry',\n    description: 'Provides the table of contents registry.',\n    autoStart: true,\n    provides: ITableOfContentsRegistry,\n    activate: () => {\n        // Create the ToC registry\n        return new TableOfContentsRegistry();\n    }\n};\n/**\n * Table of contents tracker plugin.\n */\nconst tracker = {\n    id: '@jupyterlab/toc-extension:tracker',\n    description: 'Adds the table of content widget and provides its tracker.',\n    autoStart: true,\n    provides: ITableOfContentsTracker,\n    requires: [ITableOfContentsRegistry],\n    optional: [ITranslator, ILayoutRestorer, ILabShell, ISettingRegistry],\n    activate: activateTOC\n};\n/**\n * Exports.\n */\nexport default [registry, tracker];\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/toc/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ActivityMonitor, PathExt } from '@jupyterlab/coreutils';\n/**\n * Timeout for throttling ToC rendering following model changes.\n *\n * @private\n */\nconst RENDER_TIMEOUT = 1000;\n/**\n * Abstract table of contents model factory for IDocumentWidget.\n */\nexport class TableOfContentsFactory {\n    /**\n     * Constructor\n     *\n     * @param tracker Widget tracker\n     */\n    constructor(tracker) {\n        this.tracker = tracker;\n    }\n    /**\n     * Whether the factory can handle the widget or not.\n     *\n     * @param widget - widget\n     * @returns boolean indicating a ToC can be generated\n     */\n    isApplicable(widget) {\n        if (!this.tracker.has(widget)) {\n            return false;\n        }\n        return true;\n    }\n    /**\n     * Create a new table of contents model for the widget\n     *\n     * @param widget - widget\n     * @param configuration - Table of contents configuration\n     * @returns The table of contents model\n     */\n    createNew(widget, configuration) {\n        const model = this._createNew(widget, configuration);\n        const context = widget.context;\n        const updateHeadings = () => {\n            model.refresh().catch(reason => {\n                console.error('Failed to update the table of contents.', reason);\n            });\n        };\n        const monitor = new ActivityMonitor({\n            signal: context.model.contentChanged,\n            timeout: RENDER_TIMEOUT\n        });\n        monitor.activityStopped.connect(updateHeadings);\n        const updateTitle = () => {\n            model.title = PathExt.basename(context.localPath);\n        };\n        context.pathChanged.connect(updateTitle);\n        context.ready\n            .then(() => {\n            updateTitle();\n            updateHeadings();\n        })\n            .catch(reason => {\n            console.error(`Failed to initiate headings for ${context.localPath}.`);\n        });\n        widget.disposed.connect(() => {\n            monitor.activityStopped.disconnect(updateHeadings);\n            context.pathChanged.disconnect(updateTitle);\n        });\n        return model;\n    }\n}\n//# sourceMappingURL=factory.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * Table of contents registry token.\n */\nexport const ITableOfContentsRegistry = new Token('@jupyterlab/toc:ITableOfContentsRegistry', 'A service to register table of content factory.');\n/**\n * Table of contents tracker token.\n */\nexport const ITableOfContentsTracker = new Token('@jupyterlab/toc:ITableOfContentsTracker', 'A widget tracker for table of contents.');\n/**\n * Namespace for table of contents interface\n */\nexport var TableOfContents;\n(function (TableOfContents) {\n    /**\n     * Default table of content configuration\n     */\n    TableOfContents.defaultConfig = {\n        baseNumbering: 1,\n        maximalDepth: 4,\n        numberingH1: true,\n        numberHeaders: false,\n        includeOutput: true,\n        syncCollapseState: false\n    };\n})(TableOfContents || (TableOfContents = {}));\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { VDomModel } from '@jupyterlab/ui-components';\nimport { JSONExt } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\nimport { TableOfContents } from './tokens';\n/**\n * Abstract table of contents model.\n */\nexport class TableOfContentsModel extends VDomModel {\n    /**\n     * Constructor\n     *\n     * @param widget The widget to search in\n     * @param configuration Default model configuration\n     */\n    constructor(widget, configuration) {\n        super();\n        this.widget = widget;\n        this._activeHeading = null;\n        this._activeHeadingChanged = new Signal(this);\n        this._collapseChanged = new Signal(this);\n        this._configuration = configuration !== null && configuration !== void 0 ? configuration : { ...TableOfContents.defaultConfig };\n        this._headings = new Array();\n        this._headingsChanged = new Signal(this);\n        this._isActive = false;\n        this._isRefreshing = false;\n        this._needsRefreshing = false;\n    }\n    /**\n     * Current active entry.\n     *\n     * @returns table of contents active entry\n     */\n    get activeHeading() {\n        return this._activeHeading;\n    }\n    /**\n     * Signal emitted when the active heading changes.\n     */\n    get activeHeadingChanged() {\n        return this._activeHeadingChanged;\n    }\n    /**\n     * Signal emitted when a table of content section collapse state changes.\n     */\n    get collapseChanged() {\n        return this._collapseChanged;\n    }\n    /**\n     * Model configuration\n     */\n    get configuration() {\n        return this._configuration;\n    }\n    /**\n     * List of headings.\n     *\n     * @returns table of contents list of headings\n     */\n    get headings() {\n        return this._headings;\n    }\n    /**\n     * Signal emitted when the headings changes.\n     */\n    get headingsChanged() {\n        return this._headingsChanged;\n    }\n    /**\n     * Whether the model is active or not.\n     *\n     * #### Notes\n     * An active model means it is displayed in the table of contents.\n     * This can be used by subclass to limit updating the headings.\n     */\n    get isActive() {\n        return this._isActive;\n    }\n    set isActive(v) {\n        this._isActive = v;\n        // Refresh on activation expect if it is always active\n        //  => a ToC model is always active e.g. when displaying numbering in the document\n        if (this._isActive && !this.isAlwaysActive) {\n            this.refresh().catch(reason => {\n                console.error('Failed to refresh ToC model.', reason);\n            });\n        }\n    }\n    /**\n     * Whether the model gets updated even if the table of contents panel\n     * is hidden or not.\n     *\n     * #### Notes\n     * For example, ToC models use to add title numbering will\n     * set this to true.\n     */\n    get isAlwaysActive() {\n        return false;\n    }\n    /**\n     * List of configuration options supported by the model.\n     */\n    get supportedOptions() {\n        return ['maximalDepth'];\n    }\n    /**\n     * Document title\n     */\n    get title() {\n        return this._title;\n    }\n    set title(v) {\n        if (v !== this._title) {\n            this._title = v;\n            this.stateChanged.emit();\n        }\n    }\n    /**\n     * Refresh the headings list.\n     */\n    async refresh() {\n        if (this._isRefreshing) {\n            // Schedule a refresh if one is in progress\n            this._needsRefreshing = true;\n            return Promise.resolve();\n        }\n        this._isRefreshing = true;\n        try {\n            const newHeadings = await this.getHeadings();\n            if (this._needsRefreshing) {\n                this._needsRefreshing = false;\n                this._isRefreshing = false;\n                return this.refresh();\n            }\n            if (newHeadings && !this._areHeadingsEqual(newHeadings, this._headings)) {\n                this._headings = newHeadings;\n                this.stateChanged.emit();\n                this._headingsChanged.emit();\n            }\n        }\n        finally {\n            this._isRefreshing = false;\n        }\n    }\n    /**\n     * Set a new active heading.\n     *\n     * @param heading The new active heading\n     * @param emitSignal Whether to emit the activeHeadingChanged signal or not.\n     */\n    setActiveHeading(heading, emitSignal = true) {\n        if (this._activeHeading !== heading) {\n            this._activeHeading = heading;\n            this.stateChanged.emit();\n        }\n        if (emitSignal) {\n            // Always emit the signal to trigger a scroll even if the value did not change\n            this._activeHeadingChanged.emit(this._activeHeading);\n        }\n    }\n    /**\n     * Model configuration setter.\n     *\n     * @param c New configuration\n     */\n    setConfiguration(c) {\n        const newConfiguration = { ...this._configuration, ...c };\n        if (!JSONExt.deepEqual(this._configuration, newConfiguration)) {\n            this._configuration = newConfiguration;\n            this.refresh().catch(reason => {\n                console.error('Failed to update the table of contents.', reason);\n            });\n        }\n    }\n    /**\n     * Callback on heading collapse.\n     *\n     * @param options.heading The heading to change state (all headings if not provided)\n     * @param options.collapsed The new collapsed status (toggle existing status if not provided)\n     */\n    toggleCollapse(options) {\n        var _a, _b;\n        if (options.heading) {\n            options.heading.collapsed =\n                (_a = options.collapsed) !== null && _a !== void 0 ? _a : !options.heading.collapsed;\n            this.stateChanged.emit();\n            this._collapseChanged.emit(options.heading);\n        }\n        else {\n            // Use the provided state or collapsed all except if all are collapsed\n            const newState = (_b = options.collapsed) !== null && _b !== void 0 ? _b : !this.headings.some(h => { var _a; return !((_a = h.collapsed) !== null && _a !== void 0 ? _a : false); });\n            this.headings.forEach(h => (h.collapsed = newState));\n            this.stateChanged.emit();\n            this._collapseChanged.emit(null);\n        }\n    }\n    /**\n     * Test if two headings are equal or not.\n     *\n     * @param heading1 First heading\n     * @param heading2 Second heading\n     * @returns Whether the headings are equal.\n     */\n    isHeadingEqual(heading1, heading2) {\n        return (heading1.level === heading2.level &&\n            heading1.text === heading2.text &&\n            heading1.prefix === heading2.prefix);\n    }\n    /**\n     * Test if two list of headings are equal or not.\n     *\n     * @param headings1 First list of headings\n     * @param headings2 Second list of headings\n     * @returns Whether the array are equal.\n     */\n    _areHeadingsEqual(headings1, headings2) {\n        if (headings1.length === headings2.length) {\n            for (let i = 0; i < headings1.length; i++) {\n                if (!this.isHeadingEqual(headings1[i], headings2[i])) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        return false;\n    }\n}\n//# sourceMappingURL=model.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport * as React from 'react';\nimport { TreeItem } from '@jupyter/react-components';\n/**\n * React component for a table of contents entry.\n */\nexport class TableOfContentsItem extends React.PureComponent {\n    /**\n     * Renders a table of contents entry.\n     *\n     * @returns rendered entry\n     */\n    render() {\n        const { children, isActive, heading, onCollapse, onMouseDown } = this.props;\n        // Handling toggle of collapse and expand\n        const handleToggle = (event) => {\n            // This will toggle the state and call the appropriate collapse or expand function\n            if (!event.defaultPrevented &&\n                event.target.expanded !== !heading.collapsed) {\n                event.preventDefault();\n                onCollapse(heading);\n            }\n        };\n        return (React.createElement(TreeItem, { className: 'jp-tocItem jp-TreeItem nested', selected: isActive, expanded: !heading.collapsed, onExpand: handleToggle, onMouseDown: (event) => {\n                // React only on deepest item\n                if (!event.defaultPrevented) {\n                    event.preventDefault();\n                    onMouseDown(heading);\n                }\n            }, onKeyUp: event => {\n                // React on key up because key down is used for tree view navigation\n                // and therefore key-down on Enter is default prevented to change the\n                // selection state\n                if (!event.defaultPrevented && event.key === 'Enter' && !isActive) {\n                    event.preventDefault();\n                    onMouseDown(heading);\n                }\n            } },\n            React.createElement(\"div\", { className: \"jp-tocItem-heading\" },\n                React.createElement(\"span\", { className: \"jp-tocItem-content\", title: heading.text, ...heading.dataset },\n                    heading.prefix,\n                    heading.text)),\n            children));\n    }\n}\n//# sourceMappingURL=tocitem.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { TreeView } from '@jupyter/react-components';\nimport * as React from 'react';\nimport { TableOfContentsItem } from './tocitem';\n/**\n * React component for a table of contents tree.\n */\nexport class TableOfContentsTree extends React.PureComponent {\n    /**\n     * Renders a table of contents tree.\n     */\n    render() {\n        const { documentType } = this.props;\n        return (React.createElement(TreeView, { className: 'jp-TableOfContents-content jp-TreeView', 'data-document-type': documentType }, this.buildTree()));\n    }\n    /**\n     * Convert the flat headings list to a nested tree list\n     */\n    buildTree() {\n        if (this.props.headings.length === 0) {\n            return [];\n        }\n        const buildOneTree = (currentIndex) => {\n            const items = this.props.headings;\n            const children = new Array();\n            const current = items[currentIndex];\n            let nextCandidateIndex = currentIndex + 1;\n            while (nextCandidateIndex < items.length) {\n                const candidateItem = items[nextCandidateIndex];\n                if (candidateItem.level <= current.level) {\n                    break;\n                }\n                const [child, nextIndex] = buildOneTree(nextCandidateIndex);\n                children.push(child);\n                nextCandidateIndex = nextIndex;\n            }\n            const currentTree = (React.createElement(TableOfContentsItem, { key: `${current.level}-${currentIndex}-${current.text}`, isActive: !!this.props.activeHeading && current === this.props.activeHeading, heading: current, onMouseDown: this.props.setActiveHeading, onCollapse: this.props.onCollapseChange }, children.length ? children : null));\n            return [currentTree, nextCandidateIndex];\n        };\n        const trees = new Array();\n        let currentIndex = 0;\n        while (currentIndex < this.props.headings.length) {\n            const [tree, nextIndex] = buildOneTree(currentIndex);\n            trees.push(tree);\n            currentIndex = nextIndex;\n        }\n        return trees;\n    }\n}\n//# sourceMappingURL=toctree.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { VDomRenderer } from '@jupyterlab/ui-components';\nimport * as React from 'react';\nimport { TableOfContentsTree } from './toctree';\n/**\n * Table of contents widget.\n */\nexport class TableOfContentsWidget extends VDomRenderer {\n    /**\n     * Constructor\n     *\n     * @param options Widget options\n     */\n    constructor(options) {\n        super(options.model);\n        this._placeholderHeadline = options.placeholderHeadline;\n        this._placeholderText = options.placeholderText;\n    }\n    /**\n     * Render the content of this widget using the virtual DOM.\n     *\n     * This method will be called anytime the widget needs to be rendered, which\n     * includes layout triggered rendering.\n     */\n    render() {\n        if (!this.model || this.model.headings.length === 0) {\n            return (React.createElement(\"div\", { className: \"jp-TableOfContents-placeholder\" },\n                React.createElement(\"div\", { className: \"jp-TableOfContents-placeholderContent\" },\n                    React.createElement(\"h3\", null, this._placeholderHeadline),\n                    React.createElement(\"p\", null, this._placeholderText))));\n        }\n        return (React.createElement(TableOfContentsTree, { activeHeading: this.model.activeHeading, documentType: this.model.documentType, headings: this.model.headings, onCollapseChange: (heading) => {\n                this.model.toggleCollapse({ heading });\n            }, setActiveHeading: (heading) => {\n                this.model.setActiveHeading(heading);\n            } }));\n    }\n}\n//# sourceMappingURL=treeview.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { SidePanel } from '@jupyterlab/ui-components';\nimport { Panel, Widget } from '@lumino/widgets';\nimport { TableOfContentsWidget } from './treeview';\n/**\n * Table of contents sidebar panel.\n */\nexport class TableOfContentsPanel extends SidePanel {\n    /**\n     * Constructor\n     *\n     * @param translator - Translator tool\n     */\n    constructor(translator) {\n        super({ content: new Panel(), translator });\n        this._model = null;\n        this.addClass('jp-TableOfContents');\n        this._title = new Private.Header(this._trans.__('Table of Contents'));\n        this.header.addWidget(this._title);\n        this._treeview = new TableOfContentsWidget({\n            placeholderHeadline: this._trans.__('No Headings'),\n            placeholderText: this._trans.__('The table of contents shows headings in notebooks and supported files.')\n        });\n        this._treeview.addClass('jp-TableOfContents-tree');\n        this.content.addWidget(this._treeview);\n    }\n    /**\n     * Get the current model.\n     */\n    get model() {\n        return this._model;\n    }\n    set model(newValue) {\n        var _a, _b;\n        if (this._model !== newValue) {\n            (_a = this._model) === null || _a === void 0 ? void 0 : _a.stateChanged.disconnect(this._onTitleChanged, this);\n            this._model = newValue;\n            if (this._model) {\n                this._model.isActive = this.isVisible;\n            }\n            (_b = this._model) === null || _b === void 0 ? void 0 : _b.stateChanged.connect(this._onTitleChanged, this);\n            this._onTitleChanged();\n            this._treeview.model = this._model;\n        }\n    }\n    onAfterHide(msg) {\n        super.onAfterHide(msg);\n        if (this._model) {\n            this._model.isActive = false;\n        }\n    }\n    onBeforeShow(msg) {\n        super.onBeforeShow(msg);\n        if (this._model) {\n            this._model.isActive = true;\n        }\n    }\n    _onTitleChanged() {\n        var _a, _b;\n        this._title.setTitle((_b = (_a = this._model) === null || _a === void 0 ? void 0 : _a.title) !== null && _b !== void 0 ? _b : this._trans.__('Table of Contents'));\n    }\n}\n/**\n * Private helpers namespace\n */\nvar Private;\n(function (Private) {\n    /**\n     * Panel header\n     */\n    class Header extends Widget {\n        /**\n         * Constructor\n         *\n         * @param title - Title text\n         */\n        constructor(title) {\n            const node = document.createElement('h2');\n            node.textContent = title;\n            node.classList.add('jp-text-truncated');\n            super({ node });\n            this._title = node;\n        }\n        /**\n         * Set the header title.\n         */\n        setTitle(title) {\n            this._title.textContent = title;\n        }\n    }\n    Private.Header = Header;\n})(Private || (Private = {}));\n//# sourceMappingURL=panel.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { DisposableDelegate } from '@lumino/disposable';\n/**\n * Class for registering table of contents generators.\n */\nexport class TableOfContentsRegistry {\n    constructor() {\n        this._generators = new Map();\n        this._idCounter = 0;\n    }\n    /**\n     * Finds a table of contents model for a widget.\n     *\n     * ## Notes\n     *\n     * -   If unable to find a table of contents model, the method return `undefined`.\n     *\n     * @param widget - widget\n     * @param configuration - Default model configuration\n     * @returns Table of contents model\n     */\n    getModel(widget, configuration) {\n        for (const generator of this._generators.values()) {\n            if (generator.isApplicable(widget)) {\n                return generator.createNew(widget, configuration);\n            }\n        }\n    }\n    /**\n     * Adds a table of contents generator to the registry.\n     *\n     * @param generator - table of contents generator\n     */\n    add(generator) {\n        const id = this._idCounter++;\n        this._generators.set(id, generator);\n        return new DisposableDelegate(() => {\n            this._generators.delete(id);\n        });\n    }\n}\n//# sourceMappingURL=registry.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * Table of contents tracker\n */\nexport class TableOfContentsTracker {\n    /**\n     * Constructor\n     */\n    constructor() {\n        this.modelMapping = new WeakMap();\n    }\n    /**\n     * Track a given model.\n     *\n     * @param widget Widget\n     * @param model Table of contents model\n     */\n    add(widget, model) {\n        this.modelMapping.set(widget, model);\n    }\n    /**\n     * Get the table of contents model associated with a given widget.\n     *\n     * @param widget Widget\n     * @returns The table of contents model\n     */\n    get(widget) {\n        const model = this.modelMapping.get(widget);\n        return !model || model.isDisposed ? null : model;\n    }\n}\n//# sourceMappingURL=tracker.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { TableOfContents } from '../tokens';\n/**\n * Class used to mark numbering prefix for headings in a document.\n */\nexport const NUMBERING_CLASS = 'numbering-entry';\n/**\n * Filter headings for table of contents and compute associated prefix\n *\n * @param headings Headings to process\n * @param options Options\n * @param initialLevels Initial levels for prefix computation\n * @returns Extracted headings\n */\nexport function filterHeadings(headings, options, initialLevels = []) {\n    const config = {\n        ...TableOfContents.defaultConfig,\n        ...options\n    };\n    const levels = initialLevels;\n    let previousLevel = levels.length;\n    const filteredHeadings = new Array();\n    for (const heading of headings) {\n        if (heading.skip) {\n            continue;\n        }\n        const level = heading.level;\n        if (level > 0 && level <= config.maximalDepth) {\n            const prefix = getPrefix(level, previousLevel, levels, config);\n            previousLevel = level;\n            filteredHeadings.push({\n                ...heading,\n                prefix\n            });\n        }\n    }\n    return filteredHeadings;\n}\n/**\n * Returns whether a MIME type corresponds to either HTML.\n *\n * @param mime - MIME type string\n * @returns boolean indicating whether a provided MIME type corresponds to either HTML\n *\n * @example\n * const bool = isHTML('text/html');\n * // returns true\n *\n * @example\n * const bool = isHTML('text/plain');\n * // returns false\n */\nexport function isHTML(mime) {\n    return mime === 'text/html';\n}\n/**\n * Parse a HTML string for headings.\n *\n * ### Notes\n * The html string is not sanitized - use with caution\n *\n * @param html HTML string to parse\n * @param force Whether to ignore HTML headings with class jp-toc-ignore and tocSkip or not\n * @returns Extracted headings\n */\nexport function getHTMLHeadings(html, force = true) {\n    var _a;\n    const container = document.createElement('div');\n    container.innerHTML = html;\n    const headings = new Array();\n    const headers = container.querySelectorAll('h1, h2, h3, h4, h5, h6');\n    for (const h of headers) {\n        const level = parseInt(h.tagName[1], 10);\n        headings.push({\n            text: (_a = h.textContent) !== null && _a !== void 0 ? _a : '',\n            level,\n            id: h === null || h === void 0 ? void 0 : h.getAttribute('id'),\n            skip: h.classList.contains('jp-toc-ignore') || h.classList.contains('tocSkip')\n        });\n    }\n    return headings;\n}\n/**\n * Add an heading prefix to a HTML node.\n *\n * @param container HTML node containing the heading\n * @param selector Heading selector\n * @param prefix Title prefix to add\n * @returns The modified HTML element\n */\nexport function addPrefix(container, selector, prefix) {\n    let element = container.querySelector(selector);\n    if (!element) {\n        return null;\n    }\n    if (!element.querySelector(`span.${NUMBERING_CLASS}`)) {\n        addNumbering(element, prefix);\n    }\n    else {\n        // There are likely multiple elements with the same selector\n        //  => use the first one without prefix\n        const allElements = container.querySelectorAll(selector);\n        for (const el of allElements) {\n            if (!el.querySelector(`span.${NUMBERING_CLASS}`)) {\n                element = el;\n                addNumbering(el, prefix);\n                break;\n            }\n        }\n    }\n    return element;\n}\n/**\n * Update the levels and create the numbering prefix\n *\n * @param level Current level\n * @param previousLevel Previous level\n * @param levels Levels list\n * @param options Options\n * @returns The numbering prefix\n */\nexport function getPrefix(level, previousLevel, levels, options) {\n    const { baseNumbering, numberingH1, numberHeaders } = options;\n    let prefix = '';\n    if (numberHeaders) {\n        const highestLevel = numberingH1 ? 1 : 2;\n        if (level > previousLevel) {\n            // Initialize the new levels\n            for (let l = previousLevel; l < level - 1; l++) {\n                levels[l] = 0;\n            }\n            levels[level - 1] = level === highestLevel ? baseNumbering : 1;\n        }\n        else {\n            // Increment the current level\n            levels[level - 1] += 1;\n            // Drop higher levels\n            if (level < previousLevel) {\n                levels.splice(level);\n            }\n        }\n        // If the header list skips some level, replace missing elements by 0\n        if (numberingH1) {\n            prefix = levels.map(level => level !== null && level !== void 0 ? level : 0).join('.') + '. ';\n        }\n        else {\n            if (levels.length > 1) {\n                prefix =\n                    levels\n                        .slice(1)\n                        .map(level => level !== null && level !== void 0 ? level : 0)\n                        .join('.') + '. ';\n            }\n        }\n    }\n    return prefix;\n}\n/**\n * Add a numbering prefix to a HTML element.\n *\n * @param el HTML element\n * @param numbering Numbering prefix to add\n */\nfunction addNumbering(el, numbering) {\n    el.insertAdjacentHTML('afterbegin', `<span class=\"${NUMBERING_CLASS}\">${numbering}</span>`);\n}\n/**\n * Remove all numbering nodes from element\n * @param element Node to clear\n */\nexport function clearNumbering(element) {\n    element === null || element === void 0 ? void 0 : element.querySelectorAll(`span.${NUMBERING_CLASS}`).forEach(el => {\n        el.remove();\n    });\n}\n//# sourceMappingURL=common.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Sanitizer } from '@jupyterlab/apputils';\nimport { renderMarkdown } from '@jupyterlab/rendermime';\n/**\n * Build the heading html id.\n *\n * @param raw Raw markdown heading\n * @param level Heading level\n * @param sanitizer HTML sanitizer\n */\nexport async function getHeadingId(markdownParser, raw, level, sanitizer) {\n    try {\n        const host = document.createElement('div');\n        await renderMarkdown({\n            markdownParser,\n            host,\n            source: raw,\n            trusted: false,\n            sanitizer: sanitizer !== null && sanitizer !== void 0 ? sanitizer : new Sanitizer(),\n            shouldTypeset: false,\n            resolver: null,\n            linkHandler: null,\n            latexTypesetter: null\n        });\n        const header = host.querySelector(`h${level}`);\n        if (!header) {\n            return null;\n        }\n        return header.id;\n    }\n    catch (reason) {\n        console.error('Failed to parse a heading.', reason);\n    }\n    return null;\n}\n/**\n * Parses the provided string and returns a list of headings.\n *\n * @param text - Input text\n * @returns List of headings\n */\nexport function getHeadings(text) {\n    // Split the text into lines:\n    const lines = text.split('\\n');\n    // Iterate over the lines to get the header level and text for each line:\n    const headings = new Array();\n    let isCodeBlock;\n    let openingFence = 0;\n    let fenceType;\n    let lineIdx = 0;\n    // Don't check for Markdown headings if in a YAML frontmatter block.\n    // We can only start a frontmatter block on the first line of the file.\n    // At other positions in a markdown file, '---' represents a horizontal rule.\n    if (lines[lineIdx] === '---') {\n        // Search for another '---' and treat that as the end of the frontmatter.\n        // If we don't find one, treat the file as containing no frontmatter.\n        for (let frontmatterEndLineIdx = lineIdx + 1; frontmatterEndLineIdx < lines.length; frontmatterEndLineIdx++) {\n            if (lines[frontmatterEndLineIdx] === '---') {\n                lineIdx = frontmatterEndLineIdx + 1;\n                break;\n            }\n        }\n    }\n    for (; lineIdx < lines.length; lineIdx++) {\n        const line = lines[lineIdx];\n        if (line === '') {\n            // Bail early\n            continue;\n        }\n        // Don't check for Markdown headings if in a code block\n        if (line.startsWith('```') || line.startsWith('~~~')) {\n            const closingFence = extractLeadingFences(line);\n            if (closingFence === 0)\n                continue;\n            if (openingFence === 0) {\n                fenceType = line.charAt(0);\n                isCodeBlock = !isCodeBlock;\n                openingFence = closingFence;\n                continue;\n            }\n            else if (fenceType === line.charAt(0) && closingFence >= openingFence) {\n                isCodeBlock = !isCodeBlock;\n                openingFence = 0;\n                fenceType = '';\n            }\n        }\n        if (isCodeBlock) {\n            continue;\n        }\n        const heading = parseHeading(line, lines[lineIdx + 1]); // append the next line to capture alternative style Markdown headings\n        if (heading) {\n            headings.push({\n                ...heading,\n                line: lineIdx\n            });\n        }\n    }\n    return headings;\n}\n// Returns the length of ``` or ~~~ fences.\nfunction extractLeadingFences(line) {\n    let match;\n    if (line.startsWith('`'))\n        match = line.match(/^(`{3,})/);\n    else\n        match = line.match(/^(~{3,})/);\n    return match ? match[0].length : 0;\n}\nconst MARKDOWN_MIME_TYPE = [\n    'text/x-ipythongfm',\n    'text/x-markdown',\n    'text/x-gfm',\n    'text/markdown'\n];\n/**\n * Returns whether a MIME type corresponds to a Markdown flavor.\n *\n * @param mime - MIME type string\n * @returns boolean indicating whether a provided MIME type corresponds to a Markdown flavor\n *\n * @example\n * const bool = isMarkdown('text/markdown');\n * // returns true\n *\n * @example\n * const bool = isMarkdown('text/plain');\n * // returns false\n */\nexport function isMarkdown(mime) {\n    return MARKDOWN_MIME_TYPE.includes(mime);\n}\n/**\n * Parses a heading, if one exists, from a provided string.\n *\n * ## Notes\n *\n * -   Heading examples:\n *\n *     -   Markdown heading:\n *\n *         ```\n *         # Foo\n *         ```\n *\n *     -   Markdown heading (alternative style):\n *\n *         ```\n *         Foo\n *         ===\n *         ```\n *\n *         ```\n *         Foo\n *         ---\n *         ```\n *\n *     -   HTML heading:\n *\n *         ```\n *         <h3>Foo</h3>\n *         ```\n *\n * @private\n * @param line - Line to parse\n * @param nextLine - The line after the one to parse\n * @returns heading info\n *\n * @example\n * const out = parseHeading('### Foo\\n');\n * // returns {'text': 'Foo', 'level': 3}\n *\n * @example\n * const out = parseHeading('Foo\\n===\\n');\n * // returns {'text': 'Foo', 'level': 1}\n *\n * @example\n * const out = parseHeading('<h4>Foo</h4>\\n');\n * // returns {'text': 'Foo', 'level': 4}\n *\n * @example\n * const out = parseHeading('Foo');\n * // returns null\n */\nfunction parseHeading(line, nextLine) {\n    // Case: Markdown heading\n    let match = line.match(/^([#]{1,6}) (.*)/);\n    if (match) {\n        return {\n            text: cleanTitle(match[2]),\n            level: match[1].length,\n            raw: line,\n            skip: skipHeading.test(match[0])\n        };\n    }\n    // Case: Markdown heading (alternative style)\n    if (nextLine) {\n        match = nextLine.match(/^ {0,3}([=]{2,}|[-]{2,})\\s*$/);\n        if (match) {\n            return {\n                text: cleanTitle(line),\n                level: match[1][0] === '=' ? 1 : 2,\n                raw: [line, nextLine].join('\\n'),\n                skip: skipHeading.test(line)\n            };\n        }\n    }\n    // Case: HTML heading (WARNING: this is not particularly robust, as HTML headings can span multiple lines)\n    match = line.match(/<h([1-6]).*>(.*)<\\/h\\1>/i);\n    if (match) {\n        return {\n            text: match[2],\n            level: parseInt(match[1], 10),\n            skip: skipHeading.test(match[0]),\n            raw: line\n        };\n    }\n    return null;\n}\nfunction cleanTitle(heading) {\n    // take special care to parse Markdown links into raw text\n    return heading.replace(/\\[(.+)\\]\\(.+\\)/g, '$1');\n}\n/**\n * Ignore title with html tag with a class name equal to `jp-toc-ignore` or `tocSkip`\n */\nconst skipHeading = /<\\w+\\s(.*?\\s)?class=\"(.*?\\s)?(jp-toc-ignore|tocSkip)(\\s.*?)?\"(\\s.*?)?>/;\n//# sourceMappingURL=markdown.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nexport * from './common';\nexport * as Markdown from './markdown';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module toc\n */\nexport * from './factory';\nexport * from './model';\nexport * from './panel';\nexport * from './registry';\nexport * from './treeview';\nexport * from './tocitem';\nexport * from './toctree';\nexport * from './tokens';\nexport * from './tracker';\n// Namespace the utils\nexport * as TableOfContentsUtils from './utils';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@jupyterlab/docregistry/style/index.js';\n\nimport './base.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module tooltip-extension\n */\nimport { IConsoleTracker } from '@jupyterlab/console';\nimport { Text } from '@jupyterlab/coreutils';\nimport { IEditorTracker } from '@jupyterlab/fileeditor';\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport { IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { ITooltipManager, Tooltip } from '@jupyterlab/tooltip';\nimport { ITranslator, nullTranslator } from '@jupyterlab/translation';\nimport { find } from '@lumino/algorithm';\nimport { Widget } from '@lumino/widgets';\n/**\n * The command IDs used by the tooltip plugin.\n */\nvar CommandIDs;\n(function (CommandIDs) {\n    CommandIDs.dismiss = 'tooltip:dismiss';\n    CommandIDs.launchConsole = 'tooltip:launch-console';\n    CommandIDs.launchNotebook = 'tooltip:launch-notebook';\n    CommandIDs.launchFile = 'tooltip:launch-file';\n})(CommandIDs || (CommandIDs = {}));\n/**\n * The main tooltip manager plugin.\n */\nconst manager = {\n    id: '@jupyterlab/tooltip-extension:manager',\n    description: 'Provides the tooltip manager.',\n    autoStart: true,\n    optional: [ITranslator],\n    provides: ITooltipManager,\n    activate: (app, translator) => {\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        let tooltip = null;\n        // Add tooltip dismiss command.\n        app.commands.addCommand(CommandIDs.dismiss, {\n            label: trans.__('Dismiss the tooltip'),\n            execute: () => {\n                if (tooltip) {\n                    tooltip.dispose();\n                    tooltip = null;\n                }\n            }\n        });\n        return {\n            invoke(options) {\n                const detail = 0;\n                const { anchor, editor, kernel, rendermime } = options;\n                if (tooltip) {\n                    tooltip.dispose();\n                    tooltip = null;\n                }\n                return Private.fetch({ detail, editor, kernel })\n                    .then(bundle => {\n                    tooltip = new Tooltip({ anchor, bundle, editor, rendermime });\n                    Widget.attach(tooltip, document.body);\n                })\n                    .catch(() => {\n                    /* Fails silently. */\n                });\n            }\n        };\n    }\n};\n/**\n * The console tooltip plugin.\n */\nconst consoles = {\n    // FIXME This should be in @jupyterlab/console-extension\n    id: '@jupyterlab/tooltip-extension:consoles',\n    description: 'Adds the tooltip capability to consoles.',\n    autoStart: true,\n    optional: [ITranslator],\n    requires: [ITooltipManager, IConsoleTracker],\n    activate: (app, manager, consoles, translator) => {\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        // Add tooltip launch command.\n        app.commands.addCommand(CommandIDs.launchConsole, {\n            label: trans.__('Open the tooltip'),\n            execute: () => {\n                var _a, _b;\n                const parent = consoles.currentWidget;\n                if (!parent) {\n                    return;\n                }\n                const anchor = parent.console;\n                const editor = (_a = anchor.promptCell) === null || _a === void 0 ? void 0 : _a.editor;\n                const kernel = (_b = anchor.sessionContext.session) === null || _b === void 0 ? void 0 : _b.kernel;\n                const rendermime = anchor.rendermime;\n                // If all components necessary for rendering exist, create a tooltip.\n                if (!!editor && !!kernel && !!rendermime) {\n                    return manager.invoke({ anchor, editor, kernel, rendermime });\n                }\n            }\n        });\n    }\n};\n/**\n * The notebook tooltip plugin.\n */\nconst notebooks = {\n    // FIXME This should be in @jupyterlab/notebook-extension\n    id: '@jupyterlab/tooltip-extension:notebooks',\n    description: 'Adds the tooltip capability to notebooks.',\n    autoStart: true,\n    optional: [ITranslator],\n    requires: [ITooltipManager, INotebookTracker],\n    activate: (app, manager, notebooks, translator) => {\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        // Add tooltip launch command.\n        app.commands.addCommand(CommandIDs.launchNotebook, {\n            label: trans.__('Open the tooltip'),\n            execute: () => {\n                var _a, _b;\n                const parent = notebooks.currentWidget;\n                if (!parent) {\n                    return;\n                }\n                const anchor = parent.content;\n                const editor = (_a = anchor.activeCell) === null || _a === void 0 ? void 0 : _a.editor;\n                const kernel = (_b = parent.sessionContext.session) === null || _b === void 0 ? void 0 : _b.kernel;\n                const rendermime = anchor.rendermime;\n                // If all components necessary for rendering exist, create a tooltip.\n                if (!!editor && !!kernel && !!rendermime) {\n                    return manager.invoke({ anchor, editor, kernel, rendermime });\n                }\n            }\n        });\n    }\n};\n/**\n * The file editor tooltip plugin.\n */\nconst files = {\n    // FIXME This should be in @jupyterlab/fileeditor-extension\n    id: '@jupyterlab/tooltip-extension:files',\n    description: 'Adds the tooltip capability to file editors.',\n    autoStart: true,\n    optional: [ITranslator],\n    requires: [ITooltipManager, IEditorTracker, IRenderMimeRegistry],\n    activate: (app, manager, editorTracker, rendermime, translator) => {\n        const trans = (translator !== null && translator !== void 0 ? translator : nullTranslator).load('jupyterlab');\n        // Keep a list of active ISessions so that we can\n        // clean them up when they are no longer needed.\n        const activeSessions = {};\n        const sessions = app.serviceManager.sessions;\n        // When the list of running sessions changes,\n        // check to see if there are any kernels with a\n        // matching path for the file editors.\n        const onRunningChanged = (sender, models) => {\n            editorTracker.forEach(file => {\n                const model = find(models, m => file.context.path === m.path);\n                if (model) {\n                    const oldSession = activeSessions[file.id];\n                    // If there is a matching path, but it is the same\n                    // session as we previously had, do nothing.\n                    if (oldSession && oldSession.id === model.id) {\n                        return;\n                    }\n                    // Otherwise, dispose of the old session and reset to\n                    // a new CompletionConnector.\n                    if (oldSession) {\n                        delete activeSessions[file.id];\n                        oldSession.dispose();\n                    }\n                    const session = sessions.connectTo({ model });\n                    activeSessions[file.id] = session;\n                }\n                else {\n                    const session = activeSessions[file.id];\n                    if (session) {\n                        session.dispose();\n                        delete activeSessions[file.id];\n                    }\n                }\n            });\n        };\n        onRunningChanged(sessions, sessions.running());\n        sessions.runningChanged.connect(onRunningChanged);\n        // Clean up after a widget when it is disposed\n        editorTracker.widgetAdded.connect((sender, widget) => {\n            widget.disposed.connect(w => {\n                const session = activeSessions[w.id];\n                if (session) {\n                    session.dispose();\n                    delete activeSessions[w.id];\n                }\n            });\n        });\n        // Add tooltip launch command.\n        app.commands.addCommand(CommandIDs.launchFile, {\n            label: trans.__('Open the tooltip'),\n            execute: async () => {\n                const parent = editorTracker.currentWidget;\n                const kernel = parent &&\n                    activeSessions[parent.id] &&\n                    activeSessions[parent.id].kernel;\n                if (!kernel) {\n                    return;\n                }\n                const anchor = parent.content;\n                const editor = anchor === null || anchor === void 0 ? void 0 : anchor.editor;\n                // If all components necessary for rendering exist, create a tooltip.\n                if (!!editor && !!kernel && !!rendermime) {\n                    return manager.invoke({ anchor, editor, kernel, rendermime });\n                }\n            }\n        });\n    }\n};\n/**\n * Export the plugins as default.\n */\nconst plugins = [\n    manager,\n    consoles,\n    notebooks,\n    files\n];\nexport default plugins;\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * A counter for outstanding requests.\n     */\n    let pending = 0;\n    /**\n     * Fetch a tooltip's content from the API server.\n     */\n    function fetch(options) {\n        const { detail, editor, kernel } = options;\n        const code = editor.model.sharedModel.getSource();\n        const position = editor.getCursorPosition();\n        const offset = Text.jsIndexToCharIndex(editor.getOffsetAt(position), code);\n        // Clear hints if the new text value is empty or kernel is unavailable.\n        if (!code || !kernel) {\n            return Promise.reject(void 0);\n        }\n        const contents = {\n            code,\n            cursor_pos: offset,\n            detail_level: detail || 0\n        };\n        const current = ++pending;\n        return kernel.requestInspect(contents).then(msg => {\n            const value = msg.content;\n            // If a newer request is pending, bail.\n            if (current !== pending) {\n                return Promise.reject(void 0);\n            }\n            // If request fails or returns negative results, bail.\n            if (value.status !== 'ok' || !value.found) {\n                return Promise.reject(void 0);\n            }\n            return Promise.resolve(value.data);\n        });\n    }\n    Private.fetch = fetch;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\n\nimport './base.css';\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\nimport '@jupyterlab/codeeditor/style/index.js';\nimport '@jupyterlab/rendermime/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/console/style/index.js';\nimport '@jupyterlab/fileeditor/style/index.js';\nimport '@jupyterlab/notebook/style/index.js';\nimport '@jupyterlab/tooltip/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The tooltip manager token.\n */\nexport const ITooltipManager = new Token('@jupyterlab/tooltip:ITooltipManager', 'A service for the tooltip manager for the application. Use this to allow your extension to invoke a tooltip.');\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { HoverBox } from '@jupyterlab/ui-components';\nimport { MimeModel } from '@jupyterlab/rendermime';\nimport { PanelLayout, Widget } from '@lumino/widgets';\n/**\n * The class name added to each tooltip.\n */\nconst TOOLTIP_CLASS = 'jp-Tooltip';\n/**\n * The class name added to the tooltip content.\n */\nconst CONTENT_CLASS = 'jp-Tooltip-content';\n/**\n * The class added to the body when a tooltip exists on the page.\n */\nconst BODY_CLASS = 'jp-mod-tooltip';\n/**\n * The minimum height of a tooltip widget.\n */\nconst MIN_HEIGHT = 20;\n/**\n * The maximum height of a tooltip widget.\n */\nconst MAX_HEIGHT = 250;\n/**\n * A flag to indicate that event handlers are caught in the capture phase.\n */\nconst USE_CAPTURE = true;\n/**\n * A tooltip widget.\n */\nexport class Tooltip extends Widget {\n    /**\n     * Instantiate a tooltip.\n     */\n    constructor(options) {\n        super();\n        this._content = null;\n        this.addClass('jp-ThemedContainer');\n        const layout = (this.layout = new PanelLayout());\n        const model = new MimeModel({ data: options.bundle });\n        this.anchor = options.anchor;\n        this.addClass(TOOLTIP_CLASS);\n        this.hide();\n        this._editor = options.editor;\n        this._position = options.position;\n        this._rendermime = options.rendermime;\n        const mimeType = this._rendermime.preferredMimeType(options.bundle, 'any');\n        if (!mimeType) {\n            return;\n        }\n        this._content = this._rendermime.createRenderer(mimeType);\n        this._content\n            .renderModel(model)\n            .then(() => this._setGeometry())\n            .catch(error => console.error('tooltip rendering failed', error));\n        this._content.addClass(CONTENT_CLASS);\n        layout.addWidget(this._content);\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        if (this._content) {\n            this._content.dispose();\n            this._content = null;\n        }\n        super.dispose();\n    }\n    /**\n     * Handle the DOM events for the widget.\n     *\n     * @param event - The DOM event sent to the widget.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the dock panel's node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        if (this.isHidden || this.isDisposed) {\n            return;\n        }\n        const { node } = this;\n        const target = event.target;\n        switch (event.type) {\n            case 'keydown':\n                if (node.contains(target)) {\n                    return;\n                }\n                this.dispose();\n                break;\n            case 'mousedown':\n                if (node.contains(target)) {\n                    this.activate();\n                    return;\n                }\n                this.dispose();\n                break;\n            case 'scroll':\n                this._evtScroll(event);\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Handle `'activate-request'` messages.\n     */\n    onActivateRequest(msg) {\n        this.node.tabIndex = 0;\n        this.node.focus();\n    }\n    /**\n     * Handle `'after-attach'` messages.\n     */\n    onAfterAttach(msg) {\n        document.body.classList.add(BODY_CLASS);\n        document.addEventListener('keydown', this, USE_CAPTURE);\n        document.addEventListener('mousedown', this, USE_CAPTURE);\n        this.anchor.node.addEventListener('scroll', this, USE_CAPTURE);\n        this.update();\n    }\n    /**\n     * Handle `before-detach` messages for the widget.\n     */\n    onBeforeDetach(msg) {\n        document.body.classList.remove(BODY_CLASS);\n        document.removeEventListener('keydown', this, USE_CAPTURE);\n        document.removeEventListener('mousedown', this, USE_CAPTURE);\n        this.anchor.node.removeEventListener('scroll', this, USE_CAPTURE);\n    }\n    /**\n     * Handle `'update-request'` messages.\n     */\n    onUpdateRequest(msg) {\n        if (this.isHidden) {\n            this.show();\n        }\n        this._setGeometry();\n        super.onUpdateRequest(msg);\n    }\n    /**\n     * Handle scroll events for the widget\n     */\n    _evtScroll(event) {\n        // All scrolls except scrolls in the actual hover box node may cause the\n        // referent editor that anchors the node to move, so the only scroll events\n        // that can safely be ignored are ones that happen inside the hovering node.\n        if (this.node.contains(event.target)) {\n            return;\n        }\n        this.update();\n    }\n    /**\n     * Find the position of the first character of the current token.\n     */\n    _getTokenPosition() {\n        const editor = this._editor;\n        const cursor = editor.getCursorPosition();\n        const end = editor.getOffsetAt(cursor);\n        const line = editor.getLine(cursor.line);\n        if (!line) {\n            return;\n        }\n        const tokens = line.substring(0, end).split(/\\W+/);\n        const last = tokens[tokens.length - 1];\n        const start = last ? end - last.length : end;\n        return editor.getPositionAt(start);\n    }\n    /**\n     * Set the geometry of the tooltip widget.\n     */\n    _setGeometry() {\n        // determine position for hover box placement\n        const position = this._position ? this._position : this._getTokenPosition();\n        if (!position) {\n            return;\n        }\n        const editor = this._editor;\n        const anchor = editor.getCoordinateForPosition(position);\n        if (!anchor) {\n            return;\n        }\n        const style = window.getComputedStyle(this.node);\n        const paddingLeft = parseInt(style.paddingLeft, 10) || 0;\n        const host = editor.host.closest('.jp-MainAreaWidget > .lm-Widget') ||\n            editor.host;\n        // Calculate the geometry of the tooltip.\n        HoverBox.setGeometry({\n            anchor,\n            host,\n            maxHeight: MAX_HEIGHT,\n            minHeight: MIN_HEIGHT,\n            node: this.node,\n            offset: { horizontal: -1 * paddingLeft },\n            privilege: 'below',\n            outOfViewDisplay: {\n                top: 'stick-inside',\n                bottom: 'stick-inside'\n            },\n            style: style\n        });\n    }\n}\n//# sourceMappingURL=widget.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module tooltip\n */\nexport * from './tokens';\nexport * from './widget';\n//# sourceMappingURL=index.js.map","/* ----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module translation-extension\n */\nimport { ILabShell, JupyterFrontEnd } from '@jupyterlab/application';\nimport { Dialog, ICommandPalette, showDialog } from '@jupyterlab/apputils';\nimport { IMainMenu } from '@jupyterlab/mainmenu';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { ITranslator, ITranslatorConnector, TranslationManager, TranslatorConnector } from '@jupyterlab/translation';\n/**\n * Translation plugins\n */\nconst PLUGIN_ID = '@jupyterlab/translation-extension:plugin';\n/**\n * Provide the translator connector as a separate plugin to allow for alternative\n * implementations that may want to fetch translation bundles from a different\n * source or endpoint.\n */\nconst translatorConnector = {\n    id: '@jupyterlab/translation-extension:translator-connector',\n    description: 'Provides the application translation connector.',\n    autoStart: true,\n    requires: [JupyterFrontEnd.IPaths],\n    provides: ITranslatorConnector,\n    activate: (app, paths) => {\n        const url = paths.urls.translations;\n        const serverSettings = app.serviceManager.serverSettings;\n        return new TranslatorConnector(url, serverSettings);\n    }\n};\n/**\n * The main translator plugin.\n */\nconst translator = {\n    id: '@jupyterlab/translation-extension:translator',\n    description: 'Provides the application translation object.',\n    autoStart: true,\n    requires: [JupyterFrontEnd.IPaths, ISettingRegistry],\n    optional: [ILabShell, ITranslatorConnector],\n    provides: ITranslator,\n    activate: async (app, paths, settings, labShell, connector) => {\n        const setting = await settings.load(PLUGIN_ID);\n        const currentLocale = setting.get('locale').composite;\n        let stringsPrefix = setting.get('stringsPrefix')\n            .composite;\n        const displayStringsPrefix = setting.get('displayStringsPrefix')\n            .composite;\n        stringsPrefix = displayStringsPrefix ? stringsPrefix : '';\n        const serverSettings = app.serviceManager.serverSettings;\n        const translationManager = new TranslationManager(paths.urls.translations, stringsPrefix, serverSettings, connector !== null && connector !== void 0 ? connector : undefined);\n        // As we wait for fetching the translation, ITranslator is guarantee to be\n        // ready when consumed in other plugins.\n        await translationManager.fetch(currentLocale);\n        // Set the document language after optionally fetching the system language\n        // if the setting 'locale' is set to 'default'\n        document.documentElement.lang = translationManager.languageCode;\n        // Set translator to UI\n        if (labShell) {\n            labShell.translator = translationManager;\n        }\n        Dialog.translator = translationManager;\n        return translationManager;\n    }\n};\n/**\n * Initialization data for the extension.\n */\nconst langMenu = {\n    id: PLUGIN_ID,\n    description: 'Adds translation commands and settings.',\n    requires: [ISettingRegistry, ITranslator, ITranslatorConnector],\n    optional: [IMainMenu, ICommandPalette],\n    autoStart: true,\n    activate: (app, settings, translator, translatorConnector, mainMenu, palette) => {\n        var _a;\n        const trans = translator.load('jupyterlab');\n        const { commands } = app;\n        // Create a languages menu\n        const languagesMenu = mainMenu\n            ? (_a = mainMenu.settingsMenu.items.find(item => {\n                var _a;\n                return item.type === 'submenu' &&\n                    ((_a = item.submenu) === null || _a === void 0 ? void 0 : _a.id) === 'jp-mainmenu-settings-language';\n            })) === null || _a === void 0 ? void 0 : _a.submenu\n            : null;\n        // Get list of available locales\n        translatorConnector\n            .fetch()\n            .then(languageList => {\n            const appLocale = translator.languageCode.replace('-', '_');\n            for (const locale in languageList.data) {\n                const value = languageList.data[locale];\n                const displayName = value.displayName;\n                const nativeName = value.nativeName;\n                const toggled = appLocale === locale;\n                const label = toggled\n                    ? `${displayName}`\n                    : `${displayName} - ${nativeName}`;\n                // Add a command per language\n                const command = `jupyterlab-translation:${locale}`;\n                commands.addCommand(command, {\n                    label: label,\n                    caption: trans.__('Change interface language to %1', label),\n                    isEnabled: () => !toggled,\n                    isToggled: () => toggled,\n                    execute: async () => {\n                        const result = await showDialog({\n                            title: trans.__('Change interface language?'),\n                            body: trans.__('After changing the interface language to %1, you will need to reload JupyterLab to see the changes.', label),\n                            buttons: [\n                                Dialog.cancelButton(),\n                                Dialog.okButton({ label: trans.__('Change and reload') })\n                            ]\n                        });\n                        if (result.button.accept) {\n                            try {\n                                await settings.set(PLUGIN_ID, 'locale', locale);\n                                window.location.reload();\n                            }\n                            catch (reason) {\n                                console.error(`Failed to update language locale to ${locale}`, reason);\n                            }\n                        }\n                    }\n                });\n                // Add the language command to the menu\n                if (languagesMenu) {\n                    languagesMenu.addItem({\n                        command,\n                        args: {}\n                    });\n                }\n                if (palette) {\n                    palette.addItem({\n                        category: trans.__('Display Languages'),\n                        command\n                    });\n                }\n            }\n        })\n            .catch(reason => {\n            console.error(`Available locales errored!\\n${reason}`);\n        });\n    }\n};\n/**\n * Export the plugins as default.\n */\nconst plugins = [\n    translatorConnector,\n    translator,\n    langMenu\n];\nexport default plugins;\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/apputils/style/index.js';\nimport '@jupyterlab/application/style/index.js';\nimport '@jupyterlab/mainmenu/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { URLExt } from '@jupyterlab/coreutils';\nimport { ServerConnection } from '@jupyterlab/services';\n/**\n * The url for the translations service.\n */\nconst TRANSLATIONS_SETTINGS_URL = 'api/translations';\n/**\n * Call the API extension\n *\n * @param locale API REST end point for the extension\n * @param init Initial values for the request\n * @returns The response body interpreted as JSON\n */\nexport async function requestTranslationsAPI(translationsUrl = '', locale = '', init = {}, serverSettings = undefined) {\n    // Make request to Jupyter API\n    const settings = serverSettings !== null && serverSettings !== void 0 ? serverSettings : ServerConnection.makeSettings();\n    translationsUrl =\n        translationsUrl || `${settings.appUrl}/${TRANSLATIONS_SETTINGS_URL}`;\n    const translationsBase = URLExt.join(settings.baseUrl, translationsUrl);\n    const requestUrl = URLExt.join(translationsBase, locale);\n    if (!requestUrl.startsWith(translationsBase)) {\n        throw new Error('Can only be used for translations requests');\n    }\n    let response;\n    try {\n        response = await ServerConnection.makeRequest(requestUrl, init, settings);\n    }\n    catch (error) {\n        throw new ServerConnection.NetworkError(error);\n    }\n    let data = await response.text();\n    if (data.length > 0) {\n        try {\n            data = JSON.parse(data);\n        }\n        catch (error) {\n            console.error('Not a JSON response body.', response);\n        }\n    }\n    if (!response.ok) {\n        throw new ServerConnection.ResponseError(response, data.message || data);\n    }\n    return data;\n}\n//# sourceMappingURL=server.js.map","/* ----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { DataConnector } from '@jupyterlab/statedb';\nimport { Token } from '@lumino/coreutils';\nimport { requestTranslationsAPI } from './server';\n/**\n * Application default locale.\n */\nexport const DEFAULT_LANGUAGE_CODE = 'en';\n/**\n * A service to connect to the server translation endpoint\n */\nexport const ITranslatorConnector = new Token('@jupyterlab/translation:ITranslatorConnector', 'A service to connect to the server translation endpoint.');\nexport class TranslatorConnector extends DataConnector {\n    constructor(translationsUrl = '', serverSettings) {\n        super();\n        this._translationsUrl = translationsUrl;\n        this._serverSettings = serverSettings;\n    }\n    async fetch(opts) {\n        var _a;\n        return requestTranslationsAPI(this._translationsUrl, (_a = opts === null || opts === void 0 ? void 0 : opts.language) !== null && _a !== void 0 ? _a : '', {}, this._serverSettings);\n    }\n}\n/**\n * Translation provider token\n */\nexport const ITranslator = new Token('@jupyterlab/translation:ITranslator', 'A service to translate strings.');\n//# sourceMappingURL=tokens.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n/**\n * Normalize domain\n *\n * @param domain Domain to normalize\n * @returns Normalized domain\n */\nexport function normalizeDomain(domain) {\n    return domain.replace('-', '_');\n}\n//# sourceMappingURL=utils.js.map","/* ----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|\n| Base gettext.js implementation.\n| Copyright (c) Guillaume Potier.\n| Distributed under the terms of the Modified MIT License.\n| See: https://github.com/guillaumepotier/gettext.js\n|\n| Type definitions.\n| Copyright (c) Julien Crouzet and Florian Schwingenschlögl.\n| Distributed under the terms of the Modified MIT License.\n| See: https://github.com/DefinitelyTyped/DefinitelyTyped\n|----------------------------------------------------------------------------*/\nimport { DEFAULT_LANGUAGE_CODE } from './tokens';\nimport { normalizeDomain } from './utils';\n/**\n * Gettext class providing localization methods.\n */\nclass Gettext {\n    constructor(options) {\n        options = options || {};\n        // default values that could be overridden in Gettext() constructor\n        this._defaults = {\n            domain: 'messages',\n            locale: document.documentElement.getAttribute('lang') || DEFAULT_LANGUAGE_CODE,\n            pluralFunc: function (n) {\n                return { nplurals: 2, plural: n != 1 ? 1 : 0 };\n            },\n            contextDelimiter: String.fromCharCode(4), // \\u0004\n            stringsPrefix: ''\n        };\n        // Ensure the correct separator is used\n        this._locale = (options.locale || this._defaults.locale).replace('_', '-');\n        this._domain = normalizeDomain(options.domain || this._defaults.domain);\n        this._contextDelimiter =\n            options.contextDelimiter || this._defaults.contextDelimiter;\n        this._stringsPrefix = options.stringsPrefix || this._defaults.stringsPrefix;\n        this._pluralFuncs = {};\n        this._dictionary = {};\n        this._pluralForms = {};\n        if (options.messages) {\n            this._dictionary[this._domain] = {};\n            this._dictionary[this._domain][this._locale] = options.messages;\n        }\n        if (options.pluralForms) {\n            this._pluralForms[this._locale] = options.pluralForms;\n        }\n    }\n    /**\n     * Set current context delimiter.\n     *\n     * @param delimiter - The delimiter to set.\n     */\n    setContextDelimiter(delimiter) {\n        this._contextDelimiter = delimiter;\n    }\n    /**\n     * Get current context delimiter.\n     *\n     * @returns The current delimiter.\n     */\n    getContextDelimiter() {\n        return this._contextDelimiter;\n    }\n    /**\n     * Set current locale.\n     *\n     * @param locale - The locale to set.\n     */\n    setLocale(locale) {\n        this._locale = locale.replace('_', '-');\n    }\n    /**\n     * Get current locale.\n     *\n     * @returns The current locale.\n     */\n    getLocale() {\n        return this._locale;\n    }\n    /**\n     * Set current domain.\n     *\n     * @param domain - The domain to set.\n     */\n    setDomain(domain) {\n        this._domain = normalizeDomain(domain);\n    }\n    /**\n     * Get current domain.\n     *\n     * @returns The current domain string.\n     */\n    getDomain() {\n        return this._domain;\n    }\n    /**\n     * Set current strings prefix.\n     *\n     * @param prefix - The string prefix to set.\n     */\n    setStringsPrefix(prefix) {\n        this._stringsPrefix = prefix;\n    }\n    /**\n     * Get current strings prefix.\n     *\n     * @returns The strings prefix.\n     */\n    getStringsPrefix() {\n        return this._stringsPrefix;\n    }\n    /**\n     * `sprintf` equivalent, takes a string and some arguments to make a\n     * computed string.\n     *\n     * @param fmt - The string to interpolate.\n     * @param args - The variables to use in interpolation.\n     *\n     * ### Examples\n     * strfmt(\"%1 dogs are in %2\", 7, \"the kitchen\"); => \"7 dogs are in the kitchen\"\n     * strfmt(\"I like %1, bananas and %1\", \"apples\"); => \"I like apples, bananas and apples\"\n     */\n    static strfmt(fmt, ...args) {\n        return (fmt\n            // put space after double % to prevent placeholder replacement of such matches\n            .replace(/%%/g, '%% ')\n            // replace placeholders\n            .replace(/%(\\d+)/g, function (str, p1) {\n            return args[p1 - 1];\n        })\n            // replace double % and space with single %\n            .replace(/%% /g, '%'));\n    }\n    /**\n     * Load json translations strings (In Jed 2.x format).\n     *\n     * @param jsonData - The translation strings plus metadata.\n     * @param domain - The translation domain, e.g. \"jupyterlab\".\n     */\n    loadJSON(jsonData, domain) {\n        if (!jsonData[''] ||\n            !jsonData['']['language'] ||\n            !jsonData['']['pluralForms']) {\n            throw new Error(`Wrong jsonData, it must have an empty key (\"\") with \"language\" and \"pluralForms\" information: ${jsonData}`);\n        }\n        domain = normalizeDomain(domain);\n        let headers = jsonData[''];\n        let jsonDataCopy = JSON.parse(JSON.stringify(jsonData));\n        delete jsonDataCopy[''];\n        this.setMessages(domain || this._defaults.domain, headers['language'], jsonDataCopy, headers['pluralForms']);\n    }\n    /**\n     * Shorthand for gettext.\n     *\n     * @param msgid - The singular string to translate.\n     * @param args - Any additional values to use with interpolation.\n     *\n     * @returns A translated string if found, or the original string.\n     *\n     * ### Notes\n     * This is not a private method (starts with an underscore) it is just\n     * a shorter and standard way to call these methods.\n     */\n    __(msgid, ...args) {\n        return this.gettext(msgid, ...args);\n    }\n    /**\n     * Shorthand for ngettext.\n     *\n     * @param msgid - The singular string to translate.\n     * @param msgid_plural - The plural string to translate.\n     * @param n - The number for pluralization.\n     * @param args - Any additional values to use with interpolation.\n     *\n     * @returns A translated string if found, or the original string.\n     *\n     * ### Notes\n     * This is not a private method (starts with an underscore) it is just\n     * a shorter and standard way to call these methods.\n     */\n    _n(msgid, msgid_plural, n, ...args) {\n        return this.ngettext(msgid, msgid_plural, n, ...args);\n    }\n    /**\n     * Shorthand for pgettext.\n     *\n     * @param msgctxt - The message context.\n     * @param msgid - The singular string to translate.\n     * @param args - Any additional values to use with interpolation.\n     *\n     * @returns A translated string if found, or the original string.\n     *\n     * ### Notes\n     * This is not a private method (starts with an underscore) it is just\n     * a shorter and standard way to call these methods.\n     */\n    _p(msgctxt, msgid, ...args) {\n        return this.pgettext(msgctxt, msgid, ...args);\n    }\n    /**\n     * Shorthand for npgettext.\n     *\n     * @param msgctxt - The message context.\n     * @param msgid - The singular string to translate.\n     * @param msgid_plural - The plural string to translate.\n     * @param n - The number for pluralization.\n     * @param args - Any additional values to use with interpolation.\n     *\n     * @returns A translated string if found, or the original string.\n     *\n     * ### Notes\n     * This is not a private method (starts with an underscore) it is just\n     * a shorter and standard way to call these methods.\n     */\n    _np(msgctxt, msgid, msgid_plural, n, ...args) {\n        return this.npgettext(msgctxt, msgid, msgid_plural, n, ...args);\n    }\n    /**\n     * Translate a singular string with extra interpolation values.\n     *\n     * @param msgid - The singular string to translate.\n     * @param args - Any additional values to use with interpolation.\n     *\n     * @returns A translated string if found, or the original string.\n     */\n    gettext(msgid, ...args) {\n        return this.dcnpgettext('', '', msgid, '', 0, ...args);\n    }\n    /**\n     * Translate a plural string with extra interpolation values.\n     *\n     * @param msgid - The singular string to translate.\n     * @param args - Any additional values to use with interpolation.\n     *\n     * @returns A translated string if found, or the original string.\n     */\n    ngettext(msgid, msgid_plural, n, ...args) {\n        return this.dcnpgettext('', '', msgid, msgid_plural, n, ...args);\n    }\n    /**\n     * Translate a contextualized singular string with extra interpolation values.\n     *\n     * @param msgctxt - The message context.\n     * @param msgid - The singular string to translate.\n     * @param args - Any additional values to use with interpolation.\n     *\n     * @returns A translated string if found, or the original string.\n     *\n     * ### Notes\n     * This is not a private method (starts with an underscore) it is just\n     * a shorter and standard way to call these methods.\n     */\n    pgettext(msgctxt, msgid, ...args) {\n        return this.dcnpgettext('', msgctxt, msgid, '', 0, ...args);\n    }\n    /**\n     * Translate a contextualized plural string with extra interpolation values.\n     *\n     * @param msgctxt - The message context.\n     * @param msgid - The singular string to translate.\n     * @param msgid_plural - The plural string to translate.\n     * @param n - The number for pluralization.\n     * @param args - Any additional values to use with interpolation\n     *\n     * @returns A translated string if found, or the original string.\n     */\n    npgettext(msgctxt, msgid, msgid_plural, n, ...args) {\n        return this.dcnpgettext('', msgctxt, msgid, msgid_plural, n, ...args);\n    }\n    /**\n     * Translate a singular string with extra interpolation values.\n     *\n     * @param domain - The translations domain.\n     * @param msgctxt - The message context.\n     * @param msgid - The singular string to translate.\n     * @param msgid_plural - The plural string to translate.\n     * @param n - The number for pluralization.\n     * @param args - Any additional values to use with interpolation\n     *\n     * @returns A translated string if found, or the original string.\n     */\n    dcnpgettext(domain, msgctxt, msgid, msgid_plural, n, ...args) {\n        domain = normalizeDomain(domain) || this._domain;\n        let translation;\n        let key = msgctxt\n            ? msgctxt + this._contextDelimiter + msgid\n            : msgid;\n        let options = { pluralForm: false };\n        let exist = false;\n        let locale = this._locale;\n        let locales = this.expandLocale(this._locale);\n        for (let i in locales) {\n            locale = locales[i];\n            exist =\n                this._dictionary[domain] &&\n                    this._dictionary[domain][locale] &&\n                    this._dictionary[domain][locale][key];\n            // check condition are valid (.length)\n            // because it's not possible to define both a singular and a plural form of the same msgid,\n            // we need to check that the stored form is the same as the expected one.\n            // if not, we'll just ignore the translation and consider it as not translated.\n            if (msgid_plural) {\n                exist = exist && this._dictionary[domain][locale][key].length > 1;\n            }\n            else {\n                exist = exist && this._dictionary[domain][locale][key].length == 1;\n            }\n            if (exist) {\n                // This ensures that a variation is used.\n                options.locale = locale;\n                break;\n            }\n        }\n        if (!exist) {\n            translation = [msgid];\n            options.pluralFunc = this._defaults.pluralFunc;\n        }\n        else {\n            translation = this._dictionary[domain][locale][key];\n        }\n        // Singular form\n        if (!msgid_plural) {\n            return this.t(translation, n, options, ...args);\n        }\n        // Plural one\n        options.pluralForm = true;\n        let value = exist ? translation : [msgid, msgid_plural];\n        return this.t(value, n, options, ...args);\n    }\n    /**\n     * Split a locale into parent locales. \"es-CO\" -> [\"es-CO\", \"es\"]\n     *\n     * @param locale - The locale string.\n     *\n     * @returns An array of locales.\n     */\n    expandLocale(locale) {\n        let locales = [locale];\n        let i = locale.lastIndexOf('-');\n        while (i > 0) {\n            locale = locale.slice(0, i);\n            locales.push(locale);\n            i = locale.lastIndexOf('-');\n        }\n        return locales;\n    }\n    /**\n     * Split a locale into parent locales. \"es-CO\" -> [\"es-CO\", \"es\"]\n     *\n     * @param pluralForm - Plural form string..\n     * @returns An function to compute plural forms.\n     */\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    getPluralFunc(pluralForm) {\n        // Plural form string regexp\n        // taken from https://github.com/Orange-OpenSource/gettext.js/blob/master/lib.gettext.js\n        // plural forms list available here http://localization-guide.readthedocs.org/en/latest/l10n/pluralforms.html\n        let pf_re = new RegExp('^\\\\s*nplurals\\\\s*=\\\\s*[0-9]+\\\\s*;\\\\s*plural\\\\s*=\\\\s*(?:\\\\s|[-\\\\?\\\\|&=!<>+*/%:;n0-9_()])+');\n        if (!pf_re.test(pluralForm))\n            throw new Error(Gettext.strfmt('The plural form \"%1\" is not valid', pluralForm));\n        // Careful here, this is a hidden eval() equivalent..\n        // Risk should be reasonable though since we test the pluralForm through regex before\n        // taken from https://github.com/Orange-OpenSource/gettext.js/blob/master/lib.gettext.js\n        // TODO: should test if https://github.com/soney/jsep present and use it if so\n        return new Function('n', 'let plural, nplurals; ' +\n            pluralForm +\n            ' return { nplurals: nplurals, plural: (plural === true ? 1 : (plural ? plural : 0)) };');\n    }\n    /**\n     * Remove the context delimiter from string.\n     *\n     * @param str - Translation string.\n     * @returns A translation string without context.\n     */\n    removeContext(str) {\n        // if there is context, remove it\n        if (str.indexOf(this._contextDelimiter) !== -1) {\n            let parts = str.split(this._contextDelimiter);\n            return parts[1];\n        }\n        return str;\n    }\n    /**\n     * Proper translation function that handle plurals and directives.\n     *\n     * @param messages - List of translation strings.\n     * @param n - The number for pluralization.\n     * @param options - Translation options.\n     * @param args - Any variables to interpolate.\n     *\n     * @returns A translation string without context.\n     *\n     * ### Notes\n     * Contains juicy parts of https://github.com/Orange-OpenSource/gettext.js/blob/master/lib.gettext.js\n     */\n    t(messages, n, options, ...args) {\n        // Singular is very easy, just pass dictionary message through strfmt\n        if (!options.pluralForm)\n            return (this._stringsPrefix +\n                Gettext.strfmt(this.removeContext(messages[0]), ...args));\n        let plural;\n        // if a plural func is given, use that one\n        if (options.pluralFunc) {\n            plural = options.pluralFunc(n);\n            // if plural form never interpreted before, do it now and store it\n        }\n        else if (!this._pluralFuncs[options.locale || '']) {\n            this._pluralFuncs[options.locale || ''] = this.getPluralFunc(this._pluralForms[options.locale || '']);\n            plural = this._pluralFuncs[options.locale || ''](n);\n            // we have the plural function, compute the plural result\n        }\n        else {\n            plural = this._pluralFuncs[options.locale || ''](n);\n        }\n        // If there is a problem with plurals, fallback to singular one\n        if ('undefined' === typeof !plural.plural ||\n            plural.plural > plural.nplurals ||\n            messages.length <= plural.plural)\n            plural.plural = 0;\n        return (this._stringsPrefix +\n            Gettext.strfmt(this.removeContext(messages[plural.plural]), ...[n].concat(args)));\n    }\n    /**\n     * Set messages after loading them.\n     *\n     * @param domain - The translation domain.\n     * @param locale - The translation locale.\n     * @param messages - List of translation strings.\n     * @param pluralForms - Plural form string.\n     *\n     * ### Notes\n     * Contains juicy parts of https://github.com/Orange-OpenSource/gettext.js/blob/master/lib.gettext.js\n     */\n    setMessages(domain, locale, messages, pluralForms) {\n        domain = normalizeDomain(domain);\n        if (pluralForms)\n            this._pluralForms[locale] = pluralForms;\n        if (!this._dictionary[domain])\n            this._dictionary[domain] = {};\n        this._dictionary[domain][locale] = messages;\n    }\n}\nexport { Gettext };\n//# sourceMappingURL=gettext.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Gettext } from './gettext';\nimport { DEFAULT_LANGUAGE_CODE } from './tokens';\n/**\n * A translator that loads a dummy language bundle that returns the same input\n * strings.\n */\nexport class NullTranslator {\n    constructor(bundle) {\n        this.languageCode = DEFAULT_LANGUAGE_CODE;\n        this._languageBundle = bundle;\n    }\n    load(domain) {\n        return this._languageBundle;\n    }\n}\n/**\n * A language bundle that returns the same input strings.\n */\nclass NullLanguageBundle {\n    __(msgid, ...args) {\n        return this.gettext(msgid, ...args);\n    }\n    _n(msgid, msgid_plural, n, ...args) {\n        return this.ngettext(msgid, msgid_plural, n, ...args);\n    }\n    _p(msgctxt, msgid, ...args) {\n        return this.pgettext(msgctxt, msgid, ...args);\n    }\n    _np(msgctxt, msgid, msgid_plural, n, ...args) {\n        return this.npgettext(msgctxt, msgid, msgid_plural, n, ...args);\n    }\n    gettext(msgid, ...args) {\n        return Gettext.strfmt(msgid, ...args);\n    }\n    ngettext(msgid, msgid_plural, n, ...args) {\n        return Gettext.strfmt(n == 1 ? msgid : msgid_plural, ...[n].concat(args));\n    }\n    pgettext(msgctxt, msgid, ...args) {\n        return Gettext.strfmt(msgid, ...args);\n    }\n    npgettext(msgctxt, msgid, msgid_plural, n, ...args) {\n        return this.ngettext(msgid, msgid_plural, n, ...args);\n    }\n    dcnpgettext(domain, msgctxt, msgid, msgid_plural, n, ...args) {\n        return this.ngettext(msgid, msgid_plural, n, ...args);\n    }\n}\n/**\n * The application null translator instance that just returns the same text.\n * Also provides interpolation.\n */\nexport const nullTranslator = new NullTranslator(new NullLanguageBundle());\n//# sourceMappingURL=base.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Gettext } from './gettext';\nimport { DEFAULT_LANGUAGE_CODE, TranslatorConnector } from './tokens';\nimport { normalizeDomain } from './utils';\n/**\n * Translation Manager.\n */\nexport class TranslationManager {\n    /**\n     * Construct a new TranslationManager.\n     *\n     * @param translationsUrl The URL of the translation server.\n     * @param stringsPrefix (optional) The prefix for translation strings.\n     * @param serverSettings (optional) The server settings.\n     * @param connector (optional) The translation connector. If provided, the `translationsUrl` and `serverSettings` parameters will be ignored.\n     */\n    constructor(translationsUrl = '', stringsPrefix, serverSettings, connector) {\n        this._domainData = {};\n        this._translationBundles = {};\n        this._connector =\n            connector !== null && connector !== void 0 ? connector : new TranslatorConnector(translationsUrl, serverSettings);\n        this._stringsPrefix = stringsPrefix || '';\n        this._englishBundle = new Gettext({ stringsPrefix: this._stringsPrefix });\n        this._currentLocale = DEFAULT_LANGUAGE_CODE;\n    }\n    /**\n     * Get the language code (tag) of the current locale.\n     *\n     * It respects BCP47 (RFC5646): https://datatracker.ietf.org/doc/html/rfc5646\n     */\n    get languageCode() {\n        return this._currentLocale;\n    }\n    /**\n     * Fetch the localization data from the server.\n     *\n     * @param locale The language locale to use for translations.\n     */\n    async fetch(locale) {\n        var _a, _b, _c, _d;\n        this._languageData = await this._connector.fetch({ language: locale });\n        let serverLocale;\n        if (this._languageData && locale === 'default') {\n            try {\n                for (const lang of Object.values((_a = this._languageData.data) !== null && _a !== void 0 ? _a : {})) {\n                    serverLocale =\n                        // If the language is provided by the system set up, we need to retrieve the final\n                        // language. This is done through the `\"\"` entry in `_languageData` that contains\n                        // language metadata.\n                        lang['']['language'];\n                    break;\n                }\n            }\n            catch (reason) {\n                // no-op\n            }\n        }\n        this._currentLocale = (locale !== 'default' ? locale : serverLocale !== null && serverLocale !== void 0 ? serverLocale : DEFAULT_LANGUAGE_CODE).replace('_', '-');\n        this._domainData = (_c = (_b = this._languageData) === null || _b === void 0 ? void 0 : _b.data) !== null && _c !== void 0 ? _c : {};\n        const message = (_d = this._languageData) === null || _d === void 0 ? void 0 : _d.message;\n        if (message && this._currentLocale !== DEFAULT_LANGUAGE_CODE) {\n            console.warn(message);\n        }\n    }\n    /**\n     * Load translation bundles for a given domain.\n     *\n     * @param domain The translation domain to use for translations.\n     */\n    load(domain) {\n        if (this._domainData) {\n            if (this._currentLocale == DEFAULT_LANGUAGE_CODE) {\n                return this._englishBundle;\n            }\n            else {\n                domain = normalizeDomain(domain);\n                if (!(domain in this._translationBundles)) {\n                    let translationBundle = new Gettext({\n                        domain: domain,\n                        locale: this._currentLocale,\n                        stringsPrefix: this._stringsPrefix\n                    });\n                    if (domain in this._domainData) {\n                        const metadata = this._domainData[domain][''];\n                        const harmonizedData = {\n                            ...this._domainData[domain],\n                            '': {\n                                ...metadata,\n                                pluralForms: metadata.plural_forms\n                            }\n                        };\n                        translationBundle.loadJSON(harmonizedData, domain);\n                    }\n                    this._translationBundles[domain] = translationBundle;\n                }\n                return this._translationBundles[domain];\n            }\n        }\n        else {\n            return this._englishBundle;\n        }\n    }\n}\n//# sourceMappingURL=manager.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module translation\n */\n// Note: keep in alphabetical order...\nexport * from './base';\nexport * from './gettext';\nexport * from './manager';\nexport * from './server';\nexport * from './tokens';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module ui-components-extension\n */\nimport { FormRendererRegistry, IFormRendererRegistry, ILabIconManager } from '@jupyterlab/ui-components';\n/**\n * Placeholder for future extension that will provide an icon manager class\n * to assist with overriding/replacing particular sets of icons\n */\nconst labiconManager = {\n    id: '@jupyterlab/ui-components-extension:labicon-manager',\n    description: 'Provides the icon manager.',\n    provides: ILabIconManager,\n    autoStart: true,\n    activate: (app) => {\n        return Object.create(null);\n    }\n};\n/**\n * Sets up the renderer registry to be used by the FormEditor component.\n */\nconst formRendererRegistryPlugin = {\n    id: '@jupyterlab/ui-components-extension:form-renderer-registry',\n    description: 'Provides the settings form renderer registry.',\n    provides: IFormRendererRegistry,\n    autoStart: true,\n    activate: (app) => {\n        const formRendererRegistry = new FormRendererRegistry();\n        return formRendererRegistry;\n    }\n};\nexport default [labiconManager, formRendererRegistryPlugin];\n//# sourceMappingURL=index.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@jupyterlab/ui-components/style/index.js';\nimport '@jupyterlab/application/style/index.js';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Text } from '@jupyterlab/coreutils';\n/**\n * Inner works of class combining functions\n */\nfunction _classes(classes) {\n    return classes\n        .map(c => c && typeof c === 'object'\n        ? Object.keys(c).map(key => !!c[key] && key)\n        : typeof c === 'string'\n            ? c.split(/\\s+/)\n            : [])\n        .reduce((flattened, c) => flattened.concat(c), [])\n        .filter(c => !!c);\n}\n/**\n * Combines classNames.\n *\n * @param classes - A list of classNames\n *\n * @returns A single string with the combined className\n */\nexport function classes(...classes) {\n    return _classes(classes).join(' ');\n}\n/**\n * Combines classNames. Removes all duplicates\n *\n * @param classes - A list of classNames\n *\n * @returns A single string with the combined className\n */\nexport function classesDedupe(...classes) {\n    return [...new Set(_classes(classes))].join(' ');\n}\n/**\n * Translates the attributes of a DOM element into attributes that can\n * be understood by React. Currently not comprehensive, we will add special\n * cases as they become relevant.\n *\n * @param elem - A DOM element\n *\n * @param ignore - An optional list of attribute names to ignore\n *\n * @returns An object with key:value pairs that are the React-friendly\n * translation of elem's attributes\n */\nexport function getReactAttrs(elem, { ignore = [] } = {}) {\n    return elem\n        .getAttributeNames()\n        .reduce((d, name) => {\n        if (name === 'style' || ignore.includes(name)) {\n            void 0;\n        }\n        else if (name.startsWith('data') || name.startsWith('aria')) {\n            d[name] = elem.getAttribute(name);\n        }\n        else {\n            d[Text.camelCase(name)] = elem.getAttribute(name);\n        }\n        return d;\n    }, {});\n}\n// Toolkit helpers\n/**\n * Test whether an object is a tree item or not.\n * @param el Element to test\n * @returns Result\n */\nfunction isTreeItemElement(el) {\n    return el instanceof HTMLElement && el.getAttribute('role') === 'treeitem';\n}\n/**\n * Find the tree item encapsulating the element.\n *\n * @param el Starting element\n * @returns The tree item\n */\nexport function getTreeItemElement(el) {\n    let item = el;\n    while (item && !isTreeItemElement(item)) {\n        item = item.parentElement;\n    }\n    return isTreeItemElement(item) ? item : null;\n}\n//# sourceMappingURL=utils.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport React from 'react';\nimport { classes } from '../utils';\n/**\n * Button component\n *\n * @param props Component properties\n * @returns Component\n */\nexport function Button(props) {\n    const { minimal, small, children, ...others } = props;\n    return (React.createElement(\"button\", { ...others, className: classes(props.className, minimal ? 'jp-mod-minimal' : '', small ? 'jp-mod-small' : '', 'jp-Button') }, children));\n}\n//# sourceMappingURL=button.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { style as typestyleClass } from 'typestyle/lib';\nexport var LabIconStyle;\n(function (LabIconStyle) {\n    /**\n     * The builtin stylesheets\n     */\n    const builtinSheets = {\n        breadCrumb: {\n            container: {\n                $nest: {\n                    // `&` will be substituted for the generated classname (interpolation)\n                    '&:first-child svg': {\n                        bottom: '1px',\n                        marginLeft: '0px',\n                        position: 'relative'\n                    },\n                    '&:hover': {\n                        backgroundColor: 'var(--jp-layout-color2)'\n                    },\n                    ['.jp-mod-dropTarget&']: {\n                        backgroundColor: 'var(--jp-brand-color2)',\n                        opacity: 0.7\n                    }\n                }\n            },\n            element: {\n                borderRadius: 'var(--jp-border-radius)',\n                cursor: 'pointer',\n                margin: '0px 2px',\n                padding: '0px 2px',\n                height: '16px',\n                width: '16px',\n                verticalAlign: 'middle'\n            }\n        },\n        commandPaletteHeader: {\n            container: {\n                height: '14px',\n                margin: '0 14px 0 auto'\n            },\n            element: {\n                height: '14px',\n                width: '14px'\n            },\n            options: {\n                elementPosition: 'center'\n            }\n        },\n        commandPaletteItem: {\n            element: {\n                height: '16px',\n                width: '16px'\n            },\n            options: {\n                elementPosition: 'center'\n            }\n        },\n        launcherCard: {\n            container: {\n                height: '52px',\n                width: '52px'\n            },\n            element: {\n                height: '52px',\n                width: '52px'\n            },\n            options: {\n                elementPosition: 'center'\n            }\n        },\n        launcherSection: {\n            container: {\n                boxSizing: 'border-box',\n                marginRight: '12px',\n                height: '32px',\n                width: '32px'\n            },\n            element: {\n                height: '32px',\n                width: '32px'\n            },\n            options: {\n                elementPosition: 'center'\n            }\n        },\n        listing: {\n            container: {\n                flex: '0 0 20px',\n                marginRight: '4px',\n                position: 'relative'\n            },\n            element: {\n                height: '16px',\n                width: '16px'\n            },\n            options: {\n                elementPosition: 'center'\n            }\n        },\n        listingHeaderItem: {\n            container: {\n                display: 'inline',\n                height: '16px',\n                width: '16px'\n            },\n            element: {\n                height: 'auto',\n                margin: '-2px 0 0 0',\n                width: '20px'\n            },\n            options: {\n                elementPosition: 'center'\n            }\n        },\n        mainAreaTab: {\n            container: {\n                $nest: {\n                    '.lm-DockPanel-tabBar &': {\n                        marginRight: '4px'\n                    }\n                }\n            },\n            element: {\n                $nest: {\n                    '.lm-DockPanel-tabBar &': {\n                        height: '14px',\n                        width: '14px'\n                    }\n                }\n            },\n            options: {\n                elementPosition: 'center'\n            }\n        },\n        menuItem: {\n            container: {\n                display: 'inline-block',\n                verticalAlign: 'middle'\n            },\n            element: {\n                height: '16px',\n                width: '16px'\n            },\n            options: {\n                elementPosition: 'center'\n            }\n        },\n        runningItem: {\n            container: {\n                margin: '0px 4px 0px 4px'\n            },\n            element: {\n                height: '16px',\n                width: '16px'\n            },\n            options: {\n                elementPosition: 'center'\n            }\n        },\n        select: {\n            container: {\n                pointerEvents: 'none'\n            },\n            element: {\n                position: 'absolute',\n                height: 'auto',\n                width: '16px'\n            }\n        },\n        settingsEditor: {\n            container: {\n                display: 'flex',\n                flex: '0 0 20px',\n                margin: '0 3px 0 0',\n                position: 'relative',\n                height: '20px',\n                width: '20px'\n            },\n            element: {\n                height: '16px',\n                width: '16px'\n            },\n            options: {\n                elementPosition: 'center'\n            }\n        },\n        sideBar: {\n            element: {\n                height: 'auto',\n                width: '20px'\n            },\n            options: {\n                elementPosition: 'center'\n            }\n        },\n        splash: {\n            container: {\n                animation: '0.3s fade-in linear forwards',\n                height: '100%',\n                width: '100%',\n                zIndex: 1\n            },\n            element: {\n                // width no height\n                width: '100px'\n            },\n            options: {\n                elementPosition: 'center'\n            }\n        },\n        statusBar: {\n            element: {\n                left: '0px',\n                top: '0px',\n                height: '18px',\n                width: '20px',\n                position: 'relative'\n            }\n        },\n        toolbarButton: {\n            container: {\n                display: 'inline-block',\n                verticalAlign: 'middle'\n            },\n            element: {\n                height: '16px',\n                width: '16px'\n            },\n            options: {\n                elementPosition: 'center'\n            }\n        }\n    };\n    function _elementPositionFactory(extra) {\n        return {\n            container: {\n                alignItems: 'center',\n                display: 'flex'\n            },\n            element: {\n                display: 'block',\n                ...extra\n            }\n        };\n    }\n    /**\n     * Styles to help with positioning\n     */\n    const positionSheets = {\n        center: _elementPositionFactory({ margin: '0 auto', width: '100%' }),\n        top: _elementPositionFactory({ margin: '0 0 auto 0' }),\n        right: _elementPositionFactory({ margin: '0 0 0 auto' }),\n        bottom: _elementPositionFactory({ margin: 'auto 0 0 0' }),\n        left: _elementPositionFactory({ margin: '0 auto 0 0' }),\n        'top right': _elementPositionFactory({ margin: '0 0 auto auto' }),\n        'bottom right': _elementPositionFactory({ margin: 'auto 0 0 auto' }),\n        'bottom left': _elementPositionFactory({ margin: 'auto auto 0 0' }),\n        'top left': _elementPositionFactory({ margin: '0 auto 0 auto' })\n    };\n    function _elementSizeFactory(size) {\n        return {\n            element: {\n                height: size,\n                width: size\n            }\n        };\n    }\n    /**\n     * sheets that establish some default sizes\n     */\n    const sizeSheets = {\n        small: _elementSizeFactory('14px'),\n        normal: _elementSizeFactory('16px'),\n        large: _elementSizeFactory('20px'),\n        xlarge: _elementSizeFactory('24px')\n    };\n    /**\n     * Merge two or more icon sheets into a single \"pure\"\n     * icon style (ie collections of CSS props only)\n     */\n    function mergeSheets(sheets) {\n        return {\n            container: Object.assign({}, ...sheets.map(s => s.container)),\n            element: Object.assign({}, ...sheets.map(s => s.element))\n        };\n    }\n    /**\n     * Resolve one or more stylesheets that may just be a string naming\n     * one of the builtin stylesheets to an array of proper ISheet objects\n     */\n    function resolveSheet(stylesheet) {\n        if (!stylesheet) {\n            return [];\n        }\n        if (!Array.isArray(stylesheet)) {\n            // wrap in array\n            stylesheet = [stylesheet];\n        }\n        return stylesheet.map(k => (typeof k === 'string' ? builtinSheets[k] : k));\n    }\n    /**\n     * Resolve and merge multiple icon stylesheets\n     */\n    function applySheetOptions(sheets) {\n        const options = Object.assign({}, ...sheets.map(s => s.options));\n        if (options.elementPosition) {\n            sheets.unshift(positionSheets[options.elementPosition]);\n        }\n        if (options.elementSize) {\n            sheets.unshift(sizeSheets[options.elementSize]);\n        }\n        return mergeSheets(sheets);\n    }\n    /**\n     * Resolve a pure icon stylesheet into a typestyle class\n     */\n    function resolveStyleClass(stylesheet) {\n        var _a;\n        return typestyleClass({\n            ...stylesheet.container,\n            $nest: {\n                ...(_a = stylesheet.container) === null || _a === void 0 ? void 0 : _a.$nest,\n                ['svg']: stylesheet.element\n            }\n        });\n    }\n    // cache style classes for builtin stylesheets\n    const _styleClassCache = new Map();\n    /**\n     * Get a typestyle class, given a set of icon styling props\n     */\n    function styleClass(props) {\n        if (!props || Object.keys(props).length === 0) {\n            // props is empty\n            return '';\n        }\n        let { elementPosition, elementSize, stylesheet, ...elementCSS } = props;\n        // add option args with defined values to overrides\n        const options = {\n            ...(elementPosition && { elementPosition }),\n            ...(elementSize && { elementSize })\n        };\n        // try to look up the style class in the cache\n        const cacheable = typeof stylesheet === 'string' && Object.keys(elementCSS).length === 0;\n        const cacheKey = cacheable\n            ? [stylesheet, elementPosition, elementSize].join(',')\n            : '';\n        if (cacheable && _styleClassCache.has(cacheKey)) {\n            return _styleClassCache.get(cacheKey);\n        }\n        // resolve kind to an array of sheets, then stick overrides on the end\n        const sheets = resolveSheet(stylesheet);\n        sheets.push({ element: elementCSS, options });\n        // apply style options/merge sheets, then convert to typestyle class\n        const cls = resolveStyleClass(applySheetOptions(sheets));\n        if (cacheable) {\n            // store in cache for later reuse\n            _styleClassCache.set(cacheKey, cls);\n        }\n        return cls;\n    }\n    LabIconStyle.styleClass = styleClass;\n})(LabIconStyle || (LabIconStyle = {}));\n//# sourceMappingURL=icon.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { UUID } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport badSvgstr from '../../style/debug/bad.svg';\nimport blankSvgstr from '../../style/debug/blank.svg';\nimport refreshSvgstr from '../../style/icons/toolbar/refresh.svg';\nimport { LabIconStyle } from '../style';\nimport { classes, getReactAttrs } from '../utils';\nexport class LabIcon {\n    /** *********\n     * statics *\n     ***********/\n    /**\n     * Remove any rendered icon from the element that contains it\n     *\n     * @param container - a DOM node into which an icon was\n     * previously rendered\n     *\n     * @returns the cleaned container\n     */\n    static remove(container) {\n        // clean up all children\n        while (container.firstChild) {\n            container.firstChild.remove();\n        }\n        // remove all classes\n        container.className = '';\n        return container;\n    }\n    /**\n     * Resolve an icon name or a \\{name, svgstr\\} pair into an\n     * actual LabIcon.\n     *\n     * @param options - icon: either a string with the name of an existing icon\n     * or an object with \\{name: string, svgstr: string\\} fields.\n     *\n     * @returns a LabIcon instance\n     */\n    static resolve({ icon }) {\n        if (icon instanceof LabIcon) {\n            // icon already is a LabIcon; nothing to do here\n            return icon;\n        }\n        if (typeof icon === 'string') {\n            // do a dynamic lookup of existing icon by name\n            const resolved = LabIcon._instances.get(icon);\n            if (resolved) {\n                return resolved;\n            }\n            // lookup failed\n            if (LabIcon._debug) {\n                // fail noisily\n                console.warn(`Lookup failed for icon, creating loading icon. icon: ${icon}`);\n            }\n            // no matching icon currently registered, create a new loading icon\n            // TODO: find better icon (maybe animate?) for loading icon\n            return new LabIcon({ name: icon, svgstr: refreshSvgstr, _loading: true });\n        }\n        // icon was provided as a non-LabIcon \\{name, svgstr\\} pair, communicating\n        // an intention to create a new icon\n        return new LabIcon(icon);\n    }\n    /**\n     * Resolve an icon name or a \\{name, svgstr\\} pair into a DOM element.\n     * If icon arg is undefined, the function will fall back to trying to render\n     * the icon as a CSS background image, via the iconClass arg.\n     * If both icon and iconClass are undefined, this function will return\n     * an empty div.\n     *\n     * @param icon - optional, either a string with the name of an existing icon\n     * or an object with \\{name: string, svgstr: string\\} fields\n     *\n     * @param iconClass - optional, if the icon arg is not set, the iconClass arg\n     * should be a CSS class associated with an existing CSS background-image\n     *\n     * @param fallback - DEPRECATED, optional, a LabIcon instance that will\n     * be used if neither icon nor iconClass are defined\n     *\n     * @param props - any additional args are passed though to the element method\n     * of the resolved icon on render\n     *\n     * @returns a DOM node with the resolved icon rendered into it\n     */\n    static resolveElement({ icon, iconClass, fallback, ...props }) {\n        if (!Private.isResolvable(icon)) {\n            if (!iconClass && fallback) {\n                // if neither icon nor iconClass are defined/resolvable, use fallback\n                return fallback.element(props);\n            }\n            // set the icon's class to iconClass plus props.className\n            props.className = classes(iconClass, props.className);\n            // render icon as css background image, assuming one is set on iconClass\n            return Private.blankElement(props);\n        }\n        return LabIcon.resolve({ icon }).element(props);\n    }\n    /**\n     * Resolve an icon name or a \\{name, svgstr\\} pair into a React component.\n     * If icon arg is undefined, the function will fall back to trying to render\n     * the icon as a CSS background image, via the iconClass arg.\n     * If both icon and iconClass are undefined, the returned component\n     * will simply render an empty div.\n     *\n     * @param icon - optional, either a string with the name of an existing icon\n     * or an object with \\{name: string, svgstr: string\\} fields\n     *\n     * @param iconClass - optional, if the icon arg is not set, the iconClass arg\n     * should be a CSS class associated with an existing CSS background-image\n     *\n     * @param fallback - DEPRECATED, optional, a LabIcon instance that will\n     * be used if neither icon nor iconClass are defined\n     *\n     * @param props - any additional args are passed though to the React component\n     * of the resolved icon on render\n     *\n     * @returns a React component that will render the resolved icon\n     */\n    static resolveReact({ icon, iconClass, fallback, ...props }) {\n        if (!Private.isResolvable(icon)) {\n            if (!iconClass && fallback) {\n                // if neither icon nor iconClass are defined/resolvable, use fallback\n                return React.createElement(fallback.react, { ...props });\n            }\n            // set the icon's class to iconClass plus props.className\n            props.className = classes(iconClass, props.className);\n            // render icon as css background image, assuming one is set on iconClass\n            return React.createElement(Private.blankReact, { ...props });\n        }\n        const resolved = LabIcon.resolve({ icon });\n        return React.createElement(resolved.react, { ...props });\n    }\n    /**\n     * Resolve a \\{name, svgstr\\} pair into an actual svg node.\n     */\n    static resolveSvg({ name, svgstr }) {\n        const svgDoc = new DOMParser().parseFromString(Private.svgstrShim(svgstr), 'image/svg+xml');\n        const svgError = svgDoc.querySelector('parsererror');\n        // structure of error element varies by browser, search at top level\n        if (svgError) {\n            // parse failed, svgElement will be an error box\n            const errmsg = `SVG HTML was malformed for LabIcon instance.\\nname: ${name}, svgstr: ${svgstr}`;\n            if (LabIcon._debug) {\n                // fail noisily, render the error box\n                console.error(errmsg);\n                return svgError;\n            }\n            else {\n                // bad svg is always a real error, fail silently but warn\n                console.warn(errmsg);\n                return null;\n            }\n        }\n        else {\n            // parse succeeded\n            return svgDoc.documentElement;\n        }\n    }\n    /**\n     * Toggle icon debug from off-to-on, or vice-versa.\n     *\n     * @param debug - optional boolean to force debug on or off\n     */\n    static toggleDebug(debug) {\n        LabIcon._debug = debug !== null && debug !== void 0 ? debug : !LabIcon._debug;\n    }\n    /** *********\n     * members *\n     ***********/\n    constructor({ name, svgstr, render, unrender, _loading = false }) {\n        this._props = {};\n        this._svgReplaced = new Signal(this);\n        /**\n         * Cache for svg parsing intermediates\n         *   - undefined: the cache has not yet been populated\n         *   - null: a valid, but empty, value\n         */\n        this._svgElement = undefined;\n        this._svgInnerHTML = undefined;\n        this._svgReactAttrs = undefined;\n        if (!(name && svgstr)) {\n            // sanity check failed\n            console.error(`When defining a new LabIcon, name and svgstr must both be non-empty strings. name: ${name}, svgstr: ${svgstr}`);\n            return badIcon;\n        }\n        // currently this needs to be set early, before checks for existing icons\n        this._loading = _loading;\n        // check to see if this is a redefinition of an existing icon\n        if (LabIcon._instances.has(name)) {\n            // fetch the existing icon, replace its svg, then return it\n            const icon = LabIcon._instances.get(name);\n            if (this._loading) {\n                // replace the placeholder svg in icon\n                icon.svgstr = svgstr;\n                this._loading = false;\n                return icon;\n            }\n            else {\n                // already loaded icon svg exists; replace it and warn\n                if (LabIcon._debug) {\n                    console.warn(`Redefining previously loaded icon svgstr. name: ${name}, svgstrOld: ${icon.svgstr}, svgstr: ${svgstr}`);\n                }\n                icon.svgstr = svgstr;\n                return icon;\n            }\n        }\n        this.name = name;\n        this.react = this._initReact(name);\n        this.svgstr = svgstr;\n        // setup custom render/unrender methods, if passed in\n        this._initRender({ render, unrender });\n        LabIcon._instances.set(this.name, this);\n    }\n    /**\n     * Get a view of this icon that is bound to the specified icon/style props\n     *\n     * @param optional icon/style props (same as args for .element\n     * and .react methods). These will be bound to the resulting view\n     *\n     * @returns a view of this LabIcon instance\n     */\n    bindprops(props) {\n        const view = Object.create(this);\n        view._props = props;\n        view.react = view._initReact(view.name + '_bind');\n        return view;\n    }\n    /**\n     * Create an icon as a DOM element\n     *\n     * @param className - a string that will be used as the class\n     * of the container element. Overrides any existing class\n     *\n     * @param container - a preexisting DOM element that\n     * will be used as the container for the svg element\n     *\n     * @param label - text that will be displayed adjacent\n     * to the icon\n     *\n     * @param title - a tooltip for the icon\n     *\n     * @param tag - if container is not explicitly\n     * provided, this tag will be used when creating the container\n     *\n     * @param stylesheet - optional string naming a builtin icon\n     * stylesheet, for example 'menuItem' or `statusBar`. Can also be an\n     * object defining a custom icon stylesheet, or a list of builtin\n     * stylesheet names and/or custom stylesheet objects. If array,\n     * the given stylesheets will be merged.\n     *\n     *   See @jupyterlab/ui-components/src/style/icon.ts for details\n     *\n     * @param elementPosition - optional position for the inner svg element\n     *\n     * @param elementSize - optional size for the inner svg element.\n     * Set to 'normal' to get a standard 16px x 16px icon\n     *\n     * @param ...elementCSS - all additional args are treated as\n     * overrides for the CSS props applied to the inner svg element\n     *\n     * @returns A DOM element that contains an (inline) svg element\n     * that displays an icon\n     */\n    element(props = {}) {\n        var _a;\n        let { className, container, label, title, tag = 'div', ...styleProps } = { ...this._props, ...props };\n        // check if icon element is already set\n        const maybeSvgElement = container === null || container === void 0 ? void 0 : container.firstChild;\n        if (((_a = maybeSvgElement === null || maybeSvgElement === void 0 ? void 0 : maybeSvgElement.dataset) === null || _a === void 0 ? void 0 : _a.iconId) === this._uuid) {\n            // return the existing icon element\n            return maybeSvgElement;\n        }\n        // ensure that svg html is valid\n        if (!this.svgElement) {\n            // bail if failing silently, return blank element\n            return document.createElement('div');\n        }\n        if (container) {\n            // take ownership by removing any existing children\n            while (container.firstChild) {\n                container.firstChild.remove();\n            }\n        }\n        else if (tag) {\n            // create a container if needed\n            container = document.createElement(tag);\n        }\n        const svgElement = this.svgElement.cloneNode(true);\n        if (!container) {\n            if (label) {\n                console.warn();\n            }\n            return svgElement;\n        }\n        if (label != null) {\n            container.textContent = label;\n        }\n        Private.initContainer({\n            container: container,\n            className,\n            styleProps,\n            title\n        });\n        // add the svg node to the container\n        container.appendChild(svgElement);\n        return container;\n    }\n    render(container, options) {\n        var _a;\n        let label = (_a = options === null || options === void 0 ? void 0 : options.children) === null || _a === void 0 ? void 0 : _a[0];\n        // narrow type of label\n        if (typeof label !== 'string') {\n            label = undefined;\n        }\n        this.element({\n            container,\n            label,\n            ...options === null || options === void 0 ? void 0 : options.props\n        });\n    }\n    get svgElement() {\n        if (this._svgElement === undefined) {\n            this._svgElement = this._initSvg({ uuid: this._uuid });\n        }\n        return this._svgElement;\n    }\n    get svgInnerHTML() {\n        if (this._svgInnerHTML === undefined) {\n            if (this.svgElement === null) {\n                // the svg element resolved to null, mark this null too\n                this._svgInnerHTML = null;\n            }\n            else {\n                this._svgInnerHTML = this.svgElement.innerHTML;\n            }\n        }\n        return this._svgInnerHTML;\n    }\n    get svgReactAttrs() {\n        if (this._svgReactAttrs === undefined) {\n            if (this.svgElement === null) {\n                // the svg element resolved to null, mark this null too\n                this._svgReactAttrs = null;\n            }\n            else {\n                this._svgReactAttrs = getReactAttrs(this.svgElement, {\n                    ignore: ['data-icon-id']\n                });\n            }\n        }\n        return this._svgReactAttrs;\n    }\n    get svgstr() {\n        return this._svgstr;\n    }\n    set svgstr(svgstr) {\n        this._svgstr = svgstr;\n        // associate a new unique id with this particular svgstr\n        const uuid = UUID.uuid4();\n        const uuidOld = this._uuid;\n        this._uuid = uuid;\n        // empty the svg parsing intermediates cache\n        this._svgElement = undefined;\n        this._svgInnerHTML = undefined;\n        this._svgReactAttrs = undefined;\n        // update icon elements created using .element method\n        document\n            .querySelectorAll(`[data-icon-id=\"${uuidOld}\"]`)\n            .forEach(oldSvgElement => {\n            if (this.svgElement) {\n                oldSvgElement.replaceWith(this.svgElement.cloneNode(true));\n            }\n        });\n        // trigger update of icon elements created using other methods\n        this._svgReplaced.emit();\n    }\n    _initReact(displayName) {\n        const component = React.forwardRef((props = {}, ref) => {\n            const { className, container, label, title, slot, tag = 'div', ...styleProps } = { ...this._props, ...props };\n            // set up component state via useState hook\n            const [, setId] = React.useState(this._uuid);\n            // subscribe to svg replacement via useEffect hook\n            React.useEffect(() => {\n                const onSvgReplaced = () => {\n                    setId(this._uuid);\n                };\n                this._svgReplaced.connect(onSvgReplaced);\n                // specify cleanup callback as hook return\n                return () => {\n                    this._svgReplaced.disconnect(onSvgReplaced);\n                };\n            });\n            // make it so that tag can be used as a jsx component\n            const Tag = tag !== null && tag !== void 0 ? tag : React.Fragment;\n            // ensure that svg html is valid\n            if (!(this.svgInnerHTML && this.svgReactAttrs)) {\n                // bail if failing silently\n                return React.createElement(React.Fragment, null);\n            }\n            const svgProps = { ...this.svgReactAttrs };\n            if (!tag) {\n                Object.assign(svgProps, {\n                    className: className || styleProps\n                        ? classes(className, LabIconStyle.styleClass(styleProps))\n                        : undefined,\n                    title: title,\n                    slot: slot\n                });\n            }\n            const svgComponent = (React.createElement(\"svg\", { ...svgProps, ...this.svgReactAttrs, dangerouslySetInnerHTML: { __html: this.svgInnerHTML }, ref: ref }));\n            if (container) {\n                Private.initContainer({ container, className, styleProps, title });\n                return (React.createElement(React.Fragment, null,\n                    svgComponent,\n                    label));\n            }\n            else {\n                let attributes = {};\n                if (Tag !== React.Fragment) {\n                    attributes = {\n                        className: className || styleProps\n                            ? classes(className, LabIconStyle.styleClass(styleProps))\n                            : undefined,\n                        title: title,\n                        slot: slot\n                    };\n                }\n                return (React.createElement(Tag, { ...attributes },\n                    svgComponent,\n                    label));\n            }\n        });\n        component.displayName = `LabIcon_${displayName}`;\n        return component;\n    }\n    _initRender({ render, unrender }) {\n        if (render) {\n            this.render = render;\n            if (unrender) {\n                this.unrender = unrender;\n            }\n        }\n        else if (unrender) {\n            console.warn('In _initRender, ignoring unrender arg since render is undefined');\n        }\n    }\n    _initSvg({ title, uuid } = {}) {\n        const svgElement = LabIcon.resolveSvg(this);\n        if (!svgElement) {\n            // bail on null svg element\n            return svgElement;\n        }\n        if (svgElement.tagName !== 'parsererror') {\n            // svgElement is an actual svg node, augment it\n            svgElement.dataset.icon = this.name;\n            if (uuid) {\n                svgElement.dataset.iconId = uuid;\n            }\n            if (title) {\n                Private.setTitleSvg(svgElement, title);\n            }\n            else {\n                // mark as a decorative\n                svgElement.setAttribute('aria-hidden', 'true');\n            }\n        }\n        return svgElement;\n    }\n}\nLabIcon._debug = false;\nLabIcon._instances = new Map();\nvar Private;\n(function (Private) {\n    function blankElement({ className = '', container, label, title, tag = 'div', slot, ...styleProps }) {\n        if ((container === null || container === void 0 ? void 0 : container.className) === className) {\n            // nothing needs doing, return the icon node\n            return container;\n        }\n        if (container) {\n            // take ownership by removing any existing children\n            while (container.firstChild) {\n                container.firstChild.remove();\n            }\n        }\n        else {\n            // create a container if needed\n            container = document.createElement(tag !== null && tag !== void 0 ? tag : 'div');\n        }\n        if (label != null) {\n            container.textContent = label;\n        }\n        Private.initContainer({ container, className, styleProps, title });\n        return container;\n    }\n    Private.blankElement = blankElement;\n    Private.blankReact = React.forwardRef(({ className = '', container, label, title, tag = 'div', ...styleProps }, ref) => {\n        // make it so that tag can be used as a jsx component\n        const Tag = tag !== null && tag !== void 0 ? tag : 'div';\n        if (container) {\n            initContainer({ container, className, styleProps, title });\n            return React.createElement(React.Fragment, null);\n        }\n        else {\n            // if ref is defined, we create a blank svg node and point ref to it\n            return (React.createElement(Tag, { className: classes(className, LabIconStyle.styleClass(styleProps)) },\n                ref && blankIcon.react({ ref }),\n                label));\n        }\n    });\n    Private.blankReact.displayName = 'BlankReact';\n    function initContainer({ container, className, styleProps, title }) {\n        if (title != null) {\n            container.title = title;\n        }\n        const styleClass = LabIconStyle.styleClass(styleProps);\n        if (className != null) {\n            // override the container class with explicitly passed-in class + style class\n            const classResolved = classes(className, styleClass);\n            container.className = classResolved;\n            return classResolved;\n        }\n        else if (styleClass) {\n            // add the style class to the container class\n            container.classList.add(styleClass);\n            return styleClass;\n        }\n        else {\n            return '';\n        }\n    }\n    Private.initContainer = initContainer;\n    function isResolvable(icon) {\n        return !!(icon &&\n            (typeof icon === 'string' ||\n                (icon.name && icon.svgstr)));\n    }\n    Private.isResolvable = isResolvable;\n    function setTitleSvg(svgNode, title) {\n        // add a title node to the top level svg node\n        const titleNodes = svgNode.getElementsByTagName('title');\n        if (titleNodes.length) {\n            titleNodes[0].textContent = title;\n        }\n        else {\n            const titleNode = document.createElement('title');\n            titleNode.textContent = title;\n            svgNode.appendChild(titleNode);\n        }\n    }\n    Private.setTitleSvg = setTitleSvg;\n    /**\n     * A shim for svgstrs loaded using any loader other than raw-loader.\n     * This function assumes that svgstr will look like one of:\n     *\n     * - the raw contents of an .svg file:\n     *   <svg...</svg>\n     *\n     * - a data URL:\n     *   data:[<mediatype>][;base64],<svg...</svg>\n     *\n     * See https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n     */\n    function svgstrShim(svgstr, strict = true) {\n        // decode any uri escaping, condense leading/lagging whitespace,\n        // then match to raw svg string\n        const [, base64, raw] = decodeURIComponent(svgstr)\n            .replace(/>\\s*\\n\\s*</g, '><')\n            .replace(/\\s*\\n\\s*/g, ' ')\n            .match(strict\n            ? // match based on data url schema\n                /^(?:data:.*?(;base64)?,)?(.*)/\n            : // match based on open of svg tag\n                /(?:(base64).*)?(<svg.*)/);\n        // decode from base64, if needed\n        return base64 ? atob(raw) : raw;\n    }\n    Private.svgstrShim = svgstrShim;\n    /**\n     * TODO: figure out story for independent Renderers.\n     * Base implementation of IRenderer.\n     */\n    class Renderer {\n        constructor(_icon, _rendererOptions) {\n            this._icon = _icon;\n            this._rendererOptions = _rendererOptions;\n        }\n        // eslint-disable-next-line\n        render(container, options) { }\n    }\n    Private.Renderer = Renderer;\n    /**\n     * TODO: figure out story for independent Renderers.\n     * Implementation of IRenderer that creates the icon svg node\n     * as a DOM element.\n     */\n    class ElementRenderer extends Renderer {\n        render(container, options) {\n            var _a, _b;\n            let label = (_a = options === null || options === void 0 ? void 0 : options.children) === null || _a === void 0 ? void 0 : _a[0];\n            // narrow type of label\n            if (typeof label !== 'string') {\n                label = undefined;\n            }\n            this._icon.element({\n                container,\n                label,\n                ...(_b = this._rendererOptions) === null || _b === void 0 ? void 0 : _b.props,\n                ...options === null || options === void 0 ? void 0 : options.props\n            });\n        }\n    }\n    Private.ElementRenderer = ElementRenderer;\n    /**\n     * TODO: figure out story for independent Renderers.\n     * Implementation of IRenderer that creates the icon svg node\n     * as a React component.\n     */\n    class ReactRenderer extends Renderer {\n        constructor() {\n            super(...arguments);\n            this._rootDOM = null;\n        }\n        render(container, options) {\n            var _a, _b;\n            let label = (_a = options === null || options === void 0 ? void 0 : options.children) === null || _a === void 0 ? void 0 : _a[0];\n            // narrow type of label\n            if (typeof label !== 'string') {\n                label = undefined;\n            }\n            const icon = this._icon;\n            if (this._rootDOM !== null) {\n                this._rootDOM.unmount();\n            }\n            this._rootDOM = createRoot(container);\n            this._rootDOM.render(React.createElement(icon.react, { container: container, label: label, ...(_b = this._rendererOptions) === null || _b === void 0 ? void 0 : _b.props, ...options === null || options === void 0 ? void 0 : options.props }));\n        }\n        unrender(container) {\n            if (this._rootDOM !== null) {\n                this._rootDOM.unmount();\n                this._rootDOM = null;\n            }\n        }\n    }\n    Private.ReactRenderer = ReactRenderer;\n})(Private || (Private = {}));\n// need to be at the bottom since constructor depends on Private\nexport const badIcon = new LabIcon({\n    name: 'ui-components:bad',\n    svgstr: badSvgstr\n});\nexport const blankIcon = new LabIcon({\n    name: 'ui-components:blank',\n    svgstr: blankSvgstr\n});\n//# sourceMappingURL=labicon.js.map","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/* This file was auto-generated by ensureUiComponents() in @jupyterlab/buildutils */\nimport { LabIcon } from './labicon';\n// icon svg import statements\nimport addAboveSvgstr from '../../style/icons/toolbar/add-above.svg';\nimport addBelowSvgstr from '../../style/icons/toolbar/add-below.svg';\nimport addSvgstr from '../../style/icons/toolbar/add.svg';\nimport bellSvgstr from '../../style/icons/statusbar/bell.svg';\nimport bugDotSvgstr from '../../style/icons/toolbar/bug-dot.svg';\nimport bugSvgstr from '../../style/icons/toolbar/bug.svg';\nimport buildSvgstr from '../../style/icons/sidebar/build.svg';\nimport caretDownEmptySvgstr from '../../style/icons/arrow/caret-down-empty.svg';\nimport caretDownEmptyThinSvgstr from '../../style/icons/arrow/caret-down-empty-thin.svg';\nimport caretDownSvgstr from '../../style/icons/arrow/caret-down.svg';\nimport caretLeftSvgstr from '../../style/icons/arrow/caret-left.svg';\nimport caretRightSvgstr from '../../style/icons/arrow/caret-right.svg';\nimport caretUpEmptyThinSvgstr from '../../style/icons/arrow/caret-up-empty-thin.svg';\nimport caretUpSvgstr from '../../style/icons/arrow/caret-up.svg';\nimport caseSensitiveSvgstr from '../../style/icons/search/case-sensitive.svg';\nimport checkSvgstr from '../../style/icons/toolbar/check.svg';\nimport circleEmptySvgstr from '../../style/icons/toolbar/circle-empty.svg';\nimport circleSvgstr from '../../style/icons/toolbar/circle.svg';\nimport cleaningSvgstr from '../../style/icons/toolbar/cleaning.svg';\nimport clearSvgstr from '../../style/icons/toolbar/clear.svg';\nimport closeAllSvgstr from '../../style/icons/debugger/close-all.svg';\nimport closeSvgstr from '../../style/icons/toolbar/close.svg';\nimport codeCheckSvgstr from '../../style/icons/lsp/code-check.svg';\nimport codeSvgstr from '../../style/icons/toolbar/code.svg';\nimport collapseAllSvgstr from '../../style/icons/toolbar/collapse-all.svg';\nimport collapseSvgstr from '../../style/icons/output/collapse.svg';\nimport consoleSvgstr from '../../style/icons/filetype/console.svg';\nimport copySvgstr from '../../style/icons/toolbar/copy.svg';\nimport copyrightSvgstr from '../../style/icons/licenses/copyright.svg';\nimport cutSvgstr from '../../style/icons/toolbar/cut.svg';\nimport deleteSvgstr from '../../style/icons/toolbar/delete.svg';\nimport dockBottomSvgstr from '../../style/icons/toolbar/dock-bottom.svg';\nimport dockLeftSvgstr from '../../style/icons/toolbar/dock-left.svg';\nimport dockRightSvgstr from '../../style/icons/toolbar/dock-right.svg';\nimport dockTopSvgstr from '../../style/icons/toolbar/dock-top.svg';\nimport dotsSvgstr from '../../style/icons/toolbar/dots.svg';\nimport downloadSvgstr from '../../style/icons/toolbar/download.svg';\nimport duplicateSvgstr from '../../style/icons/toolbar/duplicate.svg';\nimport editSvgstr from '../../style/icons/toolbar/edit.svg';\nimport ellipsesSvgstr from '../../style/icons/toolbar/ellipses.svg';\nimport errorSvgstr from '../../style/icons/error.svg';\nimport exceptionsSvgstr from '../../style/icons/debugger/exceptions.svg';\nimport expandAllSvgstr from '../../style/icons/toolbar/expand-all.svg';\nimport expandSvgstr from '../../style/icons/output/expand.svg';\nimport extensionSvgstr from '../../style/icons/sidebar/extension.svg';\nimport fastForwardSvgstr from '../../style/icons/toolbar/fast-forward.svg';\nimport fileSvgstr from '../../style/icons/filetype/file.svg';\nimport fileUploadSvgstr from '../../style/icons/toolbar/file-upload.svg';\nimport filterDotSvgstr from '../../style/icons/search/filter-dot.svg';\nimport filterListSvgstr from '../../style/icons/toolbar/filter-list.svg';\nimport filterSvgstr from '../../style/icons/search/filter.svg';\nimport folderFavoriteSvgstr from '../../style/icons/filetype/folder-favorite.svg';\nimport folderSvgstr from '../../style/icons/filetype/folder.svg';\nimport historySvgstr from '../../style/icons/history.svg';\nimport homeSvgstr from '../../style/icons/filetype/home.svg';\nimport html5Svgstr from '../../style/icons/filetype/html5.svg';\nimport imageSvgstr from '../../style/icons/filetype/image.svg';\nimport infoSvgstr from '../../style/icons/info.svg';\nimport inspectorSvgstr from '../../style/icons/filetype/inspector.svg';\nimport jsonSvgstr from '../../style/icons/filetype/json.svg';\nimport juliaSvgstr from '../../style/icons/filetype/julia.svg';\nimport jupyterFaviconSvgstr from '../../style/icons/jupyter/jupyter-favicon.svg';\nimport jupyterSvgstr from '../../style/icons/jupyter/jupyter.svg';\nimport jupyterlabWordmarkSvgstr from '../../style/icons/jupyter/jupyterlab-wordmark.svg';\nimport kernelSvgstr from '../../style/icons/statusbar/kernel.svg';\nimport keyboardSvgstr from '../../style/icons/filetype/keyboard.svg';\nimport launchSvgstr from '../../style/icons/toolbar/launch.svg';\nimport launcherSvgstr from '../../style/icons/filetype/launcher.svg';\nimport lineFormSvgstr from '../../style/icons/statusbar/line-form.svg';\nimport linkSvgstr from '../../style/icons/toolbar/link.svg';\nimport listSvgstr from '../../style/icons/statusbar/list.svg';\nimport lockSvgstr from '../../style/icons/lock.svg';\nimport markdownSvgstr from '../../style/icons/filetype/markdown.svg';\nimport mermaidSvgstr from '../../style/icons/filetype/mermaid.svg';\nimport moveDownSvgstr from '../../style/icons/toolbar/move-down.svg';\nimport moveUpSvgstr from '../../style/icons/toolbar/move-up.svg';\nimport newFolderSvgstr from '../../style/icons/toolbar/new-folder.svg';\nimport notTrustedSvgstr from '../../style/icons/statusbar/not-trusted.svg';\nimport notebookSvgstr from '../../style/icons/filetype/notebook.svg';\nimport numberingSvgstr from '../../style/icons/toolbar/numbering.svg';\nimport offlineBoltSvgstr from '../../style/icons/toolbar/offline-bolt.svg';\nimport openKernelSourceSvgstr from '../../style/icons/debugger/open-kernel-source.svg';\nimport paletteSvgstr from '../../style/icons/sidebar/palette.svg';\nimport pasteSvgstr from '../../style/icons/toolbar/paste.svg';\nimport pauseSvgstr from '../../style/icons/debugger/pause.svg';\nimport pdfSvgstr from '../../style/icons/filetype/pdf.svg';\nimport pythonSvgstr from '../../style/icons/filetype/python.svg';\nimport rKernelSvgstr from '../../style/icons/filetype/r-kernel.svg';\nimport reactSvgstr from '../../style/icons/filetype/react.svg';\nimport redoSvgstr from '../../style/icons/toolbar/redo.svg';\nimport refreshSvgstr from '../../style/icons/toolbar/refresh.svg';\nimport regexSvgstr from '../../style/icons/search/regex.svg';\nimport runSvgstr from '../../style/icons/toolbar/run.svg';\nimport runningSvgstr from '../../style/icons/sidebar/running.svg';\nimport saveSvgstr from '../../style/icons/toolbar/save.svg';\nimport searchSvgstr from '../../style/icons/toolbar/search.svg';\nimport settingsSvgstr from '../../style/icons/filetype/settings.svg';\nimport shareSvgstr from '../../style/icons/sidebar/share.svg';\nimport spreadsheetSvgstr from '../../style/icons/filetype/spreadsheet.svg';\nimport stepIntoSvgstr from '../../style/icons/debugger/step-into.svg';\nimport stepOutSvgstr from '../../style/icons/debugger/step-out.svg';\nimport stepOverSvgstr from '../../style/icons/debugger/step-over.svg';\nimport stopSvgstr from '../../style/icons/toolbar/stop.svg';\nimport tabSvgstr from '../../style/icons/sidebar/tab.svg';\nimport tableRowsSvgstr from '../../style/icons/toolbar/table-rows.svg';\nimport tagSvgstr from '../../style/icons/toolbar/tag.svg';\nimport terminalSvgstr from '../../style/icons/statusbar/terminal.svg';\nimport textEditorSvgstr from '../../style/icons/filetype/text-editor.svg';\nimport tocSvgstr from '../../style/icons/sidebar/toc.svg';\nimport treeViewSvgstr from '../../style/icons/toolbar/tree-view.svg';\nimport trustedSvgstr from '../../style/icons/statusbar/trusted.svg';\nimport undoSvgstr from '../../style/icons/toolbar/undo.svg';\nimport userSvgstr from '../../style/icons/sidebar/user.svg';\nimport usersSvgstr from '../../style/icons/sidebar/users.svg';\nimport variableSvgstr from '../../style/icons/debugger/variable.svg';\nimport vegaSvgstr from '../../style/icons/filetype/vega.svg';\nimport viewBreakpointSvgstr from '../../style/icons/debugger/view-breakpoint.svg';\nimport wordSvgstr from '../../style/icons/search/word.svg';\nimport yamlSvgstr from '../../style/icons/filetype/yaml.svg';\n// LabIcon instance construction\nexport const addAboveIcon = new LabIcon({ name: 'ui-components:add-above', svgstr: addAboveSvgstr });\nexport const addBelowIcon = new LabIcon({ name: 'ui-components:add-below', svgstr: addBelowSvgstr });\nexport const addIcon = new LabIcon({ name: 'ui-components:add', svgstr: addSvgstr });\nexport const bellIcon = new LabIcon({ name: 'ui-components:bell', svgstr: bellSvgstr });\nexport const bugDotIcon = new LabIcon({ name: 'ui-components:bug-dot', svgstr: bugDotSvgstr });\nexport const bugIcon = new LabIcon({ name: 'ui-components:bug', svgstr: bugSvgstr });\nexport const buildIcon = new LabIcon({ name: 'ui-components:build', svgstr: buildSvgstr });\nexport const caretDownEmptyIcon = new LabIcon({ name: 'ui-components:caret-down-empty', svgstr: caretDownEmptySvgstr });\nexport const caretDownEmptyThinIcon = new LabIcon({ name: 'ui-components:caret-down-empty-thin', svgstr: caretDownEmptyThinSvgstr });\nexport const caretDownIcon = new LabIcon({ name: 'ui-components:caret-down', svgstr: caretDownSvgstr });\nexport const caretLeftIcon = new LabIcon({ name: 'ui-components:caret-left', svgstr: caretLeftSvgstr });\nexport const caretRightIcon = new LabIcon({ name: 'ui-components:caret-right', svgstr: caretRightSvgstr });\nexport const caretUpEmptyThinIcon = new LabIcon({ name: 'ui-components:caret-up-empty-thin', svgstr: caretUpEmptyThinSvgstr });\nexport const caretUpIcon = new LabIcon({ name: 'ui-components:caret-up', svgstr: caretUpSvgstr });\nexport const caseSensitiveIcon = new LabIcon({ name: 'ui-components:case-sensitive', svgstr: caseSensitiveSvgstr });\nexport const checkIcon = new LabIcon({ name: 'ui-components:check', svgstr: checkSvgstr });\nexport const circleEmptyIcon = new LabIcon({ name: 'ui-components:circle-empty', svgstr: circleEmptySvgstr });\nexport const circleIcon = new LabIcon({ name: 'ui-components:circle', svgstr: circleSvgstr });\nexport const cleaningIcon = new LabIcon({ name: 'ui-components:cleaning', svgstr: cleaningSvgstr });\nexport const clearIcon = new LabIcon({ name: 'ui-components:clear', svgstr: clearSvgstr });\nexport const closeAllIcon = new LabIcon({ name: 'ui-components:close-all', svgstr: closeAllSvgstr });\nexport const closeIcon = new LabIcon({ name: 'ui-components:close', svgstr: closeSvgstr });\nexport const codeCheckIcon = new LabIcon({ name: 'ui-components:code-check', svgstr: codeCheckSvgstr });\nexport const codeIcon = new LabIcon({ name: 'ui-components:code', svgstr: codeSvgstr });\nexport const collapseAllIcon = new LabIcon({ name: 'ui-components:collapse-all', svgstr: collapseAllSvgstr });\nexport const collapseIcon = new LabIcon({ name: 'ui-components:collapse', svgstr: collapseSvgstr });\nexport const consoleIcon = new LabIcon({ name: 'ui-components:console', svgstr: consoleSvgstr });\nexport const copyIcon = new LabIcon({ name: 'ui-components:copy', svgstr: copySvgstr });\nexport const copyrightIcon = new LabIcon({ name: 'ui-components:copyright', svgstr: copyrightSvgstr });\nexport const cutIcon = new LabIcon({ name: 'ui-components:cut', svgstr: cutSvgstr });\nexport const deleteIcon = new LabIcon({ name: 'ui-components:delete', svgstr: deleteSvgstr });\nexport const dockBottomIcon = new LabIcon({ name: 'ui-components:dock-bottom', svgstr: dockBottomSvgstr });\nexport const dockLeftIcon = new LabIcon({ name: 'ui-components:dock-left', svgstr: dockLeftSvgstr });\nexport const dockRightIcon = new LabIcon({ name: 'ui-components:dock-right', svgstr: dockRightSvgstr });\nexport const dockTopIcon = new LabIcon({ name: 'ui-components:dock-top', svgstr: dockTopSvgstr });\nexport const dotsIcon = new LabIcon({ name: 'ui-components:dots', svgstr: dotsSvgstr });\nexport const downloadIcon = new LabIcon({ name: 'ui-components:download', svgstr: downloadSvgstr });\nexport const duplicateIcon = new LabIcon({ name: 'ui-components:duplicate', svgstr: duplicateSvgstr });\nexport const editIcon = new LabIcon({ name: 'ui-components:edit', svgstr: editSvgstr });\nexport const ellipsesIcon = new LabIcon({ name: 'ui-components:ellipses', svgstr: ellipsesSvgstr });\nexport const errorIcon = new LabIcon({ name: 'ui-components:error', svgstr: errorSvgstr });\nexport const exceptionsIcon = new LabIcon({ name: 'ui-components:exceptions', svgstr: exceptionsSvgstr });\nexport const expandAllIcon = new LabIcon({ name: 'ui-components:expand-all', svgstr: expandAllSvgstr });\nexport const expandIcon = new LabIcon({ name: 'ui-components:expand', svgstr: expandSvgstr });\nexport const extensionIcon = new LabIcon({ name: 'ui-components:extension', svgstr: extensionSvgstr });\nexport const fastForwardIcon = new LabIcon({ name: 'ui-components:fast-forward', svgstr: fastForwardSvgstr });\nexport const fileIcon = new LabIcon({ name: 'ui-components:file', svgstr: fileSvgstr });\nexport const fileUploadIcon = new LabIcon({ name: 'ui-components:file-upload', svgstr: fileUploadSvgstr });\nexport const filterDotIcon = new LabIcon({ name: 'ui-components:filter-dot', svgstr: filterDotSvgstr });\nexport const filterIcon = new LabIcon({ name: 'ui-components:filter', svgstr: filterSvgstr });\nexport const filterListIcon = new LabIcon({ name: 'ui-components:filter-list', svgstr: filterListSvgstr });\nexport const folderFavoriteIcon = new LabIcon({ name: 'ui-components:folder-favorite', svgstr: folderFavoriteSvgstr });\nexport const folderIcon = new LabIcon({ name: 'ui-components:folder', svgstr: folderSvgstr });\nexport const historyIcon = new LabIcon({ name: 'ui-components:history', svgstr: historySvgstr });\nexport const homeIcon = new LabIcon({ name: 'ui-components:home', svgstr: homeSvgstr });\nexport const html5Icon = new LabIcon({ name: 'ui-components:html5', svgstr: html5Svgstr });\nexport const imageIcon = new LabIcon({ name: 'ui-components:image', svgstr: imageSvgstr });\nexport const infoIcon = new LabIcon({ name: 'ui-components:info', svgstr: infoSvgstr });\nexport const inspectorIcon = new LabIcon({ name: 'ui-components:inspector', svgstr: inspectorSvgstr });\nexport const jsonIcon = new LabIcon({ name: 'ui-components:json', svgstr: jsonSvgstr });\nexport const juliaIcon = new LabIcon({ name: 'ui-components:julia', svgstr: juliaSvgstr });\nexport const jupyterFaviconIcon = new LabIcon({ name: 'ui-components:jupyter-favicon', svgstr: jupyterFaviconSvgstr });\nexport const jupyterIcon = new LabIcon({ name: 'ui-components:jupyter', svgstr: jupyterSvgstr });\nexport const jupyterlabWordmarkIcon = new LabIcon({ name: 'ui-components:jupyterlab-wordmark', svgstr: jupyterlabWordmarkSvgstr });\nexport const kernelIcon = new LabIcon({ name: 'ui-components:kernel', svgstr: kernelSvgstr });\nexport const keyboardIcon = new LabIcon({ name: 'ui-components:keyboard', svgstr: keyboardSvgstr });\nexport const launchIcon = new LabIcon({ name: 'ui-components:launch', svgstr: launchSvgstr });\nexport const launcherIcon = new LabIcon({ name: 'ui-components:launcher', svgstr: launcherSvgstr });\nexport const lineFormIcon = new LabIcon({ name: 'ui-components:line-form', svgstr: lineFormSvgstr });\nexport const linkIcon = new LabIcon({ name: 'ui-components:link', svgstr: linkSvgstr });\nexport const listIcon = new LabIcon({ name: 'ui-components:list', svgstr: listSvgstr });\nexport const lockIcon = new LabIcon({ name: 'ui-components:lock', svgstr: lockSvgstr });\nexport const markdownIcon = new LabIcon({ name: 'ui-components:markdown', svgstr: markdownSvgstr });\nexport const mermaidIcon = new LabIcon({ name: 'ui-components:mermaid', svgstr: mermaidSvgstr });\nexport const moveDownIcon = new LabIcon({ name: 'ui-components:move-down', svgstr: moveDownSvgstr });\nexport const moveUpIcon = new LabIcon({ name: 'ui-components:move-up', svgstr: moveUpSvgstr });\nexport const newFolderIcon = new LabIcon({ name: 'ui-components:new-folder', svgstr: newFolderSvgstr });\nexport const notTrustedIcon = new LabIcon({ name: 'ui-components:not-trusted', svgstr: notTrustedSvgstr });\nexport const notebookIcon = new LabIcon({ name: 'ui-components:notebook', svgstr: notebookSvgstr });\nexport const numberingIcon = new LabIcon({ name: 'ui-components:numbering', svgstr: numberingSvgstr });\nexport const offlineBoltIcon = new LabIcon({ name: 'ui-components:offline-bolt', svgstr: offlineBoltSvgstr });\nexport const openKernelSourceIcon = new LabIcon({ name: 'ui-components:open-kernel-source', svgstr: openKernelSourceSvgstr });\nexport const paletteIcon = new LabIcon({ name: 'ui-components:palette', svgstr: paletteSvgstr });\nexport const pasteIcon = new LabIcon({ name: 'ui-components:paste', svgstr: pasteSvgstr });\nexport const pauseIcon = new LabIcon({ name: 'ui-components:pause', svgstr: pauseSvgstr });\nexport const pdfIcon = new LabIcon({ name: 'ui-components:pdf', svgstr: pdfSvgstr });\nexport const pythonIcon = new LabIcon({ name: 'ui-components:python', svgstr: pythonSvgstr });\nexport const rKernelIcon = new LabIcon({ name: 'ui-components:r-kernel', svgstr: rKernelSvgstr });\nexport const reactIcon = new LabIcon({ name: 'ui-components:react', svgstr: reactSvgstr });\nexport const redoIcon = new LabIcon({ name: 'ui-components:redo', svgstr: redoSvgstr });\nexport const refreshIcon = new LabIcon({ name: 'ui-components:refresh', svgstr: refreshSvgstr });\nexport const regexIcon = new LabIcon({ name: 'ui-components:regex', svgstr: regexSvgstr });\nexport const runIcon = new LabIcon({ name: 'ui-components:run', svgstr: runSvgstr });\nexport const runningIcon = new LabIcon({ name: 'ui-components:running', svgstr: runningSvgstr });\nexport const saveIcon = new LabIcon({ name: 'ui-components:save', svgstr: saveSvgstr });\nexport const searchIcon = new LabIcon({ name: 'ui-components:search', svgstr: searchSvgstr });\nexport const settingsIcon = new LabIcon({ name: 'ui-components:settings', svgstr: settingsSvgstr });\nexport const shareIcon = new LabIcon({ name: 'ui-components:share', svgstr: shareSvgstr });\nexport const spreadsheetIcon = new LabIcon({ name: 'ui-components:spreadsheet', svgstr: spreadsheetSvgstr });\nexport const stepIntoIcon = new LabIcon({ name: 'ui-components:step-into', svgstr: stepIntoSvgstr });\nexport const stepOutIcon = new LabIcon({ name: 'ui-components:step-out', svgstr: stepOutSvgstr });\nexport const stepOverIcon = new LabIcon({ name: 'ui-components:step-over', svgstr: stepOverSvgstr });\nexport const stopIcon = new LabIcon({ name: 'ui-components:stop', svgstr: stopSvgstr });\nexport const tabIcon = new LabIcon({ name: 'ui-components:tab', svgstr: tabSvgstr });\nexport const tableRowsIcon = new LabIcon({ name: 'ui-components:table-rows', svgstr: tableRowsSvgstr });\nexport const tagIcon = new LabIcon({ name: 'ui-components:tag', svgstr: tagSvgstr });\nexport const terminalIcon = new LabIcon({ name: 'ui-components:terminal', svgstr: terminalSvgstr });\nexport const textEditorIcon = new LabIcon({ name: 'ui-components:text-editor', svgstr: textEditorSvgstr });\nexport const tocIcon = new LabIcon({ name: 'ui-components:toc', svgstr: tocSvgstr });\nexport const treeViewIcon = new LabIcon({ name: 'ui-components:tree-view', svgstr: treeViewSvgstr });\nexport const trustedIcon = new LabIcon({ name: 'ui-components:trusted', svgstr: trustedSvgstr });\nexport const undoIcon = new LabIcon({ name: 'ui-components:undo', svgstr: undoSvgstr });\nexport const userIcon = new LabIcon({ name: 'ui-components:user', svgstr: userSvgstr });\nexport const usersIcon = new LabIcon({ name: 'ui-components:users', svgstr: usersSvgstr });\nexport const variableIcon = new LabIcon({ name: 'ui-components:variable', svgstr: variableSvgstr });\nexport const vegaIcon = new LabIcon({ name: 'ui-components:vega', svgstr: vegaSvgstr });\nexport const viewBreakpointIcon = new LabIcon({ name: 'ui-components:view-breakpoint', svgstr: viewBreakpointSvgstr });\nexport const wordIcon = new LabIcon({ name: 'ui-components:word', svgstr: wordSvgstr });\nexport const yamlIcon = new LabIcon({ name: 'ui-components:yaml', svgstr: yamlSvgstr });\n//# sourceMappingURL=iconimports.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\nimport { Panel, PanelLayout, Widget } from '@lumino/widgets';\nimport { caretDownIcon } from '../icon';\nconst COLLAPSE_CLASS = 'jp-Collapse';\nconst CONTENTS_CLASS = 'jp-Collapse-contents';\nconst HEADER_CLASS = 'jp-Collapse-header';\nconst HEADER_COLLAPSED_CLASS = 'jp-Collapse-header-collapsed';\nconst ICON_CLASS = 'jp-Collapser-icon';\nconst TITLE_CLASS = 'jp-Collapser-title';\n/**\n * A panel that supports a collapsible header made from the widget's title.\n * Clicking on the title expands or contracts the widget.\n */\nexport class Collapser extends Widget {\n    constructor(options) {\n        super(options);\n        this._collapseChanged = new Signal(this);\n        const { widget, collapsed = true } = options;\n        this.addClass(COLLAPSE_CLASS);\n        this._header = new Widget();\n        this._header.addClass(HEADER_CLASS);\n        if (collapsed) {\n            this._header.addClass(HEADER_COLLAPSED_CLASS);\n        }\n        this._header.node.appendChild(caretDownIcon.element({\n            className: ICON_CLASS\n        }));\n        const titleSpan = document.createElement('span');\n        titleSpan.classList.add(TITLE_CLASS);\n        titleSpan.textContent = widget.title.label;\n        this._header.node.appendChild(titleSpan);\n        this._content = new Panel();\n        this._content.addClass(CONTENTS_CLASS);\n        const layout = new PanelLayout();\n        this.layout = layout;\n        layout.addWidget(this._header);\n        layout.addWidget(this._content);\n        this.widget = widget;\n        this.collapsed = collapsed;\n    }\n    /**\n     * The widget inside the collapse panel.\n     */\n    get widget() {\n        return this._widget;\n    }\n    set widget(widget) {\n        const oldWidget = this._widget;\n        if (oldWidget) {\n            oldWidget.title.changed.disconnect(this._onTitleChanged, this);\n            oldWidget.parent = null;\n        }\n        this._widget = widget;\n        widget.title.changed.connect(this._onTitleChanged, this);\n        this._onTitleChanged(widget.title);\n        this._content.addWidget(widget);\n    }\n    /**\n     * The collapsed state of the panel.\n     */\n    get collapsed() {\n        return this._collapsed;\n    }\n    set collapsed(value) {\n        if (value === this._collapsed) {\n            return;\n        }\n        if (value) {\n            this._collapse();\n        }\n        else {\n            this._uncollapse();\n        }\n    }\n    /**\n     * A signal for when the widget collapse state changes.\n     */\n    get collapseChanged() {\n        return this._collapseChanged;\n    }\n    /**\n     * Toggle the collapse state of the panel.\n     */\n    toggle() {\n        this.collapsed = !this.collapsed;\n    }\n    /**\n     * Dispose the widget.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        // Delete references we explicitly hold to other widgets.\n        this._header = null;\n        this._widget = null;\n        this._content = null;\n        super.dispose();\n    }\n    /**\n     * Handle the DOM events for the Collapser widget.\n     *\n     * @param event - The DOM event sent to the panel.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the panel's DOM node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'click':\n                this._evtClick(event);\n                break;\n            default:\n                break;\n        }\n    }\n    onAfterAttach(msg) {\n        this._header.node.addEventListener('click', this);\n    }\n    onBeforeDetach(msg) {\n        this._header.node.removeEventListener('click', this);\n    }\n    _collapse() {\n        this._collapsed = true;\n        if (this._content) {\n            this._content.hide();\n        }\n        this._setHeader();\n        this._collapseChanged.emit(void 0);\n    }\n    _uncollapse() {\n        this._collapsed = false;\n        if (this._content) {\n            this._content.show();\n        }\n        this._setHeader();\n        this._collapseChanged.emit(void 0);\n    }\n    _evtClick(event) {\n        this.toggle();\n    }\n    /**\n     * Handle the `changed` signal of a title object.\n     */\n    _onTitleChanged(sender) {\n        this._setHeader();\n    }\n    _setHeader() {\n        if (this._collapsed) {\n            this._header.addClass(HEADER_COLLAPSED_CLASS);\n        }\n        else {\n            this._header.removeClass(HEADER_COLLAPSED_CLASS);\n        }\n    }\n}\n//# sourceMappingURL=collapser.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { JSONExt } from '@lumino/coreutils';\nimport Form from '@rjsf/core';\nimport { ADDITIONAL_PROPERTY_FLAG, canExpand, getTemplate } from '@rjsf/utils';\nimport React from 'react';\nimport { addIcon, caretDownIcon, caretUpIcon, closeIcon } from '../icon';\n/**\n * Default `ui:options` for the UiSchema.\n */\nexport const DEFAULT_UI_OPTIONS = {\n    /**\n     * This prevents the submit button from being rendered, by default, as it is\n     * almost never what is wanted.\n     *\n     * Provide any `uiSchema#/ui:options/submitButtonOptions` to override this.\n     */\n    submitButtonOptions: {\n        norender: true\n    }\n};\n/**\n * Button to move an item.\n *\n * @returns - the button as a react element.\n */\nexport const MoveButton = (props) => {\n    var _a;\n    const trans = ((_a = props.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n    let buttonContent;\n    /**\n     * Whether the button is disabled or not.\n     */\n    const disabled = () => {\n        if (props.direction === 'up') {\n            return !props.item.hasMoveUp;\n        }\n        else {\n            return !props.item.hasMoveDown;\n        }\n    };\n    if (props.buttonStyle === 'icons') {\n        const iconProps = {\n            tag: 'span',\n            elementSize: 'xlarge',\n            elementPosition: 'center'\n        };\n        buttonContent =\n            props.direction === 'up' ? (React.createElement(caretUpIcon.react, { ...iconProps })) : (React.createElement(caretDownIcon.react, { ...iconProps }));\n    }\n    else {\n        buttonContent =\n            props.direction === 'up' ? trans.__('Move up') : trans.__('Move down');\n    }\n    const moveTo = props.direction === 'up' ? props.item.index - 1 : props.item.index + 1;\n    return (React.createElement(\"button\", { className: \"jp-mod-styled jp-mod-reject jp-ArrayOperationsButton\", onClick: props.item.onReorderClick(props.item.index, moveTo), disabled: disabled() }, buttonContent));\n};\n/**\n * Button to drop an item.\n *\n * @returns - the button as a react element.\n */\nexport const DropButton = (props) => {\n    var _a;\n    const trans = ((_a = props.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n    let buttonContent;\n    if (props.buttonStyle === 'icons') {\n        buttonContent = (React.createElement(closeIcon.react, { tag: \"span\", elementSize: \"xlarge\", elementPosition: \"center\" }));\n    }\n    else {\n        buttonContent = trans.__('Remove');\n    }\n    return (React.createElement(\"button\", { className: \"jp-mod-styled jp-mod-warn jp-ArrayOperationsButton\", onClick: props.item.onDropIndexClick(props.item.index) }, buttonContent));\n};\n/**\n * Button to add an item.\n *\n * @returns - the button as a react element.\n */\nexport const AddButton = (props) => {\n    var _a;\n    const trans = ((_a = props.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n    let buttonContent;\n    if (props.buttonStyle === 'icons') {\n        buttonContent = (React.createElement(addIcon.react, { tag: \"span\", elementSize: \"xlarge\", elementPosition: \"center\" }));\n    }\n    else {\n        buttonContent = trans.__('Add');\n    }\n    return (React.createElement(\"button\", { className: \"jp-mod-styled jp-mod-reject jp-ArrayOperationsButton\", onClick: props.onAddClick }, buttonContent));\n};\nfunction customizeForLab(options) {\n    const { component, name, buttonStyle, compact, showModifiedFromDefault, translator } = options;\n    const isCompact = compact !== null && compact !== void 0 ? compact : false;\n    const button = buttonStyle !== null && buttonStyle !== void 0 ? buttonStyle : (isCompact ? 'icons' : 'text');\n    const factory = (props) => component({\n        ...props,\n        buttonStyle: button,\n        compact: isCompact,\n        showModifiedFromDefault: showModifiedFromDefault !== null && showModifiedFromDefault !== void 0 ? showModifiedFromDefault : true,\n        translator: translator !== null && translator !== void 0 ? translator : nullTranslator\n    });\n    if (name) {\n        factory.displayName = name;\n    }\n    return factory;\n}\n/**\n * Fetch field templates from RJSF.\n */\nfunction getTemplates(registry, uiSchema) {\n    const TitleField = getTemplate('TitleFieldTemplate', registry, uiSchema);\n    const DescriptionField = getTemplate('DescriptionFieldTemplate', registry, uiSchema);\n    return { TitleField, DescriptionField };\n}\n/**\n * Template to allow for custom buttons to re-order/remove entries in an array.\n * Necessary to create accessible buttons.\n */\nconst CustomArrayTemplateFactory = (options) => customizeForLab({\n    ...options,\n    name: 'JupyterLabArrayTemplate',\n    component: props => {\n        var _a;\n        const { schema, registry, uiSchema, required } = props;\n        const commonProps = { schema, registry, uiSchema, required };\n        const { TitleField, DescriptionField } = getTemplates(registry, uiSchema);\n        return (React.createElement(\"div\", { className: props.className },\n            props.compact ? (React.createElement(\"div\", { className: \"jp-FormGroup-compactTitle\" },\n                React.createElement(\"div\", { className: \"jp-FormGroup-fieldLabel jp-FormGroup-contentItem\", id: `${props.idSchema.$id}__title` }, props.title || ''),\n                React.createElement(\"div\", { className: \"jp-FormGroup-description\", id: `${props.idSchema.$id}-description` }, props.schema.description || ''))) : (React.createElement(React.Fragment, null,\n                props.title && (React.createElement(TitleField, { ...commonProps, title: props.title, id: `${props.idSchema.$id}-title` })),\n                React.createElement(DescriptionField, { ...commonProps, id: `${props.idSchema.$id}-description`, description: (_a = props.schema.description) !== null && _a !== void 0 ? _a : '' }))),\n            props.items.map(item => {\n                return (React.createElement(\"div\", { key: item.key, className: item.className },\n                    item.children,\n                    React.createElement(\"div\", { className: \"jp-ArrayOperations\" },\n                        React.createElement(MoveButton, { buttonStyle: props.buttonStyle, translator: props.translator, item: item, direction: \"up\" }),\n                        React.createElement(MoveButton, { buttonStyle: props.buttonStyle, translator: props.translator, item: item, direction: \"down\" }),\n                        React.createElement(DropButton, { buttonStyle: props.buttonStyle, translator: props.translator, item: item }))));\n            }),\n            props.canAdd && (React.createElement(AddButton, { onAddClick: props.onAddClick, buttonStyle: props.buttonStyle, translator: props.translator }))));\n    }\n});\n/**\n * Template with custom add button, necessary for accessibility and internationalization.\n */\nconst CustomObjectTemplateFactory = (options) => customizeForLab({\n    ...options,\n    name: 'JupyterLabObjectTemplate',\n    component: props => {\n        var _a;\n        const { schema, registry, uiSchema, required } = props;\n        const commonProps = { schema, registry, uiSchema, required };\n        const { TitleField, DescriptionField } = getTemplates(registry, uiSchema);\n        return (React.createElement(\"fieldset\", { id: props.idSchema.$id },\n            props.compact ? (React.createElement(\"div\", { className: \"jp-FormGroup-compactTitle\" },\n                React.createElement(\"div\", { className: \"jp-FormGroup-fieldLabel jp-FormGroup-contentItem\", id: `${props.idSchema.$id}__title` }, props.title || ''),\n                React.createElement(\"div\", { className: \"jp-FormGroup-description\", id: `${props.idSchema.$id}__description` }, props.schema.description || ''))) : (React.createElement(React.Fragment, null,\n                (props.title ||\n                    (props.uiSchema || JSONExt.emptyObject)['ui:title']) && (React.createElement(TitleField, { ...commonProps, id: `${props.idSchema.$id}__title`, title: props.title ||\n                        `${(props.uiSchema || JSONExt.emptyObject)['ui:title']}` ||\n                        '' })),\n                React.createElement(DescriptionField, { ...commonProps, id: `${props.idSchema.$id}__description`, description: (_a = props.schema.description) !== null && _a !== void 0 ? _a : '' }))),\n            props.properties.map(property => property.content),\n            canExpand(props.schema, props.uiSchema, props.formData) && (React.createElement(AddButton, { onAddClick: props.onAddClick(props.schema), buttonStyle: props.buttonStyle, translator: props.translator }))));\n    }\n});\n/**\n * Renders the modified indicator and errors\n */\nconst CustomTemplateFactory = (options) => customizeForLab({\n    ...options,\n    name: 'JupyterLabFieldTemplate',\n    component: props => {\n        var _a;\n        const trans = ((_a = props.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n        let isModified = false;\n        let defaultValue;\n        const { formData, schema, label, displayLabel, id, formContext, errors, rawErrors, children, onKeyChange, onDropPropertyClick } = props;\n        const { defaultFormData } = formContext;\n        const schemaIds = id.split('_');\n        schemaIds.shift();\n        const schemaId = schemaIds.join('.');\n        const isRoot = schemaId === '';\n        const hasCustomField = schemaId === (props.uiSchema || JSONExt.emptyObject)['ui:field'];\n        if (props.showModifiedFromDefault) {\n            /**\n             * Determine if the field has been modified.\n             * Schema Id is formatted as 'root_<field name>.<nested field name>'\n             * This logic parses out the field name to find the default value\n             * before determining if the field has been modified.\n             */\n            defaultValue = schemaIds.reduce((acc, key) => acc === null || acc === void 0 ? void 0 : acc[key], defaultFormData);\n            isModified =\n                !isRoot &&\n                    formData !== undefined &&\n                    defaultValue !== undefined &&\n                    !schema.properties &&\n                    schema.type !== 'array' &&\n                    !JSONExt.deepEqual(formData, defaultValue);\n        }\n        const needsDescription = !isRoot &&\n            schema.type != 'object' &&\n            id !=\n                'jp-SettingsEditor-@jupyterlab/shortcuts-extension:shortcuts_shortcuts';\n        // While we can implement \"remove\" button for array items in array template,\n        // object templates do not provide a way to do this instead we need to add\n        // buttons here (and first check if the field can be removed = is additional).\n        const isAdditional = schema.hasOwnProperty(ADDITIONAL_PROPERTY_FLAG);\n        const isItem = !(schema.type === 'object' || schema.type === 'array');\n        return (React.createElement(\"div\", { className: `form-group ${displayLabel || schema.type === 'boolean' ? 'small-field' : ''}` },\n            !hasCustomField &&\n                ((rawErrors === null || rawErrors === void 0 ? void 0 : rawErrors.length) ? (\n                // Shows a red indicator for fields that have validation errors\n                React.createElement(\"div\", { className: \"jp-modifiedIndicator jp-errorIndicator\" })) : (\n                // Only show the modified indicator if there are no errors\n                isModified && React.createElement(\"div\", { className: \"jp-modifiedIndicator\" }))),\n            React.createElement(\"div\", { className: `jp-FormGroup-content ${props.compact\n                    ? 'jp-FormGroup-contentCompact'\n                    : 'jp-FormGroup-contentNormal'}` },\n                isItem && displayLabel && !isRoot && label && !isAdditional ? (props.compact ? (React.createElement(\"div\", { className: \"jp-FormGroup-compactTitle\" },\n                    React.createElement(\"div\", { className: \"jp-FormGroup-fieldLabel jp-FormGroup-contentItem\" }, label),\n                    isItem && schema.description && needsDescription && (React.createElement(\"div\", { className: \"jp-FormGroup-description\" }, schema.description)))) : (React.createElement(\"h3\", { className: \"jp-FormGroup-fieldLabel jp-FormGroup-contentItem\" }, label))) : (React.createElement(React.Fragment, null)),\n                isAdditional && (React.createElement(\"input\", { className: \"jp-FormGroup-contentItem jp-mod-styled\", type: \"text\", onBlur: event => onKeyChange(event.target.value), defaultValue: label })),\n                React.createElement(\"div\", { className: `${isRoot\n                        ? 'jp-root'\n                        : schema.type === 'object'\n                            ? 'jp-objectFieldWrapper'\n                            : schema.type === 'array'\n                                ? 'jp-arrayFieldWrapper'\n                                : 'jp-inputFieldWrapper jp-FormGroup-contentItem'}` }, children),\n                isAdditional && (React.createElement(\"button\", { className: \"jp-FormGroup-contentItem jp-mod-styled jp-mod-warn jp-FormGroup-removeButton\", onClick: onDropPropertyClick(label) }, trans.__('Remove'))),\n                !props.compact && schema.description && needsDescription && (React.createElement(\"div\", { className: \"jp-FormGroup-description\" }, schema.description)),\n                isModified &&\n                    defaultValue !== undefined &&\n                    schema.type !== 'object' && (React.createElement(\"div\", { className: \"jp-FormGroup-default\" }, trans.__('Default: %1', defaultValue !== null\n                    ? defaultValue.toLocaleString()\n                    : 'null'))),\n                React.createElement(\"div\", { className: \"validationErrors\" }, errors))));\n    }\n});\n/**\n * Generic rjsf form component for JupyterLab UI.\n */\nexport function FormComponent(props) {\n    const { buttonStyle, compact, showModifiedFromDefault, translator, formContext, ...others } = props;\n    const uiSchema = { ...(others.uiSchema || JSONExt.emptyObject) };\n    uiSchema['ui:options'] = { ...DEFAULT_UI_OPTIONS, ...uiSchema['ui:options'] };\n    others.uiSchema = uiSchema;\n    const { FieldTemplate, ArrayFieldTemplate, ObjectFieldTemplate } = props.templates || JSONExt.emptyObject;\n    const customization = {\n        buttonStyle,\n        compact,\n        showModifiedFromDefault,\n        translator\n    };\n    const fieldTemplate = React.useMemo(() => FieldTemplate !== null && FieldTemplate !== void 0 ? FieldTemplate : CustomTemplateFactory(customization), [FieldTemplate, buttonStyle, compact, showModifiedFromDefault, translator]);\n    const arrayTemplate = React.useMemo(() => ArrayFieldTemplate !== null && ArrayFieldTemplate !== void 0 ? ArrayFieldTemplate : CustomArrayTemplateFactory(customization), [\n        ArrayFieldTemplate,\n        buttonStyle,\n        compact,\n        showModifiedFromDefault,\n        translator\n    ]);\n    const objectTemplate = React.useMemo(() => ObjectFieldTemplate !== null && ObjectFieldTemplate !== void 0 ? ObjectFieldTemplate : CustomObjectTemplateFactory(customization), [\n        ObjectFieldTemplate,\n        buttonStyle,\n        compact,\n        showModifiedFromDefault,\n        translator\n    ]);\n    const templates = {\n        FieldTemplate: fieldTemplate,\n        ArrayFieldTemplate: arrayTemplate,\n        ObjectFieldTemplate: objectTemplate\n    };\n    return (React.createElement(Form, { templates: templates, formContext: formContext, ...others }));\n}\n//# sourceMappingURL=form.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nexport const DEFAULT_STYLE_CLASS = 'jp-DefaultStyle';\n//# sourceMappingURL=interface.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport * as React from 'react';\nimport { caretDownEmptyIcon } from '../icon';\nimport { classes } from '../utils';\nimport { DEFAULT_STYLE_CLASS } from './interface';\nexport const HTML_SELECT_CLASS = 'jp-HTMLSelect';\nexport class HTMLSelect extends React.Component {\n    render() {\n        const { className, defaultStyle = true, disabled, elementRef, iconProps, icon = caretDownEmptyIcon, options = [], ...htmlProps } = this.props;\n        const cls = classes(HTML_SELECT_CLASS, {\n            [DEFAULT_STYLE_CLASS]: defaultStyle\n        }, className);\n        // If the HTMLSelect is integrated to a toolbar, we avoid propagating the focus\n        // to the element with tabindex=0.\n        const handleFocus = (event) => {\n            event.stopPropagation();\n        };\n        const optionChildren = options.map(option => {\n            const props = typeof option === 'object' ? option : { value: option };\n            return (React.createElement(\"option\", { ...props, key: props.value }, props.label || props.value));\n        });\n        return (React.createElement(\"div\", { className: cls },\n            React.createElement(\"select\", { onFocus: handleFocus, disabled: disabled, ref: elementRef, ...htmlProps, multiple: false },\n                optionChildren,\n                htmlProps.children),\n            React.createElement(icon.react, { tag: 'span',\n                stylesheet: 'select',\n                right: '4px',\n                top: '8px',\n                ...iconProps })));\n    }\n}\n//# sourceMappingURL=htmlselect.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Widget } from '@lumino/widgets';\n/**\n * A Lumino widget which wraps an IFrame.\n */\nexport class IFrame extends Widget {\n    /**\n     * Create a new IFrame widget.\n     */\n    constructor(options = {}) {\n        super({ node: Private.createNode() });\n        this._sandbox = [];\n        this.addClass('jp-IFrame');\n        this.sandbox = options.sandbox || [];\n        this.referrerPolicy = options.referrerPolicy || 'no-referrer';\n        this.loading = options.loading || 'eager';\n    }\n    /**\n     * Referrer policy for the iframe.\n     *\n     * #### Notes\n     * By default, `no-referrer` is chosen.\n     *\n     * For more information, see\n     * https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy\n     */\n    get referrerPolicy() {\n        return this._referrerPolicy;\n    }\n    set referrerPolicy(value) {\n        if (this._referrerPolicy === value) {\n            return;\n        }\n        this._referrerPolicy = value;\n        const iframe = this.node.querySelector('iframe');\n        iframe.setAttribute('referrerpolicy', value);\n    }\n    /**\n     * Loading for the iFrame\n     *\n     * ### Notes\n     * By default, 'eager' loading is chosen\n     *\n     * For more information, see\n     * https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/loading\n     */\n    get loading() {\n        return this._loading;\n    }\n    set loading(value) {\n        if (this._loading === value) {\n            return;\n        }\n        this._loading = value;\n        const iframe = this.node.querySelector('iframe');\n        iframe.setAttribute('loading', value);\n    }\n    /**\n     * Exceptions to the sandboxing.\n     *\n     * #### Notes\n     * By default, all sandboxing security policies are enabled.\n     * This setting allows the user to selectively disable these\n     * policies. This should be done with care, as it can\n     * introduce security risks, and possibly allow malicious\n     * sites to execute code in a JupyterLab session.\n     *\n     * For more information, see\n     * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe\n     */\n    get sandbox() {\n        return this._sandbox.slice();\n    }\n    set sandbox(values) {\n        this._sandbox = values.slice();\n        const iframe = this.node.querySelector('iframe');\n        const exceptions = values.length ? values.join(' ') : '';\n        iframe.setAttribute('sandbox', exceptions);\n    }\n    /**\n     * The url of the IFrame.\n     */\n    get url() {\n        return this.node.querySelector('iframe').getAttribute('src') || '';\n    }\n    set url(url) {\n        this.node.querySelector('iframe').setAttribute('src', url);\n    }\n}\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Create the main content node of an iframe widget.\n     */\n    function createNode() {\n        const node = document.createElement('div');\n        const iframe = document.createElement('iframe');\n        iframe.setAttribute('sandbox', '');\n        iframe.style.height = '100%';\n        iframe.style.width = '100%';\n        node.appendChild(iframe);\n        return node;\n    }\n    Private.createNode = createNode;\n})(Private || (Private = {}));\n//# sourceMappingURL=iframe.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport React from 'react';\nimport { LabIcon } from '../icon';\nimport { classes } from '../utils';\n/**\n * InputGroup component\n *\n * @param props Component properties\n * @returns Component\n */\nexport function InputGroup(props) {\n    const { className, inputRef, rightIcon, ...others } = props;\n    return (React.createElement(\"div\", { className: classes('jp-InputGroup', className) },\n        React.createElement(\"input\", { ref: inputRef, ...others }),\n        rightIcon && (React.createElement(\"span\", { className: \"jp-InputGroupAction\" }, typeof rightIcon === 'string' ? (React.createElement(LabIcon.resolveReact, { icon: rightIcon, elementPosition: \"center\", tag: \"span\" })) : (React.createElement(rightIcon.react, { elementPosition: \"center\", tag: \"span\" }))))));\n}\n//# sourceMappingURL=inputgroup.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/* global WeakRef */\nimport { ArrayExt } from '@lumino/algorithm';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Signal } from '@lumino/signaling';\nimport { Menu } from '@lumino/widgets';\n/**\n * Namespace for JupyterLabMenu interfaces\n */\nexport var IRankedMenu;\n(function (IRankedMenu) {\n    /**\n     * Default menu item rank\n     */\n    IRankedMenu.DEFAULT_RANK = 100;\n})(IRankedMenu || (IRankedMenu = {}));\n/**\n * An extensible menu for JupyterLab application menus.\n */\nexport class RankedMenu extends Menu {\n    /**\n     * Construct a new menu.\n     *\n     * @param options - Options for the lumino menu.\n     */\n    constructor(options) {\n        var _a;\n        super(options);\n        this._ranks = [];\n        this.addClass('jp-ThemedContainer');\n        this._rank = options.rank;\n        this._includeSeparators = (_a = options.includeSeparators) !== null && _a !== void 0 ? _a : true;\n    }\n    /**\n     * Menu rank.\n     */\n    get rank() {\n        return this._rank;\n    }\n    /**\n     * Add a group of menu items specific to a particular\n     * plugin.\n     *\n     * The rank can be set for all items in the group using the\n     * function argument or per item.\n     *\n     * @param items - the list of menu items to add.\n     * @param rank - the default rank in the menu in which to insert the group.\n     * @returns Disposable of the group\n     */\n    addGroup(items, rank) {\n        if (items.length === 0) {\n            return new DisposableDelegate(() => void 0);\n        }\n        const defaultRank = rank !== null && rank !== void 0 ? rank : IRankedMenu.DEFAULT_RANK;\n        const sortedItems = items\n            .map(item => {\n            var _a;\n            return { ...item, rank: (_a = item.rank) !== null && _a !== void 0 ? _a : defaultRank };\n        })\n            .sort((a, b) => a.rank - b.rank);\n        // Insert the plugin group into the menu.\n        let insertIndex = this._ranks.findIndex(rank => sortedItems[0].rank < rank);\n        if (insertIndex < 0) {\n            insertIndex = this._ranks.length; // Insert at the end of the menu\n        }\n        // Keep an array of the menu items that have been created.\n        const added = [];\n        // Insert a separator before the group.\n        // Lumino takes care of superfluous leading,\n        // trailing, and duplicate separators.\n        if (this._includeSeparators) {\n            added.push(this.insertItem(insertIndex++, { type: 'separator', rank: defaultRank }));\n        }\n        // Insert the group.\n        added.push(...sortedItems.map(item => {\n            return this.insertItem(insertIndex++, item);\n        }));\n        // Insert a separator after the group.\n        if (this._includeSeparators) {\n            added.push(this.insertItem(insertIndex++, { type: 'separator', rank: defaultRank }));\n        }\n        return new DisposableDelegate(() => {\n            added.forEach(i => i.dispose());\n        });\n    }\n    /**\n     * Add a menu item to the end of the menu.\n     *\n     * @param options - The options for creating the menu item.\n     *\n     * @returns The menu item added to the menu.\n     */\n    addItem(options) {\n        let insertIndex = -1;\n        if (options.rank) {\n            insertIndex = this._ranks.findIndex(rank => options.rank < rank);\n        }\n        if (insertIndex < 0) {\n            insertIndex = this._ranks.length; // Insert at the end of the menu\n        }\n        return this.insertItem(insertIndex, options);\n    }\n    /**\n     * Remove all menu items from the menu.\n     */\n    clearItems() {\n        this._ranks.length = 0;\n        super.clearItems();\n    }\n    /**\n     * Dispose of the resources held by the menu.\n     */\n    dispose() {\n        this._ranks.length = 0;\n        super.dispose();\n    }\n    /**\n     * Get the rank of the item at index.\n     *\n     * @param index Item index.\n     * @returns Rank of the item.\n     */\n    getRankAt(index) {\n        return this._ranks[index];\n    }\n    /**\n     * Insert a menu item into the menu at the specified index.\n     *\n     * @param index - The index at which to insert the item.\n     *\n     * @param options - The options for creating the menu item.\n     *\n     * @returns The menu item added to the menu.\n     *\n     * #### Notes\n     * The index will be clamped to the bounds of the items.\n     */\n    insertItem(index, options) {\n        var _a, _b;\n        const clampedIndex = Math.max(0, Math.min(index, this._ranks.length));\n        ArrayExt.insert(this._ranks, clampedIndex, (_a = options.rank) !== null && _a !== void 0 ? _a : Math.max(IRankedMenu.DEFAULT_RANK, (_b = this._ranks[this._ranks.length - 1]) !== null && _b !== void 0 ? _b : IRankedMenu.DEFAULT_RANK));\n        const item = super.insertItem(clampedIndex, options);\n        return new DisposableMenuItem(item, this);\n    }\n    /**\n     * Remove the item at a given index from the menu.\n     *\n     * @param index - The index of the item to remove.\n     *\n     * #### Notes\n     * This is a no-op if the index is out of range.\n     */\n    removeItemAt(index) {\n        ArrayExt.removeAt(this._ranks, index);\n        super.removeItemAt(index);\n    }\n}\n/**\n * Disposable Menu Item\n */\nclass DisposableMenuItem {\n    /**\n     * Create a disposable menu item from an item and the menu it belongs to\n     *\n     * @param item Menu item\n     * @param menu Menu\n     */\n    constructor(item, menu) {\n        this._item = new WeakRef(item);\n        this._menu = menu;\n        // dispose this item if the parent menu is disposed\n        const dispose = (menu) => {\n            menu.disposed.disconnect(dispose, this);\n            this.dispose();\n        };\n        this._menu.disposed.connect(dispose, this);\n    }\n    /**\n     * Whether the menu item is disposed or not.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * The type of the menu item.\n     */\n    get type() {\n        return this._item.deref().type;\n    }\n    /**\n     * The command to execute when the item is triggered.\n     */\n    get command() {\n        return this._item.deref().command;\n    }\n    /**\n     * The arguments for the command.\n     */\n    get args() {\n        return this._item.deref().args;\n    }\n    /**\n     * The submenu for a `'submenu'` type item.\n     */\n    get submenu() {\n        return this._item.deref().submenu;\n    }\n    /**\n     * The display label for the menu item.\n     */\n    get label() {\n        return this._item.deref().label;\n    }\n    /**\n     * The mnemonic index for the menu item.\n     */\n    get mnemonic() {\n        return this._item.deref().mnemonic;\n    }\n    /**\n     * The icon renderer for the menu item.\n     */\n    get icon() {\n        return this._item.deref().icon;\n    }\n    /**\n     * The icon class for the menu item.\n     */\n    get iconClass() {\n        return this._item.deref().iconClass;\n    }\n    /**\n     * The icon label for the menu item.\n     */\n    get iconLabel() {\n        return this._item.deref().iconLabel;\n    }\n    /**\n     * The display caption for the menu item.\n     */\n    get caption() {\n        return this._item.deref().caption;\n    }\n    /**\n     * The extra class name for the menu item.\n     */\n    get className() {\n        return this._item.deref().className;\n    }\n    /**\n     * The dataset for the menu item.\n     */\n    get dataset() {\n        return this._item.deref().dataset;\n    }\n    /**\n     * Whether the menu item is enabled.\n     */\n    get isEnabled() {\n        return this._item.deref().isEnabled;\n    }\n    /**\n     * Whether the menu item is toggled.\n     */\n    get isToggled() {\n        return this._item.deref().isToggled;\n    }\n    /**\n     * Whether the menu item is visible.\n     */\n    get isVisible() {\n        return this._item.deref().isVisible;\n    }\n    /**\n     * The key binding for the menu item.\n     */\n    get keyBinding() {\n        return this._item.deref().keyBinding;\n    }\n    /**\n     * Dispose the menu item by removing it from its menu.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        const item = this._item.deref();\n        if (item && !this._menu.isDisposed) {\n            this._menu.removeItem(item);\n        }\n        Signal.clearData(this);\n    }\n}\n//# sourceMappingURL=menu.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { MessageLoop } from '@lumino/messaging';\nimport { Signal } from '@lumino/signaling';\nimport { Widget } from '@lumino/widgets';\nimport * as React from 'react';\nimport { createRoot } from 'react-dom/client';\n/**\n * An abstract class for a Lumino widget which renders a React component.\n */\nexport class ReactWidget extends Widget {\n    constructor() {\n        super();\n        this._rootDOM = null;\n    }\n    /**\n     * Creates a new `ReactWidget` that renders a constant element.\n     * @param element React element to render.\n     */\n    static create(element) {\n        return new (class extends ReactWidget {\n            render() {\n                return element;\n            }\n        })();\n    }\n    /**\n     * Called to update the state of the widget.\n     *\n     * The default implementation of this method triggers\n     * VDOM based rendering by calling the `renderDOM` method.\n     */\n    onUpdateRequest(msg) {\n        this.renderPromise = this.renderDOM();\n    }\n    /**\n     * Called after the widget is attached to the DOM\n     */\n    onAfterAttach(msg) {\n        // Make *sure* the widget is rendered.\n        MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n    }\n    /**\n     * Called before the widget is detached from the DOM.\n     */\n    onBeforeDetach(msg) {\n        // Unmount the component so it can tear down.\n        if (this._rootDOM !== null) {\n            this._rootDOM.unmount();\n            this._rootDOM = null;\n        }\n    }\n    /**\n     * Render the React nodes to the DOM.\n     *\n     * @returns a promise that resolves when the rendering is done.\n     */\n    renderDOM() {\n        return new Promise(resolve => {\n            const vnode = this.render();\n            if (this._rootDOM === null) {\n                this._rootDOM = createRoot(this.node);\n            }\n            // Split up the array/element cases so type inference chooses the right\n            // signature.\n            if (Array.isArray(vnode)) {\n                this._rootDOM.render(vnode);\n                // Resolves after the widget has been rendered.\n                // https://github.com/reactwg/react-18/discussions/5#discussioncomment-798304\n                requestIdleCallback(() => resolve());\n            }\n            else if (vnode) {\n                this._rootDOM.render(vnode);\n                // Resolves after the widget has been rendered.\n                // https://github.com/reactwg/react-18/discussions/5#discussioncomment-798304\n                requestIdleCallback(() => resolve());\n            }\n            else {\n                // If the virtual node is null, unmount the node content\n                this._rootDOM.unmount();\n                this._rootDOM = null;\n                requestIdleCallback(() => resolve());\n            }\n        });\n    }\n}\n/**\n * An abstract ReactWidget with a model.\n */\nexport class VDomRenderer extends ReactWidget {\n    /**\n     * Create a new VDomRenderer\n     */\n    constructor(model) {\n        super();\n        this._modelChanged = new Signal(this);\n        this.model = (model !== null && model !== void 0 ? model : null);\n    }\n    /**\n     * A signal emitted when the model changes.\n     */\n    get modelChanged() {\n        return this._modelChanged;\n    }\n    /**\n     * Set the model and fire changed signals.\n     */\n    set model(newValue) {\n        if (this._model === newValue) {\n            return;\n        }\n        if (this._model) {\n            this._model.stateChanged.disconnect(this.update, this);\n        }\n        this._model = newValue;\n        if (newValue) {\n            newValue.stateChanged.connect(this.update, this);\n        }\n        this.update();\n        this._modelChanged.emit(void 0);\n    }\n    /**\n     * Get the current model.\n     */\n    get model() {\n        return this._model;\n    }\n    /**\n     * Dispose this widget.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._model = null;\n        super.dispose();\n    }\n}\n/**\n * UseSignal provides a way to hook up a Lumino signal to a React element,\n * so that the element is re-rendered every time the signal fires.\n *\n * It is implemented through the \"render props\" technique, using the `children`\n * prop as a function to render, so that it can be used either as a prop or as a child\n * of this element\n * https://reactjs.org/docs/render-props.html\n *\n *\n * Example as child:\n *\n * ```\n * function LiveButton(isActiveSignal: ISignal<any, boolean>) {\n *  return (\n *    <UseSignal signal={isActiveSignal} initialArgs={true}>\n *     {(_, isActive) => <Button isActive={isActive}>}\n *    </UseSignal>\n *  )\n * }\n * ```\n *\n * Example as prop:\n *\n * ```\n * function LiveButton(isActiveSignal: ISignal<any, boolean>) {\n *  return (\n *    <UseSignal\n *      signal={isActiveSignal}\n *      initialArgs={true}\n *      children={(_, isActive) => <Button isActive={isActive}>}\n *    />\n *  )\n * }\n * ```\n */\nexport class UseSignal extends React.Component {\n    constructor(props) {\n        super(props);\n        this.slot = (sender, args) => {\n            // skip setting new state if we have a shouldUpdate function and it returns false\n            if (this.props.shouldUpdate && !this.props.shouldUpdate(sender, args)) {\n                return;\n            }\n            this.setState({ value: [sender, args] });\n        };\n        this.state = { value: [this.props.initialSender, this.props.initialArgs] };\n    }\n    componentDidMount() {\n        this.props.signal.connect(this.slot);\n    }\n    componentWillUnmount() {\n        this.props.signal.disconnect(this.slot);\n    }\n    render() {\n        return this.props.children(...this.state.value);\n    }\n}\n/**\n * Concrete implementation of VDomRenderer model.\n */\nexport class VDomModel {\n    constructor() {\n        /**\n         * A signal emitted when any model state changes.\n         */\n        this.stateChanged = new Signal(this);\n        this._isDisposed = false;\n    }\n    /**\n     * Test whether the model is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose the model.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n    }\n}\n//# sourceMappingURL=vdom.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Button } from '@jupyter/react-components';\nimport { addJupyterLabThemeChangeListener, jpButton, jpToolbar, provideJupyterDesignSystem } from '@jupyter/web-components';\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { find, map, some } from '@lumino/algorithm';\nimport { CommandRegistry } from '@lumino/commands';\nimport { MessageLoop } from '@lumino/messaging';\nimport { AttachedProperty } from '@lumino/properties';\nimport { PanelLayout, Widget } from '@lumino/widgets';\nimport { Throttler } from '@lumino/polling';\nimport * as React from 'react';\nimport { ellipsesIcon, LabIcon } from '../icon';\nimport { classes } from '../utils';\nimport { ReactWidget, UseSignal } from './vdom';\nprovideJupyterDesignSystem().register([jpButton(), jpToolbar()]);\naddJupyterLabThemeChangeListener();\n/**\n * The class name added to toolbars.\n */\nconst TOOLBAR_CLASS = 'jp-Toolbar';\n/**\n * The class name added to toolbar items.\n */\nconst TOOLBAR_ITEM_CLASS = 'jp-Toolbar-item';\n/**\n * Toolbar pop-up opener button name\n */\nconst TOOLBAR_OPENER_NAME = 'toolbar-popup-opener';\n/**\n * The class name added to toolbar spacer.\n */\nconst TOOLBAR_SPACER_CLASS = 'jp-Toolbar-spacer';\n/**\n * A layout for toolbars.\n *\n * #### Notes\n * This layout automatically collapses its height if there are no visible\n * toolbar widgets, and expands to the standard toolbar height if there are\n * visible toolbar widgets.\n */\nclass ToolbarLayout extends PanelLayout {\n    constructor() {\n        super(...arguments);\n        this._dirty = false;\n    }\n    /**\n     * A message handler invoked on a `'fit-request'` message.\n     *\n     * If any child widget is visible, expand the toolbar height to the normal\n     * toolbar height.\n     */\n    onFitRequest(msg) {\n        super.onFitRequest(msg);\n        if (this.parent.isAttached) {\n            // If there are any widgets not explicitly hidden, expand the toolbar to\n            // accommodate them.\n            if (some(this.widgets, w => !w.isHidden)) {\n                this.parent.node.style.minHeight = 'var(--jp-private-toolbar-height)';\n                this.parent.removeClass('jp-Toolbar-micro');\n            }\n            else {\n                this.parent.node.style.minHeight = '';\n                this.parent.addClass('jp-Toolbar-micro');\n            }\n        }\n        // Set the dirty flag to ensure only a single update occurs.\n        this._dirty = true;\n        // Notify the ancestor that it should fit immediately. This may\n        // cause a resize of the parent, fulfilling the required update.\n        if (this.parent.parent) {\n            MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n        }\n        // If the dirty flag is still set, the parent was not resized.\n        // Trigger the required update on the parent widget immediately.\n        if (this._dirty) {\n            MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n        }\n    }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     */\n    onUpdateRequest(msg) {\n        super.onUpdateRequest(msg);\n        if (this.parent.isVisible) {\n            this._dirty = false;\n        }\n    }\n    /**\n     * A message handler invoked on a `'child-shown'` message.\n     */\n    onChildShown(msg) {\n        super.onChildShown(msg);\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'child-hidden'` message.\n     */\n    onChildHidden(msg) {\n        super.onChildHidden(msg);\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     */\n    onBeforeAttach(msg) {\n        super.onBeforeAttach(msg);\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n    /**\n     * Attach a widget to the parent's DOM node.\n     *\n     * @param index - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to attach to the parent.\n     *\n     * #### Notes\n     * This is a reimplementation of the superclass method.\n     */\n    attachWidget(index, widget) {\n        super.attachWidget(index, widget);\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n    /**\n     * Detach a widget from the parent's DOM node.\n     *\n     * @param index - The previous index of the widget in the layout.\n     *\n     * @param widget - The widget to detach from the parent.\n     *\n     * #### Notes\n     * This is a reimplementation of the superclass method.\n     */\n    detachWidget(index, widget) {\n        super.detachWidget(index, widget);\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n}\n/**\n * A class which provides a toolbar widget.\n */\nexport class Toolbar extends Widget {\n    /**\n     * Construct a new toolbar widget.\n     */\n    constructor(options = {}) {\n        var _a, _b;\n        super({ node: document.createElement('jp-toolbar') });\n        this.addClass(TOOLBAR_CLASS);\n        this.layout = (_a = options.layout) !== null && _a !== void 0 ? _a : new ToolbarLayout();\n        this.noFocusOnClick = (_b = options.noFocusOnClick) !== null && _b !== void 0 ? _b : false;\n    }\n    /**\n     * Get an iterator over the ordered toolbar item names.\n     *\n     * @returns An iterator over the toolbar item names.\n     */\n    names() {\n        const layout = this.layout;\n        return map(layout.widgets, widget => {\n            return Private.nameProperty.get(widget);\n        });\n    }\n    /**\n     * Add an item to the end of the toolbar.\n     *\n     * @param name - The name of the widget to add to the toolbar.\n     *\n     * @param widget - The widget to add to the toolbar.\n     *\n     * @returns Whether the item was added to toolbar. Returns false if\n     *   an item of the same name is already in the toolbar.\n     *\n     * #### Notes\n     * The item can be removed from the toolbar by setting its parent to `null`.\n     */\n    addItem(name, widget) {\n        const layout = this.layout;\n        return this.insertItem(layout.widgets.length, name, widget);\n    }\n    /**\n     * Insert an item into the toolbar at the specified index.\n     *\n     * @param index - The index at which to insert the item.\n     *\n     * @param name - The name of the item.\n     *\n     * @param widget - The widget to add.\n     *\n     * @returns Whether the item was added to the toolbar. Returns false if\n     *   an item of the same name is already in the toolbar.\n     *\n     * #### Notes\n     * The index will be clamped to the bounds of the items.\n     * The item can be removed from the toolbar by setting its parent to `null`.\n     */\n    insertItem(index, name, widget) {\n        const existing = find(this.names(), value => value === name);\n        if (existing) {\n            return false;\n        }\n        widget.addClass(TOOLBAR_ITEM_CLASS);\n        const layout = this.layout;\n        const j = Math.max(0, Math.min(index, layout.widgets.length));\n        layout.insertWidget(j, widget);\n        Private.nameProperty.set(widget, name);\n        widget.node.dataset['jpItemName'] = name;\n        if (this.noFocusOnClick) {\n            widget.node.dataset['noFocusOnClick'] = 'true';\n        }\n        return true;\n    }\n    /**\n     * Insert an item into the toolbar at the after a target item.\n     *\n     * @param at - The target item to insert after.\n     *\n     * @param name - The name of the item.\n     *\n     * @param widget - The widget to add.\n     *\n     * @returns Whether the item was added to the toolbar. Returns false if\n     *   an item of the same name is already in the toolbar.\n     *\n     * #### Notes\n     * The index will be clamped to the bounds of the items.\n     * The item can be removed from the toolbar by setting its parent to `null`.\n     */\n    insertAfter(at, name, widget) {\n        return this.insertRelative(at, 1, name, widget);\n    }\n    /**\n     * Insert an item into the toolbar at the before a target item.\n     *\n     * @param at - The target item to insert before.\n     *\n     * @param name - The name of the item.\n     *\n     * @param widget - The widget to add.\n     *\n     * @returns Whether the item was added to the toolbar. Returns false if\n     *   an item of the same name is already in the toolbar.\n     *\n     * #### Notes\n     * The index will be clamped to the bounds of the items.\n     * The item can be removed from the toolbar by setting its parent to `null`.\n     */\n    insertBefore(at, name, widget) {\n        return this.insertRelative(at, 0, name, widget);\n    }\n    /**\n     * Insert an item relatively to an other item.\n     */\n    insertRelative(at, offset, name, widget) {\n        const nameWithIndex = map(this.names(), (name, i) => {\n            return { name: name, index: i };\n        });\n        const target = find(nameWithIndex, x => x.name === at);\n        if (target) {\n            return this.insertItem(target.index + offset, name, widget);\n        }\n        return false;\n    }\n    /**\n     * Handle the DOM events for the widget.\n     *\n     * @param event - The DOM event sent to the widget.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the dock panel's node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'click':\n                this.handleClick(event);\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Handle a DOM click event.\n     */\n    handleClick(event) {\n        // Stop propagating the click outside the toolbar\n        event.stopPropagation();\n        // Clicking a label focuses the corresponding control\n        // that is linked with `for` attribute, so let it be.\n        if (event.target instanceof HTMLLabelElement) {\n            const forId = event.target.getAttribute('for');\n            if (forId && this.node.querySelector(`#${forId}`)) {\n                return;\n            }\n        }\n        // If this click already focused a control, let it be.\n        if (this.node.contains(document.activeElement)) {\n            return;\n        }\n        // Otherwise, activate the parent widget, which may take focus if desired.\n        if (this.parent) {\n            this.parent.activate();\n        }\n    }\n    /**\n     * Handle `after-attach` messages for the widget.\n     */\n    onAfterAttach(msg) {\n        this.node.addEventListener('click', this);\n    }\n    /**\n     * Handle `before-detach` messages for the widget.\n     */\n    onBeforeDetach(msg) {\n        this.node.removeEventListener('click', this);\n    }\n}\n/**\n * A class which provides a toolbar widget.\n */\nexport class ReactiveToolbar extends Toolbar {\n    /**\n     * Construct a new toolbar widget.\n     */\n    constructor(options = {}) {\n        super(options);\n        this.popupOpener = new ToolbarPopupOpener();\n        this._widgetWidths = new Map();\n        this._widgetPositions = new Map();\n        this._zoomChanged = true;\n        this.insertItem(0, TOOLBAR_OPENER_NAME, this.popupOpener);\n        this.popupOpener.hide();\n        this._resizer = new Throttler(async (callTwice = false) => {\n            await this._onResize(callTwice);\n        }, 500);\n    }\n    /**\n     * Dispose of the widget and its descendant widgets.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        if (this._resizer) {\n            this._resizer.dispose();\n        }\n        super.dispose();\n    }\n    /**\n     * Insert an item into the toolbar at the after a target item.\n     *\n     * @param at - The target item to insert after.\n     *\n     * @param name - The name of the item.\n     *\n     * @param widget - The widget to add.\n     *\n     * @returns Whether the item was added to the toolbar. Returns false if\n     *   an item of the same name is already in the toolbar or if the target\n     *   is the toolbar pop-up opener.\n     *\n     * #### Notes\n     * The index will be clamped to the bounds of the items.\n     * The item can be removed from the toolbar by setting its parent to `null`.\n     */\n    insertAfter(at, name, widget) {\n        if (at === TOOLBAR_OPENER_NAME) {\n            return false;\n        }\n        return super.insertAfter(at, name, widget);\n    }\n    /**\n     * Insert an item relatively to an other item.\n     */\n    insertRelative(at, offset, name, widget) {\n        const targetPosition = this._widgetPositions.get(at);\n        const position = (targetPosition !== null && targetPosition !== void 0 ? targetPosition : 0) + offset;\n        return this.insertItem(position, name, widget);\n    }\n    /**\n     * Insert an item into the toolbar at the specified index.\n     *\n     * @param index - The index at which to insert the item.\n     *\n     * @param name - The name of the item.\n     *\n     * @param widget - The widget to add.\n     *\n     * @returns Whether the item was added to the toolbar. Returns false if\n     *   an item of the same name is already in the toolbar.\n     *\n     * #### Notes\n     * The index will be clamped to the bounds of the items.\n     * The item can be removed from the toolbar by setting its parent to `null`.\n     */\n    insertItem(index, name, widget) {\n        var _a;\n        let status;\n        if (widget instanceof ToolbarPopupOpener) {\n            status = super.insertItem(index, name, widget);\n        }\n        else {\n            // Insert the widget in the toolbar at expected index if possible, otherwise\n            // before the popup opener. This position may change when invoking the resizer\n            // at the end of this function.\n            const j = Math.max(0, Math.min(index, this.layout.widgets.length - 1));\n            status = super.insertItem(j, name, widget);\n            if (j !== index) {\n                // This happens if the widget has been inserted at a wrong position:\n                // - not enough widgets in the toolbar to insert it at the expected index\n                // - the widget at the expected index should be in the popup\n                // In the first situation, the stored index should be changed to match a\n                // realistic index.\n                index = Math.max(0, Math.min(index, this._widgetPositions.size));\n            }\n        }\n        // Save the widgets position when a widget is inserted or moved.\n        if (name !== TOOLBAR_OPENER_NAME &&\n            this._widgetPositions.get(name) !== index) {\n            // If the widget is inserted, set its current position as last.\n            const currentPosition = (_a = this._widgetPositions.get(name)) !== null && _a !== void 0 ? _a : this._widgetPositions.size;\n            // Change the position of moved widgets.\n            this._widgetPositions.forEach((value, key) => {\n                if (key !== TOOLBAR_OPENER_NAME) {\n                    if (value >= index && value < currentPosition) {\n                        this._widgetPositions.set(key, value + 1);\n                    }\n                    else if (value <= index && value > currentPosition) {\n                        this._widgetPositions.set(key, value - 1);\n                    }\n                }\n            });\n            // Save the new position of the widget.\n            this._widgetPositions.set(name, index);\n            // Invokes resizing to ensure correct display of items after an addition, only\n            // if the toolbar is rendered.\n            if (this.isVisible) {\n                void this._resizer.invoke();\n            }\n        }\n        return status;\n    }\n    /**\n     * A message handler invoked on an `'after-show'` message.\n     *\n     * Invokes resizing to ensure correct display of items.\n     */\n    onAfterShow(msg) {\n        void this._resizer.invoke(true);\n    }\n    /**\n     * A message handler invoked on a `'before-hide'` message.\n     *\n     * It will hide the pop-up panel\n     */\n    onBeforeHide(msg) {\n        this.popupOpener.hidePopup();\n        super.onBeforeHide(msg);\n    }\n    onResize(msg) {\n        super.onResize(msg);\n        // Check if the resize event is due to a zoom change.\n        const zoom = Math.round((window.outerWidth / window.innerWidth) * 100);\n        if (zoom !== this._zoom) {\n            this._zoomChanged = true;\n            this._zoom = zoom;\n        }\n        if (msg.width > 0 && this._resizer) {\n            void this._resizer.invoke();\n        }\n    }\n    /**\n     * Move the toolbar items between the reactive toolbar and the popup toolbar,\n     * depending on the width of the toolbar and the width of each item.\n     *\n     * @param callTwice - whether to call the function twice.\n     *\n     * **NOTES**\n     * The `callTwice` parameter is useful when the toolbar is displayed the first time,\n     * because the size of the items is unknown before their first rendering. The first\n     * call will usually add all the items in the main toolbar, and the second call will\n     * reorganize the items between the main toolbar and the popup toolbar.\n     */\n    async _onResize(callTwice = false) {\n        if (!(this.parent && this.parent.isAttached)) {\n            return;\n        }\n        const toolbarWidth = this.node.clientWidth;\n        const opener = this.popupOpener;\n        const openerWidth = 32;\n        // left and right padding.\n        const toolbarPadding = 2 + 5;\n        let width = opener.isHidden ? toolbarPadding : toolbarPadding + openerWidth;\n        return this._getWidgetsToRemove(width, toolbarWidth, openerWidth)\n            .then(async (values) => {\n            var _a, _b;\n            let { width, widgetsToRemove } = values;\n            while (widgetsToRemove.length > 0) {\n                // Insert the widget at the right position in the opener popup, relatively\n                // to the saved position of the first item of the popup toolbar.\n                // Get the saved position of the widget to insert.\n                const widget = widgetsToRemove.pop();\n                const name = Private.nameProperty.get(widget);\n                width -= this._widgetWidths.get(name) || 0;\n                const position = (_a = this._widgetPositions.get(name)) !== null && _a !== void 0 ? _a : 0;\n                // Get the saved position of the first item in the popup toolbar.\n                // If there is no widget, set the value at last item.\n                let openerFirstIndex = this._widgetPositions.size;\n                const openerFirst = opener.widgetAt(0);\n                if (openerFirst) {\n                    const openerFirstName = Private.nameProperty.get(openerFirst);\n                    openerFirstIndex =\n                        (_b = this._widgetPositions.get(openerFirstName)) !== null && _b !== void 0 ? _b : openerFirstIndex;\n                }\n                // Insert the widget in the popup toolbar.\n                const index = position - openerFirstIndex;\n                opener.insertWidget(index, widget);\n            }\n            if (opener.widgetCount() > 0) {\n                const widgetsToAdd = [];\n                let index = 0;\n                const widgetCount = opener.widgetCount();\n                while (index < widgetCount) {\n                    let widget = opener.widgetAt(index);\n                    if (widget) {\n                        width += this._getWidgetWidth(widget);\n                        if (widgetCount - widgetsToAdd.length === 1) {\n                            width -= openerWidth;\n                        }\n                    }\n                    else {\n                        break;\n                    }\n                    if (width < toolbarWidth) {\n                        widgetsToAdd.push(widget);\n                    }\n                    else {\n                        break;\n                    }\n                    index++;\n                }\n                while (widgetsToAdd.length > 0) {\n                    // Insert the widget in the right position in the toolbar.\n                    const widget = widgetsToAdd.shift();\n                    const name = Private.nameProperty.get(widget);\n                    if (this._widgetPositions.has(name)) {\n                        this.insertItem(this._widgetPositions.get(name), name, widget);\n                    }\n                    else {\n                        this.addItem(name, widget);\n                    }\n                }\n            }\n            if (opener.widgetCount() > 0) {\n                opener.updatePopup();\n                opener.show();\n            }\n            else {\n                opener.hide();\n            }\n            if (callTwice) {\n                await this._onResize();\n            }\n        })\n            .catch(msg => {\n            console.error('Error while computing the ReactiveToolbar', msg);\n        });\n    }\n    async _getWidgetsToRemove(width, toolbarWidth, openerWidth) {\n        var _a;\n        const opener = this.popupOpener;\n        const widgets = [...this.layout.widgets];\n        const toIndex = widgets.length - 1;\n        const widgetsToRemove = [];\n        let index = 0;\n        while (index < toIndex) {\n            const widget = widgets[index];\n            const name = Private.nameProperty.get(widget);\n            // Compute the widget size only if\n            // - the zoom has changed.\n            // - the widget size has not been computed yet.\n            let widgetWidth;\n            if (this._zoomChanged) {\n                widgetWidth = await this._saveWidgetWidth(name, widget);\n            }\n            else {\n                // The widget widths can be 0px if it has been added to the toolbar but\n                // not rendered, this is why we must use '||' instead of '??'.\n                widgetWidth =\n                    this._getWidgetWidth(widget) ||\n                        (await this._saveWidgetWidth(name, widget));\n            }\n            width += widgetWidth;\n            if (widgetsToRemove.length === 0 &&\n                opener.isHidden &&\n                width + openerWidth > toolbarWidth) {\n                width += openerWidth;\n            }\n            // Remove the widget if it is out of the toolbar or incorrectly positioned.\n            // Incorrect positioning can occur when the widget is added after the toolbar\n            // has been rendered and should be in the popup. E.g. debugger icon with a\n            // narrow notebook toolbar.\n            if (width > toolbarWidth ||\n                ((_a = this._widgetPositions.get(name)) !== null && _a !== void 0 ? _a : 0) > index) {\n                widgetsToRemove.push(widget);\n            }\n            index++;\n        }\n        this._zoomChanged = false;\n        return {\n            width: width,\n            widgetsToRemove: widgetsToRemove\n        };\n    }\n    async _saveWidgetWidth(name, widget) {\n        if (widget instanceof ReactWidget) {\n            await widget.renderPromise;\n        }\n        const widgetWidth = widget.hasClass(TOOLBAR_SPACER_CLASS)\n            ? 2\n            : widget.node.clientWidth;\n        this._widgetWidths.set(name, widgetWidth);\n        return widgetWidth;\n    }\n    _getWidgetWidth(widget) {\n        const widgetName = Private.nameProperty.get(widget);\n        return this._widgetWidths.get(widgetName) || 0;\n    }\n}\n/**\n * The namespace for Toolbar class statics.\n */\n(function (Toolbar) {\n    /**\n     * Create a toolbar spacer item.\n     *\n     * #### Notes\n     * It is a flex spacer that separates the left toolbar items\n     * from the right toolbar items.\n     */\n    function createSpacerItem() {\n        return new Private.Spacer();\n    }\n    Toolbar.createSpacerItem = createSpacerItem;\n})(Toolbar || (Toolbar = {}));\n/**\n * React component for a toolbar button.\n *\n * @param props - The props for ToolbarButtonComponent.\n */\nexport function ToolbarButtonComponent(props) {\n    var _a, _b, _c;\n    // In some browsers, a button click event moves the focus from the main\n    // content to the button (see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus).\n    const handleClick = ((_a = props.noFocusOnClick) !== null && _a !== void 0 ? _a : false)\n        ? undefined\n        : (event) => {\n            var _a;\n            if (event.button === 0) {\n                (_a = props.onClick) === null || _a === void 0 ? void 0 : _a.call(props);\n                // In safari, the focus do not move to the button on click (see\n                // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus).\n                event.target.focus();\n            }\n        };\n    // To avoid focusing the button, we avoid a click event by calling preventDefault in\n    // mousedown, and we bind the button action to `mousedown`.\n    // Currently this is mostly useful for the notebook panel, to retrieve the focused\n    // cell before the click event.\n    const handleMouseDown = ((_b = props.noFocusOnClick) !== null && _b !== void 0 ? _b : false)\n        ? (event) => {\n            var _a;\n            // Fire action only when left button is pressed.\n            if (event.button === 0) {\n                event.preventDefault();\n                (_a = props.onClick) === null || _a === void 0 ? void 0 : _a.call(props);\n            }\n        }\n        : undefined;\n    const handleKeyDown = (event) => {\n        var _a;\n        const { key } = event;\n        if (key === 'Enter' || key === ' ') {\n            (_a = props.onClick) === null || _a === void 0 ? void 0 : _a.call(props);\n        }\n    };\n    const getTooltip = () => {\n        if (props.enabled === false && props.disabledTooltip) {\n            return props.disabledTooltip;\n        }\n        else if (props.pressed && props.pressedTooltip) {\n            return props.pressedTooltip;\n        }\n        else {\n            return props.tooltip || props.iconLabel;\n        }\n    };\n    const title = getTooltip();\n    const disabled = props.enabled === false;\n    return (React.createElement(Button, { appearance: \"stealth\", className: props.className\n            ? props.className + ' jp-ToolbarButtonComponent'\n            : 'jp-ToolbarButtonComponent', \"aria-disabled\": disabled, \"aria-label\": props.label || title, \"aria-pressed\": props.pressed, ...props.dataset, disabled: disabled, onClick: handleClick, onMouseDown: handleMouseDown, onKeyDown: handleKeyDown, title: title },\n        (props.icon || props.iconClass) && (React.createElement(LabIcon.resolveReact, { icon: props.pressed ? (_c = props.pressedIcon) !== null && _c !== void 0 ? _c : props.icon : props.icon, iconClass: \n            // add some extra classes for proper support of icons-as-css-background\n            classes(props.iconClass, 'jp-Icon'), tag: null })),\n        props.label && (React.createElement(\"span\", { className: \"jp-ToolbarButtonComponent-label\" }, props.label))));\n}\n/**\n * Adds the toolbar button class to the toolbar widget.\n * @param w Toolbar button widget.\n */\nexport function addToolbarButtonClass(w) {\n    w.addClass('jp-ToolbarButton');\n    return w;\n}\n/**\n * Lumino Widget version of static ToolbarButtonComponent.\n */\nexport class ToolbarButton extends ReactWidget {\n    /**\n     * Creates a toolbar button\n     * @param props props for underlying `ToolbarButton` component\n     */\n    constructor(props = {}) {\n        var _a, _b;\n        super();\n        this.props = props;\n        addToolbarButtonClass(this);\n        this._enabled = (_a = props.enabled) !== null && _a !== void 0 ? _a : true;\n        this._pressed = this._enabled && ((_b = props.pressed) !== null && _b !== void 0 ? _b : false);\n        this._onClick = props.onClick;\n    }\n    /**\n     * Sets the pressed state for the button\n     * @param value true if button is pressed, false otherwise\n     */\n    set pressed(value) {\n        if (this.enabled && value !== this._pressed) {\n            this._pressed = value;\n            this.update();\n        }\n    }\n    /**\n     * Returns true if button is pressed, false otherwise\n     */\n    get pressed() {\n        return this._pressed;\n    }\n    /**\n     * Sets the enabled state for the button\n     * @param value true to enable the button, false otherwise\n     */\n    set enabled(value) {\n        if (value != this._enabled) {\n            this._enabled = value;\n            if (!this._enabled) {\n                this._pressed = false;\n            }\n            this.update();\n        }\n    }\n    /**\n     * Returns true if button is enabled, false otherwise\n     */\n    get enabled() {\n        return this._enabled;\n    }\n    /**\n     * Sets the click handler for the button\n     * @param value click handler\n     */\n    set onClick(value) {\n        if (value !== this._onClick) {\n            this._onClick = value;\n            this.update();\n        }\n    }\n    /**\n     * Returns the click handler for the button\n     */\n    get onClick() {\n        return this._onClick;\n    }\n    render() {\n        return (React.createElement(ToolbarButtonComponent, { ...this.props, noFocusOnClick: this.props.noFocusOnClick, pressed: this.pressed, enabled: this.enabled, onClick: this.onClick }));\n    }\n}\n/**\n * React component for a toolbar button that wraps a command.\n *\n * This wraps the ToolbarButtonComponent and watches the command registry\n * for changes to the command.\n */\nexport function CommandToolbarButtonComponent(props) {\n    return (React.createElement(UseSignal, { signal: props.commands.commandChanged, shouldUpdate: (sender, args) => (args.id === props.id && args.type === 'changed') ||\n            args.type === 'many-changed' }, () => props.commands.listCommands().includes(props.id) ? (React.createElement(ToolbarButtonComponent, { ...Private.propsFromCommand(props) })) : null));\n}\n/*\n * Adds the command toolbar button class to the command toolbar widget.\n * @param w Command toolbar button widget.\n */\nexport function addCommandToolbarButtonClass(w) {\n    w.addClass('jp-CommandToolbarButton');\n    return w;\n}\n/**\n * Phosphor Widget version of CommandToolbarButtonComponent.\n */\nexport class CommandToolbarButton extends ReactWidget {\n    /**\n     * Creates a command toolbar button\n     * @param props props for underlying `CommandToolbarButtonComponent` component\n     */\n    constructor(props) {\n        super();\n        this.props = props;\n        const { commands, id, args } = props;\n        addCommandToolbarButtonClass(this);\n        this.setCommandAttributes(commands, id, args);\n        commands.commandChanged.connect((_, change) => {\n            if (change.id === props.id) {\n                this.setCommandAttributes(commands, id, args);\n            }\n        }, this);\n    }\n    setCommandAttributes(commands, id, args) {\n        if (commands.isToggled(id, args)) {\n            this.addClass('lm-mod-toggled');\n        }\n        else {\n            this.removeClass('lm-mod-toggled');\n        }\n        if (commands.isVisible(id, args)) {\n            this.removeClass('lm-mod-hidden');\n        }\n        else {\n            this.addClass('lm-mod-hidden');\n        }\n        if (commands.isEnabled(id, args)) {\n            if ('disabled' in this.node) {\n                this.node.disabled = false;\n            }\n        }\n        else {\n            if ('disabled' in this.node) {\n                this.node.disabled = true;\n            }\n        }\n    }\n    render() {\n        return React.createElement(CommandToolbarButtonComponent, { ...this.props });\n    }\n    /**\n     * Identifier of the underlying command.\n     */\n    get commandId() {\n        return this.props.id;\n    }\n}\n/**\n *  A class which provides a toolbar popup\n *  used to store widgets that don't fit\n *  in the toolbar when it is resized\n */\nclass ToolbarPopup extends Widget {\n    /**\n     *  Construct a new ToolbarPopup\n     */\n    constructor() {\n        super({ node: document.createElement('jp-toolbar') });\n        this.width = 0;\n        this.node.setAttribute('aria-label', 'Responsive popup toolbar');\n        this.addClass('jp-Toolbar');\n        this.addClass('jp-Toolbar-responsive-popup');\n        this.addClass('jp-ThemedContainer');\n        this.layout = new PanelLayout();\n        Widget.attach(this, document.body);\n        this.hide();\n    }\n    /**\n     * Updates the width of the popup, this\n     * should match with the toolbar width\n     *\n     * @param width - The width to resize to\n     * @protected\n     */\n    updateWidth(width) {\n        if (width > 0) {\n            this.width = width;\n            this.node.style.width = `${width}px`;\n        }\n    }\n    /**\n     * Aligns the popup to left bottom of widget\n     *\n     * @param widget the widget to align to\n     * @private\n     */\n    alignTo(widget) {\n        const { height: widgetHeight, width: widgetWidth, x: widgetX, y: widgetY } = widget.node.getBoundingClientRect();\n        const width = this.width;\n        this.node.style.left = `${widgetX + widgetWidth - width + 1}px`;\n        this.node.style.top = `${widgetY + widgetHeight + 1}px`;\n    }\n    /**\n     * Inserts the widget at specified index\n     * @param index the index\n     * @param widget widget to add\n     */\n    insertWidget(index, widget) {\n        this.layout.insertWidget(index, widget);\n    }\n    /**\n     *  Total number of widgets in the popup\n     */\n    widgetCount() {\n        return this.layout.widgets.length;\n    }\n    /**\n     * Returns the widget at index\n     * @param index the index\n     */\n    widgetAt(index) {\n        return this.layout.widgets[index];\n    }\n}\n/**\n *  A class that provides a ToolbarPopupOpener,\n *  which is a button added to toolbar when\n *  the toolbar items overflow toolbar width\n */\nclass ToolbarPopupOpener extends ToolbarButton {\n    /**\n     *  Create a new popup opener\n     */\n    constructor(props = {}) {\n        const trans = (props.translator || nullTranslator).load('jupyterlab');\n        super({\n            icon: ellipsesIcon,\n            onClick: () => {\n                this.handleClick();\n            },\n            tooltip: trans.__('More commands')\n        });\n        this.addClass('jp-Toolbar-responsive-opener');\n        this.popup = new ToolbarPopup();\n    }\n    /**\n     * Add widget to the popup, prepends widgets\n     * @param widget the widget to add\n     */\n    addWidget(widget) {\n        this.popup.insertWidget(0, widget);\n    }\n    /**\n     * Insert widget to the popup.\n     * @param widget the widget to add\n     */\n    insertWidget(index, widget) {\n        this.popup.insertWidget(index, widget);\n    }\n    /**\n     * Dispose of the widget and its descendant widgets.\n     *\n     * #### Notes\n     * It is unsafe to use the widget after it has been disposed.\n     *\n     * All calls made to this method after the first are a no-op.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this.popup.dispose();\n        super.dispose();\n    }\n    /**\n     * Hides the opener and the popup\n     */\n    hide() {\n        super.hide();\n        this.hidePopup();\n    }\n    /**\n     * Hides the popup\n     */\n    hidePopup() {\n        this.popup.hide();\n    }\n    /**\n     *  Updates width and position of the popup\n     *  to align with the toolbar\n     */\n    updatePopup() {\n        this.popup.updateWidth(this.parent.node.clientWidth);\n        this.popup.alignTo(this.parent);\n    }\n    /**\n     * Returns widget at index in the popup\n     * @param index\n     */\n    widgetAt(index) {\n        return this.popup.widgetAt(index);\n    }\n    /**\n     * Returns total number of widgets in the popup\n     *\n     * @returns Number of widgets\n     */\n    widgetCount() {\n        return this.popup.widgetCount();\n    }\n    handleClick() {\n        this.updatePopup();\n        this.popup.setHidden(!this.popup.isHidden);\n    }\n}\n/**\n * A namespace for private data.\n */\nvar Private;\n(function (Private) {\n    function propsFromCommand(options) {\n        var _a, _b;\n        const { commands, id, args } = options;\n        const iconClass = commands.iconClass(id, args);\n        const iconLabel = commands.iconLabel(id, args);\n        const icon = (_a = options.icon) !== null && _a !== void 0 ? _a : commands.icon(id, args);\n        const label = commands.label(id, args);\n        let className = commands.className(id, args);\n        // Add the boolean state classes and aria attributes.\n        let pressed;\n        if (commands.isToggleable(id, args)) {\n            pressed = commands.isToggled(id, args);\n            if (pressed) {\n                className += ' lm-mod-toggled';\n            }\n        }\n        if (!commands.isVisible(id, args)) {\n            className += ' lm-mod-hidden';\n        }\n        const labelOverride = typeof options.label === 'function'\n            ? options.label(args !== null && args !== void 0 ? args : {})\n            : options.label;\n        let tooltip = commands.caption(id, args) || labelOverride || label || iconLabel;\n        // Shows hot keys in tooltips\n        const binding = commands.keyBindings.find(b => b.command === id);\n        if (binding) {\n            const ks = binding.keys.map(CommandRegistry.formatKeystroke).join(', ');\n            tooltip = `${tooltip} (${ks})`;\n        }\n        const onClick = () => {\n            void commands.execute(id, args);\n        };\n        const enabled = commands.isEnabled(id, args);\n        return {\n            className,\n            dataset: { 'data-command': options.id },\n            noFocusOnClick: options.noFocusOnClick,\n            icon,\n            iconClass,\n            tooltip: (_b = options.caption) !== null && _b !== void 0 ? _b : tooltip,\n            onClick,\n            enabled,\n            label: labelOverride !== null && labelOverride !== void 0 ? labelOverride : label,\n            pressed\n        };\n    }\n    Private.propsFromCommand = propsFromCommand;\n    /**\n     * An attached property for the name of a toolbar item.\n     */\n    Private.nameProperty = new AttachedProperty({\n        name: 'name',\n        create: () => ''\n    });\n    /**\n     * A spacer widget.\n     */\n    class Spacer extends Widget {\n        /**\n         * Construct a new spacer widget.\n         */\n        constructor() {\n            super();\n            this.addClass(TOOLBAR_SPACER_CLASS);\n        }\n    }\n    Private.Spacer = Spacer;\n})(Private || (Private = {}));\n//# sourceMappingURL=toolbar.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { Panel } from '@lumino/widgets';\nimport { Toolbar } from './toolbar';\n/**\n * A base class for panel widget with toolbar.\n */\nexport class PanelWithToolbar extends Panel {\n    constructor(options = {}) {\n        super(options);\n        this._toolbar = new Toolbar();\n    }\n    /**\n     * Widget toolbar\n     */\n    get toolbar() {\n        return this._toolbar;\n    }\n}\n//# sourceMappingURL=panelwithtoolbar.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { ReactWidget } from './vdom';\nimport { StringExt } from '@lumino/algorithm';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Search } from '@jupyter/react-components';\nimport { searchIcon } from '../icon';\n/**\n * Perform a fuzzy search on a single item.\n */\nexport function fuzzySearch(source, query) {\n    // Set up the match score and indices array.\n    let score = Infinity;\n    let indices = null;\n    // Look for letters (including in Asian scripts), numbers, and diacritical marks.\n    const rgx = /[\\p{L}\\p{N}\\p{M}]+/gu;\n    let continueSearch = true;\n    // Search the source by word boundary.\n    while (continueSearch) {\n        // Find the next word boundary in the source.\n        let rgxMatch = rgx.exec(source);\n        // Break if there is no more source context.\n        if (!rgxMatch) {\n            break;\n        }\n        // Run the string match on the relevant substring.\n        let match = StringExt.matchSumOfDeltas(source, query, rgxMatch.index);\n        // Break if there is no match.\n        if (!match) {\n            break;\n        }\n        // Update the match if the score is better.\n        if (match && match.score <= score) {\n            score = match.score;\n            indices = match.indices;\n        }\n    }\n    // Bail if there was no match.\n    if (!indices || score === Infinity) {\n        return null;\n    }\n    // Handle a split match.\n    return {\n        score,\n        indices\n    };\n}\nexport const updateFilterFunction = (value, useFuzzyFilter, caseSensitive) => {\n    return (item) => {\n        if (useFuzzyFilter) {\n            // Run the fuzzy search for the item and query.\n            const query = value.toLowerCase();\n            // Ignore the item if it is not a match.\n            return fuzzySearch(item, query);\n        }\n        if (!caseSensitive) {\n            item = item.toLocaleLowerCase();\n            value = value.toLocaleLowerCase();\n        }\n        const i = item.indexOf(value);\n        if (i === -1) {\n            return null;\n        }\n        return {\n            indices: [...Array(value.length).keys()].map(x => x + i)\n        };\n    };\n};\nexport const FilterBox = (props) => {\n    var _a, _b, _c;\n    const [filter, setFilter] = useState((_a = props.initialQuery) !== null && _a !== void 0 ? _a : '');\n    if (props.forceRefresh) {\n        useEffect(() => {\n            props.updateFilter((item) => {\n                return {};\n            });\n        }, []);\n    }\n    const firstRender = useRef(true);\n    const inputRef = (_b = props.inputRef) !== null && _b !== void 0 ? _b : useRef();\n    useEffect(() => {\n        // If there is an initial search value, pass the parent the initial filter function for that value.\n        if (firstRender.current) {\n            firstRender.current = false;\n            if (props.initialQuery !== undefined) {\n                props.updateFilter(updateFilterFunction(props.initialQuery, props.useFuzzyFilter, props.caseSensitive), props.initialQuery);\n            }\n        }\n        else {\n            if (inputRef.current) {\n                // If filter settings changed, update the filter\n                props.updateFilter(updateFilterFunction(inputRef.current.value, props.useFuzzyFilter, props.caseSensitive), inputRef.current.value);\n            }\n        }\n    }, [props.updateFilter, props.useFuzzyFilter, props.caseSensitive]);\n    /**\n     * Handler for search input changes.\n     */\n    const handleChange = useCallback((e) => {\n        const target = e.target;\n        setFilter(target.value);\n        props.updateFilter(updateFilterFunction(target.value, props.useFuzzyFilter, props.caseSensitive), target.value);\n    }, [props.updateFilter, props.useFuzzyFilter, props.caseSensitive]);\n    // Show the icon by default, or if the caller specifically requests it\n    const showSearchIcon = (_c = props.showIcon) !== null && _c !== void 0 ? _c : true;\n    // Cast typing is required because HTMLInputElement and JupyterSearch element types don't exactly match\n    return (React.createElement(Search, { className: \"jp-FilterBox\", ref: props.inputRef, value: filter, onChange: handleChange, onInput: handleChange, placeholder: props.placeholder, disabled: props.disabled }, showSearchIcon && React.createElement(searchIcon.react, { slot: \"end\", tag: null })));\n};\n/**\n * A widget which hosts a input textbox to filter on file names.\n */\nclass FilenameSearcherWidget extends ReactWidget {\n    constructor(props) {\n        var _a;\n        super();\n        this._filterBoxProps = { ...props };\n        (_a = props === null || props === void 0 ? void 0 : props.filterSettingsChanged) === null || _a === void 0 ? void 0 : _a.connect((_, args) => {\n            this._updateProps(args);\n        }, this);\n    }\n    render() {\n        return React.createElement(FilterBox, { ...this._filterBoxProps });\n    }\n    /**\n     * Update a specific prop.\n     */\n    _updateProps(props) {\n        Object.assign(this._filterBoxProps, props);\n        this.update();\n    }\n}\n/**\n * Function which returns a widget that hosts an input textbox to filter on file names.\n */\nexport const FilenameSearcher = (props) => {\n    return new FilenameSearcherWidget(props);\n};\n//# sourceMappingURL=search.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { MessageLoop } from '@lumino/messaging';\nimport { AccordionLayout, AccordionPanel, Widget } from '@lumino/widgets';\nimport { caretDownIcon } from '../icon';\n/**\n * Accordion panel layout that adds a toolbar in widget title if present.\n */\nclass AccordionToolbarLayout extends AccordionLayout {\n    constructor() {\n        super(...arguments);\n        this._toolbars = new WeakMap();\n    }\n    /**\n     * Insert a widget into the layout at the specified index.\n     *\n     * @param index - The index at which to insert the widget.\n     *\n     * @param widget - The widget to insert into the layout.\n     *\n     * #### Notes\n     * The index will be clamped to the bounds of the widgets.\n     *\n     * If the widget is already added to the layout, it will be moved.\n     *\n     * #### Undefined Behavior\n     * An `index` which is non-integral.\n     */\n    insertWidget(index, widget) {\n        if (widget.toolbar) {\n            this._toolbars.set(widget, widget.toolbar);\n            widget.toolbar.addClass('jp-AccordionPanel-toolbar');\n        }\n        super.insertWidget(index, widget);\n    }\n    /**\n     * Remove the widget at a given index from the layout.\n     *\n     * @param index - The index of the widget to remove.\n     *\n     * #### Notes\n     * A widget is automatically removed from the layout when its `parent`\n     * is set to `null`. This method should only be invoked directly when\n     * removing a widget from a layout which has yet to be installed on a\n     * parent widget.\n     *\n     * This method does *not* modify the widget's `parent`.\n     *\n     * #### Undefined Behavior\n     * An `index` which is non-integral.\n     */\n    removeWidgetAt(index) {\n        const widget = this.widgets[index];\n        super.removeWidgetAt(index);\n        // Remove the toolbar after the widget has `removeWidgetAt` will call `detachWidget`\n        if (widget && this._toolbars.has(widget)) {\n            this._toolbars.delete(widget);\n        }\n    }\n    /**\n     * Called when a title attribute has changed, to attach again the toolbar node.\n     */\n    updateTitle(index, widget) {\n        super.updateTitle(index, widget);\n        this._addToolbar(index, widget);\n    }\n    /**\n     * Attach a widget to the parent's DOM node.\n     *\n     * @param index - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to attach to the parent.\n     */\n    attachWidget(index, widget) {\n        super.attachWidget(index, widget);\n        this._addToolbar(index, widget);\n    }\n    /**\n     * Detach a widget from the parent's DOM node.\n     *\n     * @param index - The previous index of the widget in the layout.\n     *\n     * @param widget - The widget to detach from the parent.\n     */\n    detachWidget(index, widget) {\n        const toolbar = this._toolbars.get(widget);\n        if (toolbar) {\n            // Send a `'before-detach'` message if the parent is attached.\n            if (this.parent.isAttached) {\n                MessageLoop.sendMessage(toolbar, Widget.Msg.BeforeDetach);\n            }\n            // Remove the toolbar in the title node.\n            this.titles[index].removeChild(toolbar.node);\n            // Send an `'after-detach'` message if the parent is attached.\n            if (this.parent.isAttached) {\n                MessageLoop.sendMessage(toolbar, Widget.Msg.AfterDetach);\n            }\n        }\n        super.detachWidget(index, widget);\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     *\n     * #### Notes\n     * The default implementation of this method forwards the message\n     * to all widgets. It assumes all widget nodes are attached to the\n     * parent widget node.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onBeforeAttach(msg) {\n        this.notifyToolbars(msg);\n        super.onBeforeAttach(msg);\n    }\n    /**\n     * A message handler invoked on an `'after-attach'` message.\n     *\n     * #### Notes\n     * The default implementation of this method forwards the message\n     * to all widgets. It assumes all widget nodes are attached to the\n     * parent widget node.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        this.notifyToolbars(msg);\n    }\n    /**\n     * A message handler invoked on a `'before-detach'` message.\n     *\n     * #### Notes\n     * The default implementation of this method forwards the message\n     * to all widgets. It assumes all widget nodes are attached to the\n     * parent widget node.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onBeforeDetach(msg) {\n        this.notifyToolbars(msg);\n        super.onBeforeDetach(msg);\n    }\n    /**\n     * A message handler invoked on an `'after-detach'` message.\n     *\n     * #### Notes\n     * The default implementation of this method forwards the message\n     * to all widgets. It assumes all widget nodes are attached to the\n     * parent widget node.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onAfterDetach(msg) {\n        super.onAfterDetach(msg);\n        this.notifyToolbars(msg);\n    }\n    /**\n     * Add the toolbar to the title widget.\n     */\n    _addToolbar(index, widget) {\n        const toolbar = this._toolbars.get(widget);\n        if (toolbar) {\n            // Send a `'before-attach'` message if the parent is attached.\n            if (this.parent.isAttached) {\n                MessageLoop.sendMessage(toolbar, Widget.Msg.BeforeAttach);\n            }\n            // Insert the toolbar in the title node.\n            this.titles[index].appendChild(toolbar.node);\n            // Send an `'after-attach'` message if the parent is attached.\n            if (this.parent.isAttached) {\n                MessageLoop.sendMessage(toolbar, Widget.Msg.AfterAttach);\n            }\n        }\n    }\n    notifyToolbars(msg) {\n        this.widgets.forEach(widget => {\n            const toolbar = this._toolbars.get(widget);\n            if (toolbar) {\n                toolbar.processMessage(msg);\n            }\n        });\n    }\n}\nexport var AccordionToolbar;\n(function (AccordionToolbar) {\n    /**\n     * Custom renderer for the SidePanel\n     */\n    class Renderer extends AccordionPanel.Renderer {\n        /**\n         * Render the collapse indicator for a section title.\n         *\n         * @param data - The data to use for rendering the section title.\n         *\n         * @returns A element representing the collapse indicator.\n         */\n        createCollapseIcon(data) {\n            const iconDiv = document.createElement('div');\n            caretDownIcon.element({\n                container: iconDiv\n            });\n            return iconDiv;\n        }\n        /**\n         * Render the element for a section title.\n         *\n         * @param data - The data to use for rendering the section title.\n         *\n         * @returns A element representing the section title.\n         */\n        createSectionTitle(data) {\n            const handle = super.createSectionTitle(data);\n            handle.classList.add('jp-AccordionPanel-title');\n            return handle;\n        }\n    }\n    AccordionToolbar.Renderer = Renderer;\n    AccordionToolbar.defaultRenderer = new Renderer();\n    /**\n     * Create an accordion layout for accordion panel with toolbar in the title.\n     *\n     * @param options Panel options\n     * @returns Panel layout\n     *\n     * #### Note\n     *\n     * Default titleSpace is 32 px (default var(--jp-private-toolbar-height) - but not styled)\n     */\n    function createLayout(options) {\n        var _a;\n        return (options.layout ||\n            new AccordionToolbarLayout({\n                renderer: options.renderer || AccordionToolbar.defaultRenderer,\n                orientation: options.orientation,\n                alignment: options.alignment,\n                spacing: options.spacing,\n                titleSpace: (_a = options.titleSpace) !== null && _a !== void 0 ? _a : 32\n            }));\n    }\n    AccordionToolbar.createLayout = createLayout;\n})(AccordionToolbar || (AccordionToolbar = {}));\n//# sourceMappingURL=accordiontoolbar.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { AccordionPanel, Panel, PanelLayout, Widget } from '@lumino/widgets';\nimport { AccordionToolbar } from './accordiontoolbar';\nimport { Toolbar } from './toolbar';\n/**\n * A widget meant to be contained in sidebars.\n *\n * #### Note\n * By default the content widget is an accordion panel that supports widget with\n * associated toolbar to be displayed in the widget title.\n */\nexport class SidePanel extends Widget {\n    constructor(options = {}) {\n        var _a;\n        super();\n        const layout = (this.layout = new PanelLayout());\n        this.addClass('jp-SidePanel');\n        const trans = (this._trans = (options.translator || nullTranslator).load('jupyterlab'));\n        if (options.header) {\n            this.addHeader(options.header);\n        }\n        const content = (this._content =\n            (_a = options.content) !== null && _a !== void 0 ? _a : new AccordionPanel({\n                ...options,\n                layout: AccordionToolbar.createLayout(options)\n            }));\n        content.node.setAttribute('role', 'region');\n        content.node.setAttribute('aria-label', trans.__('side panel content'));\n        content.addClass('jp-SidePanel-content');\n        layout.addWidget(content);\n        if (options.toolbar) {\n            this.addToolbar(options.toolbar);\n        }\n    }\n    /**\n     * The content hosted by the widget.\n     */\n    get content() {\n        return this._content;\n    }\n    /**\n     * A panel for widgets that sit on top of the widget.\n     */\n    get header() {\n        if (!this._header) {\n            this.addHeader();\n        }\n        return this._header;\n    }\n    /**\n     * The toolbar hosted by the widget.\n     *\n     * It sits between the header and the content\n     */\n    get toolbar() {\n        if (!this._toolbar) {\n            this.addToolbar();\n        }\n        return this._toolbar;\n    }\n    /**\n     * A read-only array of the widgets in the content panel.\n     */\n    get widgets() {\n        return this.content.widgets;\n    }\n    /**\n     * Add a widget to the content panel bottom.\n     *\n     * @param widget Widget to add\n     */\n    addWidget(widget) {\n        this.content.addWidget(widget);\n    }\n    /**\n     * Insert a widget at the given position in the content panel.\n     *\n     * @param index Position\n     * @param widget Widget to insert\n     */\n    insertWidget(index, widget) {\n        this.content.insertWidget(index, widget);\n    }\n    addHeader(header) {\n        const theHeader = (this._header = header || new Panel());\n        theHeader.addClass('jp-SidePanel-header');\n        this.layout.insertWidget(0, theHeader);\n    }\n    addToolbar(toolbar) {\n        const theToolbar = (this._toolbar = toolbar !== null && toolbar !== void 0 ? toolbar : new Toolbar());\n        theToolbar.addClass('jp-SidePanel-toolbar');\n        this.layout.insertWidget(this.layout.widgets.length - 1, theToolbar);\n    }\n}\n//# sourceMappingURL=sidepanel.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\nimport { Widget } from '@lumino/widgets';\n/**\n * The spinner class.\n */\nexport class Spinner extends Widget {\n    /**\n     * Construct a spinner widget.\n     */\n    constructor() {\n        super();\n        this.addClass('jp-Spinner');\n        this.node.tabIndex = -1;\n        const content = document.createElement('div');\n        content.className = 'jp-SpinnerContent';\n        this.node.appendChild(content);\n    }\n    /**\n     * Handle `'activate-request'` messages.\n     */\n    onActivateRequest(msg) {\n        this.node.focus();\n    }\n}\n//# sourceMappingURL=spinner.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { caretDownEmptyIcon } from '../icon';\n/**\n * A namespace for node styling.\n */\nexport var Styling;\n(function (Styling) {\n    /**\n     * Style a node and its child elements with the default tag names.\n     *\n     * @param node - The base node.\n     *\n     * @param className - The optional CSS class to add to styled nodes.\n     */\n    function styleNode(node, className = '') {\n        styleNodeByTag(node, 'select', className);\n        styleNodeByTag(node, 'textarea', className);\n        styleNodeByTag(node, 'input', className);\n        styleNodeByTag(node, 'button', className);\n    }\n    Styling.styleNode = styleNode;\n    /**\n     * Style a node and its elements that have a given tag name.\n     *\n     * @param node - The base node.\n     *\n     * @param tagName - The html tag name to style.\n     *\n     * @param className - The optional CSS class to add to styled nodes.\n     */\n    function styleNodeByTag(node, tagName, className = '') {\n        if (node.localName === tagName) {\n            node.classList.add('jp-mod-styled');\n        }\n        if (node.localName === 'select') {\n            const multiple = node.hasAttribute('multiple');\n            wrapSelect(node, multiple);\n        }\n        const nodes = node.getElementsByTagName(tagName);\n        for (let i = 0; i < nodes.length; i++) {\n            const child = nodes[i];\n            child.classList.add('jp-mod-styled');\n            if (className) {\n                child.classList.add(className);\n            }\n            if (tagName === 'select') {\n                const multiple = child.hasAttribute('multiple');\n                wrapSelect(child, multiple);\n            }\n        }\n    }\n    Styling.styleNodeByTag = styleNodeByTag;\n    /**\n     * Wrap a select node.\n     */\n    function wrapSelect(node, multiple) {\n        const wrapper = document.createElement('div');\n        wrapper.classList.add('jp-select-wrapper');\n        node.addEventListener('focus', Private.onFocus);\n        node.addEventListener('blur', Private.onFocus);\n        node.classList.add('jp-mod-styled');\n        if (node.parentElement) {\n            node.parentElement.replaceChild(wrapper, node);\n        }\n        wrapper.appendChild(node);\n        if (multiple) {\n            wrapper.classList.add('multiple');\n        }\n        else {\n            // add the icon node\n            wrapper.appendChild(caretDownEmptyIcon.element({\n                tag: 'span',\n                stylesheet: 'select',\n                right: '8px',\n                top: '5px',\n                width: '18px'\n            }));\n        }\n        return wrapper;\n    }\n    Styling.wrapSelect = wrapSelect;\n})(Styling || (Styling = {}));\n/**\n * The namespace for module private data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Handle a focus event on a styled select.\n     */\n    function onFocus(event) {\n        const target = event.target;\n        const parent = target.parentElement;\n        if (!parent) {\n            return;\n        }\n        if (event.type === 'focus') {\n            parent.classList.add('jp-mod-focused');\n        }\n        else {\n            parent.classList.remove('jp-mod-focused');\n        }\n    }\n    Private.onFocus = onFocus;\n})(Private || (Private = {}));\n//# sourceMappingURL=styling.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\nimport { Widget } from '@lumino/widgets';\n/**\n * A Switch widget\n */\nexport class Switch extends Widget {\n    constructor() {\n        super();\n        this._button = document.createElement('button');\n        this._label = document.createElement('label');\n        this._valueChanged = new Signal(this);\n        // switch accessibility refs:\n        // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/Switch_role\n        // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Accessibility_concerns\n        this._button.className = 'jp-switch';\n        this._button.setAttribute('role', 'switch');\n        this._label.className = 'jp-switch-label';\n        const track = document.createElement('div');\n        track.className = 'jp-switch-track';\n        track.setAttribute('aria-hidden', 'true');\n        this._button.appendChild(this._label);\n        this._button.appendChild(track);\n        this.node.appendChild(this._button);\n    }\n    /**\n     * The value of the switch.\n     */\n    get value() {\n        return this._value;\n    }\n    set value(newValue) {\n        const oldValue = this._value;\n        if (oldValue === newValue) {\n            return;\n        }\n        this._button.setAttribute('aria-checked', newValue.toString());\n        this._value = newValue;\n        this._valueChanged.emit({ name: 'value', oldValue, newValue });\n    }\n    /**\n     * A signal emitted when the value changes.\n     */\n    get valueChanged() {\n        return this._valueChanged;\n    }\n    /**\n     * The visible label of the switch.\n     */\n    get label() {\n        var _a;\n        return (_a = this._label.textContent) !== null && _a !== void 0 ? _a : '';\n    }\n    set label(x) {\n        this._label.textContent = x;\n    }\n    /**\n     * The caption (title) of the switch.\n     */\n    get caption() {\n        return this._button.title;\n    }\n    set caption(x) {\n        this._button.title = x;\n        this._label.title = x;\n    }\n    handleEvent(event) {\n        switch (event.type) {\n            case 'click':\n                this.value = !this.value;\n                break;\n            default:\n                break;\n        }\n    }\n    onAfterAttach() {\n        this._button.addEventListener('click', this);\n    }\n    onBeforeDetach() {\n        this._button.removeEventListener('click', this);\n    }\n}\n//# sourceMappingURL=switch.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport React, { useState } from 'react';\nimport { caretDownIcon, caretUpIcon } from '../icon';\nexport const TABLE_CLASS = 'jp-sortable-table';\n/**\n * Sortable table component for small datasets.\n *\n * For large datasets use `DataGrid` from `@lumino/datagrid`.\n */\nexport function Table(props) {\n    const [sortState, setSortState] = useState({\n        sortKey: props.sortKey,\n        sortDirection: props.sortDirection || 1\n    });\n    const sort = (key) => {\n        if (key === sortState.sortKey) {\n            setSortState({\n                sortKey: key,\n                sortDirection: (sortState.sortDirection * -1)\n            });\n        }\n        else {\n            setSortState({ sortKey: key, sortDirection: 1 });\n        }\n    };\n    let rows = props.rows;\n    const sortedColumn = props.columns.filter(column => column.id === sortState.sortKey)[0];\n    if (sortedColumn) {\n        const sorter = sortedColumn.sort.bind(sortedColumn);\n        rows = props.rows.sort((a, b) => sorter(a.data, b.data) * sortState.sortDirection);\n    }\n    const visibleColumns = props.columns.filter(column => (column.isAvailable ? column.isAvailable() : true) && !column.isHidden);\n    const elements = rows.map(row => {\n        const cells = visibleColumns.map(column => (React.createElement(\"td\", { key: column.id + '-' + row.key }, column.renderCell(row.data))));\n        return (React.createElement(\"tr\", { key: row.key, \"data-key\": row.key, onClick: props.onRowClick, className: 'jp-sortable-table-tr' }, cells));\n    });\n    const columnsHeaders = visibleColumns.map(column => (React.createElement(SortableTH, { label: column.label, id: column.id, state: sortState, key: column.id, onSort: () => {\n            sort(column.id);\n        } })));\n    return (React.createElement(\"table\", { className: TABLE_CLASS },\n        React.createElement(\"thead\", null,\n            React.createElement(\"tr\", { className: 'jp-sortable-table-tr' }, columnsHeaders)),\n        React.createElement(\"tbody\", null, elements)));\n}\nfunction SortableTH(props) {\n    const isSortKey = props.id === props.state.sortKey;\n    const sortIcon = !isSortKey || props.state.sortDirection === 1 ? caretUpIcon : caretDownIcon;\n    return (React.createElement(\"th\", { key: props.id, onClick: () => props.onSort(), className: isSortKey ? 'jp-sorted-header' : undefined, \"data-id\": props.id },\n        React.createElement(\"div\", { className: \"jp-sortable-table-th-wrapper\" },\n            React.createElement(\"label\", null, props.label),\n            React.createElement(sortIcon.react, { tag: \"span\", className: \"jp-sort-icon\" }))));\n}\n//# sourceMappingURL=table.js.map","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { ArrayExt } from '@lumino/algorithm';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { MessageLoop } from '@lumino/messaging';\nimport { Throttler } from '@lumino/polling';\nimport { Signal } from '@lumino/signaling';\nimport { PanelLayout, Widget } from '@lumino/widgets';\n/**\n * For how long after the scroll request should the target position\n * be corrected to account for resize of other widgets?\n *\n * The time is given in milliseconds.\n */\nconst MAXIMUM_TIME_REMAINING = 100;\n/*\n * Feature detection\n *\n * Ref: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#improving_scrolling_performance_with_passive_listeners\n */\nlet passiveIfSupported = false;\ntry {\n    // @ts-expect-error unknown signature\n    window.addEventListener('test', null, Object.defineProperty({}, 'passive', {\n        get: function () {\n            passiveIfSupported = { passive: true };\n        }\n    }));\n}\ncatch (err) {\n    // pass no-op\n}\n/**\n * Windowed list abstract model.\n */\nexport class WindowedListModel {\n    /**\n     * Constructor\n     *\n     * @param options Constructor options\n     */\n    constructor(options = {}) {\n        var _a, _b, _c, _d, _e, _f;\n        /**\n         * The overlap threshold used to decide whether to scroll down to an item\n         * below the viewport (smart mode). If the item overlap with the viewport\n         * is greater or equal this threshold the item is considered sufficiently\n         * visible and will not be scrolled to. The value is the number of pixels\n         * in overlap if greater than one, or otherwise a fraction of item height.\n         * By default the item is scrolled to if not full visible in the viewport.\n         */\n        this.scrollDownThreshold = 1;\n        /**\n         * The underlap threshold used to decide whether to scroll up to an item\n         * above the viewport (smart mode). If the item part outside the viewport\n         * (underlap) is greater than this threshold then the item is considered\n         * not sufficiently visible and will be scrolled to.\n         * The value is the number of pixels in underlap if greater than one, or\n         * otherwise a fraction of the item height.\n         * By default the item is scrolled to if not full visible in the viewport.\n         */\n        this.scrollUpThreshold = 0;\n        /**\n         * Top padding of the the outer window node.\n         */\n        this.paddingTop = 0;\n        /**\n         * Default widget size estimation\n         *\n         * @deprecated we always use {@link estimateWidgetSize}\n         */\n        this._estimatedWidgetSize = WindowedList.DEFAULT_WIDGET_SIZE;\n        this._stateChanged = new Signal(this);\n        this._currentWindow = [-1, -1, -1, -1];\n        this._height = 0;\n        this._isDisposed = false;\n        this._itemsList = null;\n        this._measuredAllUntilIndex = -1;\n        this._overscanCount = 1;\n        this._scrollOffset = 0;\n        this._widgetCount = 0;\n        this._widgetSizers = [];\n        this._windowingActive = true;\n        this._widgetCount = (_c = (_b = (_a = options.itemsList) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : options.count) !== null && _c !== void 0 ? _c : 0;\n        this._overscanCount = (_d = options.overscanCount) !== null && _d !== void 0 ? _d : 1;\n        this._windowingActive = (_e = options.windowingActive) !== null && _e !== void 0 ? _e : true;\n        this.itemsList = (_f = options.itemsList) !== null && _f !== void 0 ? _f : null;\n    }\n    /**\n     * List widget height\n     */\n    get height() {\n        return this._height;\n    }\n    set height(h) {\n        this._height = h;\n    }\n    /**\n     * Test whether the model is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Items list to be rendered\n     */\n    get itemsList() {\n        return this._itemsList;\n    }\n    set itemsList(v) {\n        var _a, _b, _c;\n        if (this._itemsList !== v) {\n            if (this._itemsList) {\n                this._itemsList.changed.disconnect(this.onListChanged, this);\n            }\n            const oldValue = this._itemsList;\n            this._itemsList = v;\n            if (this._itemsList) {\n                this._itemsList.changed.connect(this.onListChanged, this);\n            }\n            else {\n                this._widgetCount = 0;\n            }\n            this._stateChanged.emit({\n                name: 'list',\n                newValue: this._itemsList,\n                oldValue\n            });\n            this._stateChanged.emit({\n                name: 'count',\n                newValue: (_b = (_a = this._itemsList) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0,\n                oldValue: (_c = oldValue === null || oldValue === void 0 ? void 0 : oldValue.length) !== null && _c !== void 0 ? _c : 0\n            });\n        }\n    }\n    /**\n     * Number of widgets to render in addition to those\n     * visible in the viewport.\n     */\n    get overscanCount() {\n        return this._overscanCount;\n    }\n    set overscanCount(newValue) {\n        if (newValue >= 1) {\n            if (this._overscanCount !== newValue) {\n                const oldValue = this._overscanCount;\n                this._overscanCount = newValue;\n                this._stateChanged.emit({ name: 'overscanCount', newValue, oldValue });\n            }\n        }\n        else {\n            console.error(`Forbidden non-positive overscan count: got ${newValue}`);\n        }\n    }\n    /**\n     * Viewport scroll offset.\n     */\n    get scrollOffset() {\n        return this._scrollOffset;\n    }\n    set scrollOffset(offset) {\n        this._scrollOffset = offset;\n    }\n    /**\n     * Total number of widgets in the list\n     */\n    get widgetCount() {\n        return this._itemsList ? this._itemsList.length : this._widgetCount;\n    }\n    set widgetCount(newValue) {\n        if (this.itemsList) {\n            console.error('It is not allow to change the widgets count of a windowed list if a items list is used.');\n            return;\n        }\n        if (newValue >= 0) {\n            if (this._widgetCount !== newValue) {\n                const oldValue = this._widgetCount;\n                this._widgetCount = newValue;\n                this._stateChanged.emit({ name: 'count', newValue, oldValue });\n            }\n        }\n        else {\n            console.error(`Forbidden negative widget count: got ${newValue}`);\n        }\n    }\n    /**\n     * Whether windowing is active or not.\n     *\n     * This is true by default.\n     */\n    get windowingActive() {\n        return this._windowingActive;\n    }\n    set windowingActive(newValue) {\n        if (newValue !== this._windowingActive) {\n            const oldValue = this._windowingActive;\n            this._windowingActive = newValue;\n            this._currentWindow = [-1, -1, -1, -1];\n            this._measuredAllUntilIndex = -1;\n            this._widgetSizers = [];\n            this._stateChanged.emit({ name: 'windowingActive', newValue, oldValue });\n        }\n    }\n    /**\n     * A signal emitted when any model state changes.\n     */\n    get stateChanged() {\n        return this._stateChanged;\n    }\n    /**\n     * Dispose the model.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n    }\n    /**\n     * Get the total list size.\n     *\n     * @returns Total estimated size\n     */\n    getEstimatedTotalSize() {\n        let totalSizeOfInitialItems = 0;\n        if (this._measuredAllUntilIndex >= this.widgetCount) {\n            this._measuredAllUntilIndex = this.widgetCount - 1;\n        }\n        // These items are all measured already\n        if (this._measuredAllUntilIndex >= 0) {\n            const itemMetadata = this._widgetSizers[this._measuredAllUntilIndex];\n            totalSizeOfInitialItems = itemMetadata.offset + itemMetadata.size;\n        }\n        // These items might have measurements, but some will be missing\n        let totalSizeOfRemainingItems = 0;\n        for (let i = this._measuredAllUntilIndex + 1; i < this.widgetCount; i++) {\n            const sizer = this._widgetSizers[i];\n            totalSizeOfRemainingItems += (sizer === null || sizer === void 0 ? void 0 : sizer.measured)\n                ? sizer.size\n                : this.estimateWidgetSize(i);\n        }\n        return totalSizeOfInitialItems + totalSizeOfRemainingItems;\n    }\n    /**\n     * Get the scroll offset to display an item in the viewport.\n     *\n     * By default, the list will scroll as little as possible to ensure the item is fully visible (`auto`).\n     * You can control the alignment of the item though by specifying a second alignment parameter.\n     * Acceptable values are:\n     *\n     *   auto - Automatically align with the top or bottom minimising the amount scrolled,\n     *          If `alignPreference` is given, follow such preferred alignment.\n     *          If item is smaller than the viewport and fully visible, do not scroll at all.\n     *   smart - If the item is significantly visible, don't scroll at all (regardless of whether it fits in the viewport).\n     *           If the item is less than one viewport away, scroll so that it becomes fully visible (following the `auto` heuristics).\n     *           If the item is more than one viewport away, scroll so that it is centered within the viewport (`center` if smaller than viewport, `top-center` otherwise).\n     *   center - Align the middle of the item with the middle of the viewport (it only works well for items smaller than the viewport).\n     *   top-center - Align the top of the item with the middle of the viewport (works well for items larger than the viewport).\n     *   end - Align the bottom of the item to the bottom of the list.\n     *   start - Align the top of item to the top of the list.\n     *\n     * An item is considered significantly visible if:\n     *  - it overlaps with the viewport by the amount specified by `scrollDownThreshold` when below the viewport\n     *  - it exceeds the viewport by the amount less than specified by `scrollUpThreshold` when above the viewport.\n     *\n     * @param index Item index\n     * @param align Where to align the item in the viewport\n     * @param margin The proportion of viewport to add when aligning with the top/bottom of the list.\n     * @param precomputed Precomputed values to use when windowing is disabled.\n     * @param alignPreference Allows to override the alignment of item when the `auto` heuristic decides that the item needs to be scrolled into view.\n     * @returns The needed scroll offset\n     */\n    getOffsetForIndexAndAlignment(index, align = 'auto', margin = 0, precomputed, alignPreference) {\n        const boundedMargin = Math.min(Math.max(0.0, margin), 1.0);\n        const size = this._height;\n        const itemMetadata = precomputed\n            ? precomputed.itemMetadata\n            : this._getItemMetadata(index);\n        const scrollDownThreshold = this.scrollDownThreshold <= 1\n            ? itemMetadata.size * this.scrollDownThreshold\n            : this.scrollDownThreshold;\n        const scrollUpThreshold = this.scrollUpThreshold <= 1\n            ? itemMetadata.size * this.scrollUpThreshold\n            : this.scrollUpThreshold;\n        // When pre-computed values are not available (we are in windowing mode),\n        // `getEstimatedTotalSize` is called after ItemMetadata is computed\n        // to ensure it reflects actual measurements instead of just estimates.\n        const estimatedTotalSize = precomputed\n            ? precomputed.totalSize\n            : this.getEstimatedTotalSize();\n        const topOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n        const bottomOffset = Math.max(0, itemMetadata.offset - size + itemMetadata.size);\n        // Current offset (+/- padding) is the top edge of the viewport.\n        const currentOffset = precomputed\n            ? precomputed.currentOffset\n            : this._scrollOffset;\n        const viewportPadding = this._windowingActive ? this.paddingTop : 0;\n        const itemTop = itemMetadata.offset;\n        const itemBottom = itemMetadata.offset + itemMetadata.size;\n        const bottomEdge = currentOffset - viewportPadding + size;\n        const topEdge = currentOffset - viewportPadding;\n        const crossingBottomEdge = bottomEdge > itemTop && bottomEdge < itemBottom;\n        const crossingTopEdge = topEdge > itemTop && topEdge < itemBottom;\n        const isFullyWithinViewport = bottomEdge > itemBottom && topEdge < itemTop;\n        if (align === 'smart') {\n            const edgeLessThanOneViewportAway = currentOffset >= bottomOffset - size &&\n                currentOffset <= topOffset + size;\n            const visiblePartBottom = bottomEdge - itemTop;\n            const hiddenPartTop = topEdge - itemTop;\n            if (isFullyWithinViewport ||\n                (crossingBottomEdge && visiblePartBottom >= scrollDownThreshold) ||\n                (crossingTopEdge && hiddenPartTop < scrollUpThreshold)) {\n                return currentOffset;\n            }\n            else if (edgeLessThanOneViewportAway) {\n                // Possibly less than one viewport away, scroll so that it becomes visible (including the margin)\n                align = 'auto';\n            }\n            else {\n                // More than one viewport away, scroll so that it is centered within the list:\n                // - if the item is smaller than viewport align the middle of the item with the middle of the viewport\n                // - if the item is larger than viewport align the top of the item with the middle of the viewport\n                if (itemMetadata.size > size) {\n                    align = 'top-center';\n                }\n                else {\n                    align = 'center';\n                }\n            }\n        }\n        if (align === 'auto') {\n            if (isFullyWithinViewport) {\n                // No need to change the position, return the current offset.\n                return currentOffset;\n            }\n            else if (alignPreference !== undefined) {\n                align = alignPreference;\n            }\n            else if (crossingBottomEdge || bottomEdge <= itemBottom) {\n                align = 'end';\n            }\n            else {\n                align = 'start';\n            }\n        }\n        switch (align) {\n            case 'start':\n                // Align item top to the top edge.\n                return Math.max(0, topOffset - boundedMargin * size) + viewportPadding;\n            case 'end':\n                // Align item bottom to the bottom edge.\n                return bottomOffset + boundedMargin * size + viewportPadding;\n            case 'center':\n                // Align item centre to the middle of the viewport\n                return bottomOffset + (topOffset - bottomOffset) / 2;\n            case 'top-center':\n                // Align item top to the middle of the viewport\n                return topOffset - size / 2;\n        }\n    }\n    /**\n     * Compute the items range to display.\n     *\n     * It returns ``null`` if the range does not need to be updated.\n     *\n     * @returns The current items range to display\n     */\n    getRangeToRender() {\n        let newWindowIndex = [\n            0,\n            Math.max(this.widgetCount - 1, -1),\n            0,\n            Math.max(this.widgetCount - 1, -1)\n        ];\n        const previousLastMeasuredIndex = this._measuredAllUntilIndex;\n        if (this.windowingActive) {\n            newWindowIndex = this._getRangeToRender();\n        }\n        const [startIndex, stopIndex] = newWindowIndex;\n        if (previousLastMeasuredIndex <= stopIndex ||\n            this._currentWindow[0] !== startIndex ||\n            this._currentWindow[1] !== stopIndex) {\n            this._currentWindow = newWindowIndex;\n            return newWindowIndex;\n        }\n        return null;\n    }\n    /**\n     * Return the viewport top position and height for range spanning from\n     * ``startIndex`` to ``stopIndex``.\n     *\n     * @param startIndex First item in viewport index\n     * @param stopIndex Last item in viewport index\n     * @returns The viewport top position and its height\n     */\n    getSpan(startIndex, stopIndex) {\n        const startSizer = this._getItemMetadata(startIndex);\n        const top = startSizer.offset;\n        const stopSizer = this._getItemMetadata(stopIndex);\n        const height = stopSizer.offset - startSizer.offset + stopSizer.size;\n        return [top, height];\n    }\n    /**\n     * WindowedListModel caches offsets and measurements for each index for performance purposes.\n     * This method clears that cached data for all items after (and including) the specified index.\n     *\n     * The list will automatically re-render after the index is reset.\n     *\n     * @param index\n     */\n    resetAfterIndex(index) {\n        const oldValue = this._measuredAllUntilIndex;\n        this._measuredAllUntilIndex = Math.min(index, this._measuredAllUntilIndex);\n        // Because `resetAfterIndex` is always called after an operation modifying\n        // the list of widget sizers, we need to ensure that offsets are correct;\n        // e.g. removing a cell would make the offsets of all following cells too high.\n        // The simplest way to \"heal\" the offsets is to recompute them all.\n        for (const [i, sizer] of this._widgetSizers.entries()) {\n            if (i === 0) {\n                continue;\n            }\n            const previous = this._widgetSizers[i - 1];\n            sizer.offset = previous.offset + previous.size;\n        }\n        if (this._measuredAllUntilIndex !== oldValue) {\n            this._stateChanged.emit({ name: 'index', newValue: index, oldValue });\n        }\n    }\n    /**\n     * Update item sizes.\n     *\n     * This should be called when the real item sizes has been\n     * measured.\n     *\n     * @param sizes New sizes per item index\n     * @returns Whether some sizes changed or not\n     */\n    setWidgetSize(sizes) {\n        if (this._windowingActive || this._currentWindow[0] >= 0) {\n            let minIndex = Infinity;\n            let measuredAllItemsUntil = -1;\n            let offsetDelta = 0;\n            let allPreviousMeasured = true;\n            const sizesMap = new Map(sizes.map(i => [i.index, i.size]));\n            const highestIndex = Math.max(...sizesMap.keys());\n            // add sizers at the end if needed\n            const entries = [\n                ...this._widgetSizers.entries()\n            ];\n            for (let i = this._widgetSizers.length; i <= highestIndex; i++) {\n                entries.push([i, null]);\n            }\n            for (let [index, sizer] of entries) {\n                const measuredSize = sizesMap.get(index);\n                let itemDelta = 0;\n                const hadSizer = !!sizer;\n                if (!sizer) {\n                    const previous = this._widgetSizers[index - 1];\n                    const newSizer = {\n                        offset: previous ? previous.offset + previous.size : 0,\n                        size: measuredSize !== undefined\n                            ? measuredSize\n                            : this.estimateWidgetSize(index),\n                        measured: measuredSize !== undefined\n                    };\n                    this._widgetSizers[index] = newSizer;\n                    sizer = newSizer;\n                }\n                if (measuredSize !== undefined) {\n                    // If the we learned about the size, update it and compute atomic offset for following item (`itemDelta`)\n                    if (sizer.size != measuredSize) {\n                        itemDelta = measuredSize - sizer.size;\n                        sizer.size = measuredSize;\n                        minIndex = Math.min(minIndex, index);\n                    }\n                    // Always set the flag in case the size estimator provides perfect result\n                    sizer.measured = true;\n                }\n                // If all items so far have actual size measurements...\n                if (allPreviousMeasured) {\n                    if (sizer.measured) {\n                        // and this item has a size measurement, we can say that\n                        // all items until now have measurements:\n                        measuredAllItemsUntil = index;\n                    }\n                    else {\n                        allPreviousMeasured = false;\n                    }\n                }\n                if (hadSizer && offsetDelta !== 0) {\n                    // Adjust offsets for all items where it is needed\n                    sizer.offset += offsetDelta;\n                }\n                // Keep track of the overall change in offset that will need to be applied to following items\n                offsetDelta += itemDelta;\n            }\n            if (measuredAllItemsUntil !== -1) {\n                this._measuredAllUntilIndex = measuredAllItemsUntil;\n            }\n            // If some sizes changed\n            if (minIndex !== Infinity) {\n                return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * Callback on list changes\n     *\n     * @param list List items\n     * @param changes List change\n     */\n    onListChanged(list, changes) {\n        switch (changes.type) {\n            case 'add':\n                this._widgetSizers.splice(changes.newIndex, 0, ...new Array(changes.newValues.length).fill(undefined).map((_, i) => {\n                    return { offset: 0, size: this.estimateWidgetSize(i) };\n                }));\n                this.resetAfterIndex(changes.newIndex - 1);\n                break;\n            case 'move':\n                ArrayExt.move(this._widgetSizers, changes.oldIndex, changes.newIndex);\n                this.resetAfterIndex(Math.min(changes.newIndex, changes.oldIndex) - 1);\n                break;\n            case 'remove':\n                this._widgetSizers.splice(changes.oldIndex, changes.oldValues.length);\n                this.resetAfterIndex(changes.oldIndex - 1);\n                break;\n            case 'set':\n                this.resetAfterIndex(changes.newIndex - 1);\n                break;\n        }\n    }\n    _getItemMetadata(index) {\n        var _a, _b;\n        if (index > this._measuredAllUntilIndex) {\n            let offset = 0;\n            if (this._measuredAllUntilIndex >= 0) {\n                const itemMetadata = this._widgetSizers[this._measuredAllUntilIndex];\n                offset = itemMetadata.offset + itemMetadata.size;\n            }\n            for (let i = this._measuredAllUntilIndex + 1; i <= index; i++) {\n                let size = ((_a = this._widgetSizers[i]) === null || _a === void 0 ? void 0 : _a.measured)\n                    ? this._widgetSizers[i].size\n                    : this.estimateWidgetSize(i);\n                this._widgetSizers[i] = {\n                    offset,\n                    size,\n                    measured: (_b = this._widgetSizers[i]) === null || _b === void 0 ? void 0 : _b.measured\n                };\n                offset += size;\n            }\n            // Because the loop above updates estimated sizes,\n            // we need to fix (heal) offsets of the remaining items.\n            for (let i = index + 1; i < this._widgetSizers.length; i++) {\n                const sizer = this._widgetSizers[i];\n                const previous = this._widgetSizers[i - 1];\n                sizer.offset = previous.offset + previous.size;\n            }\n        }\n        for (let i = 0; i <= this._measuredAllUntilIndex; i++) {\n            const sizer = this._widgetSizers[i];\n            if (i === 0) {\n                if (sizer.offset !== 0) {\n                    throw new Error('First offset is not null');\n                }\n            }\n            else {\n                const previous = this._widgetSizers[i - 1];\n                if (sizer.offset !== previous.offset + previous.size) {\n                    throw new Error(`Sizer ${i} has incorrect offset.`);\n                }\n            }\n        }\n        return this._widgetSizers[index];\n    }\n    _findNearestItem(offset) {\n        const lastContinouslyMeasuredItemOffset = this._measuredAllUntilIndex > 0\n            ? this._widgetSizers[this._measuredAllUntilIndex].offset\n            : 0;\n        if (lastContinouslyMeasuredItemOffset >= offset) {\n            // If we've already measured items within this range just use a binary search as it's faster.\n            return this._findNearestItemBinarySearch(this._measuredAllUntilIndex, 0, offset);\n        }\n        else {\n            // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n            // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n            // The overall complexity for this approach is O(log n).\n            return this._findNearestItemExponentialSearch(Math.max(0, this._measuredAllUntilIndex), offset);\n        }\n    }\n    _findNearestItemBinarySearch(high, low, offset) {\n        while (low <= high) {\n            const middle = low + Math.floor((high - low) / 2);\n            const currentOffset = this._getItemMetadata(middle).offset;\n            if (currentOffset === offset) {\n                return middle;\n            }\n            else if (currentOffset < offset) {\n                low = middle + 1;\n            }\n            else if (currentOffset > offset) {\n                high = middle - 1;\n            }\n        }\n        if (low > 0) {\n            return low - 1;\n        }\n        else {\n            return 0;\n        }\n    }\n    _findNearestItemExponentialSearch(index, offset) {\n        let interval = 1;\n        while (index < this.widgetCount &&\n            this._getItemMetadata(index).offset < offset) {\n            index += interval;\n            interval *= 2;\n        }\n        return this._findNearestItemBinarySearch(Math.min(index, this.widgetCount - 1), Math.floor(index / 2), offset);\n    }\n    _getRangeToRender() {\n        const widgetCount = this.widgetCount;\n        if (widgetCount === 0) {\n            return [-1, -1, -1, -1];\n        }\n        const startIndex = this._getStartIndexForOffset(this._scrollOffset);\n        const stopIndex = this._getStopIndexForStartIndex(startIndex, this._scrollOffset);\n        const overscanBackward = Math.max(1, this.overscanCount);\n        const overscanForward = Math.max(1, this.overscanCount);\n        return [\n            Math.max(0, startIndex - overscanBackward),\n            Math.max(0, Math.min(widgetCount - 1, stopIndex + overscanForward)),\n            startIndex,\n            stopIndex\n        ];\n    }\n    _getStartIndexForOffset(offset) {\n        return this._findNearestItem(offset);\n    }\n    _getStopIndexForStartIndex(startIndex, scrollOffset) {\n        const size = this._height;\n        const itemMetadata = this._getItemMetadata(startIndex);\n        const maxOffset = scrollOffset + size;\n        let offset = itemMetadata.offset + itemMetadata.size;\n        let stopIndex = startIndex;\n        while (stopIndex < this.widgetCount - 1 && offset < maxOffset) {\n            stopIndex++;\n            offset += this._getItemMetadata(stopIndex).size;\n        }\n        return stopIndex;\n    }\n}\n/**\n * Windowed list widget\n */\nexport class WindowedList extends Widget {\n    /**\n     * Constructor\n     *\n     * @param options Constructor options\n     */\n    constructor(options) {\n        var _a, _b;\n        const renderer = (_a = options.renderer) !== null && _a !== void 0 ? _a : WindowedList.defaultRenderer;\n        const node = document.createElement('div');\n        node.className = 'jp-WindowedPanel';\n        const scrollbarElement = node.appendChild(document.createElement('div'));\n        scrollbarElement.classList.add('jp-WindowedPanel-scrollbar');\n        const indicator = scrollbarElement.appendChild(renderer.createScrollbarViewportIndicator\n            ? renderer.createScrollbarViewportIndicator()\n            : WindowedList.defaultRenderer.createScrollbarViewportIndicator());\n        indicator.classList.add('jp-WindowedPanel-scrollbar-viewportIndicator');\n        const list = scrollbarElement.appendChild(renderer.createScrollbar());\n        list.classList.add('jp-WindowedPanel-scrollbar-content');\n        const outerElement = node.appendChild(renderer.createOuter());\n        outerElement.classList.add('jp-WindowedPanel-outer');\n        const innerElement = outerElement.appendChild(document.createElement('div'));\n        innerElement.className = 'jp-WindowedPanel-inner';\n        const viewport = innerElement.appendChild(renderer.createViewport());\n        viewport.classList.add('jp-WindowedPanel-viewport');\n        super({ node });\n        /**\n         * A signal that emits the index when the virtual scrollbar jumps to an item.\n         */\n        this.jumped = new Signal(this);\n        this._scrollbarItems = {};\n        this._viewportPaddingTop = 0;\n        this._viewportPaddingBottom = 0;\n        this._needsUpdate = false;\n        this._requiresTotalSizeUpdate = false;\n        this._timerToClearScrollStatus = null;\n        super.layout = (_b = options.layout) !== null && _b !== void 0 ? _b : new WindowedLayout();\n        this.renderer = renderer;\n        this._viewportIndicator = indicator;\n        this._innerElement = innerElement;\n        this._isScrolling = null;\n        this._outerElement = outerElement;\n        this._itemsResizeObserver = null;\n        this._scrollbarElement = scrollbarElement;\n        this._scrollToItem = null;\n        this._scrollRepaint = null;\n        this._scrollUpdateWasRequested = false;\n        this._updater = new Throttler(() => this.update(), 50);\n        this._viewModel = options.model;\n        this._viewport = viewport;\n        if (options.scrollbar) {\n            node.classList.add('jp-mod-virtual-scrollbar');\n        }\n        this.viewModel.stateChanged.connect(this.onStateChanged, this);\n    }\n    /**\n     * Whether the parent is hidden or not.\n     *\n     * This should be set externally if a container is hidden to\n     * stop updating the widget size when hidden.\n     */\n    get isParentHidden() {\n        return this._isParentHidden;\n    }\n    set isParentHidden(v) {\n        this._isParentHidden = v;\n    }\n    /**\n     * Widget layout\n     */\n    get layout() {\n        return super.layout;\n    }\n    /**\n     * The outer container of the windowed list.\n     */\n    get outerNode() {\n        return this._outerElement;\n    }\n    /**\n     * Viewport\n     */\n    get viewportNode() {\n        return this._viewport;\n    }\n    /**\n     * Flag to enable virtual scrollbar.\n     */\n    get scrollbar() {\n        return this.node.classList.contains('jp-mod-virtual-scrollbar');\n    }\n    set scrollbar(enabled) {\n        if (enabled) {\n            this.node.classList.add('jp-mod-virtual-scrollbar');\n        }\n        else {\n            this.node.classList.remove('jp-mod-virtual-scrollbar');\n        }\n        this._adjustDimensionsForScrollbar();\n        this.update();\n    }\n    /**\n     * Windowed list view model\n     */\n    get viewModel() {\n        return this._viewModel;\n    }\n    /**\n     * Dispose the windowed list.\n     */\n    dispose() {\n        this._updater.dispose();\n        super.dispose();\n    }\n    /**\n     * Callback on event.\n     *\n     * @param event Event\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'pointerdown':\n                this._evtPointerDown(event);\n                // Stop propagation of this event; a `mousedown` event will still\n                // be automatically dispatched and handled by the parent notebook\n                // (which will close any open context menu, etc.)\n                event.stopPropagation();\n                break;\n            case 'scrollend':\n                this._onScrollEnd();\n                break;\n            case 'scroll':\n                this.onScroll(event);\n                break;\n        }\n    }\n    /**\n     * Scroll to the specified offset `scrollTop`.\n     *\n     * @param scrollOffset Offset to scroll\n     *\n     * @deprecated since v4 This is an internal helper. Prefer calling `scrollToItem`.\n     */\n    scrollTo(scrollOffset) {\n        if (!this.viewModel.windowingActive) {\n            this._outerElement.scrollTo({ top: scrollOffset });\n            return;\n        }\n        scrollOffset = Math.max(0, scrollOffset);\n        if (scrollOffset !== this.viewModel.scrollOffset) {\n            this.viewModel.scrollOffset = scrollOffset;\n            this._scrollUpdateWasRequested = true;\n            this.update();\n        }\n    }\n    /**\n     * Scroll to the specified item.\n     *\n     * By default, the list will scroll as little as possible to ensure the item is fully visible (`auto`).\n     * You can control the alignment of the item though by specifying a second alignment parameter.\n     * Acceptable values are:\n     *\n     *   auto - Automatically align with the top or bottom minimising the amount scrolled,\n     *          If `alignPreference` is given, follow such preferred alignment.\n     *          If item is smaller than the viewport and fully visible, do not scroll at all.\n     *   smart - If the item is significantly visible, don't scroll at all (regardless of whether it fits in the viewport).\n     *           If the item is less than one viewport away, scroll so that it becomes fully visible (following the `auto` heuristics).\n     *           If the item is more than one viewport away, scroll so that it is centered within the viewport (`center` if smaller than viewport, `top-center` otherwise).\n     *   center - Align the middle of the item with the middle of the viewport (it only works well for items smaller than the viewport).\n     *   top-center - Align the top of the item with the middle of the viewport (works well for items larger than the viewport).\n     *   end - Align the bottom of the item to the bottom of the list.\n     *   start - Align the top of item to the top of the list.\n     *\n     * @param index Item index to scroll to\n     * @param align Type of alignment\n     * @param margin In 'smart' mode the viewport proportion to add\n     * @param alignPreference Allows to override the alignment of item when the `auto` heuristic decides that the item needs to be scrolled into view.\n     */\n    scrollToItem(index, align = 'auto', margin = 0.25, alignPreference) {\n        if (!this._isScrolling ||\n            this._scrollToItem === null ||\n            this._scrollToItem[0] !== index ||\n            this._scrollToItem[1] !== align) {\n            if (this._isScrolling) {\n                this._isScrolling.reject('Scrolling to a new item is requested.');\n            }\n            this._isScrolling = new PromiseDelegate();\n            // Catch the internal reject, as otherwise this will\n            // result in an unhandled promise rejection in test.\n            this._isScrolling.promise.catch(console.debug);\n        }\n        this._scrollToItem = [index, align, margin, alignPreference];\n        this._resetScrollToItem();\n        let precomputed = undefined;\n        if (!this.viewModel.windowingActive) {\n            const item = this._innerElement.querySelector(`[data-windowed-list-index=\"${index}\"]`);\n            if (!item || !(item instanceof HTMLElement)) {\n                // Note: this can happen when scroll is requested when a cell is getting added\n                console.debug(`Element with index ${index} not found`);\n                return Promise.resolve();\n            }\n            precomputed = {\n                totalSize: this._outerElement.scrollHeight,\n                itemMetadata: {\n                    offset: item.offsetTop,\n                    size: item.clientHeight\n                },\n                currentOffset: this._outerElement.scrollTop\n            };\n        }\n        this.scrollTo(this.viewModel.getOffsetForIndexAndAlignment(Math.max(0, Math.min(index, this.viewModel.widgetCount - 1)), align, margin, precomputed, alignPreference));\n        return this._isScrolling.promise;\n    }\n    /**\n     * A message handler invoked on an `'after-attach'` message.\n     */\n    onAfterAttach(msg) {\n        super.onAfterAttach(msg);\n        if (this.viewModel.windowingActive) {\n            this._applyWindowingStyles();\n        }\n        else {\n            this._applyNoWindowingStyles();\n        }\n        this._addListeners();\n        this.viewModel.height = this.node.getBoundingClientRect().height;\n        const viewportStyle = window.getComputedStyle(this._viewport);\n        this.viewModel.paddingTop = parseFloat(viewportStyle.paddingTop);\n        this._viewportPaddingTop = this.viewModel.paddingTop;\n        this._viewportPaddingBottom = parseFloat(viewportStyle.paddingBottom);\n        this._scrollbarElement.addEventListener('pointerdown', this);\n        this._outerElement.addEventListener('scrollend', this);\n    }\n    /**\n     * A message handler invoked on an `'before-detach'` message.\n     */\n    onBeforeDetach(msg) {\n        this._removeListeners();\n        this._scrollbarElement.removeEventListener('pointerdown', this);\n        this._outerElement.removeEventListener('scrollend', this);\n        super.onBeforeDetach(msg);\n    }\n    /**\n     * Callback on scroll event\n     *\n     * @param event Scroll event\n     */\n    onScroll(event) {\n        const { clientHeight, scrollHeight, scrollTop } = event.currentTarget;\n        // TBC Firefox is emitting two events one with 1px diff then the _real_ scroll\n        if (!this._scrollUpdateWasRequested &&\n            Math.abs(this.viewModel.scrollOffset - scrollTop) > 1) {\n            // Test if the scroll event is jumping to the list bottom\n            // if (Math.abs(scrollHeight - clientHeight - scrollTop) < 1) {\n            //   // FIXME Does not work because it happens in multiple segments in between which the sizing is changing\n            //   // due to widget resizing. A possible fix would be to keep track of the \"old\" scrollHeight - clientHeight\n            //   // up to some quiet activity.\n            //   this.scrollToItem(this.widgetCount, 'end');\n            // } else {\n            const scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n            this.viewModel.scrollOffset = scrollOffset;\n            this._scrollUpdateWasRequested = false;\n            if (this._viewport.dataset.isScrolling != 'true') {\n                this._viewport.dataset.isScrolling = 'true';\n            }\n            if (this._timerToClearScrollStatus) {\n                window.clearTimeout(this._timerToClearScrollStatus);\n            }\n            // TODO: remove once `scrollend` event is supported by Safari\n            this._timerToClearScrollStatus = window.setTimeout(() => {\n                this._onScrollEnd();\n            }, 750);\n            this.update();\n            // }\n        }\n    }\n    /**\n     * A message handler invoked on an `'resize-request'` message.\n     */\n    onResize(msg) {\n        const previousHeight = this.viewModel.height;\n        this.viewModel.height =\n            msg.height >= 0 ? msg.height : this.node.getBoundingClientRect().height;\n        if (this.viewModel.height !== previousHeight) {\n            void this._updater.invoke();\n        }\n        super.onResize(msg);\n        void this._updater.invoke();\n    }\n    /**\n     * Callback on view model change\n     *\n     * @param model Windowed list model\n     * @param changes Change\n     */\n    onStateChanged(model, changes) {\n        switch (changes.name) {\n            case 'windowingActive':\n                this._removeListeners();\n                if (this.viewModel.windowingActive) {\n                    this._applyWindowingStyles();\n                    this.onScroll({ currentTarget: this.node });\n                    this._addListeners();\n                    // Bail as onScroll will trigger update\n                    return;\n                }\n                else {\n                    this._applyNoWindowingStyles();\n                    this._addListeners();\n                }\n                break;\n            case 'estimatedWidgetSize':\n                // This only impact the container height and should not\n                // impact the elements in the viewport.\n                this._updateTotalSize();\n                return;\n        }\n        this.update();\n    }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onUpdateRequest(msg) {\n        if (this.viewModel.windowingActive) {\n            // Throttle update request\n            if (this._scrollRepaint === null) {\n                this._needsUpdate = false;\n                this._scrollRepaint = window.requestAnimationFrame(() => {\n                    this._scrollRepaint = null;\n                    this._update();\n                    if (this._needsUpdate) {\n                        this.update();\n                    }\n                });\n            }\n            else {\n                // Force re rendering if some changes happen during rendering.\n                this._needsUpdate = true;\n            }\n        }\n        else {\n            this._update();\n        }\n    }\n    /*\n     * Hide the native scrollbar if necessary and update dimensions\n     */\n    _adjustDimensionsForScrollbar() {\n        const outer = this._outerElement;\n        const scrollbar = this._scrollbarElement;\n        if (this.scrollbar) {\n            // Query DOM\n            let outerScrollbarWidth = outer.offsetWidth - outer.clientWidth;\n            // Update DOM\n            // 1) The native scrollbar is hidden by shifting it out of view.\n            if (outerScrollbarWidth == 0) {\n                // If the scrollbar width is zero, one of the following is true:\n                // - (a) the content is not overflowing\n                // - (b) the browser uses overlay scrollbars\n                // In (b) the overlay scrollbars could show up even even if\n                // occluded by a child element; to prevent this resulting in\n                // double scrollbar we shift the content by an arbitrary offset.\n                outerScrollbarWidth = 1000;\n                outer.style.paddingRight = `${outerScrollbarWidth}px`;\n                outer.style.boxSizing = 'border-box';\n            }\n            else {\n                outer.style.paddingRight = '0';\n            }\n            outer.style.width = `calc(100% + ${outerScrollbarWidth}px)`;\n            // 2) The inner window is shrank to accommodate the virtual scrollbar\n            this._innerElement.style.marginRight = `${scrollbar.offsetWidth}px`;\n        }\n        else {\n            // Reset all styles that may have been touched.\n            outer.style.width = '100%';\n            this._innerElement.style.marginRight = '';\n            outer.style.paddingRight = '0';\n            outer.style.boxSizing = '';\n        }\n    }\n    /**\n     * Add listeners for viewport, contents and the virtual scrollbar.\n     */\n    _addListeners() {\n        if (this.viewModel.windowingActive) {\n            if (!this._itemsResizeObserver) {\n                this._itemsResizeObserver = new ResizeObserver(this._onItemResize.bind(this));\n            }\n            for (const widget of this.layout.widgets) {\n                this._itemsResizeObserver.observe(widget.node);\n                widget.disposed.connect(() => { var _a; return (_a = this._itemsResizeObserver) === null || _a === void 0 ? void 0 : _a.unobserve(widget.node); });\n            }\n            this._outerElement.addEventListener('scroll', this, passiveIfSupported);\n            this._scrollbarResizeObserver = new ResizeObserver(this._adjustDimensionsForScrollbar.bind(this));\n            this._scrollbarResizeObserver.observe(this._outerElement);\n            this._scrollbarResizeObserver.observe(this._scrollbarElement);\n        }\n        else {\n            if (!this._areaResizeObserver) {\n                this._areaResizeObserver = new ResizeObserver(this._onAreaResize.bind(this));\n                this._areaResizeObserver.observe(this._innerElement);\n            }\n        }\n    }\n    /**\n     * Turn off windowing related styles in the viewport.\n     */\n    _applyNoWindowingStyles() {\n        this._viewport.style.position = 'relative';\n        this._viewport.style.top = '0px';\n        this._viewport.style.minHeight = '';\n        this._innerElement.style.height = '';\n    }\n    /**\n     * Turn on windowing related styles in the viewport.\n     */\n    _applyWindowingStyles() {\n        this._viewport.style.position = 'absolute';\n    }\n    /**\n     * Remove listeners for viewport and contents (but not the virtual scrollbar).\n     */\n    _removeListeners() {\n        var _a, _b, _c;\n        this._outerElement.removeEventListener('scroll', this);\n        (_a = this._areaResizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\n        this._areaResizeObserver = null;\n        (_b = this._itemsResizeObserver) === null || _b === void 0 ? void 0 : _b.disconnect();\n        this._itemsResizeObserver = null;\n        (_c = this._scrollbarResizeObserver) === null || _c === void 0 ? void 0 : _c.disconnect();\n        this._scrollbarResizeObserver = null;\n    }\n    /**\n     * Update viewport and DOM state.\n     */\n    _update() {\n        var _a;\n        if (this.isDisposed || !this.layout) {\n            return;\n        }\n        const newWindowIndex = this.viewModel.getRangeToRender();\n        if (newWindowIndex !== null) {\n            const [startIndex, stopIndex, firstVisibleIndex, lastVisibleIndex] = newWindowIndex;\n            if (this.scrollbar) {\n                const scrollbarItems = this._renderScrollbar();\n                const first = scrollbarItems[firstVisibleIndex];\n                const last = scrollbarItems[lastVisibleIndex];\n                this._viewportIndicator.style.top = first.offsetTop - 1 + 'px';\n                this._viewportIndicator.style.height =\n                    last.offsetTop - first.offsetTop + last.offsetHeight + 'px';\n            }\n            const toAdd = [];\n            if (stopIndex >= 0) {\n                for (let index = startIndex; index <= stopIndex; index++) {\n                    const widget = this.viewModel.widgetRenderer(index);\n                    widget.dataset.windowedListIndex = `${index}`;\n                    toAdd.push(widget);\n                }\n            }\n            const nWidgets = this.layout.widgets.length;\n            // Remove not needed widgets\n            for (let itemIdx = nWidgets - 1; itemIdx >= 0; itemIdx--) {\n                if (!toAdd.includes(this.layout.widgets[itemIdx])) {\n                    (_a = this._itemsResizeObserver) === null || _a === void 0 ? void 0 : _a.unobserve(this.layout.widgets[itemIdx].node);\n                    this.layout.removeWidget(this.layout.widgets[itemIdx]);\n                }\n            }\n            for (let index = 0; index < toAdd.length; index++) {\n                const item = toAdd[index];\n                if (this._itemsResizeObserver && !this.layout.widgets.includes(item)) {\n                    this._itemsResizeObserver.observe(item.node);\n                    item.disposed.connect(() => { var _a; return (_a = this._itemsResizeObserver) === null || _a === void 0 ? void 0 : _a.unobserve(item.node); });\n                }\n                // The widget may have moved due to drag-and-drop\n                this.layout.insertWidget(index, item);\n            }\n            if (this.viewModel.windowingActive) {\n                if (stopIndex >= 0) {\n                    // Read this value after creating the cells.\n                    // So their actual sizes are taken into account\n                    this._updateTotalSize();\n                    // Update position of window container\n                    let [top, _minHeight] = this.viewModel.getSpan(startIndex, stopIndex);\n                    this._viewport.style.transform = `translateY(${top}px)`;\n                }\n                else {\n                    // Update inner container height\n                    this._innerElement.style.height = `0px`;\n                    // Update position of viewport node\n                    this._viewport.style.top = `0px`;\n                    this._viewport.style.minHeight = `0px`;\n                }\n                // Update scroll\n                if (this._scrollUpdateWasRequested) {\n                    this._outerElement.scrollTop = this.viewModel.scrollOffset;\n                    this._scrollUpdateWasRequested = false;\n                }\n            }\n        }\n        let index2 = -1;\n        for (const w of this._viewport.children) {\n            const currentIdx = parseInt(w.dataset.windowedListIndex, 10);\n            if (currentIdx < index2) {\n                throw new Error('Inconsistent dataset index');\n            }\n            else {\n                index2 = currentIdx;\n            }\n        }\n    }\n    /**\n     * Handle viewport area resize.\n     */\n    _onAreaResize(_entries) {\n        this._scrollBackToItemOnResize();\n    }\n    /**\n     * Handle viewport content (i.e. items) resize.\n     */\n    _onItemResize(entries) {\n        this._resetScrollToItem();\n        if (this.isHidden || this.isParentHidden) {\n            return;\n        }\n        const newSizes = [];\n        for (let entry of entries) {\n            // Update size only if item is attached to the DOM\n            if (entry.target.isConnected) {\n                // Rely on the data attribute as some nodes may be hidden instead of detach\n                // to preserve state.\n                newSizes.push({\n                    index: parseInt(entry.target.dataset.windowedListIndex, 10),\n                    size: entry.borderBoxSize[0].blockSize\n                });\n            }\n        }\n        // If some sizes changed\n        if (this.viewModel.setWidgetSize(newSizes)) {\n            this._scrollBackToItemOnResize();\n            // Update the list\n            this.update();\n        }\n    }\n    /**\n     * Scroll to the item which was most recently requested.\n     *\n     * This method ensures that the app scrolls to the item even if a resize event\n     * occurs shortly after the scroll. Consider the following sequence of events:\n     *\n     * 1. User is at the nth cell, presses Shift+Enter (run current cell and\n     *    advance to next)\n     * 2. App scrolls to the next (n+1) cell\n     * 3. The nth cell finishes running and renders the output, pushing the\n     *    (n+1) cell down out of view\n     * 4. This triggers the resize observer, which calls this method and scrolls\n     *    the (n+1) cell back into view\n     *\n     * On implementation level, this is ensured by scrolling to `this._scrollToItem`\n     * which is cleared after a short timeout once the scrolling settles\n     * (see `this._resetScrollToItem()`).\n     */\n    _scrollBackToItemOnResize() {\n        if (!this._scrollToItem) {\n            return;\n        }\n        this.scrollToItem(...this._scrollToItem).catch(reason => {\n            console.log(reason);\n        });\n    }\n    /**\n     * Clear any outstanding timeout and enqueue scrolling to a new item.\n     */\n    _resetScrollToItem() {\n        if (this._resetScrollToItemTimeout) {\n            clearTimeout(this._resetScrollToItemTimeout);\n        }\n        if (this._scrollToItem) {\n            this._resetScrollToItemTimeout = window.setTimeout(() => {\n                this._scrollToItem = null;\n                if (this._isScrolling) {\n                    this._isScrolling.resolve();\n                    this._isScrolling = null;\n                }\n            }, MAXIMUM_TIME_REMAINING);\n        }\n    }\n    /**\n     * Render virtual scrollbar.\n     */\n    _renderScrollbar() {\n        var _a, _b;\n        const { node, renderer, viewModel } = this;\n        const content = node.querySelector('.jp-WindowedPanel-scrollbar-content');\n        const elements = [];\n        const getElement = (item, index) => {\n            if (item instanceof HTMLElement) {\n                return item;\n            }\n            else {\n                visitedKeys.add(item.key);\n                const props = { index };\n                const cachedItem = this._scrollbarItems[item.key];\n                if (cachedItem && !cachedItem.isDisposed) {\n                    return cachedItem.render(props);\n                }\n                else {\n                    this._scrollbarItems[item.key] = item;\n                    const element = item.render(props);\n                    return element;\n                }\n            }\n        };\n        const list = viewModel.itemsList;\n        const count = (_a = list === null || list === void 0 ? void 0 : list.length) !== null && _a !== void 0 ? _a : viewModel.widgetCount;\n        const visitedKeys = new Set();\n        for (let index = 0; index < count; index += 1) {\n            const model = (_b = list === null || list === void 0 ? void 0 : list.get) === null || _b === void 0 ? void 0 : _b.call(list, index);\n            const item = renderer.createScrollbarItem(this, index, model);\n            const element = getElement(item, index);\n            element.classList.add('jp-WindowedPanel-scrollbar-item');\n            element.dataset.index = `${index}`;\n            elements.push(element);\n        }\n        // dispose of any elements which are no longer in the scrollbar\n        const keysNotSeen = Object.keys(this._scrollbarItems).filter(key => !visitedKeys.has(key));\n        for (const key of keysNotSeen) {\n            this._scrollbarItems[key].dispose();\n            delete this._scrollbarItems[key];\n        }\n        const oldNodes = [...content.childNodes];\n        if (oldNodes.length !== elements.length ||\n            !oldNodes.every((node, index) => elements[index] === node)) {\n            content.replaceChildren(...elements);\n        }\n        return elements;\n    }\n    /**\n     * Handle `pointerdown` events on the virtual scrollbar.\n     */\n    _evtPointerDown(event) {\n        let target = event.target;\n        while (target && target.parentElement) {\n            if (target.hasAttribute('data-index')) {\n                const index = parseInt(target.getAttribute('data-index'), 10);\n                return void (async () => {\n                    await this.scrollToItem(index);\n                    this.jumped.emit(index);\n                })();\n            }\n            target = target.parentElement;\n        }\n    }\n    /**\n     * Handle `scrollend` events on the scroller.\n     */\n    _onScrollEnd() {\n        if (this._timerToClearScrollStatus) {\n            window.clearTimeout(this._timerToClearScrollStatus);\n        }\n        this._viewport.dataset.isScrolling = 'false';\n        if (this._requiresTotalSizeUpdate) {\n            this._updateTotalSize();\n        }\n        this._requiresTotalSizeUpdate = false;\n    }\n    /**\n     * Update the total size\n     */\n    _updateTotalSize() {\n        if (this.viewModel.windowingActive) {\n            if (this._viewport.dataset.isScrolling == 'true') {\n                // Do not update while scrolling, delay until later\n                this._requiresTotalSizeUpdate = true;\n                return;\n            }\n            const estimatedTotalHeight = this.viewModel.getEstimatedTotalSize();\n            const heightWithPadding = estimatedTotalHeight +\n                this._viewportPaddingTop +\n                this._viewportPaddingBottom;\n            // Update inner container height\n            this._innerElement.style.height = `${heightWithPadding}px`;\n        }\n    }\n}\n/**\n * Default widget size\n */\nWindowedList.DEFAULT_WIDGET_SIZE = 50;\n/**\n * Customized layout for windowed list container.\n */\nexport class WindowedLayout extends PanelLayout {\n    /**\n     * Constructor\n     */\n    constructor() {\n        super({ fitPolicy: 'set-no-constraint' });\n    }\n    /**\n     * Specialized parent type definition\n     */\n    get parent() {\n        return super.parent;\n    }\n    set parent(value) {\n        super.parent = value;\n    }\n    /**\n     * Attach a widget to the parent's DOM node.\n     *\n     * @param index - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to attach to the parent.\n     *\n     * #### Notes\n     * This method is called automatically by the panel layout at the\n     * appropriate time. It should not be called directly by user code.\n     *\n     * The default implementation adds the widgets's node to the parent's\n     * node at the proper location, and sends the appropriate attach\n     * messages to the widget if the parent is attached to the DOM.\n     *\n     * Subclasses may reimplement this method to control how the widget's\n     * node is added to the parent's node.\n     */\n    attachWidget(index, widget) {\n        // Look up the next sibling reference node.\n        let ref = this.parent.viewportNode.children[index];\n        // Send a `'before-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n        }\n        // Insert the widget's node before the sibling.\n        this.parent.viewportNode.insertBefore(widget.node, ref);\n        // Send an `'after-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n        }\n    }\n    /**\n     * Detach a widget from the parent's DOM node.\n     *\n     * @param index - The previous index of the widget in the layout.\n     *\n     * @param widget - The widget to detach from the parent.\n     *\n     * #### Notes\n     * This method is called automatically by the panel layout at the\n     * appropriate time. It should not be called directly by user code.\n     *\n     * The default implementation removes the widget's node from the\n     * parent's node, and sends the appropriate detach messages to the\n     * widget if the parent is attached to the DOM.\n     *\n     * Subclasses may reimplement this method to control how the widget's\n     * node is removed from the parent's node.\n     */\n    detachWidget(index, widget) {\n        // Send a `'before-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n        }\n        // Remove the widget's node from the parent.\n        this.parent.viewportNode.removeChild(widget.node);\n        // Send an `'after-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n        }\n    }\n    /**\n     * Move a widget in the parent's DOM node.\n     *\n     * @param fromIndex - The previous index of the widget in the layout.\n     *\n     * @param toIndex - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to move in the parent.\n     *\n     * #### Notes\n     * This method is called automatically by the panel layout at the\n     * appropriate time. It should not be called directly by user code.\n     *\n     * The default implementation moves the widget's node to the proper\n     * location in the parent's node and sends the appropriate attach and\n     * detach messages to the widget if the parent is attached to the DOM.\n     *\n     * Subclasses may reimplement this method to control how the widget's\n     * node is moved in the parent's node.\n     */\n    moveWidget(fromIndex, toIndex, widget) {\n        // Optimize move without de-/attaching as motion appends with parent attached\n        // Case fromIndex === toIndex, already checked in PanelLayout.insertWidget\n        // Look up the next sibling reference node.\n        let ref = this.parent.viewportNode.children[toIndex];\n        if (fromIndex < toIndex) {\n            ref.insertAdjacentElement('afterend', widget.node);\n        }\n        else {\n            ref.insertAdjacentElement('beforebegin', widget.node);\n        }\n    }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     *\n     * #### Notes\n     * This is a reimplementation of the base class method,\n     * and is a no-op.\n     */\n    onUpdateRequest(msg) {\n        // This is a no-op.\n    }\n}\n/**\n * A namespace for windowed list\n */\n(function (WindowedList) {\n    /**\n     * The default renderer class for windowed lists.\n     */\n    class Renderer {\n        /**\n         * Create the outer, root element of the windowed list.\n         */\n        createOuter() {\n            return document.createElement('div');\n        }\n        /**\n         * Create the virtual scrollbar element.\n         */\n        createScrollbar() {\n            return document.createElement('ol');\n        }\n        /**\n         * Create the virtual scrollbar viewport indicator.\n         */\n        createScrollbarViewportIndicator() {\n            return document.createElement('div');\n        }\n        /**\n         * Create an individual item rendered in the scrollbar.\n         */\n        createScrollbarItem(_, index) {\n            const li = document.createElement('li');\n            li.appendChild(document.createTextNode(`${index}`));\n            return li;\n        }\n        /**\n         * Create the viewport element into which virtualized children are added.\n         */\n        createViewport() {\n            return document.createElement('div');\n        }\n    }\n    WindowedList.Renderer = Renderer;\n    /**\n     * The default renderer for windowed lists.\n     */\n    WindowedList.defaultRenderer = new Renderer();\n})(WindowedList || (WindowedList = {}));\n//# sourceMappingURL=windowedlist.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nexport * from './button';\nexport * from './collapser';\nexport * from './form';\nexport * from './htmlselect';\nexport * from './iframe';\nexport * from './inputgroup';\nexport * from './interface';\nexport * from './menu';\nexport * from './panelwithtoolbar';\nexport * from './search';\nexport * from './sidepanel';\nexport * from './spinner';\nexport * from './styling';\nexport * from './switch';\nexport * from './table';\nexport * from './toolbar';\nexport * from './vdom';\nexport * from './windowedlist';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { h } from '@lumino/virtualdom';\nimport { CommandPalette } from '@lumino/widgets';\nimport { LabIconStyle } from '../../style';\nimport { classes } from '../../utils';\nimport { checkIcon, filterListIcon } from '../iconimports';\nconst searchHeaderIcon = filterListIcon.bindprops({\n    stylesheet: 'commandPaletteHeader',\n    className: 'jp-icon-hoverShow-content'\n});\nexport var CommandPaletteSvg;\n(function (CommandPaletteSvg) {\n    /**\n     * a modified implementation of the CommandPalette Renderer\n     */\n    class Renderer extends CommandPalette.Renderer {\n        /**\n         * Render the virtual element for a command palette header.\n         *\n         * @param data - The data to use for rendering the header.\n         *\n         * @returns A virtual element representing the header.\n         */\n        renderHeader(data) {\n            const content = this.formatHeader(data);\n            return h.li({\n                className: classes('lm-CommandPalette-header', 'jp-icon-hoverShow')\n            }, content, h.span(searchHeaderIcon));\n        }\n        /**\n         * Render the icon for a command palette item.\n         *\n         * @param data - The data to use for rendering the icon.\n         *\n         * @returns A virtual element representing the icon.\n         */\n        renderItemIcon(data) {\n            const className = this.createIconClass(data);\n            if (data.item.isToggled) {\n                // check mark icon takes precedence\n                return h.div({ className }, checkIcon, data.item.iconLabel);\n            }\n            // if data.item.icon is undefined, it will be ignored\n            return h.div({ className }, data.item.icon, data.item.iconLabel);\n        }\n        /**\n         * Create the class name for the command item icon.\n         *\n         * @param data - The data to use for the class name.\n         *\n         * @returns The full class name for the item icon.\n         */\n        createIconClass(data) {\n            let name = 'lm-CommandPalette-itemIcon';\n            return classes(LabIconStyle.styleClass({\n                stylesheet: 'commandPaletteItem'\n            }), data.item.iconClass, name);\n        }\n    }\n    CommandPaletteSvg.Renderer = Renderer;\n    CommandPaletteSvg.defaultRenderer = new Renderer();\n})(CommandPaletteSvg || (CommandPaletteSvg = {}));\n//# sourceMappingURL=commandpalettesvg.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Signal } from '@lumino/signaling';\nimport { h } from '@lumino/virtualdom';\nimport { ContextMenu, Menu } from '@lumino/widgets';\nimport { LabIconStyle } from '../../style';\nimport { classes } from '../../utils';\nimport { caretRightIcon, checkIcon } from '../iconimports';\nconst submenuIcon = caretRightIcon.bindprops({\n    stylesheet: 'menuItem'\n});\n/**\n * An object which implements a universal context menu.\n * Tweaked to use inline svg icons\n */\nexport class ContextMenuSvg extends ContextMenu {\n    /**\n     * Construct a new context menu.\n     *\n     * @param options - The options for initializing the menu.\n     */\n    constructor(options) {\n        super(options);\n        this._isDisposed = false;\n        this._opened = new Signal(this);\n        // override the vanilla .menu\n        this.menu = new MenuSvg(options);\n    }\n    /**\n     * Test whether the context menu is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * A signal fired when the context menu is opened.\n     */\n    get opened() {\n        return this._opened;\n    }\n    /**\n     * Dispose of the resources held by the context menu.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this.menu.dispose();\n        Signal.disconnectSender(this);\n    }\n    /**\n     * Open the context menu in response to a `'contextmenu'` event.\n     *\n     * @param event - The `'contextmenu'` event of interest.\n     *\n     * @returns `true` if the menu was opened, or `false` if no items\n     *   matched the event and the menu was not opened.\n     *\n     * #### Notes\n     * This method will populate the context menu with items which match\n     * the propagation path of the event, then open the menu at the mouse\n     * position indicated by the event.\n     */\n    open(event) {\n        if (this._isDisposed) {\n            return false;\n        }\n        const hasItems = super.open(event);\n        if (hasItems) {\n            this._opened.emit();\n        }\n        return hasItems;\n    }\n}\n/**\n * a widget which displays items as a canonical menu.\n * Tweaked to use inline svg icons\n */\nexport class MenuSvg extends Menu {\n    /**\n     * construct a new menu. Overrides the default renderer\n     *\n     * @param options - The options for initializing the tab bar.\n     */\n    constructor(options) {\n        options.renderer = options.renderer || MenuSvg.defaultRenderer;\n        super(options);\n        this.addClass('jp-ThemedContainer');\n    }\n    /**\n     * insert a menu item into the menu at the specified index. Replaces the\n     * default renderer for submenus\n     *\n     * @param index - The index at which to insert the item.\n     *\n     * @param options - The options for creating the menu item.\n     *\n     * @returns The menu item added to the menu.\n     *\n     * #### Notes\n     * The index will be clamped to the bounds of the items.\n     */\n    insertItem(index, options) {\n        if (options.submenu) {\n            MenuSvg.overrideDefaultRenderer(options.submenu);\n        }\n        return super.insertItem(index, options);\n    }\n}\n(function (MenuSvg) {\n    function overrideDefaultRenderer(menu) {\n        // override renderer, if needed\n        if (menu.renderer === Menu.defaultRenderer) {\n            // cast away readonly on menu.renderer\n            menu.renderer = MenuSvg.defaultRenderer;\n        }\n        // ensure correct renderer on any submenus that get added in the future\n        const originalInsertItem = menu.insertItem.bind(menu);\n        menu.insertItem = (index, options) => {\n            if (options.submenu) {\n                MenuSvg.overrideDefaultRenderer(options.submenu);\n            }\n            return originalInsertItem(index, options);\n        };\n        // recurse through submenus\n        for (const item of menu._items) {\n            if (item.submenu) {\n                overrideDefaultRenderer(item.submenu);\n            }\n        }\n    }\n    MenuSvg.overrideDefaultRenderer = overrideDefaultRenderer;\n    /**\n     * a modified implementation of the Menu Renderer\n     */\n    class Renderer extends Menu.Renderer {\n        /**\n         * Render the icon element for a menu item.\n         *\n         * @param data - The data to use for rendering the icon.\n         *\n         * @returns A virtual element representing the item icon.\n         */\n        renderIcon(data) {\n            const className = this.createIconClass(data);\n            if (data.item.isToggled) {\n                // check mark icon takes precedence\n                return h.div({ className }, checkIcon, data.item.iconLabel);\n            }\n            // if data.item.icon is undefined, it will be ignored\n            return h.div({ className }, data.item.icon, data.item.iconLabel);\n        }\n        /**\n         * Create the class name for the menu item icon.\n         *\n         * @param data - The data to use for the class name.\n         *\n         * @returns The full class name for the item icon.\n         */\n        createIconClass(data) {\n            let name = 'lm-Menu-itemIcon';\n            if (data.item.type === 'separator') {\n                return classes(data.item.iconClass, name);\n            }\n            else {\n                return classes(LabIconStyle.styleClass({ stylesheet: 'menuItem' }), data.item.iconClass, name);\n            }\n        }\n        /**\n         * Render the submenu icon element for a menu item.\n         *\n         * @param data - The data to use for rendering the submenu icon.\n         *\n         * @returns A virtual element representing the submenu icon.\n         */\n        renderSubmenu(data) {\n            const className = 'lm-Menu-itemSubmenuIcon';\n            if (data.item.type === 'submenu') {\n                return h.div({ className }, submenuIcon);\n            }\n            else {\n                return h.div({ className });\n            }\n        }\n    }\n    MenuSvg.Renderer = Renderer;\n    MenuSvg.defaultRenderer = new Renderer();\n})(MenuSvg || (MenuSvg = {}));\n//# sourceMappingURL=menusvg.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { nullTranslator } from '@jupyterlab/translation';\nimport { hpass } from '@lumino/virtualdom';\nimport { DockPanel, TabBar, TabPanel } from '@lumino/widgets';\nimport { LabIconStyle } from '../../style';\nimport { classes } from '../../utils';\nimport { addIcon, closeIcon } from '../iconimports';\n/**\n * a widget which displays titles as a single row or column of tabs.\n * Tweaked to use an inline svg as the close icon\n */\nexport class TabBarSvg extends TabBar {\n    /**\n     * Construct a new tab bar. Overrides the default renderer.\n     *\n     * @param options - The options for initializing the tab bar.\n     */\n    constructor(options = {}) {\n        var _a;\n        super({ renderer: TabBarSvg.defaultRenderer, ...options });\n        const trans = ((_a = TabBarSvg.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n        addIcon.element({\n            container: this.addButtonNode,\n            title: trans.__('New Launcher')\n        });\n    }\n}\n/**\n * Translator object\n */\nTabBarSvg.translator = null;\n(function (TabBarSvg) {\n    /**\n     * A modified implementation of the TabBar Renderer.\n     */\n    class Renderer extends TabBar.Renderer {\n        /**\n         * Render the close icon element for a tab.\n         *\n         * @param data - The data to use for rendering the tab.\n         *\n         * @returns A virtual element representing the tab close icon.\n         */\n        renderCloseIcon(data) {\n            var _a;\n            const trans = ((_a = TabBarSvg.translator) !== null && _a !== void 0 ? _a : nullTranslator).load('jupyterlab');\n            const title = data.title.label\n                ? trans.__('Close %1', data.title.label)\n                : trans.__('Close tab');\n            const className = classes('jp-icon-hover lm-TabBar-tabCloseIcon', LabIconStyle.styleClass({\n                elementPosition: 'center',\n                height: '16px',\n                width: '16px'\n            }));\n            return hpass('div', { className, title }, closeIcon);\n        }\n    }\n    TabBarSvg.Renderer = Renderer;\n    TabBarSvg.defaultRenderer = new Renderer();\n})(TabBarSvg || (TabBarSvg = {}));\n/**\n * a widget which provides a flexible docking area for widgets.\n * Tweaked to use an inline svg as the close icon\n */\nexport class DockPanelSvg extends DockPanel {\n    /**\n     * Construct a new dock panel.\n     *\n     * @param options - The options for initializing the panel.\n     */\n    constructor(options = {}) {\n        super({\n            renderer: DockPanelSvg.defaultRenderer,\n            ...options\n        });\n    }\n}\n(function (DockPanelSvg) {\n    /**\n     * A modified implementation of the DockPanel Renderer.\n     */\n    class Renderer extends DockPanel.Renderer {\n        /**\n         * Create a new tab bar (with inline svg icons enabled\n         * for use with a dock panel.\n         *\n         * @returns A new tab bar for a dock panel.\n         */\n        createTabBar() {\n            const bar = new TabBarSvg();\n            bar.addClass('lm-DockPanel-tabBar');\n            return bar;\n        }\n    }\n    DockPanelSvg.Renderer = Renderer;\n    DockPanelSvg.defaultRenderer = new Renderer();\n})(DockPanelSvg || (DockPanelSvg = {}));\n/**\n * A widget which combines a `TabBar` and a `StackedPanel`.\n * Tweaked to use an inline svg as the close icon\n */\nexport class TabPanelSvg extends TabPanel {\n    /**\n     * Construct a new tab panel.\n     *\n     * @param options - The options for initializing the tab panel.\n     */\n    constructor(options = {}) {\n        options.renderer = options.renderer || TabBarSvg.defaultRenderer;\n        super(options);\n    }\n}\n//# sourceMappingURL=tabbarsvg.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nexport * from './commandpalettesvg';\nexport * from './menusvg';\nexport * from './tabbarsvg';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nexport * from './iconimports';\nexport * from './labicon';\nexport * from './widgets';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * The class name added to all hover boxes.\n */\nconst HOVERBOX_CLASS = 'jp-HoverBox';\n/**\n * The z-index used to hide hovering node that is scrolled out of view.\n */\nconst OUTOFVIEW_Z_INDEX = '-1000';\n/**\n * A namespace for `HoverBox` members.\n */\nexport var HoverBox;\n(function (HoverBox) {\n    /**\n     * Set the visible dimensions of a hovering box anchored to an editor cursor.\n     *\n     * @param options - The hover box geometry calculation options.\n     */\n    function setGeometry(options) {\n        const { anchor, host, node, privilege, outOfViewDisplay } = options;\n        const hostRect = host.getBoundingClientRect();\n        // Add hover box class if it does not exist.\n        if (!node.classList.contains(HOVERBOX_CLASS)) {\n            node.classList.add(HOVERBOX_CLASS);\n        }\n        // Start with the node displayed as if it was in view.\n        if (node.style.visibility) {\n            node.style.visibility = '';\n        }\n        if (node.style.zIndex === '') {\n            node.style.zIndex = '';\n        }\n        // Clear any previously set max-height.\n        node.style.maxHeight = '';\n        // Clear any programmatically set margin-top.\n        node.style.marginTop = '';\n        const style = options.style || window.getComputedStyle(node);\n        const spaceAbove = anchor.top - hostRect.top;\n        const spaceBelow = hostRect.bottom - anchor.bottom;\n        const marginTop = parseInt(style.marginTop, 10) || 0;\n        const marginLeft = parseInt(style.marginLeft, 10) || 0;\n        const minHeight = parseInt(style.minHeight, 10) || options.minHeight;\n        let maxHeight = parseInt(style.maxHeight, 10) || options.maxHeight;\n        // Determine whether to render above or below; check privilege.\n        const renderBelow = privilege === 'forceAbove'\n            ? false\n            : privilege === 'forceBelow'\n                ? true\n                : privilege === 'above'\n                    ? spaceAbove < maxHeight && spaceAbove < spaceBelow\n                    : spaceBelow >= maxHeight || spaceBelow >= spaceAbove;\n        if (renderBelow) {\n            maxHeight = Math.min(spaceBelow - marginTop, maxHeight);\n        }\n        else {\n            maxHeight = Math.min(spaceAbove, maxHeight);\n            // If the box renders above the text, its top margin is irrelevant.\n            node.style.marginTop = '0px';\n        }\n        node.style.maxHeight = `${maxHeight}px`;\n        // Make sure the box ought to be visible.\n        const withinBounds = maxHeight >= minHeight &&\n            (spaceBelow >= minHeight || spaceAbove >= minHeight);\n        if (!withinBounds) {\n            node.style.zIndex = OUTOFVIEW_Z_INDEX;\n            node.style.visibility = 'hidden';\n            return;\n        }\n        if (options.size) {\n            node.style.width = `${options.size.width}px`;\n            node.style.height = `${options.size.height}px`;\n            node.style.contain = 'strict';\n        }\n        else {\n            node.style.contain = '';\n            node.style.width = 'auto';\n            node.style.height = '';\n        }\n        // Position the box vertically.\n        const initialHeight = options.size\n            ? options.size.height\n            : node.getBoundingClientRect().height;\n        const offsetAbove = (options.offset &&\n            options.offset.vertical &&\n            options.offset.vertical.above) ||\n            0;\n        const offsetBelow = (options.offset &&\n            options.offset.vertical &&\n            options.offset.vertical.below) ||\n            0;\n        let top = renderBelow\n            ? hostRect.bottom - spaceBelow + offsetBelow\n            : hostRect.top + spaceAbove - initialHeight + offsetAbove;\n        node.style.top = `${Math.floor(top)}px`;\n        // Position the box horizontally.\n        const offsetHorizontal = (options.offset && options.offset.horizontal) || 0;\n        let left = anchor.left + offsetHorizontal;\n        node.style.left = `${Math.ceil(left)}px`;\n        let rect = node.getBoundingClientRect();\n        // Move left to fit in the window.\n        let right = rect.right;\n        if (right > window.innerWidth) {\n            left -= right - window.innerWidth;\n            right = window.innerWidth;\n            node.style.left = `${Math.ceil(left)}px`;\n        }\n        // Move right to fit in the window\n        if (left < offsetHorizontal - marginLeft) {\n            left = offsetHorizontal - marginLeft;\n            node.style.left = `${Math.ceil(left)}px`;\n        }\n        // Hide the hover box before querying the DOM for the anchor coordinates.\n        // Using z-index set directly for performance.\n        node.style.zIndex = '-1000';\n        const bottom = rect.bottom;\n        const includesLeftTop = host.contains(document.elementFromPoint(left, top));\n        const includesRightTop = host.contains(document.elementFromPoint(right, top));\n        const includesRightBottom = host.contains(document.elementFromPoint(right, bottom));\n        const includesLeftBottom = host.contains(document.elementFromPoint(left, bottom));\n        node.style.zIndex = '';\n        const topEdgeInside = includesLeftTop || includesRightTop;\n        const bottomEdgeInside = includesLeftBottom || includesRightBottom;\n        const leftEdgeInside = includesLeftTop || includesLeftBottom;\n        const rightEdgeInside = includesRightBottom || includesRightTop;\n        const height = bottom - top;\n        const width = right - left;\n        const overTheTop = top < hostRect.top;\n        const belowTheBottom = bottom > hostRect.bottom;\n        const beforeTheLeft = left + marginLeft < hostRect.left;\n        const afterTheRight = right > hostRect.right;\n        let hide = false;\n        let leftChanged = false;\n        let topChanged = false;\n        if (overTheTop) {\n            switch ((outOfViewDisplay === null || outOfViewDisplay === void 0 ? void 0 : outOfViewDisplay.top) || 'hidden-inside') {\n                case 'hidden-inside':\n                    if (!topEdgeInside) {\n                        hide = true;\n                    }\n                    break;\n                case 'hidden-outside':\n                    if (!bottomEdgeInside) {\n                        hide = true;\n                    }\n                    break;\n                case 'stick-inside':\n                    if (hostRect.top > top) {\n                        top = hostRect.top;\n                        topChanged = true;\n                    }\n                    break;\n                case 'stick-outside':\n                    if (hostRect.top > bottom) {\n                        top = hostRect.top - height;\n                        topChanged = true;\n                    }\n                    break;\n            }\n        }\n        if (belowTheBottom) {\n            switch ((outOfViewDisplay === null || outOfViewDisplay === void 0 ? void 0 : outOfViewDisplay.bottom) || 'hidden-outside') {\n                case 'hidden-inside':\n                    if (!bottomEdgeInside) {\n                        hide = true;\n                    }\n                    break;\n                case 'hidden-outside':\n                    if (!topEdgeInside) {\n                        hide = true;\n                    }\n                    break;\n                case 'stick-inside':\n                    if (hostRect.bottom < bottom) {\n                        top = hostRect.bottom - height;\n                        topChanged = true;\n                    }\n                    break;\n                case 'stick-outside':\n                    if (hostRect.bottom < top) {\n                        top = hostRect.bottom;\n                        topChanged = true;\n                    }\n                    break;\n            }\n        }\n        if (beforeTheLeft) {\n            switch ((outOfViewDisplay === null || outOfViewDisplay === void 0 ? void 0 : outOfViewDisplay.left) || 'hidden-inside') {\n                case 'hidden-inside':\n                    if (!leftEdgeInside) {\n                        hide = true;\n                    }\n                    break;\n                case 'hidden-outside':\n                    if (!rightEdgeInside) {\n                        hide = true;\n                    }\n                    break;\n                case 'stick-inside':\n                    if (hostRect.left > left + marginLeft) {\n                        left = hostRect.left - marginLeft;\n                        leftChanged = true;\n                    }\n                    break;\n                case 'stick-outside':\n                    if (hostRect.left > right) {\n                        left = hostRect.left - marginLeft - width;\n                        leftChanged = true;\n                    }\n                    break;\n            }\n        }\n        if (afterTheRight) {\n            switch ((outOfViewDisplay === null || outOfViewDisplay === void 0 ? void 0 : outOfViewDisplay.right) || 'hidden-outside') {\n                case 'hidden-inside':\n                    if (!rightEdgeInside) {\n                        hide = true;\n                    }\n                    break;\n                case 'hidden-outside':\n                    if (!leftEdgeInside) {\n                        hide = true;\n                    }\n                    break;\n                case 'stick-inside':\n                    if (hostRect.right < right) {\n                        left = hostRect.right - width;\n                        leftChanged = true;\n                    }\n                    break;\n                case 'stick-outside':\n                    if (hostRect.right < left) {\n                        left = hostRect.right;\n                        leftChanged = true;\n                    }\n                    break;\n            }\n        }\n        if (hide) {\n            node.style.zIndex = OUTOFVIEW_Z_INDEX;\n            node.style.visibility = 'hidden';\n        }\n        if (leftChanged) {\n            node.style.left = `${Math.ceil(left)}px`;\n        }\n        if (topChanged) {\n            node.style.top = `${Math.ceil(top)}px`;\n        }\n    }\n    HoverBox.setGeometry = setGeometry;\n})(HoverBox || (HoverBox = {}));\n//# sourceMappingURL=hoverbox.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The token for the form component registry.\n */\nexport const IFormRendererRegistry = new Token('@jupyterlab/ui-components:IFormRendererRegistry', 'A service for settings form renderer registration.');\n/**\n * The ILabIconManager token.\n */\nexport const ILabIconManager = new Token('@jupyterlab/ui-components:ILabIconManager', 'A service to register and request icons.');\n//# sourceMappingURL=tokens.js.map","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * A registry for property renderers used in the FormEditor component.\n */\nexport class FormRendererRegistry {\n    constructor() {\n        this._renderers = {};\n    }\n    /**\n     * Adds a renderer for a given property of a given settings plugin.\n     *\n     * The id must follow that structure `<ISettingRegistry.IPlugin.id>.<propertyName>`\n     *\n     * @param id - Unique ID for the given renderer.\n     * @param renderer - A renderer interfacing IFormRenderer.\n     */\n    addRenderer(id, renderer) {\n        if (this._renderers[id]) {\n            throw new Error(`A renderer with id '${id}' is already registered.`);\n        }\n        if (!renderer.fieldRenderer && !renderer.widgetRenderer) {\n            throw new Error(`The component for '${id}' cannot be registered as it does not define 'fieldRenderer' nor 'widgetRenderer'.`);\n        }\n        const splitPosition = id.lastIndexOf('.');\n        const pluginId = id.substring(0, splitPosition);\n        const propertyName = id.substring(splitPosition + 1);\n        if (pluginId.length == 0 || propertyName.length == 0) {\n            throw new Error(`Form renderer id must follows the structure '<ISettingRegistry.IPlugin.id>.<propertyName>'; got ${id}.`);\n        }\n        this._renderers[id] = renderer;\n    }\n    /**\n     * Returns all registered renderers in dictionary form.\n     * @returns - A dictionary that maps an id to a renderer.\n     */\n    get renderers() {\n        return this._renderers;\n    }\n    /**\n     * Returns the renderer for the given id\n     * @param id - The unique id for the renderer.\n     * @returns - A renderer interfacing IFormRenderer.\n     */\n    getRenderer(id) {\n        return this._renderers[id];\n    }\n}\n//# sourceMappingURL=FormRendererRegistry.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module ui-components\n */\nexport * from './components';\nexport * from './icon';\nexport * from './hoverbox';\nexport * from './tokens';\nexport * from './utils';\nexport * from './FormRendererRegistry';\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\n\nimport './base.css';\n","/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module vega5-extension\n */\nimport { Widget } from '@lumino/widgets';\n/**\n * The CSS class to add to the Vega and Vega-Lite widget.\n */\nconst VEGA_COMMON_CLASS = 'jp-RenderedVegaCommon5';\n/**\n * The CSS class to add to the Vega.\n */\nconst VEGA_CLASS = 'jp-RenderedVega5';\n/**\n * The CSS class to add to the Vega-Lite.\n */\nconst VEGALITE_CLASS = 'jp-RenderedVegaLite';\n/**\n * The MIME type for Vega.\n *\n * #### Notes\n * The version of this follows the major version of Vega.\n */\nexport const VEGA_MIME_TYPE = 'application/vnd.vega.v5+json';\n/**\n * The MIME type for Vega-Lite.\n *\n * #### Notes\n * The version of this follows the major version of Vega-Lite.\n */\nexport const VEGALITE3_MIME_TYPE = 'application/vnd.vegalite.v3+json';\n/**\n * The MIME type for Vega-Lite.\n *\n * #### Notes\n * The version of this follows the major version of Vega-Lite.\n */\nexport const VEGALITE4_MIME_TYPE = 'application/vnd.vegalite.v4+json';\n/**\n * The MIME type for Vega-Lite.\n *\n * #### Notes\n * The version of this follows the major version of Vega-Lite.\n */\nexport const VEGALITE5_MIME_TYPE = 'application/vnd.vegalite.v5+json';\n/**\n * A widget for rendering Vega or Vega-Lite data, for usage with rendermime.\n */\nexport class RenderedVega extends Widget {\n    /**\n     * Create a new widget for rendering Vega/Vega-Lite.\n     */\n    constructor(options) {\n        super();\n        this._mimeType = options.mimeType;\n        this._resolver = options.resolver;\n        this.addClass(VEGA_COMMON_CLASS);\n        this.addClass(this._mimeType === VEGA_MIME_TYPE ? VEGA_CLASS : VEGALITE_CLASS);\n    }\n    /**\n     * Render Vega/Vega-Lite into this widget's node.\n     */\n    async renderModel(model) {\n        const spec = model.data[this._mimeType];\n        if (spec === undefined) {\n            return;\n        }\n        const metadata = model.metadata[this._mimeType];\n        const embedOptions = metadata && metadata.embed_options ? metadata.embed_options : {};\n        // If the JupyterLab theme is dark, render this using a dark Vega theme.\n        let bodyThemeDark = document.body.dataset.jpThemeLight === 'false';\n        if (bodyThemeDark) {\n            embedOptions.theme = 'dark';\n        }\n        const mode = this._mimeType === VEGA_MIME_TYPE ? 'vega' : 'vega-lite';\n        const vega = Private.vega != null ? Private.vega : await Private.ensureVega();\n        const el = document.createElement('div');\n        // clear the output before attaching a chart\n        this.node.textContent = '';\n        this.node.appendChild(el);\n        if (this._result) {\n            this._result.finalize();\n        }\n        const loader = vega.vega.loader({\n            http: { credentials: 'same-origin' }\n        });\n        const sanitize = async (uri, options) => {\n            // Use the resolver for any URIs it wants to handle\n            const resolver = this._resolver;\n            if ((resolver === null || resolver === void 0 ? void 0 : resolver.isLocal) && resolver.isLocal(uri)) {\n                const absPath = await resolver.resolveUrl(uri);\n                uri = await resolver.getDownloadUrl(absPath);\n            }\n            return loader.sanitize(uri, options);\n        };\n        this._result = await vega.default(el, spec, {\n            actions: true,\n            defaultStyle: true,\n            ...embedOptions,\n            mode,\n            loader: { ...loader, sanitize }\n        });\n        if (model.data['image/png']) {\n            return;\n        }\n        // Add png representation of vega chart to output\n        const imageURL = await this._result.view.toImageURL('png', typeof embedOptions.scaleFactor === 'number'\n            ? embedOptions.scaleFactor\n            : embedOptions.scaleFactor\n                ? embedOptions.scaleFactor.png\n                : embedOptions.scaleFactor);\n        model.setData({\n            data: { ...model.data, 'image/png': imageURL.split(',')[1] }\n        });\n    }\n    dispose() {\n        if (this._result) {\n            this._result.finalize();\n        }\n        super.dispose();\n    }\n}\n/**\n * A mime renderer factory for vega data.\n */\nexport const rendererFactory = {\n    safe: true,\n    mimeTypes: [\n        VEGA_MIME_TYPE,\n        VEGALITE3_MIME_TYPE,\n        VEGALITE4_MIME_TYPE,\n        VEGALITE5_MIME_TYPE\n    ],\n    createRenderer: options => new RenderedVega(options)\n};\nconst extension = {\n    id: '@jupyterlab/vega5-extension:factory',\n    description: 'Provides a renderer for Vega 5 and Vega-Lite 3 to 5 content.',\n    rendererFactory,\n    rank: 57,\n    dataType: 'json',\n    documentWidgetFactoryOptions: [\n        {\n            name: 'Vega5',\n            primaryFileType: 'vega5',\n            fileTypes: ['vega5', 'json'],\n            defaultFor: ['vega5']\n        },\n        {\n            name: 'Vega-Lite5',\n            primaryFileType: 'vega-lite5',\n            fileTypes: ['vega-lite3', 'vega-lite4', 'vega-lite5', 'json'],\n            defaultFor: ['vega-lite3', 'vega-lite4', 'vega-lite5']\n        }\n    ],\n    fileTypes: [\n        {\n            mimeTypes: [VEGA_MIME_TYPE],\n            name: 'vega5',\n            extensions: ['.vg', '.vg.json', '.vega'],\n            icon: 'ui-components:vega'\n        },\n        {\n            mimeTypes: [VEGALITE5_MIME_TYPE],\n            name: 'vega-lite5',\n            extensions: ['.vl', '.vl.json', '.vegalite'],\n            icon: 'ui-components:vega'\n        },\n        {\n            mimeTypes: [VEGALITE4_MIME_TYPE],\n            name: 'vega-lite4',\n            extensions: [],\n            icon: 'ui-components:vega'\n        },\n        {\n            mimeTypes: [VEGALITE3_MIME_TYPE],\n            name: 'vega-lite3',\n            extensions: [],\n            icon: 'ui-components:vega'\n        }\n    ]\n};\nexport default extension;\n/**\n * A namespace for private module data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Lazy-load and cache the vega-embed library\n     */\n    function ensureVega() {\n        if (Private.vegaReady) {\n            return Private.vegaReady;\n        }\n        Private.vegaReady = import('vega-embed');\n        return Private.vegaReady;\n    }\n    Private.ensureVega = ensureVega;\n})(Private || (Private = {}));\n//# sourceMappingURL=index.js.map","\n      import API from \"!../../builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../builder/node_modules/css-loader/dist/cjs.js!./base.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\n/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */\nimport '@lumino/widgets/style/index.js';\n\nimport './base.css';\n","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nimport { Poll } from '@lumino/polling';\nimport { Signal } from '@lumino/signaling';\n/**\n * The default duration of the auto-refresh in ms\n */\nconst DEFAULT_REFRESH_INTERVAL = 10000;\n/**\n * An implementation of a workspaces model.\n */\nexport class WorkspacesModel {\n    constructor(options) {\n        var _a;\n        this._refreshed = new Signal(this);\n        this._isDisposed = false;\n        this._workspaceData = {\n            ids: [],\n            values: []\n        };\n        this._manager = options.manager;\n        const refreshInterval = options.refreshInterval || DEFAULT_REFRESH_INTERVAL;\n        this._poll = new Poll({\n            auto: (_a = options.auto) !== null && _a !== void 0 ? _a : true,\n            name: '@jupyterlab/workspaces:Model',\n            factory: () => this._fetchList(),\n            frequency: {\n                interval: refreshInterval,\n                backoff: true,\n                max: 300 * 1000\n            },\n            standby: options.refreshStandby || 'when-hidden'\n        });\n    }\n    /**\n     * The list of available workspaces.\n     */\n    get workspaces() {\n        return this._workspaceData.values;\n    }\n    /**\n     * The list of workspace identifiers.\n     */\n    get identifiers() {\n        return this._workspaceData.ids;\n    }\n    /**\n     * Create an empty workspace.\n     */\n    async create(workspaceId) {\n        await this._manager.save(workspaceId, {\n            metadata: { id: workspaceId },\n            data: {}\n        });\n        await this.refresh();\n    }\n    /**\n     * A signal emitted when the workspaces list is refreshed.\n     */\n    get refreshed() {\n        return this._refreshed;\n    }\n    /**\n     * Force a refresh of the workspaces list.\n     */\n    async refresh() {\n        await this._poll.refresh();\n        await this._poll.tick;\n    }\n    /**\n     * Rename a workspace.\n     */\n    async rename(workspaceId, newName) {\n        const workspace = await this._manager.fetch(workspaceId);\n        workspace.metadata.id = newName;\n        await this._manager.save(newName, workspace);\n        await this._manager.remove(workspaceId);\n        await this.refresh();\n    }\n    /**\n     * Reset a workspace.\n     */\n    async reset(workspaceId) {\n        const workspace = await this._manager.fetch(workspaceId);\n        workspace.data = {};\n        await this._manager.save(workspaceId, workspace);\n        await this.refresh();\n    }\n    /**\n     * Remove a workspace.\n     */\n    async remove(workspaceId) {\n        await this._manager.remove(workspaceId);\n        await this.refresh();\n    }\n    /**\n     * Save workspace under a different name.\n     */\n    async saveAs(workspaceId, newName) {\n        const data = await this._manager.fetch(workspaceId);\n        data.metadata.id = newName;\n        await this._manager.save(newName, data);\n        await this.refresh();\n    }\n    /**\n     * Get whether the model is disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the model.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._poll.dispose();\n        Signal.clearData(this);\n    }\n    async _fetchList() {\n        this._workspaceData = await this._manager.list();\n        this._refreshed.emit(void 0);\n    }\n}\n//# sourceMappingURL=model.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\nimport { Token } from '@lumino/coreutils';\n/**\n * The token that provides the identifiers of workspace commands for reuse.\n */\nexport const IWorkspaceCommands = new Token('@jupyterlab/workspaces:IWorkspaceCommands', 'Provides identifiers of workspace commands.');\n/**\n * The token that provides the identifiers of workspace commands for reuse.\n */\nexport const IWorkspacesModel = new Token('@jupyterlab/workspaces:IWorkspacesModel', 'Provides a model for available workspaces.');\n//# sourceMappingURL=tokens.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * @packageDocumentation\n * @module workspaces\n */\nexport * from './model';\nexport * from './tokens';\n//# sourceMappingURL=index.js.map","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for array-specific algorithms.\n */\nvar ArrayExt;\n(function (ArrayExt) {\n    /**\n     * Find the index of the first occurrence of a value in an array.\n     *\n     * @param array - The array-like object to search.\n     *\n     * @param value - The value to locate in the array. Values are\n     *   compared using strict `===` equality.\n     *\n     * @param start - The index of the first element in the range to be\n     *   searched, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   searched, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @returns The index of the first occurrence of the value, or `-1`\n     *   if the value is not found.\n     *\n     * #### Notes\n     * If `stop < start` the search will wrap at the end of the array.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Undefined Behavior\n     * A `start` or `stop` which is non-integral.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * let data = ['one', 'two', 'three', 'four', 'one'];\n     * ArrayExt.firstIndexOf(data, 'red');        // -1\n     * ArrayExt.firstIndexOf(data, 'one');        // 0\n     * ArrayExt.firstIndexOf(data, 'one', 1);     // 4\n     * ArrayExt.firstIndexOf(data, 'two', 2);     // -1\n     * ArrayExt.firstIndexOf(data, 'two', 2, 1);  // 1\n     * ```\n     */\n    function firstIndexOf(array, value, start = 0, stop = -1) {\n        let n = array.length;\n        if (n === 0) {\n            return -1;\n        }\n        if (start < 0) {\n            start = Math.max(0, start + n);\n        }\n        else {\n            start = Math.min(start, n - 1);\n        }\n        if (stop < 0) {\n            stop = Math.max(0, stop + n);\n        }\n        else {\n            stop = Math.min(stop, n - 1);\n        }\n        let span;\n        if (stop < start) {\n            span = stop + 1 + (n - start);\n        }\n        else {\n            span = stop - start + 1;\n        }\n        for (let i = 0; i < span; ++i) {\n            let j = (start + i) % n;\n            if (array[j] === value) {\n                return j;\n            }\n        }\n        return -1;\n    }\n    ArrayExt.firstIndexOf = firstIndexOf;\n    /**\n     * Find the index of the last occurrence of a value in an array.\n     *\n     * @param array - The array-like object to search.\n     *\n     * @param value - The value to locate in the array. Values are\n     *   compared using strict `===` equality.\n     *\n     * @param start - The index of the first element in the range to be\n     *   searched, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   searched, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @returns The index of the last occurrence of the value, or `-1`\n     *   if the value is not found.\n     *\n     * #### Notes\n     * If `start < stop` the search will wrap at the front of the array.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Undefined Behavior\n     * A `start` or `stop` which is non-integral.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * let data = ['one', 'two', 'three', 'four', 'one'];\n     * ArrayExt.lastIndexOf(data, 'red');        // -1\n     * ArrayExt.lastIndexOf(data, 'one');        // 4\n     * ArrayExt.lastIndexOf(data, 'one', 1);     // 0\n     * ArrayExt.lastIndexOf(data, 'two', 0);     // -1\n     * ArrayExt.lastIndexOf(data, 'two', 0, 1);  // 1\n     * ```\n     */\n    function lastIndexOf(array, value, start = -1, stop = 0) {\n        let n = array.length;\n        if (n === 0) {\n            return -1;\n        }\n        if (start < 0) {\n            start = Math.max(0, start + n);\n        }\n        else {\n            start = Math.min(start, n - 1);\n        }\n        if (stop < 0) {\n            stop = Math.max(0, stop + n);\n        }\n        else {\n            stop = Math.min(stop, n - 1);\n        }\n        let span;\n        if (start < stop) {\n            span = start + 1 + (n - stop);\n        }\n        else {\n            span = start - stop + 1;\n        }\n        for (let i = 0; i < span; ++i) {\n            let j = (start - i + n) % n;\n            if (array[j] === value) {\n                return j;\n            }\n        }\n        return -1;\n    }\n    ArrayExt.lastIndexOf = lastIndexOf;\n    /**\n     * Find the index of the first value which matches a predicate.\n     *\n     * @param array - The array-like object to search.\n     *\n     * @param fn - The predicate function to apply to the values.\n     *\n     * @param start - The index of the first element in the range to be\n     *   searched, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   searched, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @returns The index of the first matching value, or `-1` if no\n     *   matching value is found.\n     *\n     * #### Notes\n     * If `stop < start` the search will wrap at the end of the array.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Undefined Behavior\n     * A `start` or `stop` which is non-integral.\n     *\n     * Modifying the length of the array while searching.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * function isEven(value: number): boolean {\n     *   return value % 2 === 0;\n     * }\n     *\n     * let data = [1, 2, 3, 4, 3, 2, 1];\n     * ArrayExt.findFirstIndex(data, isEven);       // 1\n     * ArrayExt.findFirstIndex(data, isEven, 4);    // 5\n     * ArrayExt.findFirstIndex(data, isEven, 6);    // -1\n     * ArrayExt.findFirstIndex(data, isEven, 6, 5); // 1\n     * ```\n     */\n    function findFirstIndex(array, fn, start = 0, stop = -1) {\n        let n = array.length;\n        if (n === 0) {\n            return -1;\n        }\n        if (start < 0) {\n            start = Math.max(0, start + n);\n        }\n        else {\n            start = Math.min(start, n - 1);\n        }\n        if (stop < 0) {\n            stop = Math.max(0, stop + n);\n        }\n        else {\n            stop = Math.min(stop, n - 1);\n        }\n        let span;\n        if (stop < start) {\n            span = stop + 1 + (n - start);\n        }\n        else {\n            span = stop - start + 1;\n        }\n        for (let i = 0; i < span; ++i) {\n            let j = (start + i) % n;\n            if (fn(array[j], j)) {\n                return j;\n            }\n        }\n        return -1;\n    }\n    ArrayExt.findFirstIndex = findFirstIndex;\n    /**\n     * Find the index of the last value which matches a predicate.\n     *\n     * @param array - The array-like object to search.\n     *\n     * @param fn - The predicate function to apply to the values.\n     *\n     * @param start - The index of the first element in the range to be\n     *   searched, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   searched, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @returns The index of the last matching value, or `-1` if no\n     *   matching value is found.\n     *\n     * #### Notes\n     * If `start < stop` the search will wrap at the front of the array.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Undefined Behavior\n     * A `start` or `stop` which is non-integral.\n     *\n     * Modifying the length of the array while searching.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * function isEven(value: number): boolean {\n     *   return value % 2 === 0;\n     * }\n     *\n     * let data = [1, 2, 3, 4, 3, 2, 1];\n     * ArrayExt.findLastIndex(data, isEven);        // 5\n     * ArrayExt.findLastIndex(data, isEven, 4);     // 3\n     * ArrayExt.findLastIndex(data, isEven, 0);     // -1\n     * ArrayExt.findLastIndex(data, isEven, 0, 1);  // 5\n     * ```\n     */\n    function findLastIndex(array, fn, start = -1, stop = 0) {\n        let n = array.length;\n        if (n === 0) {\n            return -1;\n        }\n        if (start < 0) {\n            start = Math.max(0, start + n);\n        }\n        else {\n            start = Math.min(start, n - 1);\n        }\n        if (stop < 0) {\n            stop = Math.max(0, stop + n);\n        }\n        else {\n            stop = Math.min(stop, n - 1);\n        }\n        let d;\n        if (start < stop) {\n            d = start + 1 + (n - stop);\n        }\n        else {\n            d = start - stop + 1;\n        }\n        for (let i = 0; i < d; ++i) {\n            let j = (start - i + n) % n;\n            if (fn(array[j], j)) {\n                return j;\n            }\n        }\n        return -1;\n    }\n    ArrayExt.findLastIndex = findLastIndex;\n    /**\n     * Find the first value which matches a predicate.\n     *\n     * @param array - The array-like object to search.\n     *\n     * @param fn - The predicate function to apply to the values.\n     *\n     * @param start - The index of the first element in the range to be\n     *   searched, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   searched, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @returns The first matching value, or `undefined` if no matching\n     *   value is found.\n     *\n     * #### Notes\n     * If `stop < start` the search will wrap at the end of the array.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Undefined Behavior\n     * A `start` or `stop` which is non-integral.\n     *\n     * Modifying the length of the array while searching.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * function isEven(value: number): boolean {\n     *   return value % 2 === 0;\n     * }\n     *\n     * let data = [1, 2, 3, 4, 3, 2, 1];\n     * ArrayExt.findFirstValue(data, isEven);       // 2\n     * ArrayExt.findFirstValue(data, isEven, 2);    // 4\n     * ArrayExt.findFirstValue(data, isEven, 6);    // undefined\n     * ArrayExt.findFirstValue(data, isEven, 6, 5); // 2\n     * ```\n     */\n    function findFirstValue(array, fn, start = 0, stop = -1) {\n        let index = findFirstIndex(array, fn, start, stop);\n        return index !== -1 ? array[index] : undefined;\n    }\n    ArrayExt.findFirstValue = findFirstValue;\n    /**\n     * Find the last value which matches a predicate.\n     *\n     * @param object - The array-like object to search.\n     *\n     * @param fn - The predicate function to apply to the values.\n     *\n     * @param start - The index of the first element in the range to be\n     *   searched, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   searched, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @returns The last matching value, or `undefined` if no matching\n     *   value is found.\n     *\n     * #### Notes\n     * If `start < stop` the search will wrap at the front of the array.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Undefined Behavior\n     * A `start` or `stop` which is non-integral.\n     *\n     * Modifying the length of the array while searching.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * function isEven(value: number): boolean {\n     *   return value % 2 === 0;\n     * }\n     *\n     * let data = [1, 2, 3, 4, 3, 2, 1];\n     * ArrayExt.findLastValue(data, isEven);        // 2\n     * ArrayExt.findLastValue(data, isEven, 4);     // 4\n     * ArrayExt.findLastValue(data, isEven, 0);     // undefined\n     * ArrayExt.findLastValue(data, isEven, 0, 1);  // 2\n     * ```\n     */\n    function findLastValue(array, fn, start = -1, stop = 0) {\n        let index = findLastIndex(array, fn, start, stop);\n        return index !== -1 ? array[index] : undefined;\n    }\n    ArrayExt.findLastValue = findLastValue;\n    /**\n     * Find the index of the first element which compares `>=` to a value.\n     *\n     * @param array - The sorted array-like object to search.\n     *\n     * @param value - The value to locate in the array.\n     *\n     * @param fn - The 3-way comparison function to apply to the values.\n     *   It should return `< 0` if an element is less than a value, `0` if\n     *   an element is equal to a value, or `> 0` if an element is greater\n     *   than a value.\n     *\n     * @param start - The index of the first element in the range to be\n     *   searched, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   searched, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @returns The index of the first element which compares `>=` to the\n     *   value, or `length` if there is no such element. If the computed\n     *   index for `stop` is less than `start`, then the computed index\n     *   for `start` is returned.\n     *\n     * #### Notes\n     * The array must already be sorted in ascending order according to\n     * the comparison function.\n     *\n     * #### Complexity\n     * Logarithmic.\n     *\n     * #### Undefined Behavior\n     * Searching a range which is not sorted in ascending order.\n     *\n     * A `start` or `stop` which is non-integral.\n     *\n     * Modifying the length of the array while searching.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * function numberCmp(a: number, b: number): number {\n     *   return a - b;\n     * }\n     *\n     * let data = [0, 3, 4, 7, 7, 9];\n     * ArrayExt.lowerBound(data, 0, numberCmp);   // 0\n     * ArrayExt.lowerBound(data, 6, numberCmp);   // 3\n     * ArrayExt.lowerBound(data, 7, numberCmp);   // 3\n     * ArrayExt.lowerBound(data, -1, numberCmp);  // 0\n     * ArrayExt.lowerBound(data, 10, numberCmp);  // 6\n     * ```\n     */\n    function lowerBound(array, value, fn, start = 0, stop = -1) {\n        let n = array.length;\n        if (n === 0) {\n            return 0;\n        }\n        if (start < 0) {\n            start = Math.max(0, start + n);\n        }\n        else {\n            start = Math.min(start, n - 1);\n        }\n        if (stop < 0) {\n            stop = Math.max(0, stop + n);\n        }\n        else {\n            stop = Math.min(stop, n - 1);\n        }\n        let begin = start;\n        let span = stop - start + 1;\n        while (span > 0) {\n            let half = span >> 1;\n            let middle = begin + half;\n            if (fn(array[middle], value) < 0) {\n                begin = middle + 1;\n                span -= half + 1;\n            }\n            else {\n                span = half;\n            }\n        }\n        return begin;\n    }\n    ArrayExt.lowerBound = lowerBound;\n    /**\n     * Find the index of the first element which compares `>` than a value.\n     *\n     * @param array - The sorted array-like object to search.\n     *\n     * @param value - The value to locate in the array.\n     *\n     * @param fn - The 3-way comparison function to apply to the values.\n     *   It should return `< 0` if an element is less than a value, `0` if\n     *   an element is equal to a value, or `> 0` if an element is greater\n     *   than a value.\n     *\n     * @param start - The index of the first element in the range to be\n     *   searched, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   searched, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @returns The index of the first element which compares `>` than the\n     *   value, or `length` if there is no such element. If the computed\n     *   index for `stop` is less than `start`, then the computed index\n     *   for `start` is returned.\n     *\n     * #### Notes\n     * The array must already be sorted in ascending order according to\n     * the comparison function.\n     *\n     * #### Complexity\n     * Logarithmic.\n     *\n     * #### Undefined Behavior\n     * Searching a range which is not sorted in ascending order.\n     *\n     * A `start` or `stop` which is non-integral.\n     *\n     * Modifying the length of the array while searching.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * function numberCmp(a: number, b: number): number {\n     *   return a - b;\n     * }\n     *\n     * let data = [0, 3, 4, 7, 7, 9];\n     * ArrayExt.upperBound(data, 0, numberCmp);   // 1\n     * ArrayExt.upperBound(data, 6, numberCmp);   // 3\n     * ArrayExt.upperBound(data, 7, numberCmp);   // 5\n     * ArrayExt.upperBound(data, -1, numberCmp);  // 0\n     * ArrayExt.upperBound(data, 10, numberCmp);  // 6\n     * ```\n     */\n    function upperBound(array, value, fn, start = 0, stop = -1) {\n        let n = array.length;\n        if (n === 0) {\n            return 0;\n        }\n        if (start < 0) {\n            start = Math.max(0, start + n);\n        }\n        else {\n            start = Math.min(start, n - 1);\n        }\n        if (stop < 0) {\n            stop = Math.max(0, stop + n);\n        }\n        else {\n            stop = Math.min(stop, n - 1);\n        }\n        let begin = start;\n        let span = stop - start + 1;\n        while (span > 0) {\n            let half = span >> 1;\n            let middle = begin + half;\n            if (fn(array[middle], value) > 0) {\n                span = half;\n            }\n            else {\n                begin = middle + 1;\n                span -= half + 1;\n            }\n        }\n        return begin;\n    }\n    ArrayExt.upperBound = upperBound;\n    /**\n     * Test whether two arrays are shallowly equal.\n     *\n     * @param a - The first array-like object to compare.\n     *\n     * @param b - The second array-like object to compare.\n     *\n     * @param fn - The comparison function to apply to the elements. It\n     *   should return `true` if the elements are \"equal\". The default\n     *   compares elements using strict `===` equality.\n     *\n     * @returns Whether the two arrays are shallowly equal.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Undefined Behavior\n     * Modifying the length of the arrays while comparing.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * let d1 = [0, 3, 4, 7, 7, 9];\n     * let d2 = [0, 3, 4, 7, 7, 9];\n     * let d3 = [42];\n     * ArrayExt.shallowEqual(d1, d2);  // true\n     * ArrayExt.shallowEqual(d2, d3);  // false\n     * ```\n     */\n    function shallowEqual(a, b, fn) {\n        // Check for object identity first.\n        if (a === b) {\n            return true;\n        }\n        // Bail early if the lengths are different.\n        if (a.length !== b.length) {\n            return false;\n        }\n        // Compare each element for equality.\n        for (let i = 0, n = a.length; i < n; ++i) {\n            if (fn ? !fn(a[i], b[i]) : a[i] !== b[i]) {\n                return false;\n            }\n        }\n        // The array are shallowly equal.\n        return true;\n    }\n    ArrayExt.shallowEqual = shallowEqual;\n    /**\n     * Create a slice of an array subject to an optional step.\n     *\n     * @param array - The array-like object of interest.\n     *\n     * @param options - The options for configuring the slice.\n     *\n     * @returns A new array with the specified values.\n     *\n     * @throws An exception if the slice `step` is `0`.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Undefined Behavior\n     * A `start`, `stop`, or `step` which is non-integral.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * let data = [0, 3, 4, 7, 7, 9];\n     * ArrayExt.slice(data);                         // [0, 3, 4, 7, 7, 9]\n     * ArrayExt.slice(data, { start: 2 });           // [4, 7, 7, 9]\n     * ArrayExt.slice(data, { start: 0, stop: 4 });  // [0, 3, 4, 7]\n     * ArrayExt.slice(data, { step: 2 });            // [0, 4, 7]\n     * ArrayExt.slice(data, { step: -1 });           // [9, 7, 7, 4, 3, 0]\n     * ```\n     */\n    function slice(array, options = {}) {\n        // Extract the options.\n        let { start, stop, step } = options;\n        // Set up the `step` value.\n        if (step === undefined) {\n            step = 1;\n        }\n        // Validate the step size.\n        if (step === 0) {\n            throw new Error('Slice `step` cannot be zero.');\n        }\n        // Look up the length of the array.\n        let n = array.length;\n        // Set up the `start` value.\n        if (start === undefined) {\n            start = step < 0 ? n - 1 : 0;\n        }\n        else if (start < 0) {\n            start = Math.max(start + n, step < 0 ? -1 : 0);\n        }\n        else if (start >= n) {\n            start = step < 0 ? n - 1 : n;\n        }\n        // Set up the `stop` value.\n        if (stop === undefined) {\n            stop = step < 0 ? -1 : n;\n        }\n        else if (stop < 0) {\n            stop = Math.max(stop + n, step < 0 ? -1 : 0);\n        }\n        else if (stop >= n) {\n            stop = step < 0 ? n - 1 : n;\n        }\n        // Compute the slice length.\n        let length;\n        if ((step < 0 && stop >= start) || (step > 0 && start >= stop)) {\n            length = 0;\n        }\n        else if (step < 0) {\n            length = Math.floor((stop - start + 1) / step + 1);\n        }\n        else {\n            length = Math.floor((stop - start - 1) / step + 1);\n        }\n        // Compute the sliced result.\n        let result = [];\n        for (let i = 0; i < length; ++i) {\n            result[i] = array[start + i * step];\n        }\n        // Return the result.\n        return result;\n    }\n    ArrayExt.slice = slice;\n    /**\n     * Move an element in an array from one index to another.\n     *\n     * @param array - The mutable array-like object of interest.\n     *\n     * @param fromIndex - The index of the element to move. Negative\n     *   values are taken as an offset from the end of the array.\n     *\n     * @param toIndex - The target index of the element. Negative\n     *   values are taken as an offset from the end of the array.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Undefined Behavior\n     * A `fromIndex` or `toIndex` which is non-integral.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from from '@lumino/algorithm';\n     *\n     * let data = [0, 1, 2, 3, 4];\n     * ArrayExt.move(data, 1, 2);  // [0, 2, 1, 3, 4]\n     * ArrayExt.move(data, 4, 2);  // [0, 2, 4, 1, 3]\n     * ```\n     */\n    function move(array, fromIndex, toIndex) {\n        let n = array.length;\n        if (n <= 1) {\n            return;\n        }\n        if (fromIndex < 0) {\n            fromIndex = Math.max(0, fromIndex + n);\n        }\n        else {\n            fromIndex = Math.min(fromIndex, n - 1);\n        }\n        if (toIndex < 0) {\n            toIndex = Math.max(0, toIndex + n);\n        }\n        else {\n            toIndex = Math.min(toIndex, n - 1);\n        }\n        if (fromIndex === toIndex) {\n            return;\n        }\n        let value = array[fromIndex];\n        let d = fromIndex < toIndex ? 1 : -1;\n        for (let i = fromIndex; i !== toIndex; i += d) {\n            array[i] = array[i + d];\n        }\n        array[toIndex] = value;\n    }\n    ArrayExt.move = move;\n    /**\n     * Reverse an array in-place.\n     *\n     * @param array - The mutable array-like object of interest.\n     *\n     * @param start - The index of the first element in the range to be\n     *   reversed, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   reversed, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Undefined Behavior\n     * A `start` or  `stop` index which is non-integral.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * let data = [0, 1, 2, 3, 4];\n     * ArrayExt.reverse(data, 1, 3);  // [0, 3, 2, 1, 4]\n     * ArrayExt.reverse(data, 3);     // [0, 3, 2, 4, 1]\n     * ArrayExt.reverse(data);        // [1, 4, 2, 3, 0]\n     * ```\n     */\n    function reverse(array, start = 0, stop = -1) {\n        let n = array.length;\n        if (n <= 1) {\n            return;\n        }\n        if (start < 0) {\n            start = Math.max(0, start + n);\n        }\n        else {\n            start = Math.min(start, n - 1);\n        }\n        if (stop < 0) {\n            stop = Math.max(0, stop + n);\n        }\n        else {\n            stop = Math.min(stop, n - 1);\n        }\n        while (start < stop) {\n            let a = array[start];\n            let b = array[stop];\n            array[start++] = b;\n            array[stop--] = a;\n        }\n    }\n    ArrayExt.reverse = reverse;\n    /**\n     * Rotate the elements of an array in-place.\n     *\n     * @param array - The mutable array-like object of interest.\n     *\n     * @param delta - The amount of rotation to apply to the elements. A\n     *   positive value will rotate the elements to the left. A negative\n     *   value will rotate the elements to the right.\n     *\n     * @param start - The index of the first element in the range to be\n     *   rotated, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   rotated, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Undefined Behavior\n     * A `delta`, `start`, or `stop` which is non-integral.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * let data = [0, 1, 2, 3, 4];\n     * ArrayExt.rotate(data, 2);        // [2, 3, 4, 0, 1]\n     * ArrayExt.rotate(data, -2);       // [0, 1, 2, 3, 4]\n     * ArrayExt.rotate(data, 10);       // [0, 1, 2, 3, 4]\n     * ArrayExt.rotate(data, 9);        // [4, 0, 1, 2, 3]\n     * ArrayExt.rotate(data, 2, 1, 3);  // [4, 2, 0, 1, 3]\n     * ```\n     */\n    function rotate(array, delta, start = 0, stop = -1) {\n        let n = array.length;\n        if (n <= 1) {\n            return;\n        }\n        if (start < 0) {\n            start = Math.max(0, start + n);\n        }\n        else {\n            start = Math.min(start, n - 1);\n        }\n        if (stop < 0) {\n            stop = Math.max(0, stop + n);\n        }\n        else {\n            stop = Math.min(stop, n - 1);\n        }\n        if (start >= stop) {\n            return;\n        }\n        let length = stop - start + 1;\n        if (delta > 0) {\n            delta = delta % length;\n        }\n        else if (delta < 0) {\n            delta = ((delta % length) + length) % length;\n        }\n        if (delta === 0) {\n            return;\n        }\n        let pivot = start + delta;\n        reverse(array, start, pivot - 1);\n        reverse(array, pivot, stop);\n        reverse(array, start, stop);\n    }\n    ArrayExt.rotate = rotate;\n    /**\n     * Fill an array with a static value.\n     *\n     * @param array - The mutable array-like object to fill.\n     *\n     * @param value - The static value to use to fill the array.\n     *\n     * @param start - The index of the first element in the range to be\n     *   filled, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   filled, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * #### Notes\n     * If `stop < start` the fill will wrap at the end of the array.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Undefined Behavior\n     * A `start` or `stop` which is non-integral.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * let data = ['one', 'two', 'three', 'four'];\n     * ArrayExt.fill(data, 'r');        // ['r', 'r', 'r', 'r']\n     * ArrayExt.fill(data, 'g', 1);     // ['r', 'g', 'g', 'g']\n     * ArrayExt.fill(data, 'b', 2, 3);  // ['r', 'g', 'b', 'b']\n     * ArrayExt.fill(data, 'z', 3, 1);  // ['z', 'z', 'b', 'z']\n     * ```\n     */\n    function fill(array, value, start = 0, stop = -1) {\n        let n = array.length;\n        if (n === 0) {\n            return;\n        }\n        if (start < 0) {\n            start = Math.max(0, start + n);\n        }\n        else {\n            start = Math.min(start, n - 1);\n        }\n        if (stop < 0) {\n            stop = Math.max(0, stop + n);\n        }\n        else {\n            stop = Math.min(stop, n - 1);\n        }\n        let span;\n        if (stop < start) {\n            span = stop + 1 + (n - start);\n        }\n        else {\n            span = stop - start + 1;\n        }\n        for (let i = 0; i < span; ++i) {\n            array[(start + i) % n] = value;\n        }\n    }\n    ArrayExt.fill = fill;\n    /**\n     * Insert a value into an array at a specific index.\n     *\n     * @param array - The array of interest.\n     *\n     * @param index - The index at which to insert the value. Negative\n     *   values are taken as an offset from the end of the array.\n     *\n     * @param value - The value to set at the specified index.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Undefined Behavior\n     * An `index` which is non-integral.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * let data = [0, 1, 2];\n     * ArrayExt.insert(data, 0, -1);  // [-1, 0, 1, 2]\n     * ArrayExt.insert(data, 2, 12);  // [-1, 0, 12, 1, 2]\n     * ArrayExt.insert(data, -1, 7);  // [-1, 0, 12, 1, 7, 2]\n     * ArrayExt.insert(data, 6, 19);  // [-1, 0, 12, 1, 7, 2, 19]\n     * ```\n     */\n    function insert(array, index, value) {\n        let n = array.length;\n        if (index < 0) {\n            index = Math.max(0, index + n);\n        }\n        else {\n            index = Math.min(index, n);\n        }\n        for (let i = n; i > index; --i) {\n            array[i] = array[i - 1];\n        }\n        array[index] = value;\n    }\n    ArrayExt.insert = insert;\n    /**\n     * Remove and return a value at a specific index in an array.\n     *\n     * @param array - The array of interest.\n     *\n     * @param index - The index of the value to remove. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @returns The value at the specified index, or `undefined` if the\n     *   index is out of range.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Undefined Behavior\n     * An `index` which is non-integral.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * let data = [0, 12, 23, 39, 14, 12, 75];\n     * ArrayExt.removeAt(data, 2);   // 23\n     * ArrayExt.removeAt(data, -2);  // 12\n     * ArrayExt.removeAt(data, 10);  // undefined;\n     * ```\n     */\n    function removeAt(array, index) {\n        let n = array.length;\n        if (index < 0) {\n            index += n;\n        }\n        if (index < 0 || index >= n) {\n            return undefined;\n        }\n        let value = array[index];\n        for (let i = index + 1; i < n; ++i) {\n            array[i - 1] = array[i];\n        }\n        array.length = n - 1;\n        return value;\n    }\n    ArrayExt.removeAt = removeAt;\n    /**\n     * Remove the first occurrence of a value from an array.\n     *\n     * @param array - The array of interest.\n     *\n     * @param value - The value to remove from the array. Values are\n     *   compared using strict `===` equality.\n     *\n     * @param start - The index of the first element in the range to be\n     *   searched, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   searched, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @returns The index of the removed value, or `-1` if the value\n     *   is not contained in the array.\n     *\n     * #### Notes\n     * If `stop < start` the search will wrap at the end of the array.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * let data = [0, 12, 23, 39, 14, 12, 75];\n     * ArrayExt.removeFirstOf(data, 12);        // 1\n     * ArrayExt.removeFirstOf(data, 17);        // -1\n     * ArrayExt.removeFirstOf(data, 39, 3);     // -1\n     * ArrayExt.removeFirstOf(data, 39, 3, 2);  // 2\n     * ```\n     */\n    function removeFirstOf(array, value, start = 0, stop = -1) {\n        let index = firstIndexOf(array, value, start, stop);\n        if (index !== -1) {\n            removeAt(array, index);\n        }\n        return index;\n    }\n    ArrayExt.removeFirstOf = removeFirstOf;\n    /**\n     * Remove the last occurrence of a value from an array.\n     *\n     * @param array - The array of interest.\n     *\n     * @param value - The value to remove from the array. Values are\n     *   compared using strict `===` equality.\n     *\n     * @param start - The index of the first element in the range to be\n     *   searched, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   searched, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @returns The index of the removed value, or `-1` if the value\n     *   is not contained in the array.\n     *\n     * #### Notes\n     * If `start < stop` the search will wrap at the end of the array.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * let data = [0, 12, 23, 39, 14, 12, 75];\n     * ArrayExt.removeLastOf(data, 12);        // 5\n     * ArrayExt.removeLastOf(data, 17);        // -1\n     * ArrayExt.removeLastOf(data, 39, 2);     // -1\n     * ArrayExt.removeLastOf(data, 39, 2, 3);  // 3\n     * ```\n     */\n    function removeLastOf(array, value, start = -1, stop = 0) {\n        let index = lastIndexOf(array, value, start, stop);\n        if (index !== -1) {\n            removeAt(array, index);\n        }\n        return index;\n    }\n    ArrayExt.removeLastOf = removeLastOf;\n    /**\n     * Remove all occurrences of a value from an array.\n     *\n     * @param array - The array of interest.\n     *\n     * @param value - The value to remove from the array. Values are\n     *   compared using strict `===` equality.\n     *\n     * @param start - The index of the first element in the range to be\n     *   searched, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   searched, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @returns The number of elements removed from the array.\n     *\n     * #### Notes\n     * If `stop < start` the search will conceptually wrap at the end of\n     * the array, however the array will be traversed front-to-back.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * let data = [14, 12, 23, 39, 14, 12, 19, 14];\n     * ArrayExt.removeAllOf(data, 12);        // 2\n     * ArrayExt.removeAllOf(data, 17);        // 0\n     * ArrayExt.removeAllOf(data, 14, 1, 4);  // 1\n     * ```\n     */\n    function removeAllOf(array, value, start = 0, stop = -1) {\n        let n = array.length;\n        if (n === 0) {\n            return 0;\n        }\n        if (start < 0) {\n            start = Math.max(0, start + n);\n        }\n        else {\n            start = Math.min(start, n - 1);\n        }\n        if (stop < 0) {\n            stop = Math.max(0, stop + n);\n        }\n        else {\n            stop = Math.min(stop, n - 1);\n        }\n        let count = 0;\n        for (let i = 0; i < n; ++i) {\n            if (start <= stop && i >= start && i <= stop && array[i] === value) {\n                count++;\n            }\n            else if (stop < start &&\n                (i <= stop || i >= start) &&\n                array[i] === value) {\n                count++;\n            }\n            else if (count > 0) {\n                array[i - count] = array[i];\n            }\n        }\n        if (count > 0) {\n            array.length = n - count;\n        }\n        return count;\n    }\n    ArrayExt.removeAllOf = removeAllOf;\n    /**\n     * Remove the first occurrence of a value which matches a predicate.\n     *\n     * @param array - The array of interest.\n     *\n     * @param fn - The predicate function to apply to the values.\n     *\n     * @param start - The index of the first element in the range to be\n     *   searched, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   searched, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @returns The removed `{ index, value }`, which will be `-1` and\n     *   `undefined` if the value is not contained in the array.\n     *\n     * #### Notes\n     * If `stop < start` the search will wrap at the end of the array.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * function isEven(value: number): boolean {\n     *   return value % 2 === 0;\n     * }\n     *\n     * let data = [0, 12, 23, 39, 14, 12, 75];\n     * ArrayExt.removeFirstWhere(data, isEven);     // { index: 0, value: 0 }\n     * ArrayExt.removeFirstWhere(data, isEven, 2);  // { index: 3, value: 14 }\n     * ArrayExt.removeFirstWhere(data, isEven, 4);  // { index: -1, value: undefined }\n     * ```\n     */\n    function removeFirstWhere(array, fn, start = 0, stop = -1) {\n        let value;\n        let index = findFirstIndex(array, fn, start, stop);\n        if (index !== -1) {\n            value = removeAt(array, index);\n        }\n        return { index, value };\n    }\n    ArrayExt.removeFirstWhere = removeFirstWhere;\n    /**\n     * Remove the last occurrence of a value which matches a predicate.\n     *\n     * @param array - The array of interest.\n     *\n     * @param fn - The predicate function to apply to the values.\n     *\n     * @param start - The index of the first element in the range to be\n     *   searched, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   searched, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @returns The removed `{ index, value }`, which will be `-1` and\n     *   `undefined` if the value is not contained in the array.\n     *\n     * #### Notes\n     * If `start < stop` the search will wrap at the end of the array.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * function isEven(value: number): boolean {\n     *   return value % 2 === 0;\n     * }\n     *\n     * let data = [0, 12, 23, 39, 14, 12, 75];\n     * ArrayExt.removeLastWhere(data, isEven);        // { index: 5, value: 12 }\n     * ArrayExt.removeLastWhere(data, isEven, 2);     // { index: 1, value: 12 }\n     * ArrayExt.removeLastWhere(data, isEven, 2, 1);  // { index: -1, value: undefined }\n     * ```\n     */\n    function removeLastWhere(array, fn, start = -1, stop = 0) {\n        let value;\n        let index = findLastIndex(array, fn, start, stop);\n        if (index !== -1) {\n            value = removeAt(array, index);\n        }\n        return { index, value };\n    }\n    ArrayExt.removeLastWhere = removeLastWhere;\n    /**\n     * Remove all occurrences of values which match a predicate.\n     *\n     * @param array - The array of interest.\n     *\n     * @param fn - The predicate function to apply to the values.\n     *\n     * @param start - The index of the first element in the range to be\n     *   searched, inclusive. The default value is `0`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @param stop - The index of the last element in the range to be\n     *   searched, inclusive. The default value is `-1`. Negative values\n     *   are taken as an offset from the end of the array.\n     *\n     * @returns The number of elements removed from the array.\n     *\n     * #### Notes\n     * If `stop < start` the search will conceptually wrap at the end of\n     * the array, however the array will be traversed front-to-back.\n     *\n     * #### Complexity\n     * Linear.\n     *\n     * #### Example\n     * ```typescript\n     * import { ArrayExt } from '@lumino/algorithm';\n     *\n     * function isEven(value: number): boolean {\n     *   return value % 2 === 0;\n     * }\n     *\n     * function isNegative(value: number): boolean {\n     *   return value < 0;\n     * }\n     *\n     * let data = [0, 12, -13, -9, 23, 39, 14, -15, 12, 75];\n     * ArrayExt.removeAllWhere(data, isEven);            // 4\n     * ArrayExt.removeAllWhere(data, isNegative, 0, 3);  // 2\n     * ```\n     */\n    function removeAllWhere(array, fn, start = 0, stop = -1) {\n        let n = array.length;\n        if (n === 0) {\n            return 0;\n        }\n        if (start < 0) {\n            start = Math.max(0, start + n);\n        }\n        else {\n            start = Math.min(start, n - 1);\n        }\n        if (stop < 0) {\n            stop = Math.max(0, stop + n);\n        }\n        else {\n            stop = Math.min(stop, n - 1);\n        }\n        let count = 0;\n        for (let i = 0; i < n; ++i) {\n            if (start <= stop && i >= start && i <= stop && fn(array[i], i)) {\n                count++;\n            }\n            else if (stop < start && (i <= stop || i >= start) && fn(array[i], i)) {\n                count++;\n            }\n            else if (count > 0) {\n                array[i - count] = array[i];\n            }\n        }\n        if (count > 0) {\n            array.length = n - count;\n        }\n        return count;\n    }\n    ArrayExt.removeAllWhere = removeAllWhere;\n})(ArrayExt || (ArrayExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Chain together several iterables.\n *\n * @deprecated\n *\n * @param objects - The iterable objects of interest.\n *\n * @returns An iterator which yields the values of the iterables\n *   in the order in which they are supplied.\n *\n * #### Example\n * ```typescript\n * import { chain } from '@lumino/algorithm';\n *\n * let data1 = [1, 2, 3];\n * let data2 = [4, 5, 6];\n *\n * let stream = chain(data1, data2);\n *\n * Array.from(stream);  // [1, 2, 3, 4, 5, 6]\n * ```\n */\nfunction* chain(...objects) {\n    for (const object of objects) {\n        yield* object;\n    }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an empty iterator.\n *\n * @returns A new iterator which yields nothing.\n *\n * #### Example\n * ```typescript\n * import { empty } from '@lumino/algorithm';\n *\n * let stream = empty<number>();\n *\n * Array.from(stream);  // []\n * ```\n */\n// eslint-disable-next-line require-yield\nfunction* empty() {\n    return;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Enumerate an iterable object.\n *\n * @param object - The iterable object of interest.\n *\n * @param start - The starting enum value. The default is `0`.\n *\n * @returns An iterator which yields the enumerated values.\n *\n * #### Example\n * ```typescript\n * import { enumerate } from '@lumino/algorithm';\n *\n * let data = ['foo', 'bar', 'baz'];\n *\n * let stream = enumerate(data, 1);\n *\n * Array.from(stream);  // [[1, 'foo'], [2, 'bar'], [3, 'baz']]\n * ```\n */\nfunction* enumerate(object, start = 0) {\n    for (const value of object) {\n        yield [start++, value];\n    }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Filter an iterable for values which pass a test.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns An iterator which yields the values which pass the test.\n *\n * #### Example\n * ```typescript\n * import { filter } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = filter(data, value => value % 2 === 0);\n *\n * Array.from(stream);  // [2, 4, 6]\n * ```\n */\nfunction* filter(object, fn) {\n    let index = 0;\n    for (const value of object) {\n        if (fn(value, index++)) {\n            yield value;\n        }\n    }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Find the first value in an iterable which matches a predicate.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @returns The first matching value, or `undefined` if no matching\n *   value is found.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { find } from '@lumino/algorithm';\n *\n * interface IAnimal { species: string, name: string };\n *\n * function isCat(value: IAnimal): boolean {\n *   return value.species === 'cat';\n * }\n *\n * let data: IAnimal[] = [\n *   { species: 'dog', name: 'spot' },\n *   { species: 'cat', name: 'fluffy' },\n *   { species: 'alligator', name: 'pocho' }\n * ];\n *\n * find(data, isCat).name;  // 'fluffy'\n * ```\n */\nfunction find(object, fn) {\n    let index = 0;\n    for (const value of object) {\n        if (fn(value, index++)) {\n            return value;\n        }\n    }\n    return undefined;\n}\n/**\n * Find the index of the first value which matches a predicate.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @returns The index of the first matching value, or `-1` if no\n *   matching value is found.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { findIndex } from '@lumino/algorithm';\n *\n * interface IAnimal { species: string, name: string };\n *\n * function isCat(value: IAnimal): boolean {\n *   return value.species === 'cat';\n * }\n *\n * let data: IAnimal[] = [\n *   { species: 'dog', name: 'spot' },\n *   { species: 'cat', name: 'fluffy' },\n *   { species: 'alligator', name: 'pocho' }\n * ];\n *\n * findIndex(data, isCat);  // 1\n * ```\n */\nfunction findIndex(object, fn) {\n    let index = 0;\n    for (const value of object) {\n        if (fn(value, index++)) {\n            return index - 1;\n        }\n    }\n    return -1;\n}\n/**\n * Find the minimum value in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n *   It should return `< 0` if the first value is less than the second.\n *   `0` if the values are equivalent, or `> 0` if the first value is\n *   greater than the second.\n *\n * @returns The minimum value in the iterable. If multiple values are\n *   equivalent to the minimum, the left-most value is returned. If\n *   the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { min } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n *   return a - b;\n * }\n *\n * min([7, 4, 0, 3, 9, 4], numberCmp);  // 0\n * ```\n */\nfunction min(object, fn) {\n    let result = undefined;\n    for (const value of object) {\n        if (result === undefined) {\n            result = value;\n            continue;\n        }\n        if (fn(value, result) < 0) {\n            result = value;\n        }\n    }\n    return result;\n}\n/**\n * Find the maximum value in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n *   It should return `< 0` if the first value is less than the second.\n *   `0` if the values are equivalent, or `> 0` if the first value is\n *   greater than the second.\n *\n * @returns The maximum value in the iterable. If multiple values are\n *   equivalent to the maximum, the left-most value is returned. If\n *   the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { max } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n *   return a - b;\n * }\n *\n * max([7, 4, 0, 3, 9, 4], numberCmp);  // 9\n * ```\n */\nfunction max(object, fn) {\n    let result = undefined;\n    for (const value of object) {\n        if (result === undefined) {\n            result = value;\n            continue;\n        }\n        if (fn(value, result) > 0) {\n            result = value;\n        }\n    }\n    return result;\n}\n/**\n * Find the minimum and maximum values in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n *   It should return `< 0` if the first value is less than the second.\n *   `0` if the values are equivalent, or `> 0` if the first value is\n *   greater than the second.\n *\n * @returns A 2-tuple of the `[min, max]` values in the iterable. If\n *   multiple values are equivalent, the left-most values are returned.\n *   If the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { minmax } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n *   return a - b;\n * }\n *\n * minmax([7, 4, 0, 3, 9, 4], numberCmp);  // [0, 9]\n * ```\n */\nfunction minmax(object, fn) {\n    let empty = true;\n    let vmin;\n    let vmax;\n    for (const value of object) {\n        if (empty) {\n            vmin = value;\n            vmax = value;\n            empty = false;\n        }\n        else if (fn(value, vmin) < 0) {\n            vmin = value;\n        }\n        else if (fn(value, vmax) > 0) {\n            vmax = value;\n        }\n    }\n    return empty ? undefined : [vmin, vmax];\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an array from an iterable of values.\n *\n * @deprecated\n *\n * @param object - The iterable object of interest.\n *\n * @returns A new array of values from the given object.\n *\n * #### Example\n * ```typescript\n * import { toArray } from '@lumino/algorithm';\n *\n * let stream = [1, 2, 3, 4, 5, 6][Symbol.iterator]();\n *\n * toArray(stream);  // [1, 2, 3, 4, 5, 6];\n * ```\n */\nfunction toArray(object) {\n    return Array.from(object);\n}\n/**\n * Create an object from an iterable of key/value pairs.\n *\n * @param object - The iterable object of interest.\n *\n * @returns A new object mapping keys to values.\n *\n * #### Example\n * ```typescript\n * import { toObject } from '@lumino/algorithm';\n *\n * let data: [string, number][] = [['one', 1], ['two', 2], ['three', 3]];\n *\n * toObject(data);  // { one: 1, two: 2, three: 3 }\n * ```\n */\nfunction toObject(object) {\n    const result = {};\n    for (const [key, value] of object) {\n        result[key] = value;\n    }\n    return result;\n}\n/**\n * Invoke a function for each value in an iterable.\n *\n * @deprecated\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The callback function to invoke for each value.\n *\n * #### Notes\n * Iteration can be terminated early by returning `false` from the\n * callback function.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { each } from '@lumino/algorithm';\n *\n * let data = [5, 7, 0, -2, 9];\n *\n * each(data, value => { console.log(value); });\n * ```\n */\nfunction each(object, fn) {\n    let index = 0;\n    for (const value of object) {\n        if (false === fn(value, index++)) {\n            return;\n        }\n    }\n}\n/**\n * Test whether all values in an iterable satisfy a predicate.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns `true` if all values pass the test, `false` otherwise.\n *\n * #### Notes\n * Iteration terminates on the first `false` predicate result.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { every } from '@lumino/algorithm';\n *\n * let data = [5, 7, 1];\n *\n * every(data, value => value % 2 === 0);  // false\n * every(data, value => value % 2 === 1);  // true\n * ```\n */\nfunction every(object, fn) {\n    let index = 0;\n    for (const value of object) {\n        if (false === fn(value, index++)) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Test whether any value in an iterable satisfies a predicate.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns `true` if any value passes the test, `false` otherwise.\n *\n * #### Notes\n * Iteration terminates on the first `true` predicate result.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { some } from '@lumino/algorithm';\n *\n * let data = [5, 7, 1];\n *\n * some(data, value => value === 7);  // true\n * some(data, value => value === 3);  // false\n * ```\n */\nfunction some(object, fn) {\n    let index = 0;\n    for (const value of object) {\n        if (fn(value, index++)) {\n            return true;\n        }\n    }\n    return false;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Transform the values of an iterable with a mapping function.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The mapping function to invoke for each value.\n *\n * @returns An iterator which yields the transformed values.\n *\n * #### Example\n * ```typescript\n * import { map } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3];\n *\n * let stream = map(data, value => value * 2);\n *\n * Array.from(stream);  // [2, 4, 6]\n * ```\n */\nfunction* map(object, fn) {\n    let index = 0;\n    for (const value of object) {\n        yield fn(value, index++);\n    }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator of evenly spaced values.\n *\n * @param start - The starting value for the range, inclusive.\n *\n * @param stop - The stopping value for the range, exclusive.\n *\n * @param step - The distance between each value.\n *\n * @returns An iterator which produces evenly spaced values.\n *\n * #### Notes\n * In the single argument form of `range(stop)`, `start` defaults to\n * `0` and `step` defaults to `1`.\n *\n * In the two argument form of `range(start, stop)`, `step` defaults\n * to `1`.\n *\n * #### Example\n * ```typescript\n * import { range } from '@lumino/algorithm';\n *\n * let stream = range(2, 4);\n *\n * Array.from(stream);  // [2, 3]\n * ```\n */\nfunction* range(start, stop, step) {\n    if (stop === undefined) {\n        stop = start;\n        start = 0;\n        step = 1;\n    }\n    else if (step === undefined) {\n        step = 1;\n    }\n    const length = Private.rangeLength(start, stop, step);\n    for (let index = 0; index < length; index++) {\n        yield start + step * index;\n    }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Compute the effective length of a range.\n     *\n     * @param start - The starting value for the range, inclusive.\n     *\n     * @param stop - The stopping value for the range, exclusive.\n     *\n     * @param step - The distance between each value.\n     *\n     * @returns The number of steps need to traverse the range.\n     */\n    function rangeLength(start, stop, step) {\n        if (step === 0) {\n            return Infinity;\n        }\n        if (start > stop && step > 0) {\n            return 0;\n        }\n        if (start < stop && step < 0) {\n            return 0;\n        }\n        return Math.ceil((stop - start) / step);\n    }\n    Private.rangeLength = rangeLength;\n})(Private || (Private = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nfunction reduce(object, fn, initial) {\n    // Setup the iterator and fetch the first value.\n    const it = object[Symbol.iterator]();\n    let index = 0;\n    let first = it.next();\n    // An empty iterator and no initial value is an error.\n    if (first.done && initial === undefined) {\n        throw new TypeError('Reduce of empty iterable with no initial value.');\n    }\n    // If the iterator is empty, return the initial value.\n    if (first.done) {\n        return initial;\n    }\n    // If the iterator has a single item and no initial value, the\n    // reducer is not invoked and the first item is the return value.\n    let second = it.next();\n    if (second.done && initial === undefined) {\n        return first.value;\n    }\n    // If iterator has a single item and an initial value is provided,\n    // the reducer is invoked and that result is the return value.\n    if (second.done) {\n        return fn(initial, first.value, index++);\n    }\n    // Setup the initial accumlated value.\n    let accumulator;\n    if (initial === undefined) {\n        accumulator = fn(first.value, second.value, index++);\n    }\n    else {\n        accumulator = fn(fn(initial, first.value, index++), second.value, index++);\n    }\n    // Iterate the rest of the values, updating the accumulator.\n    let next;\n    while (!(next = it.next()).done) {\n        accumulator = fn(accumulator, next.value, index++);\n    }\n    // Return the final accumulated value.\n    return accumulator;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator which repeats a value a number of times.\n *\n * @deprecated\n *\n * @param value - The value to repeat.\n *\n * @param count - The number of times to repeat the value.\n *\n * @returns A new iterator which repeats the specified value.\n *\n * #### Example\n * ```typescript\n * import { repeat } from '@lumino/algorithm';\n *\n * let stream = repeat(7, 3);\n *\n * Array.from(stream);  // [7, 7, 7]\n * ```\n */\nfunction* repeat(value, count) {\n    while (0 < count--) {\n        yield value;\n    }\n}\n/**\n * Create an iterator which yields a value a single time.\n *\n * @deprecated\n *\n * @param value - The value to wrap in an iterator.\n *\n * @returns A new iterator which yields the value a single time.\n *\n * #### Example\n * ```typescript\n * import { once } from '@lumino/algorithm';\n *\n * let stream = once(7);\n *\n * Array.from(stream);  // [7]\n * ```\n */\nfunction* once(value) {\n    yield value;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator for a retroable object.\n *\n * @param object - The retroable or array-like object of interest.\n *\n * @returns An iterator which traverses the object's values in reverse.\n *\n * #### Example\n * ```typescript\n * import { retro } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = retro(data);\n *\n * Array.from(stream);  // [6, 5, 4, 3, 2, 1]\n * ```\n */\nfunction* retro(object) {\n    if (typeof object.retro === 'function') {\n        yield* object.retro();\n    }\n    else {\n        for (let index = object.length - 1; index > -1; index--) {\n            yield object[index];\n        }\n    }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Topologically sort an iterable of edges.\n *\n * @param edges - The iterable object of edges to sort.\n *   An edge is represented as a 2-tuple of `[fromNode, toNode]`.\n *\n * @returns The topologically sorted array of nodes.\n *\n * #### Notes\n * If a cycle is present in the graph, the cycle will be ignored and\n * the return value will be only approximately sorted.\n *\n * #### Example\n * ```typescript\n * import { topologicSort } from '@lumino/algorithm';\n *\n * let data = [\n *   ['d', 'e'],\n *   ['c', 'd'],\n *   ['a', 'b'],\n *   ['b', 'c']\n * ];\n *\n * topologicSort(data);  // ['a', 'b', 'c', 'd', 'e']\n * ```\n */\nfunction topologicSort(edges) {\n    // Setup the shared sorting state.\n    let sorted = [];\n    let visited = new Set();\n    let graph = new Map();\n    // Add the edges to the graph.\n    for (const edge of edges) {\n        addEdge(edge);\n    }\n    // Visit each node in the graph.\n    for (const [k] of graph) {\n        visit(k);\n    }\n    // Return the sorted results.\n    return sorted;\n    // Add an edge to the graph.\n    function addEdge(edge) {\n        let [fromNode, toNode] = edge;\n        let children = graph.get(toNode);\n        if (children) {\n            children.push(fromNode);\n        }\n        else {\n            graph.set(toNode, [fromNode]);\n        }\n    }\n    // Recursively visit the node.\n    function visit(node) {\n        if (visited.has(node)) {\n            return;\n        }\n        visited.add(node);\n        let children = graph.get(node);\n        if (children) {\n            for (const child of children) {\n                visit(child);\n            }\n        }\n        sorted.push(node);\n    }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Iterate over an iterable using a stepped increment.\n *\n * @param object - The iterable object of interest.\n *\n * @param step - The distance to step on each iteration. A value\n *   of less than `1` will behave the same as a value of `1`.\n *\n * @returns An iterator which traverses the iterable step-wise.\n *\n * #### Example\n * ```typescript\n * import { stride } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = stride(data, 2);\n *\n * Array.from(stream);  // [1, 3, 5];\n * ```\n */\nfunction* stride(object, step) {\n    let count = 0;\n    for (const value of object) {\n        if (0 === count++ % step) {\n            yield value;\n        }\n    }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for string-specific algorithms.\n */\nvar StringExt;\n(function (StringExt) {\n    /**\n     * Find the indices of characters in a source text.\n     *\n     * @param source - The source text which should be searched.\n     *\n     * @param query - The characters to locate in the source text.\n     *\n     * @param start - The index to start the search.\n     *\n     * @returns The matched indices, or `null` if there is no match.\n     *\n     * #### Complexity\n     * Linear on `sourceText`.\n     *\n     * #### Notes\n     * In order for there to be a match, all of the characters in `query`\n     * **must** appear in `source` in the order given by `query`.\n     *\n     * Characters are matched using strict `===` equality.\n     */\n    function findIndices(source, query, start = 0) {\n        let indices = new Array(query.length);\n        for (let i = 0, j = start, n = query.length; i < n; ++i, ++j) {\n            j = source.indexOf(query[i], j);\n            if (j === -1) {\n                return null;\n            }\n            indices[i] = j;\n        }\n        return indices;\n    }\n    StringExt.findIndices = findIndices;\n    /**\n     * A string matcher which uses a sum-of-squares algorithm.\n     *\n     * @param source - The source text which should be searched.\n     *\n     * @param query - The characters to locate in the source text.\n     *\n     * @param start - The index to start the search.\n     *\n     * @returns The match result, or `null` if there is no match.\n     *   A lower `score` represents a stronger match.\n     *\n     * #### Complexity\n     * Linear on `sourceText`.\n     *\n     * #### Notes\n     * This scoring algorithm uses a sum-of-squares approach to determine\n     * the score. In order for there to be a match, all of the characters\n     * in `query` **must** appear in `source` in order. The index of each\n     * matching character is squared and added to the score. This means\n     * that early and consecutive character matches are preferred, while\n     * late matches are heavily penalized.\n     */\n    function matchSumOfSquares(source, query, start = 0) {\n        let indices = findIndices(source, query, start);\n        if (!indices) {\n            return null;\n        }\n        let score = 0;\n        for (let i = 0, n = indices.length; i < n; ++i) {\n            let j = indices[i] - start;\n            score += j * j;\n        }\n        return { score, indices };\n    }\n    StringExt.matchSumOfSquares = matchSumOfSquares;\n    /**\n     * A string matcher which uses a sum-of-deltas algorithm.\n     *\n     * @param source - The source text which should be searched.\n     *\n     * @param query - The characters to locate in the source text.\n     *\n     * @param start - The index to start the search.\n     *\n     * @returns The match result, or `null` if there is no match.\n     *   A lower `score` represents a stronger match.\n     *\n     * #### Complexity\n     * Linear on `sourceText`.\n     *\n     * #### Notes\n     * This scoring algorithm uses a sum-of-deltas approach to determine\n     * the score. In order for there to be a match, all of the characters\n     * in `query` **must** appear in `source` in order. The delta between\n     * the indices are summed to create the score. This means that groups\n     * of matched characters are preferred, while fragmented matches are\n     * penalized.\n     */\n    function matchSumOfDeltas(source, query, start = 0) {\n        let indices = findIndices(source, query, start);\n        if (!indices) {\n            return null;\n        }\n        let score = 0;\n        let last = start - 1;\n        for (let i = 0, n = indices.length; i < n; ++i) {\n            let j = indices[i];\n            score += j - last - 1;\n            last = j;\n        }\n        return { score, indices };\n    }\n    StringExt.matchSumOfDeltas = matchSumOfDeltas;\n    /**\n     * Highlight the matched characters of a source text.\n     *\n     * @param source - The text which should be highlighted.\n     *\n     * @param indices - The indices of the matched characters. They must\n     *   appear in increasing order and must be in bounds of the source.\n     *\n     * @param fn - The function to apply to the matched chunks.\n     *\n     * @returns An array of unmatched and highlighted chunks.\n     */\n    function highlight(source, indices, fn) {\n        // Set up the result array.\n        let result = [];\n        // Set up the counter variables.\n        let k = 0;\n        let last = 0;\n        let n = indices.length;\n        // Iterator over each index.\n        while (k < n) {\n            // Set up the chunk indices.\n            let i = indices[k];\n            let j = indices[k];\n            // Advance the right chunk index until it's non-contiguous.\n            while (++k < n && indices[k] === j + 1) {\n                j++;\n            }\n            // Extract the unmatched text.\n            if (last < i) {\n                result.push(source.slice(last, i));\n            }\n            // Extract and highlight the matched text.\n            if (i < j + 1) {\n                result.push(fn(source.slice(i, j + 1)));\n            }\n            // Update the last visited index.\n            last = j + 1;\n        }\n        // Extract any remaining unmatched text.\n        if (last < source.length) {\n            result.push(source.slice(last));\n        }\n        // Return the highlighted result.\n        return result;\n    }\n    StringExt.highlight = highlight;\n    /**\n     * A 3-way string comparison function.\n     *\n     * @param a - The first string of interest.\n     *\n     * @param b - The second string of interest.\n     *\n     * @returns `-1` if `a < b`, else `1` if `a > b`, else `0`.\n     */\n    function cmp(a, b) {\n        return a < b ? -1 : a > b ? 1 : 0;\n    }\n    StringExt.cmp = cmp;\n})(StringExt || (StringExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Take a fixed number of items from an iterable.\n *\n * @param object - The iterable object of interest.\n *\n * @param count - The number of items to take from the iterable.\n *\n * @returns An iterator which yields the specified number of items\n *   from the source iterable.\n *\n * #### Notes\n * The returned iterator will exhaust early if the source iterable\n * contains an insufficient number of items.\n *\n * #### Example\n * ```typescript\n * import { take } from '@lumino/algorithm';\n *\n * let stream = take([5, 4, 3, 2, 1, 0, -1], 3);\n *\n * Array.from(stream);  // [5, 4, 3]\n * ```\n */\nfunction* take(object, count) {\n    if (count < 1) {\n        return;\n    }\n    const it = object[Symbol.iterator]();\n    let item;\n    while (0 < count-- && !(item = it.next()).done) {\n        yield item.value;\n    }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Iterate several iterables in lockstep.\n *\n * @param objects - The iterable objects of interest.\n *\n * @returns An iterator which yields successive tuples of values where\n *   each value is taken in turn from the provided iterables. It will\n *   be as long as the shortest provided iterable.\n *\n * #### Example\n * ```typescript\n * import { zip } from '@lumino/algorithm';\n *\n * let data1 = [1, 2, 3];\n * let data2 = [4, 5, 6];\n *\n * let stream = zip(data1, data2);\n *\n * Array.from(stream);  // [[1, 4], [2, 5], [3, 6]]\n * ```\n */\nfunction* zip(...objects) {\n    const iters = objects.map(obj => obj[Symbol.iterator]());\n    let tuple = iters.map(it => it.next());\n    for (; every(tuple, item => !item.done); tuple = iters.map(it => it.next())) {\n        yield tuple.map(item => item.value);\n    }\n}\n\nexport { ArrayExt, StringExt, chain, each, empty, enumerate, every, filter, find, findIndex, map, max, min, minmax, once, range, reduce, repeat, retro, some, stride, take, toArray, toObject, topologicSort, zip };\n//# sourceMappingURL=index.es6.js.map\n","import { CommandRegistry } from '@lumino/commands';\nimport { PromiseDelegate, PluginRegistry } from '@lumino/coreutils';\nimport { ContextMenu, Widget } from '@lumino/widgets';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module application\n */\n/**\n * A class for creating pluggable applications.\n *\n * @typeParam T - The type of the application shell.\n *\n * #### Notes\n * The `Application` class is useful when creating large, complex\n * UI applications with the ability to be safely extended by third\n * party code via plugins.\n */\nclass Application {\n    /**\n     * Construct a new application.\n     *\n     * @param options - The options for creating the application.\n     */\n    constructor(options) {\n        var _a;\n        this._delegate = new PromiseDelegate();\n        this._started = false;\n        this._bubblingKeydown = false;\n        this.pluginRegistry =\n            (_a = options.pluginRegistry) !== null && _a !== void 0 ? _a : new PluginRegistry(options);\n        this.pluginRegistry.application = this;\n        // Initialize the application state.\n        this.commands = new CommandRegistry();\n        this.contextMenu = new ContextMenu({\n            commands: this.commands,\n            renderer: options.contextMenuRenderer\n        });\n        this.shell = options.shell;\n    }\n    /**\n     * The list of all the deferred plugins.\n     */\n    get deferredPlugins() {\n        return this.pluginRegistry.deferredPlugins;\n    }\n    /**\n     * A promise which resolves after the application has started.\n     *\n     * #### Notes\n     * This promise will resolve after the `start()` method is called,\n     * when all the bootstrapping and shell mounting work is complete.\n     */\n    get started() {\n        return this._delegate.promise;\n    }\n    /**\n     * Activate all the deferred plugins.\n     *\n     * @returns A promise which will resolve when each plugin is activated\n     * or rejects with an error if one cannot be activated.\n     */\n    async activateDeferredPlugins() {\n        await this.pluginRegistry.activatePlugins('defer');\n    }\n    /**\n     * Activate the plugin with the given ID.\n     *\n     * @param id - The ID of the plugin of interest.\n     *\n     * @returns A promise which resolves when the plugin is activated\n     *   or rejects with an error if it cannot be activated.\n     */\n    async activatePlugin(id) {\n        return this.pluginRegistry.activatePlugin(id);\n    }\n    /**\n     * Deactivate the plugin and its downstream dependents if and only if the\n     * plugin and its dependents all support `deactivate`.\n     *\n     * @param id - The ID of the plugin of interest.\n     *\n     * @returns A list of IDs of downstream plugins deactivated with this one.\n     */\n    async deactivatePlugin(id) {\n        return this.pluginRegistry.deactivatePlugin(id);\n    }\n    /**\n     * Deregister a plugin with the application.\n     *\n     * @param id - The ID of the plugin of interest.\n     *\n     * @param force - Whether to deregister the plugin even if it is active.\n     */\n    deregisterPlugin(id, force) {\n        this.pluginRegistry.deregisterPlugin(id, force);\n    }\n    /**\n     * Get a plugin description.\n     *\n     * @param id - The ID of the plugin of interest.\n     *\n     * @returns The plugin description.\n     */\n    getPluginDescription(id) {\n        return this.pluginRegistry.getPluginDescription(id);\n    }\n    /**\n     * Test whether a plugin is registered with the application.\n     *\n     * @param id - The ID of the plugin of interest.\n     *\n     * @returns `true` if the plugin is registered, `false` otherwise.\n     */\n    hasPlugin(id) {\n        return this.pluginRegistry.hasPlugin(id);\n    }\n    /**\n     * Test whether a plugin is activated with the application.\n     *\n     * @param id - The ID of the plugin of interest.\n     *\n     * @returns `true` if the plugin is activated, `false` otherwise.\n     */\n    isPluginActivated(id) {\n        return this.pluginRegistry.isPluginActivated(id);\n    }\n    /**\n     * List the IDs of the plugins registered with the application.\n     *\n     * @returns A new array of the registered plugin IDs.\n     */\n    listPlugins() {\n        return this.pluginRegistry.listPlugins();\n    }\n    /**\n     * Register a plugin with the application.\n     *\n     * @param plugin - The plugin to register.\n     *\n     * #### Notes\n     * An error will be thrown if a plugin with the same ID is already\n     * registered, or if the plugin has a circular dependency.\n     *\n     * If the plugin provides a service which has already been provided\n     * by another plugin, the new service will override the old service.\n     */\n    registerPlugin(plugin) {\n        this.pluginRegistry.registerPlugin(plugin);\n    }\n    /**\n     * Register multiple plugins with the application.\n     *\n     * @param plugins - The plugins to register.\n     *\n     * #### Notes\n     * This calls `registerPlugin()` for each of the given plugins.\n     */\n    registerPlugins(plugins) {\n        this.pluginRegistry.registerPlugins(plugins);\n    }\n    /**\n     * Resolve an optional service of a given type.\n     *\n     * @param token - The token for the service type of interest.\n     *\n     * @returns A promise which resolves to an instance of the requested\n     *   service, or `null` if it cannot be resolved.\n     *\n     * #### Notes\n     * Services are singletons. The same instance will be returned each\n     * time a given service token is resolved.\n     *\n     * If the plugin which provides the service has not been activated,\n     * resolving the service will automatically activate the plugin.\n     *\n     * User code will not typically call this method directly. Instead,\n     * the optional services for the user's plugins will be resolved\n     * automatically when the plugin is activated.\n     */\n    async resolveOptionalService(token) {\n        return this.pluginRegistry.resolveOptionalService(token);\n    }\n    /**\n     * Resolve a required service of a given type.\n     *\n     * @param token - The token for the service type of interest.\n     *\n     * @returns A promise which resolves to an instance of the requested\n     *   service, or rejects with an error if it cannot be resolved.\n     *\n     * #### Notes\n     * Services are singletons. The same instance will be returned each\n     * time a given service token is resolved.\n     *\n     * If the plugin which provides the service has not been activated,\n     * resolving the service will automatically activate the plugin.\n     *\n     * User code will not typically call this method directly. Instead,\n     * the required services for the user's plugins will be resolved\n     * automatically when the plugin is activated.\n     */\n    async resolveRequiredService(token) {\n        return this.pluginRegistry.resolveRequiredService(token);\n    }\n    /**\n     * Start the application.\n     *\n     * @param options - The options for starting the application.\n     *\n     * @returns A promise which resolves when all bootstrapping work\n     *   is complete and the shell is mounted to the DOM.\n     *\n     * #### Notes\n     * This should be called once by the application creator after all\n     * initial plugins have been registered.\n     *\n     * If a plugin fails to the load, the error will be logged and the\n     * other valid plugins will continue to be loaded.\n     *\n     * Bootstrapping the application consists of the following steps:\n     * 1. Activate the startup plugins\n     * 2. Wait for those plugins to activate\n     * 3. Attach the shell widget to the DOM\n     * 4. Add the application event listeners\n     */\n    async start(options = {}) {\n        var _a, _b;\n        // Return immediately if the application is already started.\n        if (this._started) {\n            return this._delegate.promise;\n        }\n        // Mark the application as started;\n        this._started = true;\n        this._bubblingKeydown = (_a = options.bubblingKeydown) !== null && _a !== void 0 ? _a : false;\n        // Parse the host ID for attaching the shell.\n        const hostID = (_b = options.hostID) !== null && _b !== void 0 ? _b : '';\n        // Wait for the plugins to activate, then finalize startup.\n        await this.pluginRegistry.activatePlugins('startUp', options);\n        this.attachShell(hostID);\n        this.addEventListeners();\n        this._delegate.resolve();\n    }\n    /**\n     * Handle the DOM events for the application.\n     *\n     * @param event - The DOM event sent to the application.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events registered for the application. It\n     * should not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'resize':\n                this.evtResize(event);\n                break;\n            case 'keydown':\n                this.evtKeydown(event);\n                break;\n            case 'keyup':\n                this.evtKeyup(event);\n                break;\n            case 'contextmenu':\n                this.evtContextMenu(event);\n                break;\n        }\n    }\n    /**\n     * Attach the application shell to the DOM.\n     *\n     * @param id - The ID of the host node for the shell, or `''`.\n     *\n     * #### Notes\n     * If the ID is not provided, the document body will be the host.\n     *\n     * A subclass may reimplement this method as needed.\n     */\n    attachShell(id) {\n        Widget.attach(this.shell, (id && document.getElementById(id)) || document.body);\n    }\n    /**\n     * Add the application event listeners.\n     *\n     * #### Notes\n     * The default implementation of this method adds listeners for\n     * `'keydown'` and `'resize'` events.\n     *\n     * A subclass may reimplement this method as needed.\n     */\n    addEventListeners() {\n        document.addEventListener('contextmenu', this);\n        document.addEventListener('keydown', this, !this._bubblingKeydown);\n        document.addEventListener('keyup', this, !this._bubblingKeydown);\n        window.addEventListener('resize', this);\n    }\n    /**\n     * A method invoked on a document `'keydown'` event.\n     *\n     * #### Notes\n     * The default implementation of this method invokes the key down\n     * processing method of the application command registry.\n     *\n     * A subclass may reimplement this method as needed.\n     */\n    evtKeydown(event) {\n        this.commands.processKeydownEvent(event);\n    }\n    /**\n     * A method invoked on a document `'keyup'` event.\n     *\n     * #### Notes\n     * The default implementation of this method invokes the key up\n     * processing method of the application command registry.\n     *\n     * A subclass may reimplement this method as needed.\n     */\n    evtKeyup(event) {\n        this.commands.processKeyupEvent(event);\n    }\n    /**\n     * A method invoked on a document `'contextmenu'` event.\n     *\n     * #### Notes\n     * The default implementation of this method opens the application\n     * `contextMenu` at the current mouse position.\n     *\n     * If the application context menu has no matching content *or* if\n     * the shift key is pressed, the default browser context menu will\n     * be opened instead.\n     *\n     * A subclass may reimplement this method as needed.\n     */\n    evtContextMenu(event) {\n        if (event.shiftKey) {\n            return;\n        }\n        if (this.contextMenu.open(event)) {\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    }\n    /**\n     * A method invoked on a window `'resize'` event.\n     *\n     * #### Notes\n     * The default implementation of this method updates the shell.\n     *\n     * A subclass may reimplement this method as needed.\n     */\n    evtResize(event) {\n        this.shell.update();\n    }\n}\n\nexport { Application };\n//# sourceMappingURL=index.es6.js.map\n","import { ArrayExt } from '@lumino/algorithm';\nimport { JSONExt } from '@lumino/coreutils';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Platform, Selector } from '@lumino/domutils';\nimport { getKeyboardLayout } from '@lumino/keyboard';\nimport { Signal } from '@lumino/signaling';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module commands\n */\n/**\n * An object which manages a collection of commands.\n *\n * #### Notes\n * A command registry can be used to populate a variety of action-based\n * widgets, such as command palettes, menus, and toolbars.\n */\nclass CommandRegistry {\n    constructor() {\n        this._timerID = 0;\n        this._timerModifierID = 0;\n        this._replaying = false;\n        this._keystrokes = [];\n        this._keydownEvents = [];\n        this._keyBindings = [];\n        this._exactKeyMatch = null;\n        this._commands = new Map();\n        this._commandChanged = new Signal(this);\n        this._commandExecuted = new Signal(this);\n        this._keyBindingChanged = new Signal(this);\n        this._holdKeyBindingPromises = new Map();\n    }\n    /**\n     * A signal emitted when a command has changed.\n     *\n     * #### Notes\n     * This signal is useful for visual representations of commands which\n     * need to refresh when the state of a relevant command has changed.\n     */\n    get commandChanged() {\n        return this._commandChanged;\n    }\n    /**\n     * A signal emitted when a command has executed.\n     *\n     * #### Notes\n     * Care should be taken when consuming this signal. The command system is used\n     * by many components for many user actions. Handlers registered with this\n     * signal must return quickly to ensure the overall application remains responsive.\n     */\n    get commandExecuted() {\n        return this._commandExecuted;\n    }\n    /**\n     * A signal emitted when a key binding is changed.\n     */\n    get keyBindingChanged() {\n        return this._keyBindingChanged;\n    }\n    /**\n     * A read-only array of the key bindings in the registry.\n     */\n    get keyBindings() {\n        return this._keyBindings;\n    }\n    /**\n     * List the ids of the registered commands.\n     *\n     * @returns A new array of the registered command ids.\n     */\n    listCommands() {\n        return Array.from(this._commands.keys());\n    }\n    /**\n     * Test whether a specific command is registered.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @returns `true` if the command is registered, `false` otherwise.\n     */\n    hasCommand(id) {\n        return this._commands.has(id);\n    }\n    /**\n     * Add a command to the registry.\n     *\n     * @param id - The unique id of the command.\n     *\n     * @param options - The options for the command.\n     *\n     * @returns A disposable which will remove the command.\n     *\n     * @throws An error if the given `id` is already registered.\n     */\n    addCommand(id, options) {\n        // Throw an error if the id is already registered.\n        if (this._commands.has(id)) {\n            throw new Error(`Command '${id}' already registered.`);\n        }\n        // Add the command to the registry.\n        this._commands.set(id, Private.createCommand(options));\n        // Emit the `commandChanged` signal.\n        this._commandChanged.emit({ id, type: 'added' });\n        // Return a disposable which will remove the command.\n        return new DisposableDelegate(() => {\n            // Remove the command from the registry.\n            this._commands.delete(id);\n            // Emit the `commandChanged` signal.\n            this._commandChanged.emit({ id, type: 'removed' });\n        });\n    }\n    /**\n     * Notify listeners that the state of a command has changed.\n     *\n     * @param id - The id of the command which has changed. If more than\n     *   one command has changed, this argument should be omitted.\n     *\n     * @throws An error if the given `id` is not registered.\n     *\n     * #### Notes\n     * This method should be called by the command author whenever the\n     * application state changes such that the results of the command\n     * metadata functions may have changed.\n     *\n     * This will cause the `commandChanged` signal to be emitted.\n     */\n    notifyCommandChanged(id) {\n        if (id !== undefined && !this._commands.has(id)) {\n            throw new Error(`Command '${id}' is not registered.`);\n        }\n        this._commandChanged.emit({ id, type: id ? 'changed' : 'many-changed' });\n    }\n    /**\n     * Get the description for a specific command.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @param args - The arguments for the command.\n     *\n     * @returns The description for the command.\n     */\n    describedBy(id, args = JSONExt.emptyObject) {\n        var _a;\n        let cmd = this._commands.get(id);\n        return Promise.resolve((_a = cmd === null || cmd === void 0 ? void 0 : cmd.describedBy.call(undefined, args)) !== null && _a !== void 0 ? _a : { args: null });\n    }\n    /**\n     * Get the display label for a specific command.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @param args - The arguments for the command.\n     *\n     * @returns The display label for the command, or an empty string\n     *   if the command is not registered.\n     */\n    label(id, args = JSONExt.emptyObject) {\n        var _a;\n        let cmd = this._commands.get(id);\n        return (_a = cmd === null || cmd === void 0 ? void 0 : cmd.label.call(undefined, args)) !== null && _a !== void 0 ? _a : '';\n    }\n    /**\n     * Get the mnemonic index for a specific command.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @param args - The arguments for the command.\n     *\n     * @returns The mnemonic index for the command, or `-1` if the\n     *   command is not registered.\n     */\n    mnemonic(id, args = JSONExt.emptyObject) {\n        let cmd = this._commands.get(id);\n        return cmd ? cmd.mnemonic.call(undefined, args) : -1;\n    }\n    /**\n     * Get the icon renderer for a specific command.\n     *\n     * DEPRECATED: if set to a string value, the .icon field will\n     * function as an alias for the .iconClass field, for backwards\n     * compatibility. In the future when this is removed, the default\n     * return type will become undefined.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @param args - The arguments for the command.\n     *\n     * @returns The icon renderer for the command or `undefined`.\n     */\n    icon(id, args = JSONExt.emptyObject) {\n        var _a;\n        return (_a = this._commands.get(id)) === null || _a === void 0 ? void 0 : _a.icon.call(undefined, args);\n    }\n    /**\n     * Get the icon class for a specific command.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @param args - The arguments for the command.\n     *\n     * @returns The icon class for the command, or an empty string if\n     *   the command is not registered.\n     */\n    iconClass(id, args = JSONExt.emptyObject) {\n        let cmd = this._commands.get(id);\n        return cmd ? cmd.iconClass.call(undefined, args) : '';\n    }\n    /**\n     * Get the icon label for a specific command.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @param args - The arguments for the command.\n     *\n     * @returns The icon label for the command, or an empty string if\n     *   the command is not registered.\n     */\n    iconLabel(id, args = JSONExt.emptyObject) {\n        let cmd = this._commands.get(id);\n        return cmd ? cmd.iconLabel.call(undefined, args) : '';\n    }\n    /**\n     * Get the short form caption for a specific command.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @param args - The arguments for the command.\n     *\n     * @returns The caption for the command, or an empty string if the\n     *   command is not registered.\n     */\n    caption(id, args = JSONExt.emptyObject) {\n        let cmd = this._commands.get(id);\n        return cmd ? cmd.caption.call(undefined, args) : '';\n    }\n    /**\n     * Get the usage help text for a specific command.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @param args - The arguments for the command.\n     *\n     * @returns The usage text for the command, or an empty string if\n     *   the command is not registered.\n     */\n    usage(id, args = JSONExt.emptyObject) {\n        let cmd = this._commands.get(id);\n        return cmd ? cmd.usage.call(undefined, args) : '';\n    }\n    /**\n     * Get the extra class name for a specific command.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @param args - The arguments for the command.\n     *\n     * @returns The class name for the command, or an empty string if\n     *   the command is not registered.\n     */\n    className(id, args = JSONExt.emptyObject) {\n        let cmd = this._commands.get(id);\n        return cmd ? cmd.className.call(undefined, args) : '';\n    }\n    /**\n     * Get the dataset for a specific command.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @param args - The arguments for the command.\n     *\n     * @returns The dataset for the command, or an empty dataset if\n     *   the command is not registered.\n     */\n    dataset(id, args = JSONExt.emptyObject) {\n        let cmd = this._commands.get(id);\n        return cmd ? cmd.dataset.call(undefined, args) : {};\n    }\n    /**\n     * Test whether a specific command is enabled.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @param args - The arguments for the command.\n     *\n     * @returns A boolean indicating whether the command is enabled,\n     *   or `false` if the command is not registered.\n     */\n    isEnabled(id, args = JSONExt.emptyObject) {\n        let cmd = this._commands.get(id);\n        return cmd ? cmd.isEnabled.call(undefined, args) : false;\n    }\n    /**\n     * Test whether a specific command is toggled.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @param args - The arguments for the command.\n     *\n     * @returns A boolean indicating whether the command is toggled,\n     *   or `false` if the command is not registered.\n     */\n    isToggled(id, args = JSONExt.emptyObject) {\n        let cmd = this._commands.get(id);\n        return cmd ? cmd.isToggled.call(undefined, args) : false;\n    }\n    /**\n     * Test whether a specific command is toggleable.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @param args - The arguments for the command.\n     *\n     * @returns A boolean indicating whether the command is toggleable,\n     *   or `false` if the command is not registered.\n     */\n    isToggleable(id, args = JSONExt.emptyObject) {\n        let cmd = this._commands.get(id);\n        return cmd ? cmd.isToggleable : false;\n    }\n    /**\n     * Test whether a specific command is visible.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @param args - The arguments for the command.\n     *\n     * @returns A boolean indicating whether the command is visible,\n     *   or `false` if the command is not registered.\n     */\n    isVisible(id, args = JSONExt.emptyObject) {\n        let cmd = this._commands.get(id);\n        return cmd ? cmd.isVisible.call(undefined, args) : false;\n    }\n    /**\n     * Execute a specific command.\n     *\n     * @param id - The id of the command of interest.\n     *\n     * @param args - The arguments for the command.\n     *\n     * @returns A promise which resolves with the result of the command.\n     *\n     * #### Notes\n     * The promise will reject if the command throws an exception,\n     * or if the command is not registered.\n     */\n    execute(id, args = JSONExt.emptyObject) {\n        // Reject if the command is not registered.\n        let cmd = this._commands.get(id);\n        if (!cmd) {\n            return Promise.reject(new Error(`Command '${id}' not registered.`));\n        }\n        // Execute the command and reject if an exception is thrown.\n        let value;\n        try {\n            value = cmd.execute.call(undefined, args);\n        }\n        catch (err) {\n            value = Promise.reject(err);\n        }\n        // Create the return promise which resolves the result.\n        let result = Promise.resolve(value);\n        // Emit the command executed signal.\n        this._commandExecuted.emit({ id, args, result });\n        // Return the result promise to the caller.\n        return result;\n    }\n    /**\n     * Add a key binding to the registry.\n     *\n     * @param options - The options for creating the key binding.\n     *\n     * @returns A disposable which removes the added key binding.\n     *\n     * #### Notes\n     * If multiple key bindings are registered for the same sequence, the\n     * binding with the highest selector specificity is executed first. A\n     * tie is broken by using the most recently added key binding.\n     *\n     * Ambiguous key bindings are resolved with a timeout. As an example,\n     * suppose two key bindings are registered: one with the key sequence\n     * `['Ctrl D']`, and another with `['Ctrl D', 'Ctrl W']`. If the user\n     * presses `Ctrl D`, the first binding cannot be immediately executed\n     * since the user may intend to complete the chord with `Ctrl W`. For\n     * such cases, a timer is used to allow the chord to be completed. If\n     * the chord is not completed before the timeout, the first binding\n     * is executed.\n     */\n    addKeyBinding(options) {\n        // Create the binding for the given options.\n        let binding = Private.createKeyBinding(options);\n        // Add the key binding to the bindings array.\n        this._keyBindings.push(binding);\n        // Emit the `bindingChanged` signal.\n        this._keyBindingChanged.emit({ binding, type: 'added' });\n        // Return a disposable which will remove the binding.\n        return new DisposableDelegate(() => {\n            // Remove the binding from the array.\n            ArrayExt.removeFirstOf(this._keyBindings, binding);\n            // Emit the `bindingChanged` signal.\n            this._keyBindingChanged.emit({ binding, type: 'removed' });\n        });\n    }\n    /**\n     * Process a `'keydown'` event and invoke a matching key binding.\n     *\n     * @param event - The event object for a `'keydown'` event.\n     *\n     * #### Notes\n     * This should be called in response to a `'keydown'` event in order\n     * to invoke the command for the best matching key binding.\n     *\n     * The registry **does not** install its own listener for `'keydown'`\n     * events. This allows the application full control over the nodes\n     * and phase for which the registry processes `'keydown'` events.\n     *\n     * When the keydown event is processed, if the event target or any of its\n     * ancestor nodes has a `data-lm-suppress-shortcuts` attribute, its keydown\n     * events will not invoke commands.\n     */\n    processKeydownEvent(event) {\n        // Bail immediately if playing back keystrokes.\n        if (event.defaultPrevented || this._replaying) {\n            return;\n        }\n        // Get the normalized keystroke for the event.\n        const keystroke = CommandRegistry.keystrokeForKeydownEvent(event);\n        // If the keystroke is not valid for the keyboard layout, replay\n        // any suppressed events and clear the pending state.\n        if (!keystroke) {\n            this._replayKeydownEvents();\n            this._clearPendingState();\n            return;\n        }\n        // Check that only mod key(s) have been pressed.\n        if (CommandRegistry.isModifierKeyPressed(event)) {\n            // Find the exact match for the modifier keys.\n            let { exact } = Private.matchKeyBinding(this._keyBindings, [keystroke], event);\n            if (exact) {\n                // If the mod keys match an exact shortcut, start a dedicated timer.\n                event.preventDefault();\n                event.stopPropagation();\n                this._startModifierTimer(exact);\n            }\n            else {\n                // Otherwise stop potential existing timer.\n                this._clearModifierTimer();\n            }\n            return;\n        }\n        // Add the keystroke to the current key sequence.\n        this._keystrokes.push(keystroke);\n        // Find the exact and partial matches for the key sequence.\n        const { exact, partial } = Private.matchKeyBinding(this._keyBindings, this._keystrokes, event);\n        // Whether there is any partial match.\n        const hasPartial = partial.length !== 0;\n        // If there is no exact match and no partial match, replay\n        // any suppressed events and clear the pending state.\n        if (!exact && !hasPartial) {\n            this._replayKeydownEvents();\n            this._clearPendingState();\n            return;\n        }\n        // Stop propagation of the event. If there is only a partial match,\n        // the event will be replayed if a final exact match never occurs.\n        if ((exact === null || exact === void 0 ? void 0 : exact.preventDefault) || partial.some(match => match.preventDefault)) {\n            event.preventDefault();\n            event.stopPropagation();\n        }\n        // Store the event for possible playback in the future and for\n        // the use in execution hold check.\n        this._keydownEvents.push(event);\n        // If there is an exact match but no partial match, the exact match\n        // can be dispatched immediately. The pending state is cleared so\n        // the next key press starts from the default state.\n        if (exact && !hasPartial) {\n            this._executeKeyBinding(exact);\n            this._clearPendingState();\n            return;\n        }\n        // If there is both an exact match and a partial match, the exact\n        // match is stored for future dispatch in case the timer expires\n        // before a more specific match is triggered.\n        if (exact) {\n            this._exactKeyMatch = exact;\n        }\n        // (Re)start the timer to dispatch the most recent exact match\n        // in case the partial match fails to result in an exact match.\n        this._startTimer();\n    }\n    /**\n     * Delay the execution of any command matched against the given 'keydown' event\n     * until the `permission` to execute is granted.\n     *\n     * @param event - The event object for a `'keydown'` event.\n     * @param permission - The promise with value indicating whether to proceed with the execution.\n     *\n     * ### Note\n     * This enables the caller of `processKeydownEvent` to asynchronously prevent the\n     * execution of the command based on external events.\n     */\n    holdKeyBindingExecution(event, permission) {\n        this._holdKeyBindingPromises.set(event, permission);\n    }\n    /**\n     * Process a ``keyup`` event to clear the timer on the modifier, if it exists.\n     *\n     * @param event - The event object for a `'keydown'` event.\n     */\n    processKeyupEvent(event) {\n        this._clearModifierTimer();\n    }\n    /**\n     * Start or restart the timeout on the modifier keys.\n     *\n     * This timeout will end only if the keys are hold.\n     */\n    _startModifierTimer(exact) {\n        this._clearModifierTimer();\n        this._timerModifierID = window.setTimeout(() => {\n            this._executeKeyBinding(exact);\n        }, Private.modifierkeyTimeOut);\n    }\n    /**\n     * Clear the timeout on modifier keys.\n     */\n    _clearModifierTimer() {\n        if (this._timerModifierID !== 0) {\n            clearTimeout(this._timerModifierID);\n            this._timerModifierID = 0;\n        }\n    }\n    /**\n     * Start or restart the pending timeout.\n     */\n    _startTimer() {\n        this._clearTimer();\n        this._timerID = window.setTimeout(() => {\n            this._onPendingTimeout();\n        }, Private.CHORD_TIMEOUT);\n    }\n    /**\n     * Clear the pending timeout.\n     */\n    _clearTimer() {\n        if (this._timerID !== 0) {\n            clearTimeout(this._timerID);\n            this._timerID = 0;\n        }\n    }\n    /**\n     * Replay the keydown events which were suppressed.\n     */\n    _replayKeydownEvents() {\n        if (this._keydownEvents.length === 0) {\n            return;\n        }\n        this._replaying = true;\n        this._keydownEvents.forEach(Private.replayKeyEvent);\n        this._replaying = false;\n    }\n    /**\n     * Execute the command for the given key binding.\n     *\n     * If the command is missing or disabled, a warning will be logged.\n     *\n     * The execution will not proceed if any of the events leading to\n     * the keybinding matching were held with the permission resolving to false.\n     */\n    async _executeKeyBinding(binding) {\n        if (this._holdKeyBindingPromises.size !== 0) {\n            // Copy keydown events list to ensure it is available in async code.\n            const keydownEvents = [...this._keydownEvents];\n            // Wait until all hold requests on execution are lifted.\n            const executionAllowed = (await Promise.race([\n                Promise.all(keydownEvents.map(async (event) => { var _a; return (_a = this._holdKeyBindingPromises.get(event)) !== null && _a !== void 0 ? _a : Promise.resolve(true); })),\n                new Promise(resolve => {\n                    setTimeout(() => resolve([false]), Private.KEYBINDING_HOLD_TIMEOUT);\n                })\n            ])).every(Boolean);\n            // Clear the hold requests.\n            this._holdKeyBindingPromises.clear();\n            // Do not proceed with the execution if any of the hold requests did not get the permission to proceed.\n            if (!executionAllowed) {\n                return;\n            }\n        }\n        let { command, args } = binding;\n        let newArgs = {\n            _luminoEvent: { type: 'keybinding', keys: binding.keys },\n            ...args\n        };\n        if (!this.hasCommand(command) || !this.isEnabled(command, newArgs)) {\n            let word = this.hasCommand(command) ? 'enabled' : 'registered';\n            let keys = binding.keys.join(', ');\n            let msg1 = `Cannot execute key binding '${keys}':`;\n            let msg2 = `command '${command}' is not ${word}.`;\n            console.warn(`${msg1} ${msg2}`);\n            return;\n        }\n        await this.execute(command, newArgs);\n    }\n    /**\n     * Clear the internal pending state.\n     */\n    _clearPendingState() {\n        this._clearTimer();\n        this._clearModifierTimer();\n        this._exactKeyMatch = null;\n        this._keystrokes.length = 0;\n        this._keydownEvents.length = 0;\n    }\n    /**\n     * Handle the partial match timeout.\n     */\n    _onPendingTimeout() {\n        this._timerID = 0;\n        if (this._exactKeyMatch) {\n            this._executeKeyBinding(this._exactKeyMatch);\n        }\n        else {\n            this._replayKeydownEvents();\n        }\n        this._clearPendingState();\n    }\n}\n/**\n * The namespace for the `CommandRegistry` class statics.\n */\n(function (CommandRegistry) {\n    /**\n     * Parse a keystroke into its constituent components.\n     *\n     * @param keystroke - The keystroke of interest.\n     *\n     * @returns The parsed components of the keystroke.\n     *\n     * #### Notes\n     * The keystroke should be of the form:\n     *   `[<modifier 1> [<modifier 2> [<modifier N> ]]]<primary key>`\n     *\n     * The supported modifiers are: `Accel`, `Alt`, `Cmd`, `Ctrl`, and\n     * `Shift`. The `Accel` modifier is translated to `Cmd` on Mac and\n     * `Ctrl` on all other platforms.\n     *\n     * The parsing is tolerant and will not throw exceptions. Notably:\n     *   - Duplicate modifiers are ignored.\n     *   - Extra primary keys are ignored.\n     *   - The order of modifiers and primary key is irrelevant.\n     *   - The keystroke parts should be separated by whitespace.\n     *   - The keystroke is case sensitive.\n     */\n    function parseKeystroke(keystroke) {\n        let key = '';\n        let alt = false;\n        let cmd = false;\n        let ctrl = false;\n        let shift = false;\n        for (let token of keystroke.split(/\\s+/)) {\n            if (token === 'Accel') {\n                if (Platform.IS_MAC) {\n                    cmd = true;\n                }\n                else {\n                    ctrl = true;\n                }\n            }\n            else if (token === 'Alt') {\n                alt = true;\n            }\n            else if (token === 'Cmd') {\n                cmd = true;\n            }\n            else if (token === 'Ctrl') {\n                ctrl = true;\n            }\n            else if (token === 'Shift') {\n                shift = true;\n            }\n            else if (token.length > 0) {\n                key = token;\n            }\n        }\n        return { cmd, ctrl, alt, shift, key };\n    }\n    CommandRegistry.parseKeystroke = parseKeystroke;\n    /**\n     * Normalize a keystroke into a canonical representation.\n     *\n     * @param keystroke - The keystroke of interest.\n     *\n     * @returns The normalized representation of the keystroke.\n     *\n     * #### Notes\n     * This normalizes the keystroke by removing duplicate modifiers and\n     * extra primary keys, and assembling the parts in a canonical order.\n     *\n     * The `Cmd` modifier is ignored on non-Mac platforms.\n     */\n    function normalizeKeystroke(keystroke) {\n        let mods = '';\n        let parts = parseKeystroke(keystroke);\n        if (parts.ctrl) {\n            mods += 'Ctrl ';\n        }\n        if (parts.alt) {\n            mods += 'Alt ';\n        }\n        if (parts.shift) {\n            mods += 'Shift ';\n        }\n        if (parts.cmd && Platform.IS_MAC) {\n            mods += 'Cmd ';\n        }\n        if (!parts.key) {\n            return mods.trim();\n        }\n        return mods + parts.key;\n    }\n    CommandRegistry.normalizeKeystroke = normalizeKeystroke;\n    /**\n     * Get the platform-specific normalized keys for an options object.\n     *\n     * @param options - The options for the key binding.\n     *\n     * @returns Array of combined, normalized keys.\n     */\n    function normalizeKeys(options) {\n        let keys;\n        if (Platform.IS_WIN) {\n            keys = options.winKeys || options.keys;\n        }\n        else if (Platform.IS_MAC) {\n            keys = options.macKeys || options.keys;\n        }\n        else {\n            keys = options.linuxKeys || options.keys;\n        }\n        return keys.map(normalizeKeystroke);\n    }\n    CommandRegistry.normalizeKeys = normalizeKeys;\n    /**\n     * Format keystrokes for display on the local system.\n     *\n     * If a list of keystrokes is provided, it will be displayed as\n     * a comma-separated string\n     *\n     * @param keystroke The keystrokes to format\n     * @returns The keystrokes representation\n     */\n    function formatKeystroke(keystroke) {\n        return typeof keystroke === 'string'\n            ? formatSingleKey(keystroke)\n            : keystroke.map(formatSingleKey).join(', ');\n        function formatSingleKey(key) {\n            let mods = [];\n            let separator = Platform.IS_MAC ? ' ' : '+';\n            let parts = parseKeystroke(key);\n            if (parts.ctrl) {\n                mods.push('Ctrl');\n            }\n            if (parts.alt) {\n                mods.push('Alt');\n            }\n            if (parts.shift) {\n                mods.push('Shift');\n            }\n            if (Platform.IS_MAC && parts.cmd) {\n                mods.push('Cmd');\n            }\n            mods.push(parts.key);\n            return mods.map(Private.formatKey).join(separator);\n        }\n    }\n    CommandRegistry.formatKeystroke = formatKeystroke;\n    /**\n     * Check if `'keydown'` event is caused by pressing a modifier key that should be ignored.\n     *\n     * @param event - The event object for a `'keydown'` event.\n     *\n     * @returns `true` if modifier key was pressed, `false` otherwise.\n     */\n    function isModifierKeyPressed(event) {\n        let layout = getKeyboardLayout();\n        let key = layout.keyForKeydownEvent(event);\n        return layout.isModifierKey(key);\n    }\n    CommandRegistry.isModifierKeyPressed = isModifierKeyPressed;\n    /**\n     * Create a normalized keystroke for a `'keydown'` event.\n     *\n     * @param event - The event object for a `'keydown'` event.\n     *\n     * @returns A normalized keystroke, or an empty string if the event\n     *   does not represent a valid keystroke for the given layout.\n     */\n    function keystrokeForKeydownEvent(event) {\n        let layout = getKeyboardLayout();\n        let key = layout.keyForKeydownEvent(event);\n        let mods = [];\n        if (event.ctrlKey) {\n            mods.push('Ctrl');\n        }\n        if (event.altKey) {\n            mods.push('Alt');\n        }\n        if (event.shiftKey) {\n            mods.push('Shift');\n        }\n        if (event.metaKey && Platform.IS_MAC) {\n            mods.push('Cmd');\n        }\n        if (!layout.isModifierKey(key)) {\n            mods.push(key);\n        }\n        // for purely modifier key strings\n        return mods.join(' ');\n    }\n    CommandRegistry.keystrokeForKeydownEvent = keystrokeForKeydownEvent;\n})(CommandRegistry || (CommandRegistry = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The timeout in ms for triggering a key binding chord.\n     */\n    Private.CHORD_TIMEOUT = 1000;\n    /**\n     * The timeout in ms for stopping the hold on keybinding execution.\n     */\n    Private.KEYBINDING_HOLD_TIMEOUT = 1000;\n    /**\n     * The timeout in ms for triggering a modifer key binding.\n     */\n    Private.modifierkeyTimeOut = 500;\n    /**\n     * Create a normalized command from an options object.\n     */\n    function createCommand(options) {\n        return {\n            execute: options.execute,\n            describedBy: asFunc(typeof options.describedBy === 'function'\n                ? options.describedBy\n                : { args: null, ...options.describedBy }, () => {\n                return { args: null };\n            }),\n            label: asFunc(options.label, emptyStringFunc),\n            mnemonic: asFunc(options.mnemonic, negativeOneFunc),\n            icon: asFunc(options.icon, undefinedFunc),\n            iconClass: asFunc(options.iconClass, emptyStringFunc),\n            iconLabel: asFunc(options.iconLabel, emptyStringFunc),\n            caption: asFunc(options.caption, emptyStringFunc),\n            usage: asFunc(options.usage, emptyStringFunc),\n            className: asFunc(options.className, emptyStringFunc),\n            dataset: asFunc(options.dataset, emptyDatasetFunc),\n            isEnabled: options.isEnabled || trueFunc,\n            isToggled: options.isToggled || falseFunc,\n            isToggleable: options.isToggleable || !!options.isToggled,\n            isVisible: options.isVisible || trueFunc\n        };\n    }\n    Private.createCommand = createCommand;\n    /**\n     * Create a key binding object from key binding options.\n     */\n    function createKeyBinding(options) {\n        var _a;\n        return {\n            keys: CommandRegistry.normalizeKeys(options),\n            selector: validateSelector(options),\n            command: options.command,\n            args: options.args || JSONExt.emptyObject,\n            preventDefault: (_a = options.preventDefault) !== null && _a !== void 0 ? _a : true\n        };\n    }\n    Private.createKeyBinding = createKeyBinding;\n    /**\n     * Find the key bindings which match a key sequence.\n     *\n     * This returns a match result which contains the best exact matching\n     * binding, and a flag which indicates if there are partial matches.\n     */\n    function matchKeyBinding(bindings, keys, event) {\n        // The current best exact match.\n        let exact = null;\n        // Partial matches.\n        let partial = [];\n        // The match distance for the exact match.\n        let distance = Infinity;\n        // The specificity for the exact match.\n        let specificity = 0;\n        // Iterate over the bindings and search for the best match.\n        for (let i = 0, n = bindings.length; i < n; ++i) {\n            // Lookup the current binding.\n            let binding = bindings[i];\n            // Check whether the key binding sequence is a match.\n            let sqm = matchSequence(binding.keys, keys);\n            // If there is no match, the binding is ignored.\n            if (sqm === 0 /* SequenceMatch.None */) {\n                continue;\n            }\n            // If it is a partial match and no other partial match has been\n            // found, ensure the selector matches and set the partial flag.\n            if (sqm === 2 /* SequenceMatch.Partial */) {\n                if (targetDistance(binding.selector, event) !== -1) {\n                    partial.push(binding);\n                }\n                continue;\n            }\n            // Ignore the match if the selector doesn't match, or if the\n            // matched node is farther away than the current best match.\n            let td = targetDistance(binding.selector, event);\n            if (td === -1 || td > distance) {\n                continue;\n            }\n            // Get the specificity for the selector.\n            let sp = Selector.calculateSpecificity(binding.selector);\n            // Update the best match if this match is stronger.\n            if (!exact || td < distance || sp >= specificity) {\n                exact = binding;\n                distance = td;\n                specificity = sp;\n            }\n        }\n        // Return the match result.\n        return { exact, partial };\n    }\n    Private.matchKeyBinding = matchKeyBinding;\n    /**\n     * Replay a keyboard event.\n     *\n     * This synthetically dispatches a clone of the keyboard event.\n     */\n    function replayKeyEvent(event) {\n        event.target.dispatchEvent(cloneKeyboardEvent(event));\n    }\n    Private.replayKeyEvent = replayKeyEvent;\n    function formatKey(key) {\n        if (Platform.IS_MAC) {\n            return MAC_DISPLAY.hasOwnProperty(key) ? MAC_DISPLAY[key] : key;\n        }\n        else {\n            return WIN_DISPLAY.hasOwnProperty(key) ? WIN_DISPLAY[key] : key;\n        }\n    }\n    Private.formatKey = formatKey;\n    const MAC_DISPLAY = {\n        Backspace: '⌫',\n        Tab: '⇥',\n        Enter: '⏎',\n        Shift: '⇧',\n        Ctrl: '⌃',\n        Alt: '⌥',\n        Escape: '⎋',\n        PageUp: '⇞',\n        PageDown: '⇟',\n        End: '↘',\n        Home: '↖',\n        ArrowLeft: '←',\n        ArrowUp: '↑',\n        ArrowRight: '→',\n        ArrowDown: '↓',\n        Delete: '⌦',\n        Cmd: '⌘'\n    };\n    const WIN_DISPLAY = {\n        Escape: 'Esc',\n        PageUp: 'Page Up',\n        PageDown: 'Page Down',\n        ArrowLeft: 'Left',\n        ArrowUp: 'Up',\n        ArrowRight: 'Right',\n        ArrowDown: 'Down',\n        Delete: 'Del'\n    };\n    /**\n     * A singleton empty string function.\n     */\n    const emptyStringFunc = () => '';\n    /**\n     * A singleton `-1` number function\n     */\n    const negativeOneFunc = () => -1;\n    /**\n     * A singleton true boolean function.\n     */\n    const trueFunc = () => true;\n    /**\n     * A singleton false boolean function.\n     */\n    const falseFunc = () => false;\n    /**\n     * A singleton empty dataset function.\n     */\n    const emptyDatasetFunc = () => ({});\n    /**\n     * A singleton undefined function\n     */\n    const undefinedFunc = () => undefined;\n    /**\n     * Cast a value or command func to a command func.\n     */\n    function asFunc(value, dfault) {\n        if (value === undefined) {\n            return dfault;\n        }\n        if (typeof value === 'function') {\n            return value;\n        }\n        return () => value;\n    }\n    /**\n     * Validate the selector for an options object.\n     *\n     * This returns the validated selector, or throws if the selector is\n     * invalid or contains commas.\n     */\n    function validateSelector(options) {\n        if (options.selector.indexOf(',') !== -1) {\n            throw new Error(`Selector cannot contain commas: ${options.selector}`);\n        }\n        if (!Selector.isValid(options.selector)) {\n            throw new Error(`Invalid selector: ${options.selector}`);\n        }\n        return options.selector;\n    }\n    /**\n     * Test whether a key binding sequence matches a key sequence.\n     *\n     * Returns a `SequenceMatch` value indicating the type of match.\n     */\n    function matchSequence(bindKeys, userKeys) {\n        if (bindKeys.length < userKeys.length) {\n            return 0 /* SequenceMatch.None */;\n        }\n        for (let i = 0, n = userKeys.length; i < n; ++i) {\n            if (bindKeys[i] !== userKeys[i]) {\n                return 0 /* SequenceMatch.None */;\n            }\n        }\n        if (bindKeys.length > userKeys.length) {\n            return 2 /* SequenceMatch.Partial */;\n        }\n        return 1 /* SequenceMatch.Exact */;\n    }\n    /**\n     * Find the distance from the target node to the first matching node.\n     *\n     * This traverses the event path from `target` to `currentTarget` and\n     * computes the distance from `target` to the first node which matches\n     * the CSS selector. If no match is found, `-1` is returned.\n     */\n    function targetDistance(selector, event) {\n        let targ = event.target;\n        let curr = event.currentTarget;\n        for (let dist = 0; targ !== null; targ = targ.parentElement, ++dist) {\n            if (targ.hasAttribute('data-lm-suppress-shortcuts')) {\n                return -1;\n            }\n            if (Selector.matches(targ, selector)) {\n                return dist;\n            }\n            if (targ === curr) {\n                return -1;\n            }\n        }\n        return -1;\n    }\n    /**\n     * Clone a keyboard event.\n     */\n    function cloneKeyboardEvent(event) {\n        // A custom event is required because Chrome nulls out the\n        // `keyCode` field in user-generated `KeyboardEvent` types.\n        let clone = document.createEvent('Event');\n        let bubbles = event.bubbles || true;\n        let cancelable = event.cancelable || true;\n        clone.initEvent(event.type || 'keydown', bubbles, cancelable);\n        clone.key = event.key || '';\n        clone.keyCode = event.keyCode || 0;\n        clone.which = event.keyCode || 0;\n        clone.ctrlKey = event.ctrlKey || false;\n        clone.altKey = event.altKey || false;\n        clone.shiftKey = event.shiftKey || false;\n        clone.metaKey = event.metaKey || false;\n        clone.view = event.view || window;\n        return clone;\n    }\n})(Private || (Private = {}));\n\nexport { CommandRegistry };\n//# sourceMappingURL=index.es6.js.map\n","(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@lumino/algorithm')) :\n    typeof define === 'function' && define.amd ? define(['exports', '@lumino/algorithm'], factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.lumino_coreutils = {}, global.lumino_algorithm));\n})(this, (function (exports, algorithm) { 'use strict';\n\n    // Copyright (c) Jupyter Development Team.\n    // Distributed under the terms of the Modified BSD License.\n    /*-----------------------------------------------------------------------------\n    | Copyright (c) 2014-2017, PhosphorJS Contributors\n    |\n    | Distributed under the terms of the BSD 3-Clause License.\n    |\n    | The full license is in the file LICENSE, distributed with this software.\n    |----------------------------------------------------------------------------*/\n    /**\n     * The namespace for JSON-specific functions.\n     */\n    exports.JSONExt = void 0;\n    (function (JSONExt) {\n        /**\n         * A shared frozen empty JSONObject\n         */\n        JSONExt.emptyObject = Object.freeze({});\n        /**\n         * A shared frozen empty JSONArray\n         */\n        JSONExt.emptyArray = Object.freeze([]);\n        /**\n         * Test whether a JSON value is a primitive.\n         *\n         * @param value - The JSON value of interest.\n         *\n         * @returns `true` if the value is a primitive,`false` otherwise.\n         */\n        function isPrimitive(value) {\n            return (value === null ||\n                typeof value === 'boolean' ||\n                typeof value === 'number' ||\n                typeof value === 'string');\n        }\n        JSONExt.isPrimitive = isPrimitive;\n        function isArray(value) {\n            return Array.isArray(value);\n        }\n        JSONExt.isArray = isArray;\n        function isObject(value) {\n            return !isPrimitive(value) && !isArray(value);\n        }\n        JSONExt.isObject = isObject;\n        /**\n         * Compare two JSON values for deep equality.\n         *\n         * @param first - The first JSON value of interest.\n         *\n         * @param second - The second JSON value of interest.\n         *\n         * @returns `true` if the values are equivalent, `false` otherwise.\n         */\n        function deepEqual(first, second) {\n            // Check referential and primitive equality first.\n            if (first === second) {\n                return true;\n            }\n            // If one is a primitive, the `===` check ruled out the other.\n            if (isPrimitive(first) || isPrimitive(second)) {\n                return false;\n            }\n            // Test whether they are arrays.\n            let a1 = isArray(first);\n            let a2 = isArray(second);\n            // Bail if the types are different.\n            if (a1 !== a2) {\n                return false;\n            }\n            // If they are both arrays, compare them.\n            if (a1 && a2) {\n                return deepArrayEqual(first, second);\n            }\n            // At this point, they must both be objects.\n            return deepObjectEqual(first, second);\n        }\n        JSONExt.deepEqual = deepEqual;\n        /**\n         * Create a deep copy of a JSON value.\n         *\n         * @param value - The JSON value to copy.\n         *\n         * @returns A deep copy of the given JSON value.\n         */\n        function deepCopy(value) {\n            // Do nothing for primitive values.\n            if (isPrimitive(value)) {\n                return value;\n            }\n            // Deep copy an array.\n            if (isArray(value)) {\n                return deepArrayCopy(value);\n            }\n            // Deep copy an object.\n            return deepObjectCopy(value);\n        }\n        JSONExt.deepCopy = deepCopy;\n        /**\n         * Compare two JSON arrays for deep equality.\n         */\n        function deepArrayEqual(first, second) {\n            // Check referential equality first.\n            if (first === second) {\n                return true;\n            }\n            // Test the arrays for equal length.\n            if (first.length !== second.length) {\n                return false;\n            }\n            // Compare the values for equality.\n            for (let i = 0, n = first.length; i < n; ++i) {\n                if (!deepEqual(first[i], second[i])) {\n                    return false;\n                }\n            }\n            // At this point, the arrays are equal.\n            return true;\n        }\n        /**\n         * Compare two JSON objects for deep equality.\n         */\n        function deepObjectEqual(first, second) {\n            // Check referential equality first.\n            if (first === second) {\n                return true;\n            }\n            // Check for the first object's keys in the second object.\n            for (let key in first) {\n                if (first[key] !== undefined && !(key in second)) {\n                    return false;\n                }\n            }\n            // Check for the second object's keys in the first object.\n            for (let key in second) {\n                if (second[key] !== undefined && !(key in first)) {\n                    return false;\n                }\n            }\n            // Compare the values for equality.\n            for (let key in first) {\n                // Get the values.\n                let firstValue = first[key];\n                let secondValue = second[key];\n                // If both are undefined, ignore the key.\n                if (firstValue === undefined && secondValue === undefined) {\n                    continue;\n                }\n                // If only one value is undefined, the objects are not equal.\n                if (firstValue === undefined || secondValue === undefined) {\n                    return false;\n                }\n                // Compare the values.\n                if (!deepEqual(firstValue, secondValue)) {\n                    return false;\n                }\n            }\n            // At this point, the objects are equal.\n            return true;\n        }\n        /**\n         * Create a deep copy of a JSON array.\n         */\n        function deepArrayCopy(value) {\n            let result = new Array(value.length);\n            for (let i = 0, n = value.length; i < n; ++i) {\n                result[i] = deepCopy(value[i]);\n            }\n            return result;\n        }\n        /**\n         * Create a deep copy of a JSON object.\n         */\n        function deepObjectCopy(value) {\n            let result = {};\n            for (let key in value) {\n                // Ignore undefined values.\n                let subvalue = value[key];\n                if (subvalue === undefined) {\n                    continue;\n                }\n                result[key] = deepCopy(subvalue);\n            }\n            return result;\n        }\n    })(exports.JSONExt || (exports.JSONExt = {}));\n\n    // Copyright (c) Jupyter Development Team.\n    // Distributed under the terms of the Modified BSD License.\n    /*-----------------------------------------------------------------------------\n    | Copyright (c) 2014-2017, PhosphorJS Contributors\n    |\n    | Distributed under the terms of the BSD 3-Clause License.\n    |\n    | The full license is in the file LICENSE, distributed with this software.\n    |----------------------------------------------------------------------------*/\n    /**\n     * An object which stores MIME data for general application use.\n     *\n     * #### Notes\n     * This class does not attempt to enforce \"correctness\" of MIME types\n     * and their associated data. Since this class is designed to transfer\n     * arbitrary data and objects within the same application, it assumes\n     * that the user provides correct and accurate data.\n     */\n    class MimeData {\n        constructor() {\n            this._types = [];\n            this._values = [];\n        }\n        /**\n         * Get an array of the MIME types contained within the dataset.\n         *\n         * @returns A new array of the MIME types, in order of insertion.\n         */\n        types() {\n            return this._types.slice();\n        }\n        /**\n         * Test whether the dataset has an entry for the given type.\n         *\n         * @param mime - The MIME type of interest.\n         *\n         * @returns `true` if the dataset contains a value for the given\n         *   MIME type, `false` otherwise.\n         */\n        hasData(mime) {\n            return this._types.indexOf(mime) !== -1;\n        }\n        /**\n         * Get the data value for the given MIME type.\n         *\n         * @param mime - The MIME type of interest.\n         *\n         * @returns The value for the given MIME type, or `undefined` if\n         *   the dataset does not contain a value for the type.\n         */\n        getData(mime) {\n            let i = this._types.indexOf(mime);\n            return i !== -1 ? this._values[i] : undefined;\n        }\n        /**\n         * Set the data value for the given MIME type.\n         *\n         * @param mime - The MIME type of interest.\n         *\n         * @param data - The data value for the given MIME type.\n         *\n         * #### Notes\n         * This will overwrite any previous entry for the MIME type.\n         */\n        setData(mime, data) {\n            this.clearData(mime);\n            this._types.push(mime);\n            this._values.push(data);\n        }\n        /**\n         * Remove the data entry for the given MIME type.\n         *\n         * @param mime - The MIME type of interest.\n         *\n         * #### Notes\n         * This is a no-op if there is no entry for the given MIME type.\n         */\n        clearData(mime) {\n            let i = this._types.indexOf(mime);\n            if (i !== -1) {\n                this._types.splice(i, 1);\n                this._values.splice(i, 1);\n            }\n        }\n        /**\n         * Remove all data entries from the dataset.\n         */\n        clear() {\n            this._types.length = 0;\n            this._values.length = 0;\n        }\n    }\n\n    // Copyright (c) Jupyter Development Team.\n    // Distributed under the terms of the Modified BSD License.\n    /**\n     * Plugin registry.\n     */\n    class PluginRegistry {\n        constructor(options = {}) {\n            this._application = null;\n            this._validatePlugin = () => true;\n            this._plugins = new Map();\n            this._services = new Map();\n            if (options.validatePlugin) {\n                console.info('Plugins may be rejected by the custom validation plugin method.');\n                this._validatePlugin = options.validatePlugin;\n            }\n        }\n        /**\n         * The application object.\n         *\n         * It will be provided as first argument to the\n         * plugins activation and deactivation functions.\n         *\n         * It can only be set once.\n         *\n         * By default, it is `null`.\n         */\n        get application() {\n            return this._application;\n        }\n        set application(v) {\n            if (this._application !== null) {\n                throw Error('PluginRegistry.application is already set. It cannot be overridden.');\n            }\n            this._application = v;\n        }\n        /**\n         * The list of all the deferred plugins.\n         */\n        get deferredPlugins() {\n            return Array.from(this._plugins)\n                .filter(([id, plugin]) => plugin.autoStart === 'defer')\n                .map(([id, plugin]) => id);\n        }\n        /**\n         * Get a plugin description.\n         *\n         * @param id - The ID of the plugin of interest.\n         *\n         * @returns The plugin description.\n         */\n        getPluginDescription(id) {\n            var _a, _b;\n            return (_b = (_a = this._plugins.get(id)) === null || _a === void 0 ? void 0 : _a.description) !== null && _b !== void 0 ? _b : '';\n        }\n        /**\n         * Test whether a plugin is registered with the application.\n         *\n         * @param id - The ID of the plugin of interest.\n         *\n         * @returns `true` if the plugin is registered, `false` otherwise.\n         */\n        hasPlugin(id) {\n            return this._plugins.has(id);\n        }\n        /**\n         * Test whether a plugin is activated with the application.\n         *\n         * @param id - The ID of the plugin of interest.\n         *\n         * @returns `true` if the plugin is activated, `false` otherwise.\n         */\n        isPluginActivated(id) {\n            var _a, _b;\n            return (_b = (_a = this._plugins.get(id)) === null || _a === void 0 ? void 0 : _a.activated) !== null && _b !== void 0 ? _b : false;\n        }\n        /**\n         * List the IDs of the plugins registered with the application.\n         *\n         * @returns A new array of the registered plugin IDs.\n         */\n        listPlugins() {\n            return Array.from(this._plugins.keys());\n        }\n        /**\n         * Register a plugin with the application.\n         *\n         * @param plugin - The plugin to register.\n         *\n         * #### Notes\n         * An error will be thrown if a plugin with the same ID is already\n         * registered, or if the plugin has a circular dependency.\n         *\n         * If the plugin provides a service which has already been provided\n         * by another plugin, the new service will override the old service.\n         */\n        registerPlugin(plugin) {\n            // Throw an error if the plugin ID is already registered.\n            if (this._plugins.has(plugin.id)) {\n                throw new TypeError(`Plugin '${plugin.id}' is already registered.`);\n            }\n            if (!this._validatePlugin(plugin)) {\n                throw new Error(`Plugin '${plugin.id}' is not valid.`);\n            }\n            // Create the normalized plugin data.\n            const data = Private.createPluginData(plugin);\n            // Ensure the plugin does not cause a cyclic dependency.\n            Private.ensureNoCycle(data, this._plugins, this._services);\n            // Add the service token to the service map.\n            if (data.provides) {\n                this._services.set(data.provides, data.id);\n            }\n            // Add the plugin to the plugin map.\n            this._plugins.set(data.id, data);\n        }\n        /**\n         * Register multiple plugins with the application.\n         *\n         * @param plugins - The plugins to register.\n         *\n         * #### Notes\n         * This calls `registerPlugin()` for each of the given plugins.\n         */\n        registerPlugins(plugins) {\n            for (const plugin of plugins) {\n                this.registerPlugin(plugin);\n            }\n        }\n        /**\n         * Deregister a plugin with the application.\n         *\n         * @param id - The ID of the plugin of interest.\n         *\n         * @param force - Whether to deregister the plugin even if it is active.\n         */\n        deregisterPlugin(id, force) {\n            const plugin = this._plugins.get(id);\n            if (!plugin) {\n                return;\n            }\n            if (plugin.activated && !force) {\n                throw new Error(`Plugin '${id}' is still active.`);\n            }\n            this._plugins.delete(id);\n        }\n        /**\n         * Activate the plugin with the given ID.\n         *\n         * @param id - The ID of the plugin of interest.\n         *\n         * @returns A promise which resolves when the plugin is activated\n         *   or rejects with an error if it cannot be activated.\n         */\n        async activatePlugin(id) {\n            // Reject the promise if the plugin is not registered.\n            const plugin = this._plugins.get(id);\n            if (!plugin) {\n                throw new ReferenceError(`Plugin '${id}' is not registered.`);\n            }\n            // Resolve immediately if the plugin is already activated.\n            if (plugin.activated) {\n                return;\n            }\n            // Return the pending resolver promise if it exists.\n            if (plugin.promise) {\n                return plugin.promise;\n            }\n            // Resolve the required services for the plugin.\n            const required = plugin.requires.map(t => this.resolveRequiredService(t));\n            // Resolve the optional services for the plugin.\n            const optional = plugin.optional.map(t => this.resolveOptionalService(t));\n            // Setup the resolver promise for the plugin.\n            plugin.promise = Promise.all([...required, ...optional])\n                .then(services => plugin.activate.apply(undefined, [this.application, ...services]))\n                .then(service => {\n                plugin.service = service;\n                plugin.activated = true;\n                plugin.promise = null;\n            })\n                .catch(error => {\n                plugin.promise = null;\n                throw error;\n            });\n            // Return the pending resolver promise.\n            return plugin.promise;\n        }\n        /**\n         * Activate all the deferred plugins.\n         *\n         * @returns A promise which will resolve when each plugin is activated\n         * or rejects with an error if one cannot be activated.\n         */\n        async activatePlugins(kind, options = {}) {\n            switch (kind) {\n                case 'defer': {\n                    const promises = this.deferredPlugins\n                        .filter(pluginId => this._plugins.get(pluginId).autoStart)\n                        .map(pluginId => {\n                        return this.activatePlugin(pluginId);\n                    });\n                    await Promise.all(promises);\n                    break;\n                }\n                case 'startUp': {\n                    // Collect the ids of the startup plugins.\n                    const startups = Private.collectStartupPlugins(this._plugins, options);\n                    // Generate the activation promises.\n                    const promises = startups.map(async (id) => {\n                        try {\n                            return await this.activatePlugin(id);\n                        }\n                        catch (error) {\n                            console.error(`Plugin '${id}' failed to activate.`, error);\n                        }\n                    });\n                    await Promise.all(promises);\n                    break;\n                }\n            }\n        }\n        /**\n         * Deactivate the plugin and its downstream dependents if and only if the\n         * plugin and its dependents all support `deactivate`.\n         *\n         * @param id - The ID of the plugin of interest.\n         *\n         * @returns A list of IDs of downstream plugins deactivated with this one.\n         */\n        async deactivatePlugin(id) {\n            // Reject the promise if the plugin is not registered.\n            const plugin = this._plugins.get(id);\n            if (!plugin) {\n                throw new ReferenceError(`Plugin '${id}' is not registered.`);\n            }\n            // Bail early if the plugin is not activated.\n            if (!plugin.activated) {\n                return [];\n            }\n            // Check that this plugin can deactivate.\n            if (!plugin.deactivate) {\n                throw new TypeError(`Plugin '${id}'#deactivate() method missing`);\n            }\n            // Find the optimal deactivation order for plugins downstream of this one.\n            const manifest = Private.findDependents(id, this._plugins, this._services);\n            const downstream = manifest.map(id => this._plugins.get(id));\n            // Check that all downstream plugins can deactivate.\n            for (const plugin of downstream) {\n                if (!plugin.deactivate) {\n                    throw new TypeError(`Plugin ${plugin.id}#deactivate() method missing (depends on ${id})`);\n                }\n            }\n            // Deactivate all downstream plugins.\n            for (const plugin of downstream) {\n                const services = [...plugin.requires, ...plugin.optional].map(service => {\n                    const id = this._services.get(service);\n                    return id ? this._plugins.get(id).service : null;\n                });\n                // Await deactivation so the next plugins only receive active services.\n                await plugin.deactivate(this.application, ...services);\n                plugin.service = null;\n                plugin.activated = false;\n            }\n            // Remove plugin ID and return manifest of deactivated plugins.\n            manifest.pop();\n            return manifest;\n        }\n        /**\n         * Resolve a required service of a given type.\n         *\n         * @param token - The token for the service type of interest.\n         *\n         * @returns A promise which resolves to an instance of the requested\n         *   service, or rejects with an error if it cannot be resolved.\n         *\n         * #### Notes\n         * Services are singletons. The same instance will be returned each\n         * time a given service token is resolved.\n         *\n         * If the plugin which provides the service has not been activated,\n         * resolving the service will automatically activate the plugin.\n         *\n         * User code will not typically call this method directly. Instead,\n         * the required services for the user's plugins will be resolved\n         * automatically when the plugin is activated.\n         */\n        async resolveRequiredService(token) {\n            // Reject the promise if there is no provider for the type.\n            const id = this._services.get(token);\n            if (!id) {\n                throw new TypeError(`No provider for: ${token.name}.`);\n            }\n            // Activate the plugin if necessary.\n            const plugin = this._plugins.get(id);\n            if (!plugin.activated) {\n                await this.activatePlugin(id);\n            }\n            return plugin.service;\n        }\n        /**\n         * Resolve an optional service of a given type.\n         *\n         * @param token - The token for the service type of interest.\n         *\n         * @returns A promise which resolves to an instance of the requested\n         *   service, or `null` if it cannot be resolved.\n         *\n         * #### Notes\n         * Services are singletons. The same instance will be returned each\n         * time a given service token is resolved.\n         *\n         * If the plugin which provides the service has not been activated,\n         * resolving the service will automatically activate the plugin.\n         *\n         * User code will not typically call this method directly. Instead,\n         * the optional services for the user's plugins will be resolved\n         * automatically when the plugin is activated.\n         */\n        async resolveOptionalService(token) {\n            // Resolve with `null` if there is no provider for the type.\n            const id = this._services.get(token);\n            if (!id) {\n                return null;\n            }\n            // Activate the plugin if necessary.\n            const plugin = this._plugins.get(id);\n            if (!plugin.activated) {\n                try {\n                    await this.activatePlugin(id);\n                }\n                catch (reason) {\n                    console.error(reason);\n                    return null;\n                }\n            }\n            return plugin.service;\n        }\n    }\n    /**\n     * The namespace for the module implementation details.\n     */\n    var Private;\n    (function (Private) {\n        class PluginData {\n            constructor(plugin) {\n                var _a, _b, _c, _d;\n                this._activated = false;\n                this._promise = null;\n                this._service = null;\n                this.id = plugin.id;\n                this.description = (_a = plugin.description) !== null && _a !== void 0 ? _a : '';\n                this.activate = plugin.activate;\n                this.deactivate = (_b = plugin.deactivate) !== null && _b !== void 0 ? _b : null;\n                this.provides = (_c = plugin.provides) !== null && _c !== void 0 ? _c : null;\n                this.autoStart = (_d = plugin.autoStart) !== null && _d !== void 0 ? _d : false;\n                this.requires = plugin.requires ? plugin.requires.slice() : [];\n                this.optional = plugin.optional ? plugin.optional.slice() : [];\n            }\n            /**\n             * Whether the plugin has been activated.\n             */\n            get activated() {\n                return this._activated;\n            }\n            set activated(a) {\n                this._activated = a;\n            }\n            /**\n             * The resolved service for the plugin, or `null`.\n             */\n            get service() {\n                return this._service;\n            }\n            set service(s) {\n                this._service = s;\n            }\n            /**\n             * The pending resolver promise, or `null`.\n             */\n            get promise() {\n                return this._promise;\n            }\n            set promise(p) {\n                this._promise = p;\n            }\n        }\n        /**\n         * Create a normalized plugin data object for the given plugin.\n         */\n        function createPluginData(plugin) {\n            return new PluginData(plugin);\n        }\n        Private.createPluginData = createPluginData;\n        /**\n         * Ensure no cycle is present in the plugin resolution graph.\n         *\n         * If a cycle is detected, an error will be thrown.\n         */\n        function ensureNoCycle(plugin, plugins, services) {\n            const dependencies = [...plugin.requires, ...plugin.optional];\n            const visit = (token) => {\n                if (token === plugin.provides) {\n                    return true;\n                }\n                const id = services.get(token);\n                if (!id) {\n                    return false;\n                }\n                const visited = plugins.get(id);\n                const dependencies = [...visited.requires, ...visited.optional];\n                if (dependencies.length === 0) {\n                    return false;\n                }\n                trace.push(id);\n                if (dependencies.some(visit)) {\n                    return true;\n                }\n                trace.pop();\n                return false;\n            };\n            // Bail early if there cannot be a cycle.\n            if (!plugin.provides || dependencies.length === 0) {\n                return;\n            }\n            // Setup a stack to trace service resolution.\n            const trace = [plugin.id];\n            // Throw an exception if a cycle is present.\n            if (dependencies.some(visit)) {\n                throw new ReferenceError(`Cycle detected: ${trace.join(' -> ')}.`);\n            }\n        }\n        Private.ensureNoCycle = ensureNoCycle;\n        /**\n         * Find dependents in deactivation order.\n         *\n         * @param id - The ID of the plugin of interest.\n         *\n         * @param plugins - The map containing all plugins.\n         *\n         * @param services - The map containing all services.\n         *\n         * @returns A list of dependent plugin IDs in order of deactivation\n         *\n         * #### Notes\n         * The final item of the returned list is always the plugin of interest.\n         */\n        function findDependents(id, plugins, services) {\n            const edges = new Array();\n            const add = (id) => {\n                const plugin = plugins.get(id);\n                // FIXME In the case of missing optional dependencies, we may consider\n                // deactivating and reactivating the plugin without the missing service.\n                const dependencies = [...plugin.requires, ...plugin.optional];\n                edges.push(...dependencies.reduce((acc, dep) => {\n                    const service = services.get(dep);\n                    if (service) {\n                        // An edge is oriented from dependent to provider.\n                        acc.push([id, service]);\n                    }\n                    return acc;\n                }, []));\n            };\n            for (const id of plugins.keys()) {\n                add(id);\n            }\n            // Filter edges\n            // - Get all packages that dependent on the package to be deactivated\n            const newEdges = edges.filter(edge => edge[1] === id);\n            let oldSize = 0;\n            while (newEdges.length > oldSize) {\n                const previousSize = newEdges.length;\n                // Get all packages that dependent on packages that will be deactivated\n                const packagesOfInterest = new Set(newEdges.map(edge => edge[0]));\n                for (const poi of packagesOfInterest) {\n                    edges\n                        .filter(edge => edge[1] === poi)\n                        .forEach(edge => {\n                        // We check it is not already included to deal with circular dependencies\n                        if (!newEdges.includes(edge)) {\n                            newEdges.push(edge);\n                        }\n                    });\n                }\n                oldSize = previousSize;\n            }\n            const sorted = algorithm.topologicSort(newEdges);\n            const index = sorted.findIndex(candidate => candidate === id);\n            if (index === -1) {\n                return [id];\n            }\n            return sorted.slice(0, index + 1);\n        }\n        Private.findDependents = findDependents;\n        /**\n         * Collect the IDs of the plugins to activate on startup.\n         */\n        function collectStartupPlugins(plugins, options) {\n            // Create a set to hold the plugin IDs.\n            const collection = new Set();\n            // Collect the auto-start (non deferred) plugins.\n            for (const id of plugins.keys()) {\n                if (plugins.get(id).autoStart === true) {\n                    collection.add(id);\n                }\n            }\n            // Add the startup plugins.\n            if (options.startPlugins) {\n                for (const id of options.startPlugins) {\n                    collection.add(id);\n                }\n            }\n            // Remove the ignored plugins.\n            if (options.ignorePlugins) {\n                for (const id of options.ignorePlugins) {\n                    collection.delete(id);\n                }\n            }\n            // Return the collected startup plugins.\n            return Array.from(collection);\n        }\n        Private.collectStartupPlugins = collectStartupPlugins;\n    })(Private || (Private = {}));\n\n    // Copyright (c) Jupyter Development Team.\n    // Distributed under the terms of the Modified BSD License.\n    /*-----------------------------------------------------------------------------\n    | Copyright (c) 2014-2017, PhosphorJS Contributors\n    |\n    | Distributed under the terms of the BSD 3-Clause License.\n    |\n    | The full license is in the file LICENSE, distributed with this software.\n    |----------------------------------------------------------------------------*/\n    /**\n     * A class which wraps a promise into a delegate object.\n     *\n     * #### Notes\n     * This class is useful when the logic to resolve or reject a promise\n     * cannot be defined at the point where the promise is created.\n     */\n    class PromiseDelegate {\n        /**\n         * Construct a new promise delegate.\n         */\n        constructor() {\n            this.promise = new Promise((resolve, reject) => {\n                this._resolve = resolve;\n                this._reject = reject;\n            });\n        }\n        /**\n         * Resolve the wrapped promise with the given value.\n         *\n         * @param value - The value to use for resolving the promise.\n         */\n        resolve(value) {\n            let resolve = this._resolve;\n            resolve(value);\n        }\n        /**\n         * Reject the wrapped promise with the given value.\n         *\n         * @reason - The reason for rejecting the promise.\n         */\n        reject(reason) {\n            let reject = this._reject;\n            reject(reason);\n        }\n    }\n\n    // Copyright (c) Jupyter Development Team.\n    // Distributed under the terms of the Modified BSD License.\n    /*-----------------------------------------------------------------------------\n    | Copyright (c) 2014-2017, PhosphorJS Contributors\n    |\n    | Distributed under the terms of the BSD 3-Clause License.\n    |\n    | The full license is in the file LICENSE, distributed with this software.\n    |----------------------------------------------------------------------------*/\n    /**\n     * A runtime object which captures compile-time type information.\n     *\n     * #### Notes\n     * A token captures the compile-time type of an interface or class in\n     * an object which can be used at runtime in a type-safe fashion.\n     */\n    class Token {\n        /**\n         * Construct a new token.\n         *\n         * @param name - A human readable name for the token.\n         * @param description - Token purpose description for documentation.\n         */\n        constructor(name, description) {\n            this.name = name;\n            this.description = description !== null && description !== void 0 ? description : '';\n            this._tokenStructuralPropertyT = null;\n        }\n    }\n\n    // Copyright (c) Jupyter Development Team.\n    // Distributed under the terms of the Modified BSD License.\n    /*-----------------------------------------------------------------------------\n    | Copyright (c) 2014-2017, PhosphorJS Contributors\n    |\n    | Distributed under the terms of the BSD 3-Clause License.\n    |\n    | The full license is in the file LICENSE, distributed with this software.\n    |----------------------------------------------------------------------------*/\n    // Fallback\n    function fallbackRandomValues(buffer) {\n        let value = 0;\n        for (let i = 0, n = buffer.length; i < n; ++i) {\n            if (i % 4 === 0) {\n                value = (Math.random() * 0xffffffff) >>> 0;\n            }\n            buffer[i] = value & 0xff;\n            value >>>= 8;\n        }\n    }\n\n    // Copyright (c) Jupyter Development Team.\n    // Distributed under the terms of the Modified BSD License.\n    /*-----------------------------------------------------------------------------\n    | Copyright (c) 2014-2017, PhosphorJS Contributors\n    |\n    | Distributed under the terms of the BSD 3-Clause License.\n    |\n    | The full license is in the file LICENSE, distributed with this software.\n    |----------------------------------------------------------------------------*/\n    /**\n     * The namespace for random number related functionality.\n     */\n    exports.Random = void 0;\n    (function (Random) {\n        /**\n         * A function which generates random bytes.\n         *\n         * @param buffer - The `Uint8Array` to fill with random bytes.\n         *\n         * #### Notes\n         * A cryptographically strong random number generator will be used if\n         * available. Otherwise, `Math.random` will be used as a fallback for\n         * randomness.\n         *\n         * The following RNGs are supported, listed in order of precedence:\n         *   - `window.crypto.getRandomValues`\n         *   - `window.msCrypto.getRandomValues`\n         *   - `require('crypto').randomFillSync\n         *   - `require('crypto').randomBytes\n         *   - `Math.random`\n         */\n        Random.getRandomValues = (() => {\n            // Look up the crypto module if available.\n            const crypto = (typeof window !== 'undefined' && (window.crypto || window.msCrypto)) ||\n                null;\n            // Modern browsers and IE 11\n            if (crypto && typeof crypto.getRandomValues === 'function') {\n                return function getRandomValues(buffer) {\n                    return crypto.getRandomValues(buffer);\n                };\n            }\n            // Fallback\n            return fallbackRandomValues;\n        })();\n    })(exports.Random || (exports.Random = {}));\n\n    // Copyright (c) Jupyter Development Team.\n    // Distributed under the terms of the Modified BSD License.\n    /*-----------------------------------------------------------------------------\n    | Copyright (c) 2014-2017, PhosphorJS Contributors\n    |\n    | Distributed under the terms of the BSD 3-Clause License.\n    |\n    | The full license is in the file LICENSE, distributed with this software.\n    |----------------------------------------------------------------------------*/\n    /**\n     * A function which creates a function that generates UUID v4 identifiers.\n     *\n     * @returns A new function that creates a UUID v4 string.\n     *\n     * #### Notes\n     * This implementation complies with RFC 4122.\n     *\n     * This uses `Random.getRandomValues()` for random bytes, which in\n     * turn will use the underlying `crypto` module of the platform if\n     * it is available. The fallback for randomness is `Math.random`.\n     */\n    function uuid4Factory(getRandomValues) {\n        // Create a 16 byte array to hold the random values.\n        const bytes = new Uint8Array(16);\n        // Create a look up table from bytes to hex strings.\n        const lut = new Array(256);\n        // Pad the single character hex digits with a leading zero.\n        for (let i = 0; i < 16; ++i) {\n            lut[i] = '0' + i.toString(16);\n        }\n        // Populate the rest of the hex digits.\n        for (let i = 16; i < 256; ++i) {\n            lut[i] = i.toString(16);\n        }\n        // Return a function which generates the UUID.\n        return function uuid4() {\n            // Get a new batch of random values.\n            getRandomValues(bytes);\n            // Set the UUID version number to 4.\n            bytes[6] = 0x40 | (bytes[6] & 0x0f);\n            // Set the clock sequence bit to the RFC spec.\n            bytes[8] = 0x80 | (bytes[8] & 0x3f);\n            // Assemble the UUID string.\n            return (lut[bytes[0]] +\n                lut[bytes[1]] +\n                lut[bytes[2]] +\n                lut[bytes[3]] +\n                '-' +\n                lut[bytes[4]] +\n                lut[bytes[5]] +\n                '-' +\n                lut[bytes[6]] +\n                lut[bytes[7]] +\n                '-' +\n                lut[bytes[8]] +\n                lut[bytes[9]] +\n                '-' +\n                lut[bytes[10]] +\n                lut[bytes[11]] +\n                lut[bytes[12]] +\n                lut[bytes[13]] +\n                lut[bytes[14]] +\n                lut[bytes[15]]);\n        };\n    }\n\n    // Copyright (c) Jupyter Development Team.\n    // Distributed under the terms of the Modified BSD License.\n    /*-----------------------------------------------------------------------------\n    | Copyright (c) 2014-2017, PhosphorJS Contributors\n    |\n    | Distributed under the terms of the BSD 3-Clause License.\n    |\n    | The full license is in the file LICENSE, distributed with this software.\n    |----------------------------------------------------------------------------*/\n    /**\n     * The namespace for UUID related functionality.\n     */\n    exports.UUID = void 0;\n    (function (UUID) {\n        /**\n         * A function which generates UUID v4 identifiers.\n         *\n         * @returns A new UUID v4 string.\n         *\n         * #### Notes\n         * This implementation complies with RFC 4122.\n         *\n         * This uses `Random.getRandomValues()` for random bytes, which in\n         * turn will use the underlying `crypto` module of the platform if\n         * it is available. The fallback for randomness is `Math.random`.\n         */\n        UUID.uuid4 = uuid4Factory(exports.Random.getRandomValues);\n    })(exports.UUID || (exports.UUID = {}));\n\n    exports.MimeData = MimeData;\n    exports.PluginRegistry = PluginRegistry;\n    exports.PromiseDelegate = PromiseDelegate;\n    exports.Token = Token;\n\n}));\n//# sourceMappingURL=index.js.map\n","import { Signal } from '@lumino/signaling';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module disposable\n */\n/**\n * A disposable object which delegates to a callback function.\n */\nclass DisposableDelegate {\n    /**\n     * Construct a new disposable delegate.\n     *\n     * @param fn - The callback function to invoke on dispose.\n     */\n    constructor(fn) {\n        this._fn = fn;\n    }\n    /**\n     * Test whether the delegate has been disposed.\n     */\n    get isDisposed() {\n        return !this._fn;\n    }\n    /**\n     * Dispose of the delegate and invoke the callback function.\n     */\n    dispose() {\n        if (!this._fn) {\n            return;\n        }\n        let fn = this._fn;\n        this._fn = null;\n        fn();\n    }\n}\n/**\n * An observable disposable object which delegates to a callback function.\n */\nclass ObservableDisposableDelegate extends DisposableDelegate {\n    constructor() {\n        super(...arguments);\n        this._disposed = new Signal(this);\n    }\n    /**\n     * A signal emitted when the delegate is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * Dispose of the delegate and invoke the callback function.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        super.dispose();\n        this._disposed.emit(undefined);\n        Signal.clearData(this);\n    }\n}\n/**\n * An object which manages a collection of disposable items.\n */\nclass DisposableSet {\n    constructor() {\n        this._isDisposed = false;\n        this._items = new Set();\n    }\n    /**\n     * Test whether the set has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the set and the items it contains.\n     *\n     * #### Notes\n     * Items are disposed in the order they are added to the set.\n     */\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._items.forEach(item => {\n            item.dispose();\n        });\n        this._items.clear();\n    }\n    /**\n     * Test whether the set contains a specific item.\n     *\n     * @param item - The item of interest.\n     *\n     * @returns `true` if the set contains the item, `false` otherwise.\n     */\n    contains(item) {\n        return this._items.has(item);\n    }\n    /**\n     * Add a disposable item to the set.\n     *\n     * @param item - The item to add to the set.\n     *\n     * #### Notes\n     * If the item is already contained in the set, this is a no-op.\n     */\n    add(item) {\n        this._items.add(item);\n    }\n    /**\n     * Remove a disposable item from the set.\n     *\n     * @param item - The item to remove from the set.\n     *\n     * #### Notes\n     * If the item is not contained in the set, this is a no-op.\n     */\n    remove(item) {\n        this._items.delete(item);\n    }\n    /**\n     * Remove all items from the set.\n     */\n    clear() {\n        this._items.clear();\n    }\n}\n/**\n * The namespace for the `DisposableSet` class statics.\n */\n(function (DisposableSet) {\n    /**\n     * Create a disposable set from an iterable of items.\n     *\n     * @param items - The iterable object of interest.\n     *\n     * @returns A new disposable initialized with the given items.\n     */\n    function from(items) {\n        let set = new DisposableSet();\n        for (const item of items) {\n            set.add(item);\n        }\n        return set;\n    }\n    DisposableSet.from = from;\n})(DisposableSet || (DisposableSet = {}));\n/**\n * An observable object which manages a collection of disposable items.\n */\nclass ObservableDisposableSet extends DisposableSet {\n    constructor() {\n        super(...arguments);\n        this._disposed = new Signal(this);\n    }\n    /**\n     * A signal emitted when the set is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * Dispose of the set and the items it contains.\n     *\n     * #### Notes\n     * Items are disposed in the order they are added to the set.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        super.dispose();\n        this._disposed.emit(undefined);\n        Signal.clearData(this);\n    }\n}\n/**\n * The namespace for the `ObservableDisposableSet` class statics.\n */\n(function (ObservableDisposableSet) {\n    /**\n     * Create an observable disposable set from an iterable of items.\n     *\n     * @param items - The iterable object of interest.\n     *\n     * @returns A new disposable initialized with the given items.\n     */\n    function from(items) {\n        let set = new ObservableDisposableSet();\n        for (const item of items) {\n            set.add(item);\n        }\n        return set;\n    }\n    ObservableDisposableSet.from = from;\n})(ObservableDisposableSet || (ObservableDisposableSet = {}));\n\nexport { DisposableDelegate, DisposableSet, ObservableDisposableDelegate, ObservableDisposableSet };\n//# sourceMappingURL=index.es6.js.map\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2019, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for clipboard related functionality.\n */\nvar ClipboardExt;\n(function (ClipboardExt) {\n    /**\n     * Copy text to the system clipboard.\n     *\n     * @param text - The text to copy to the clipboard.\n     */\n    function copyText(text) {\n        // Fetch the document body.\n        const body = document.body;\n        // Set up the clipboard event listener.\n        const handler = (event) => {\n            // Stop the event propagation.\n            event.preventDefault();\n            event.stopPropagation();\n            // Set the clipboard data.\n            event.clipboardData.setData('text', text);\n            // Remove the event listener.\n            body.removeEventListener('copy', handler, true);\n        };\n        // Add the event listener.\n        body.addEventListener('copy', handler, true);\n        // Trigger the event.\n        document.execCommand('copy');\n    }\n    ClipboardExt.copyText = copyText;\n})(ClipboardExt || (ClipboardExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for element related utilities.\n */\nvar ElementExt;\n(function (ElementExt) {\n    /**\n     * Compute the box sizing for an element.\n     *\n     * @param element - The element of interest.\n     *\n     * @returns The box sizing data for the specified element.\n     */\n    function boxSizing(element) {\n        let style = window.getComputedStyle(element);\n        let bt = parseFloat(style.borderTopWidth) || 0;\n        let bl = parseFloat(style.borderLeftWidth) || 0;\n        let br = parseFloat(style.borderRightWidth) || 0;\n        let bb = parseFloat(style.borderBottomWidth) || 0;\n        let pt = parseFloat(style.paddingTop) || 0;\n        let pl = parseFloat(style.paddingLeft) || 0;\n        let pr = parseFloat(style.paddingRight) || 0;\n        let pb = parseFloat(style.paddingBottom) || 0;\n        let hs = bl + pl + pr + br;\n        let vs = bt + pt + pb + bb;\n        return {\n            borderTop: bt,\n            borderLeft: bl,\n            borderRight: br,\n            borderBottom: bb,\n            paddingTop: pt,\n            paddingLeft: pl,\n            paddingRight: pr,\n            paddingBottom: pb,\n            horizontalSum: hs,\n            verticalSum: vs\n        };\n    }\n    ElementExt.boxSizing = boxSizing;\n    /**\n     * Compute the size limits for an element.\n     *\n     * @param element - The element of interest.\n     *\n     * @returns The size limit data for the specified element.\n     */\n    function sizeLimits(element) {\n        let style = window.getComputedStyle(element);\n        let minWidth = parseFloat(style.minWidth) || 0;\n        let minHeight = parseFloat(style.minHeight) || 0;\n        let maxWidth = parseFloat(style.maxWidth) || Infinity;\n        let maxHeight = parseFloat(style.maxHeight) || Infinity;\n        maxWidth = Math.max(minWidth, maxWidth);\n        maxHeight = Math.max(minHeight, maxHeight);\n        return { minWidth, minHeight, maxWidth, maxHeight };\n    }\n    ElementExt.sizeLimits = sizeLimits;\n    /**\n     * Test whether a client position lies within an element.\n     *\n     * @param element - The DOM element of interest.\n     *\n     * @param clientX - The client X coordinate of interest.\n     *\n     * @param clientY - The client Y coordinate of interest.\n     *\n     * @returns Whether the point is within the given element.\n     */\n    function hitTest(element, clientX, clientY) {\n        let rect = element.getBoundingClientRect();\n        return (clientX >= rect.left &&\n            clientX < rect.right &&\n            clientY >= rect.top &&\n            clientY < rect.bottom);\n    }\n    ElementExt.hitTest = hitTest;\n    /**\n     * Vertically scroll an element into view if needed.\n     *\n     * @param area - The scroll area element.\n     *\n     * @param element - The element of interest.\n     *\n     * #### Notes\n     * This follows the \"nearest\" behavior of the native `scrollIntoView`\n     * method, which is not supported by all browsers.\n     * https://drafts.csswg.org/cssom-view/#element-scrolling-members\n     *\n     * If the element fully covers the visible area or is fully contained\n     * within the visible area, no scrolling will take place. Otherwise,\n     * the nearest edges of the area and element are aligned.\n     */\n    function scrollIntoViewIfNeeded(area, element) {\n        let ar = area.getBoundingClientRect();\n        let er = element.getBoundingClientRect();\n        if (er.top <= ar.top && er.bottom >= ar.bottom) {\n            return;\n        }\n        if (er.top < ar.top && er.height <= ar.height) {\n            area.scrollTop -= ar.top - er.top;\n            return;\n        }\n        if (er.bottom > ar.bottom && er.height >= ar.height) {\n            area.scrollTop -= ar.top - er.top;\n            return;\n        }\n        if (er.top < ar.top && er.height > ar.height) {\n            area.scrollTop -= ar.bottom - er.bottom;\n            return;\n        }\n        if (er.bottom > ar.bottom && er.height < ar.height) {\n            area.scrollTop -= ar.bottom - er.bottom;\n            return;\n        }\n    }\n    ElementExt.scrollIntoViewIfNeeded = scrollIntoViewIfNeeded;\n})(ElementExt || (ElementExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for platform related utilities.\n */\nvar Platform;\n(function (Platform) {\n    /**\n     * A flag indicating whether the platform is Mac.\n     */\n    Platform.IS_MAC = !!navigator.platform.match(/Mac/i);\n    /**\n     * A flag indicating whether the platform is Windows.\n     */\n    Platform.IS_WIN = !!navigator.platform.match(/Win/i);\n    /**\n     * A flag indicating whether the browser is IE.\n     */\n    Platform.IS_IE = /Trident/.test(navigator.userAgent);\n    /**\n     * A flag indicating whether the browser is Edge.\n     */\n    Platform.IS_EDGE = /Edge/.test(navigator.userAgent);\n    /**\n     * Test whether the `accel` key is pressed.\n     *\n     * @param event - The keyboard or mouse event of interest.\n     *\n     * @returns Whether the `accel` key is pressed.\n     *\n     * #### Notes\n     * On Mac the `accel` key is the command key. On all other\n     * platforms the `accel` key is the control key.\n     */\n    function accelKey(event) {\n        return Platform.IS_MAC ? event.metaKey : event.ctrlKey;\n    }\n    Platform.accelKey = accelKey;\n})(Platform || (Platform = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for selector related utilities.\n */\nvar Selector;\n(function (Selector) {\n    /**\n     * Calculate the specificity of a single CSS selector.\n     *\n     * @param selector - The CSS selector of interest.\n     *\n     * @returns The specificity of the selector.\n     *\n     * #### Undefined Behavior\n     * The selector is invalid.\n     *\n     * #### Notes\n     * This is based on https://www.w3.org/TR/css3-selectors/#specificity\n     *\n     * A larger number represents a more specific selector.\n     *\n     * The smallest possible specificity is `0`.\n     *\n     * The result is represented as a hex number `0x<aa><bb><cc>` where\n     * each component is the count of the respective selector clause.\n     *\n     * If the selector contains commas, only the first clause is used.\n     *\n     * The computed result is cached, so subsequent calculations for the\n     * same selector are extremely fast.\n     */\n    function calculateSpecificity(selector) {\n        if (selector in Private.specificityCache) {\n            return Private.specificityCache[selector];\n        }\n        let result = Private.calculateSingle(selector);\n        return (Private.specificityCache[selector] = result);\n    }\n    Selector.calculateSpecificity = calculateSpecificity;\n    /**\n     * Test whether a selector is a valid CSS selector.\n     *\n     * @param selector - The CSS selector of interest.\n     *\n     * @returns `true` if the selector is valid, `false` otherwise.\n     *\n     * #### Notes\n     * The computed result is cached, so subsequent tests for the same\n     * selector are extremely fast.\n     */\n    function isValid(selector) {\n        if (selector in Private.validityCache) {\n            return Private.validityCache[selector];\n        }\n        let result = true;\n        try {\n            Private.testElem.querySelector(selector);\n        }\n        catch (err) {\n            result = false;\n        }\n        return (Private.validityCache[selector] = result);\n    }\n    Selector.isValid = isValid;\n    /**\n     * Test whether an element matches a CSS selector.\n     *\n     * @param element - The element of interest.\n     *\n     * @param selector - The valid CSS selector of interest.\n     *\n     * @returns `true` if the element is a match, `false` otherwise.\n     *\n     * #### Notes\n     * This function uses the builtin browser capabilities when possible,\n     * falling back onto a document query otherwise.\n     */\n    function matches(element, selector) {\n        return Private.protoMatchFunc.call(element, selector);\n    }\n    Selector.matches = matches;\n})(Selector || (Selector = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n    /**\n     * A cache of computed selector specificity values.\n     */\n    Private.specificityCache = Object.create(null);\n    /**\n     * A cache of computed selector validity.\n     */\n    Private.validityCache = Object.create(null);\n    /**\n     * An empty element for testing selector validity.\n     */\n    Private.testElem = document.createElement('div');\n    /**\n     * A cross-browser CSS selector matching prototype function.\n     */\n    Private.protoMatchFunc = (() => {\n        let proto = Element.prototype;\n        return (proto.matches ||\n            proto.matchesSelector ||\n            proto.mozMatchesSelector ||\n            proto.msMatchesSelector ||\n            proto.oMatchesSelector ||\n            proto.webkitMatchesSelector ||\n            function (selector) {\n                let elem = this;\n                let matches = elem.ownerDocument\n                    ? elem.ownerDocument.querySelectorAll(selector)\n                    : [];\n                return Array.prototype.indexOf.call(matches, elem) !== -1;\n            });\n    })();\n    /**\n     * Calculate the specificity of a single selector.\n     *\n     * The behavior is undefined if the selector is invalid.\n     */\n    function calculateSingle(selector) {\n        // Ignore anything after the first comma.\n        selector = selector.split(',', 1)[0];\n        // Setup the aggregate counters.\n        let a = 0;\n        let b = 0;\n        let c = 0;\n        // Apply a regex to the front of the selector. If it succeeds, that\n        // portion of the selector is removed. Returns a success/fail flag.\n        function match(re) {\n            let match = selector.match(re);\n            if (match === null) {\n                return false;\n            }\n            selector = selector.slice(match[0].length);\n            return true;\n        }\n        // Replace the negation pseudo-class (which is ignored),\n        // but keep its inner content (which is not ignored).\n        selector = selector.replace(NEGATION_RE, ' $1 ');\n        // Continue matching until the selector is consumed.\n        while (selector.length > 0) {\n            // Match an ID selector.\n            if (match(ID_RE)) {\n                a++;\n                continue;\n            }\n            // Match a class selector.\n            if (match(CLASS_RE)) {\n                b++;\n                continue;\n            }\n            // Match an attribute selector.\n            if (match(ATTR_RE)) {\n                b++;\n                continue;\n            }\n            // Match a pseudo-element selector. This is done before matching\n            // a pseudo-class since this regex overlaps with that regex.\n            if (match(PSEUDO_ELEM_RE)) {\n                c++;\n                continue;\n            }\n            // Match a pseudo-class selector.\n            if (match(PSEDUO_CLASS_RE)) {\n                b++;\n                continue;\n            }\n            // Match a plain type selector.\n            if (match(TYPE_RE)) {\n                c++;\n                continue;\n            }\n            // Finally, match any ignored characters.\n            if (match(IGNORE_RE)) {\n                continue;\n            }\n            // At this point, the selector is assumed to be invalid.\n            return 0;\n        }\n        // Clamp each component to a reasonable base.\n        a = Math.min(a, 0xff);\n        b = Math.min(b, 0xff);\n        c = Math.min(c, 0xff);\n        // Combine the components into a single result.\n        return (a << 16) | (b << 8) | c;\n    }\n    Private.calculateSingle = calculateSingle;\n    /**\n     * A regex which matches an ID selector at string start.\n     */\n    const ID_RE = /^#[^\\s\\+>~#\\.\\[:]+/;\n    /**\n     * A regex which matches a class selector at string start.\n     */\n    const CLASS_RE = /^\\.[^\\s\\+>~#\\.\\[:]+/;\n    /**\n     * A regex which matches an attribute selector at string start.\n     */\n    const ATTR_RE = /^\\[[^\\]]+\\]/;\n    /**\n     * A regex which matches a type selector at string start.\n     */\n    const TYPE_RE = /^[^\\s\\+>~#\\.\\[:]+/;\n    /**\n     * A regex which matches a pseudo-element selector at string start.\n     */\n    const PSEUDO_ELEM_RE = /^(::[^\\s\\+>~#\\.\\[:]+|:first-line|:first-letter|:before|:after)/;\n    /**\n     * A regex which matches a pseudo-class selector at string start.\n     */\n    const PSEDUO_CLASS_RE = /^:[^\\s\\+>~#\\.\\[:]+/;\n    /**\n     * A regex which matches ignored characters at string start.\n     */\n    const IGNORE_RE = /^[\\s\\+>~\\*]+/;\n    /**\n     * A regex which matches the negation pseudo-class globally.\n     */\n    const NEGATION_RE = /:not\\(([^\\)]+)\\)/g;\n})(Private || (Private = {}));\n\nexport { ClipboardExt, ElementExt, Platform, Selector };\n//# sourceMappingURL=index.es6.js.map\n","import { DisposableDelegate } from '@lumino/disposable';\n\n/**\n * An object which manages a drag-drop operation.\n *\n * A drag object dispatches four different events to drop targets:\n *\n * - `'lm-dragenter'` - Dispatched when the mouse enters the target\n *   element. This event must be canceled in order to receive any\n *   of the other events.\n *\n * - `'lm-dragover'` - Dispatched when the mouse moves over the drop\n *   target. It must cancel the event and set the `dropAction` to one\n *   of the supported actions in order to receive drop events.\n *\n * - `'lm-dragleave'` - Dispatched when the mouse leaves the target\n *   element. This includes moving the mouse into child elements.\n *\n * - `'lm-drop'`- Dispatched when the mouse is released over the target\n *   element when the target indicates an appropriate drop action. If\n *   the event is canceled, the indicated drop action is returned to\n *   the initiator through the resolved promise.\n *\n * A drag operation can be terminated at any time by pressing `Escape`\n * or by disposing the drag object.\n *\n * A drag object has the ability to automatically scroll a scrollable\n * element when the mouse is hovered near one of its edges. To enable\n * this, add the `data-lm-dragscroll` attribute to any element which\n * the drag object should consider for scrolling.\n *\n * #### Notes\n * This class is designed to be used when dragging and dropping custom\n * data *within* a single application. It is *not* a replacement for\n * the native drag-drop API. Instead, it provides an API which allows\n * drag operations to be initiated programmatically and enables the\n * transfer of arbitrary non-string objects; features which are not\n * possible with the native drag-drop API.\n */\nclass Drag {\n    /**\n     * Construct a new drag object.\n     *\n     * @param options - The options for initializing the drag.\n     */\n    constructor(options) {\n        /**\n         * The scroll loop handler function.\n         */\n        this._onScrollFrame = () => {\n            // Bail early if there is no scroll target.\n            if (!this._scrollTarget) {\n                return;\n            }\n            // Unpack the scroll target.\n            let { element, edge, distance } = this._scrollTarget;\n            // Calculate the scroll delta using nonlinear acceleration.\n            let d = Private.SCROLL_EDGE_SIZE - distance;\n            let f = Math.pow(d / Private.SCROLL_EDGE_SIZE, 2);\n            let s = Math.max(1, Math.round(f * Private.SCROLL_EDGE_SIZE));\n            // Scroll the element in the specified direction.\n            switch (edge) {\n                case 'top':\n                    element.scrollTop -= s;\n                    break;\n                case 'left':\n                    element.scrollLeft -= s;\n                    break;\n                case 'right':\n                    element.scrollLeft += s;\n                    break;\n                case 'bottom':\n                    element.scrollTop += s;\n                    break;\n            }\n            // Request the next cycle of the scroll loop.\n            requestAnimationFrame(this._onScrollFrame);\n        };\n        this._disposed = false;\n        this._dropAction = 'none';\n        this._override = null;\n        this._currentTarget = null;\n        this._currentElement = null;\n        this._promise = null;\n        this._scrollTarget = null;\n        this._resolve = null;\n        this.document = options.document || document;\n        this.mimeData = options.mimeData;\n        this.dragImage = options.dragImage || null;\n        this.proposedAction = options.proposedAction || 'copy';\n        this.supportedActions = options.supportedActions || 'all';\n        this.source = options.source || null;\n    }\n    /**\n     * Dispose of the resources held by the drag object.\n     *\n     * #### Notes\n     * This will cancel the drag operation if it is active.\n     */\n    dispose() {\n        // Do nothing if the drag object is already disposed.\n        if (this._disposed) {\n            return;\n        }\n        this._disposed = true;\n        // If there is a current target, dispatch a drag leave event.\n        if (this._currentTarget) {\n            let event = new PointerEvent('pointerup', {\n                bubbles: true,\n                cancelable: true,\n                clientX: -1,\n                clientY: -1\n            });\n            Private.dispatchDragLeave(this, this._currentTarget, null, event);\n        }\n        // Finalize the drag object with `'none'`.\n        this._finalize('none');\n    }\n    /**\n     * Test whether the drag object is disposed.\n     */\n    get isDisposed() {\n        return this._disposed;\n    }\n    /**\n     * Start the drag operation at the specified client position.\n     *\n     * @param clientX - The client X position for the drag start.\n     *\n     * @param clientY - The client Y position for the drag start.\n     *\n     * @returns A promise which resolves to the result of the drag.\n     *\n     * #### Notes\n     * If the drag has already been started, the promise created by the\n     * first call to `start` is returned.\n     *\n     * If the drag operation has ended, or if the drag object has been\n     * disposed, the returned promise will resolve to `'none'`.\n     *\n     * The drag object will be automatically disposed when drag operation\n     * completes. This means `Drag` objects are for single-use only.\n     *\n     * This method assumes the left mouse button is already held down.\n     */\n    start(clientX, clientY) {\n        // If the drag object is already disposed, resolve to `none`.\n        if (this._disposed) {\n            return Promise.resolve('none');\n        }\n        // If the drag has already been started, return the promise.\n        if (this._promise) {\n            return this._promise;\n        }\n        // Install the document listeners for the drag object.\n        this._addListeners();\n        // Attach the drag image at the specified client position.\n        this._attachDragImage(clientX, clientY);\n        // Create the promise which will be resolved on completion.\n        this._promise = new Promise(resolve => {\n            this._resolve = resolve;\n        });\n        // Trigger a fake move event to kick off the drag operation.\n        let event = new PointerEvent('pointermove', {\n            bubbles: true,\n            cancelable: true,\n            clientX,\n            clientY\n        });\n        document.dispatchEvent(event);\n        // Return the pending promise for the drag operation.\n        return this._promise;\n    }\n    /**\n     * Handle the DOM events for the drag operation.\n     *\n     * @param event - The DOM event sent to the drag object.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the document. It should not be\n     * called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'pointermove':\n                this._evtPointerMove(event);\n                break;\n            case 'pointerup':\n                this._evtPointerUp(event);\n                break;\n            case 'keydown':\n                this._evtKeyDown(event);\n                break;\n            default:\n                // Stop all other events during drag-drop.\n                event.preventDefault();\n                event.stopPropagation();\n                break;\n        }\n    }\n    /**\n     * Move the drag image element to the specified location.\n     *\n     * This is a no-op if there is no drag image element.\n     */\n    moveDragImage(clientX, clientY) {\n        if (!this.dragImage) {\n            return;\n        }\n        let style = this.dragImage.style;\n        style.transform = `translate(${clientX}px, ${clientY}px)`;\n    }\n    /**\n     * Handle the `'pointermove'` event for the drag object.\n     */\n    _evtPointerMove(event) {\n        // Stop all input events during drag-drop.\n        event.preventDefault();\n        event.stopPropagation();\n        // Update the current target node and dispatch enter/leave events.\n        this._updateCurrentTarget(event);\n        // Update the drag scroll element.\n        this._updateDragScroll(event);\n        // Move the drag image to the specified client position. This is\n        // performed *after* dispatching to prevent unnecessary reflows.\n        this.moveDragImage(event.clientX, event.clientY);\n    }\n    /**\n     * Handle the `'pointerup'` event for the drag object.\n     */\n    _evtPointerUp(event) {\n        // Stop all input events during drag-drop.\n        event.preventDefault();\n        event.stopPropagation();\n        // Do nothing if the left button is not released.\n        if (event.button !== 0) {\n            return;\n        }\n        // Update the current target node and dispatch enter/leave events.\n        // This prevents a subtle issue where the DOM mutates under the\n        // cursor after the last move event but before the drop event.\n        this._updateCurrentTarget(event);\n        // If there is no current target, finalize with `'none'`.\n        if (!this._currentTarget) {\n            this._finalize('none');\n            return;\n        }\n        // If the last drop action was `'none'`, dispatch a leave event\n        // to the current target and finalize the drag with `'none'`.\n        if (this._dropAction === 'none') {\n            Private.dispatchDragLeave(this, this._currentTarget, null, event);\n            this._finalize('none');\n            return;\n        }\n        // Dispatch the drop event at the current target and finalize\n        // with the resulting drop action.\n        let action = Private.dispatchDrop(this, this._currentTarget, event);\n        this._finalize(action);\n    }\n    /**\n     * Handle the `'keydown'` event for the drag object.\n     */\n    _evtKeyDown(event) {\n        // Stop all input events during drag-drop.\n        event.preventDefault();\n        event.stopPropagation();\n        // Cancel the drag if `Escape` is pressed.\n        if (event.keyCode === 27) {\n            this.dispose();\n        }\n    }\n    /**\n     * Add the document event listeners for the drag object.\n     */\n    _addListeners() {\n        document.addEventListener('pointerdown', this, true);\n        document.addEventListener('pointermove', this, true);\n        document.addEventListener('pointerup', this, true);\n        document.addEventListener('pointerenter', this, true);\n        document.addEventListener('pointerleave', this, true);\n        document.addEventListener('pointerover', this, true);\n        document.addEventListener('pointerout', this, true);\n        document.addEventListener('keydown', this, true);\n        document.addEventListener('keyup', this, true);\n        document.addEventListener('keypress', this, true);\n        document.addEventListener('contextmenu', this, true);\n    }\n    /**\n     * Remove the document event listeners for the drag object.\n     */\n    _removeListeners() {\n        document.removeEventListener('pointerdown', this, true);\n        document.removeEventListener('pointermove', this, true);\n        document.removeEventListener('pointerup', this, true);\n        document.removeEventListener('pointerenter', this, true);\n        document.removeEventListener('pointerleave', this, true);\n        document.removeEventListener('pointerover', this, true);\n        document.removeEventListener('pointerout', this, true);\n        document.removeEventListener('keydown', this, true);\n        document.removeEventListener('keyup', this, true);\n        document.removeEventListener('keypress', this, true);\n        document.removeEventListener('contextmenu', this, true);\n    }\n    /**\n     * Update the drag scroll element under the mouse.\n     */\n    _updateDragScroll(event) {\n        // Find the scroll target under the mouse.\n        let target = Private.findScrollTarget(event);\n        // Bail if there is nothing to scroll.\n        if (!this._scrollTarget && !target) {\n            return;\n        }\n        // Start the scroll loop if needed.\n        if (!this._scrollTarget) {\n            setTimeout(this._onScrollFrame, 500);\n        }\n        // Update the scroll target.\n        this._scrollTarget = target;\n    }\n    /**\n     * Update the current target node using the given mouse event.\n     */\n    _updateCurrentTarget(event) {\n        // Fetch common local state.\n        let prevTarget = this._currentTarget;\n        let currTarget = this._currentTarget;\n        let prevElem = this._currentElement;\n        // Find the current indicated element at the given position.\n        let currElem = Private.findElementBehindBackdrop(event, this.document);\n        // Update the current element reference.\n        this._currentElement = currElem;\n        // If the indicated element changes from the previous iteration,\n        // and is different from the current target, dispatch the exit\n        // event to the target.\n        if (currElem !== prevElem && currElem !== currTarget) {\n            Private.dispatchDragExit(this, currTarget, currElem, event);\n        }\n        // If the indicated element changes from the previous iteration,\n        // and is different from the current target, dispatch the enter\n        // event and compute the new target element.\n        if (currElem !== prevElem && currElem !== currTarget) {\n            currTarget = Private.dispatchDragEnter(this, currElem, currTarget, event);\n        }\n        // If the current target element has changed, update the current\n        // target reference and dispatch the leave event to the old target.\n        if (currTarget !== prevTarget) {\n            this._currentTarget = currTarget;\n            Private.dispatchDragLeave(this, prevTarget, currTarget, event);\n        }\n        // Dispatch the drag over event and update the drop action.\n        let action = Private.dispatchDragOver(this, currTarget, event);\n        this._setDropAction(action);\n    }\n    /**\n     * Attach the drag image element at the specified location.\n     *\n     * This is a no-op if there is no drag image element.\n     */\n    _attachDragImage(clientX, clientY) {\n        if (!this.dragImage) {\n            return;\n        }\n        this.dragImage.classList.add('lm-mod-drag-image');\n        let style = this.dragImage.style;\n        style.pointerEvents = 'none';\n        style.position = 'fixed';\n        style.transform = `translate(${clientX}px, ${clientY}px)`;\n        const body = this.document instanceof Document\n            ? this.document.body\n            : this.document.firstElementChild;\n        body.appendChild(this.dragImage);\n    }\n    /**\n     * Detach the drag image element from the DOM.\n     *\n     * This is a no-op if there is no drag image element.\n     */\n    _detachDragImage() {\n        if (!this.dragImage) {\n            return;\n        }\n        let parent = this.dragImage.parentNode;\n        if (!parent) {\n            return;\n        }\n        parent.removeChild(this.dragImage);\n    }\n    /**\n     * Set the internal drop action state and update the drag cursor.\n     */\n    _setDropAction(action) {\n        action = Private.validateAction(action, this.supportedActions);\n        if (this._override && this._dropAction === action) {\n            return;\n        }\n        switch (action) {\n            case 'none':\n                this._dropAction = action;\n                this._override = Drag.overrideCursor('no-drop', this.document);\n                break;\n            case 'copy':\n                this._dropAction = action;\n                this._override = Drag.overrideCursor('copy', this.document);\n                break;\n            case 'link':\n                this._dropAction = action;\n                this._override = Drag.overrideCursor('alias', this.document);\n                break;\n            case 'move':\n                this._dropAction = action;\n                this._override = Drag.overrideCursor('move', this.document);\n                break;\n        }\n    }\n    /**\n     * Finalize the drag operation and resolve the drag promise.\n     */\n    _finalize(action) {\n        // Store the resolve function as a temp variable.\n        let resolve = this._resolve;\n        // Remove the document event listeners.\n        this._removeListeners();\n        // Detach the drag image.\n        this._detachDragImage();\n        // Dispose of the cursor override.\n        if (this._override) {\n            this._override.dispose();\n            this._override = null;\n        }\n        // Clear the mime data.\n        this.mimeData.clear();\n        // Clear the rest of the internal drag state.\n        this._disposed = true;\n        this._dropAction = 'none';\n        this._currentTarget = null;\n        this._currentElement = null;\n        this._scrollTarget = null;\n        this._promise = null;\n        this._resolve = null;\n        // Finally, resolve the promise to the given drop action.\n        if (resolve) {\n            resolve(action);\n        }\n    }\n}\n/**\n * The namespace for the `Drag` class statics.\n */\n(function (Drag) {\n    /**\n     * A custom event used for drag-drop operations.\n     *\n     * #### Notes\n     * In order to receive `'lm-dragover'`, `'lm-dragleave'`, or `'lm-drop'`\n     * events, a drop target must cancel the `'lm-dragenter'` event by\n     * calling the event's `preventDefault()` method.\n     */\n    class Event extends DragEvent {\n        constructor(event, options) {\n            super(options.type, {\n                bubbles: true,\n                cancelable: true,\n                altKey: event.altKey,\n                button: event.button,\n                clientX: event.clientX,\n                clientY: event.clientY,\n                ctrlKey: event.ctrlKey,\n                detail: 0,\n                metaKey: event.metaKey,\n                relatedTarget: options.related,\n                screenX: event.screenX,\n                screenY: event.screenY,\n                shiftKey: event.shiftKey,\n                view: window\n            });\n            const { drag } = options;\n            this.dropAction = 'none';\n            this.mimeData = drag.mimeData;\n            this.proposedAction = drag.proposedAction;\n            this.supportedActions = drag.supportedActions;\n            this.source = drag.source;\n        }\n    }\n    Drag.Event = Event;\n    /**\n     * Override the cursor icon for the entire document.\n     *\n     * @param cursor - The string representing the cursor style.\n     *\n     * @returns A disposable which will clear the override when disposed.\n     *\n     * #### Notes\n     * The most recent call to `overrideCursor` takes precedence.\n     * Disposing an old override has no effect on the current override.\n     *\n     * This utility function is used by the `Drag` class to override the\n     * mouse cursor during a drag-drop operation, but it can also be used\n     * by other classes to fix the cursor icon during normal mouse drags.\n     *\n     * #### Example\n     * ```typescript\n     * import { Drag } from '@lumino/dragdrop';\n     *\n     * // Force the cursor to be 'wait' for the entire document.\n     * let override = Drag.overrideCursor('wait');\n     *\n     * // Clear the override by disposing the return value.\n     * override.dispose();\n     * ```\n     */\n    function overrideCursor(cursor, doc = document) {\n        return Private.overrideCursor(cursor, doc);\n    }\n    Drag.overrideCursor = overrideCursor;\n})(Drag || (Drag = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The size of a drag scroll edge, in pixels.\n     */\n    Private.SCROLL_EDGE_SIZE = 20;\n    /**\n     * Validate the given action is one of the supported actions.\n     *\n     * Returns the given action or `'none'` if the action is unsupported.\n     */\n    function validateAction(action, supported) {\n        return actionTable[action] & supportedTable[supported] ? action : 'none';\n    }\n    Private.validateAction = validateAction;\n    /**\n     * Find the event target using pointer position if given, or otherwise\n     * the central position of the backdrop.\n     */\n    function findElementBehindBackdrop(event, root = document) {\n        if (event) {\n            // Check if we already cached element for this event.\n            if (lastElementEventSearch && event == lastElementEventSearch.event) {\n                return lastElementEventSearch.element;\n            }\n            Private.cursorBackdrop.style.zIndex = '-1000';\n            const element = root.elementFromPoint(event.clientX, event.clientY);\n            Private.cursorBackdrop.style.zIndex = '';\n            lastElementEventSearch = { event, element };\n            return element;\n        }\n        else {\n            const transform = Private.cursorBackdrop.style.transform;\n            if (lastElementSearch && transform === lastElementSearch.transform) {\n                return lastElementSearch.element;\n            }\n            const bbox = Private.cursorBackdrop.getBoundingClientRect();\n            Private.cursorBackdrop.style.zIndex = '-1000';\n            const element = root.elementFromPoint(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n            Private.cursorBackdrop.style.zIndex = '';\n            lastElementSearch = { transform, element };\n            return element;\n        }\n    }\n    Private.findElementBehindBackdrop = findElementBehindBackdrop;\n    let lastElementEventSearch = null;\n    let lastElementSearch = null;\n    /**\n     * Find the drag scroll target under the mouse, if any.\n     */\n    function findScrollTarget(event) {\n        // Look up the client mouse position.\n        let x = event.clientX;\n        let y = event.clientY;\n        // Get the element under the mouse.\n        let element = findElementBehindBackdrop(event);\n        // Search for a scrollable target based on the mouse position.\n        // The null assert in third clause of for-loop is required due to:\n        // https://github.com/Microsoft/TypeScript/issues/14143\n        for (; element; element = element.parentElement) {\n            // Ignore elements which are not marked as scrollable.\n            if (!element.hasAttribute('data-lm-dragscroll')) {\n                continue;\n            }\n            // Set up the coordinate offsets for the element.\n            let offsetX = 0;\n            let offsetY = 0;\n            if (element === document.body) {\n                offsetX = window.pageXOffset;\n                offsetY = window.pageYOffset;\n            }\n            // Get the element bounds in viewport coordinates.\n            let r = element.getBoundingClientRect();\n            let top = r.top + offsetY;\n            let left = r.left + offsetX;\n            let right = left + r.width;\n            let bottom = top + r.height;\n            // Skip the element if it's not under the mouse.\n            if (x < left || x >= right || y < top || y >= bottom) {\n                continue;\n            }\n            // Compute the distance to each edge.\n            let dl = x - left + 1;\n            let dt = y - top + 1;\n            let dr = right - x;\n            let db = bottom - y;\n            // Find the smallest of the edge distances.\n            let distance = Math.min(dl, dt, dr, db);\n            // Skip the element if the mouse is not within a scroll edge.\n            if (distance > Private.SCROLL_EDGE_SIZE) {\n                continue;\n            }\n            // Set up the edge result variable.\n            let edge;\n            // Find the edge for the computed distance.\n            switch (distance) {\n                case db:\n                    edge = 'bottom';\n                    break;\n                case dt:\n                    edge = 'top';\n                    break;\n                case dr:\n                    edge = 'right';\n                    break;\n                case dl:\n                    edge = 'left';\n                    break;\n                default:\n                    throw 'unreachable';\n            }\n            // Compute how much the element can scroll in width and height.\n            let dsw = element.scrollWidth - element.clientWidth;\n            let dsh = element.scrollHeight - element.clientHeight;\n            // Determine if the element should be scrolled for the edge.\n            let shouldScroll;\n            switch (edge) {\n                case 'top':\n                    shouldScroll = dsh > 0 && element.scrollTop > 0;\n                    break;\n                case 'left':\n                    shouldScroll = dsw > 0 && element.scrollLeft > 0;\n                    break;\n                case 'right':\n                    shouldScroll = dsw > 0 && element.scrollLeft < dsw;\n                    break;\n                case 'bottom':\n                    shouldScroll = dsh > 0 && element.scrollTop < dsh;\n                    break;\n                default:\n                    throw 'unreachable';\n            }\n            // Skip the element if it should not be scrolled.\n            if (!shouldScroll) {\n                continue;\n            }\n            // Return the drag scroll target.\n            return { element, edge, distance };\n        }\n        // No drag scroll target was found.\n        return null;\n    }\n    Private.findScrollTarget = findScrollTarget;\n    /**\n     * Dispatch a drag enter event to the indicated element.\n     *\n     * @param drag - The drag object associated with the action.\n     *\n     * @param currElem - The currently indicated element, or `null`. This\n     *   is the \"immediate user selection\" from the whatwg spec.\n     *\n     * @param currTarget - The current drag target element, or `null`. This\n     *   is the \"current target element\" from the whatwg spec.\n     *\n     * @param event - The mouse event related to the action.\n     *\n     * @returns The element to use as the current drag target. This is the\n     *   \"current target element\" from the whatwg spec, and may be `null`.\n     *\n     * #### Notes\n     * This largely implements the drag enter portion of the whatwg spec:\n     * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n     */\n    function dispatchDragEnter(drag, currElem, currTarget, event) {\n        // If the current element is null, return null as the new target.\n        if (!currElem) {\n            return null;\n        }\n        // Dispatch a drag enter event to the current element.\n        let dragEvent = new Drag.Event(event, {\n            drag,\n            related: currTarget,\n            type: 'lm-dragenter'\n        });\n        let canceled = !currElem.dispatchEvent(dragEvent);\n        // If the event was canceled, use the current element as the new target.\n        if (canceled) {\n            return currElem;\n        }\n        // If the current element is the document body, keep the original target.\n        const body = drag.document instanceof Document\n            ? drag.document.body\n            : drag.document.firstElementChild;\n        if (currElem === body) {\n            return currTarget;\n        }\n        // Dispatch a drag enter event on the document body.\n        dragEvent = new Drag.Event(event, {\n            drag,\n            related: currTarget,\n            type: 'lm-dragenter'\n        });\n        body.dispatchEvent(dragEvent);\n        // Ignore the event cancellation, and use the body as the new target.\n        return body;\n    }\n    Private.dispatchDragEnter = dispatchDragEnter;\n    /**\n     * Dispatch a drag exit event to the indicated element.\n     *\n     * @param drag - The drag object associated with the action.\n     *\n     * @param prevTarget - The previous target element, or `null`. This\n     *   is the previous \"current target element\" from the whatwg spec.\n     *\n     * @param currTarget - The current drag target element, or `null`. This\n     *   is the \"current target element\" from the whatwg spec.\n     *\n     * @param event - The mouse event related to the action.\n     *\n     * #### Notes\n     * This largely implements the drag exit portion of the whatwg spec:\n     * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n     */\n    function dispatchDragExit(drag, prevTarget, currTarget, event) {\n        // If the previous target is null, do nothing.\n        if (!prevTarget) {\n            return;\n        }\n        // Dispatch the drag exit event to the previous target.\n        let dragEvent = new Drag.Event(event, {\n            drag,\n            related: currTarget,\n            type: 'lm-dragexit'\n        });\n        prevTarget.dispatchEvent(dragEvent);\n    }\n    Private.dispatchDragExit = dispatchDragExit;\n    /**\n     * Dispatch a drag leave event to the indicated element.\n     *\n     * @param drag - The drag object associated with the action.\n     *\n     * @param prevTarget - The previous target element, or `null`. This\n     *   is the previous \"current target element\" from the whatwg spec.\n     *\n     * @param currTarget - The current drag target element, or `null`. This\n     *   is the \"current target element\" from the whatwg spec.\n     *\n     * @param event - The mouse event related to the action.\n     *\n     * #### Notes\n     * This largely implements the drag leave portion of the whatwg spec:\n     * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n     */\n    function dispatchDragLeave(drag, prevTarget, currTarget, event) {\n        // If the previous target is null, do nothing.\n        if (!prevTarget) {\n            return;\n        }\n        // Dispatch the drag leave event to the previous target.\n        let dragEvent = new Drag.Event(event, {\n            drag,\n            related: currTarget,\n            type: 'lm-dragleave'\n        });\n        prevTarget.dispatchEvent(dragEvent);\n    }\n    Private.dispatchDragLeave = dispatchDragLeave;\n    /**\n     * Dispatch a drag over event to the indicated element.\n     *\n     * @param drag - The drag object associated with the action.\n     *\n     * @param currTarget - The current drag target element, or `null`. This\n     *   is the \"current target element\" from the whatwg spec.\n     *\n     * @param event - The mouse event related to the action.\n     *\n     * @returns The `DropAction` result of the drag over event.\n     *\n     * #### Notes\n     * This largely implements the drag over portion of the whatwg spec:\n     * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n     */\n    function dispatchDragOver(drag, currTarget, event) {\n        // If there is no current target, the drop action is none.\n        if (!currTarget) {\n            return 'none';\n        }\n        // Dispatch the drag over event to the current target.\n        let dragEvent = new Drag.Event(event, {\n            drag,\n            related: null,\n            type: 'lm-dragover'\n        });\n        let canceled = !currTarget.dispatchEvent(dragEvent);\n        // If the event was canceled, return the drop action result.\n        if (canceled) {\n            return dragEvent.dropAction;\n        }\n        // Otherwise, the effective drop action is none.\n        return 'none';\n    }\n    Private.dispatchDragOver = dispatchDragOver;\n    /**\n     * Dispatch a drop event to the indicated element.\n     *\n     * @param drag - The drag object associated with the action.\n     *\n     * @param currTarget - The current drag target element, or `null`. This\n     *   is the \"current target element\" from the whatwg spec.\n     *\n     * @param event - The mouse event related to the action.\n     *\n     * @returns The `DropAction` result of the drop event.\n     *\n     * #### Notes\n     * This largely implements the drag over portion of the whatwg spec:\n     * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n     */\n    function dispatchDrop(drag, currTarget, event) {\n        // If there is no current target, the drop action is none.\n        if (!currTarget) {\n            return 'none';\n        }\n        // Dispatch the drop event to the current target.\n        let dragEvent = new Drag.Event(event, {\n            drag,\n            related: null,\n            type: 'lm-drop'\n        });\n        let canceled = !currTarget.dispatchEvent(dragEvent);\n        // If the event was canceled, return the drop action result.\n        if (canceled) {\n            return dragEvent.dropAction;\n        }\n        // Otherwise, the effective drop action is none.\n        return 'none';\n    }\n    Private.dispatchDrop = dispatchDrop;\n    /**\n     * A lookup table from drop action to bit value.\n     */\n    const actionTable = {\n        none: 0x0,\n        copy: 0x1,\n        link: 0x2,\n        move: 0x4\n    };\n    /**\n     * A lookup table from supported action to drop action bit mask.\n     */\n    const supportedTable = {\n        none: actionTable['none'],\n        copy: actionTable['copy'],\n        link: actionTable['link'],\n        move: actionTable['move'],\n        'copy-link': actionTable['copy'] | actionTable['link'],\n        'copy-move': actionTable['copy'] | actionTable['move'],\n        'link-move': actionTable['link'] | actionTable['move'],\n        all: actionTable['copy'] | actionTable['link'] | actionTable['move']\n    };\n    /**\n     * Implementation of `Drag.overrideCursor`.\n     */\n    function overrideCursor(cursor, doc = document) {\n        let id = ++overrideCursorID;\n        const body = doc instanceof Document\n            ? doc.body\n            : doc.firstElementChild;\n        if (!Private.cursorBackdrop.isConnected) {\n            // Hide the backdrop until the pointer moves to avoid issues with\n            // native double click detection, used in e.g. datagrid editing.\n            Private.cursorBackdrop.style.transform = 'scale(0)';\n            body.appendChild(Private.cursorBackdrop);\n            resetBackdropScroll();\n            document.addEventListener('pointermove', alignBackdrop, {\n                capture: true,\n                passive: true\n            });\n            Private.cursorBackdrop.addEventListener('scroll', propagateBackdropScroll, {\n                capture: true,\n                passive: true\n            });\n        }\n        Private.cursorBackdrop.style.cursor = cursor;\n        return new DisposableDelegate(() => {\n            if (id === overrideCursorID && Private.cursorBackdrop.isConnected) {\n                document.removeEventListener('pointermove', alignBackdrop, true);\n                Private.cursorBackdrop.removeEventListener('scroll', propagateBackdropScroll, true);\n                body.removeChild(Private.cursorBackdrop);\n            }\n        });\n    }\n    Private.overrideCursor = overrideCursor;\n    /**\n     * Move cursor backdrop to match cursor position.\n     */\n    function alignBackdrop(event) {\n        if (!Private.cursorBackdrop) {\n            return;\n        }\n        Private.cursorBackdrop.style.transform = `translate(${event.clientX}px, ${event.clientY}px)`;\n    }\n    /**\n     * Propagate the scroll event from the backdrop element to the scroll target.\n     * The scroll target is defined by presence of `data-lm-dragscroll` attribute.\n     */\n    function propagateBackdropScroll(_event) {\n        if (!Private.cursorBackdrop) {\n            return;\n        }\n        // Get the element under behind the centre of the cursor backdrop\n        // (essentially behind the cursor, but possibly a few pixels off).\n        let element = findElementBehindBackdrop();\n        if (!element) {\n            return;\n        }\n        // Find scroll target.\n        const scrollTarget = element.closest('[data-lm-dragscroll]');\n        if (!scrollTarget) {\n            return;\n        }\n        // Apply the scroll delta to the correct target.\n        scrollTarget.scrollTop += Private.cursorBackdrop.scrollTop - backdropScrollOrigin;\n        scrollTarget.scrollLeft += Private.cursorBackdrop.scrollLeft - backdropScrollOrigin;\n        // Center the scroll position.\n        resetBackdropScroll();\n    }\n    /**\n     * Reset the backdrop scroll to allow further scrolling.\n     */\n    function resetBackdropScroll() {\n        Private.cursorBackdrop.scrollTop = backdropScrollOrigin;\n        Private.cursorBackdrop.scrollLeft = backdropScrollOrigin;\n    }\n    /**\n     * The center of the backdrop node scroll area.\n     */\n    const backdropScrollOrigin = 500;\n    /**\n     * Create cursor backdrop node.\n     */\n    function createCursorBackdrop() {\n        const backdrop = document.createElement('div');\n        backdrop.classList.add('lm-cursor-backdrop');\n        return backdrop;\n    }\n    /**\n     * The internal id for the active cursor override.\n     */\n    let overrideCursorID = 0;\n    /**\n     * A backdrop node overriding pointer cursor.\n     *\n     * #### Notes\n     * We use a backdrop node rather than setting the cursor directly on the body\n     * because setting it on body requires more extensive style recalculation for\n     * reliable application of the cursor, this is the cursor not being overriden\n     * when over child elements with another style like `cursor: other!important`.\n     */\n    Private.cursorBackdrop = createCursorBackdrop();\n})(Private || (Private = {}));\n\nexport { Drag };\n//# sourceMappingURL=index.es6.js.map\n","\n      import API from \"!../../../@jupyterlab/builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../@jupyterlab/builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../@jupyterlab/builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../@jupyterlab/builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../@jupyterlab/builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../@jupyterlab/builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../@jupyterlab/builder/node_modules/css-loader/dist/cjs.js!./index.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../@jupyterlab/builder/node_modules/css-loader/dist/cjs.js!./index.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\nimport './index.css';\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module keyboard\n */\n/**\n * Get the global application keyboard layout instance.\n *\n * @returns The keyboard layout for use by the application.\n *\n * #### Notes\n * The default keyboard layout is US-English.\n */\nfunction getKeyboardLayout() {\n    return Private.keyboardLayout;\n}\n/**\n * Set the global application keyboard layout instance.\n *\n * @param layout The keyboard layout for use by the application.\n *\n * #### Notes\n * The keyboard layout should typically be set on application startup\n * to a layout which is appropriate for the user's system.\n */\nfunction setKeyboardLayout(layout) {\n    Private.keyboardLayout = layout;\n}\n/**\n * A concrete implementation of {@link IKeyboardLayout} based on keycodes.\n *\n * The `keyCode` property of a `'keydown'` event is a browser and OS\n * specific representation of the physical key (not character) which\n * was pressed on a keyboard. While not the most convenient API, it\n * is currently the only one which works reliably on all browsers.\n *\n * This class accepts a user-defined mapping of keycode to key, which\n * allows for reliable shortcuts tailored to the user's system.\n */\nclass KeycodeLayout {\n    /**\n     * Construct a new keycode layout.\n     *\n     * @param name - The human readable name for the layout.\n     *\n     * @param codes - A mapping of keycode to key value.\n     *\n     * @param modifierKeys - Array of modifier key names\n     */\n    constructor(name, codes, modifierKeys = []) {\n        this.name = name;\n        this._codes = codes;\n        this._keys = KeycodeLayout.extractKeys(codes);\n        this._modifierKeys = KeycodeLayout.convertToKeySet(modifierKeys);\n    }\n    /**\n     * Get an array of the key values supported by the layout.\n     *\n     * @returns A new array of the supported key values.\n     */\n    keys() {\n        return Object.keys(this._keys);\n    }\n    /**\n     * Test whether the given key is a valid value for the layout.\n     *\n     * @param key - The user provided key to test for validity.\n     *\n     * @returns `true` if the key is valid, `false` otherwise.\n     */\n    isValidKey(key) {\n        return key in this._keys;\n    }\n    /**\n     * Test whether the given key is a modifier key.\n     *\n     * @param key - The user provided key.\n     *\n     * @returns `true` if the key is a modifier key, `false` otherwise.\n     */\n    isModifierKey(key) {\n        return key in this._modifierKeys;\n    }\n    /**\n     * Get the key for a `'keydown'` event.\n     *\n     * @param event - The event object for a `'keydown'` event.\n     *\n     * @returns The associated key value, or an empty string if\n     *   the event does not represent a valid primary key.\n     */\n    keyForKeydownEvent(event) {\n        return this._codes[event.keyCode] || '';\n    }\n}\n/**\n * The namespace for the `KeycodeLayout` class statics.\n */\n(function (KeycodeLayout) {\n    /**\n     * Extract the set of keys from a code map.\n     *\n     * @param codes - The code map of interest.\n     *\n     * @returns A set of the keys in the code map.\n     */\n    function extractKeys(codes) {\n        let keys = Object.create(null);\n        for (let c in codes) {\n            keys[codes[c]] = true;\n        }\n        return keys;\n    }\n    KeycodeLayout.extractKeys = extractKeys;\n    /**\n     * Convert array of keys to a key set.\n     *\n     * @param keys - The array that needs to be converted\n     *\n     * @returns A set of the keys in the array.\n     */\n    function convertToKeySet(keys) {\n        let keySet = Object(null);\n        for (let i = 0, n = keys.length; i < n; ++i) {\n            keySet[keys[i]] = true;\n        }\n        return keySet;\n    }\n    KeycodeLayout.convertToKeySet = convertToKeySet;\n})(KeycodeLayout || (KeycodeLayout = {}));\n/**\n * A keycode-based keyboard layout for US English keyboards.\n *\n * This layout is valid for the following OS/Browser combinations.\n *\n * - Windows\n *   - Chrome\n *   - Firefox\n *   - IE\n *\n * - OSX\n *   - Chrome\n *   - Firefox\n *   - Safari\n *\n * - Linux\n *   - Chrome\n *   - Firefox\n *\n * Other combinations may also work, but are untested.\n */\nconst EN_US = new KeycodeLayout('en-us', {\n    8: 'Backspace',\n    9: 'Tab',\n    13: 'Enter',\n    16: 'Shift',\n    17: 'Ctrl',\n    18: 'Alt',\n    19: 'Pause',\n    27: 'Escape',\n    32: 'Space',\n    33: 'PageUp',\n    34: 'PageDown',\n    35: 'End',\n    36: 'Home',\n    37: 'ArrowLeft',\n    38: 'ArrowUp',\n    39: 'ArrowRight',\n    40: 'ArrowDown',\n    45: 'Insert',\n    46: 'Delete',\n    48: '0',\n    49: '1',\n    50: '2',\n    51: '3',\n    52: '4',\n    53: '5',\n    54: '6',\n    55: '7',\n    56: '8',\n    57: '9',\n    59: ';',\n    61: '=',\n    65: 'A',\n    66: 'B',\n    67: 'C',\n    68: 'D',\n    69: 'E',\n    70: 'F',\n    71: 'G',\n    72: 'H',\n    73: 'I',\n    74: 'J',\n    75: 'K',\n    76: 'L',\n    77: 'M',\n    78: 'N',\n    79: 'O',\n    80: 'P',\n    81: 'Q',\n    82: 'R',\n    83: 'S',\n    84: 'T',\n    85: 'U',\n    86: 'V',\n    87: 'W',\n    88: 'X',\n    89: 'Y',\n    90: 'Z',\n    91: 'Meta',\n    93: 'ContextMenu',\n    96: '0',\n    97: '1',\n    98: '2',\n    99: '3',\n    100: '4',\n    101: '5',\n    102: '6',\n    103: '7',\n    104: '8',\n    105: '9',\n    106: '*',\n    107: '+',\n    109: '-',\n    110: '.',\n    111: '/',\n    112: 'F1',\n    113: 'F2',\n    114: 'F3',\n    115: 'F4',\n    116: 'F5',\n    117: 'F6',\n    118: 'F7',\n    119: 'F8',\n    120: 'F9',\n    121: 'F10',\n    122: 'F11',\n    123: 'F12',\n    173: '-',\n    186: ';',\n    187: '=',\n    188: ',',\n    189: '-',\n    190: '.',\n    191: '/',\n    192: '`',\n    219: '[',\n    220: '\\\\',\n    221: ']',\n    222: \"'\",\n    224: 'Meta' // firefox\n}, ['Shift', 'Ctrl', 'Alt', 'Meta'] // modifier keys\n);\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The global keyboard layout instance.\n     */\n    Private.keyboardLayout = EN_US;\n})(Private || (Private = {}));\n\nexport { EN_US, KeycodeLayout, getKeyboardLayout, setKeyboardLayout };\n//# sourceMappingURL=index.es6.js.map\n","/**\n * A generic doubly-linked list.\n */\nclass LinkedList {\n    constructor() {\n        this._first = null;\n        this._last = null;\n        this._size = 0;\n    }\n    /**\n     * Whether the list is empty.\n     *\n     * #### Complexity\n     * Constant.\n     */\n    get isEmpty() {\n        return this._size === 0;\n    }\n    /**\n     * The size of the list.\n     *\n     * #### Complexity\n     * `O(1)`\n     *\n     * #### Notes\n     * This is equivalent to `length`.\n     */\n    get size() {\n        return this._size;\n    }\n    /**\n     * The length of the list.\n     *\n     * #### Complexity\n     * Constant.\n     *\n     * #### Notes\n     * This is equivalent to `size`.\n     *\n     * This property is deprecated.\n     */\n    get length() {\n        return this._size;\n    }\n    /**\n     * The first value in the list.\n     *\n     * This is `undefined` if the list is empty.\n     *\n     * #### Complexity\n     * Constant.\n     */\n    get first() {\n        return this._first ? this._first.value : undefined;\n    }\n    /**\n     * The last value in the list.\n     *\n     * This is `undefined` if the list is empty.\n     *\n     * #### Complexity\n     * Constant.\n     */\n    get last() {\n        return this._last ? this._last.value : undefined;\n    }\n    /**\n     * The first node in the list.\n     *\n     * This is `null` if the list is empty.\n     *\n     * #### Complexity\n     * Constant.\n     */\n    get firstNode() {\n        return this._first;\n    }\n    /**\n     * The last node in the list.\n     *\n     * This is `null` if the list is empty.\n     *\n     * #### Complexity\n     * Constant.\n     */\n    get lastNode() {\n        return this._last;\n    }\n    /**\n     * Create an iterator over the values in the list.\n     *\n     * @returns A new iterator starting with the first value.\n     *\n     * #### Complexity\n     * Constant.\n     */\n    *[Symbol.iterator]() {\n        let node = this._first;\n        while (node) {\n            yield node.value;\n            node = node.next;\n        }\n    }\n    /**\n     * Create a reverse iterator over the values in the list.\n     *\n     * @returns A new iterator starting with the last value.\n     *\n     * #### Complexity\n     * Constant.\n     */\n    *retro() {\n        let node = this._last;\n        while (node) {\n            yield node.value;\n            node = node.prev;\n        }\n    }\n    /**\n     * Create an iterator over the nodes in the list.\n     *\n     * @returns A new iterator starting with the first node.\n     *\n     * #### Complexity\n     * Constant.\n     */\n    *nodes() {\n        let node = this._first;\n        while (node) {\n            yield node;\n            node = node.next;\n        }\n    }\n    /**\n     * Create a reverse iterator over the nodes in the list.\n     *\n     * @returns A new iterator starting with the last node.\n     *\n     * #### Complexity\n     * Constant.\n     */\n    *retroNodes() {\n        let node = this._last;\n        while (node) {\n            yield node;\n            node = node.prev;\n        }\n    }\n    /**\n     * Assign new values to the list, replacing all current values.\n     *\n     * @param values - The values to assign to the list.\n     *\n     * #### Complexity\n     * Linear.\n     */\n    assign(values) {\n        this.clear();\n        for (const value of values) {\n            this.addLast(value);\n        }\n    }\n    /**\n     * Add a value to the end of the list.\n     *\n     * @param value - The value to add to the end of the list.\n     *\n     * #### Complexity\n     * Constant.\n     *\n     * #### Notes\n     * This is equivalent to `addLast`.\n     */\n    push(value) {\n        this.addLast(value);\n    }\n    /**\n     * Remove and return the value at the end of the list.\n     *\n     * @returns The removed value, or `undefined` if the list is empty.\n     *\n     * #### Complexity\n     * Constant.\n     *\n     * #### Notes\n     * This is equivalent to `removeLast`.\n     */\n    pop() {\n        return this.removeLast();\n    }\n    /**\n     * Add a value to the beginning of the list.\n     *\n     * @param value - The value to add to the beginning of the list.\n     *\n     * #### Complexity\n     * Constant.\n     *\n     * #### Notes\n     * This is equivalent to `addFirst`.\n     */\n    shift(value) {\n        this.addFirst(value);\n    }\n    /**\n     * Remove and return the value at the beginning of the list.\n     *\n     * @returns The removed value, or `undefined` if the list is empty.\n     *\n     * #### Complexity\n     * Constant.\n     *\n     * #### Notes\n     * This is equivalent to `removeFirst`.\n     */\n    unshift() {\n        return this.removeFirst();\n    }\n    /**\n     * Add a value to the beginning of the list.\n     *\n     * @param value - The value to add to the beginning of the list.\n     *\n     * @returns The list node which holds the value.\n     *\n     * #### Complexity\n     * Constant.\n     */\n    addFirst(value) {\n        let node = new Private.LinkedListNode(this, value);\n        if (!this._first) {\n            this._first = node;\n            this._last = node;\n        }\n        else {\n            node.next = this._first;\n            this._first.prev = node;\n            this._first = node;\n        }\n        this._size++;\n        return node;\n    }\n    /**\n     * Add a value to the end of the list.\n     *\n     * @param value - The value to add to the end of the list.\n     *\n     * @returns The list node which holds the value.\n     *\n     * #### Complexity\n     * Constant.\n     */\n    addLast(value) {\n        let node = new Private.LinkedListNode(this, value);\n        if (!this._last) {\n            this._first = node;\n            this._last = node;\n        }\n        else {\n            node.prev = this._last;\n            this._last.next = node;\n            this._last = node;\n        }\n        this._size++;\n        return node;\n    }\n    /**\n     * Insert a value before a specific node in the list.\n     *\n     * @param value - The value to insert before the reference node.\n     *\n     * @param ref - The reference node of interest. If this is `null`,\n     *   the value will be added to the beginning of the list.\n     *\n     * @returns The list node which holds the value.\n     *\n     * #### Notes\n     * The reference node must be owned by the list.\n     *\n     * #### Complexity\n     * Constant.\n     */\n    insertBefore(value, ref) {\n        if (!ref || ref === this._first) {\n            return this.addFirst(value);\n        }\n        if (!(ref instanceof Private.LinkedListNode) || ref.list !== this) {\n            throw new Error('Reference node is not owned by the list.');\n        }\n        let node = new Private.LinkedListNode(this, value);\n        let _ref = ref;\n        let prev = _ref.prev;\n        node.next = _ref;\n        node.prev = prev;\n        _ref.prev = node;\n        prev.next = node;\n        this._size++;\n        return node;\n    }\n    /**\n     * Insert a value after a specific node in the list.\n     *\n     * @param value - The value to insert after the reference node.\n     *\n     * @param ref - The reference node of interest. If this is `null`,\n     *   the value will be added to the end of the list.\n     *\n     * @returns The list node which holds the value.\n     *\n     * #### Notes\n     * The reference node must be owned by the list.\n     *\n     * #### Complexity\n     * Constant.\n     */\n    insertAfter(value, ref) {\n        if (!ref || ref === this._last) {\n            return this.addLast(value);\n        }\n        if (!(ref instanceof Private.LinkedListNode) || ref.list !== this) {\n            throw new Error('Reference node is not owned by the list.');\n        }\n        let node = new Private.LinkedListNode(this, value);\n        let _ref = ref;\n        let next = _ref.next;\n        node.next = next;\n        node.prev = _ref;\n        _ref.next = node;\n        next.prev = node;\n        this._size++;\n        return node;\n    }\n    /**\n     * Remove and return the value at the beginning of the list.\n     *\n     * @returns The removed value, or `undefined` if the list is empty.\n     *\n     * #### Complexity\n     * Constant.\n     */\n    removeFirst() {\n        let node = this._first;\n        if (!node) {\n            return undefined;\n        }\n        if (node === this._last) {\n            this._first = null;\n            this._last = null;\n        }\n        else {\n            this._first = node.next;\n            this._first.prev = null;\n        }\n        node.list = null;\n        node.next = null;\n        node.prev = null;\n        this._size--;\n        return node.value;\n    }\n    /**\n     * Remove and return the value at the end of the list.\n     *\n     * @returns The removed value, or `undefined` if the list is empty.\n     *\n     * #### Complexity\n     * Constant.\n     */\n    removeLast() {\n        let node = this._last;\n        if (!node) {\n            return undefined;\n        }\n        if (node === this._first) {\n            this._first = null;\n            this._last = null;\n        }\n        else {\n            this._last = node.prev;\n            this._last.next = null;\n        }\n        node.list = null;\n        node.next = null;\n        node.prev = null;\n        this._size--;\n        return node.value;\n    }\n    /**\n     * Remove a specific node from the list.\n     *\n     * @param node - The node to remove from the list.\n     *\n     * #### Complexity\n     * Constant.\n     *\n     * #### Notes\n     * The node must be owned by the list.\n     */\n    removeNode(node) {\n        if (!(node instanceof Private.LinkedListNode) || node.list !== this) {\n            throw new Error('Node is not owned by the list.');\n        }\n        let _node = node;\n        if (_node === this._first && _node === this._last) {\n            this._first = null;\n            this._last = null;\n        }\n        else if (_node === this._first) {\n            this._first = _node.next;\n            this._first.prev = null;\n        }\n        else if (_node === this._last) {\n            this._last = _node.prev;\n            this._last.next = null;\n        }\n        else {\n            _node.next.prev = _node.prev;\n            _node.prev.next = _node.next;\n        }\n        _node.list = null;\n        _node.next = null;\n        _node.prev = null;\n        this._size--;\n    }\n    /**\n     * Remove all values from the list.\n     *\n     * #### Complexity\n     * Linear.\n     */\n    clear() {\n        let node = this._first;\n        while (node) {\n            let next = node.next;\n            node.list = null;\n            node.prev = null;\n            node.next = null;\n            node = next;\n        }\n        this._first = null;\n        this._last = null;\n        this._size = 0;\n    }\n}\n/**\n * The namespace for the `LinkedList` class statics.\n */\n(function (LinkedList) {\n    /**\n     * Create a linked list from an iterable of values.\n     *\n     * @param values - The iterable object of interest.\n     *\n     * @returns A new linked list initialized with the given values.\n     *\n     * #### Complexity\n     * Linear.\n     */\n    function from(values) {\n        let list = new LinkedList();\n        list.assign(values);\n        return list;\n    }\n    LinkedList.from = from;\n})(LinkedList || (LinkedList = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The internal linked list node implementation.\n     */\n    class LinkedListNode {\n        /**\n         * Construct a new linked list node.\n         *\n         * @param list - The list which owns the node.\n         *\n         * @param value - The value for the link.\n         */\n        constructor(list, value) {\n            /**\n             * The linked list which created and owns the node.\n             */\n            this.list = null;\n            /**\n             * The next node in the list.\n             */\n            this.next = null;\n            /**\n             * The previous node in the list.\n             */\n            this.prev = null;\n            this.list = list;\n            this.value = value;\n        }\n    }\n    Private.LinkedListNode = LinkedListNode;\n})(Private || (Private = {}));\n\nexport { LinkedList };\n//# sourceMappingURL=index.es6.js.map\n","import { every, retro, some, ArrayExt } from '@lumino/algorithm';\nimport { LinkedList } from '@lumino/collections';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module messaging\n */\n/**\n * A message which can be delivered to a message handler.\n *\n * #### Notes\n * This class may be subclassed to create complex message types.\n */\nclass Message {\n    /**\n     * Construct a new message.\n     *\n     * @param type - The type of the message.\n     */\n    constructor(type) {\n        this.type = type;\n    }\n    /**\n     * Test whether the message is conflatable.\n     *\n     * #### Notes\n     * Message conflation is an advanced topic. Most message types will\n     * not make use of this feature.\n     *\n     * If a conflatable message is posted to a handler while another\n     * conflatable message of the same `type` has already been posted\n     * to the handler, the `conflate()` method of the existing message\n     * will be invoked. If that method returns `true`, the new message\n     * will not be enqueued. This allows messages to be compressed, so\n     * that only a single instance of the message type is processed per\n     * cycle, no matter how many times messages of that type are posted.\n     *\n     * Custom message types may reimplement this property.\n     *\n     * The default implementation is always `false`.\n     */\n    get isConflatable() {\n        return false;\n    }\n    /**\n     * Conflate this message with another message of the same `type`.\n     *\n     * @param other - A conflatable message of the same `type`.\n     *\n     * @returns `true` if the message was successfully conflated, or\n     *   `false` otherwise.\n     *\n     * #### Notes\n     * Message conflation is an advanced topic. Most message types will\n     * not make use of this feature.\n     *\n     * This method is called automatically by the message loop when the\n     * given message is posted to the handler paired with this message.\n     * This message will already be enqueued and conflatable, and the\n     * given message will have the same `type` and also be conflatable.\n     *\n     * This method should merge the state of the other message into this\n     * message as needed so that when this message is finally delivered\n     * to the handler, it receives the most up-to-date information.\n     *\n     * If this method returns `true`, it signals that the other message\n     * was successfully conflated and that message will not be enqueued.\n     *\n     * If this method returns `false`, the other message will be enqueued\n     * for normal delivery.\n     *\n     * Custom message types may reimplement this method.\n     *\n     * The default implementation always returns `false`.\n     */\n    conflate(other) {\n        return false;\n    }\n}\n/**\n * A convenience message class which conflates automatically.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most user code will not\n * make use of this class.\n *\n * This message class is useful for creating message instances which\n * should be conflated, but which have no state other than `type`.\n *\n * If conflation of stateful messages is required, a custom `Message`\n * subclass should be created.\n */\nclass ConflatableMessage extends Message {\n    /**\n     * Test whether the message is conflatable.\n     *\n     * #### Notes\n     * This property is always `true`.\n     */\n    get isConflatable() {\n        return true;\n    }\n    /**\n     * Conflate this message with another message of the same `type`.\n     *\n     * #### Notes\n     * This method always returns `true`.\n     */\n    conflate(other) {\n        return true;\n    }\n}\n/**\n * The namespace for the global singleton message loop.\n */\nvar MessageLoop;\n(function (MessageLoop) {\n    /**\n     * A function that cancels the pending loop task; `null` if unavailable.\n     */\n    let pending = null;\n    /**\n     * Schedules a function for invocation as soon as possible asynchronously.\n     *\n     * @param fn The function to invoke when called back.\n     *\n     * @returns An anonymous function that will unschedule invocation if possible.\n     */\n    const schedule = (resolved => (fn) => {\n        let rejected = false;\n        resolved.then(() => !rejected && fn());\n        return () => {\n            rejected = true;\n        };\n    })(Promise.resolve());\n    /**\n     * Send a message to a message handler to process immediately.\n     *\n     * @param handler - The handler which should process the message.\n     *\n     * @param msg - The message to deliver to the handler.\n     *\n     * #### Notes\n     * The message will first be sent through any installed message hooks\n     * for the handler. If the message passes all hooks, it will then be\n     * delivered to the `processMessage` method of the handler.\n     *\n     * The message will not be conflated with pending posted messages.\n     *\n     * Exceptions in hooks and handlers will be caught and logged.\n     */\n    function sendMessage(handler, msg) {\n        // Lookup the message hooks for the handler.\n        let hooks = messageHooks.get(handler);\n        // Handle the common case of no installed hooks.\n        if (!hooks || hooks.length === 0) {\n            invokeHandler(handler, msg);\n            return;\n        }\n        // Invoke the message hooks starting with the newest first.\n        let passed = every(retro(hooks), hook => {\n            return hook ? invokeHook(hook, handler, msg) : true;\n        });\n        // Invoke the handler if the message passes all hooks.\n        if (passed) {\n            invokeHandler(handler, msg);\n        }\n    }\n    MessageLoop.sendMessage = sendMessage;\n    /**\n     * Post a message to a message handler to process in the future.\n     *\n     * @param handler - The handler which should process the message.\n     *\n     * @param msg - The message to post to the handler.\n     *\n     * #### Notes\n     * The message will be conflated with the pending posted messages for\n     * the handler, if possible. If the message is not conflated, it will\n     * be queued for normal delivery on the next cycle of the event loop.\n     *\n     * Exceptions in hooks and handlers will be caught and logged.\n     */\n    function postMessage(handler, msg) {\n        // Handle the common case of a non-conflatable message.\n        if (!msg.isConflatable) {\n            enqueueMessage(handler, msg);\n            return;\n        }\n        // Conflate the message with an existing message if possible.\n        let conflated = some(messageQueue, posted => {\n            if (posted.handler !== handler) {\n                return false;\n            }\n            if (!posted.msg) {\n                return false;\n            }\n            if (posted.msg.type !== msg.type) {\n                return false;\n            }\n            if (!posted.msg.isConflatable) {\n                return false;\n            }\n            return posted.msg.conflate(msg);\n        });\n        // Enqueue the message if it was not conflated.\n        if (!conflated) {\n            enqueueMessage(handler, msg);\n        }\n    }\n    MessageLoop.postMessage = postMessage;\n    /**\n     * Install a message hook for a message handler.\n     *\n     * @param handler - The message handler of interest.\n     *\n     * @param hook - The message hook to install.\n     *\n     * #### Notes\n     * A message hook is invoked before a message is delivered to the\n     * handler. If the hook returns `false`, no other hooks will be\n     * invoked and the message will not be delivered to the handler.\n     *\n     * The most recently installed message hook is executed first.\n     *\n     * If the hook is already installed, this is a no-op.\n     */\n    function installMessageHook(handler, hook) {\n        // Look up the hooks for the handler.\n        let hooks = messageHooks.get(handler);\n        // Bail early if the hook is already installed.\n        if (hooks && hooks.indexOf(hook) !== -1) {\n            return;\n        }\n        // Add the hook to the end, so it will be the first to execute.\n        if (!hooks) {\n            messageHooks.set(handler, [hook]);\n        }\n        else {\n            hooks.push(hook);\n        }\n    }\n    MessageLoop.installMessageHook = installMessageHook;\n    /**\n     * Remove an installed message hook for a message handler.\n     *\n     * @param handler - The message handler of interest.\n     *\n     * @param hook - The message hook to remove.\n     *\n     * #### Notes\n     * It is safe to call this function while the hook is executing.\n     *\n     * If the hook is not installed, this is a no-op.\n     */\n    function removeMessageHook(handler, hook) {\n        // Lookup the hooks for the handler.\n        let hooks = messageHooks.get(handler);\n        // Bail early if the hooks do not exist.\n        if (!hooks) {\n            return;\n        }\n        // Lookup the index of the hook and bail if not found.\n        let i = hooks.indexOf(hook);\n        if (i === -1) {\n            return;\n        }\n        // Clear the hook and schedule a cleanup of the array.\n        hooks[i] = null;\n        scheduleCleanup(hooks);\n    }\n    MessageLoop.removeMessageHook = removeMessageHook;\n    /**\n     * Clear all message data associated with a message handler.\n     *\n     * @param handler - The message handler of interest.\n     *\n     * #### Notes\n     * This will clear all posted messages and hooks for the handler.\n     */\n    function clearData(handler) {\n        // Lookup the hooks for the handler.\n        let hooks = messageHooks.get(handler);\n        // Clear all messsage hooks for the handler.\n        if (hooks && hooks.length > 0) {\n            ArrayExt.fill(hooks, null);\n            scheduleCleanup(hooks);\n        }\n        // Clear all posted messages for the handler.\n        for (const posted of messageQueue) {\n            if (posted.handler === handler) {\n                posted.handler = null;\n                posted.msg = null;\n            }\n        }\n    }\n    MessageLoop.clearData = clearData;\n    /**\n     * Process the pending posted messages in the queue immediately.\n     *\n     * #### Notes\n     * This function is useful when posted messages must be processed immediately.\n     *\n     * This function should normally not be needed, but it may be\n     * required to work around certain browser idiosyncrasies.\n     *\n     * Recursing into this function is a no-op.\n     */\n    function flush() {\n        // Bail if recursion is detected or if there is no pending task.\n        if (flushGuard || pending === null) {\n            return;\n        }\n        // Unschedule the pending loop task.\n        pending();\n        pending = null;\n        // Run the message loop within the recursion guard.\n        flushGuard = true;\n        runMessageLoop();\n        flushGuard = false;\n    }\n    MessageLoop.flush = flush;\n    /**\n     * Get the message loop exception handler.\n     *\n     * @returns The current exception handler.\n     *\n     * #### Notes\n     * The default exception handler is `console.error`.\n     */\n    function getExceptionHandler() {\n        return exceptionHandler;\n    }\n    MessageLoop.getExceptionHandler = getExceptionHandler;\n    /**\n     * Set the message loop exception handler.\n     *\n     * @param handler - The function to use as the exception handler.\n     *\n     * @returns The old exception handler.\n     *\n     * #### Notes\n     * The exception handler is invoked when a message handler or a\n     * message hook throws an exception.\n     */\n    function setExceptionHandler(handler) {\n        let old = exceptionHandler;\n        exceptionHandler = handler;\n        return old;\n    }\n    MessageLoop.setExceptionHandler = setExceptionHandler;\n    /**\n     * The queue of posted message pairs.\n     */\n    const messageQueue = new LinkedList();\n    /**\n     * A mapping of handler to array of installed message hooks.\n     */\n    const messageHooks = new WeakMap();\n    /**\n     * A set of message hook arrays which are pending cleanup.\n     */\n    const dirtySet = new Set();\n    /**\n     * The message loop exception handler.\n     */\n    let exceptionHandler = (err) => {\n        console.error(err);\n    };\n    /**\n     * A guard flag to prevent flush recursion.\n     */\n    let flushGuard = false;\n    /**\n     * Invoke a message hook with the specified handler and message.\n     *\n     * Returns the result of the hook, or `true` if the hook throws.\n     *\n     * Exceptions in the hook will be caught and logged.\n     */\n    function invokeHook(hook, handler, msg) {\n        let result = true;\n        try {\n            if (typeof hook === 'function') {\n                result = hook(handler, msg);\n            }\n            else {\n                result = hook.messageHook(handler, msg);\n            }\n        }\n        catch (err) {\n            exceptionHandler(err);\n        }\n        return result;\n    }\n    /**\n     * Invoke a message handler with the specified message.\n     *\n     * Exceptions in the handler will be caught and logged.\n     */\n    function invokeHandler(handler, msg) {\n        try {\n            handler.processMessage(msg);\n        }\n        catch (err) {\n            exceptionHandler(err);\n        }\n    }\n    /**\n     * Add a message to the end of the message queue.\n     *\n     * This will automatically schedule a run of the message loop.\n     */\n    function enqueueMessage(handler, msg) {\n        // Add the posted message to the queue.\n        messageQueue.addLast({ handler, msg });\n        // Bail if a loop task is already pending.\n        if (pending !== null) {\n            return;\n        }\n        // Schedule a run of the message loop.\n        pending = schedule(runMessageLoop);\n    }\n    /**\n     * Run an iteration of the message loop.\n     *\n     * This will process all pending messages in the queue. If a message\n     * is added to the queue while the message loop is running, it will\n     * be processed on the next cycle of the loop.\n     */\n    function runMessageLoop() {\n        // Clear the task so the next loop can be scheduled.\n        pending = null;\n        // If the message queue is empty, there is nothing else to do.\n        if (messageQueue.isEmpty) {\n            return;\n        }\n        // Add a sentinel value to the end of the queue. The queue will\n        // only be processed up to the sentinel. Messages posted during\n        // this cycle will execute on the next cycle.\n        let sentinel = { handler: null, msg: null };\n        messageQueue.addLast(sentinel);\n        // Enter the message loop.\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            // Remove the first posted message in the queue.\n            let posted = messageQueue.removeFirst();\n            // If the value is the sentinel, exit the loop.\n            if (posted === sentinel) {\n                return;\n            }\n            // Dispatch the message if it has not been cleared.\n            if (posted.handler && posted.msg) {\n                sendMessage(posted.handler, posted.msg);\n            }\n        }\n    }\n    /**\n     * Schedule a cleanup of a message hooks array.\n     *\n     * This will add the array to the dirty set and schedule a deferred\n     * cleanup of the array contents. On cleanup, any `null` hook will\n     * be removed from the array.\n     */\n    function scheduleCleanup(hooks) {\n        if (dirtySet.size === 0) {\n            schedule(cleanupDirtySet);\n        }\n        dirtySet.add(hooks);\n    }\n    /**\n     * Cleanup the message hook arrays in the dirty set.\n     *\n     * This function should only be invoked asynchronously, when the\n     * stack frame is guaranteed to not be on the path of user code.\n     */\n    function cleanupDirtySet() {\n        dirtySet.forEach(cleanupHooks);\n        dirtySet.clear();\n    }\n    /**\n     * Cleanup the dirty hooks in a message hooks array.\n     *\n     * This will remove any `null` hook from the array.\n     *\n     * This function should only be invoked asynchronously, when the\n     * stack frame is guaranteed to not be on the path of user code.\n     */\n    function cleanupHooks(hooks) {\n        ArrayExt.removeAllWhere(hooks, isNull);\n    }\n    /**\n     * Test whether a value is `null`.\n     */\n    function isNull(value) {\n        return value === null;\n    }\n})(MessageLoop || (MessageLoop = {}));\n\nexport { ConflatableMessage, Message, MessageLoop };\n//# sourceMappingURL=index.es6.js.map\n","import { PromiseDelegate, JSONExt } from '@lumino/coreutils';\nimport { Signal } from '@lumino/signaling';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * A class that wraps an asynchronous function to poll at a regular interval\n * with exponential increases to the interval length if the poll fails.\n *\n * @typeparam T - The resolved type of the factory's promises.\n * Defaults to `any`.\n *\n * @typeparam U - The rejected type of the factory's promises.\n * Defaults to `any`.\n *\n * @typeparam V - An optional type to extend the phases supported by a poll.\n * Defaults to `standby`, which already exists in the `Phase` type.\n */\nclass Poll {\n    /**\n     * Instantiate a new poll with exponential backoff in case of failure.\n     *\n     * @param options - The poll instantiation options.\n     */\n    constructor(options) {\n        var _a;\n        this._disposed = new Signal(this);\n        this._lingered = 0;\n        this._tick = new PromiseDelegate();\n        this._ticked = new Signal(this);\n        this._factory = options.factory;\n        this._linger = (_a = options.linger) !== null && _a !== void 0 ? _a : Private.DEFAULT_LINGER;\n        this._standby = options.standby || Private.DEFAULT_STANDBY;\n        this._state = { ...Private.DEFAULT_STATE, timestamp: new Date().getTime() };\n        // Normalize poll frequency `max` to be the greater of\n        // default `max`, `options.frequency.max`, or `options.frequency.interval`.\n        const frequency = options.frequency || {};\n        const max = Math.max(frequency.interval || 0, frequency.max || 0, Private.DEFAULT_FREQUENCY.max);\n        this.frequency = { ...Private.DEFAULT_FREQUENCY, ...frequency, ...{ max } };\n        this.name = options.name || Private.DEFAULT_NAME;\n        if ('auto' in options ? options.auto : true) {\n            setTimeout(() => this.start());\n        }\n    }\n    /**\n     * A signal emitted when the poll is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * The polling frequency parameters.\n     */\n    get frequency() {\n        return this._frequency;\n    }\n    set frequency(frequency) {\n        if (this.isDisposed || JSONExt.deepEqual(frequency, this.frequency || {})) {\n            return;\n        }\n        let { backoff, interval, max } = frequency;\n        interval = Math.round(interval);\n        max = Math.round(max);\n        if (typeof backoff === 'number' && backoff < 1) {\n            throw new Error('Poll backoff growth factor must be at least 1');\n        }\n        if ((interval < 0 || interval > max) && interval !== Poll.NEVER) {\n            throw new Error('Poll interval must be between 0 and max');\n        }\n        if (max > Poll.MAX_INTERVAL && max !== Poll.NEVER) {\n            throw new Error(`Max interval must be less than ${Poll.MAX_INTERVAL}`);\n        }\n        this._frequency = { backoff, interval, max };\n    }\n    /**\n     * Whether the poll is disposed.\n     */\n    get isDisposed() {\n        return this.state.phase === 'disposed';\n    }\n    /**\n     * Indicates when the poll switches to standby.\n     */\n    get standby() {\n        return this._standby;\n    }\n    set standby(standby) {\n        if (this.isDisposed || this.standby === standby) {\n            return;\n        }\n        this._standby = standby;\n    }\n    /**\n     * The poll state, which is the content of the current poll tick.\n     */\n    get state() {\n        return this._state;\n    }\n    /**\n     * A promise that resolves when the poll next ticks.\n     */\n    get tick() {\n        return this._tick.promise;\n    }\n    /**\n     * A signal emitted when the poll ticks and fires off a new request.\n     */\n    get ticked() {\n        return this._ticked;\n    }\n    /**\n     * Return an async iterator that yields every tick.\n     */\n    async *[Symbol.asyncIterator]() {\n        while (!this.isDisposed) {\n            yield this.state;\n            await this.tick.catch(() => undefined);\n        }\n    }\n    /**\n     * Dispose the poll.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._state = {\n            ...Private.DISPOSED_STATE,\n            timestamp: new Date().getTime()\n        };\n        this._tick.promise.catch(_ => undefined);\n        this._tick.reject(new Error(`Poll (${this.name}) is disposed.`));\n        this._disposed.emit(undefined);\n        Signal.clearData(this);\n    }\n    /**\n     * Refreshes the poll. Schedules `refreshed` tick if necessary.\n     *\n     * @returns A promise that resolves after tick is scheduled and never rejects.\n     *\n     * #### Notes\n     * The returned promise resolves after the tick is scheduled, but before\n     * the polling action is run. To wait until after the poll action executes,\n     * await the `poll.tick` promise: `await poll.refresh(); await poll.tick;`\n     */\n    refresh() {\n        return this.schedule({\n            cancel: ({ phase }) => phase === 'refreshed',\n            interval: Poll.IMMEDIATE,\n            phase: 'refreshed'\n        });\n    }\n    /**\n     * Schedule the next poll tick.\n     *\n     * @param next - The next poll state data to schedule. Defaults to standby.\n     *\n     * @param next.cancel - Cancels state transition if function returns `true`.\n     *\n     * @returns A promise that resolves when the next poll state is active.\n     *\n     * #### Notes\n     * This method is not meant to be invoked by user code typically. It is public\n     * to allow poll instances to be composed into classes that schedule ticks.\n     */\n    async schedule(next = {}) {\n        if (this.isDisposed) {\n            return;\n        }\n        // Check if the phase transition should be canceled.\n        if (next.cancel && next.cancel(this.state)) {\n            return;\n        }\n        // Update poll state.\n        const pending = this._tick;\n        const scheduled = new PromiseDelegate();\n        const state = {\n            interval: this.frequency.interval,\n            payload: null,\n            phase: 'standby',\n            timestamp: new Date().getTime(),\n            ...next\n        };\n        this._state = state;\n        this._tick = scheduled;\n        // Clear the schedule if possible.\n        clearTimeout(this._timeout);\n        // Emit ticked signal, resolve pending promise, and await its settlement.\n        this._ticked.emit(this.state);\n        pending.resolve(this);\n        await pending.promise;\n        if (state.interval === Poll.NEVER) {\n            this._timeout = undefined;\n            return;\n        }\n        // Schedule next execution and cache its timeout handle.\n        const execute = () => {\n            if (this.isDisposed || this.tick !== scheduled.promise) {\n                return;\n            }\n            this._execute();\n        };\n        // Cache the handle in case it needs to be unscheduled.\n        this._timeout = setTimeout(execute, state.interval);\n    }\n    /**\n     * Starts the poll. Schedules `started` tick if necessary.\n     *\n     * @returns A promise that resolves after tick is scheduled and never rejects.\n     */\n    start() {\n        return this.schedule({\n            cancel: ({ phase }) => phase !== 'constructed' && phase !== 'standby' && phase !== 'stopped',\n            interval: Poll.IMMEDIATE,\n            phase: 'started'\n        });\n    }\n    /**\n     * Stops the poll. Schedules `stopped` tick if necessary.\n     *\n     * @returns A promise that resolves after tick is scheduled and never rejects.\n     */\n    stop() {\n        return this.schedule({\n            cancel: ({ phase }) => phase === 'stopped',\n            interval: Poll.NEVER,\n            phase: 'stopped'\n        });\n    }\n    /**\n     * Whether the poll is hidden.\n     *\n     * #### Notes\n     * This property is only relevant in a browser context.\n     */\n    get hidden() {\n        return Private.hidden;\n    }\n    /**\n     * Execute a new poll factory promise or stand by if necessary.\n     */\n    _execute() {\n        let standby = typeof this.standby === 'function' ? this.standby() : this.standby;\n        // Check if execution should proceed, linger, or stand by.\n        if (standby === 'never') {\n            standby = false;\n        }\n        else if (standby === 'when-hidden') {\n            if (this.hidden) {\n                standby = ++this._lingered > this._linger;\n            }\n            else {\n                this._lingered = 0;\n                standby = false;\n            }\n        }\n        // If in standby mode schedule next tick without calling the factory.\n        if (standby) {\n            void this.schedule();\n            return;\n        }\n        const pending = this.tick;\n        this._factory(this.state)\n            .then((resolved) => {\n            if (this.isDisposed || this.tick !== pending) {\n                return;\n            }\n            void this.schedule({\n                payload: resolved,\n                phase: this.state.phase === 'rejected' ? 'reconnected' : 'resolved'\n            });\n        })\n            .catch((rejected) => {\n            if (this.isDisposed || this.tick !== pending) {\n                return;\n            }\n            void this.schedule({\n                interval: Private.sleep(this.frequency, this.state),\n                payload: rejected,\n                phase: 'rejected'\n            });\n        });\n    }\n}\n/**\n * A namespace for `Poll` types, interfaces, and statics.\n */\n(function (Poll) {\n    /**\n     * An interval value in ms that indicates the poll should tick immediately.\n     */\n    Poll.IMMEDIATE = 0;\n    /**\n     * Delays are 32-bit integers in many browsers so intervals need to be capped.\n     *\n     * #### Notes\n     * https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#Maximum_delay_value\n     */\n    Poll.MAX_INTERVAL = 2147483647;\n    /**\n     * An interval value that indicates the poll should never tick.\n     */\n    Poll.NEVER = Infinity;\n})(Poll || (Poll = {}));\n/**\n * A namespace for private module data.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The default backoff growth rate if `backoff` is `true`.\n     */\n    Private.DEFAULT_BACKOFF = 3;\n    /**\n     * The default polling frequency.\n     */\n    Private.DEFAULT_FREQUENCY = {\n        backoff: true,\n        interval: 1000,\n        max: 30 * 1000\n    };\n    /**\n     * The default number of times to `linger` when a poll is hidden.\n     */\n    Private.DEFAULT_LINGER = 1;\n    /**\n     * The default poll name.\n     */\n    Private.DEFAULT_NAME = 'unknown';\n    /**\n     * The default poll standby behavior.\n     */\n    Private.DEFAULT_STANDBY = 'when-hidden';\n    /**\n     * The first poll tick state's default values superseded in constructor.\n     */\n    Private.DEFAULT_STATE = {\n        interval: Poll.NEVER,\n        payload: null,\n        phase: 'constructed',\n        timestamp: new Date(0).getTime()\n    };\n    /**\n     * The disposed tick state values.\n     */\n    Private.DISPOSED_STATE = {\n        interval: Poll.NEVER,\n        payload: null,\n        phase: 'disposed',\n        timestamp: new Date(0).getTime()\n    };\n    /**\n     * Returns the number of milliseconds to sleep before the next tick.\n     *\n     * @param frequency - The poll's base frequency.\n     * @param last - The poll's last tick.\n     */\n    function sleep(frequency, last) {\n        const { backoff, interval, max } = frequency;\n        if (interval === Poll.NEVER) {\n            return interval;\n        }\n        const growth = backoff === true ? Private.DEFAULT_BACKOFF : backoff === false ? 1 : backoff;\n        const random = getRandomIntInclusive(interval, last.interval * growth);\n        return Math.min(max, random);\n    }\n    Private.sleep = sleep;\n    /**\n     * Keep track of whether the document is hidden. This flag is only relevant in\n     * a browser context.\n     *\n     * Listen to `visibilitychange` event to set the `hidden` flag.\n     *\n     * Listening to `pagehide` is also necessary because Safari support for\n     * `visibilitychange` events is partial, cf.\n     * https://developer.mozilla.org/docs/Web/API/Document/visibilitychange_event\n     */\n    Private.hidden = (() => {\n        if (typeof document === 'undefined') {\n            return false;\n        }\n        document.addEventListener('visibilitychange', () => {\n            Private.hidden = document.visibilityState === 'hidden';\n        });\n        document.addEventListener('pagehide', () => {\n            Private.hidden = document.visibilityState === 'hidden';\n        });\n        return document.visibilityState === 'hidden';\n    })();\n    /**\n     * Get a random integer between min and max, inclusive of both.\n     *\n     * #### Notes\n     * From\n     * https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Math/random#Getting_a_random_integer_between_two_values_inclusive\n     *\n     * From the MDN page: It might be tempting to use Math.round() to accomplish\n     * that, but doing so would cause your random numbers to follow a non-uniform\n     * distribution, which may not be acceptable for your needs.\n     */\n    function getRandomIntInclusive(min, max) {\n        min = Math.ceil(min);\n        max = Math.floor(max);\n        return Math.floor(Math.random() * (max - min + 1)) + min;\n    }\n})(Private || (Private = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * A base class to implement rate limiters with different invocation strategies.\n *\n * @typeparam T - The resolved type of the underlying function.\n *\n * @typeparam U - The rejected type of the underlying function.\n *\n * @typeparam V - Arguments for the underlying function.\n */\nclass RateLimiter {\n    /**\n     * Instantiate a rate limiter.\n     *\n     * @param fn - The function to rate limit.\n     *\n     * @param limit - The rate limit; defaults to 500ms.\n     */\n    constructor(fn, limit = 500) {\n        /**\n         * Arguments for the underlying function.\n         */\n        this.args = undefined;\n        /**\n         * A promise that resolves on each successful invocation.\n         */\n        this.payload = null;\n        this.limit = limit;\n        this.poll = new Poll({\n            auto: false,\n            factory: async () => {\n                const { args } = this;\n                this.args = undefined;\n                return fn(...args);\n            },\n            frequency: { backoff: false, interval: Poll.NEVER, max: Poll.NEVER },\n            standby: 'never'\n        });\n        this.payload = new PromiseDelegate();\n        this.poll.ticked.connect((_, state) => {\n            const { payload } = this;\n            if (state.phase === 'resolved') {\n                this.payload = new PromiseDelegate();\n                payload.resolve(state.payload);\n                return;\n            }\n            if (state.phase === 'rejected' || state.phase === 'stopped') {\n                this.payload = new PromiseDelegate();\n                payload.promise.catch(_ => undefined);\n                payload.reject(state.payload);\n                return;\n            }\n        }, this);\n    }\n    /**\n     * Whether the rate limiter is disposed.\n     */\n    get isDisposed() {\n        return this.payload === null;\n    }\n    /**\n     * Disposes the rate limiter.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this.args = undefined;\n        this.payload = null;\n        this.poll.dispose();\n    }\n    /**\n     * Stop the function if it is mid-flight.\n     */\n    async stop() {\n        return this.poll.stop();\n    }\n}\n/**\n * Wraps and debounces a function that can be called multiple times and only\n * executes the underlying function one `interval` after the last invocation.\n *\n * @typeparam T - The resolved type of the underlying function. Defaults to any.\n *\n * @typeparam U - The rejected type of the underlying function. Defaults to any.\n *\n * @typeparam V - Arguments for the underlying function. Defaults to any[].\n */\nclass Debouncer extends RateLimiter {\n    /**\n     * Invokes the function and only executes after rate limit has elapsed.\n     * Each invocation resets the timer.\n     */\n    invoke(...args) {\n        this.args = args;\n        void this.poll.schedule({ interval: this.limit, phase: 'invoked' });\n        return this.payload.promise;\n    }\n}\n/**\n * Wraps and throttles a function that can be called multiple times and only\n * executes the underlying function once per `interval`.\n *\n * @typeparam T - The resolved type of the underlying function. Defaults to any.\n *\n * @typeparam U - The rejected type of the underlying function. Defaults to any.\n *\n * @typeparam V - Arguments for the underlying function. Defaults to any[].\n */\nclass Throttler extends RateLimiter {\n    /**\n     * Instantiate a throttler.\n     *\n     * @param fn - The function being throttled.\n     *\n     * @param options - Throttling configuration or throttling limit in ms.\n     *\n     * #### Notes\n     * The `edge` defaults to `leading`; the `limit` defaults to `500`.\n     */\n    constructor(fn, options) {\n        super(fn, typeof options === 'number' ? options : options && options.limit);\n        this._trailing = false;\n        if (typeof options !== 'number' && options && options.edge === 'trailing') {\n            this._trailing = true;\n        }\n        this._interval = this._trailing ? this.limit : Poll.IMMEDIATE;\n    }\n    /**\n     * Throttles function invocations if one is currently in flight.\n     */\n    invoke(...args) {\n        const idle = this.poll.state.phase !== 'invoked';\n        if (idle || this._trailing) {\n            this.args = args;\n        }\n        if (idle) {\n            void this.poll.schedule({ interval: this._interval, phase: 'invoked' });\n        }\n        return this.payload.promise;\n    }\n}\n\nexport { Debouncer, Poll, RateLimiter, Throttler };\n//# sourceMappingURL=index.es6.js.map\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module properties\n */\n/**\n * A class which attaches a value to an external object.\n *\n * #### Notes\n * Attached properties are used to extend the state of an object with\n * semantic data from an unrelated class. They also encapsulate value\n * creation, coercion, and notification.\n *\n * Because attached property values are stored in a hash table, which\n * in turn is stored in a WeakMap keyed on the owner object, there is\n * non-trivial storage overhead involved in their use. The pattern is\n * therefore best used for the storage of rare data.\n */\nclass AttachedProperty {\n    /**\n     * Construct a new attached property.\n     *\n     * @param options - The options for initializing the property.\n     */\n    constructor(options) {\n        this._pid = Private.nextPID();\n        this.name = options.name;\n        this._create = options.create;\n        this._coerce = options.coerce || null;\n        this._compare = options.compare || null;\n        this._changed = options.changed || null;\n    }\n    /**\n     * Get the current value of the property for a given owner.\n     *\n     * @param owner - The property owner of interest.\n     *\n     * @returns The current value of the property.\n     *\n     * #### Notes\n     * If the value has not yet been set, the default value will be\n     * computed and assigned as the current value of the property.\n     */\n    get(owner) {\n        let value;\n        let map = Private.ensureMap(owner);\n        if (this._pid in map) {\n            value = map[this._pid];\n        }\n        else {\n            value = map[this._pid] = this._createValue(owner);\n        }\n        return value;\n    }\n    /**\n     * Set the current value of the property for a given owner.\n     *\n     * @param owner - The property owner of interest.\n     *\n     * @param value - The value for the property.\n     *\n     * #### Notes\n     * If the value has not yet been set, the default value will be\n     * computed and used as the previous value for the comparison.\n     */\n    set(owner, value) {\n        let oldValue;\n        let map = Private.ensureMap(owner);\n        if (this._pid in map) {\n            oldValue = map[this._pid];\n        }\n        else {\n            oldValue = map[this._pid] = this._createValue(owner);\n        }\n        let newValue = this._coerceValue(owner, value);\n        this._maybeNotify(owner, oldValue, (map[this._pid] = newValue));\n    }\n    /**\n     * Explicitly coerce the current property value for a given owner.\n     *\n     * @param owner - The property owner of interest.\n     *\n     * #### Notes\n     * If the value has not yet been set, the default value will be\n     * computed and used as the previous value for the comparison.\n     */\n    coerce(owner) {\n        let oldValue;\n        let map = Private.ensureMap(owner);\n        if (this._pid in map) {\n            oldValue = map[this._pid];\n        }\n        else {\n            oldValue = map[this._pid] = this._createValue(owner);\n        }\n        let newValue = this._coerceValue(owner, oldValue);\n        this._maybeNotify(owner, oldValue, (map[this._pid] = newValue));\n    }\n    /**\n     * Get or create the default value for the given owner.\n     */\n    _createValue(owner) {\n        let create = this._create;\n        return create(owner);\n    }\n    /**\n     * Coerce the value for the given owner.\n     */\n    _coerceValue(owner, value) {\n        let coerce = this._coerce;\n        return coerce ? coerce(owner, value) : value;\n    }\n    /**\n     * Compare the old value and new value for equality.\n     */\n    _compareValue(oldValue, newValue) {\n        let compare = this._compare;\n        return compare ? compare(oldValue, newValue) : oldValue === newValue;\n    }\n    /**\n     * Run the change notification if the given values are different.\n     */\n    _maybeNotify(owner, oldValue, newValue) {\n        let changed = this._changed;\n        if (changed && !this._compareValue(oldValue, newValue)) {\n            changed(owner, oldValue, newValue);\n        }\n    }\n}\n/**\n * The namespace for the `AttachedProperty` class statics.\n */\n(function (AttachedProperty) {\n    /**\n     * Clear the stored property data for the given owner.\n     *\n     * @param owner - The property owner of interest.\n     *\n     * #### Notes\n     * This will clear all property values for the owner, but it will\n     * **not** run the change notification for any of the properties.\n     */\n    function clearData(owner) {\n        Private.ownerData.delete(owner);\n    }\n    AttachedProperty.clearData = clearData;\n})(AttachedProperty || (AttachedProperty = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n    /**\n     * A weak mapping of property owner to property map.\n     */\n    Private.ownerData = new WeakMap();\n    /**\n     * A function which computes successive unique property ids.\n     */\n    Private.nextPID = (() => {\n        let id = 0;\n        return () => {\n            let rand = Math.random();\n            let stem = `${rand}`.slice(2);\n            return `pid-${stem}-${id++}`;\n        };\n    })();\n    /**\n     * Lookup the data map for the property owner.\n     *\n     * This will create the map if one does not already exist.\n     */\n    function ensureMap(owner) {\n        let map = Private.ownerData.get(owner);\n        if (map) {\n            return map;\n        }\n        map = Object.create(null);\n        Private.ownerData.set(owner, map);\n        return map;\n    }\n    Private.ensureMap = ensureMap;\n})(Private || (Private = {}));\n\nexport { AttachedProperty };\n//# sourceMappingURL=index.es6.js.map\n","import { find, ArrayExt } from '@lumino/algorithm';\nimport { PromiseDelegate } from '@lumino/coreutils';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module signaling\n */\n/**\n * A concrete implementation of `ISignal`.\n *\n * #### Example\n * ```typescript\n * import { ISignal, Signal } from '@lumino/signaling';\n *\n * class SomeClass {\n *\n *   constructor(name: string) {\n *     this.name = name;\n *   }\n *\n *   readonly name: string;\n *\n *   get valueChanged: ISignal<this, number> {\n *     return this._valueChanged;\n *   }\n *\n *   get value(): number {\n *     return this._value;\n *   }\n *\n *   set value(value: number) {\n *     if (value === this._value) {\n *       return;\n *     }\n *     this._value = value;\n *     this._valueChanged.emit(value);\n *   }\n *\n *   private _value = 0;\n *   private _valueChanged = new Signal<this, number>(this);\n * }\n *\n * function logger(sender: SomeClass, value: number): void {\n *   console.log(sender.name, value);\n * }\n *\n * let m1 = new SomeClass('foo');\n * let m2 = new SomeClass('bar');\n *\n * m1.valueChanged.connect(logger);\n * m2.valueChanged.connect(logger);\n *\n * m1.value = 42;  // logs: foo 42\n * m2.value = 17;  // logs: bar 17\n * ```\n */\nclass Signal {\n    /**\n     * Construct a new signal.\n     *\n     * @param sender - The sender which owns the signal.\n     */\n    constructor(sender) {\n        this.sender = sender;\n    }\n    /**\n     * Connect a slot to the signal.\n     *\n     * @param slot - The slot to invoke when the signal is emitted.\n     *\n     * @param thisArg - The `this` context for the slot. If provided,\n     *   this must be a non-primitive object.\n     *\n     * @returns `true` if the connection succeeds, `false` otherwise.\n     */\n    connect(slot, thisArg) {\n        return Private.connect(this, slot, thisArg);\n    }\n    /**\n     * Disconnect a slot from the signal.\n     *\n     * @param slot - The slot to disconnect from the signal.\n     *\n     * @param thisArg - The `this` context for the slot. If provided,\n     *   this must be a non-primitive object.\n     *\n     * @returns `true` if the connection is removed, `false` otherwise.\n     */\n    disconnect(slot, thisArg) {\n        return Private.disconnect(this, slot, thisArg);\n    }\n    /**\n     * Emit the signal and invoke the connected slots.\n     *\n     * @param args - The args to pass to the connected slots.\n     *\n     * #### Notes\n     * Slots are invoked synchronously in connection order.\n     *\n     * Exceptions thrown by connected slots will be caught and logged.\n     */\n    emit(args) {\n        Private.emit(this, args);\n    }\n}\n/**\n * The namespace for the `Signal` class statics.\n */\n(function (Signal) {\n    /**\n     * Remove all connections between a sender and receiver.\n     *\n     * @param sender - The sender object of interest.\n     *\n     * @param receiver - The receiver object of interest.\n     *\n     * #### Notes\n     * If a `thisArg` is provided when connecting a signal, that object\n     * is considered the receiver. Otherwise, the `slot` is considered\n     * the receiver.\n     */\n    function disconnectBetween(sender, receiver) {\n        Private.disconnectBetween(sender, receiver);\n    }\n    Signal.disconnectBetween = disconnectBetween;\n    /**\n     * Remove all connections where the given object is the sender.\n     *\n     * @param sender - The sender object of interest.\n     */\n    function disconnectSender(sender) {\n        Private.disconnectSender(sender);\n    }\n    Signal.disconnectSender = disconnectSender;\n    /**\n     * Remove all connections where the given object is the receiver.\n     *\n     * @param receiver - The receiver object of interest.\n     *\n     * #### Notes\n     * If a `thisArg` is provided when connecting a signal, that object\n     * is considered the receiver. Otherwise, the `slot` is considered\n     * the receiver.\n     */\n    function disconnectReceiver(receiver) {\n        Private.disconnectReceiver(receiver);\n    }\n    Signal.disconnectReceiver = disconnectReceiver;\n    /**\n     * Remove all connections where an object is the sender or receiver.\n     *\n     * @param object - The object of interest.\n     *\n     * #### Notes\n     * If a `thisArg` is provided when connecting a signal, that object\n     * is considered the receiver. Otherwise, the `slot` is considered\n     * the receiver.\n     */\n    function disconnectAll(object) {\n        Private.disconnectAll(object);\n    }\n    Signal.disconnectAll = disconnectAll;\n    /**\n     * Clear all signal data associated with the given object.\n     *\n     * @param object - The object for which the data should be cleared.\n     *\n     * #### Notes\n     * This removes all signal connections and any other signal data\n     * associated with the object.\n     */\n    function clearData(object) {\n        Private.disconnectAll(object);\n    }\n    Signal.clearData = clearData;\n    /**\n     * Get the signal exception handler.\n     *\n     * @returns The current exception handler.\n     *\n     * #### Notes\n     * The default exception handler is `console.error`.\n     */\n    function getExceptionHandler() {\n        return Private.exceptionHandler;\n    }\n    Signal.getExceptionHandler = getExceptionHandler;\n    /**\n     * Set the signal exception handler.\n     *\n     * @param handler - The function to use as the exception handler.\n     *\n     * @returns The old exception handler.\n     *\n     * #### Notes\n     * The exception handler is invoked when a slot throws an exception.\n     */\n    function setExceptionHandler(handler) {\n        let old = Private.exceptionHandler;\n        Private.exceptionHandler = handler;\n        return old;\n    }\n    Signal.setExceptionHandler = setExceptionHandler;\n})(Signal || (Signal = {}));\n/**\n * A concrete implementation of `IStream`.\n *\n * #### Example\n * ```typescript\n * import { IStream, Stream } from '@lumino/signaling';\n *\n * class SomeClass {\n *\n *   constructor(name: string) {\n *     this.name = name;\n *   }\n *\n *   readonly name: string;\n *\n *   get pings(): IStream<this, string> {\n *     return this._pings;\n *   }\n *\n *   ping(value: string) {\n *     this._pings.emit(value);\n *   }\n *\n *   private _pings = new Stream<this, string>(this);\n * }\n *\n * let m1 = new SomeClass('foo');\n *\n * m1.pings.connect((_, value: string) => {\n *   console.log('connect', value);\n * });\n *\n * void (async () => {\n *   for await (const ping of m1.pings) {\n *     console.log('iterator', ping);\n *   }\n * })();\n *\n * m1.ping('alpha');  // logs: connect alpha\n *                    // logs: iterator alpha\n * m1.ping('beta');   // logs: connect beta\n *                    // logs: iterator beta\n * ```\n */\nclass Stream extends Signal {\n    constructor() {\n        super(...arguments);\n        this._pending = new PromiseDelegate();\n    }\n    /**\n     * Return an async iterator that yields every emission.\n     */\n    async *[Symbol.asyncIterator]() {\n        let pending = this._pending;\n        while (true) {\n            try {\n                const { args, next } = await pending.promise;\n                pending = next;\n                yield args;\n            }\n            catch (_) {\n                return; // Any promise rejection stops the iterator.\n            }\n        }\n    }\n    /**\n     * Emit the signal, invoke the connected slots, and yield the emission.\n     *\n     * @param args - The args to pass to the connected slots.\n     */\n    emit(args) {\n        const pending = this._pending;\n        const next = (this._pending = new PromiseDelegate());\n        pending.resolve({ args, next });\n        super.emit(args);\n    }\n    /**\n     * Stop the stream's async iteration.\n     */\n    stop() {\n        this._pending.promise.catch(() => undefined);\n        this._pending.reject('stop');\n        this._pending = new PromiseDelegate();\n    }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n    /**\n     * The signal exception handler function.\n     */\n    Private.exceptionHandler = (err) => {\n        console.error(err);\n    };\n    /**\n     * Connect a slot to a signal.\n     *\n     * @param signal - The signal of interest.\n     *\n     * @param slot - The slot to invoke when the signal is emitted.\n     *\n     * @param thisArg - The `this` context for the slot. If provided,\n     *   this must be a non-primitive object.\n     *\n     * @returns `true` if the connection succeeds, `false` otherwise.\n     */\n    function connect(signal, slot, thisArg) {\n        // Coerce a `null` `thisArg` to `undefined`.\n        thisArg = thisArg || undefined;\n        // Ensure the sender's array of receivers is created.\n        let receivers = receiversForSender.get(signal.sender);\n        if (!receivers) {\n            receivers = [];\n            receiversForSender.set(signal.sender, receivers);\n        }\n        // Bail if a matching connection already exists.\n        if (findConnection(receivers, signal, slot, thisArg)) {\n            return false;\n        }\n        // Choose the best object for the receiver.\n        let receiver = thisArg || slot;\n        // Ensure the receiver's array of senders is created.\n        let senders = sendersForReceiver.get(receiver);\n        if (!senders) {\n            senders = [];\n            sendersForReceiver.set(receiver, senders);\n        }\n        // Create a new connection and add it to the end of each array.\n        let connection = { signal, slot, thisArg };\n        receivers.push(connection);\n        senders.push(connection);\n        // Indicate a successful connection.\n        return true;\n    }\n    Private.connect = connect;\n    /**\n     * Disconnect a slot from a signal.\n     *\n     * @param signal - The signal of interest.\n     *\n     * @param slot - The slot to disconnect from the signal.\n     *\n     * @param thisArg - The `this` context for the slot. If provided,\n     *   this must be a non-primitive object.\n     *\n     * @returns `true` if the connection is removed, `false` otherwise.\n     */\n    function disconnect(signal, slot, thisArg) {\n        // Coerce a `null` `thisArg` to `undefined`.\n        thisArg = thisArg || undefined;\n        // Lookup the list of receivers, and bail if none exist.\n        let receivers = receiversForSender.get(signal.sender);\n        if (!receivers || receivers.length === 0) {\n            return false;\n        }\n        // Bail if no matching connection exits.\n        let connection = findConnection(receivers, signal, slot, thisArg);\n        if (!connection) {\n            return false;\n        }\n        // Choose the best object for the receiver.\n        let receiver = thisArg || slot;\n        // Lookup the array of senders, which is now known to exist.\n        let senders = sendersForReceiver.get(receiver);\n        // Clear the connection and schedule cleanup of the arrays.\n        connection.signal = null;\n        scheduleCleanup(receivers);\n        scheduleCleanup(senders);\n        // Indicate a successful disconnection.\n        return true;\n    }\n    Private.disconnect = disconnect;\n    /**\n     * Remove all connections between a sender and receiver.\n     *\n     * @param sender - The sender object of interest.\n     *\n     * @param receiver - The receiver object of interest.\n     */\n    function disconnectBetween(sender, receiver) {\n        // If there are no receivers, there is nothing to do.\n        let receivers = receiversForSender.get(sender);\n        if (!receivers || receivers.length === 0) {\n            return;\n        }\n        // If there are no senders, there is nothing to do.\n        let senders = sendersForReceiver.get(receiver);\n        if (!senders || senders.length === 0) {\n            return;\n        }\n        // Clear each connection between the sender and receiver.\n        for (const connection of senders) {\n            // Skip connections which have already been cleared.\n            if (!connection.signal) {\n                continue;\n            }\n            // Clear the connection if it matches the sender.\n            if (connection.signal.sender === sender) {\n                connection.signal = null;\n            }\n        }\n        // Schedule a cleanup of the senders and receivers.\n        scheduleCleanup(receivers);\n        scheduleCleanup(senders);\n    }\n    Private.disconnectBetween = disconnectBetween;\n    /**\n     * Remove all connections where the given object is the sender.\n     *\n     * @param sender - The sender object of interest.\n     */\n    function disconnectSender(sender) {\n        // If there are no receivers, there is nothing to do.\n        let receivers = receiversForSender.get(sender);\n        if (!receivers || receivers.length === 0) {\n            return;\n        }\n        // Clear each receiver connection.\n        for (const connection of receivers) {\n            // Skip connections which have already been cleared.\n            if (!connection.signal) {\n                continue;\n            }\n            // Choose the best object for the receiver.\n            let receiver = connection.thisArg || connection.slot;\n            // Clear the connection.\n            connection.signal = null;\n            // Cleanup the array of senders, which is now known to exist.\n            scheduleCleanup(sendersForReceiver.get(receiver));\n        }\n        // Schedule a cleanup of the receivers.\n        scheduleCleanup(receivers);\n    }\n    Private.disconnectSender = disconnectSender;\n    /**\n     * Remove all connections where the given object is the receiver.\n     *\n     * @param receiver - The receiver object of interest.\n     */\n    function disconnectReceiver(receiver) {\n        // If there are no senders, there is nothing to do.\n        let senders = sendersForReceiver.get(receiver);\n        if (!senders || senders.length === 0) {\n            return;\n        }\n        // Clear each sender connection.\n        for (const connection of senders) {\n            // Skip connections which have already been cleared.\n            if (!connection.signal) {\n                continue;\n            }\n            // Lookup the sender for the connection.\n            let sender = connection.signal.sender;\n            // Clear the connection.\n            connection.signal = null;\n            // Cleanup the array of receivers, which is now known to exist.\n            scheduleCleanup(receiversForSender.get(sender));\n        }\n        // Schedule a cleanup of the list of senders.\n        scheduleCleanup(senders);\n    }\n    Private.disconnectReceiver = disconnectReceiver;\n    /**\n     * Remove all connections where an object is the sender or receiver.\n     *\n     * @param object - The object of interest.\n     */\n    function disconnectAll(object) {\n        // Remove all connections where the given object is the sender.\n        disconnectSender(object);\n        // Remove all connections where the given object is the receiver.\n        disconnectReceiver(object);\n    }\n    Private.disconnectAll = disconnectAll;\n    /**\n     * Emit a signal and invoke its connected slots.\n     *\n     * @param signal - The signal of interest.\n     *\n     * @param args - The args to pass to the connected slots.\n     *\n     * #### Notes\n     * Slots are invoked synchronously in connection order.\n     *\n     * Exceptions thrown by connected slots will be caught and logged.\n     */\n    function emit(signal, args) {\n        // If there are no receivers, there is nothing to do.\n        let receivers = receiversForSender.get(signal.sender);\n        if (!receivers || receivers.length === 0) {\n            return;\n        }\n        // Invoke the slots for connections with a matching signal.\n        // Any connections added during emission are not invoked.\n        for (let i = 0, n = receivers.length; i < n; ++i) {\n            let connection = receivers[i];\n            if (connection.signal === signal) {\n                invokeSlot(connection, args);\n            }\n        }\n    }\n    Private.emit = emit;\n    /**\n     * A weak mapping of sender to array of receiver connections.\n     */\n    const receiversForSender = new WeakMap();\n    /**\n     * A weak mapping of receiver to array of sender connections.\n     */\n    const sendersForReceiver = new WeakMap();\n    /**\n     * A set of connection arrays which are pending cleanup.\n     */\n    const dirtySet = new Set();\n    /**\n     * A function to schedule an event loop callback.\n     */\n    const schedule = (() => {\n        let ok = typeof requestAnimationFrame === 'function';\n        return ok ? requestAnimationFrame : setImmediate;\n    })();\n    /**\n     * Find a connection which matches the given parameters.\n     */\n    function findConnection(connections, signal, slot, thisArg) {\n        return find(connections, connection => connection.signal === signal &&\n            connection.slot === slot &&\n            connection.thisArg === thisArg);\n    }\n    /**\n     * Invoke a slot with the given parameters.\n     *\n     * The connection is assumed to be valid.\n     *\n     * Exceptions in the slot will be caught and logged.\n     */\n    function invokeSlot(connection, args) {\n        let { signal, slot, thisArg } = connection;\n        try {\n            slot.call(thisArg, signal.sender, args);\n        }\n        catch (err) {\n            Private.exceptionHandler(err);\n        }\n    }\n    /**\n     * Schedule a cleanup of a connection array.\n     *\n     * This will add the array to the dirty set and schedule a deferred\n     * cleanup of the array contents. On cleanup, any connection with a\n     * `null` signal will be removed from the array.\n     */\n    function scheduleCleanup(array) {\n        if (dirtySet.size === 0) {\n            schedule(cleanupDirtySet);\n        }\n        dirtySet.add(array);\n    }\n    /**\n     * Cleanup the connection lists in the dirty set.\n     *\n     * This function should only be invoked asynchronously, when the\n     * stack frame is guaranteed to not be on the path of user code.\n     */\n    function cleanupDirtySet() {\n        dirtySet.forEach(cleanupConnections);\n        dirtySet.clear();\n    }\n    /**\n     * Cleanup the dirty connections in a connections array.\n     *\n     * This will remove any connection with a `null` signal.\n     *\n     * This function should only be invoked asynchronously, when the\n     * stack frame is guaranteed to not be on the path of user code.\n     */\n    function cleanupConnections(connections) {\n        ArrayExt.removeAllWhere(connections, isDeadConnection);\n    }\n    /**\n     * Test whether a connection is dead.\n     *\n     * A dead connection has a `null` signal.\n     */\n    function isDeadConnection(connection) {\n        return connection.signal === null;\n    }\n})(Private || (Private = {}));\n\nexport { Signal, Stream };\n//# sourceMappingURL=index.es6.js.map\n","import { ArrayExt } from '@lumino/algorithm';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module virtualdom\n */\n/**\n * A virtual node which represents plain text content.\n *\n * #### Notes\n * User code will not typically create a `VirtualText` node directly.\n * Instead, the `h()` function will be used to create an element tree.\n */\nclass VirtualText {\n    /**\n     * Construct a new virtual text node.\n     *\n     * @param content - The text content for the node.\n     */\n    constructor(content) {\n        /**\n         * The type of the node.\n         *\n         * This value can be used as a type guard for discriminating the\n         * `VirtualNode` union type.\n         */\n        this.type = 'text';\n        this.content = content;\n    }\n}\n/**\n * A virtual node which represents an HTML element.\n *\n * #### Notes\n * User code will not typically create a `VirtualElement` node directly.\n * Instead, the `h()` function will be used to create an element tree.\n */\nclass VirtualElement {\n    /**\n     * Construct a new virtual element node.\n     *\n     * @param tag - The element tag name.\n     *\n     * @param attrs - The element attributes.\n     *\n     * @param children - The element children.\n     *\n     * @param renderer - An optional custom renderer for the element.\n     */\n    constructor(tag, attrs, children, renderer) {\n        /**\n         * The type of the node.\n         *\n         * This value can be used as a type guard for discriminating the\n         * `VirtualNode` union type.\n         */\n        this.type = 'element';\n        this.tag = tag;\n        this.attrs = attrs;\n        this.children = children;\n        this.renderer = renderer;\n    }\n}\n/**\n * DEPRECATED - use VirtualElement with a defined renderer param instead.\n * This class is provided as a backwards compatibility shim\n *\n * A \"pass thru\" virtual node whose children are managed by a render and an\n * unrender callback. The intent of this flavor of virtual node is to make\n * it easy to blend other kinds of virtualdom (eg React) into Phosphor's\n * virtualdom.\n *\n * #### Notes\n * User code will not typically create a `VirtualElementPass` node directly.\n * Instead, the `hpass()` function will be used to create an element tree.\n */\nclass VirtualElementPass extends VirtualElement {\n    /**\n     * DEPRECATED - use VirtualElement with a defined renderer param instead\n     *\n     * Construct a new virtual element pass thru node.\n     *\n     * @param tag - the tag of the parent element of this node. Once the parent\n     * element is rendered, it will be passed as an argument to\n     * renderer.render\n     *\n     * @param attrs - attributes that will assigned to the\n     * parent element\n     *\n     * @param renderer - an object with render and unrender\n     * functions, each of which should take a single argument of type\n     * HTMLElement and return nothing. If null, the parent element\n     * will be rendered barren without any children.\n     */\n    constructor(tag, attrs, renderer) {\n        super(tag, attrs, [], renderer || undefined);\n    }\n}\nfunction h(tag) {\n    let attrs = {};\n    let renderer;\n    let children = [];\n    for (let i = 1, n = arguments.length; i < n; ++i) {\n        // eslint-disable-next-line prefer-rest-params\n        let arg = arguments[i];\n        if (typeof arg === 'string') {\n            children.push(new VirtualText(arg));\n        }\n        else if (arg instanceof VirtualText) {\n            children.push(arg);\n        }\n        else if (arg instanceof VirtualElement) {\n            children.push(arg);\n        }\n        else if (arg instanceof Array) {\n            extend(children, arg);\n        }\n        else if ((i === 1 || i === 2) && arg && typeof arg === 'object') {\n            if ('render' in arg) {\n                renderer = arg;\n            }\n            else {\n                attrs = arg;\n            }\n        }\n    }\n    return new VirtualElement(tag, attrs, children, renderer);\n    function extend(array, values) {\n        for (let child of values) {\n            if (typeof child === 'string') {\n                array.push(new VirtualText(child));\n            }\n            else if (child instanceof VirtualText) {\n                array.push(child);\n            }\n            else if (child instanceof VirtualElement) {\n                array.push(child);\n            }\n        }\n    }\n}\n/**\n * The namespace for the `h` function statics.\n */\n(function (h) {\n    h.a = h.bind(undefined, 'a');\n    h.abbr = h.bind(undefined, 'abbr');\n    h.address = h.bind(undefined, 'address');\n    h.area = h.bind(undefined, 'area');\n    h.article = h.bind(undefined, 'article');\n    h.aside = h.bind(undefined, 'aside');\n    h.audio = h.bind(undefined, 'audio');\n    h.b = h.bind(undefined, 'b');\n    h.bdi = h.bind(undefined, 'bdi');\n    h.bdo = h.bind(undefined, 'bdo');\n    h.blockquote = h.bind(undefined, 'blockquote');\n    h.br = h.bind(undefined, 'br');\n    h.button = h.bind(undefined, 'button');\n    h.canvas = h.bind(undefined, 'canvas');\n    h.caption = h.bind(undefined, 'caption');\n    h.cite = h.bind(undefined, 'cite');\n    h.code = h.bind(undefined, 'code');\n    h.col = h.bind(undefined, 'col');\n    h.colgroup = h.bind(undefined, 'colgroup');\n    h.data = h.bind(undefined, 'data');\n    h.datalist = h.bind(undefined, 'datalist');\n    h.dd = h.bind(undefined, 'dd');\n    h.del = h.bind(undefined, 'del');\n    h.dfn = h.bind(undefined, 'dfn');\n    h.div = h.bind(undefined, 'div');\n    h.dl = h.bind(undefined, 'dl');\n    h.dt = h.bind(undefined, 'dt');\n    h.em = h.bind(undefined, 'em');\n    h.embed = h.bind(undefined, 'embed');\n    h.fieldset = h.bind(undefined, 'fieldset');\n    h.figcaption = h.bind(undefined, 'figcaption');\n    h.figure = h.bind(undefined, 'figure');\n    h.footer = h.bind(undefined, 'footer');\n    h.form = h.bind(undefined, 'form');\n    h.h1 = h.bind(undefined, 'h1');\n    h.h2 = h.bind(undefined, 'h2');\n    h.h3 = h.bind(undefined, 'h3');\n    h.h4 = h.bind(undefined, 'h4');\n    h.h5 = h.bind(undefined, 'h5');\n    h.h6 = h.bind(undefined, 'h6');\n    h.header = h.bind(undefined, 'header');\n    h.hr = h.bind(undefined, 'hr');\n    h.i = h.bind(undefined, 'i');\n    h.iframe = h.bind(undefined, 'iframe');\n    h.img = h.bind(undefined, 'img');\n    h.input = h.bind(undefined, 'input');\n    h.ins = h.bind(undefined, 'ins');\n    h.kbd = h.bind(undefined, 'kbd');\n    h.label = h.bind(undefined, 'label');\n    h.legend = h.bind(undefined, 'legend');\n    h.li = h.bind(undefined, 'li');\n    h.main = h.bind(undefined, 'main');\n    h.map = h.bind(undefined, 'map');\n    h.mark = h.bind(undefined, 'mark');\n    h.meter = h.bind(undefined, 'meter');\n    h.nav = h.bind(undefined, 'nav');\n    h.noscript = h.bind(undefined, 'noscript');\n    h.object = h.bind(undefined, 'object');\n    h.ol = h.bind(undefined, 'ol');\n    h.optgroup = h.bind(undefined, 'optgroup');\n    h.option = h.bind(undefined, 'option');\n    h.output = h.bind(undefined, 'output');\n    h.p = h.bind(undefined, 'p');\n    h.param = h.bind(undefined, 'param');\n    h.pre = h.bind(undefined, 'pre');\n    h.progress = h.bind(undefined, 'progress');\n    h.q = h.bind(undefined, 'q');\n    h.rp = h.bind(undefined, 'rp');\n    h.rt = h.bind(undefined, 'rt');\n    h.ruby = h.bind(undefined, 'ruby');\n    h.s = h.bind(undefined, 's');\n    h.samp = h.bind(undefined, 'samp');\n    h.section = h.bind(undefined, 'section');\n    h.select = h.bind(undefined, 'select');\n    h.small = h.bind(undefined, 'small');\n    h.source = h.bind(undefined, 'source');\n    h.span = h.bind(undefined, 'span');\n    h.strong = h.bind(undefined, 'strong');\n    h.sub = h.bind(undefined, 'sub');\n    h.summary = h.bind(undefined, 'summary');\n    h.sup = h.bind(undefined, 'sup');\n    h.table = h.bind(undefined, 'table');\n    h.tbody = h.bind(undefined, 'tbody');\n    h.td = h.bind(undefined, 'td');\n    h.textarea = h.bind(undefined, 'textarea');\n    h.tfoot = h.bind(undefined, 'tfoot');\n    h.th = h.bind(undefined, 'th');\n    h.thead = h.bind(undefined, 'thead');\n    h.time = h.bind(undefined, 'time');\n    h.title = h.bind(undefined, 'title');\n    h.tr = h.bind(undefined, 'tr');\n    h.track = h.bind(undefined, 'track');\n    h.u = h.bind(undefined, 'u');\n    h.ul = h.bind(undefined, 'ul');\n    h.var_ = h.bind(undefined, 'var');\n    h.video = h.bind(undefined, 'video');\n    h.wbr = h.bind(undefined, 'wbr');\n})(h || (h = {}));\nfunction hpass(tag) {\n    let attrs = {};\n    let renderer = null;\n    if (arguments.length === 2) {\n        // eslint-disable-next-line prefer-rest-params\n        const arg = arguments[1];\n        if ('render' in arg) {\n            renderer = arg;\n        }\n        else {\n            attrs = arg;\n        }\n    }\n    else if (arguments.length === 3) {\n        // eslint-disable-next-line prefer-rest-params\n        attrs = arguments[1];\n        // eslint-disable-next-line prefer-rest-params\n        renderer = arguments[2];\n    }\n    else if (arguments.length > 3) {\n        throw new Error('hpass() should be called with 1, 2, or 3 arguments');\n    }\n    return new VirtualElementPass(tag, attrs, renderer);\n}\n/**\n * The namespace for the virtual DOM rendering functions.\n */\nvar VirtualDOM;\n(function (VirtualDOM) {\n    function realize(node) {\n        return Private.createDOMNode(node);\n    }\n    VirtualDOM.realize = realize;\n    /**\n     * Render virtual DOM content into a host element.\n     *\n     * @param content - The virtual DOM content to render.\n     *\n     * @param host - The host element for the rendered content.\n     *\n     * #### Notes\n     * This renders the delta from the previous rendering. It assumes that\n     * the content of the host element is not manipulated by external code.\n     *\n     * Providing `null` content will clear the rendering.\n     *\n     * Externally modifying the provided content or the host element will\n     * result in undefined rendering behavior.\n     */\n    function render(content, host) {\n        let oldContent = Private.hostMap.get(host) || [];\n        let newContent = Private.asContentArray(content);\n        Private.hostMap.set(host, newContent);\n        Private.updateContent(host, oldContent, newContent);\n    }\n    VirtualDOM.render = render;\n})(VirtualDOM || (VirtualDOM = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n    /**\n     * A weak mapping of host element to virtual DOM content.\n     */\n    Private.hostMap = new WeakMap();\n    /**\n     * Cast a content value to a content array.\n     */\n    function asContentArray(value) {\n        if (!value) {\n            return [];\n        }\n        if (value instanceof Array) {\n            return value;\n        }\n        return [value];\n    }\n    Private.asContentArray = asContentArray;\n    function createDOMNode(node) {\n        // eslint-disable-next-line prefer-rest-params\n        let host = arguments[1] || null;\n        // eslint-disable-next-line prefer-rest-params\n        const before = arguments[2] || null;\n        if (host) {\n            host.insertBefore(createDOMNode(node), before);\n        }\n        else {\n            // Create a text node for a virtual text node.\n            if (node.type === 'text') {\n                return document.createTextNode(node.content);\n            }\n            // Create the HTML element with the specified tag.\n            host = document.createElement(node.tag);\n            // Add the attributes for the new element.\n            addAttrs(host, node.attrs);\n            if (node.renderer) {\n                node.renderer.render(host, {\n                    attrs: node.attrs,\n                    children: node.children\n                });\n                return host;\n            }\n            // Recursively populate the element with child content.\n            for (let i = 0, n = node.children.length; i < n; ++i) {\n                createDOMNode(node.children[i], host);\n            }\n        }\n        return host;\n    }\n    Private.createDOMNode = createDOMNode;\n    /**\n     * Update a host element with the delta of the virtual content.\n     *\n     * This is the core \"diff\" algorithm. There is no explicit \"patch\"\n     * phase. The host is patched at each step as the diff progresses.\n     */\n    function updateContent(host, oldContent, newContent) {\n        // Bail early if the content is identical.\n        if (oldContent === newContent) {\n            return;\n        }\n        // Collect the old keyed elems into a mapping.\n        let oldKeyed = collectKeys(host, oldContent);\n        // Create a copy of the old content which can be modified in-place.\n        let oldCopy = oldContent.slice();\n        // Update the host with the new content. The diff always proceeds\n        // forward and never modifies a previously visited index. The old\n        // copy array is modified in-place to reflect the changes made to\n        // the host children. This causes the stale nodes to be pushed to\n        // the end of the host node and removed at the end of the loop.\n        let currElem = host.firstChild;\n        let newCount = newContent.length;\n        for (let i = 0; i < newCount; ++i) {\n            // If the old content is exhausted, create a new node.\n            if (i >= oldCopy.length) {\n                createDOMNode(newContent[i], host);\n                continue;\n            }\n            // Lookup the old and new virtual nodes.\n            let oldVNode = oldCopy[i];\n            let newVNode = newContent[i];\n            // If both elements are identical, there is nothing to do.\n            if (oldVNode === newVNode) {\n                currElem = currElem.nextSibling;\n                continue;\n            }\n            // Handle the simplest case of in-place text update first.\n            if (oldVNode.type === 'text' && newVNode.type === 'text') {\n                // Avoid spurious updates for performance.\n                if (currElem.textContent !== newVNode.content) {\n                    currElem.textContent = newVNode.content;\n                }\n                currElem = currElem.nextSibling;\n                continue;\n            }\n            // If the old or new node is a text node, the other node is now\n            // known to be an element node, so create and insert a new node.\n            if (oldVNode.type === 'text' || newVNode.type === 'text') {\n                ArrayExt.insert(oldCopy, i, newVNode);\n                createDOMNode(newVNode, host, currElem);\n                continue;\n            }\n            // If the old XOR new node has a custom renderer,\n            // create and insert a new node.\n            if (!oldVNode.renderer != !newVNode.renderer) {\n                ArrayExt.insert(oldCopy, i, newVNode);\n                createDOMNode(newVNode, host, currElem);\n                continue;\n            }\n            // At this point, both nodes are known to be element nodes.\n            // If the new elem is keyed, move an old keyed elem to the proper\n            // location before proceeding with the diff. The search can start\n            // at the current index, since the unmatched old keyed elems are\n            // pushed forward in the old copy array.\n            let newKey = newVNode.attrs.key;\n            if (newKey && newKey in oldKeyed) {\n                let pair = oldKeyed[newKey];\n                if (pair.vNode !== oldVNode) {\n                    ArrayExt.move(oldCopy, oldCopy.indexOf(pair.vNode, i + 1), i);\n                    host.insertBefore(pair.element, currElem);\n                    oldVNode = pair.vNode;\n                    currElem = pair.element;\n                }\n            }\n            // If both elements are identical, there is nothing to do.\n            if (oldVNode === newVNode) {\n                currElem = currElem.nextSibling;\n                continue;\n            }\n            // If the old elem is keyed and does not match the new elem key,\n            // create a new node. This is necessary since the old keyed elem\n            // may be matched at a later point in the diff.\n            let oldKey = oldVNode.attrs.key;\n            if (oldKey && oldKey !== newKey) {\n                ArrayExt.insert(oldCopy, i, newVNode);\n                createDOMNode(newVNode, host, currElem);\n                continue;\n            }\n            // If the tags are different, create a new node.\n            if (oldVNode.tag !== newVNode.tag) {\n                ArrayExt.insert(oldCopy, i, newVNode);\n                createDOMNode(newVNode, host, currElem);\n                continue;\n            }\n            // At this point, the element can be updated in-place.\n            // Update the element attributes.\n            updateAttrs(currElem, oldVNode.attrs, newVNode.attrs);\n            // Update the element content.\n            if (newVNode.renderer) {\n                newVNode.renderer.render(currElem, {\n                    attrs: newVNode.attrs,\n                    children: newVNode.children\n                });\n            }\n            else {\n                updateContent(currElem, oldVNode.children, newVNode.children);\n            }\n            // Step to the next sibling element.\n            currElem = currElem.nextSibling;\n        }\n        // Cleanup stale DOM\n        removeContent(host, oldCopy, newCount, true);\n    }\n    Private.updateContent = updateContent;\n    /**\n     * Handle cleanup of stale vdom and its associated DOM. The host node is\n     * traversed recursively (in depth-first order), and any explicit cleanup\n     * required by a child node is carried out when it is visited (eg if a node\n     * has a custom renderer, the renderer.unrender function will be called).\n     * Once the subtree beneath each child of host has been completely visited,\n     * that child will be removed via a call to host.removeChild.\n     */\n    function removeContent(host, oldContent, newCount, _sentinel) {\n        // Dispose of the old nodes pushed to the end of the host.\n        for (let i = oldContent.length - 1; i >= newCount; --i) {\n            const oldNode = oldContent[i];\n            const child = (_sentinel ? host.lastChild : host.childNodes[i]);\n            // recursively clean up host children\n            if (oldNode.type === 'text') ;\n            else if (oldNode.renderer && oldNode.renderer.unrender) {\n                oldNode.renderer.unrender(child, {\n                    attrs: oldNode.attrs,\n                    children: oldNode.children\n                });\n            }\n            else {\n                removeContent(child, oldNode.children, 0, false);\n            }\n            if (_sentinel) {\n                host.removeChild(child);\n            }\n        }\n    }\n    /**\n     * A set of special-cased attribute names.\n     */\n    const specialAttrs = {\n        key: true,\n        className: true,\n        htmlFor: true,\n        dataset: true,\n        style: true\n    };\n    /**\n     * Add element attributes to a newly created HTML element.\n     */\n    function addAttrs(element, attrs) {\n        // Add the inline event listeners and node attributes.\n        for (let name in attrs) {\n            if (name in specialAttrs) {\n                continue;\n            }\n            if (name.substr(0, 2) === 'on') {\n                element[name] = attrs[name];\n            }\n            else {\n                element.setAttribute(name, attrs[name]);\n            }\n        }\n        // Add the element `class` attribute.\n        if (attrs.className !== undefined) {\n            element.setAttribute('class', attrs.className);\n        }\n        // Add the element `for` attribute.\n        if (attrs.htmlFor !== undefined) {\n            element.setAttribute('for', attrs.htmlFor);\n        }\n        // Add the dataset values.\n        if (attrs.dataset) {\n            addDataset(element, attrs.dataset);\n        }\n        // Add the inline styles.\n        if (attrs.style) {\n            addStyle(element, attrs.style);\n        }\n    }\n    /**\n     * Update the element attributes of an HTML element.\n     */\n    function updateAttrs(element, oldAttrs, newAttrs) {\n        // Do nothing if the attrs are the same object.\n        if (oldAttrs === newAttrs) {\n            return;\n        }\n        // Setup the strongly typed loop variable.\n        let name;\n        // Remove attributes and listeners which no longer exist.\n        for (name in oldAttrs) {\n            if (name in specialAttrs || name in newAttrs) {\n                continue;\n            }\n            if (name.substr(0, 2) === 'on') {\n                element[name] = null;\n            }\n            else {\n                element.removeAttribute(name);\n            }\n        }\n        // Add and update new and existing attributes and listeners.\n        for (name in newAttrs) {\n            if (name in specialAttrs || oldAttrs[name] === newAttrs[name]) {\n                continue;\n            }\n            if (name.substr(0, 2) === 'on') {\n                element[name] = newAttrs[name];\n            }\n            else {\n                element.setAttribute(name, newAttrs[name]);\n            }\n        }\n        // Update the element `class` attribute.\n        if (oldAttrs.className !== newAttrs.className) {\n            if (newAttrs.className !== undefined) {\n                element.setAttribute('class', newAttrs.className);\n            }\n            else {\n                element.removeAttribute('class');\n            }\n        }\n        // Add the element `for` attribute.\n        if (oldAttrs.htmlFor !== newAttrs.htmlFor) {\n            if (newAttrs.htmlFor !== undefined) {\n                element.setAttribute('for', newAttrs.htmlFor);\n            }\n            else {\n                element.removeAttribute('for');\n            }\n        }\n        // Update the dataset values.\n        if (oldAttrs.dataset !== newAttrs.dataset) {\n            updateDataset(element, oldAttrs.dataset || {}, newAttrs.dataset || {});\n        }\n        // Update the inline styles.\n        if (oldAttrs.style !== newAttrs.style) {\n            updateStyle(element, oldAttrs.style || {}, newAttrs.style || {});\n        }\n    }\n    /**\n     * Add dataset values to a newly created HTML element.\n     */\n    function addDataset(element, dataset) {\n        for (let name in dataset) {\n            element.setAttribute(`data-${name}`, dataset[name]);\n        }\n    }\n    /**\n     * Update the dataset values of an HTML element.\n     */\n    function updateDataset(element, oldDataset, newDataset) {\n        for (let name in oldDataset) {\n            if (!(name in newDataset)) {\n                element.removeAttribute(`data-${name}`);\n            }\n        }\n        for (let name in newDataset) {\n            if (oldDataset[name] !== newDataset[name]) {\n                element.setAttribute(`data-${name}`, newDataset[name]);\n            }\n        }\n    }\n    /**\n     * Add inline style values to a newly created HTML element.\n     */\n    function addStyle(element, style) {\n        let elemStyle = element.style;\n        let name;\n        for (name in style) {\n            elemStyle[name] = style[name];\n        }\n    }\n    /**\n     * Update the inline style values of an HTML element.\n     */\n    function updateStyle(element, oldStyle, newStyle) {\n        let elemStyle = element.style;\n        let name;\n        for (name in oldStyle) {\n            if (!(name in newStyle)) {\n                elemStyle[name] = '';\n            }\n        }\n        for (name in newStyle) {\n            if (oldStyle[name] !== newStyle[name]) {\n                elemStyle[name] = newStyle[name];\n            }\n        }\n    }\n    /**\n     * Collect a mapping of keyed elements for the host content.\n     */\n    function collectKeys(host, content) {\n        let node = host.firstChild;\n        let keyMap = Object.create(null);\n        for (let vNode of content) {\n            if (vNode.type === 'element' && vNode.attrs.key) {\n                keyMap[vNode.attrs.key] = { vNode, element: node };\n            }\n            node = node.nextSibling;\n        }\n        return keyMap;\n    }\n})(Private || (Private = {}));\n\nexport { VirtualDOM, VirtualElement, VirtualElementPass, VirtualText, h, hpass };\n//# sourceMappingURL=index.es6.js.map\n","import { ArrayExt, StringExt, empty, find, max } from '@lumino/algorithm';\nimport { UUID, JSONExt, MimeData } from '@lumino/coreutils';\nimport { ElementExt, Selector, Platform } from '@lumino/domutils';\nimport { Message, ConflatableMessage, MessageLoop } from '@lumino/messaging';\nimport { AttachedProperty } from '@lumino/properties';\nimport { Signal } from '@lumino/signaling';\nimport { Drag } from '@lumino/dragdrop';\nimport { CommandRegistry } from '@lumino/commands';\nimport { VirtualDOM, h } from '@lumino/virtualdom';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { getKeyboardLayout } from '@lumino/keyboard';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A sizer object for use with the box engine layout functions.\n *\n * #### Notes\n * A box sizer holds the geometry information for an object along an\n * arbitrary layout orientation.\n *\n * For best performance, this class should be treated as a raw data\n * struct. It should not typically be subclassed.\n */\nclass BoxSizer {\n    constructor() {\n        /**\n         * The preferred size for the sizer.\n         *\n         * #### Notes\n         * The sizer will be given this initial size subject to its size\n         * bounds. The sizer will not deviate from this size unless such\n         * deviation is required to fit into the available layout space.\n         *\n         * There is no limit to this value, but it will be clamped to the\n         * bounds defined by {@link minSize} and {@link maxSize}.\n         *\n         * The default value is `0`.\n         */\n        this.sizeHint = 0;\n        /**\n         * The minimum size of the sizer.\n         *\n         * #### Notes\n         * The sizer will never be sized less than this value, even if\n         * it means the sizer will overflow the available layout space.\n         *\n         * It is assumed that this value lies in the range `[0, Infinity)`\n         * and that it is `<=` to {@link maxSize}. Failure to adhere to this\n         * constraint will yield undefined results.\n         *\n         * The default value is `0`.\n         */\n        this.minSize = 0;\n        /**\n         * The maximum size of the sizer.\n         *\n         * #### Notes\n         * The sizer will never be sized greater than this value, even if\n         * it means the sizer will underflow the available layout space.\n         *\n         * It is assumed that this value lies in the range `[0, Infinity]`\n         * and that it is `>=` to {@link minSize}. Failure to adhere to this\n         * constraint will yield undefined results.\n         *\n         * The default value is `Infinity`.\n         */\n        this.maxSize = Infinity;\n        /**\n         * The stretch factor for the sizer.\n         *\n         * #### Notes\n         * This controls how much the sizer stretches relative to its sibling\n         * sizers when layout space is distributed. A stretch factor of zero\n         * is special and will cause the sizer to only be resized after all\n         * other sizers with a stretch factor greater than zero have been\n         * resized to their limits.\n         *\n         * It is assumed that this value is an integer that lies in the range\n         * `[0, Infinity)`. Failure to adhere to this constraint will yield\n         * undefined results.\n         *\n         * The default value is `1`.\n         */\n        this.stretch = 1;\n        /**\n         * The computed size of the sizer.\n         *\n         * #### Notes\n         * This value is the output of a call to {@link BoxEngine.calc}. It represents\n         * the computed size for the object along the layout orientation,\n         * and will always lie in the range `[minSize, maxSize]`.\n         *\n         * This value is output only.\n         *\n         * Changing this value will have no effect.\n         */\n        this.size = 0;\n        /**\n         * An internal storage property for the layout algorithm.\n         *\n         * #### Notes\n         * This value is used as temporary storage by the layout algorithm.\n         *\n         * Changing this value will have no effect.\n         */\n        this.done = false;\n    }\n}\n/**\n * The namespace for the box engine layout functions.\n */\nvar BoxEngine;\n(function (BoxEngine) {\n    /**\n     * Calculate the optimal layout sizes for a sequence of box sizers.\n     *\n     * This distributes the available layout space among the box sizers\n     * according to the following algorithm:\n     *\n     * 1. Initialize the sizers's size to its size hint and compute the\n     *    sums for each of size hint, min size, and max size.\n     *\n     * 2. If the total size hint equals the available space, return.\n     *\n     * 3. If the available space is less than the total min size, set all\n     *    sizers to their min size and return.\n     *\n     * 4. If the available space is greater than the total max size, set\n     *    all sizers to their max size and return.\n     *\n     * 5. If the layout space is less than the total size hint, distribute\n     *    the negative delta as follows:\n     *\n     *    a. Shrink each sizer with a stretch factor greater than zero by\n     *       an amount proportional to the negative space and the sum of\n     *       stretch factors. If the sizer reaches its min size, remove\n     *       it and its stretch factor from the computation.\n     *\n     *    b. If after adjusting all stretch sizers there remains negative\n     *       space, distribute the space equally among the sizers with a\n     *       stretch factor of zero. If a sizer reaches its min size,\n     *       remove it from the computation.\n     *\n     * 6. If the layout space is greater than the total size hint,\n     *    distribute the positive delta as follows:\n     *\n     *    a. Expand each sizer with a stretch factor greater than zero by\n     *       an amount proportional to the postive space and the sum of\n     *       stretch factors. If the sizer reaches its max size, remove\n     *       it and its stretch factor from the computation.\n     *\n     *    b. If after adjusting all stretch sizers there remains positive\n     *       space, distribute the space equally among the sizers with a\n     *       stretch factor of zero. If a sizer reaches its max size,\n     *       remove it from the computation.\n     *\n     * 7. return\n     *\n     * @param sizers - The sizers for a particular layout line.\n     *\n     * @param space - The available layout space for the sizers.\n     *\n     * @returns The delta between the provided available space and the\n     *   actual consumed space. This value will be zero if the sizers\n     *   can be adjusted to fit, negative if the available space is too\n     *   small, and positive if the available space is too large.\n     *\n     * #### Notes\n     * The {@link BoxSizer.size} of each sizer is updated with the computed size.\n     *\n     * This function can be called at any time to recompute the layout for\n     * an existing sequence of sizers. The previously computed results will\n     * have no effect on the new output. It is therefore not necessary to\n     * create new sizer objects on each resize event.\n     */\n    function calc(sizers, space) {\n        // Bail early if there is nothing to do.\n        let count = sizers.length;\n        if (count === 0) {\n            return space;\n        }\n        // Setup the size and stretch counters.\n        let totalMin = 0;\n        let totalMax = 0;\n        let totalSize = 0;\n        let totalStretch = 0;\n        let stretchCount = 0;\n        // Setup the sizers and compute the totals.\n        for (let i = 0; i < count; ++i) {\n            let sizer = sizers[i];\n            let min = sizer.minSize;\n            let max = sizer.maxSize;\n            let hint = sizer.sizeHint;\n            sizer.done = false;\n            sizer.size = Math.max(min, Math.min(hint, max));\n            totalSize += sizer.size;\n            totalMin += min;\n            totalMax += max;\n            if (sizer.stretch > 0) {\n                totalStretch += sizer.stretch;\n                stretchCount++;\n            }\n        }\n        // If the space is equal to the total size, return early.\n        if (space === totalSize) {\n            return 0;\n        }\n        // If the space is less than the total min, minimize each sizer.\n        if (space <= totalMin) {\n            for (let i = 0; i < count; ++i) {\n                let sizer = sizers[i];\n                sizer.size = sizer.minSize;\n            }\n            return space - totalMin;\n        }\n        // If the space is greater than the total max, maximize each sizer.\n        if (space >= totalMax) {\n            for (let i = 0; i < count; ++i) {\n                let sizer = sizers[i];\n                sizer.size = sizer.maxSize;\n            }\n            return space - totalMax;\n        }\n        // The loops below perform sub-pixel precision sizing. A near zero\n        // value is used for compares instead of zero to ensure that the\n        // loop terminates when the subdivided space is reasonably small.\n        let nearZero = 0.01;\n        // A counter which is decremented each time a sizer is resized to\n        // its limit. This ensures the loops terminate even if there is\n        // space remaining to distribute.\n        let notDoneCount = count;\n        // Distribute negative delta space.\n        if (space < totalSize) {\n            // Shrink each stretchable sizer by an amount proportional to its\n            // stretch factor. If a sizer reaches its min size it's marked as\n            // done. The loop progresses in phases where each sizer is given\n            // a chance to consume its fair share for the pass, regardless of\n            // whether a sizer before it reached its limit. This continues\n            // until the stretchable sizers or the free space is exhausted.\n            let freeSpace = totalSize - space;\n            while (stretchCount > 0 && freeSpace > nearZero) {\n                let distSpace = freeSpace;\n                let distStretch = totalStretch;\n                for (let i = 0; i < count; ++i) {\n                    let sizer = sizers[i];\n                    if (sizer.done || sizer.stretch === 0) {\n                        continue;\n                    }\n                    let amt = (sizer.stretch * distSpace) / distStretch;\n                    if (sizer.size - amt <= sizer.minSize) {\n                        freeSpace -= sizer.size - sizer.minSize;\n                        totalStretch -= sizer.stretch;\n                        sizer.size = sizer.minSize;\n                        sizer.done = true;\n                        notDoneCount--;\n                        stretchCount--;\n                    }\n                    else {\n                        freeSpace -= amt;\n                        sizer.size -= amt;\n                    }\n                }\n            }\n            // Distribute any remaining space evenly among the non-stretchable\n            // sizers. This progresses in phases in the same manner as above.\n            while (notDoneCount > 0 && freeSpace > nearZero) {\n                let amt = freeSpace / notDoneCount;\n                for (let i = 0; i < count; ++i) {\n                    let sizer = sizers[i];\n                    if (sizer.done) {\n                        continue;\n                    }\n                    if (sizer.size - amt <= sizer.minSize) {\n                        freeSpace -= sizer.size - sizer.minSize;\n                        sizer.size = sizer.minSize;\n                        sizer.done = true;\n                        notDoneCount--;\n                    }\n                    else {\n                        freeSpace -= amt;\n                        sizer.size -= amt;\n                    }\n                }\n            }\n        }\n        // Distribute positive delta space.\n        else {\n            // Expand each stretchable sizer by an amount proportional to its\n            // stretch factor. If a sizer reaches its max size it's marked as\n            // done. The loop progresses in phases where each sizer is given\n            // a chance to consume its fair share for the pass, regardless of\n            // whether a sizer before it reached its limit. This continues\n            // until the stretchable sizers or the free space is exhausted.\n            let freeSpace = space - totalSize;\n            while (stretchCount > 0 && freeSpace > nearZero) {\n                let distSpace = freeSpace;\n                let distStretch = totalStretch;\n                for (let i = 0; i < count; ++i) {\n                    let sizer = sizers[i];\n                    if (sizer.done || sizer.stretch === 0) {\n                        continue;\n                    }\n                    let amt = (sizer.stretch * distSpace) / distStretch;\n                    if (sizer.size + amt >= sizer.maxSize) {\n                        freeSpace -= sizer.maxSize - sizer.size;\n                        totalStretch -= sizer.stretch;\n                        sizer.size = sizer.maxSize;\n                        sizer.done = true;\n                        notDoneCount--;\n                        stretchCount--;\n                    }\n                    else {\n                        freeSpace -= amt;\n                        sizer.size += amt;\n                    }\n                }\n            }\n            // Distribute any remaining space evenly among the non-stretchable\n            // sizers. This progresses in phases in the same manner as above.\n            while (notDoneCount > 0 && freeSpace > nearZero) {\n                let amt = freeSpace / notDoneCount;\n                for (let i = 0; i < count; ++i) {\n                    let sizer = sizers[i];\n                    if (sizer.done) {\n                        continue;\n                    }\n                    if (sizer.size + amt >= sizer.maxSize) {\n                        freeSpace -= sizer.maxSize - sizer.size;\n                        sizer.size = sizer.maxSize;\n                        sizer.done = true;\n                        notDoneCount--;\n                    }\n                    else {\n                        freeSpace -= amt;\n                        sizer.size += amt;\n                    }\n                }\n            }\n        }\n        // Indicate that the consumed space equals the available space.\n        return 0;\n    }\n    BoxEngine.calc = calc;\n    /**\n     * Adjust a sizer by a delta and update its neighbors accordingly.\n     *\n     * @param sizers - The sizers which should be adjusted.\n     *\n     * @param index - The index of the sizer to grow.\n     *\n     * @param delta - The amount to adjust the sizer, positive or negative.\n     *\n     * #### Notes\n     * This will adjust the indicated sizer by the specified amount, along\n     * with the sizes of the appropriate neighbors, subject to the limits\n     * specified by each of the sizers.\n     *\n     * This is useful when implementing box layouts where the boundaries\n     * between the sizers are interactively adjustable by the user.\n     */\n    function adjust(sizers, index, delta) {\n        // Bail early when there is nothing to do.\n        if (sizers.length === 0 || delta === 0) {\n            return;\n        }\n        // Dispatch to the proper implementation.\n        if (delta > 0) {\n            growSizer(sizers, index, delta);\n        }\n        else {\n            shrinkSizer(sizers, index, -delta);\n        }\n    }\n    BoxEngine.adjust = adjust;\n    /**\n     * Grow a sizer by a positive delta and adjust neighbors.\n     */\n    function growSizer(sizers, index, delta) {\n        // Compute how much the items to the left can expand.\n        let growLimit = 0;\n        for (let i = 0; i <= index; ++i) {\n            let sizer = sizers[i];\n            growLimit += sizer.maxSize - sizer.size;\n        }\n        // Compute how much the items to the right can shrink.\n        let shrinkLimit = 0;\n        for (let i = index + 1, n = sizers.length; i < n; ++i) {\n            let sizer = sizers[i];\n            shrinkLimit += sizer.size - sizer.minSize;\n        }\n        // Clamp the delta adjustment to the limits.\n        delta = Math.min(delta, growLimit, shrinkLimit);\n        // Grow the sizers to the left by the delta.\n        let grow = delta;\n        for (let i = index; i >= 0 && grow > 0; --i) {\n            let sizer = sizers[i];\n            let limit = sizer.maxSize - sizer.size;\n            if (limit >= grow) {\n                sizer.sizeHint = sizer.size + grow;\n                grow = 0;\n            }\n            else {\n                sizer.sizeHint = sizer.size + limit;\n                grow -= limit;\n            }\n        }\n        // Shrink the sizers to the right by the delta.\n        let shrink = delta;\n        for (let i = index + 1, n = sizers.length; i < n && shrink > 0; ++i) {\n            let sizer = sizers[i];\n            let limit = sizer.size - sizer.minSize;\n            if (limit >= shrink) {\n                sizer.sizeHint = sizer.size - shrink;\n                shrink = 0;\n            }\n            else {\n                sizer.sizeHint = sizer.size - limit;\n                shrink -= limit;\n            }\n        }\n    }\n    /**\n     * Shrink a sizer by a positive delta and adjust neighbors.\n     */\n    function shrinkSizer(sizers, index, delta) {\n        // Compute how much the items to the right can expand.\n        let growLimit = 0;\n        for (let i = index + 1, n = sizers.length; i < n; ++i) {\n            let sizer = sizers[i];\n            growLimit += sizer.maxSize - sizer.size;\n        }\n        // Compute how much the items to the left can shrink.\n        let shrinkLimit = 0;\n        for (let i = 0; i <= index; ++i) {\n            let sizer = sizers[i];\n            shrinkLimit += sizer.size - sizer.minSize;\n        }\n        // Clamp the delta adjustment to the limits.\n        delta = Math.min(delta, growLimit, shrinkLimit);\n        // Grow the sizers to the right by the delta.\n        let grow = delta;\n        for (let i = index + 1, n = sizers.length; i < n && grow > 0; ++i) {\n            let sizer = sizers[i];\n            let limit = sizer.maxSize - sizer.size;\n            if (limit >= grow) {\n                sizer.sizeHint = sizer.size + grow;\n                grow = 0;\n            }\n            else {\n                sizer.sizeHint = sizer.size + limit;\n                grow -= limit;\n            }\n        }\n        // Shrink the sizers to the left by the delta.\n        let shrink = delta;\n        for (let i = index; i >= 0 && shrink > 0; --i) {\n            let sizer = sizers[i];\n            let limit = sizer.size - sizer.minSize;\n            if (limit >= shrink) {\n                sizer.sizeHint = sizer.size - shrink;\n                shrink = 0;\n            }\n            else {\n                sizer.sizeHint = sizer.size - limit;\n                shrink -= limit;\n            }\n        }\n    }\n})(BoxEngine || (BoxEngine = {}));\n\n/**\n * An object which holds data related to an object's title.\n *\n * #### Notes\n * A title object is intended to hold the data necessary to display a\n * header for a particular object. A common example is the `TabPanel`,\n * which uses the widget title to populate the tab for a child widget.\n *\n * It is the responsibility of the owner to call the title disposal.\n */\nclass Title {\n    /**\n     * Construct a new title.\n     *\n     * @param options - The options for initializing the title.\n     */\n    constructor(options) {\n        this._label = '';\n        this._caption = '';\n        this._mnemonic = -1;\n        this._icon = undefined;\n        this._iconClass = '';\n        this._iconLabel = '';\n        this._className = '';\n        this._closable = false;\n        this._changed = new Signal(this);\n        this._isDisposed = false;\n        this.owner = options.owner;\n        if (options.label !== undefined) {\n            this._label = options.label;\n        }\n        if (options.mnemonic !== undefined) {\n            this._mnemonic = options.mnemonic;\n        }\n        if (options.icon !== undefined) {\n            this._icon = options.icon;\n        }\n        if (options.iconClass !== undefined) {\n            this._iconClass = options.iconClass;\n        }\n        if (options.iconLabel !== undefined) {\n            this._iconLabel = options.iconLabel;\n        }\n        if (options.caption !== undefined) {\n            this._caption = options.caption;\n        }\n        if (options.className !== undefined) {\n            this._className = options.className;\n        }\n        if (options.closable !== undefined) {\n            this._closable = options.closable;\n        }\n        this._dataset = options.dataset || {};\n    }\n    /**\n     * A signal emitted when the state of the title changes.\n     */\n    get changed() {\n        return this._changed;\n    }\n    /**\n     * Get the label for the title.\n     *\n     * #### Notes\n     * The default value is an empty string.\n     */\n    get label() {\n        return this._label;\n    }\n    /**\n     * Set the label for the title.\n     */\n    set label(value) {\n        if (this._label === value) {\n            return;\n        }\n        this._label = value;\n        this._changed.emit(undefined);\n    }\n    /**\n     * Get the mnemonic index for the title.\n     *\n     * #### Notes\n     * The default value is `-1`.\n     */\n    get mnemonic() {\n        return this._mnemonic;\n    }\n    /**\n     * Set the mnemonic index for the title.\n     */\n    set mnemonic(value) {\n        if (this._mnemonic === value) {\n            return;\n        }\n        this._mnemonic = value;\n        this._changed.emit(undefined);\n    }\n    /**\n     * Get the icon renderer for the title.\n     *\n     * #### Notes\n     * The default value is undefined.\n     */\n    get icon() {\n        return this._icon;\n    }\n    /**\n     * Set the icon renderer for the title.\n     *\n     * #### Notes\n     * A renderer is an object that supplies a render and unrender function.\n     */\n    set icon(value) {\n        if (this._icon === value) {\n            return;\n        }\n        this._icon = value;\n        this._changed.emit(undefined);\n    }\n    /**\n     * Get the icon class name for the title.\n     *\n     * #### Notes\n     * The default value is an empty string.\n     */\n    get iconClass() {\n        return this._iconClass;\n    }\n    /**\n     * Set the icon class name for the title.\n     *\n     * #### Notes\n     * Multiple class names can be separated with whitespace.\n     */\n    set iconClass(value) {\n        if (this._iconClass === value) {\n            return;\n        }\n        this._iconClass = value;\n        this._changed.emit(undefined);\n    }\n    /**\n     * Get the icon label for the title.\n     *\n     * #### Notes\n     * The default value is an empty string.\n     */\n    get iconLabel() {\n        return this._iconLabel;\n    }\n    /**\n     * Set the icon label for the title.\n     *\n     * #### Notes\n     * Multiple class names can be separated with whitespace.\n     */\n    set iconLabel(value) {\n        if (this._iconLabel === value) {\n            return;\n        }\n        this._iconLabel = value;\n        this._changed.emit(undefined);\n    }\n    /**\n     * Get the caption for the title.\n     *\n     * #### Notes\n     * The default value is an empty string.\n     */\n    get caption() {\n        return this._caption;\n    }\n    /**\n     * Set the caption for the title.\n     */\n    set caption(value) {\n        if (this._caption === value) {\n            return;\n        }\n        this._caption = value;\n        this._changed.emit(undefined);\n    }\n    /**\n     * Get the extra class name for the title.\n     *\n     * #### Notes\n     * The default value is an empty string.\n     */\n    get className() {\n        return this._className;\n    }\n    /**\n     * Set the extra class name for the title.\n     *\n     * #### Notes\n     * Multiple class names can be separated with whitespace.\n     */\n    set className(value) {\n        if (this._className === value) {\n            return;\n        }\n        this._className = value;\n        this._changed.emit(undefined);\n    }\n    /**\n     * Get the closable state for the title.\n     *\n     * #### Notes\n     * The default value is `false`.\n     */\n    get closable() {\n        return this._closable;\n    }\n    /**\n     * Set the closable state for the title.\n     *\n     * #### Notes\n     * This controls the presence of a close icon when applicable.\n     */\n    set closable(value) {\n        if (this._closable === value) {\n            return;\n        }\n        this._closable = value;\n        this._changed.emit(undefined);\n    }\n    /**\n     * Get the dataset for the title.\n     *\n     * #### Notes\n     * The default value is an empty dataset.\n     */\n    get dataset() {\n        return this._dataset;\n    }\n    /**\n     * Set the dataset for the title.\n     *\n     * #### Notes\n     * This controls the data attributes when applicable.\n     */\n    set dataset(value) {\n        if (this._dataset === value) {\n            return;\n        }\n        this._dataset = value;\n        this._changed.emit(undefined);\n    }\n    /**\n     * Test whether the title has been disposed.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of the resources held by the title.\n     *\n     * #### Notes\n     * It is the responsibility of the owner to call the title disposal.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        Signal.clearData(this);\n    }\n}\n\n/**\n * The base class of the lumino widget hierarchy.\n *\n * #### Notes\n * This class will typically be subclassed in order to create a useful\n * widget. However, it can be used directly to host externally created\n * content.\n */\nclass Widget {\n    /**\n     * Construct a new widget.\n     *\n     * @param options - The options for initializing the widget.\n     */\n    constructor(options = {}) {\n        this._flags = 0;\n        this._layout = null;\n        this._parent = null;\n        this._disposed = new Signal(this);\n        this._hiddenMode = Widget.HiddenMode.Display;\n        this.node = Private$j.createNode(options);\n        this.addClass('lm-Widget');\n    }\n    /**\n     * Dispose of the widget and its descendant widgets.\n     *\n     * #### Notes\n     * It is unsafe to use the widget after it has been disposed.\n     *\n     * All calls made to this method after the first are a no-op.\n     */\n    dispose() {\n        // Do nothing if the widget is already disposed.\n        if (this.isDisposed) {\n            return;\n        }\n        // Set the disposed flag and emit the disposed signal.\n        this.setFlag(Widget.Flag.IsDisposed);\n        this._disposed.emit(undefined);\n        // Remove or detach the widget if necessary.\n        if (this.parent) {\n            this.parent = null;\n        }\n        else if (this.isAttached) {\n            Widget.detach(this);\n        }\n        // Dispose of the widget layout.\n        if (this._layout) {\n            this._layout.dispose();\n            this._layout = null;\n        }\n        // Dispose the title\n        this.title.dispose();\n        // Clear the extra data associated with the widget.\n        Signal.clearData(this);\n        MessageLoop.clearData(this);\n        AttachedProperty.clearData(this);\n    }\n    /**\n     * A signal emitted when the widget is disposed.\n     */\n    get disposed() {\n        return this._disposed;\n    }\n    /**\n     * Test whether the widget has been disposed.\n     */\n    get isDisposed() {\n        return this.testFlag(Widget.Flag.IsDisposed);\n    }\n    /**\n     * Test whether the widget's node is attached to the DOM.\n     */\n    get isAttached() {\n        return this.testFlag(Widget.Flag.IsAttached);\n    }\n    /**\n     * Test whether the widget is explicitly hidden.\n     *\n     * #### Notes\n     * You should prefer `!{@link isVisible}` over `{@link isHidden}` if you want to know if the\n     * widget is hidden as this does not test if the widget is hidden because one of its ancestors is hidden.\n     */\n    get isHidden() {\n        return this.testFlag(Widget.Flag.IsHidden);\n    }\n    /**\n     * Test whether the widget is visible.\n     *\n     * #### Notes\n     * A widget is visible when it is attached to the DOM, is not\n     * explicitly hidden, and has no explicitly hidden ancestors.\n     *\n     * Since 2.7.0, this does not rely on the {@link Widget.Flag.IsVisible} flag.\n     * It recursively checks the visibility of all parent widgets.\n     */\n    get isVisible() {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        let parent = this;\n        do {\n            if (parent.isHidden || !parent.isAttached) {\n                return false;\n            }\n            parent = parent.parent;\n        } while (parent != null);\n        return true;\n    }\n    /**\n     * The title object for the widget.\n     *\n     * #### Notes\n     * The title object is used by some container widgets when displaying\n     * the widget alongside some title, such as a tab panel or side bar.\n     *\n     * Since not all widgets will use the title, it is created on demand.\n     *\n     * The `owner` property of the title is set to this widget.\n     */\n    get title() {\n        return Private$j.titleProperty.get(this);\n    }\n    /**\n     * Get the id of the widget's DOM node.\n     */\n    get id() {\n        return this.node.id;\n    }\n    /**\n     * Set the id of the widget's DOM node.\n     */\n    set id(value) {\n        this.node.id = value;\n    }\n    /**\n     * The dataset for the widget's DOM node.\n     */\n    get dataset() {\n        return this.node.dataset;\n    }\n    /**\n     * Get the method for hiding the widget.\n     */\n    get hiddenMode() {\n        return this._hiddenMode;\n    }\n    /**\n     * Set the method for hiding the widget.\n     */\n    set hiddenMode(value) {\n        if (this._hiddenMode === value) {\n            return;\n        }\n        if (this.isHidden) {\n            // Reset styles set by previous mode.\n            this._toggleHidden(false);\n        }\n        if (value == Widget.HiddenMode.Scale) {\n            this.node.style.willChange = 'transform';\n        }\n        else {\n            this.node.style.willChange = 'auto';\n        }\n        this._hiddenMode = value;\n        if (this.isHidden) {\n            // Set styles for new mode.\n            this._toggleHidden(true);\n        }\n    }\n    /**\n     * Get the parent of the widget.\n     */\n    get parent() {\n        return this._parent;\n    }\n    /**\n     * Set the parent of the widget.\n     *\n     * #### Notes\n     * Children are typically added to a widget by using a layout, which\n     * means user code will not normally set the parent widget directly.\n     *\n     * The widget will be automatically removed from its old parent.\n     *\n     * This is a no-op if there is no effective parent change.\n     */\n    set parent(value) {\n        if (this._parent === value) {\n            return;\n        }\n        if (value && this.contains(value)) {\n            throw new Error('Invalid parent widget.');\n        }\n        if (this._parent && !this._parent.isDisposed) {\n            let msg = new Widget.ChildMessage('child-removed', this);\n            MessageLoop.sendMessage(this._parent, msg);\n        }\n        this._parent = value;\n        if (this._parent && !this._parent.isDisposed) {\n            let msg = new Widget.ChildMessage('child-added', this);\n            MessageLoop.sendMessage(this._parent, msg);\n        }\n        if (!this.isDisposed) {\n            MessageLoop.sendMessage(this, Widget.Msg.ParentChanged);\n        }\n    }\n    /**\n     * Get the layout for the widget.\n     */\n    get layout() {\n        return this._layout;\n    }\n    /**\n     * Set the layout for the widget.\n     *\n     * #### Notes\n     * The layout is single-use only. It cannot be changed after the\n     * first assignment.\n     *\n     * The layout is disposed automatically when the widget is disposed.\n     */\n    set layout(value) {\n        if (this._layout === value) {\n            return;\n        }\n        if (this.testFlag(Widget.Flag.DisallowLayout)) {\n            throw new Error('Cannot set widget layout.');\n        }\n        if (this._layout) {\n            throw new Error('Cannot change widget layout.');\n        }\n        if (value.parent) {\n            throw new Error('Cannot change layout parent.');\n        }\n        this._layout = value;\n        value.parent = this;\n    }\n    /**\n     * Create an iterator over the widget's children.\n     *\n     * @returns A new iterator over the children of the widget.\n     *\n     * #### Notes\n     * The widget must have a populated layout in order to have children.\n     *\n     * If a layout is not installed, the returned iterator will be empty.\n     */\n    *children() {\n        if (this._layout) {\n            yield* this._layout;\n        }\n    }\n    /**\n     * Test whether a widget is a descendant of this widget.\n     *\n     * @param widget - The descendant widget of interest.\n     *\n     * @returns `true` if the widget is a descendant, `false` otherwise.\n     */\n    contains(widget) {\n        for (let value = widget; value; value = value._parent) {\n            if (value === this) {\n                return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * Test whether the widget's DOM node has the given class name.\n     *\n     * @param name - The class name of interest.\n     *\n     * @returns `true` if the node has the class, `false` otherwise.\n     */\n    hasClass(name) {\n        return this.node.classList.contains(name);\n    }\n    /**\n     * Add a class name to the widget's DOM node.\n     *\n     * @param name - The class name to add to the node.\n     *\n     * #### Notes\n     * If the class name is already added to the node, this is a no-op.\n     *\n     * The class name must not contain whitespace.\n     */\n    addClass(name) {\n        this.node.classList.add(name);\n    }\n    /**\n     * Remove a class name from the widget's DOM node.\n     *\n     * @param name - The class name to remove from the node.\n     *\n     * #### Notes\n     * If the class name is not yet added to the node, this is a no-op.\n     *\n     * The class name must not contain whitespace.\n     */\n    removeClass(name) {\n        this.node.classList.remove(name);\n    }\n    /**\n     * Toggle a class name on the widget's DOM node.\n     *\n     * @param name - The class name to toggle on the node.\n     *\n     * @param force - Whether to force add the class (`true`) or force\n     *   remove the class (`false`). If not provided, the presence of\n     *   the class will be toggled from its current state.\n     *\n     * @returns `true` if the class is now present, `false` otherwise.\n     *\n     * #### Notes\n     * The class name must not contain whitespace.\n     */\n    toggleClass(name, force) {\n        if (force === true) {\n            this.node.classList.add(name);\n            return true;\n        }\n        if (force === false) {\n            this.node.classList.remove(name);\n            return false;\n        }\n        return this.node.classList.toggle(name);\n    }\n    /**\n     * Post an `'update-request'` message to the widget.\n     *\n     * #### Notes\n     * This is a simple convenience method for posting the message.\n     */\n    update() {\n        MessageLoop.postMessage(this, Widget.Msg.UpdateRequest);\n    }\n    /**\n     * Post a `'fit-request'` message to the widget.\n     *\n     * #### Notes\n     * This is a simple convenience method for posting the message.\n     */\n    fit() {\n        MessageLoop.postMessage(this, Widget.Msg.FitRequest);\n    }\n    /**\n     * Post an `'activate-request'` message to the widget.\n     *\n     * #### Notes\n     * This is a simple convenience method for posting the message.\n     */\n    activate() {\n        MessageLoop.postMessage(this, Widget.Msg.ActivateRequest);\n    }\n    /**\n     * Send a `'close-request'` message to the widget.\n     *\n     * #### Notes\n     * This is a simple convenience method for sending the message.\n     */\n    close() {\n        MessageLoop.sendMessage(this, Widget.Msg.CloseRequest);\n    }\n    /**\n     * Show the widget and make it visible to its parent widget.\n     *\n     * #### Notes\n     * This causes the {@link isHidden} property to be `false`.\n     *\n     * If the widget is not explicitly hidden, this is a no-op.\n     */\n    show() {\n        if (!this.testFlag(Widget.Flag.IsHidden)) {\n            return;\n        }\n        if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n            MessageLoop.sendMessage(this, Widget.Msg.BeforeShow);\n        }\n        this.clearFlag(Widget.Flag.IsHidden);\n        this._toggleHidden(false);\n        if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n            MessageLoop.sendMessage(this, Widget.Msg.AfterShow);\n        }\n        if (this.parent) {\n            let msg = new Widget.ChildMessage('child-shown', this);\n            MessageLoop.sendMessage(this.parent, msg);\n        }\n    }\n    /**\n     * Hide the widget and make it hidden to its parent widget.\n     *\n     * #### Notes\n     * This causes the {@link isHidden} property to be `true`.\n     *\n     * If the widget is explicitly hidden, this is a no-op.\n     */\n    hide() {\n        if (this.testFlag(Widget.Flag.IsHidden)) {\n            return;\n        }\n        if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n            MessageLoop.sendMessage(this, Widget.Msg.BeforeHide);\n        }\n        this.setFlag(Widget.Flag.IsHidden);\n        this._toggleHidden(true);\n        if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n            MessageLoop.sendMessage(this, Widget.Msg.AfterHide);\n        }\n        if (this.parent) {\n            let msg = new Widget.ChildMessage('child-hidden', this);\n            MessageLoop.sendMessage(this.parent, msg);\n        }\n    }\n    /**\n     * Show or hide the widget according to a boolean value.\n     *\n     * @param hidden - `true` to hide the widget, or `false` to show it.\n     *\n     * #### Notes\n     * This is a convenience method for `hide()` and `show()`.\n     */\n    setHidden(hidden) {\n        if (hidden) {\n            this.hide();\n        }\n        else {\n            this.show();\n        }\n    }\n    /**\n     * Test whether the given widget flag is set.\n     *\n     * #### Notes\n     * This will not typically be called directly by user code.\n     *\n     * Since 2.7.0, {@link Widget.Flag.IsVisible} is deprecated.\n     * It will be removed in a future version.\n     */\n    testFlag(flag) {\n        return (this._flags & flag) !== 0;\n    }\n    /**\n     * Set the given widget flag.\n     *\n     * #### Notes\n     * This will not typically be called directly by user code.\n     *\n     * Since 2.7.0, {@link Widget.Flag.IsVisible} is deprecated.\n     * It will be removed in a future version.\n     */\n    setFlag(flag) {\n        this._flags |= flag;\n    }\n    /**\n     * Clear the given widget flag.\n     *\n     * #### Notes\n     * This will not typically be called directly by user code.\n     *\n     * Since 2.7.0, {@link Widget.Flag.IsVisible} is deprecated.\n     * It will be removed in a future version.\n     */\n    clearFlag(flag) {\n        this._flags &= ~flag;\n    }\n    /**\n     * Process a message sent to the widget.\n     *\n     * @param msg - The message sent to the widget.\n     *\n     * #### Notes\n     * Subclasses may reimplement this method as needed.\n     */\n    processMessage(msg) {\n        switch (msg.type) {\n            case 'resize':\n                this.notifyLayout(msg);\n                this.onResize(msg);\n                break;\n            case 'update-request':\n                this.notifyLayout(msg);\n                this.onUpdateRequest(msg);\n                break;\n            case 'fit-request':\n                this.notifyLayout(msg);\n                this.onFitRequest(msg);\n                break;\n            case 'before-show':\n                this.notifyLayout(msg);\n                this.onBeforeShow(msg);\n                break;\n            case 'after-show':\n                this.setFlag(Widget.Flag.IsVisible);\n                this.notifyLayout(msg);\n                this.onAfterShow(msg);\n                break;\n            case 'before-hide':\n                this.notifyLayout(msg);\n                this.onBeforeHide(msg);\n                break;\n            case 'after-hide':\n                this.clearFlag(Widget.Flag.IsVisible);\n                this.notifyLayout(msg);\n                this.onAfterHide(msg);\n                break;\n            case 'before-attach':\n                this.notifyLayout(msg);\n                this.onBeforeAttach(msg);\n                break;\n            case 'after-attach':\n                if (!this.isHidden && (!this.parent || this.parent.isVisible)) {\n                    this.setFlag(Widget.Flag.IsVisible);\n                }\n                this.setFlag(Widget.Flag.IsAttached);\n                this.notifyLayout(msg);\n                this.onAfterAttach(msg);\n                break;\n            case 'before-detach':\n                this.notifyLayout(msg);\n                this.onBeforeDetach(msg);\n                break;\n            case 'after-detach':\n                this.clearFlag(Widget.Flag.IsVisible);\n                this.clearFlag(Widget.Flag.IsAttached);\n                this.notifyLayout(msg);\n                this.onAfterDetach(msg);\n                break;\n            case 'activate-request':\n                this.notifyLayout(msg);\n                this.onActivateRequest(msg);\n                break;\n            case 'close-request':\n                this.notifyLayout(msg);\n                this.onCloseRequest(msg);\n                break;\n            case 'child-added':\n                this.notifyLayout(msg);\n                this.onChildAdded(msg);\n                break;\n            case 'child-removed':\n                this.notifyLayout(msg);\n                this.onChildRemoved(msg);\n                break;\n            default:\n                this.notifyLayout(msg);\n                break;\n        }\n    }\n    /**\n     * Invoke the message processing routine of the widget's layout.\n     *\n     * @param msg - The message to dispatch to the layout.\n     *\n     * #### Notes\n     * This is a no-op if the widget does not have a layout.\n     *\n     * This will not typically be called directly by user code.\n     */\n    notifyLayout(msg) {\n        if (this._layout) {\n            this._layout.processParentMessage(msg);\n        }\n    }\n    /**\n     * A message handler invoked on a `'close-request'` message.\n     *\n     * #### Notes\n     * The default implementation unparents or detaches the widget.\n     */\n    onCloseRequest(msg) {\n        if (this.parent) {\n            this.parent = null;\n        }\n        else if (this.isAttached) {\n            Widget.detach(this);\n        }\n    }\n    /**\n     * A message handler invoked on a `'resize'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onResize(msg) { }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onUpdateRequest(msg) { }\n    /**\n     * A message handler invoked on a `'fit-request'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onFitRequest(msg) { }\n    /**\n     * A message handler invoked on an `'activate-request'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onActivateRequest(msg) { }\n    /**\n     * A message handler invoked on a `'before-show'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onBeforeShow(msg) { }\n    /**\n     * A message handler invoked on an `'after-show'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onAfterShow(msg) { }\n    /**\n     * A message handler invoked on a `'before-hide'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onBeforeHide(msg) { }\n    /**\n     * A message handler invoked on an `'after-hide'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onAfterHide(msg) { }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onBeforeAttach(msg) { }\n    /**\n     * A message handler invoked on an `'after-attach'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onAfterAttach(msg) { }\n    /**\n     * A message handler invoked on a `'before-detach'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onBeforeDetach(msg) { }\n    /**\n     * A message handler invoked on an `'after-detach'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onAfterDetach(msg) { }\n    /**\n     * A message handler invoked on a `'child-added'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onChildAdded(msg) { }\n    /**\n     * A message handler invoked on a `'child-removed'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onChildRemoved(msg) { }\n    _toggleHidden(hidden) {\n        if (hidden) {\n            switch (this._hiddenMode) {\n                case Widget.HiddenMode.Display:\n                    this.addClass('lm-mod-hidden');\n                    break;\n                case Widget.HiddenMode.Scale:\n                    this.node.style.transform = 'scale(0)';\n                    this.node.setAttribute('aria-hidden', 'true');\n                    break;\n                case Widget.HiddenMode.ContentVisibility:\n                    // @ts-expect-error content-visibility unknown by DOM lib types\n                    this.node.style.contentVisibility = 'hidden';\n                    this.node.style.zIndex = '-1';\n                    break;\n            }\n        }\n        else {\n            switch (this._hiddenMode) {\n                case Widget.HiddenMode.Display:\n                    this.removeClass('lm-mod-hidden');\n                    break;\n                case Widget.HiddenMode.Scale:\n                    this.node.style.transform = '';\n                    this.node.removeAttribute('aria-hidden');\n                    break;\n                case Widget.HiddenMode.ContentVisibility:\n                    // @ts-expect-error content-visibility unknown by DOM lib types\n                    this.node.style.contentVisibility = '';\n                    this.node.style.zIndex = '';\n                    break;\n            }\n        }\n    }\n}\n/**\n * The namespace for the `Widget` class statics.\n */\n(function (Widget) {\n    (function (HiddenMode) {\n        /**\n         * Set a `lm-mod-hidden` CSS class to hide the widget using `display:none`\n         * CSS from the standard Lumino CSS.\n         */\n        HiddenMode[HiddenMode[\"Display\"] = 0] = \"Display\";\n        /**\n         * Hide the widget by setting the `transform` to `'scale(0)'`.\n         */\n        HiddenMode[HiddenMode[\"Scale\"] = 1] = \"Scale\";\n        /**\n         *Hide the widget by setting the `content-visibility` to `'hidden'`.\n         */\n        HiddenMode[HiddenMode[\"ContentVisibility\"] = 2] = \"ContentVisibility\";\n    })(Widget.HiddenMode || (Widget.HiddenMode = {}));\n    (function (Flag) {\n        /**\n         * The widget has been disposed.\n         */\n        Flag[Flag[\"IsDisposed\"] = 1] = \"IsDisposed\";\n        /**\n         * The widget is attached to the DOM.\n         */\n        Flag[Flag[\"IsAttached\"] = 2] = \"IsAttached\";\n        /**\n         * The widget is hidden.\n         */\n        Flag[Flag[\"IsHidden\"] = 4] = \"IsHidden\";\n        /**\n         * The widget is visible.\n         *\n         * @deprecated since 2.7.0, apply that flag consistently was not reliable\n         * so it was dropped in favor of a recursive check of the visibility of all parents.\n         */\n        Flag[Flag[\"IsVisible\"] = 8] = \"IsVisible\";\n        /**\n         * A layout cannot be set on the widget.\n         */\n        Flag[Flag[\"DisallowLayout\"] = 16] = \"DisallowLayout\";\n    })(Widget.Flag || (Widget.Flag = {}));\n    (function (Msg) {\n        /**\n         * A singleton `'before-show'` message.\n         *\n         * #### Notes\n         * This message is sent to a widget before it becomes visible.\n         *\n         * This message is **not** sent when the widget is being attached.\n         */\n        Msg.BeforeShow = new Message('before-show');\n        /**\n         * A singleton `'after-show'` message.\n         *\n         * #### Notes\n         * This message is sent to a widget after it becomes visible.\n         *\n         * This message is **not** sent when the widget is being attached.\n         */\n        Msg.AfterShow = new Message('after-show');\n        /**\n         * A singleton `'before-hide'` message.\n         *\n         * #### Notes\n         * This message is sent to a widget before it becomes not-visible.\n         *\n         * This message is **not** sent when the widget is being detached.\n         */\n        Msg.BeforeHide = new Message('before-hide');\n        /**\n         * A singleton `'after-hide'` message.\n         *\n         * #### Notes\n         * This message is sent to a widget after it becomes not-visible.\n         *\n         * This message is **not** sent when the widget is being detached.\n         */\n        Msg.AfterHide = new Message('after-hide');\n        /**\n         * A singleton `'before-attach'` message.\n         *\n         * #### Notes\n         * This message is sent to a widget before it is attached.\n         */\n        Msg.BeforeAttach = new Message('before-attach');\n        /**\n         * A singleton `'after-attach'` message.\n         *\n         * #### Notes\n         * This message is sent to a widget after it is attached.\n         */\n        Msg.AfterAttach = new Message('after-attach');\n        /**\n         * A singleton `'before-detach'` message.\n         *\n         * #### Notes\n         * This message is sent to a widget before it is detached.\n         */\n        Msg.BeforeDetach = new Message('before-detach');\n        /**\n         * A singleton `'after-detach'` message.\n         *\n         * #### Notes\n         * This message is sent to a widget after it is detached.\n         */\n        Msg.AfterDetach = new Message('after-detach');\n        /**\n         * A singleton `'parent-changed'` message.\n         *\n         * #### Notes\n         * This message is sent to a widget when its parent has changed.\n         */\n        Msg.ParentChanged = new Message('parent-changed');\n        /**\n         * A singleton conflatable `'update-request'` message.\n         *\n         * #### Notes\n         * This message can be dispatched to supporting widgets in order to\n         * update their content based on the current widget state. Not all\n         * widgets will respond to messages of this type.\n         *\n         * For widgets with a layout, this message will inform the layout to\n         * update the position and size of its child widgets.\n         */\n        Msg.UpdateRequest = new ConflatableMessage('update-request');\n        /**\n         * A singleton conflatable `'fit-request'` message.\n         *\n         * #### Notes\n         * For widgets with a layout, this message will inform the layout to\n         * recalculate its size constraints to fit the space requirements of\n         * its child widgets, and to update their position and size. Not all\n         * layouts will respond to messages of this type.\n         */\n        Msg.FitRequest = new ConflatableMessage('fit-request');\n        /**\n         * A singleton conflatable `'activate-request'` message.\n         *\n         * #### Notes\n         * This message should be dispatched to a widget when it should\n         * perform the actions necessary to activate the widget, which\n         * may include focusing its node or descendant node.\n         */\n        Msg.ActivateRequest = new ConflatableMessage('activate-request');\n        /**\n         * A singleton conflatable `'close-request'` message.\n         *\n         * #### Notes\n         * This message should be dispatched to a widget when it should close\n         * and remove itself from the widget hierarchy.\n         */\n        Msg.CloseRequest = new ConflatableMessage('close-request');\n    })(Widget.Msg || (Widget.Msg = {}));\n    /**\n     * A message class for child related messages.\n     */\n    class ChildMessage extends Message {\n        /**\n         * Construct a new child message.\n         *\n         * @param type - The message type.\n         *\n         * @param child - The child widget for the message.\n         */\n        constructor(type, child) {\n            super(type);\n            this.child = child;\n        }\n    }\n    Widget.ChildMessage = ChildMessage;\n    /**\n     * A message class for `'resize'` messages.\n     */\n    class ResizeMessage extends Message {\n        /**\n         * Construct a new resize message.\n         *\n         * @param width - The **offset width** of the widget, or `-1` if\n         *   the width is not known.\n         *\n         * @param height - The **offset height** of the widget, or `-1` if\n         *   the height is not known.\n         */\n        constructor(width, height) {\n            super('resize');\n            this.width = width;\n            this.height = height;\n        }\n    }\n    Widget.ResizeMessage = ResizeMessage;\n    /**\n     * The namespace for the `ResizeMessage` class statics.\n     */\n    (function (ResizeMessage) {\n        /**\n         * A singleton `'resize'` message with an unknown size.\n         */\n        ResizeMessage.UnknownSize = new ResizeMessage(-1, -1);\n    })(ResizeMessage = Widget.ResizeMessage || (Widget.ResizeMessage = {}));\n    /**\n     * Attach a widget to a host DOM node.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @param host - The DOM node to use as the widget's host.\n     *\n     * @param ref - The child of `host` to use as the reference element.\n     *   If this is provided, the widget will be inserted before this\n     *   node in the host. The default is `null`, which will cause the\n     *   widget to be added as the last child of the host.\n     *\n     * #### Notes\n     * This will throw an error if the widget is not a root widget, if\n     * the widget is already attached, or if the host is not attached\n     * to the DOM.\n     */\n    function attach(widget, host, ref = null) {\n        if (widget.parent) {\n            throw new Error('Cannot attach a child widget.');\n        }\n        if (widget.isAttached || widget.node.isConnected) {\n            throw new Error('Widget is already attached.');\n        }\n        if (!host.isConnected) {\n            throw new Error('Host is not attached.');\n        }\n        MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n        host.insertBefore(widget.node, ref);\n        MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n    }\n    Widget.attach = attach;\n    /**\n     * Detach the widget from its host DOM node.\n     *\n     * @param widget - The widget of interest.\n     *\n     * #### Notes\n     * This will throw an error if the widget is not a root widget,\n     * or if the widget is not attached to the DOM.\n     */\n    function detach(widget) {\n        if (widget.parent) {\n            throw new Error('Cannot detach a child widget.');\n        }\n        if (!widget.isAttached || !widget.node.isConnected) {\n            throw new Error('Widget is not attached.');\n        }\n        MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n        widget.node.parentNode.removeChild(widget.node);\n        MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n    }\n    Widget.detach = detach;\n})(Widget || (Widget = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$j;\n(function (Private) {\n    /**\n     * An attached property for the widget title object.\n     */\n    Private.titleProperty = new AttachedProperty({\n        name: 'title',\n        create: owner => new Title({ owner })\n    });\n    /**\n     * Create a DOM node for the given widget options.\n     */\n    function createNode(options) {\n        return options.node || document.createElement(options.tag || 'div');\n    }\n    Private.createNode = createNode;\n})(Private$j || (Private$j = {}));\n\n/**\n * An abstract base class for creating lumino layouts.\n *\n * #### Notes\n * A layout is used to add widgets to a parent and to arrange those\n * widgets within the parent's DOM node.\n *\n * This class implements the base functionality which is required of\n * nearly all layouts. It must be subclassed in order to be useful.\n *\n * Notably, this class does not define a uniform interface for adding\n * widgets to the layout. A subclass should define that API in a way\n * which is meaningful for its intended use.\n */\nclass Layout {\n    /**\n     * Construct a new layout.\n     *\n     * @param options - The options for initializing the layout.\n     */\n    constructor(options = {}) {\n        this._disposed = false;\n        this._parent = null;\n        this._fitPolicy = options.fitPolicy || 'set-min-size';\n    }\n    /**\n     * Dispose of the resources held by the layout.\n     *\n     * #### Notes\n     * This should be reimplemented to clear and dispose of the widgets.\n     *\n     * All reimplementations should call the superclass method.\n     *\n     * This method is called automatically when the parent is disposed.\n     */\n    dispose() {\n        this._parent = null;\n        this._disposed = true;\n        Signal.clearData(this);\n        AttachedProperty.clearData(this);\n    }\n    /**\n     * Test whether the layout is disposed.\n     */\n    get isDisposed() {\n        return this._disposed;\n    }\n    /**\n     * Get the parent widget of the layout.\n     */\n    get parent() {\n        return this._parent;\n    }\n    /**\n     * Set the parent widget of the layout.\n     *\n     * #### Notes\n     * This is set automatically when installing the layout on the parent\n     * widget. The parent widget should not be set directly by user code.\n     */\n    set parent(value) {\n        if (this._parent === value) {\n            return;\n        }\n        if (this._parent) {\n            throw new Error('Cannot change parent widget.');\n        }\n        if (value.layout !== this) {\n            throw new Error('Invalid parent widget.');\n        }\n        this._parent = value;\n        this.init();\n    }\n    /**\n     * Get the fit policy for the layout.\n     *\n     * #### Notes\n     * The fit policy controls the computed size constraints which are\n     * applied to the parent widget by the layout.\n     *\n     * Some layout implementations may ignore the fit policy.\n     */\n    get fitPolicy() {\n        return this._fitPolicy;\n    }\n    /**\n     * Set the fit policy for the layout.\n     *\n     * #### Notes\n     * The fit policy controls the computed size constraints which are\n     * applied to the parent widget by the layout.\n     *\n     * Some layout implementations may ignore the fit policy.\n     *\n     * Changing the fit policy will clear the current size constraint\n     * for the parent widget and then re-fit the parent.\n     */\n    set fitPolicy(value) {\n        // Bail if the policy does not change\n        if (this._fitPolicy === value) {\n            return;\n        }\n        // Update the internal policy.\n        this._fitPolicy = value;\n        // Clear the size constraints and schedule a fit of the parent.\n        if (this._parent) {\n            let style = this._parent.node.style;\n            style.minWidth = '';\n            style.minHeight = '';\n            style.maxWidth = '';\n            style.maxHeight = '';\n            this._parent.fit();\n        }\n    }\n    /**\n     * Process a message sent to the parent widget.\n     *\n     * @param msg - The message sent to the parent widget.\n     *\n     * #### Notes\n     * This method is called by the parent widget to process a message.\n     *\n     * Subclasses may reimplement this method as needed.\n     */\n    processParentMessage(msg) {\n        switch (msg.type) {\n            case 'resize':\n                this.onResize(msg);\n                break;\n            case 'update-request':\n                this.onUpdateRequest(msg);\n                break;\n            case 'fit-request':\n                this.onFitRequest(msg);\n                break;\n            case 'before-show':\n                this.onBeforeShow(msg);\n                break;\n            case 'after-show':\n                this.onAfterShow(msg);\n                break;\n            case 'before-hide':\n                this.onBeforeHide(msg);\n                break;\n            case 'after-hide':\n                this.onAfterHide(msg);\n                break;\n            case 'before-attach':\n                this.onBeforeAttach(msg);\n                break;\n            case 'after-attach':\n                this.onAfterAttach(msg);\n                break;\n            case 'before-detach':\n                this.onBeforeDetach(msg);\n                break;\n            case 'after-detach':\n                this.onAfterDetach(msg);\n                break;\n            case 'child-removed':\n                this.onChildRemoved(msg);\n                break;\n            case 'child-shown':\n                this.onChildShown(msg);\n                break;\n            case 'child-hidden':\n                this.onChildHidden(msg);\n                break;\n        }\n    }\n    /**\n     * Perform layout initialization which requires the parent widget.\n     *\n     * #### Notes\n     * This method is invoked immediately after the layout is installed\n     * on the parent widget.\n     *\n     * The default implementation reparents all of the widgets to the\n     * layout parent widget.\n     *\n     * Subclasses should reimplement this method and attach the child\n     * widget nodes to the parent widget's node.\n     */\n    init() {\n        for (const widget of this) {\n            widget.parent = this.parent;\n        }\n    }\n    /**\n     * A message handler invoked on a `'resize'` message.\n     *\n     * #### Notes\n     * The layout should ensure that its widgets are resized according\n     * to the specified layout space, and that they are sent a `'resize'`\n     * message if appropriate.\n     *\n     * The default implementation of this method sends an `UnknownSize`\n     * resize message to all widgets.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onResize(msg) {\n        for (const widget of this) {\n            MessageLoop.sendMessage(widget, Widget.ResizeMessage.UnknownSize);\n        }\n    }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     *\n     * #### Notes\n     * The layout should ensure that its widgets are resized according\n     * to the available layout space, and that they are sent a `'resize'`\n     * message if appropriate.\n     *\n     * The default implementation of this method sends an `UnknownSize`\n     * resize message to all widgets.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onUpdateRequest(msg) {\n        for (const widget of this) {\n            MessageLoop.sendMessage(widget, Widget.ResizeMessage.UnknownSize);\n        }\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     *\n     * #### Notes\n     * The default implementation of this method forwards the message\n     * to all widgets. It assumes all widget nodes are attached to the\n     * parent widget node.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onBeforeAttach(msg) {\n        for (const widget of this) {\n            MessageLoop.sendMessage(widget, msg);\n        }\n    }\n    /**\n     * A message handler invoked on an `'after-attach'` message.\n     *\n     * #### Notes\n     * The default implementation of this method forwards the message\n     * to all widgets. It assumes all widget nodes are attached to the\n     * parent widget node.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onAfterAttach(msg) {\n        for (const widget of this) {\n            MessageLoop.sendMessage(widget, msg);\n        }\n    }\n    /**\n     * A message handler invoked on a `'before-detach'` message.\n     *\n     * #### Notes\n     * The default implementation of this method forwards the message\n     * to all widgets. It assumes all widget nodes are attached to the\n     * parent widget node.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onBeforeDetach(msg) {\n        for (const widget of this) {\n            MessageLoop.sendMessage(widget, msg);\n        }\n    }\n    /**\n     * A message handler invoked on an `'after-detach'` message.\n     *\n     * #### Notes\n     * The default implementation of this method forwards the message\n     * to all widgets. It assumes all widget nodes are attached to the\n     * parent widget node.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onAfterDetach(msg) {\n        for (const widget of this) {\n            MessageLoop.sendMessage(widget, msg);\n        }\n    }\n    /**\n     * A message handler invoked on a `'before-show'` message.\n     *\n     * #### Notes\n     * The default implementation of this method forwards the message to\n     * all non-hidden widgets. It assumes all widget nodes are attached\n     * to the parent widget node.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onBeforeShow(msg) {\n        for (const widget of this) {\n            if (!widget.isHidden) {\n                MessageLoop.sendMessage(widget, msg);\n            }\n        }\n    }\n    /**\n     * A message handler invoked on an `'after-show'` message.\n     *\n     * #### Notes\n     * The default implementation of this method forwards the message to\n     * all non-hidden widgets. It assumes all widget nodes are attached\n     * to the parent widget node.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onAfterShow(msg) {\n        for (const widget of this) {\n            if (!widget.isHidden) {\n                MessageLoop.sendMessage(widget, msg);\n            }\n        }\n    }\n    /**\n     * A message handler invoked on a `'before-hide'` message.\n     *\n     * #### Notes\n     * The default implementation of this method forwards the message to\n     * all non-hidden widgets. It assumes all widget nodes are attached\n     * to the parent widget node.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onBeforeHide(msg) {\n        for (const widget of this) {\n            if (!widget.isHidden) {\n                MessageLoop.sendMessage(widget, msg);\n            }\n        }\n    }\n    /**\n     * A message handler invoked on an `'after-hide'` message.\n     *\n     * #### Notes\n     * The default implementation of this method forwards the message to\n     * all non-hidden widgets. It assumes all widget nodes are attached\n     * to the parent widget node.\n     *\n     * This may be reimplemented by subclasses as needed.\n     */\n    onAfterHide(msg) {\n        for (const widget of this) {\n            if (!widget.isHidden) {\n                MessageLoop.sendMessage(widget, msg);\n            }\n        }\n    }\n    /**\n     * A message handler invoked on a `'child-removed'` message.\n     *\n     * #### Notes\n     * This will remove the child widget from the layout.\n     *\n     * Subclasses should **not** typically reimplement this method.\n     */\n    onChildRemoved(msg) {\n        this.removeWidget(msg.child);\n    }\n    /**\n     * A message handler invoked on a `'fit-request'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onFitRequest(msg) { }\n    /**\n     * A message handler invoked on a `'child-shown'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onChildShown(msg) { }\n    /**\n     * A message handler invoked on a `'child-hidden'` message.\n     *\n     * #### Notes\n     * The default implementation of this handler is a no-op.\n     */\n    onChildHidden(msg) { }\n}\n/**\n * The namespace for the `Layout` class statics.\n */\n(function (Layout) {\n    /**\n     * Get the horizontal alignment for a widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @returns The horizontal alignment for the widget.\n     *\n     * #### Notes\n     * If the layout width allocated to a widget is larger than its max\n     * width, the horizontal alignment controls how the widget is placed\n     * within the extra horizontal space.\n     *\n     * If the allocated width is less than the widget's max width, the\n     * horizontal alignment has no effect.\n     *\n     * Some layout implementations may ignore horizontal alignment.\n     */\n    function getHorizontalAlignment(widget) {\n        return Private$i.horizontalAlignmentProperty.get(widget);\n    }\n    Layout.getHorizontalAlignment = getHorizontalAlignment;\n    /**\n     * Set the horizontal alignment for a widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @param value - The value for the horizontal alignment.\n     *\n     * #### Notes\n     * If the layout width allocated to a widget is larger than its max\n     * width, the horizontal alignment controls how the widget is placed\n     * within the extra horizontal space.\n     *\n     * If the allocated width is less than the widget's max width, the\n     * horizontal alignment has no effect.\n     *\n     * Some layout implementations may ignore horizontal alignment.\n     *\n     * Changing the horizontal alignment will post an `update-request`\n     * message to widget's parent, provided the parent has a layout\n     * installed.\n     */\n    function setHorizontalAlignment(widget, value) {\n        Private$i.horizontalAlignmentProperty.set(widget, value);\n    }\n    Layout.setHorizontalAlignment = setHorizontalAlignment;\n    /**\n     * Get the vertical alignment for a widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @returns The vertical alignment for the widget.\n     *\n     * #### Notes\n     * If the layout height allocated to a widget is larger than its max\n     * height, the vertical alignment controls how the widget is placed\n     * within the extra vertical space.\n     *\n     * If the allocated height is less than the widget's max height, the\n     * vertical alignment has no effect.\n     *\n     * Some layout implementations may ignore vertical alignment.\n     */\n    function getVerticalAlignment(widget) {\n        return Private$i.verticalAlignmentProperty.get(widget);\n    }\n    Layout.getVerticalAlignment = getVerticalAlignment;\n    /**\n     * Set the vertical alignment for a widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @param value - The value for the vertical alignment.\n     *\n     * #### Notes\n     * If the layout height allocated to a widget is larger than its max\n     * height, the vertical alignment controls how the widget is placed\n     * within the extra vertical space.\n     *\n     * If the allocated height is less than the widget's max height, the\n     * vertical alignment has no effect.\n     *\n     * Some layout implementations may ignore vertical alignment.\n     *\n     * Changing the horizontal alignment will post an `update-request`\n     * message to widget's parent, provided the parent has a layout\n     * installed.\n     */\n    function setVerticalAlignment(widget, value) {\n        Private$i.verticalAlignmentProperty.set(widget, value);\n    }\n    Layout.setVerticalAlignment = setVerticalAlignment;\n})(Layout || (Layout = {}));\n/**\n * An object which assists in the absolute layout of widgets.\n *\n * #### Notes\n * This class is useful when implementing a layout which arranges its\n * widgets using absolute positioning.\n *\n * This class is used by nearly all of the built-in lumino layouts.\n */\nclass LayoutItem {\n    /**\n     * Construct a new layout item.\n     *\n     * @param widget - The widget to be managed by the item.\n     *\n     * #### Notes\n     * The widget will be set to absolute positioning.\n     * The widget will use strict CSS containment.\n     */\n    constructor(widget) {\n        this._top = NaN;\n        this._left = NaN;\n        this._width = NaN;\n        this._height = NaN;\n        this._minWidth = 0;\n        this._minHeight = 0;\n        this._maxWidth = Infinity;\n        this._maxHeight = Infinity;\n        this._disposed = false;\n        this.widget = widget;\n        this.widget.node.style.position = 'absolute';\n        this.widget.node.style.contain = 'strict';\n    }\n    /**\n     * Dispose of the the layout item.\n     *\n     * #### Notes\n     * This will reset the positioning of the widget.\n     */\n    dispose() {\n        // Do nothing if the item is already disposed.\n        if (this._disposed) {\n            return;\n        }\n        // Mark the item as disposed.\n        this._disposed = true;\n        // Reset the widget style.\n        let style = this.widget.node.style;\n        style.position = '';\n        style.top = '';\n        style.left = '';\n        style.width = '';\n        style.height = '';\n        style.contain = '';\n    }\n    /**\n     * The computed minimum width of the widget.\n     *\n     * #### Notes\n     * This value can be updated by calling the `fit` method.\n     */\n    get minWidth() {\n        return this._minWidth;\n    }\n    /**\n     * The computed minimum height of the widget.\n     *\n     * #### Notes\n     * This value can be updated by calling the `fit` method.\n     */\n    get minHeight() {\n        return this._minHeight;\n    }\n    /**\n     * The computed maximum width of the widget.\n     *\n     * #### Notes\n     * This value can be updated by calling the `fit` method.\n     */\n    get maxWidth() {\n        return this._maxWidth;\n    }\n    /**\n     * The computed maximum height of the widget.\n     *\n     * #### Notes\n     * This value can be updated by calling the `fit` method.\n     */\n    get maxHeight() {\n        return this._maxHeight;\n    }\n    /**\n     * Whether the layout item is disposed.\n     */\n    get isDisposed() {\n        return this._disposed;\n    }\n    /**\n     * Whether the managed widget is hidden.\n     */\n    get isHidden() {\n        return this.widget.isHidden;\n    }\n    /**\n     * Whether the managed widget is visible.\n     */\n    get isVisible() {\n        return this.widget.isVisible;\n    }\n    /**\n     * Whether the managed widget is attached.\n     */\n    get isAttached() {\n        return this.widget.isAttached;\n    }\n    /**\n     * Update the computed size limits of the managed widget.\n     */\n    fit() {\n        let limits = ElementExt.sizeLimits(this.widget.node);\n        this._minWidth = limits.minWidth;\n        this._minHeight = limits.minHeight;\n        this._maxWidth = limits.maxWidth;\n        this._maxHeight = limits.maxHeight;\n    }\n    /**\n     * Update the position and size of the managed widget.\n     *\n     * @param left - The left edge position of the layout box.\n     *\n     * @param top - The top edge position of the layout box.\n     *\n     * @param width - The width of the layout box.\n     *\n     * @param height - The height of the layout box.\n     */\n    update(left, top, width, height) {\n        // Clamp the size to the computed size limits.\n        let clampW = Math.max(this._minWidth, Math.min(width, this._maxWidth));\n        let clampH = Math.max(this._minHeight, Math.min(height, this._maxHeight));\n        // Adjust the left edge for the horizontal alignment, if needed.\n        if (clampW < width) {\n            switch (Layout.getHorizontalAlignment(this.widget)) {\n                case 'left':\n                    break;\n                case 'center':\n                    left += (width - clampW) / 2;\n                    break;\n                case 'right':\n                    left += width - clampW;\n                    break;\n                default:\n                    throw 'unreachable';\n            }\n        }\n        // Adjust the top edge for the vertical alignment, if needed.\n        if (clampH < height) {\n            switch (Layout.getVerticalAlignment(this.widget)) {\n                case 'top':\n                    break;\n                case 'center':\n                    top += (height - clampH) / 2;\n                    break;\n                case 'bottom':\n                    top += height - clampH;\n                    break;\n                default:\n                    throw 'unreachable';\n            }\n        }\n        // Set up the resize variables.\n        let resized = false;\n        let style = this.widget.node.style;\n        // Update the top edge of the widget if needed.\n        if (this._top !== top) {\n            this._top = top;\n            style.top = `${top}px`;\n        }\n        // Update the left edge of the widget if needed.\n        if (this._left !== left) {\n            this._left = left;\n            style.left = `${left}px`;\n        }\n        // Update the width of the widget if needed.\n        if (this._width !== clampW) {\n            resized = true;\n            this._width = clampW;\n            style.width = `${clampW}px`;\n        }\n        // Update the height of the widget if needed.\n        if (this._height !== clampH) {\n            resized = true;\n            this._height = clampH;\n            style.height = `${clampH}px`;\n        }\n        // Send a resize message to the widget if needed.\n        if (resized) {\n            let msg = new Widget.ResizeMessage(clampW, clampH);\n            MessageLoop.sendMessage(this.widget, msg);\n        }\n    }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$i;\n(function (Private) {\n    /**\n     * The attached property for a widget horizontal alignment.\n     */\n    Private.horizontalAlignmentProperty = new AttachedProperty({\n        name: 'horizontalAlignment',\n        create: () => 'center',\n        changed: onAlignmentChanged\n    });\n    /**\n     * The attached property for a widget vertical alignment.\n     */\n    Private.verticalAlignmentProperty = new AttachedProperty({\n        name: 'verticalAlignment',\n        create: () => 'top',\n        changed: onAlignmentChanged\n    });\n    /**\n     * The change handler for the attached alignment properties.\n     */\n    function onAlignmentChanged(child) {\n        if (child.parent && child.parent.layout) {\n            child.parent.update();\n        }\n    }\n})(Private$i || (Private$i = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A concrete layout implementation suitable for many use cases.\n *\n * #### Notes\n * This class is suitable as a base class for implementing a variety of\n * layouts, but can also be used directly with standard CSS to layout a\n * collection of widgets.\n */\nclass PanelLayout extends Layout {\n    constructor() {\n        super(...arguments);\n        this._widgets = [];\n    }\n    /**\n     * Dispose of the resources held by the layout.\n     *\n     * #### Notes\n     * This will clear and dispose all widgets in the layout.\n     *\n     * All reimplementations should call the superclass method.\n     *\n     * This method is called automatically when the parent is disposed.\n     */\n    dispose() {\n        while (this._widgets.length > 0) {\n            this._widgets.pop().dispose();\n        }\n        super.dispose();\n    }\n    /**\n     * A read-only array of the widgets in the layout.\n     */\n    get widgets() {\n        return this._widgets;\n    }\n    /**\n     * Create an iterator over the widgets in the layout.\n     *\n     * @returns A new iterator over the widgets in the layout.\n     */\n    *[Symbol.iterator]() {\n        yield* this._widgets;\n    }\n    /**\n     * Add a widget to the end of the layout.\n     *\n     * @param widget - The widget to add to the layout.\n     *\n     * #### Notes\n     * If the widget is already contained in the layout, it will be moved.\n     */\n    addWidget(widget) {\n        this.insertWidget(this._widgets.length, widget);\n    }\n    /**\n     * Insert a widget into the layout at the specified index.\n     *\n     * @param index - The index at which to insert the widget.\n     *\n     * @param widget - The widget to insert into the layout.\n     *\n     * #### Notes\n     * The index will be clamped to the bounds of the widgets.\n     *\n     * If the widget is already added to the layout, it will be moved.\n     *\n     * #### Undefined Behavior\n     * An `index` which is non-integral.\n     */\n    insertWidget(index, widget) {\n        // Remove the widget from its current parent. This is a no-op\n        // if the widget's parent is already the layout parent widget.\n        widget.parent = this.parent;\n        // Look up the current index of the widget.\n        let i = this._widgets.indexOf(widget);\n        // Clamp the insert index to the array bounds.\n        let j = Math.max(0, Math.min(index, this._widgets.length));\n        // If the widget is not in the array, insert it.\n        if (i === -1) {\n            // Insert the widget into the array.\n            ArrayExt.insert(this._widgets, j, widget);\n            // If the layout is parented, attach the widget to the DOM.\n            if (this.parent) {\n                this.attachWidget(j, widget);\n            }\n            // There is nothing more to do.\n            return;\n        }\n        // Otherwise, the widget exists in the array and should be moved.\n        // Adjust the index if the location is at the end of the array.\n        if (j === this._widgets.length) {\n            j--;\n        }\n        // Bail if there is no effective move.\n        if (i === j) {\n            return;\n        }\n        // Move the widget to the new location.\n        ArrayExt.move(this._widgets, i, j);\n        // If the layout is parented, move the widget in the DOM.\n        if (this.parent) {\n            this.moveWidget(i, j, widget);\n        }\n    }\n    /**\n     * Remove a widget from the layout.\n     *\n     * @param widget - The widget to remove from the layout.\n     *\n     * #### Notes\n     * A widget is automatically removed from the layout when its `parent`\n     * is set to `null`. This method should only be invoked directly when\n     * removing a widget from a layout which has yet to be installed on a\n     * parent widget.\n     *\n     * This method does *not* modify the widget's `parent`.\n     */\n    removeWidget(widget) {\n        this.removeWidgetAt(this._widgets.indexOf(widget));\n    }\n    /**\n     * Remove the widget at a given index from the layout.\n     *\n     * @param index - The index of the widget to remove.\n     *\n     * #### Notes\n     * A widget is automatically removed from the layout when its `parent`\n     * is set to `null`. This method should only be invoked directly when\n     * removing a widget from a layout which has yet to be installed on a\n     * parent widget.\n     *\n     * This method does *not* modify the widget's `parent`.\n     *\n     * #### Undefined Behavior\n     * An `index` which is non-integral.\n     */\n    removeWidgetAt(index) {\n        // Remove the widget from the array.\n        let widget = ArrayExt.removeAt(this._widgets, index);\n        // If the layout is parented, detach the widget from the DOM.\n        if (widget && this.parent) {\n            this.detachWidget(index, widget);\n        }\n    }\n    /**\n     * Perform layout initialization which requires the parent widget.\n     */\n    init() {\n        super.init();\n        let index = 0;\n        for (const widget of this) {\n            this.attachWidget(index++, widget);\n        }\n    }\n    /**\n     * Attach a widget to the parent's DOM node.\n     *\n     * @param index - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to attach to the parent.\n     *\n     * #### Notes\n     * This method is called automatically by the panel layout at the\n     * appropriate time. It should not be called directly by user code.\n     *\n     * The default implementation adds the widgets's node to the parent's\n     * node at the proper location, and sends the appropriate attach\n     * messages to the widget if the parent is attached to the DOM.\n     *\n     * Subclasses may reimplement this method to control how the widget's\n     * node is added to the parent's node.\n     */\n    attachWidget(index, widget) {\n        // Look up the next sibling reference node.\n        let ref = this.parent.node.children[index];\n        // Send a `'before-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n        }\n        // Insert the widget's node before the sibling.\n        this.parent.node.insertBefore(widget.node, ref);\n        // Send an `'after-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n        }\n    }\n    /**\n     * Move a widget in the parent's DOM node.\n     *\n     * @param fromIndex - The previous index of the widget in the layout.\n     *\n     * @param toIndex - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to move in the parent.\n     *\n     * #### Notes\n     * This method is called automatically by the panel layout at the\n     * appropriate time. It should not be called directly by user code.\n     *\n     * The default implementation moves the widget's node to the proper\n     * location in the parent's node and sends the appropriate attach and\n     * detach messages to the widget if the parent is attached to the DOM.\n     *\n     * Subclasses may reimplement this method to control how the widget's\n     * node is moved in the parent's node.\n     */\n    moveWidget(fromIndex, toIndex, widget) {\n        // Send a `'before-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n        }\n        // Remove the widget's node from the parent.\n        this.parent.node.removeChild(widget.node);\n        // Send an `'after-detach'` and  message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n        }\n        // Look up the next sibling reference node.\n        let ref = this.parent.node.children[toIndex];\n        // Send a `'before-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n        }\n        // Insert the widget's node before the sibling.\n        this.parent.node.insertBefore(widget.node, ref);\n        // Send an `'after-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n        }\n    }\n    /**\n     * Detach a widget from the parent's DOM node.\n     *\n     * @param index - The previous index of the widget in the layout.\n     *\n     * @param widget - The widget to detach from the parent.\n     *\n     * #### Notes\n     * This method is called automatically by the panel layout at the\n     * appropriate time. It should not be called directly by user code.\n     *\n     * The default implementation removes the widget's node from the\n     * parent's node, and sends the appropriate detach messages to the\n     * widget if the parent is attached to the DOM.\n     *\n     * Subclasses may reimplement this method to control how the widget's\n     * node is removed from the parent's node.\n     */\n    detachWidget(index, widget) {\n        // Send a `'before-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n        }\n        // Remove the widget's node from the parent.\n        this.parent.node.removeChild(widget.node);\n        // Send an `'after-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n        }\n    }\n}\n\n/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nvar Utils;\n(function (Utils) {\n    /**\n     * Clamp a dimension value to an integer >= 0.\n     */\n    function clampDimension(value) {\n        return Math.max(0, Math.floor(value));\n    }\n    Utils.clampDimension = clampDimension;\n})(Utils || (Utils = {}));\nvar Utils$1 = Utils;\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which arranges its widgets into resizable sections.\n */\nclass SplitLayout extends PanelLayout {\n    /**\n     * Construct a new split layout.\n     *\n     * @param options - The options for initializing the layout.\n     */\n    constructor(options) {\n        super();\n        this.widgetOffset = 0;\n        this._fixed = 0;\n        this._spacing = 4;\n        this._dirty = false;\n        this._hasNormedSizes = false;\n        this._sizers = [];\n        this._items = [];\n        this._handles = [];\n        this._box = null;\n        this._alignment = 'start';\n        this._orientation = 'horizontal';\n        this.renderer = options.renderer;\n        if (options.orientation !== undefined) {\n            this._orientation = options.orientation;\n        }\n        if (options.alignment !== undefined) {\n            this._alignment = options.alignment;\n        }\n        if (options.spacing !== undefined) {\n            this._spacing = Utils.clampDimension(options.spacing);\n        }\n    }\n    /**\n     * Dispose of the resources held by the layout.\n     */\n    dispose() {\n        // Dispose of the layout items.\n        for (const item of this._items) {\n            item.dispose();\n        }\n        // Clear the layout state.\n        this._box = null;\n        this._items.length = 0;\n        this._sizers.length = 0;\n        this._handles.length = 0;\n        // Dispose of the rest of the layout.\n        super.dispose();\n    }\n    /**\n     * Get the layout orientation for the split layout.\n     */\n    get orientation() {\n        return this._orientation;\n    }\n    /**\n     * Set the layout orientation for the split layout.\n     */\n    set orientation(value) {\n        if (this._orientation === value) {\n            return;\n        }\n        this._orientation = value;\n        if (!this.parent) {\n            return;\n        }\n        this.parent.dataset['orientation'] = value;\n        this.parent.fit();\n    }\n    /**\n     * Get the content alignment for the split layout.\n     *\n     * #### Notes\n     * This is the alignment of the widgets in the layout direction.\n     *\n     * The alignment has no effect if the widgets can expand  to fill the\n     * entire split layout.\n     */\n    get alignment() {\n        return this._alignment;\n    }\n    /**\n     * Set the content alignment for the split layout.\n     *\n     * #### Notes\n     * This is the alignment of the widgets in the layout direction.\n     *\n     * The alignment has no effect if the widgets can expand  to fill the\n     * entire split layout.\n     */\n    set alignment(value) {\n        if (this._alignment === value) {\n            return;\n        }\n        this._alignment = value;\n        if (!this.parent) {\n            return;\n        }\n        this.parent.dataset['alignment'] = value;\n        this.parent.update();\n    }\n    /**\n     * Get the inter-element spacing for the split layout.\n     */\n    get spacing() {\n        return this._spacing;\n    }\n    /**\n     * Set the inter-element spacing for the split layout.\n     */\n    set spacing(value) {\n        value = Utils.clampDimension(value);\n        if (this._spacing === value) {\n            return;\n        }\n        this._spacing = value;\n        if (!this.parent) {\n            return;\n        }\n        this.parent.fit();\n    }\n    /**\n     * A read-only array of the split handles in the layout.\n     */\n    get handles() {\n        return this._handles;\n    }\n    /**\n     * Get the absolute sizes of the widgets in the layout.\n     *\n     * @returns A new array of the absolute sizes of the widgets.\n     *\n     * This method **does not** measure the DOM nodes.\n     */\n    absoluteSizes() {\n        return this._sizers.map(sizer => sizer.size);\n    }\n    /**\n     * Get the relative sizes of the widgets in the layout.\n     *\n     * @returns A new array of the relative sizes of the widgets.\n     *\n     * #### Notes\n     * The returned sizes reflect the sizes of the widgets normalized\n     * relative to their siblings.\n     *\n     * This method **does not** measure the DOM nodes.\n     */\n    relativeSizes() {\n        return Private$h.normalize(this._sizers.map(sizer => sizer.size));\n    }\n    /**\n     * Set the relative sizes for the widgets in the layout.\n     *\n     * @param sizes - The relative sizes for the widgets in the panel.\n     * @param update - Update the layout after setting relative sizes.\n     * Default is True.\n     *\n     * #### Notes\n     * Extra values are ignored, too few will yield an undefined layout.\n     *\n     * The actual geometry of the DOM nodes is updated asynchronously.\n     */\n    setRelativeSizes(sizes, update = true) {\n        // Copy the sizes and pad with zeros as needed.\n        let n = this._sizers.length;\n        let temp = sizes.slice(0, n);\n        while (temp.length < n) {\n            temp.push(0);\n        }\n        // Normalize the padded sizes.\n        let normed = Private$h.normalize(temp);\n        // Apply the normalized sizes to the sizers.\n        for (let i = 0; i < n; ++i) {\n            let sizer = this._sizers[i];\n            sizer.sizeHint = normed[i];\n            sizer.size = normed[i];\n        }\n        // Set the flag indicating the sizes are normalized.\n        this._hasNormedSizes = true;\n        // Trigger an update of the parent widget.\n        if (update && this.parent) {\n            this.parent.update();\n        }\n    }\n    /**\n     * Move the offset position of a split handle.\n     *\n     * @param index - The index of the handle of the interest.\n     *\n     * @param position - The desired offset position of the handle.\n     *\n     * #### Notes\n     * The position is relative to the offset parent.\n     *\n     * This will move the handle as close as possible to the desired\n     * position. The sibling widgets will be adjusted as necessary.\n     */\n    moveHandle(index, position) {\n        // Bail if the index is invalid or the handle is hidden.\n        let handle = this._handles[index];\n        if (!handle || handle.classList.contains('lm-mod-hidden')) {\n            return;\n        }\n        // Compute the desired delta movement for the handle.\n        let delta;\n        if (this._orientation === 'horizontal') {\n            delta = position - handle.offsetLeft;\n        }\n        else {\n            delta = position - handle.offsetTop;\n        }\n        // Bail if there is no handle movement.\n        if (delta === 0) {\n            return;\n        }\n        // Prevent widget resizing unless needed.\n        for (let sizer of this._sizers) {\n            if (sizer.size > 0) {\n                sizer.sizeHint = sizer.size;\n            }\n        }\n        // Adjust the sizers to reflect the handle movement.\n        BoxEngine.adjust(this._sizers, index, delta);\n        // Update the layout of the widgets.\n        if (this.parent) {\n            this.parent.update();\n        }\n    }\n    /**\n     * Perform layout initialization which requires the parent widget.\n     */\n    init() {\n        this.parent.dataset['orientation'] = this.orientation;\n        this.parent.dataset['alignment'] = this.alignment;\n        super.init();\n    }\n    /**\n     * Attach a widget to the parent's DOM node.\n     *\n     * @param index - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to attach to the parent.\n     *\n     * #### Notes\n     * This is a reimplementation of the superclass method.\n     */\n    attachWidget(index, widget) {\n        // Create the item, handle, and sizer for the new widget.\n        let item = new LayoutItem(widget);\n        let handle = Private$h.createHandle(this.renderer);\n        let average = Private$h.averageSize(this._sizers);\n        let sizer = Private$h.createSizer(average);\n        // Insert the item, handle, and sizer into the internal arrays.\n        ArrayExt.insert(this._items, index, item);\n        ArrayExt.insert(this._sizers, index, sizer);\n        ArrayExt.insert(this._handles, index, handle);\n        // Send a `'before-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n        }\n        // Add the widget and handle nodes to the parent.\n        this.parent.node.appendChild(widget.node);\n        this.parent.node.appendChild(handle);\n        // Send an `'after-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n        }\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n    /**\n     * Move a widget in the parent's DOM node.\n     *\n     * @param fromIndex - The previous index of the widget in the layout.\n     *\n     * @param toIndex - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to move in the parent.\n     *\n     * #### Notes\n     * This is a reimplementation of the superclass method.\n     */\n    moveWidget(fromIndex, toIndex, widget) {\n        // Move the item, sizer, and handle for the widget.\n        ArrayExt.move(this._items, fromIndex, toIndex);\n        ArrayExt.move(this._sizers, fromIndex, toIndex);\n        ArrayExt.move(this._handles, fromIndex, toIndex);\n        // Post a fit request to the parent to show/hide last handle.\n        this.parent.fit();\n    }\n    /**\n     * Detach a widget from the parent's DOM node.\n     *\n     * @param index - The previous index of the widget in the layout.\n     *\n     * @param widget - The widget to detach from the parent.\n     *\n     * #### Notes\n     * This is a reimplementation of the superclass method.\n     */\n    detachWidget(index, widget) {\n        // Remove the item, handle, and sizer for the widget.\n        let item = ArrayExt.removeAt(this._items, index);\n        let handle = ArrayExt.removeAt(this._handles, index);\n        ArrayExt.removeAt(this._sizers, index);\n        // Send a `'before-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n        }\n        // Remove the widget and handle nodes from the parent.\n        this.parent.node.removeChild(widget.node);\n        this.parent.node.removeChild(handle);\n        // Send an `'after-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n        }\n        // Dispose of the layout item.\n        item.dispose();\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'before-show'` message.\n     */\n    onBeforeShow(msg) {\n        super.onBeforeShow(msg);\n        this.parent.update();\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     */\n    onBeforeAttach(msg) {\n        super.onBeforeAttach(msg);\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'child-shown'` message.\n     */\n    onChildShown(msg) {\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'child-hidden'` message.\n     */\n    onChildHidden(msg) {\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'resize'` message.\n     */\n    onResize(msg) {\n        if (this.parent.isVisible) {\n            this._update(msg.width, msg.height);\n        }\n    }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     */\n    onUpdateRequest(msg) {\n        if (this.parent.isVisible) {\n            this._update(-1, -1);\n        }\n    }\n    /**\n     * A message handler invoked on a `'fit-request'` message.\n     */\n    onFitRequest(msg) {\n        if (this.parent.isAttached) {\n            this._fit();\n        }\n    }\n    /**\n     * Update the item position.\n     *\n     * @param i Item index\n     * @param isHorizontal Whether the layout is horizontal or not\n     * @param left Left position in pixels\n     * @param top Top position in pixels\n     * @param height Item height\n     * @param width Item width\n     * @param size Item size\n     */\n    updateItemPosition(i, isHorizontal, left, top, height, width, size) {\n        const item = this._items[i];\n        if (item.isHidden) {\n            return;\n        }\n        // Fetch the style for the handle.\n        let handleStyle = this._handles[i].style;\n        // Update the widget and handle, and advance the relevant edge.\n        if (isHorizontal) {\n            left += this.widgetOffset;\n            item.update(left, top, size, height);\n            left += size;\n            handleStyle.top = `${top}px`;\n            handleStyle.left = `${left}px`;\n            handleStyle.width = `${this._spacing}px`;\n            handleStyle.height = `${height}px`;\n        }\n        else {\n            top += this.widgetOffset;\n            item.update(left, top, width, size);\n            top += size;\n            handleStyle.top = `${top}px`;\n            handleStyle.left = `${left}px`;\n            handleStyle.width = `${width}px`;\n            handleStyle.height = `${this._spacing}px`;\n        }\n    }\n    /**\n     * Fit the layout to the total size required by the widgets.\n     */\n    _fit() {\n        // Update the handles and track the visible widget count.\n        let nVisible = 0;\n        let lastHandleIndex = -1;\n        for (let i = 0, n = this._items.length; i < n; ++i) {\n            if (this._items[i].isHidden) {\n                this._handles[i].classList.add('lm-mod-hidden');\n            }\n            else {\n                this._handles[i].classList.remove('lm-mod-hidden');\n                lastHandleIndex = i;\n                nVisible++;\n            }\n        }\n        // Hide the handle for the last visible widget.\n        if (lastHandleIndex !== -1) {\n            this._handles[lastHandleIndex].classList.add('lm-mod-hidden');\n        }\n        // Update the fixed space for the visible items.\n        this._fixed =\n            this._spacing * Math.max(0, nVisible - 1) +\n                this.widgetOffset * this._items.length;\n        // Setup the computed minimum size.\n        let horz = this._orientation === 'horizontal';\n        let minW = horz ? this._fixed : 0;\n        let minH = horz ? 0 : this._fixed;\n        // Update the sizers and computed size limits.\n        for (let i = 0, n = this._items.length; i < n; ++i) {\n            // Fetch the item and corresponding box sizer.\n            let item = this._items[i];\n            let sizer = this._sizers[i];\n            // Prevent resizing unless necessary.\n            if (sizer.size > 0) {\n                sizer.sizeHint = sizer.size;\n            }\n            // If the item is hidden, it should consume zero size.\n            if (item.isHidden) {\n                sizer.minSize = 0;\n                sizer.maxSize = 0;\n                continue;\n            }\n            // Update the size limits for the item.\n            item.fit();\n            // Update the stretch factor.\n            sizer.stretch = SplitLayout.getStretch(item.widget);\n            // Update the sizer limits and computed min size.\n            if (horz) {\n                sizer.minSize = item.minWidth;\n                sizer.maxSize = item.maxWidth;\n                minW += item.minWidth;\n                minH = Math.max(minH, item.minHeight);\n            }\n            else {\n                sizer.minSize = item.minHeight;\n                sizer.maxSize = item.maxHeight;\n                minH += item.minHeight;\n                minW = Math.max(minW, item.minWidth);\n            }\n        }\n        // Update the box sizing and add it to the computed min size.\n        let box = (this._box = ElementExt.boxSizing(this.parent.node));\n        minW += box.horizontalSum;\n        minH += box.verticalSum;\n        // Update the parent's min size constraints.\n        let style = this.parent.node.style;\n        style.minWidth = `${minW}px`;\n        style.minHeight = `${minH}px`;\n        // Set the dirty flag to ensure only a single update occurs.\n        this._dirty = true;\n        // Notify the ancestor that it should fit immediately. This may\n        // cause a resize of the parent, fulfilling the required update.\n        if (this.parent.parent) {\n            MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n        }\n        // If the dirty flag is still set, the parent was not resized.\n        // Trigger the required update on the parent widget immediately.\n        if (this._dirty) {\n            MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n        }\n    }\n    /**\n     * Update the layout position and size of the widgets.\n     *\n     * The parent offset dimensions should be `-1` if unknown.\n     */\n    _update(offsetWidth, offsetHeight) {\n        // Clear the dirty flag to indicate the update occurred.\n        this._dirty = false;\n        // Compute the visible item count.\n        let nVisible = 0;\n        for (let i = 0, n = this._items.length; i < n; ++i) {\n            nVisible += +!this._items[i].isHidden;\n        }\n        // Bail early if there are no visible items to layout.\n        if (nVisible === 0 && this.widgetOffset === 0) {\n            return;\n        }\n        // Measure the parent if the offset dimensions are unknown.\n        if (offsetWidth < 0) {\n            offsetWidth = this.parent.node.offsetWidth;\n        }\n        if (offsetHeight < 0) {\n            offsetHeight = this.parent.node.offsetHeight;\n        }\n        // Ensure the parent box sizing data is computed.\n        if (!this._box) {\n            this._box = ElementExt.boxSizing(this.parent.node);\n        }\n        // Compute the actual layout bounds adjusted for border and padding.\n        let top = this._box.paddingTop;\n        let left = this._box.paddingLeft;\n        let width = offsetWidth - this._box.horizontalSum;\n        let height = offsetHeight - this._box.verticalSum;\n        // Set up the variables for justification and alignment offset.\n        let extra = 0;\n        let offset = 0;\n        let horz = this._orientation === 'horizontal';\n        if (nVisible > 0) {\n            // Compute the adjusted layout space.\n            let space;\n            if (horz) {\n                // left += this.widgetOffset;\n                space = Math.max(0, width - this._fixed);\n            }\n            else {\n                // top += this.widgetOffset;\n                space = Math.max(0, height - this._fixed);\n            }\n            // Scale the size hints if they are normalized.\n            if (this._hasNormedSizes) {\n                for (let sizer of this._sizers) {\n                    sizer.sizeHint *= space;\n                }\n                this._hasNormedSizes = false;\n            }\n            // Distribute the layout space to the box sizers.\n            let delta = BoxEngine.calc(this._sizers, space);\n            // Account for alignment if there is extra layout space.\n            if (delta > 0) {\n                switch (this._alignment) {\n                    case 'start':\n                        break;\n                    case 'center':\n                        extra = 0;\n                        offset = delta / 2;\n                        break;\n                    case 'end':\n                        extra = 0;\n                        offset = delta;\n                        break;\n                    case 'justify':\n                        extra = delta / nVisible;\n                        offset = 0;\n                        break;\n                    default:\n                        throw 'unreachable';\n                }\n            }\n        }\n        // Layout the items using the computed box sizes.\n        for (let i = 0, n = this._items.length; i < n; ++i) {\n            // Fetch the item.\n            const item = this._items[i];\n            // Fetch the computed size for the widget.\n            const size = item.isHidden ? 0 : this._sizers[i].size + extra;\n            this.updateItemPosition(i, horz, horz ? left + offset : left, horz ? top : top + offset, height, width, size);\n            const fullOffset = this.widgetOffset +\n                (this._handles[i].classList.contains('lm-mod-hidden')\n                    ? 0\n                    : this._spacing);\n            if (horz) {\n                left += size + fullOffset;\n            }\n            else {\n                top += size + fullOffset;\n            }\n        }\n    }\n}\n/**\n * The namespace for the `SplitLayout` class statics.\n */\n(function (SplitLayout) {\n    /**\n     * Get the split layout stretch factor for the given widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @returns The split layout stretch factor for the widget.\n     */\n    function getStretch(widget) {\n        return Private$h.stretchProperty.get(widget);\n    }\n    SplitLayout.getStretch = getStretch;\n    /**\n     * Set the split layout stretch factor for the given widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @param value - The value for the stretch factor.\n     */\n    function setStretch(widget, value) {\n        Private$h.stretchProperty.set(widget, value);\n    }\n    SplitLayout.setStretch = setStretch;\n})(SplitLayout || (SplitLayout = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$h;\n(function (Private) {\n    /**\n     * The property descriptor for a widget stretch factor.\n     */\n    Private.stretchProperty = new AttachedProperty({\n        name: 'stretch',\n        create: () => 0,\n        coerce: (owner, value) => Math.max(0, Math.floor(value)),\n        changed: onChildSizingChanged\n    });\n    /**\n     * Create a new box sizer with the given size hint.\n     */\n    function createSizer(size) {\n        let sizer = new BoxSizer();\n        sizer.sizeHint = Math.floor(size);\n        return sizer;\n    }\n    Private.createSizer = createSizer;\n    /**\n     * Create a new split handle node using the given renderer.\n     */\n    function createHandle(renderer) {\n        let handle = renderer.createHandle();\n        handle.style.position = 'absolute';\n        // Do not use size containment to allow the handle to fill the available space\n        handle.style.contain = 'style';\n        return handle;\n    }\n    Private.createHandle = createHandle;\n    /**\n     * Compute the average size of an array of box sizers.\n     */\n    function averageSize(sizers) {\n        return sizers.reduce((v, s) => v + s.size, 0) / sizers.length || 0;\n    }\n    Private.averageSize = averageSize;\n    /**\n     * Normalize an array of values.\n     */\n    function normalize(values) {\n        let n = values.length;\n        if (n === 0) {\n            return [];\n        }\n        let sum = values.reduce((a, b) => a + Math.abs(b), 0);\n        return sum === 0 ? values.map(v => 1 / n) : values.map(v => v / sum);\n    }\n    Private.normalize = normalize;\n    /**\n     * The change handler for the attached sizing properties.\n     */\n    function onChildSizingChanged(child) {\n        if (child.parent && child.parent.layout instanceof SplitLayout) {\n            child.parent.fit();\n        }\n    }\n})(Private$h || (Private$h = {}));\n\n/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n/**\n * A layout which arranges its widgets into collapsible resizable sections.\n */\nclass AccordionLayout extends SplitLayout {\n    /**\n     * Construct a new accordion layout.\n     *\n     * @param options - The options for initializing the layout.\n     *\n     * #### Notes\n     * The default orientation will be vertical.\n     *\n     * Titles must be rotated for horizontal accordion panel using CSS: see accordionpanel.css\n     */\n    constructor(options) {\n        super({ ...options, orientation: options.orientation || 'vertical' });\n        this._titles = [];\n        this.titleSpace = options.titleSpace || 22;\n    }\n    /**\n     * The section title height or width depending on the orientation.\n     */\n    get titleSpace() {\n        return this.widgetOffset;\n    }\n    set titleSpace(value) {\n        value = Utils$1.clampDimension(value);\n        if (this.widgetOffset === value) {\n            return;\n        }\n        this.widgetOffset = value;\n        if (!this.parent) {\n            return;\n        }\n        this.parent.fit();\n    }\n    /**\n     * A read-only array of the section titles in the panel.\n     */\n    get titles() {\n        return this._titles;\n    }\n    /**\n     * Dispose of the resources held by the layout.\n     */\n    dispose() {\n        if (this.isDisposed) {\n            return;\n        }\n        // Clear the layout state.\n        this._titles.length = 0;\n        // Dispose of the rest of the layout.\n        super.dispose();\n    }\n    updateTitle(index, widget) {\n        const oldTitle = this._titles[index];\n        const expanded = oldTitle.classList.contains('lm-mod-expanded');\n        const newTitle = Private$g.createTitle(this.renderer, widget.title, expanded);\n        this._titles[index] = newTitle;\n        // Add the title node to the parent before the widget.\n        this.parent.node.replaceChild(newTitle, oldTitle);\n    }\n    /**\n     * Insert a widget into the layout at the specified index.\n     *\n     * @param index - The index at which to insert the widget.\n     *\n     * @param widget - The widget to insert into the layout.\n     *\n     * #### Notes\n     * The index will be clamped to the bounds of the widgets.\n     *\n     * If the widget is already added to the layout, it will be moved.\n     *\n     * #### Undefined Behavior\n     * An `index` which is non-integral.\n     */\n    insertWidget(index, widget) {\n        if (!widget.id) {\n            widget.id = `id-${UUID.uuid4()}`;\n        }\n        super.insertWidget(index, widget);\n    }\n    /**\n     * Attach a widget to the parent's DOM node.\n     *\n     * @param index - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to attach to the parent.\n     */\n    attachWidget(index, widget) {\n        const title = Private$g.createTitle(this.renderer, widget.title);\n        ArrayExt.insert(this._titles, index, title);\n        // Add the title node to the parent before the widget.\n        this.parent.node.appendChild(title);\n        widget.node.setAttribute('role', 'region');\n        widget.node.setAttribute('aria-labelledby', title.id);\n        super.attachWidget(index, widget);\n    }\n    /**\n     * Move a widget in the parent's DOM node.\n     *\n     * @param fromIndex - The previous index of the widget in the layout.\n     *\n     * @param toIndex - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to move in the parent.\n     */\n    moveWidget(fromIndex, toIndex, widget) {\n        ArrayExt.move(this._titles, fromIndex, toIndex);\n        super.moveWidget(fromIndex, toIndex, widget);\n    }\n    /**\n     * Detach a widget from the parent's DOM node.\n     *\n     * @param index - The previous index of the widget in the layout.\n     *\n     * @param widget - The widget to detach from the parent.\n     *\n     * #### Notes\n     * This is a reimplementation of the superclass method.\n     */\n    detachWidget(index, widget) {\n        const title = ArrayExt.removeAt(this._titles, index);\n        this.parent.node.removeChild(title);\n        super.detachWidget(index, widget);\n    }\n    /**\n     * Update the item position.\n     *\n     * @param i Item index\n     * @param isHorizontal Whether the layout is horizontal or not\n     * @param left Left position in pixels\n     * @param top Top position in pixels\n     * @param height Item height\n     * @param width Item width\n     * @param size Item size\n     */\n    updateItemPosition(i, isHorizontal, left, top, height, width, size) {\n        const titleStyle = this._titles[i].style;\n        // Titles must be rotated for horizontal accordion panel using CSS: see accordionpanel.css\n        titleStyle.top = `${top}px`;\n        titleStyle.left = `${left}px`;\n        titleStyle.height = `${this.widgetOffset}px`;\n        if (isHorizontal) {\n            titleStyle.width = `${height}px`;\n        }\n        else {\n            titleStyle.width = `${width}px`;\n        }\n        super.updateItemPosition(i, isHorizontal, left, top, height, width, size);\n    }\n}\nvar Private$g;\n(function (Private) {\n    /**\n     * Create the title HTML element.\n     *\n     * @param renderer Accordion renderer\n     * @param data Widget title\n     * @returns Title HTML element\n     */\n    function createTitle(renderer, data, expanded = true) {\n        const title = renderer.createSectionTitle(data);\n        title.style.position = 'absolute';\n        title.style.contain = 'strict';\n        title.setAttribute('aria-label', `${data.label} Section`);\n        title.setAttribute('aria-expanded', expanded ? 'true' : 'false');\n        title.setAttribute('aria-controls', data.owner.id);\n        if (expanded) {\n            title.classList.add('lm-mod-expanded');\n        }\n        return title;\n    }\n    Private.createTitle = createTitle;\n})(Private$g || (Private$g = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A simple and convenient panel widget class.\n *\n * #### Notes\n * This class is suitable as a base class for implementing a variety of\n * convenience panel widgets, but can also be used directly with CSS to\n * arrange a collection of widgets.\n *\n * This class provides a convenience wrapper around a {@link PanelLayout}.\n */\nclass Panel extends Widget {\n    /**\n     * Construct a new panel.\n     *\n     * @param options - The options for initializing the panel.\n     */\n    constructor(options = {}) {\n        super();\n        this.addClass('lm-Panel');\n        this.layout = Private$f.createLayout(options);\n    }\n    /**\n     * A read-only array of the widgets in the panel.\n     */\n    get widgets() {\n        return this.layout.widgets;\n    }\n    /**\n     * Add a widget to the end of the panel.\n     *\n     * @param widget - The widget to add to the panel.\n     *\n     * #### Notes\n     * If the widget is already contained in the panel, it will be moved.\n     */\n    addWidget(widget) {\n        this.layout.addWidget(widget);\n    }\n    /**\n     * Insert a widget at the specified index.\n     *\n     * @param index - The index at which to insert the widget.\n     *\n     * @param widget - The widget to insert into to the panel.\n     *\n     * #### Notes\n     * If the widget is already contained in the panel, it will be moved.\n     */\n    insertWidget(index, widget) {\n        this.layout.insertWidget(index, widget);\n    }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$f;\n(function (Private) {\n    /**\n     * Create a panel layout for the given panel options.\n     */\n    function createLayout(options) {\n        return options.layout || new PanelLayout();\n    }\n    Private.createLayout = createLayout;\n})(Private$f || (Private$f = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A panel which arranges its widgets into resizable sections.\n *\n * #### Notes\n * This class provides a convenience wrapper around a {@link SplitLayout}.\n */\nclass SplitPanel extends Panel {\n    /**\n     * Construct a new split panel.\n     *\n     * @param options - The options for initializing the split panel.\n     */\n    constructor(options = {}) {\n        super({ layout: Private$e.createLayout(options) });\n        this._handleMoved = new Signal(this);\n        this._pressData = null;\n        this.addClass('lm-SplitPanel');\n    }\n    /**\n     * Dispose of the resources held by the panel.\n     */\n    dispose() {\n        this._releaseMouse();\n        super.dispose();\n    }\n    /**\n     * Get the layout orientation for the split panel.\n     */\n    get orientation() {\n        return this.layout.orientation;\n    }\n    /**\n     * Set the layout orientation for the split panel.\n     */\n    set orientation(value) {\n        this.layout.orientation = value;\n    }\n    /**\n     * Get the content alignment for the split panel.\n     *\n     * #### Notes\n     * This is the alignment of the widgets in the layout direction.\n     *\n     * The alignment has no effect if the widgets can expand to fill the\n     * entire split panel.\n     */\n    get alignment() {\n        return this.layout.alignment;\n    }\n    /**\n     * Set the content alignment for the split panel.\n     *\n     * #### Notes\n     * This is the alignment of the widgets in the layout direction.\n     *\n     * The alignment has no effect if the widgets can expand to fill the\n     * entire split panel.\n     */\n    set alignment(value) {\n        this.layout.alignment = value;\n    }\n    /**\n     * Get the inter-element spacing for the split panel.\n     */\n    get spacing() {\n        return this.layout.spacing;\n    }\n    /**\n     * Set the inter-element spacing for the split panel.\n     */\n    set spacing(value) {\n        this.layout.spacing = value;\n    }\n    /**\n     * The renderer used by the split panel.\n     */\n    get renderer() {\n        return this.layout.renderer;\n    }\n    /**\n     * A signal emitted when a split handle has moved.\n     */\n    get handleMoved() {\n        return this._handleMoved;\n    }\n    /**\n     * A read-only array of the split handles in the panel.\n     */\n    get handles() {\n        return this.layout.handles;\n    }\n    /**\n     * Get the relative sizes of the widgets in the panel.\n     *\n     * @returns A new array of the relative sizes of the widgets.\n     *\n     * #### Notes\n     * The returned sizes reflect the sizes of the widgets normalized\n     * relative to their siblings.\n     *\n     * This method **does not** measure the DOM nodes.\n     */\n    relativeSizes() {\n        return this.layout.relativeSizes();\n    }\n    /**\n     * Set the relative sizes for the widgets in the panel.\n     *\n     * @param sizes - The relative sizes for the widgets in the panel.\n     * @param update - Update the layout after setting relative sizes.\n     * Default is True.\n     *\n     * #### Notes\n     * Extra values are ignored, too few will yield an undefined layout.\n     *\n     * The actual geometry of the DOM nodes is updated asynchronously.\n     */\n    setRelativeSizes(sizes, update = true) {\n        this.layout.setRelativeSizes(sizes, update);\n    }\n    /**\n     * Handle the DOM events for the split panel.\n     *\n     * @param event - The DOM event sent to the panel.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the panel's DOM node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'pointerdown':\n                this._evtPointerDown(event);\n                break;\n            case 'pointermove':\n                this._evtPointerMove(event);\n                break;\n            case 'pointerup':\n                this._evtPointerUp(event);\n                break;\n            case 'keydown':\n                this._evtKeyDown(event);\n                break;\n            case 'contextmenu':\n                event.preventDefault();\n                event.stopPropagation();\n                break;\n        }\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     */\n    onBeforeAttach(msg) {\n        this.node.addEventListener('pointerdown', this);\n    }\n    /**\n     * A message handler invoked on an `'after-detach'` message.\n     */\n    onAfterDetach(msg) {\n        this.node.removeEventListener('pointerdown', this);\n        this._releaseMouse();\n    }\n    /**\n     * A message handler invoked on a `'child-added'` message.\n     */\n    onChildAdded(msg) {\n        msg.child.addClass('lm-SplitPanel-child');\n        this._releaseMouse();\n    }\n    /**\n     * A message handler invoked on a `'child-removed'` message.\n     */\n    onChildRemoved(msg) {\n        msg.child.removeClass('lm-SplitPanel-child');\n        this._releaseMouse();\n    }\n    /**\n     * Handle the `'keydown'` event for the split panel.\n     */\n    _evtKeyDown(event) {\n        // Stop input events during drag.\n        if (this._pressData) {\n            event.preventDefault();\n            event.stopPropagation();\n        }\n        // Release the mouse if `Escape` is pressed.\n        if (event.keyCode === 27) {\n            this._releaseMouse();\n        }\n    }\n    /**\n     * Handle the `'pointerdown'` event for the split panel.\n     */\n    _evtPointerDown(event) {\n        // Do nothing if the primary button is not pressed.\n        if (event.button !== 0) {\n            return;\n        }\n        // Find the handle which contains the target, if any.\n        let layout = this.layout;\n        let index = ArrayExt.findFirstIndex(layout.handles, handle => {\n            return handle.contains(event.target);\n        });\n        // Bail early if the mouse press was not on a handle.\n        if (index === -1) {\n            return;\n        }\n        // Stop the event when a split handle is pressed.\n        event.preventDefault();\n        event.stopPropagation();\n        // Add the extra document listeners.\n        document.addEventListener('pointerup', this, true);\n        document.addEventListener('pointermove', this, true);\n        document.addEventListener('keydown', this, true);\n        document.addEventListener('contextmenu', this, true);\n        // Compute the offset delta for the handle press.\n        let delta;\n        let handle = layout.handles[index];\n        let rect = handle.getBoundingClientRect();\n        if (layout.orientation === 'horizontal') {\n            delta = event.clientX - rect.left;\n        }\n        else {\n            delta = event.clientY - rect.top;\n        }\n        // Override the cursor and store the press data.\n        let style = window.getComputedStyle(handle);\n        let override = Drag.overrideCursor(style.cursor);\n        this._pressData = { index, delta, override };\n    }\n    /**\n     * Handle the `'pointermove'` event for the split panel.\n     */\n    _evtPointerMove(event) {\n        // Stop the event when dragging a split handle.\n        event.preventDefault();\n        event.stopPropagation();\n        // Compute the desired offset position for the handle.\n        let pos;\n        let layout = this.layout;\n        let rect = this.node.getBoundingClientRect();\n        if (layout.orientation === 'horizontal') {\n            pos = event.clientX - rect.left - this._pressData.delta;\n        }\n        else {\n            pos = event.clientY - rect.top - this._pressData.delta;\n        }\n        // Move the handle as close to the desired position as possible.\n        layout.moveHandle(this._pressData.index, pos);\n    }\n    /**\n     * Handle the `'pointerup'` event for the split panel.\n     */\n    _evtPointerUp(event) {\n        // Do nothing if the primary button is not released.\n        if (event.button !== 0) {\n            return;\n        }\n        // Stop the event when releasing a handle.\n        event.preventDefault();\n        event.stopPropagation();\n        // Finalize the mouse release.\n        this._releaseMouse();\n    }\n    /**\n     * Release the mouse grab for the split panel.\n     */\n    _releaseMouse() {\n        // Bail early if no drag is in progress.\n        if (!this._pressData) {\n            return;\n        }\n        // Clear the override cursor.\n        this._pressData.override.dispose();\n        this._pressData = null;\n        // Emit the handle moved signal.\n        this._handleMoved.emit();\n        // Remove the extra document listeners.\n        document.removeEventListener('keydown', this, true);\n        document.removeEventListener('pointerup', this, true);\n        document.removeEventListener('pointermove', this, true);\n        document.removeEventListener('contextmenu', this, true);\n    }\n}\n/**\n * The namespace for the `SplitPanel` class statics.\n */\n(function (SplitPanel) {\n    /**\n     * The default implementation of `IRenderer`.\n     */\n    class Renderer {\n        /**\n         * Create a new handle for use with a split panel.\n         *\n         * @returns A new handle element for a split panel.\n         */\n        createHandle() {\n            let handle = document.createElement('div');\n            handle.className = 'lm-SplitPanel-handle';\n            return handle;\n        }\n    }\n    SplitPanel.Renderer = Renderer;\n    /**\n     * The default `Renderer` instance.\n     */\n    SplitPanel.defaultRenderer = new Renderer();\n    /**\n     * Get the split panel stretch factor for the given widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @returns The split panel stretch factor for the widget.\n     */\n    function getStretch(widget) {\n        return SplitLayout.getStretch(widget);\n    }\n    SplitPanel.getStretch = getStretch;\n    /**\n     * Set the split panel stretch factor for the given widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @param value - The value for the stretch factor.\n     */\n    function setStretch(widget, value) {\n        SplitLayout.setStretch(widget, value);\n    }\n    SplitPanel.setStretch = setStretch;\n})(SplitPanel || (SplitPanel = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$e;\n(function (Private) {\n    /**\n     * Create a split layout for the given panel options.\n     */\n    function createLayout(options) {\n        return (options.layout ||\n            new SplitLayout({\n                renderer: options.renderer || SplitPanel.defaultRenderer,\n                orientation: options.orientation,\n                alignment: options.alignment,\n                spacing: options.spacing\n            }));\n    }\n    Private.createLayout = createLayout;\n})(Private$e || (Private$e = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * A panel which arranges its widgets into resizable sections separated by a title widget.\n *\n * #### Notes\n * This class provides a convenience wrapper around {@link AccordionLayout}.\n *\n * See also the related [example](../../examples/accordionpanel/index.html) and\n * its [source](https://github.com/jupyterlab/lumino/tree/main/examples/example-accordionpanel).\n */\nclass AccordionPanel extends SplitPanel {\n    /**\n     * Construct a new accordion panel.\n     *\n     * @param options - The options for initializing the accordion panel.\n     *\n     */\n    constructor(options = {}) {\n        super({ ...options, layout: Private$d.createLayout(options) });\n        this._widgetSizesCache = new WeakMap();\n        this._expansionToggled = new Signal(this);\n        this.addClass('lm-AccordionPanel');\n    }\n    /**\n     * The renderer used by the accordion panel.\n     */\n    get renderer() {\n        return this.layout.renderer;\n    }\n    /**\n     * The section title space.\n     *\n     * This is the height if the panel is vertical and the width if it is\n     * horizontal.\n     */\n    get titleSpace() {\n        return this.layout.titleSpace;\n    }\n    set titleSpace(value) {\n        this.layout.titleSpace = value;\n    }\n    /**\n     * A read-only array of the section titles in the panel.\n     */\n    get titles() {\n        return this.layout.titles;\n    }\n    /**\n     * A signal emitted when a widget of the AccordionPanel is collapsed or expanded.\n     */\n    get expansionToggled() {\n        return this._expansionToggled;\n    }\n    /**\n     * Add a widget to the end of the panel.\n     *\n     * @param widget - The widget to add to the panel.\n     *\n     * #### Notes\n     * If the widget is already contained in the panel, it will be moved.\n     */\n    addWidget(widget) {\n        super.addWidget(widget);\n        widget.title.changed.connect(this._onTitleChanged, this);\n    }\n    /**\n     * Collapse the widget at position `index`.\n     *\n     * #### Notes\n     * If no widget is found for `index`, this will bail.\n     *\n     * @param index Widget index\n     */\n    collapse(index) {\n        const widget = this.layout.widgets[index];\n        if (widget && !widget.isHidden) {\n            this._toggleExpansion(index);\n        }\n    }\n    /**\n     * Expand the widget at position `index`.\n     *\n     * #### Notes\n     * If no widget is found for `index`, this will bail.\n     *\n     * @param index Widget index\n     */\n    expand(index) {\n        const widget = this.layout.widgets[index];\n        if (widget && widget.isHidden) {\n            this._toggleExpansion(index);\n        }\n    }\n    /**\n     * Insert a widget at the specified index.\n     *\n     * @param index - The index at which to insert the widget.\n     *\n     * @param widget - The widget to insert into to the panel.\n     *\n     * #### Notes\n     * If the widget is already contained in the panel, it will be moved.\n     */\n    insertWidget(index, widget) {\n        super.insertWidget(index, widget);\n        widget.title.changed.connect(this._onTitleChanged, this);\n    }\n    /**\n     * Handle the DOM events for the accordion panel.\n     *\n     * @param event - The DOM event sent to the panel.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the panel's DOM node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        super.handleEvent(event);\n        switch (event.type) {\n            case 'click':\n                this._evtClick(event);\n                break;\n            case 'keydown':\n                this._eventKeyDown(event);\n                break;\n        }\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     */\n    onBeforeAttach(msg) {\n        this.node.addEventListener('click', this);\n        this.node.addEventListener('keydown', this);\n        super.onBeforeAttach(msg);\n    }\n    /**\n     * A message handler invoked on an `'after-detach'` message.\n     */\n    onAfterDetach(msg) {\n        super.onAfterDetach(msg);\n        this.node.removeEventListener('click', this);\n        this.node.removeEventListener('keydown', this);\n    }\n    /**\n     * Handle the `changed` signal of a title object.\n     */\n    _onTitleChanged(sender) {\n        const index = ArrayExt.findFirstIndex(this.widgets, widget => {\n            return widget.contains(sender.owner);\n        });\n        if (index >= 0) {\n            this.layout.updateTitle(index, sender.owner);\n            this.update();\n        }\n    }\n    /**\n     * Compute the size of widgets in this panel on the title click event.\n     * On closing, the size of the widget is cached and we will try to expand\n     * the last opened widget.\n     * On opening, we will use the cached size if it is available to restore the\n     * widget.\n     * In both cases, if we can not compute the size of widgets, we will let\n     * `SplitLayout` decide.\n     *\n     * @param index - The index of widget to be opened of closed\n     *\n     * @returns Relative size of widgets in this panel, if this size can\n     * not be computed, return `undefined`\n     */\n    _computeWidgetSize(index) {\n        const layout = this.layout;\n        const widget = layout.widgets[index];\n        if (!widget) {\n            return undefined;\n        }\n        const isHidden = widget.isHidden;\n        const widgetSizes = layout.absoluteSizes();\n        const delta = (isHidden ? -1 : 1) * this.spacing;\n        const totalSize = widgetSizes.reduce((prev, curr) => prev + curr);\n        let newSize = [...widgetSizes];\n        if (!isHidden) {\n            // Hide the widget\n            const currentSize = widgetSizes[index];\n            this._widgetSizesCache.set(widget, currentSize);\n            newSize[index] = 0;\n            const widgetToCollapse = newSize.map(sz => sz > 0).lastIndexOf(true);\n            if (widgetToCollapse === -1) {\n                // All widget are closed, let the `SplitLayout` compute widget sizes.\n                return undefined;\n            }\n            newSize[widgetToCollapse] =\n                widgetSizes[widgetToCollapse] + currentSize + delta;\n        }\n        else {\n            // Show the widget\n            const previousSize = this._widgetSizesCache.get(widget);\n            if (!previousSize) {\n                // Previous size is unavailable, let the `SplitLayout` compute widget sizes.\n                return undefined;\n            }\n            newSize[index] += previousSize;\n            const widgetToCollapse = newSize\n                .map(sz => sz - previousSize > 0)\n                .lastIndexOf(true);\n            if (widgetToCollapse === -1) {\n                // Can not reduce the size of one widget, reduce all opened widgets\n                // proportionally with its size.\n                newSize.forEach((_, idx) => {\n                    if (idx !== index) {\n                        newSize[idx] -=\n                            (widgetSizes[idx] / totalSize) * (previousSize - delta);\n                    }\n                });\n            }\n            else {\n                newSize[widgetToCollapse] -= previousSize - delta;\n            }\n        }\n        return newSize.map(sz => sz / (totalSize + delta));\n    }\n    /**\n     * Handle the `'click'` event for the accordion panel\n     */\n    _evtClick(event) {\n        const target = event.target;\n        if (target) {\n            const index = ArrayExt.findFirstIndex(this.titles, title => {\n                return title.contains(target);\n            });\n            if (index >= 0) {\n                event.preventDefault();\n                event.stopPropagation();\n                this._toggleExpansion(index);\n            }\n        }\n    }\n    /**\n     * Handle the `'keydown'` event for the accordion panel.\n     */\n    _eventKeyDown(event) {\n        if (event.defaultPrevented) {\n            return;\n        }\n        const target = event.target;\n        let handled = false;\n        if (target) {\n            const index = ArrayExt.findFirstIndex(this.titles, title => {\n                return title.contains(target);\n            });\n            if (index >= 0) {\n                const keyCode = event.keyCode.toString();\n                // If Space or Enter is pressed on title, emulate click event\n                if (event.key.match(/Space|Enter/) || keyCode.match(/13|32/)) {\n                    target.click();\n                    handled = true;\n                }\n                else if (this.orientation === 'horizontal'\n                    ? event.key.match(/ArrowLeft|ArrowRight/) || keyCode.match(/37|39/)\n                    : event.key.match(/ArrowUp|ArrowDown/) || keyCode.match(/38|40/)) {\n                    // If Up or Down (for vertical) / Left or Right (for horizontal) is pressed on title, loop on titles\n                    const direction = event.key.match(/ArrowLeft|ArrowUp/) || keyCode.match(/37|38/)\n                        ? -1\n                        : 1;\n                    const length = this.titles.length;\n                    const newIndex = (index + length + direction) % length;\n                    this.titles[newIndex].focus();\n                    handled = true;\n                }\n                else if (event.key === 'End' || keyCode === '35') {\n                    // If End is pressed on title, focus on the last title\n                    this.titles[this.titles.length - 1].focus();\n                    handled = true;\n                }\n                else if (event.key === 'Home' || keyCode === '36') {\n                    // If Home is pressed on title, focus on the first title\n                    this.titles[0].focus();\n                    handled = true;\n                }\n            }\n            if (handled) {\n                event.preventDefault();\n            }\n        }\n    }\n    _toggleExpansion(index) {\n        const title = this.titles[index];\n        const widget = this.layout.widgets[index];\n        const newSize = this._computeWidgetSize(index);\n        if (newSize) {\n            this.setRelativeSizes(newSize, false);\n        }\n        if (widget.isHidden) {\n            title.classList.add('lm-mod-expanded');\n            title.setAttribute('aria-expanded', 'true');\n            widget.show();\n        }\n        else {\n            title.classList.remove('lm-mod-expanded');\n            title.setAttribute('aria-expanded', 'false');\n            widget.hide();\n        }\n        // Emit the expansion state signal.\n        this._expansionToggled.emit(index);\n    }\n}\n/**\n * The namespace for the `AccordionPanel` class statics.\n */\n(function (AccordionPanel) {\n    /**\n     * The default implementation of `IRenderer`.\n     */\n    class Renderer extends SplitPanel.Renderer {\n        constructor() {\n            super();\n            /**\n             * A selector which matches any title node in the accordion.\n             */\n            this.titleClassName = 'lm-AccordionPanel-title';\n            this._titleID = 0;\n            this._titleKeys = new WeakMap();\n            this._uuid = ++Renderer._nInstance;\n        }\n        /**\n         * Render the collapse indicator for a section title.\n         *\n         * @param data - The data to use for rendering the section title.\n         *\n         * @returns A element representing the collapse indicator.\n         */\n        createCollapseIcon(data) {\n            return document.createElement('span');\n        }\n        /**\n         * Render the element for a section title.\n         *\n         * @param data - The data to use for rendering the section title.\n         *\n         * @returns A element representing the section title.\n         */\n        createSectionTitle(data) {\n            const handle = document.createElement('h3');\n            handle.setAttribute('tabindex', '0');\n            handle.id = this.createTitleKey(data);\n            handle.className = this.titleClassName;\n            for (const aData in data.dataset) {\n                handle.dataset[aData] = data.dataset[aData];\n            }\n            const collapser = handle.appendChild(this.createCollapseIcon(data));\n            collapser.className = 'lm-AccordionPanel-titleCollapser';\n            const label = handle.appendChild(document.createElement('span'));\n            label.className = 'lm-AccordionPanel-titleLabel';\n            label.textContent = data.label;\n            label.title = data.caption || data.label;\n            return handle;\n        }\n        /**\n         * Create a unique render key for the title.\n         *\n         * @param data - The data to use for the title.\n         *\n         * @returns The unique render key for the title.\n         *\n         * #### Notes\n         * This method caches the key against the section title the first time\n         * the key is generated.\n         */\n        createTitleKey(data) {\n            let key = this._titleKeys.get(data);\n            if (key === undefined) {\n                key = `title-key-${this._uuid}-${this._titleID++}`;\n                this._titleKeys.set(data, key);\n            }\n            return key;\n        }\n    }\n    Renderer._nInstance = 0;\n    AccordionPanel.Renderer = Renderer;\n    /**\n     * The default `Renderer` instance.\n     */\n    AccordionPanel.defaultRenderer = new Renderer();\n})(AccordionPanel || (AccordionPanel = {}));\nvar Private$d;\n(function (Private) {\n    /**\n     * Create an accordion layout for the given panel options.\n     *\n     * @param options Panel options\n     * @returns Panel layout\n     */\n    function createLayout(options) {\n        return (options.layout ||\n            new AccordionLayout({\n                renderer: options.renderer || AccordionPanel.defaultRenderer,\n                orientation: options.orientation,\n                alignment: options.alignment,\n                spacing: options.spacing,\n                titleSpace: options.titleSpace\n            }));\n    }\n    Private.createLayout = createLayout;\n})(Private$d || (Private$d = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which arranges its widgets in a single row or column.\n */\nclass BoxLayout extends PanelLayout {\n    /**\n     * Construct a new box layout.\n     *\n     * @param options - The options for initializing the layout.\n     */\n    constructor(options = {}) {\n        super();\n        this._fixed = 0;\n        this._spacing = 4;\n        this._dirty = false;\n        this._sizers = [];\n        this._items = [];\n        this._box = null;\n        this._alignment = 'start';\n        this._direction = 'top-to-bottom';\n        if (options.direction !== undefined) {\n            this._direction = options.direction;\n        }\n        if (options.alignment !== undefined) {\n            this._alignment = options.alignment;\n        }\n        if (options.spacing !== undefined) {\n            this._spacing = Utils$1.clampDimension(options.spacing);\n        }\n    }\n    /**\n     * Dispose of the resources held by the layout.\n     */\n    dispose() {\n        // Dispose of the layout items.\n        for (const item of this._items) {\n            item.dispose();\n        }\n        // Clear the layout state.\n        this._box = null;\n        this._items.length = 0;\n        this._sizers.length = 0;\n        // Dispose of the rest of the layout.\n        super.dispose();\n    }\n    /**\n     * Get the layout direction for the box layout.\n     */\n    get direction() {\n        return this._direction;\n    }\n    /**\n     * Set the layout direction for the box layout.\n     */\n    set direction(value) {\n        if (this._direction === value) {\n            return;\n        }\n        this._direction = value;\n        if (!this.parent) {\n            return;\n        }\n        this.parent.dataset['direction'] = value;\n        this.parent.fit();\n    }\n    /**\n     * Get the content alignment for the box layout.\n     *\n     * #### Notes\n     * This is the alignment of the widgets in the layout direction.\n     *\n     * The alignment has no effect if the widgets can expand to fill the\n     * entire box layout.\n     */\n    get alignment() {\n        return this._alignment;\n    }\n    /**\n     * Set the content alignment for the box layout.\n     *\n     * #### Notes\n     * This is the alignment of the widgets in the layout direction.\n     *\n     * The alignment has no effect if the widgets can expand to fill the\n     * entire box layout.\n     */\n    set alignment(value) {\n        if (this._alignment === value) {\n            return;\n        }\n        this._alignment = value;\n        if (!this.parent) {\n            return;\n        }\n        this.parent.dataset['alignment'] = value;\n        this.parent.update();\n    }\n    /**\n     * Get the inter-element spacing for the box layout.\n     */\n    get spacing() {\n        return this._spacing;\n    }\n    /**\n     * Set the inter-element spacing for the box layout.\n     */\n    set spacing(value) {\n        value = Utils$1.clampDimension(value);\n        if (this._spacing === value) {\n            return;\n        }\n        this._spacing = value;\n        if (!this.parent) {\n            return;\n        }\n        this.parent.fit();\n    }\n    /**\n     * Perform layout initialization which requires the parent widget.\n     */\n    init() {\n        this.parent.dataset['direction'] = this.direction;\n        this.parent.dataset['alignment'] = this.alignment;\n        super.init();\n    }\n    /**\n     * Attach a widget to the parent's DOM node.\n     *\n     * @param index - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to attach to the parent.\n     *\n     * #### Notes\n     * This is a reimplementation of the superclass method.\n     */\n    attachWidget(index, widget) {\n        // Create and add a new layout item for the widget.\n        ArrayExt.insert(this._items, index, new LayoutItem(widget));\n        // Create and add a new sizer for the widget.\n        ArrayExt.insert(this._sizers, index, new BoxSizer());\n        // Send a `'before-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n        }\n        // Add the widget's node to the parent.\n        this.parent.node.appendChild(widget.node);\n        // Send an `'after-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n        }\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n    /**\n     * Move a widget in the parent's DOM node.\n     *\n     * @param fromIndex - The previous index of the widget in the layout.\n     *\n     * @param toIndex - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to move in the parent.\n     *\n     * #### Notes\n     * This is a reimplementation of the superclass method.\n     */\n    moveWidget(fromIndex, toIndex, widget) {\n        // Move the layout item for the widget.\n        ArrayExt.move(this._items, fromIndex, toIndex);\n        // Move the sizer for the widget.\n        ArrayExt.move(this._sizers, fromIndex, toIndex);\n        // Post an update request for the parent widget.\n        this.parent.update();\n    }\n    /**\n     * Detach a widget from the parent's DOM node.\n     *\n     * @param index - The previous index of the widget in the layout.\n     *\n     * @param widget - The widget to detach from the parent.\n     *\n     * #### Notes\n     * This is a reimplementation of the superclass method.\n     */\n    detachWidget(index, widget) {\n        // Remove the layout item for the widget.\n        let item = ArrayExt.removeAt(this._items, index);\n        // Remove the sizer for the widget.\n        ArrayExt.removeAt(this._sizers, index);\n        // Send a `'before-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n        }\n        // Remove the widget's node from the parent.\n        this.parent.node.removeChild(widget.node);\n        // Send an `'after-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n        }\n        // Dispose of the layout item.\n        item.dispose();\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'before-show'` message.\n     */\n    onBeforeShow(msg) {\n        super.onBeforeShow(msg);\n        this.parent.update();\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     */\n    onBeforeAttach(msg) {\n        super.onBeforeAttach(msg);\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'child-shown'` message.\n     */\n    onChildShown(msg) {\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'child-hidden'` message.\n     */\n    onChildHidden(msg) {\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'resize'` message.\n     */\n    onResize(msg) {\n        if (this.parent.isVisible) {\n            this._update(msg.width, msg.height);\n        }\n    }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     */\n    onUpdateRequest(msg) {\n        if (this.parent.isVisible) {\n            this._update(-1, -1);\n        }\n    }\n    /**\n     * A message handler invoked on a `'fit-request'` message.\n     */\n    onFitRequest(msg) {\n        if (this.parent.isAttached) {\n            this._fit();\n        }\n    }\n    /**\n     * Fit the layout to the total size required by the widgets.\n     */\n    _fit() {\n        // Compute the visible item count.\n        let nVisible = 0;\n        for (let i = 0, n = this._items.length; i < n; ++i) {\n            nVisible += +!this._items[i].isHidden;\n        }\n        // Update the fixed space for the visible items.\n        this._fixed = this._spacing * Math.max(0, nVisible - 1);\n        // Setup the computed minimum size.\n        let horz = Private$c.isHorizontal(this._direction);\n        let minW = horz ? this._fixed : 0;\n        let minH = horz ? 0 : this._fixed;\n        // Update the sizers and computed minimum size.\n        for (let i = 0, n = this._items.length; i < n; ++i) {\n            // Fetch the item and corresponding box sizer.\n            let item = this._items[i];\n            let sizer = this._sizers[i];\n            // If the item is hidden, it should consume zero size.\n            if (item.isHidden) {\n                sizer.minSize = 0;\n                sizer.maxSize = 0;\n                continue;\n            }\n            // Update the size limits for the item.\n            item.fit();\n            // Update the size basis and stretch factor.\n            sizer.sizeHint = BoxLayout.getSizeBasis(item.widget);\n            sizer.stretch = BoxLayout.getStretch(item.widget);\n            // Update the sizer limits and computed min size.\n            if (horz) {\n                sizer.minSize = item.minWidth;\n                sizer.maxSize = item.maxWidth;\n                minW += item.minWidth;\n                minH = Math.max(minH, item.minHeight);\n            }\n            else {\n                sizer.minSize = item.minHeight;\n                sizer.maxSize = item.maxHeight;\n                minH += item.minHeight;\n                minW = Math.max(minW, item.minWidth);\n            }\n        }\n        // Update the box sizing and add it to the computed min size.\n        let box = (this._box = ElementExt.boxSizing(this.parent.node));\n        minW += box.horizontalSum;\n        minH += box.verticalSum;\n        // Update the parent's min size constraints.\n        let style = this.parent.node.style;\n        style.minWidth = `${minW}px`;\n        style.minHeight = `${minH}px`;\n        // Set the dirty flag to ensure only a single update occurs.\n        this._dirty = true;\n        // Notify the ancestor that it should fit immediately. This may\n        // cause a resize of the parent, fulfilling the required update.\n        if (this.parent.parent) {\n            MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n        }\n        // If the dirty flag is still set, the parent was not resized.\n        // Trigger the required update on the parent widget immediately.\n        if (this._dirty) {\n            MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n        }\n    }\n    /**\n     * Update the layout position and size of the widgets.\n     *\n     * The parent offset dimensions should be `-1` if unknown.\n     */\n    _update(offsetWidth, offsetHeight) {\n        // Clear the dirty flag to indicate the update occurred.\n        this._dirty = false;\n        // Compute the visible item count.\n        let nVisible = 0;\n        for (let i = 0, n = this._items.length; i < n; ++i) {\n            nVisible += +!this._items[i].isHidden;\n        }\n        // Bail early if there are no visible items to layout.\n        if (nVisible === 0) {\n            return;\n        }\n        // Measure the parent if the offset dimensions are unknown.\n        if (offsetWidth < 0) {\n            offsetWidth = this.parent.node.offsetWidth;\n        }\n        if (offsetHeight < 0) {\n            offsetHeight = this.parent.node.offsetHeight;\n        }\n        // Ensure the parent box sizing data is computed.\n        if (!this._box) {\n            this._box = ElementExt.boxSizing(this.parent.node);\n        }\n        // Compute the layout area adjusted for border and padding.\n        let top = this._box.paddingTop;\n        let left = this._box.paddingLeft;\n        let width = offsetWidth - this._box.horizontalSum;\n        let height = offsetHeight - this._box.verticalSum;\n        // Distribute the layout space and adjust the start position.\n        let delta;\n        switch (this._direction) {\n            case 'left-to-right':\n                delta = BoxEngine.calc(this._sizers, Math.max(0, width - this._fixed));\n                break;\n            case 'top-to-bottom':\n                delta = BoxEngine.calc(this._sizers, Math.max(0, height - this._fixed));\n                break;\n            case 'right-to-left':\n                delta = BoxEngine.calc(this._sizers, Math.max(0, width - this._fixed));\n                left += width;\n                break;\n            case 'bottom-to-top':\n                delta = BoxEngine.calc(this._sizers, Math.max(0, height - this._fixed));\n                top += height;\n                break;\n            default:\n                throw 'unreachable';\n        }\n        // Setup the variables for justification and alignment offset.\n        let extra = 0;\n        let offset = 0;\n        // Account for alignment if there is extra layout space.\n        if (delta > 0) {\n            switch (this._alignment) {\n                case 'start':\n                    break;\n                case 'center':\n                    extra = 0;\n                    offset = delta / 2;\n                    break;\n                case 'end':\n                    extra = 0;\n                    offset = delta;\n                    break;\n                case 'justify':\n                    extra = delta / nVisible;\n                    offset = 0;\n                    break;\n                default:\n                    throw 'unreachable';\n            }\n        }\n        // Layout the items using the computed box sizes.\n        for (let i = 0, n = this._items.length; i < n; ++i) {\n            // Fetch the item.\n            let item = this._items[i];\n            // Ignore hidden items.\n            if (item.isHidden) {\n                continue;\n            }\n            // Fetch the computed size for the widget.\n            let size = this._sizers[i].size;\n            // Update the widget geometry and advance the relevant edge.\n            switch (this._direction) {\n                case 'left-to-right':\n                    item.update(left + offset, top, size + extra, height);\n                    left += size + extra + this._spacing;\n                    break;\n                case 'top-to-bottom':\n                    item.update(left, top + offset, width, size + extra);\n                    top += size + extra + this._spacing;\n                    break;\n                case 'right-to-left':\n                    item.update(left - offset - size - extra, top, size + extra, height);\n                    left -= size + extra + this._spacing;\n                    break;\n                case 'bottom-to-top':\n                    item.update(left, top - offset - size - extra, width, size + extra);\n                    top -= size + extra + this._spacing;\n                    break;\n                default:\n                    throw 'unreachable';\n            }\n        }\n    }\n}\n/**\n * The namespace for the `BoxLayout` class statics.\n */\n(function (BoxLayout) {\n    /**\n     * Get the box layout stretch factor for the given widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @returns The box layout stretch factor for the widget.\n     */\n    function getStretch(widget) {\n        return Private$c.stretchProperty.get(widget);\n    }\n    BoxLayout.getStretch = getStretch;\n    /**\n     * Set the box layout stretch factor for the given widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @param value - The value for the stretch factor.\n     */\n    function setStretch(widget, value) {\n        Private$c.stretchProperty.set(widget, value);\n    }\n    BoxLayout.setStretch = setStretch;\n    /**\n     * Get the box layout size basis for the given widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @returns The box layout size basis for the widget.\n     */\n    function getSizeBasis(widget) {\n        return Private$c.sizeBasisProperty.get(widget);\n    }\n    BoxLayout.getSizeBasis = getSizeBasis;\n    /**\n     * Set the box layout size basis for the given widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @param value - The value for the size basis.\n     */\n    function setSizeBasis(widget, value) {\n        Private$c.sizeBasisProperty.set(widget, value);\n    }\n    BoxLayout.setSizeBasis = setSizeBasis;\n})(BoxLayout || (BoxLayout = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$c;\n(function (Private) {\n    /**\n     * The property descriptor for a widget stretch factor.\n     */\n    Private.stretchProperty = new AttachedProperty({\n        name: 'stretch',\n        create: () => 0,\n        coerce: (owner, value) => Math.max(0, Math.floor(value)),\n        changed: onChildSizingChanged\n    });\n    /**\n     * The property descriptor for a widget size basis.\n     */\n    Private.sizeBasisProperty = new AttachedProperty({\n        name: 'sizeBasis',\n        create: () => 0,\n        coerce: (owner, value) => Math.max(0, Math.floor(value)),\n        changed: onChildSizingChanged\n    });\n    /**\n     * Test whether a direction has horizontal orientation.\n     */\n    function isHorizontal(dir) {\n        return dir === 'left-to-right' || dir === 'right-to-left';\n    }\n    Private.isHorizontal = isHorizontal;\n    /**\n     * Clamp a spacing value to an integer >= 0.\n     */\n    function clampSpacing(value) {\n        return Math.max(0, Math.floor(value));\n    }\n    Private.clampSpacing = clampSpacing;\n    /**\n     * The change handler for the attached sizing properties.\n     */\n    function onChildSizingChanged(child) {\n        if (child.parent && child.parent.layout instanceof BoxLayout) {\n            child.parent.fit();\n        }\n    }\n})(Private$c || (Private$c = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A panel which arranges its widgets in a single row or column.\n *\n * #### Notes\n * This class provides a convenience wrapper around a {@link BoxLayout}.\n */\nclass BoxPanel extends Panel {\n    /**\n     * Construct a new box panel.\n     *\n     * @param options - The options for initializing the box panel.\n     */\n    constructor(options = {}) {\n        super({ layout: Private$b.createLayout(options) });\n        this.addClass('lm-BoxPanel');\n    }\n    /**\n     * Get the layout direction for the box panel.\n     */\n    get direction() {\n        return this.layout.direction;\n    }\n    /**\n     * Set the layout direction for the box panel.\n     */\n    set direction(value) {\n        this.layout.direction = value;\n    }\n    /**\n     * Get the content alignment for the box panel.\n     *\n     * #### Notes\n     * This is the alignment of the widgets in the layout direction.\n     *\n     * The alignment has no effect if the widgets can expand to fill the\n     * entire box layout.\n     */\n    get alignment() {\n        return this.layout.alignment;\n    }\n    /**\n     * Set the content alignment for the box panel.\n     *\n     * #### Notes\n     * This is the alignment of the widgets in the layout direction.\n     *\n     * The alignment has no effect if the widgets can expand to fill the\n     * entire box layout.\n     */\n    set alignment(value) {\n        this.layout.alignment = value;\n    }\n    /**\n     * Get the inter-element spacing for the box panel.\n     */\n    get spacing() {\n        return this.layout.spacing;\n    }\n    /**\n     * Set the inter-element spacing for the box panel.\n     */\n    set spacing(value) {\n        this.layout.spacing = value;\n    }\n    /**\n     * A message handler invoked on a `'child-added'` message.\n     */\n    onChildAdded(msg) {\n        msg.child.addClass('lm-BoxPanel-child');\n    }\n    /**\n     * A message handler invoked on a `'child-removed'` message.\n     */\n    onChildRemoved(msg) {\n        msg.child.removeClass('lm-BoxPanel-child');\n    }\n}\n/**\n * The namespace for the `BoxPanel` class statics.\n */\n(function (BoxPanel) {\n    /**\n     * Get the box panel stretch factor for the given widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @returns The box panel stretch factor for the widget.\n     */\n    function getStretch(widget) {\n        return BoxLayout.getStretch(widget);\n    }\n    BoxPanel.getStretch = getStretch;\n    /**\n     * Set the box panel stretch factor for the given widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @param value - The value for the stretch factor.\n     */\n    function setStretch(widget, value) {\n        BoxLayout.setStretch(widget, value);\n    }\n    BoxPanel.setStretch = setStretch;\n    /**\n     * Get the box panel size basis for the given widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @returns The box panel size basis for the widget.\n     */\n    function getSizeBasis(widget) {\n        return BoxLayout.getSizeBasis(widget);\n    }\n    BoxPanel.getSizeBasis = getSizeBasis;\n    /**\n     * Set the box panel size basis for the given widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @param value - The value for the size basis.\n     */\n    function setSizeBasis(widget, value) {\n        BoxLayout.setSizeBasis(widget, value);\n    }\n    BoxPanel.setSizeBasis = setSizeBasis;\n})(BoxPanel || (BoxPanel = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$b;\n(function (Private) {\n    /**\n     * Create a box layout for the given panel options.\n     */\n    function createLayout(options) {\n        return options.layout || new BoxLayout(options);\n    }\n    Private.createLayout = createLayout;\n})(Private$b || (Private$b = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which displays command items as a searchable palette.\n */\nclass CommandPalette extends Widget {\n    /**\n     * Construct a new command palette.\n     *\n     * @param options - The options for initializing the palette.\n     */\n    constructor(options) {\n        super({ node: Private$a.createNode() });\n        this._activeIndex = -1;\n        this._items = [];\n        this._results = null;\n        this.addClass('lm-CommandPalette');\n        this.setFlag(Widget.Flag.DisallowLayout);\n        this.commands = options.commands;\n        this.renderer = options.renderer || CommandPalette.defaultRenderer;\n        this.commands.commandChanged.connect(this._onGenericChange, this);\n        this.commands.keyBindingChanged.connect(this._onGenericChange, this);\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        this._items.length = 0;\n        this._results = null;\n        super.dispose();\n    }\n    /**\n     * The command palette search node.\n     *\n     * #### Notes\n     * This is the node which contains the search-related elements.\n     */\n    get searchNode() {\n        return this.node.getElementsByClassName('lm-CommandPalette-search')[0];\n    }\n    /**\n     * The command palette input node.\n     *\n     * #### Notes\n     * This is the actual input node for the search area.\n     */\n    get inputNode() {\n        return this.node.getElementsByClassName('lm-CommandPalette-input')[0];\n    }\n    /**\n     * The command palette content node.\n     *\n     * #### Notes\n     * This is the node which holds the command item nodes.\n     *\n     * Modifying this node directly can lead to undefined behavior.\n     */\n    get contentNode() {\n        return this.node.getElementsByClassName('lm-CommandPalette-content')[0];\n    }\n    /**\n     * A read-only array of the command items in the palette.\n     */\n    get items() {\n        return this._items;\n    }\n    /**\n     * Add a command item to the command palette.\n     *\n     * @param options - The options for creating the command item.\n     *\n     * @returns The command item added to the palette.\n     */\n    addItem(options) {\n        // Create a new command item for the options.\n        let item = Private$a.createItem(this.commands, options);\n        // Add the item to the array.\n        this._items.push(item);\n        // Refresh the search results.\n        this.refresh();\n        // Return the item added to the palette.\n        return item;\n    }\n    /**\n     * Adds command items to the command palette.\n     *\n     * @param items - An array of options for creating each command item.\n     *\n     * @returns The command items added to the palette.\n     */\n    addItems(items) {\n        const newItems = items.map(item => Private$a.createItem(this.commands, item));\n        newItems.forEach(item => this._items.push(item));\n        this.refresh();\n        return newItems;\n    }\n    /**\n     * Remove an item from the command palette.\n     *\n     * @param item - The item to remove from the palette.\n     *\n     * #### Notes\n     * This is a no-op if the item is not in the palette.\n     */\n    removeItem(item) {\n        this.removeItemAt(this._items.indexOf(item));\n    }\n    /**\n     * Remove the item at a given index from the command palette.\n     *\n     * @param index - The index of the item to remove.\n     *\n     * #### Notes\n     * This is a no-op if the index is out of range.\n     */\n    removeItemAt(index) {\n        // Remove the item from the array.\n        let item = ArrayExt.removeAt(this._items, index);\n        // Bail if the index is out of range.\n        if (!item) {\n            return;\n        }\n        // Refresh the search results.\n        this.refresh();\n    }\n    /**\n     * Remove all items from the command palette.\n     */\n    clearItems() {\n        // Bail if there is nothing to remove.\n        if (this._items.length === 0) {\n            return;\n        }\n        // Clear the array of items.\n        this._items.length = 0;\n        // Refresh the search results.\n        this.refresh();\n    }\n    /**\n     * Clear the search results and schedule an update.\n     *\n     * #### Notes\n     * This should be called whenever the search results of the palette\n     * should be updated.\n     *\n     * This is typically called automatically by the palette as needed,\n     * but can be called manually if the input text is programatically\n     * changed.\n     *\n     * The rendered results are updated asynchronously.\n     */\n    refresh() {\n        this._results = null;\n        if (this.inputNode.value !== '') {\n            let clear = this.node.getElementsByClassName('lm-close-icon')[0];\n            clear.style.display = 'inherit';\n        }\n        else {\n            let clear = this.node.getElementsByClassName('lm-close-icon')[0];\n            clear.style.display = 'none';\n        }\n        this.update();\n    }\n    /**\n     * Handle the DOM events for the command palette.\n     *\n     * @param event - The DOM event sent to the command palette.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the command palette's DOM node.\n     * It should not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'click':\n                this._evtClick(event);\n                break;\n            case 'keydown':\n                this._evtKeyDown(event);\n                break;\n            case 'input':\n                this.refresh();\n                break;\n            case 'focus':\n            case 'blur':\n                this._toggleFocused();\n                break;\n        }\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     */\n    onBeforeAttach(msg) {\n        this.node.addEventListener('click', this);\n        this.node.addEventListener('keydown', this);\n        this.node.addEventListener('input', this);\n        this.node.addEventListener('focus', this, true);\n        this.node.addEventListener('blur', this, true);\n    }\n    /**\n     * A message handler invoked on an `'after-detach'` message.\n     */\n    onAfterDetach(msg) {\n        this.node.removeEventListener('click', this);\n        this.node.removeEventListener('keydown', this);\n        this.node.removeEventListener('input', this);\n        this.node.removeEventListener('focus', this, true);\n        this.node.removeEventListener('blur', this, true);\n    }\n    /**\n     * A message handler invoked on an `'after-show'` message.\n     */\n    onAfterShow(msg) {\n        this.update();\n        super.onAfterShow(msg);\n    }\n    /**\n     * A message handler invoked on an `'activate-request'` message.\n     */\n    onActivateRequest(msg) {\n        if (this.isAttached) {\n            let input = this.inputNode;\n            input.focus();\n            input.select();\n        }\n    }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     */\n    onUpdateRequest(msg) {\n        if (!this.isVisible) {\n            // Ensure to clear the content if the widget is hidden\n            VirtualDOM.render(null, this.contentNode);\n            return;\n        }\n        // Fetch the current query text and content node.\n        let query = this.inputNode.value;\n        let contentNode = this.contentNode;\n        // Ensure the search results are generated.\n        let results = this._results;\n        if (!results) {\n            // Generate and store the new search results.\n            results = this._results = Private$a.search(this._items, query);\n            // Reset the active index.\n            this._activeIndex = query\n                ? ArrayExt.findFirstIndex(results, Private$a.canActivate)\n                : -1;\n        }\n        // If there is no query and no results, clear the content.\n        if (!query && results.length === 0) {\n            VirtualDOM.render(null, contentNode);\n            return;\n        }\n        // If the is a query but no results, render the empty message.\n        if (query && results.length === 0) {\n            let content = this.renderer.renderEmptyMessage({ query });\n            VirtualDOM.render(content, contentNode);\n            return;\n        }\n        // Create the render content for the search results.\n        let renderer = this.renderer;\n        let activeIndex = this._activeIndex;\n        let content = new Array(results.length);\n        for (let i = 0, n = results.length; i < n; ++i) {\n            let result = results[i];\n            if (result.type === 'header') {\n                let indices = result.indices;\n                let category = result.category;\n                content[i] = renderer.renderHeader({ category, indices });\n            }\n            else {\n                let item = result.item;\n                let indices = result.indices;\n                let active = i === activeIndex;\n                content[i] = renderer.renderItem({ item, indices, active });\n            }\n        }\n        // Render the search result content.\n        VirtualDOM.render(content, contentNode);\n        // Adjust the scroll position as needed.\n        if (activeIndex < 0 || activeIndex >= results.length) {\n            contentNode.scrollTop = 0;\n        }\n        else {\n            let element = contentNode.children[activeIndex];\n            ElementExt.scrollIntoViewIfNeeded(contentNode, element);\n        }\n    }\n    /**\n     * Handle the `'click'` event for the command palette.\n     */\n    _evtClick(event) {\n        // Bail if the click is not the left button.\n        if (event.button !== 0) {\n            return;\n        }\n        // Clear input if the target is clear button\n        if (event.target.classList.contains('lm-close-icon')) {\n            this.inputNode.value = '';\n            this.refresh();\n            return;\n        }\n        // Find the index of the item which was clicked.\n        let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n            return node.contains(event.target);\n        });\n        // Bail if the click was not on an item.\n        if (index === -1) {\n            return;\n        }\n        // Kill the event when a content item is clicked.\n        event.preventDefault();\n        event.stopPropagation();\n        // Execute the item if possible.\n        this._execute(index);\n    }\n    /**\n     * Handle the `'keydown'` event for the command palette.\n     */\n    _evtKeyDown(event) {\n        if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n            return;\n        }\n        switch (event.keyCode) {\n            case 13: // Enter\n                event.preventDefault();\n                event.stopPropagation();\n                this._execute(this._activeIndex);\n                break;\n            case 38: // Up Arrow\n                event.preventDefault();\n                event.stopPropagation();\n                this._activatePreviousItem();\n                break;\n            case 40: // Down Arrow\n                event.preventDefault();\n                event.stopPropagation();\n                this._activateNextItem();\n                break;\n        }\n    }\n    /**\n     * Activate the next enabled command item.\n     */\n    _activateNextItem() {\n        // Bail if there are no search results.\n        if (!this._results || this._results.length === 0) {\n            return;\n        }\n        // Find the next enabled item index.\n        let ai = this._activeIndex;\n        let n = this._results.length;\n        let start = ai < n - 1 ? ai + 1 : 0;\n        let stop = start === 0 ? n - 1 : start - 1;\n        this._activeIndex = ArrayExt.findFirstIndex(this._results, Private$a.canActivate, start, stop);\n        // Schedule an update of the items.\n        this.update();\n    }\n    /**\n     * Activate the previous enabled command item.\n     */\n    _activatePreviousItem() {\n        // Bail if there are no search results.\n        if (!this._results || this._results.length === 0) {\n            return;\n        }\n        // Find the previous enabled item index.\n        let ai = this._activeIndex;\n        let n = this._results.length;\n        let start = ai <= 0 ? n - 1 : ai - 1;\n        let stop = start === n - 1 ? 0 : start + 1;\n        this._activeIndex = ArrayExt.findLastIndex(this._results, Private$a.canActivate, start, stop);\n        // Schedule an update of the items.\n        this.update();\n    }\n    /**\n     * Execute the command item at the given index, if possible.\n     */\n    _execute(index) {\n        // Bail if there are no search results.\n        if (!this._results) {\n            return;\n        }\n        // Bail if the index is out of range.\n        let part = this._results[index];\n        if (!part) {\n            return;\n        }\n        // Update the search text if the item is a header.\n        if (part.type === 'header') {\n            let input = this.inputNode;\n            input.value = `${part.category.toLowerCase()} `;\n            input.focus();\n            this.refresh();\n            return;\n        }\n        // Bail if item is not enabled.\n        if (!part.item.isEnabled) {\n            return;\n        }\n        // Execute the item.\n        this.commands.execute(part.item.command, part.item.args);\n        // Clear the query text.\n        this.inputNode.value = '';\n        // Refresh the search results.\n        this.refresh();\n    }\n    /**\n     * Toggle the focused modifier based on the input node focus state.\n     */\n    _toggleFocused() {\n        let focused = document.activeElement === this.inputNode;\n        this.toggleClass('lm-mod-focused', focused);\n    }\n    /**\n     * A signal handler for generic command changes.\n     */\n    _onGenericChange() {\n        this.refresh();\n    }\n}\n/**\n * The namespace for the `CommandPalette` class statics.\n */\n(function (CommandPalette) {\n    /**\n     * The default implementation of `IRenderer`.\n     */\n    class Renderer {\n        /**\n         * Render the virtual element for a command palette header.\n         *\n         * @param data - The data to use for rendering the header.\n         *\n         * @returns A virtual element representing the header.\n         */\n        renderHeader(data) {\n            let content = this.formatHeader(data);\n            return h.li({ className: 'lm-CommandPalette-header' }, content);\n        }\n        /**\n         * Render the virtual element for a command palette item.\n         *\n         * @param data - The data to use for rendering the item.\n         *\n         * @returns A virtual element representing the item.\n         */\n        renderItem(data) {\n            let className = this.createItemClass(data);\n            let dataset = this.createItemDataset(data);\n            if (data.item.isToggleable) {\n                return h.li({\n                    className,\n                    dataset,\n                    role: 'menuitemcheckbox',\n                    'aria-checked': `${data.item.isToggled}`\n                }, this.renderItemIcon(data), this.renderItemContent(data), this.renderItemShortcut(data));\n            }\n            return h.li({\n                className,\n                dataset,\n                role: 'menuitem'\n            }, this.renderItemIcon(data), this.renderItemContent(data), this.renderItemShortcut(data));\n        }\n        /**\n         * Render the empty results message for a command palette.\n         *\n         * @param data - The data to use for rendering the message.\n         *\n         * @returns A virtual element representing the message.\n         */\n        renderEmptyMessage(data) {\n            let content = this.formatEmptyMessage(data);\n            return h.li({ className: 'lm-CommandPalette-emptyMessage' }, content);\n        }\n        /**\n         * Render the icon for a command palette item.\n         *\n         * @param data - The data to use for rendering the icon.\n         *\n         * @returns A virtual element representing the icon.\n         */\n        renderItemIcon(data) {\n            let className = this.createIconClass(data);\n            // If data.item.icon is undefined, it will be ignored.\n            return h.div({ className }, data.item.icon, data.item.iconLabel);\n        }\n        /**\n         * Render the content for a command palette item.\n         *\n         * @param data - The data to use for rendering the content.\n         *\n         * @returns A virtual element representing the content.\n         */\n        renderItemContent(data) {\n            return h.div({ className: 'lm-CommandPalette-itemContent' }, this.renderItemLabel(data), this.renderItemCaption(data));\n        }\n        /**\n         * Render the label for a command palette item.\n         *\n         * @param data - The data to use for rendering the label.\n         *\n         * @returns A virtual element representing the label.\n         */\n        renderItemLabel(data) {\n            let content = this.formatItemLabel(data);\n            return h.div({ className: 'lm-CommandPalette-itemLabel' }, content);\n        }\n        /**\n         * Render the caption for a command palette item.\n         *\n         * @param data - The data to use for rendering the caption.\n         *\n         * @returns A virtual element representing the caption.\n         */\n        renderItemCaption(data) {\n            let content = this.formatItemCaption(data);\n            return h.div({ className: 'lm-CommandPalette-itemCaption' }, content);\n        }\n        /**\n         * Render the shortcut for a command palette item.\n         *\n         * @param data - The data to use for rendering the shortcut.\n         *\n         * @returns A virtual element representing the shortcut.\n         */\n        renderItemShortcut(data) {\n            let content = this.formatItemShortcut(data);\n            return h.div({ className: 'lm-CommandPalette-itemShortcut' }, content);\n        }\n        /**\n         * Create the class name for the command palette item.\n         *\n         * @param data - The data to use for the class name.\n         *\n         * @returns The full class name for the command palette item.\n         */\n        createItemClass(data) {\n            // Set up the initial class name.\n            let name = 'lm-CommandPalette-item';\n            // Add the boolean state classes.\n            if (!data.item.isEnabled) {\n                name += ' lm-mod-disabled';\n            }\n            if (data.item.isToggled) {\n                name += ' lm-mod-toggled';\n            }\n            if (data.active) {\n                name += ' lm-mod-active';\n            }\n            // Add the extra class.\n            let extra = data.item.className;\n            if (extra) {\n                name += ` ${extra}`;\n            }\n            // Return the complete class name.\n            return name;\n        }\n        /**\n         * Create the dataset for the command palette item.\n         *\n         * @param data - The data to use for creating the dataset.\n         *\n         * @returns The dataset for the command palette item.\n         */\n        createItemDataset(data) {\n            return { ...data.item.dataset, command: data.item.command };\n        }\n        /**\n         * Create the class name for the command item icon.\n         *\n         * @param data - The data to use for the class name.\n         *\n         * @returns The full class name for the item icon.\n         */\n        createIconClass(data) {\n            let name = 'lm-CommandPalette-itemIcon';\n            let extra = data.item.iconClass;\n            return extra ? `${name} ${extra}` : name;\n        }\n        /**\n         * Create the render content for the header node.\n         *\n         * @param data - The data to use for the header content.\n         *\n         * @returns The content to add to the header node.\n         */\n        formatHeader(data) {\n            if (!data.indices || data.indices.length === 0) {\n                return data.category;\n            }\n            return StringExt.highlight(data.category, data.indices, h.mark);\n        }\n        /**\n         * Create the render content for the empty message node.\n         *\n         * @param data - The data to use for the empty message content.\n         *\n         * @returns The content to add to the empty message node.\n         */\n        formatEmptyMessage(data) {\n            return `No commands found that match '${data.query}'`;\n        }\n        /**\n         * Create the render content for the item shortcut node.\n         *\n         * @param data - The data to use for the shortcut content.\n         *\n         * @returns The content to add to the shortcut node.\n         */\n        formatItemShortcut(data) {\n            let kb = data.item.keyBinding;\n            return kb ? CommandRegistry.formatKeystroke(kb.keys) : null;\n        }\n        /**\n         * Create the render content for the item label node.\n         *\n         * @param data - The data to use for the label content.\n         *\n         * @returns The content to add to the label node.\n         */\n        formatItemLabel(data) {\n            if (!data.indices || data.indices.length === 0) {\n                return data.item.label;\n            }\n            return StringExt.highlight(data.item.label, data.indices, h.mark);\n        }\n        /**\n         * Create the render content for the item caption node.\n         *\n         * @param data - The data to use for the caption content.\n         *\n         * @returns The content to add to the caption node.\n         */\n        formatItemCaption(data) {\n            return data.item.caption;\n        }\n    }\n    CommandPalette.Renderer = Renderer;\n    /**\n     * The default `Renderer` instance.\n     */\n    CommandPalette.defaultRenderer = new Renderer();\n})(CommandPalette || (CommandPalette = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$a;\n(function (Private) {\n    /**\n     * Create the DOM node for a command palette.\n     */\n    function createNode() {\n        let node = document.createElement('div');\n        let search = document.createElement('div');\n        let wrapper = document.createElement('div');\n        let input = document.createElement('input');\n        let content = document.createElement('ul');\n        let clear = document.createElement('button');\n        search.className = 'lm-CommandPalette-search';\n        wrapper.className = 'lm-CommandPalette-wrapper';\n        input.className = 'lm-CommandPalette-input';\n        clear.className = 'lm-close-icon';\n        content.className = 'lm-CommandPalette-content';\n        content.setAttribute('role', 'menu');\n        input.spellcheck = false;\n        wrapper.appendChild(input);\n        wrapper.appendChild(clear);\n        search.appendChild(wrapper);\n        node.appendChild(search);\n        node.appendChild(content);\n        return node;\n    }\n    Private.createNode = createNode;\n    /**\n     * Create a new command item from a command registry and options.\n     */\n    function createItem(commands, options) {\n        return new CommandItem(commands, options);\n    }\n    Private.createItem = createItem;\n    /**\n     * Search an array of command items for fuzzy matches.\n     */\n    function search(items, query) {\n        // Fuzzy match the items for the query.\n        let scores = matchItems(items, query);\n        // Sort the items based on their score.\n        scores.sort(scoreCmp);\n        // Create the results for the search.\n        return createResults(scores);\n    }\n    Private.search = search;\n    /**\n     * Test whether a result item can be activated.\n     */\n    function canActivate(result) {\n        return result.type === 'item' && result.item.isEnabled;\n    }\n    Private.canActivate = canActivate;\n    /**\n     * Normalize a category for a command item.\n     */\n    function normalizeCategory(category) {\n        return category.trim().replace(/\\s+/g, ' ');\n    }\n    /**\n     * Normalize the query text for a fuzzy search.\n     */\n    function normalizeQuery(text) {\n        return text.replace(/\\s+/g, '').toLowerCase();\n    }\n    /**\n     * Perform a fuzzy match on an array of command items.\n     */\n    function matchItems(items, query) {\n        // Normalize the query text to lower case with no whitespace.\n        query = normalizeQuery(query);\n        // Create the array to hold the scores.\n        let scores = [];\n        // Iterate over the items and match against the query.\n        for (let i = 0, n = items.length; i < n; ++i) {\n            // Ignore items which are not visible.\n            let item = items[i];\n            if (!item.isVisible) {\n                continue;\n            }\n            // If the query is empty, all items are matched by default.\n            if (!query) {\n                scores.push({\n                    matchType: 3 /* MatchType.Default */,\n                    categoryIndices: null,\n                    labelIndices: null,\n                    score: 0,\n                    item\n                });\n                continue;\n            }\n            // Run the fuzzy search for the item and query.\n            let score = fuzzySearch(item, query);\n            // Ignore the item if it is not a match.\n            if (!score) {\n                continue;\n            }\n            // Penalize disabled items.\n            // TODO - push disabled items all the way down in sort cmp?\n            if (!item.isEnabled) {\n                score.score += 1000;\n            }\n            // Add the score to the results.\n            scores.push(score);\n        }\n        // Return the final array of scores.\n        return scores;\n    }\n    /**\n     * Perform a fuzzy search on a single command item.\n     */\n    function fuzzySearch(item, query) {\n        // Create the source text to be searched.\n        let category = item.category.toLowerCase();\n        let label = item.label.toLowerCase();\n        let source = `${category} ${label}`;\n        // Set up the match score and indices array.\n        let score = Infinity;\n        let indices = null;\n        // The regex for search word boundaries\n        let rgx = /\\b\\w/g;\n        // Search the source by word boundary.\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            // Find the next word boundary in the source.\n            let rgxMatch = rgx.exec(source);\n            // Break if there is no more source context.\n            if (!rgxMatch) {\n                break;\n            }\n            // Run the string match on the relevant substring.\n            let match = StringExt.matchSumOfDeltas(source, query, rgxMatch.index);\n            // Break if there is no match.\n            if (!match) {\n                break;\n            }\n            // Update the match if the score is better.\n            if (match.score <= score) {\n                score = match.score;\n                indices = match.indices;\n            }\n        }\n        // Bail if there was no match.\n        if (!indices || score === Infinity) {\n            return null;\n        }\n        // Compute the pivot index between category and label text.\n        let pivot = category.length + 1;\n        // Find the slice index to separate matched indices.\n        let j = ArrayExt.lowerBound(indices, pivot, (a, b) => a - b);\n        // Extract the matched category and label indices.\n        let categoryIndices = indices.slice(0, j);\n        let labelIndices = indices.slice(j);\n        // Adjust the label indices for the pivot offset.\n        for (let i = 0, n = labelIndices.length; i < n; ++i) {\n            labelIndices[i] -= pivot;\n        }\n        // Handle a pure label match.\n        if (categoryIndices.length === 0) {\n            return {\n                matchType: 0 /* MatchType.Label */,\n                categoryIndices: null,\n                labelIndices,\n                score,\n                item\n            };\n        }\n        // Handle a pure category match.\n        if (labelIndices.length === 0) {\n            return {\n                matchType: 1 /* MatchType.Category */,\n                categoryIndices,\n                labelIndices: null,\n                score,\n                item\n            };\n        }\n        // Handle a split match.\n        return {\n            matchType: 2 /* MatchType.Split */,\n            categoryIndices,\n            labelIndices,\n            score,\n            item\n        };\n    }\n    /**\n     * A sort comparison function for a match score.\n     */\n    function scoreCmp(a, b) {\n        // First compare based on the match type\n        let m1 = a.matchType - b.matchType;\n        if (m1 !== 0) {\n            return m1;\n        }\n        // Otherwise, compare based on the match score.\n        let d1 = a.score - b.score;\n        if (d1 !== 0) {\n            return d1;\n        }\n        // Find the match index based on the match type.\n        let i1 = 0;\n        let i2 = 0;\n        switch (a.matchType) {\n            case 0 /* MatchType.Label */:\n                i1 = a.labelIndices[0];\n                i2 = b.labelIndices[0];\n                break;\n            case 1 /* MatchType.Category */:\n            case 2 /* MatchType.Split */:\n                i1 = a.categoryIndices[0];\n                i2 = b.categoryIndices[0];\n                break;\n        }\n        // Compare based on the match index.\n        if (i1 !== i2) {\n            return i1 - i2;\n        }\n        // Otherwise, compare by category.\n        let d2 = a.item.category.localeCompare(b.item.category);\n        if (d2 !== 0) {\n            return d2;\n        }\n        // Otherwise, compare by rank.\n        let r1 = a.item.rank;\n        let r2 = b.item.rank;\n        if (r1 !== r2) {\n            return r1 < r2 ? -1 : 1; // Infinity safe\n        }\n        // Finally, compare by label.\n        return a.item.label.localeCompare(b.item.label);\n    }\n    /**\n     * Create the results from an array of sorted scores.\n     */\n    function createResults(scores) {\n        // Set up the search results array.\n        let results = [];\n        // Iterate over each score in the array.\n        for (let i = 0, n = scores.length; i < n; ++i) {\n            // Extract the current item and indices.\n            let { item, categoryIndices, labelIndices } = scores[i];\n            // Extract the category for the current item.\n            let category = item.category;\n            // Is this the same category as the preceding result?\n            if (i === 0 || category !== scores[i - 1].item.category) {\n                // Add the header result for the category.\n                results.push({ type: 'header', category, indices: categoryIndices });\n            }\n            // Create the item result for the score.\n            results.push({ type: 'item', item, indices: labelIndices });\n        }\n        // Return the final results.\n        return results;\n    }\n    /**\n     * A concrete implementation of `CommandPalette.IItem`.\n     */\n    class CommandItem {\n        /**\n         * Construct a new command item.\n         */\n        constructor(commands, options) {\n            this._commands = commands;\n            this.category = normalizeCategory(options.category);\n            this.command = options.command;\n            this.args = options.args || JSONExt.emptyObject;\n            this.rank = options.rank !== undefined ? options.rank : Infinity;\n        }\n        /**\n         * The display label for the command item.\n         */\n        get label() {\n            return this._commands.label(this.command, this.args);\n        }\n        /**\n         * The icon renderer for the command item.\n         */\n        get icon() {\n            return this._commands.icon(this.command, this.args);\n        }\n        /**\n         * The icon class for the command item.\n         */\n        get iconClass() {\n            return this._commands.iconClass(this.command, this.args);\n        }\n        /**\n         * The icon label for the command item.\n         */\n        get iconLabel() {\n            return this._commands.iconLabel(this.command, this.args);\n        }\n        /**\n         * The display caption for the command item.\n         */\n        get caption() {\n            return this._commands.caption(this.command, this.args);\n        }\n        /**\n         * The extra class name for the command item.\n         */\n        get className() {\n            return this._commands.className(this.command, this.args);\n        }\n        /**\n         * The dataset for the command item.\n         */\n        get dataset() {\n            return this._commands.dataset(this.command, this.args);\n        }\n        /**\n         * Whether the command item is enabled.\n         */\n        get isEnabled() {\n            return this._commands.isEnabled(this.command, this.args);\n        }\n        /**\n         * Whether the command item is toggled.\n         */\n        get isToggled() {\n            return this._commands.isToggled(this.command, this.args);\n        }\n        /**\n         * Whether the command item is toggleable.\n         */\n        get isToggleable() {\n            return this._commands.isToggleable(this.command, this.args);\n        }\n        /**\n         * Whether the command item is visible.\n         */\n        get isVisible() {\n            return this._commands.isVisible(this.command, this.args);\n        }\n        /**\n         * The key binding for the command item.\n         */\n        get keyBinding() {\n            let { command, args } = this;\n            return (ArrayExt.findLastValue(this._commands.keyBindings, kb => {\n                return kb.command === command && JSONExt.deepEqual(kb.args, args);\n            }) || null);\n        }\n    }\n})(Private$a || (Private$a = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which displays items as a canonical menu.\n */\nclass Menu extends Widget {\n    /**\n     * Construct a new menu.\n     *\n     * @param options - The options for initializing the menu.\n     */\n    constructor(options) {\n        super({ node: Private$9.createNode() });\n        this._childIndex = -1;\n        this._activeIndex = -1;\n        this._openTimerID = 0;\n        this._closeTimerID = 0;\n        this._items = [];\n        this._childMenu = null;\n        this._parentMenu = null;\n        this._aboutToClose = new Signal(this);\n        this._menuRequested = new Signal(this);\n        this.addClass('lm-Menu');\n        this.setFlag(Widget.Flag.DisallowLayout);\n        this.commands = options.commands;\n        this.renderer = options.renderer || Menu.defaultRenderer;\n    }\n    /**\n     * Dispose of the resources held by the menu.\n     */\n    dispose() {\n        this.close();\n        this._items.length = 0;\n        super.dispose();\n    }\n    /**\n     * A signal emitted just before the menu is closed.\n     *\n     * #### Notes\n     * This signal is emitted when the menu receives a `'close-request'`\n     * message, just before it removes itself from the DOM.\n     *\n     * This signal is not emitted if the menu is already detached from\n     * the DOM when it receives the `'close-request'` message.\n     */\n    get aboutToClose() {\n        return this._aboutToClose;\n    }\n    /**\n     * A signal emitted when a new menu is requested by the user.\n     *\n     * #### Notes\n     * This signal is emitted whenever the user presses the right or left\n     * arrow keys, and a submenu cannot be opened or closed in response.\n     *\n     * This signal is useful when implementing menu bars in order to open\n     * the next or previous menu in response to a user key press.\n     *\n     * This signal is only emitted for the root menu in a hierarchy.\n     */\n    get menuRequested() {\n        return this._menuRequested;\n    }\n    /**\n     * The parent menu of the menu.\n     *\n     * #### Notes\n     * This is `null` unless the menu is an open submenu.\n     */\n    get parentMenu() {\n        return this._parentMenu;\n    }\n    /**\n     * The child menu of the menu.\n     *\n     * #### Notes\n     * This is `null` unless the menu has an open submenu.\n     */\n    get childMenu() {\n        return this._childMenu;\n    }\n    /**\n     * The root menu of the menu hierarchy.\n     */\n    get rootMenu() {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        let menu = this;\n        while (menu._parentMenu) {\n            menu = menu._parentMenu;\n        }\n        return menu;\n    }\n    /**\n     * The leaf menu of the menu hierarchy.\n     */\n    get leafMenu() {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        let menu = this;\n        while (menu._childMenu) {\n            menu = menu._childMenu;\n        }\n        return menu;\n    }\n    /**\n     * The menu content node.\n     *\n     * #### Notes\n     * This is the node which holds the menu item nodes.\n     *\n     * Modifying this node directly can lead to undefined behavior.\n     */\n    get contentNode() {\n        return this.node.getElementsByClassName('lm-Menu-content')[0];\n    }\n    /**\n     * Get the currently active menu item.\n     */\n    get activeItem() {\n        return this._items[this._activeIndex] || null;\n    }\n    /**\n     * Set the currently active menu item.\n     *\n     * #### Notes\n     * If the item cannot be activated, the item will be set to `null`.\n     */\n    set activeItem(value) {\n        this.activeIndex = value ? this._items.indexOf(value) : -1;\n    }\n    /**\n     * Get the index of the currently active menu item.\n     *\n     * #### Notes\n     * This will be `-1` if no menu item is active.\n     */\n    get activeIndex() {\n        return this._activeIndex;\n    }\n    /**\n     * Set the index of the currently active menu item.\n     *\n     * #### Notes\n     * If the item cannot be activated, the index will be set to `-1`.\n     */\n    set activeIndex(value) {\n        // Adjust the value for an out of range index.\n        if (value < 0 || value >= this._items.length) {\n            value = -1;\n        }\n        // Ensure the item can be activated.\n        if (value !== -1 && !Private$9.canActivate(this._items[value])) {\n            value = -1;\n        }\n        // Bail if the index will not change.\n        if (this._activeIndex === value) {\n            return;\n        }\n        // Update the active index.\n        this._activeIndex = value;\n        // Make active element in focus\n        if (this._activeIndex >= 0 &&\n            this.contentNode.childNodes[this._activeIndex]) {\n            this.contentNode.childNodes[this._activeIndex].focus();\n        }\n        // schedule an update of the items.\n        this.update();\n    }\n    /**\n     * A read-only array of the menu items in the menu.\n     */\n    get items() {\n        return this._items;\n    }\n    /**\n     * Activate the next selectable item in the menu.\n     *\n     * #### Notes\n     * If no item is selectable, the index will be set to `-1`.\n     */\n    activateNextItem() {\n        let n = this._items.length;\n        let ai = this._activeIndex;\n        let start = ai < n - 1 ? ai + 1 : 0;\n        let stop = start === 0 ? n - 1 : start - 1;\n        this.activeIndex = ArrayExt.findFirstIndex(this._items, Private$9.canActivate, start, stop);\n    }\n    /**\n     * Activate the previous selectable item in the menu.\n     *\n     * #### Notes\n     * If no item is selectable, the index will be set to `-1`.\n     */\n    activatePreviousItem() {\n        let n = this._items.length;\n        let ai = this._activeIndex;\n        let start = ai <= 0 ? n - 1 : ai - 1;\n        let stop = start === n - 1 ? 0 : start + 1;\n        this.activeIndex = ArrayExt.findLastIndex(this._items, Private$9.canActivate, start, stop);\n    }\n    /**\n     * Trigger the active menu item.\n     *\n     * #### Notes\n     * If the active item is a submenu, it will be opened and the first\n     * item will be activated.\n     *\n     * If the active item is a command, the command will be executed.\n     *\n     * If the menu is not attached, this is a no-op.\n     *\n     * If there is no active item, this is a no-op.\n     */\n    triggerActiveItem() {\n        // Bail if the menu is not attached.\n        if (!this.isAttached) {\n            return;\n        }\n        // Bail if there is no active item.\n        let item = this.activeItem;\n        if (!item) {\n            return;\n        }\n        // Cancel the pending timers.\n        this._cancelOpenTimer();\n        this._cancelCloseTimer();\n        // If the item is a submenu, open it.\n        if (item.type === 'submenu') {\n            this._openChildMenu(true);\n            return;\n        }\n        // Close the root menu before executing the command.\n        this.rootMenu.close();\n        // Execute the command for the item.\n        let { command, args } = item;\n        if (this.commands.isEnabled(command, args)) {\n            this.commands.execute(command, args);\n        }\n        else {\n            console.log(`Command '${command}' is disabled.`);\n        }\n    }\n    /**\n     * Add a menu item to the end of the menu.\n     *\n     * @param options - The options for creating the menu item.\n     *\n     * @returns The menu item added to the menu.\n     */\n    addItem(options) {\n        return this.insertItem(this._items.length, options);\n    }\n    /**\n     * Insert a menu item into the menu at the specified index.\n     *\n     * @param index - The index at which to insert the item.\n     *\n     * @param options - The options for creating the menu item.\n     *\n     * @returns The menu item added to the menu.\n     *\n     * #### Notes\n     * The index will be clamped to the bounds of the items.\n     */\n    insertItem(index, options) {\n        // Close the menu if it's attached.\n        if (this.isAttached) {\n            this.close();\n        }\n        // Reset the active index.\n        this.activeIndex = -1;\n        // Clamp the insert index to the array bounds.\n        let i = Math.max(0, Math.min(index, this._items.length));\n        // Create the item for the options.\n        let item = Private$9.createItem(this, options);\n        // Insert the item into the array.\n        ArrayExt.insert(this._items, i, item);\n        // Schedule an update of the items.\n        this.update();\n        // Return the item added to the menu.\n        return item;\n    }\n    /**\n     * Remove an item from the menu.\n     *\n     * @param item - The item to remove from the menu.\n     *\n     * #### Notes\n     * This is a no-op if the item is not in the menu.\n     */\n    removeItem(item) {\n        this.removeItemAt(this._items.indexOf(item));\n    }\n    /**\n     * Remove the item at a given index from the menu.\n     *\n     * @param index - The index of the item to remove.\n     *\n     * #### Notes\n     * This is a no-op if the index is out of range.\n     */\n    removeItemAt(index) {\n        // Close the menu if it's attached.\n        if (this.isAttached) {\n            this.close();\n        }\n        // Reset the active index.\n        this.activeIndex = -1;\n        // Remove the item from the array.\n        let item = ArrayExt.removeAt(this._items, index);\n        // Bail if the index is out of range.\n        if (!item) {\n            return;\n        }\n        // Schedule an update of the items.\n        this.update();\n    }\n    /**\n     * Remove all menu items from the menu.\n     */\n    clearItems() {\n        // Close the menu if it's attached.\n        if (this.isAttached) {\n            this.close();\n        }\n        // Reset the active index.\n        this.activeIndex = -1;\n        // Bail if there is nothing to remove.\n        if (this._items.length === 0) {\n            return;\n        }\n        // Clear the items.\n        this._items.length = 0;\n        // Schedule an update of the items.\n        this.update();\n    }\n    /**\n     * Open the menu at the specified location.\n     *\n     * @param x - The client X coordinate of the menu location.\n     *\n     * @param y - The client Y coordinate of the menu location.\n     *\n     * @param options - The additional options for opening the menu.\n     *\n     * #### Notes\n     * The menu will be opened at the given location unless it will not\n     * fully fit on the screen. If it will not fit, it will be adjusted\n     * to fit naturally on the screen.\n     *\n     * The menu will be attached under the `host` element in the DOM\n     * (or `document.body` if `host` is `null`) and before the `ref`\n     * element (or as the last child of `host` if `ref` is `null`).\n     * The menu may be displayed outside of the `host` element\n     * following the rules of CSS absolute positioning.\n     *\n     * This is a no-op if the menu is already attached to the DOM.\n     */\n    open(x, y, options = {}) {\n        var _a, _b, _c;\n        // Bail early if the menu is already attached.\n        if (this.isAttached) {\n            return;\n        }\n        // Extract the menu options.\n        let forceX = options.forceX || false;\n        let forceY = options.forceY || false;\n        const host = (_a = options.host) !== null && _a !== void 0 ? _a : null;\n        const ref = (_b = options.ref) !== null && _b !== void 0 ? _b : null;\n        const horizontalAlignment = (_c = options.horizontalAlignment) !== null && _c !== void 0 ? _c : (document.documentElement.dir === 'rtl' ? 'right' : 'left');\n        // Open the menu as a root menu.\n        Private$9.openRootMenu(this, x, y, forceX, forceY, horizontalAlignment, host, ref);\n        // Activate the menu to accept keyboard input.\n        this.activate();\n    }\n    /**\n     * Handle the DOM events for the menu.\n     *\n     * @param event - The DOM event sent to the menu.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the menu's DOM nodes. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'keydown':\n                this._evtKeyDown(event);\n                break;\n            case 'mouseup':\n                this._evtMouseUp(event);\n                break;\n            case 'mousemove':\n                this._evtMouseMove(event);\n                break;\n            case 'mouseenter':\n                this._evtMouseEnter(event);\n                break;\n            case 'mouseleave':\n                this._evtMouseLeave(event);\n                break;\n            case 'mousedown':\n                this._evtMouseDown(event);\n                break;\n            case 'contextmenu':\n                event.preventDefault();\n                event.stopPropagation();\n                break;\n        }\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     */\n    onBeforeAttach(msg) {\n        this.node.addEventListener('keydown', this);\n        this.node.addEventListener('mouseup', this);\n        this.node.addEventListener('mousemove', this);\n        this.node.addEventListener('mouseenter', this);\n        this.node.addEventListener('mouseleave', this);\n        this.node.addEventListener('contextmenu', this);\n        document.addEventListener('mousedown', this, true);\n    }\n    /**\n     * A message handler invoked on an `'after-detach'` message.\n     */\n    onAfterDetach(msg) {\n        this.node.removeEventListener('keydown', this);\n        this.node.removeEventListener('mouseup', this);\n        this.node.removeEventListener('mousemove', this);\n        this.node.removeEventListener('mouseenter', this);\n        this.node.removeEventListener('mouseleave', this);\n        this.node.removeEventListener('contextmenu', this);\n        document.removeEventListener('mousedown', this, true);\n    }\n    /**\n     * A message handler invoked on an `'activate-request'` message.\n     */\n    onActivateRequest(msg) {\n        if (this.isAttached) {\n            this.node.focus();\n        }\n    }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     */\n    onUpdateRequest(msg) {\n        let items = this._items;\n        let renderer = this.renderer;\n        let activeIndex = this._activeIndex;\n        let collapsedFlags = Private$9.computeCollapsed(items);\n        let content = new Array(items.length);\n        for (let i = 0, n = items.length; i < n; ++i) {\n            let item = items[i];\n            let active = i === activeIndex;\n            let collapsed = collapsedFlags[i];\n            content[i] = renderer.renderItem({\n                item,\n                active,\n                collapsed,\n                onfocus: () => {\n                    this.activeIndex = i;\n                }\n            });\n        }\n        VirtualDOM.render(content, this.contentNode);\n    }\n    /**\n     * A message handler invoked on a `'close-request'` message.\n     */\n    onCloseRequest(msg) {\n        // Cancel the pending timers.\n        this._cancelOpenTimer();\n        this._cancelCloseTimer();\n        // Reset the active index.\n        this.activeIndex = -1;\n        // Close any open child menu.\n        let childMenu = this._childMenu;\n        if (childMenu) {\n            this._childIndex = -1;\n            this._childMenu = null;\n            childMenu._parentMenu = null;\n            childMenu.close();\n        }\n        // Remove this menu from its parent and activate the parent.\n        let parentMenu = this._parentMenu;\n        if (parentMenu) {\n            this._parentMenu = null;\n            parentMenu._childIndex = -1;\n            parentMenu._childMenu = null;\n            parentMenu.activate();\n        }\n        // Emit the `aboutToClose` signal if the menu is attached.\n        if (this.isAttached) {\n            this._aboutToClose.emit(undefined);\n        }\n        // Finish closing the menu.\n        super.onCloseRequest(msg);\n    }\n    /**\n     * Handle the `'keydown'` event for the menu.\n     *\n     * #### Notes\n     * This listener is attached to the menu node.\n     */\n    _evtKeyDown(event) {\n        // A menu handles all keydown events.\n        event.preventDefault();\n        event.stopPropagation();\n        // Fetch the key code for the event.\n        let kc = event.keyCode;\n        // Enter\n        if (kc === 13) {\n            this.triggerActiveItem();\n            return;\n        }\n        // Escape\n        if (kc === 27) {\n            this.close();\n            return;\n        }\n        // Left Arrow\n        if (kc === 37) {\n            if (this._parentMenu) {\n                this.close();\n            }\n            else {\n                this._menuRequested.emit('previous');\n            }\n            return;\n        }\n        // Up Arrow\n        if (kc === 38) {\n            this.activatePreviousItem();\n            return;\n        }\n        // Right Arrow\n        if (kc === 39) {\n            let item = this.activeItem;\n            if (item && item.type === 'submenu') {\n                this.triggerActiveItem();\n            }\n            else {\n                this.rootMenu._menuRequested.emit('next');\n            }\n            return;\n        }\n        // Down Arrow\n        if (kc === 40) {\n            this.activateNextItem();\n            return;\n        }\n        // Get the pressed key character.\n        let key = getKeyboardLayout().keyForKeydownEvent(event);\n        // Bail if the key is not valid.\n        if (!key) {\n            return;\n        }\n        // Search for the next best matching mnemonic item.\n        let start = this._activeIndex + 1;\n        let result = Private$9.findMnemonic(this._items, key, start);\n        // Handle the requested mnemonic based on the search results.\n        // If exactly one mnemonic is matched, that item is triggered.\n        // Otherwise, the next mnemonic is activated if available,\n        // followed by the auto mnemonic if available.\n        if (result.index !== -1 && !result.multiple) {\n            this.activeIndex = result.index;\n            this.triggerActiveItem();\n        }\n        else if (result.index !== -1) {\n            this.activeIndex = result.index;\n        }\n        else if (result.auto !== -1) {\n            this.activeIndex = result.auto;\n        }\n    }\n    /**\n     * Handle the `'mouseup'` event for the menu.\n     *\n     * #### Notes\n     * This listener is attached to the menu node.\n     */\n    _evtMouseUp(event) {\n        if (event.button !== 0) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        this.triggerActiveItem();\n    }\n    /**\n     * Handle the `'mousemove'` event for the menu.\n     *\n     * #### Notes\n     * This listener is attached to the menu node.\n     */\n    _evtMouseMove(event) {\n        // Hit test the item nodes for the item under the mouse.\n        let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n            return ElementExt.hitTest(node, event.clientX, event.clientY);\n        });\n        // Bail early if the mouse is already over the active index.\n        if (index === this._activeIndex) {\n            return;\n        }\n        // Update and coerce the active index.\n        this.activeIndex = index;\n        index = this.activeIndex;\n        // If the index is the current child index, cancel the timers.\n        if (index === this._childIndex) {\n            this._cancelOpenTimer();\n            this._cancelCloseTimer();\n            return;\n        }\n        // If a child menu is currently open, start the close timer.\n        if (this._childIndex !== -1) {\n            this._startCloseTimer();\n        }\n        // Cancel the open timer to give a full delay for opening.\n        this._cancelOpenTimer();\n        // Bail if the active item is not a valid submenu item.\n        let item = this.activeItem;\n        if (!item || item.type !== 'submenu' || !item.submenu) {\n            return;\n        }\n        // Start the open timer to open the active item submenu.\n        this._startOpenTimer();\n    }\n    /**\n     * Handle the `'mouseenter'` event for the menu.\n     *\n     * #### Notes\n     * This listener is attached to the menu node.\n     */\n    _evtMouseEnter(event) {\n        // Synchronize the active ancestor items.\n        for (let menu = this._parentMenu; menu; menu = menu._parentMenu) {\n            menu._cancelOpenTimer();\n            menu._cancelCloseTimer();\n            menu.activeIndex = menu._childIndex;\n        }\n    }\n    /**\n     * Handle the `'mouseleave'` event for the menu.\n     *\n     * #### Notes\n     * This listener is attached to the menu node.\n     */\n    _evtMouseLeave(event) {\n        // Cancel any pending submenu opening.\n        this._cancelOpenTimer();\n        // If there is no open child menu, just reset the active index.\n        if (!this._childMenu) {\n            this.activeIndex = -1;\n            return;\n        }\n        // If the mouse is over the child menu, cancel the close timer.\n        let { clientX, clientY } = event;\n        if (ElementExt.hitTest(this._childMenu.node, clientX, clientY)) {\n            this._cancelCloseTimer();\n            return;\n        }\n        // Otherwise, reset the active index and start the close timer.\n        this.activeIndex = -1;\n        this._startCloseTimer();\n    }\n    /**\n     * Handle the `'mousedown'` event for the menu.\n     *\n     * #### Notes\n     * This listener is attached to the document node.\n     */\n    _evtMouseDown(event) {\n        // Bail if the menu is not a root menu.\n        if (this._parentMenu) {\n            return;\n        }\n        // The mouse button which is pressed is irrelevant. If the press\n        // is not on a menu, the entire hierarchy is closed and the event\n        // is allowed to propagate. This allows other code to act on the\n        // event, such as focusing the clicked element.\n        if (Private$9.hitTestMenus(this, event.clientX, event.clientY)) {\n            event.preventDefault();\n            event.stopPropagation();\n        }\n        else {\n            this.close();\n        }\n    }\n    /**\n     * Open the child menu at the active index immediately.\n     *\n     * If a different child menu is already open, it will be closed,\n     * even if the active item is not a valid submenu.\n     */\n    _openChildMenu(activateFirst = false) {\n        // If the item is not a valid submenu, close the child menu.\n        let item = this.activeItem;\n        if (!item || item.type !== 'submenu' || !item.submenu) {\n            this._closeChildMenu();\n            return;\n        }\n        // Do nothing if the child menu will not change.\n        let submenu = item.submenu;\n        if (submenu === this._childMenu) {\n            return;\n        }\n        // Prior to any DOM modifications save window data\n        Menu.saveWindowData();\n        // Ensure the current child menu is closed.\n        this._closeChildMenu();\n        // Update the private child state.\n        this._childMenu = submenu;\n        this._childIndex = this._activeIndex;\n        // Set the parent menu reference for the child.\n        submenu._parentMenu = this;\n        // Ensure the menu is updated and lookup the item node.\n        MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n        let itemNode = this.contentNode.children[this._activeIndex];\n        // Open the submenu at the active node.\n        Private$9.openSubmenu(submenu, itemNode);\n        // Activate the first item if desired.\n        if (activateFirst) {\n            submenu.activeIndex = -1;\n            submenu.activateNextItem();\n        }\n        // Activate the child menu.\n        submenu.activate();\n    }\n    /**\n     * Close the child menu immediately.\n     *\n     * This is a no-op if a child menu is not open.\n     */\n    _closeChildMenu() {\n        if (this._childMenu) {\n            this._childMenu.close();\n        }\n    }\n    /**\n     * Start the open timer, unless it is already pending.\n     */\n    _startOpenTimer() {\n        if (this._openTimerID === 0) {\n            this._openTimerID = window.setTimeout(() => {\n                this._openTimerID = 0;\n                this._openChildMenu();\n            }, Private$9.TIMER_DELAY);\n        }\n    }\n    /**\n     * Start the close timer, unless it is already pending.\n     */\n    _startCloseTimer() {\n        if (this._closeTimerID === 0) {\n            this._closeTimerID = window.setTimeout(() => {\n                this._closeTimerID = 0;\n                this._closeChildMenu();\n            }, Private$9.TIMER_DELAY);\n        }\n    }\n    /**\n     * Cancel the open timer, if the timer is pending.\n     */\n    _cancelOpenTimer() {\n        if (this._openTimerID !== 0) {\n            clearTimeout(this._openTimerID);\n            this._openTimerID = 0;\n        }\n    }\n    /**\n     * Cancel the close timer, if the timer is pending.\n     */\n    _cancelCloseTimer() {\n        if (this._closeTimerID !== 0) {\n            clearTimeout(this._closeTimerID);\n            this._closeTimerID = 0;\n        }\n    }\n    /**\n     * Save window data used for menu positioning in transient cache.\n     *\n     * In order to avoid layout trashing it is recommended to invoke this\n     * method immediately prior to opening the menu and any DOM modifications\n     * (like closing previously visible menu, or adding a class to menu widget).\n     *\n     * The transient cache will be released upon `open()` call.\n     */\n    static saveWindowData() {\n        Private$9.saveWindowData();\n    }\n}\n/**\n * The namespace for the `Menu` class statics.\n */\n(function (Menu) {\n    /**\n     * The default implementation of `IRenderer`.\n     *\n     * #### Notes\n     * Subclasses are free to reimplement rendering methods as needed.\n     */\n    class Renderer {\n        /**\n         * Render the virtual element for a menu item.\n         *\n         * @param data - The data to use for rendering the item.\n         *\n         * @returns A virtual element representing the item.\n         */\n        renderItem(data) {\n            let className = this.createItemClass(data);\n            let dataset = this.createItemDataset(data);\n            let aria = this.createItemARIA(data);\n            return h.li({\n                className,\n                dataset,\n                tabindex: '0',\n                onfocus: data.onfocus,\n                ...aria\n            }, this.renderIcon(data), this.renderLabel(data), this.renderShortcut(data), this.renderSubmenu(data));\n        }\n        /**\n         * Render the icon element for a menu item.\n         *\n         * @param data - The data to use for rendering the icon.\n         *\n         * @returns A virtual element representing the item icon.\n         */\n        renderIcon(data) {\n            let className = this.createIconClass(data);\n            // If data.item.icon is undefined, it will be ignored.\n            return h.div({ className }, data.item.icon, data.item.iconLabel);\n        }\n        /**\n         * Render the label element for a menu item.\n         *\n         * @param data - The data to use for rendering the label.\n         *\n         * @returns A virtual element representing the item label.\n         */\n        renderLabel(data) {\n            let content = this.formatLabel(data);\n            return h.div({ className: 'lm-Menu-itemLabel' }, content);\n        }\n        /**\n         * Render the shortcut element for a menu item.\n         *\n         * @param data - The data to use for rendering the shortcut.\n         *\n         * @returns A virtual element representing the item shortcut.\n         */\n        renderShortcut(data) {\n            let content = this.formatShortcut(data);\n            return h.div({ className: 'lm-Menu-itemShortcut' }, content);\n        }\n        /**\n         * Render the submenu icon element for a menu item.\n         *\n         * @param data - The data to use for rendering the submenu icon.\n         *\n         * @returns A virtual element representing the submenu icon.\n         */\n        renderSubmenu(data) {\n            return h.div({ className: 'lm-Menu-itemSubmenuIcon' });\n        }\n        /**\n         * Create the class name for the menu item.\n         *\n         * @param data - The data to use for the class name.\n         *\n         * @returns The full class name for the menu item.\n         */\n        createItemClass(data) {\n            // Setup the initial class name.\n            let name = 'lm-Menu-item';\n            // Add the boolean state classes.\n            if (!data.item.isEnabled) {\n                name += ' lm-mod-disabled';\n            }\n            if (data.item.isToggled) {\n                name += ' lm-mod-toggled';\n            }\n            if (!data.item.isVisible) {\n                name += ' lm-mod-hidden';\n            }\n            if (data.active) {\n                name += ' lm-mod-active';\n            }\n            if (data.collapsed) {\n                name += ' lm-mod-collapsed';\n            }\n            // Add the extra class.\n            let extra = data.item.className;\n            if (extra) {\n                name += ` ${extra}`;\n            }\n            // Return the complete class name.\n            return name;\n        }\n        /**\n         * Create the dataset for the menu item.\n         *\n         * @param data - The data to use for creating the dataset.\n         *\n         * @returns The dataset for the menu item.\n         */\n        createItemDataset(data) {\n            let result;\n            let { type, command, dataset } = data.item;\n            if (type === 'command') {\n                result = { ...dataset, type, command };\n            }\n            else {\n                result = { ...dataset, type };\n            }\n            return result;\n        }\n        /**\n         * Create the class name for the menu item icon.\n         *\n         * @param data - The data to use for the class name.\n         *\n         * @returns The full class name for the item icon.\n         */\n        createIconClass(data) {\n            let name = 'lm-Menu-itemIcon';\n            let extra = data.item.iconClass;\n            return extra ? `${name} ${extra}` : name;\n        }\n        /**\n         * Create the aria attributes for menu item.\n         *\n         * @param data - The data to use for the aria attributes.\n         *\n         * @returns The aria attributes object for the item.\n         */\n        createItemARIA(data) {\n            let aria = {};\n            switch (data.item.type) {\n                case 'separator':\n                    aria.role = 'presentation';\n                    break;\n                case 'submenu':\n                    aria['aria-haspopup'] = 'true';\n                    if (!data.item.isEnabled) {\n                        aria['aria-disabled'] = 'true';\n                    }\n                    break;\n                default:\n                    if (!data.item.isEnabled) {\n                        aria['aria-disabled'] = 'true';\n                    }\n                    if (data.item.isToggled) {\n                        aria.role = 'menuitemcheckbox';\n                        aria['aria-checked'] = 'true';\n                    }\n                    else {\n                        aria.role = 'menuitem';\n                    }\n            }\n            return aria;\n        }\n        /**\n         * Create the render content for the label node.\n         *\n         * @param data - The data to use for the label content.\n         *\n         * @returns The content to add to the label node.\n         */\n        formatLabel(data) {\n            // Fetch the label text and mnemonic index.\n            let { label, mnemonic } = data.item;\n            // If the index is out of range, do not modify the label.\n            if (mnemonic < 0 || mnemonic >= label.length) {\n                return label;\n            }\n            // Split the label into parts.\n            let prefix = label.slice(0, mnemonic);\n            let suffix = label.slice(mnemonic + 1);\n            let char = label[mnemonic];\n            // Wrap the mnemonic character in a span.\n            let span = h.span({ className: 'lm-Menu-itemMnemonic' }, char);\n            // Return the content parts.\n            return [prefix, span, suffix];\n        }\n        /**\n         * Create the render content for the shortcut node.\n         *\n         * @param data - The data to use for the shortcut content.\n         *\n         * @returns The content to add to the shortcut node.\n         */\n        formatShortcut(data) {\n            let kb = data.item.keyBinding;\n            return kb ? CommandRegistry.formatKeystroke(kb.keys) : null;\n        }\n    }\n    Menu.Renderer = Renderer;\n    /**\n     * The default `Renderer` instance.\n     */\n    Menu.defaultRenderer = new Renderer();\n})(Menu || (Menu = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$9;\n(function (Private) {\n    /**\n     * The ms delay for opening and closing a submenu.\n     */\n    Private.TIMER_DELAY = 300;\n    /**\n     * The horizontal pixel overlap for an open submenu.\n     */\n    Private.SUBMENU_OVERLAP = 3;\n    let transientWindowDataCache = null;\n    let transientCacheCounter = 0;\n    function getWindowData() {\n        // if transient cache is in use, take one from it\n        if (transientCacheCounter > 0) {\n            transientCacheCounter--;\n            return transientWindowDataCache;\n        }\n        return _getWindowData();\n    }\n    /**\n     * Store window data in transient cache.\n     *\n     * The transient cache will be released upon `getWindowData()` call.\n     * If this function is called multiple times, the cache will be\n     * retained until as many calls to `getWindowData()` were made.\n     *\n     * Note: should be called before any DOM modifications.\n     */\n    function saveWindowData() {\n        transientWindowDataCache = _getWindowData();\n        transientCacheCounter++;\n    }\n    Private.saveWindowData = saveWindowData;\n    /**\n     * Create the DOM node for a menu.\n     */\n    function createNode() {\n        let node = document.createElement('div');\n        let content = document.createElement('ul');\n        content.className = 'lm-Menu-content';\n        node.appendChild(content);\n        content.setAttribute('role', 'menu');\n        node.tabIndex = 0;\n        return node;\n    }\n    Private.createNode = createNode;\n    /**\n     * Test whether a menu item can be activated.\n     */\n    function canActivate(item) {\n        return item.type !== 'separator' && item.isEnabled && item.isVisible;\n    }\n    Private.canActivate = canActivate;\n    /**\n     * Create a new menu item for an owner menu.\n     */\n    function createItem(owner, options) {\n        return new MenuItem(owner.commands, options);\n    }\n    Private.createItem = createItem;\n    /**\n     * Hit test a menu hierarchy starting at the given root.\n     */\n    function hitTestMenus(menu, x, y) {\n        for (let temp = menu; temp; temp = temp.childMenu) {\n            if (ElementExt.hitTest(temp.node, x, y)) {\n                return true;\n            }\n        }\n        return false;\n    }\n    Private.hitTestMenus = hitTestMenus;\n    /**\n     * Compute which extra separator items should be collapsed.\n     */\n    function computeCollapsed(items) {\n        // Allocate the return array and fill it with `false`.\n        let result = new Array(items.length);\n        ArrayExt.fill(result, false);\n        // Collapse the leading separators.\n        let k1 = 0;\n        let n = items.length;\n        for (; k1 < n; ++k1) {\n            let item = items[k1];\n            if (!item.isVisible) {\n                continue;\n            }\n            if (item.type !== 'separator') {\n                break;\n            }\n            result[k1] = true;\n        }\n        // Hide the trailing separators.\n        let k2 = n - 1;\n        for (; k2 >= 0; --k2) {\n            let item = items[k2];\n            if (!item.isVisible) {\n                continue;\n            }\n            if (item.type !== 'separator') {\n                break;\n            }\n            result[k2] = true;\n        }\n        // Hide the remaining consecutive separators.\n        let hide = false;\n        while (++k1 < k2) {\n            let item = items[k1];\n            if (!item.isVisible) {\n                continue;\n            }\n            if (item.type !== 'separator') {\n                hide = false;\n            }\n            else if (hide) {\n                result[k1] = true;\n            }\n            else {\n                hide = true;\n            }\n        }\n        // Return the resulting flags.\n        return result;\n    }\n    Private.computeCollapsed = computeCollapsed;\n    function _getWindowData() {\n        return {\n            pageXOffset: window.pageXOffset,\n            pageYOffset: window.pageYOffset,\n            clientWidth: document.documentElement.clientWidth,\n            clientHeight: document.documentElement.clientHeight\n        };\n    }\n    /**\n     * Open a menu as a root menu at the target location.\n     */\n    function openRootMenu(menu, x, y, forceX, forceY, horizontalAlignment, host, ref) {\n        // Get the current position and size of the main viewport.\n        const windowData = getWindowData();\n        let px = windowData.pageXOffset;\n        let py = windowData.pageYOffset;\n        let cw = windowData.clientWidth;\n        let ch = windowData.clientHeight;\n        // Ensure the menu is updated before attaching and measuring.\n        MessageLoop.sendMessage(menu, Widget.Msg.UpdateRequest);\n        // Compute the maximum allowed height for the menu.\n        let maxHeight = ch - (forceY ? y : 0);\n        // Fetch common variables.\n        let node = menu.node;\n        let style = node.style;\n        // Clear the menu geometry and prepare it for measuring.\n        style.opacity = '0';\n        style.maxHeight = `${maxHeight}px`;\n        // Attach the menu to the document.\n        Widget.attach(menu, host || document.body, ref);\n        // Measure the size of the menu.\n        let { width, height } = node.getBoundingClientRect();\n        // align the menu to the right of the target if requested or language is RTL\n        if (horizontalAlignment === 'right') {\n            x -= width;\n        }\n        // Adjust the X position of the menu to fit on-screen.\n        if (!forceX && x + width > px + cw) {\n            x = px + cw - width;\n        }\n        // Adjust the Y position of the menu to fit on-screen.\n        if (!forceY && y + height > py + ch) {\n            if (y > py + ch) {\n                y = py + ch - height;\n            }\n            else {\n                y = y - height;\n            }\n        }\n        // Update the position of the menu to the computed position.\n        style.transform = `translate(${Math.max(0, x)}px, ${Math.max(0, y)}px`;\n        // Finally, make the menu visible on the screen.\n        style.opacity = '1';\n    }\n    Private.openRootMenu = openRootMenu;\n    /**\n     * Open a menu as a submenu using an item node for positioning.\n     */\n    function openSubmenu(submenu, itemNode) {\n        // Get the current position and size of the main viewport.\n        const windowData = getWindowData();\n        let px = windowData.pageXOffset;\n        let py = windowData.pageYOffset;\n        let cw = windowData.clientWidth;\n        let ch = windowData.clientHeight;\n        // Ensure the menu is updated before opening.\n        MessageLoop.sendMessage(submenu, Widget.Msg.UpdateRequest);\n        // Compute the maximum allowed height for the menu.\n        let maxHeight = ch;\n        // Fetch common variables.\n        let node = submenu.node;\n        let style = node.style;\n        // Clear the menu geometry and prepare it for measuring.\n        style.opacity = '0';\n        style.maxHeight = `${maxHeight}px`;\n        // Attach the menu to the document.\n        Widget.attach(submenu, document.body);\n        // Measure the size of the menu.\n        let { width, height } = node.getBoundingClientRect();\n        // Compute the box sizing for the menu.\n        let box = ElementExt.boxSizing(submenu.node);\n        // Get the bounding rect for the target item node.\n        let itemRect = itemNode.getBoundingClientRect();\n        // Compute the target X position.\n        let x = itemRect.right - Private.SUBMENU_OVERLAP;\n        // Adjust the X position to fit on the screen.\n        if (x + width > px + cw) {\n            x = itemRect.left + Private.SUBMENU_OVERLAP - width;\n        }\n        // Compute the target Y position.\n        let y = itemRect.top - box.borderTop - box.paddingTop;\n        // Adjust the Y position to fit on the screen.\n        if (y + height > py + ch) {\n            y = itemRect.bottom + box.borderBottom + box.paddingBottom - height;\n        }\n        // Update the position of the menu to the computed position.\n        style.transform = `translate(${Math.max(0, x)}px, ${Math.max(0, y)}px`;\n        // Finally, make the menu visible on the screen.\n        style.opacity = '1';\n    }\n    Private.openSubmenu = openSubmenu;\n    /**\n     * Find the best matching mnemonic item.\n     *\n     * The search starts at the given index and wraps around.\n     */\n    function findMnemonic(items, key, start) {\n        // Setup the result variables.\n        let index = -1;\n        let auto = -1;\n        let multiple = false;\n        // Normalize the key to upper case.\n        let upperKey = key.toUpperCase();\n        // Search the items from the given start index.\n        for (let i = 0, n = items.length; i < n; ++i) {\n            // Compute the wrapped index.\n            let k = (i + start) % n;\n            // Lookup the item\n            let item = items[k];\n            // Ignore items which cannot be activated.\n            if (!canActivate(item)) {\n                continue;\n            }\n            // Ignore items with an empty label.\n            let label = item.label;\n            if (label.length === 0) {\n                continue;\n            }\n            // Lookup the mnemonic index for the label.\n            let mn = item.mnemonic;\n            // Handle a valid mnemonic index.\n            if (mn >= 0 && mn < label.length) {\n                if (label[mn].toUpperCase() === upperKey) {\n                    if (index === -1) {\n                        index = k;\n                    }\n                    else {\n                        multiple = true;\n                    }\n                }\n                continue;\n            }\n            // Finally, handle the auto index if possible.\n            if (auto === -1 && label[0].toUpperCase() === upperKey) {\n                auto = k;\n            }\n        }\n        // Return the search results.\n        return { index, multiple, auto };\n    }\n    Private.findMnemonic = findMnemonic;\n    /**\n     * A concrete implementation of `Menu.IItem`.\n     */\n    class MenuItem {\n        /**\n         * Construct a new menu item.\n         */\n        constructor(commands, options) {\n            this._commands = commands;\n            this.type = options.type || 'command';\n            this.command = options.command || '';\n            this.args = options.args || JSONExt.emptyObject;\n            this.submenu = options.submenu || null;\n        }\n        /**\n         * The display label for the menu item.\n         */\n        get label() {\n            if (this.type === 'command') {\n                return this._commands.label(this.command, this.args);\n            }\n            if (this.type === 'submenu' && this.submenu) {\n                return this.submenu.title.label;\n            }\n            return '';\n        }\n        /**\n         * The mnemonic index for the menu item.\n         */\n        get mnemonic() {\n            if (this.type === 'command') {\n                return this._commands.mnemonic(this.command, this.args);\n            }\n            if (this.type === 'submenu' && this.submenu) {\n                return this.submenu.title.mnemonic;\n            }\n            return -1;\n        }\n        /**\n         * The icon renderer for the menu item.\n         */\n        get icon() {\n            if (this.type === 'command') {\n                return this._commands.icon(this.command, this.args);\n            }\n            if (this.type === 'submenu' && this.submenu) {\n                return this.submenu.title.icon;\n            }\n            return undefined;\n        }\n        /**\n         * The icon class for the menu item.\n         */\n        get iconClass() {\n            if (this.type === 'command') {\n                return this._commands.iconClass(this.command, this.args);\n            }\n            if (this.type === 'submenu' && this.submenu) {\n                return this.submenu.title.iconClass;\n            }\n            return '';\n        }\n        /**\n         * The icon label for the menu item.\n         */\n        get iconLabel() {\n            if (this.type === 'command') {\n                return this._commands.iconLabel(this.command, this.args);\n            }\n            if (this.type === 'submenu' && this.submenu) {\n                return this.submenu.title.iconLabel;\n            }\n            return '';\n        }\n        /**\n         * The display caption for the menu item.\n         */\n        get caption() {\n            if (this.type === 'command') {\n                return this._commands.caption(this.command, this.args);\n            }\n            if (this.type === 'submenu' && this.submenu) {\n                return this.submenu.title.caption;\n            }\n            return '';\n        }\n        /**\n         * The extra class name for the menu item.\n         */\n        get className() {\n            if (this.type === 'command') {\n                return this._commands.className(this.command, this.args);\n            }\n            if (this.type === 'submenu' && this.submenu) {\n                return this.submenu.title.className;\n            }\n            return '';\n        }\n        /**\n         * The dataset for the menu item.\n         */\n        get dataset() {\n            if (this.type === 'command') {\n                return this._commands.dataset(this.command, this.args);\n            }\n            if (this.type === 'submenu' && this.submenu) {\n                return this.submenu.title.dataset;\n            }\n            return {};\n        }\n        /**\n         * Whether the menu item is enabled.\n         */\n        get isEnabled() {\n            if (this.type === 'command') {\n                return this._commands.isEnabled(this.command, this.args);\n            }\n            if (this.type === 'submenu') {\n                return this.submenu !== null;\n            }\n            return true;\n        }\n        /**\n         * Whether the menu item is toggled.\n         */\n        get isToggled() {\n            if (this.type === 'command') {\n                return this._commands.isToggled(this.command, this.args);\n            }\n            return false;\n        }\n        /**\n         * Whether the menu item is visible.\n         */\n        get isVisible() {\n            if (this.type === 'command') {\n                return this._commands.isVisible(this.command, this.args);\n            }\n            if (this.type === 'submenu') {\n                return this.submenu !== null;\n            }\n            return true;\n        }\n        /**\n         * The key binding for the menu item.\n         */\n        get keyBinding() {\n            if (this.type === 'command') {\n                let { command, args } = this;\n                return (ArrayExt.findLastValue(this._commands.keyBindings, kb => {\n                    return kb.command === command && JSONExt.deepEqual(kb.args, args);\n                }) || null);\n            }\n            return null;\n        }\n    }\n})(Private$9 || (Private$9 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * An object which implements a universal context menu.\n *\n * #### Notes\n * The items shown in the context menu are determined by CSS selector\n * matching against the DOM hierarchy at the site of the mouse click.\n * This is similar in concept to how keyboard shortcuts are matched\n * in the command registry.\n */\nclass ContextMenu {\n    /**\n     * Construct a new context menu.\n     *\n     * @param options - The options for initializing the menu.\n     */\n    constructor(options) {\n        this._groupByTarget = true;\n        this._idTick = 0;\n        this._items = [];\n        this._sortBySelector = true;\n        const { groupByTarget, sortBySelector, ...others } = options;\n        this.menu = new Menu(others);\n        this._groupByTarget = groupByTarget !== false;\n        this._sortBySelector = sortBySelector !== false;\n    }\n    /**\n     * Add an item to the context menu.\n     *\n     * @param options - The options for creating the item.\n     *\n     * @returns A disposable which will remove the item from the menu.\n     */\n    addItem(options) {\n        // Create an item from the given options.\n        let item = Private$8.createItem(options, this._idTick++);\n        // Add the item to the internal array.\n        this._items.push(item);\n        // Return a disposable which will remove the item.\n        return new DisposableDelegate(() => {\n            ArrayExt.removeFirstOf(this._items, item);\n        });\n    }\n    /**\n     * Open the context menu in response to a `'contextmenu'` event.\n     *\n     * @param event - The `'contextmenu'` event of interest.\n     *\n     * @returns `true` if the menu was opened, or `false` if no items\n     *   matched the event and the menu was not opened.\n     *\n     * #### Notes\n     * This method will populate the context menu with items which match\n     * the propagation path of the event, then open the menu at the mouse\n     * position indicated by the event.\n     */\n    open(event) {\n        // Prior to any DOM modifications update the window data.\n        Menu.saveWindowData();\n        // Clear the current contents of the context menu.\n        this.menu.clearItems();\n        // Bail early if there are no items to match.\n        if (this._items.length === 0) {\n            return false;\n        }\n        // Find the matching items for the event.\n        let items = Private$8.matchItems(this._items, event, this._groupByTarget, this._sortBySelector);\n        // Bail if there are no matching items.\n        if (!items || items.length === 0) {\n            return false;\n        }\n        // Add the filtered items to the menu.\n        for (const item of items) {\n            this.menu.addItem(item);\n        }\n        // Open the context menu at the current mouse position.\n        this.menu.open(event.clientX, event.clientY);\n        // Indicate success.\n        return true;\n    }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$8;\n(function (Private) {\n    /**\n     * Create a normalized context menu item from an options object.\n     */\n    function createItem(options, id) {\n        let selector = validateSelector(options.selector);\n        let rank = options.rank !== undefined ? options.rank : Infinity;\n        return { ...options, selector, rank, id };\n    }\n    Private.createItem = createItem;\n    /**\n     * Find the items which match a context menu event.\n     *\n     * The results are sorted by DOM level, specificity, and rank.\n     */\n    function matchItems(items, event, groupByTarget, sortBySelector) {\n        // Look up the target of the event.\n        let target = event.target;\n        // Bail if there is no target.\n        if (!target) {\n            return null;\n        }\n        // Look up the current target of the event.\n        let currentTarget = event.currentTarget;\n        // Bail if there is no current target.\n        if (!currentTarget) {\n            return null;\n        }\n        // There are some third party libraries that cause the `target` to\n        // be detached from the DOM before lumino can process the event.\n        // If that happens, search for a new target node by point. If that\n        // node is still dangling, bail.\n        if (!currentTarget.contains(target)) {\n            target = document.elementFromPoint(event.clientX, event.clientY);\n            if (!target || !currentTarget.contains(target)) {\n                return null;\n            }\n        }\n        // Set up the result array.\n        let result = [];\n        // Copy the items array to allow in-place modification.\n        let availableItems = items.slice();\n        // Walk up the DOM hierarchy searching for matches.\n        while (target !== null) {\n            // Set up the match array for this DOM level.\n            let matches = [];\n            // Search the remaining items for matches.\n            for (let i = 0, n = availableItems.length; i < n; ++i) {\n                // Fetch the item.\n                let item = availableItems[i];\n                // Skip items which are already consumed.\n                if (!item) {\n                    continue;\n                }\n                // Skip items which do not match the element.\n                if (!Selector.matches(target, item.selector)) {\n                    continue;\n                }\n                // Add the matched item to the result for this DOM level.\n                matches.push(item);\n                // Mark the item as consumed.\n                availableItems[i] = null;\n            }\n            // Sort the matches for this level and add them to the results.\n            if (matches.length !== 0) {\n                if (groupByTarget) {\n                    matches.sort(sortBySelector ? itemCmp : itemCmpRank);\n                }\n                result.push(...matches);\n            }\n            // Stop searching at the limits of the DOM range.\n            if (target === currentTarget) {\n                break;\n            }\n            // Step to the parent DOM level.\n            target = target.parentElement;\n        }\n        if (!groupByTarget) {\n            result.sort(sortBySelector ? itemCmp : itemCmpRank);\n        }\n        // Return the matched and sorted results.\n        return result;\n    }\n    Private.matchItems = matchItems;\n    /**\n     * Validate the selector for a menu item.\n     *\n     * This returns the validated selector, or throws if the selector is\n     * invalid or contains commas.\n     */\n    function validateSelector(selector) {\n        if (selector.indexOf(',') !== -1) {\n            throw new Error(`Selector cannot contain commas: ${selector}`);\n        }\n        if (!Selector.isValid(selector)) {\n            throw new Error(`Invalid selector: ${selector}`);\n        }\n        return selector;\n    }\n    /**\n     * A sort comparison function for a context menu item by ranks.\n     */\n    function itemCmpRank(a, b) {\n        // Sort based on rank.\n        let r1 = a.rank;\n        let r2 = b.rank;\n        if (r1 !== r2) {\n            return r1 < r2 ? -1 : 1; // Infinity-safe\n        }\n        // When all else fails, sort by item id.\n        return a.id - b.id;\n    }\n    /**\n     * A sort comparison function for a context menu item by selectors and ranks.\n     */\n    function itemCmp(a, b) {\n        // Sort first based on selector specificity.\n        let s1 = Selector.calculateSpecificity(a.selector);\n        let s2 = Selector.calculateSpecificity(b.selector);\n        if (s1 !== s2) {\n            return s2 - s1;\n        }\n        // If specificities are equal\n        return itemCmpRank(a, b);\n    }\n})(Private$8 || (Private$8 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nconst ARROW_KEYS = [\n    'ArrowLeft',\n    'ArrowUp',\n    'ArrowRight',\n    'ArrowDown',\n    'Home',\n    'End'\n];\n/**\n * A widget which displays titles as a single row or column of tabs.\n *\n * #### Notes\n * If CSS transforms are used to rotate nodes for vertically oriented\n * text, then tab dragging will not work correctly. The `tabsMovable`\n * property should be set to `false` when rotating nodes from CSS.\n */\nclass TabBar extends Widget {\n    /**\n     * Construct a new tab bar.\n     *\n     * @param options - The options for initializing the tab bar.\n     */\n    constructor(options = {}) {\n        super({ node: Private$7.createNode() });\n        this._currentIndex = -1;\n        this._titles = [];\n        this._titlesEditable = false;\n        this._previousTitle = null;\n        this._dragData = null;\n        this._addButtonEnabled = false;\n        this._tabMoved = new Signal(this);\n        this._currentChanged = new Signal(this);\n        this._addRequested = new Signal(this);\n        this._tabCloseRequested = new Signal(this);\n        this._tabDetachRequested = new Signal(this);\n        this._tabActivateRequested = new Signal(this);\n        this.addClass('lm-TabBar');\n        this.contentNode.setAttribute('role', 'tablist');\n        this.setFlag(Widget.Flag.DisallowLayout);\n        this._document = options.document || document;\n        this.tabsMovable = options.tabsMovable || false;\n        this.titlesEditable = options.titlesEditable || false;\n        this.allowDeselect = options.allowDeselect || false;\n        this.addButtonEnabled = options.addButtonEnabled || false;\n        this.insertBehavior = options.insertBehavior || 'select-tab-if-needed';\n        this.name = options.name || '';\n        this.orientation = options.orientation || 'horizontal';\n        this.removeBehavior = options.removeBehavior || 'select-tab-after';\n        this.renderer = options.renderer || TabBar.defaultRenderer;\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        this._releaseMouse();\n        this._titles.length = 0;\n        this._previousTitle = null;\n        super.dispose();\n    }\n    /**\n     * A signal emitted when the current tab is changed.\n     *\n     * #### Notes\n     * This signal is emitted when the currently selected tab is changed\n     * either through user or programmatic interaction.\n     *\n     * Notably, this signal is not emitted when the index of the current\n     * tab changes due to tabs being inserted, removed, or moved. It is\n     * only emitted when the actual current tab node is changed.\n     */\n    get currentChanged() {\n        return this._currentChanged;\n    }\n    /**\n     * A signal emitted when a tab is moved by the user.\n     *\n     * #### Notes\n     * This signal is emitted when a tab is moved by user interaction.\n     *\n     * This signal is not emitted when a tab is moved programmatically.\n     */\n    get tabMoved() {\n        return this._tabMoved;\n    }\n    /**\n     * A signal emitted when a tab is clicked by the user.\n     *\n     * #### Notes\n     * If the clicked tab is not the current tab, the clicked tab will be\n     * made current and the `currentChanged` signal will be emitted first.\n     *\n     * This signal is emitted even if the clicked tab is the current tab.\n     */\n    get tabActivateRequested() {\n        return this._tabActivateRequested;\n    }\n    /**\n     * A signal emitted when the tab bar add button is clicked.\n     */\n    get addRequested() {\n        return this._addRequested;\n    }\n    /**\n     * A signal emitted when a tab close icon is clicked.\n     *\n     * #### Notes\n     * This signal is not emitted unless the tab title is `closable`.\n     */\n    get tabCloseRequested() {\n        return this._tabCloseRequested;\n    }\n    /**\n     * A signal emitted when a tab is dragged beyond the detach threshold.\n     *\n     * #### Notes\n     * This signal is emitted when the user drags a tab with the mouse,\n     * and mouse is dragged beyond the detach threshold.\n     *\n     * The consumer of the signal should call `releaseMouse` and remove\n     * the tab in order to complete the detach.\n     *\n     * This signal is only emitted once per drag cycle.\n     */\n    get tabDetachRequested() {\n        return this._tabDetachRequested;\n    }\n    /**\n     * The document to use with the tab bar.\n     *\n     * The default is the global `document` instance.\n     */\n    get document() {\n        return this._document;\n    }\n    /**\n     * Whether the titles can be user-edited.\n     *\n     */\n    get titlesEditable() {\n        return this._titlesEditable;\n    }\n    /**\n     * Set whether titles can be user edited.\n     *\n     */\n    set titlesEditable(value) {\n        this._titlesEditable = value;\n    }\n    /**\n     * Get the currently selected title.\n     *\n     * #### Notes\n     * This will be `null` if no tab is selected.\n     */\n    get currentTitle() {\n        return this._titles[this._currentIndex] || null;\n    }\n    /**\n     * Set the currently selected title.\n     *\n     * #### Notes\n     * If the title does not exist, the title will be set to `null`.\n     */\n    set currentTitle(value) {\n        this.currentIndex = value ? this._titles.indexOf(value) : -1;\n    }\n    /**\n     * Get the index of the currently selected tab.\n     *\n     * #### Notes\n     * This will be `-1` if no tab is selected.\n     */\n    get currentIndex() {\n        return this._currentIndex;\n    }\n    /**\n     * Set the index of the currently selected tab.\n     *\n     * #### Notes\n     * If the value is out of range, the index will be set to `-1`.\n     */\n    set currentIndex(value) {\n        // Adjust for an out of range index.\n        if (value < 0 || value >= this._titles.length) {\n            value = -1;\n        }\n        // Bail early if the index will not change.\n        if (this._currentIndex === value) {\n            return;\n        }\n        // Look up the previous index and title.\n        let pi = this._currentIndex;\n        let pt = this._titles[pi] || null;\n        // Look up the current index and title.\n        let ci = value;\n        let ct = this._titles[ci] || null;\n        // Update the current index and previous title.\n        this._currentIndex = ci;\n        this._previousTitle = pt;\n        // Schedule an update of the tabs.\n        this.update();\n        // Emit the current changed signal.\n        this._currentChanged.emit({\n            previousIndex: pi,\n            previousTitle: pt,\n            currentIndex: ci,\n            currentTitle: ct\n        });\n    }\n    /**\n     * Get the name of the tab bar.\n     */\n    get name() {\n        return this._name;\n    }\n    /**\n     * Set the name of the tab bar.\n     */\n    set name(value) {\n        this._name = value;\n        if (value) {\n            this.contentNode.setAttribute('aria-label', value);\n        }\n        else {\n            this.contentNode.removeAttribute('aria-label');\n        }\n    }\n    /**\n     * Get the orientation of the tab bar.\n     *\n     * #### Notes\n     * This controls whether the tabs are arranged in a row or column.\n     */\n    get orientation() {\n        return this._orientation;\n    }\n    /**\n     * Set the orientation of the tab bar.\n     *\n     * #### Notes\n     * This controls whether the tabs are arranged in a row or column.\n     */\n    set orientation(value) {\n        // Do nothing if the orientation does not change.\n        if (this._orientation === value) {\n            return;\n        }\n        // Release the mouse before making any changes.\n        this._releaseMouse();\n        // Toggle the orientation values.\n        this._orientation = value;\n        this.dataset['orientation'] = value;\n        this.contentNode.setAttribute('aria-orientation', value);\n    }\n    /**\n     * Whether the add button is enabled.\n     */\n    get addButtonEnabled() {\n        return this._addButtonEnabled;\n    }\n    /**\n     * Set whether the add button is enabled.\n     */\n    set addButtonEnabled(value) {\n        // Do nothing if the value does not change.\n        if (this._addButtonEnabled === value) {\n            return;\n        }\n        this._addButtonEnabled = value;\n        if (value) {\n            this.addButtonNode.classList.remove('lm-mod-hidden');\n        }\n        else {\n            this.addButtonNode.classList.add('lm-mod-hidden');\n        }\n    }\n    /**\n     * A read-only array of the titles in the tab bar.\n     */\n    get titles() {\n        return this._titles;\n    }\n    /**\n     * The tab bar content node.\n     *\n     * #### Notes\n     * This is the node which holds the tab nodes.\n     *\n     * Modifying this node directly can lead to undefined behavior.\n     */\n    get contentNode() {\n        return this.node.getElementsByClassName('lm-TabBar-content')[0];\n    }\n    /**\n     * The tab bar add button node.\n     *\n     * #### Notes\n     * This is the node which holds the add button.\n     *\n     * Modifying this node directly can lead to undefined behavior.\n     */\n    get addButtonNode() {\n        return this.node.getElementsByClassName('lm-TabBar-addButton')[0];\n    }\n    /**\n     * Add a tab to the end of the tab bar.\n     *\n     * @param value - The title which holds the data for the tab,\n     *   or an options object to convert to a title.\n     *\n     * @returns The title object added to the tab bar.\n     *\n     * #### Notes\n     * If the title is already added to the tab bar, it will be moved.\n     */\n    addTab(value) {\n        return this.insertTab(this._titles.length, value);\n    }\n    /**\n     * Insert a tab into the tab bar at the specified index.\n     *\n     * @param index - The index at which to insert the tab.\n     *\n     * @param value - The title which holds the data for the tab,\n     *   or an options object to convert to a title.\n     *\n     * @returns The title object added to the tab bar.\n     *\n     * #### Notes\n     * The index will be clamped to the bounds of the tabs.\n     *\n     * If the title is already added to the tab bar, it will be moved.\n     */\n    insertTab(index, value) {\n        // Release the mouse before making any changes.\n        this._releaseMouse();\n        // Coerce the value to a title.\n        let title = Private$7.asTitle(value);\n        // Look up the index of the title.\n        let i = this._titles.indexOf(title);\n        // Clamp the insert index to the array bounds.\n        let j = Math.max(0, Math.min(index, this._titles.length));\n        // If the title is not in the array, insert it.\n        if (i === -1) {\n            // Insert the title into the array.\n            ArrayExt.insert(this._titles, j, title);\n            // Connect to the title changed signal.\n            title.changed.connect(this._onTitleChanged, this);\n            // Schedule an update of the tabs.\n            this.update();\n            // Adjust the current index for the insert.\n            this._adjustCurrentForInsert(j, title);\n            // Return the title added to the tab bar.\n            return title;\n        }\n        // Otherwise, the title exists in the array and should be moved.\n        // Adjust the index if the location is at the end of the array.\n        if (j === this._titles.length) {\n            j--;\n        }\n        // Bail if there is no effective move.\n        if (i === j) {\n            return title;\n        }\n        // Move the title to the new location.\n        ArrayExt.move(this._titles, i, j);\n        // Schedule an update of the tabs.\n        this.update();\n        // Adjust the current index for the move.\n        this._adjustCurrentForMove(i, j);\n        // Return the title added to the tab bar.\n        return title;\n    }\n    /**\n     * Remove a tab from the tab bar.\n     *\n     * @param title - The title for the tab to remove.\n     *\n     * #### Notes\n     * This is a no-op if the title is not in the tab bar.\n     */\n    removeTab(title) {\n        this.removeTabAt(this._titles.indexOf(title));\n    }\n    /**\n     * Remove the tab at a given index from the tab bar.\n     *\n     * @param index - The index of the tab to remove.\n     *\n     * #### Notes\n     * This is a no-op if the index is out of range.\n     */\n    removeTabAt(index) {\n        // Release the mouse before making any changes.\n        this._releaseMouse();\n        // Remove the title from the array.\n        let title = ArrayExt.removeAt(this._titles, index);\n        // Bail if the index is out of range.\n        if (!title) {\n            return;\n        }\n        // Disconnect from the title changed signal.\n        title.changed.disconnect(this._onTitleChanged, this);\n        // Clear the previous title if it's being removed.\n        if (title === this._previousTitle) {\n            this._previousTitle = null;\n        }\n        // Schedule an update of the tabs.\n        this.update();\n        // Adjust the current index for the remove.\n        this._adjustCurrentForRemove(index, title);\n    }\n    /**\n     * Remove all tabs from the tab bar.\n     */\n    clearTabs() {\n        // Bail if there is nothing to remove.\n        if (this._titles.length === 0) {\n            return;\n        }\n        // Release the mouse before making any changes.\n        this._releaseMouse();\n        // Disconnect from the title changed signals.\n        for (let title of this._titles) {\n            title.changed.disconnect(this._onTitleChanged, this);\n        }\n        // Get the current index and title.\n        let pi = this.currentIndex;\n        let pt = this.currentTitle;\n        // Reset the current index and previous title.\n        this._currentIndex = -1;\n        this._previousTitle = null;\n        // Clear the title array.\n        this._titles.length = 0;\n        // Schedule an update of the tabs.\n        this.update();\n        // If no tab was selected, there's nothing else to do.\n        if (pi === -1) {\n            return;\n        }\n        // Emit the current changed signal.\n        this._currentChanged.emit({\n            previousIndex: pi,\n            previousTitle: pt,\n            currentIndex: -1,\n            currentTitle: null\n        });\n    }\n    /**\n     * Release the mouse and restore the non-dragged tab positions.\n     *\n     * #### Notes\n     * This will cause the tab bar to stop handling mouse events and to\n     * restore the tabs to their non-dragged positions.\n     */\n    releaseMouse() {\n        this._releaseMouse();\n    }\n    /**\n     * Handle the DOM events for the tab bar.\n     *\n     * @param event - The DOM event sent to the tab bar.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the tab bar's DOM node.\n     *\n     * This should not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'pointerdown':\n                this._evtPointerDown(event);\n                break;\n            case 'pointermove':\n                this._evtPointerMove(event);\n                break;\n            case 'pointerup':\n                this._evtPointerUp(event);\n                break;\n            case 'dblclick':\n                this._evtDblClick(event);\n                break;\n            case 'keydown':\n                event.eventPhase === Event.CAPTURING_PHASE\n                    ? this._evtKeyDownCapturing(event)\n                    : this._evtKeyDown(event);\n                break;\n            case 'contextmenu':\n                event.preventDefault();\n                event.stopPropagation();\n                break;\n        }\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     */\n    onBeforeAttach(msg) {\n        this.node.addEventListener('pointerdown', this);\n        this.node.addEventListener('dblclick', this);\n        this.node.addEventListener('keydown', this);\n    }\n    /**\n     * A message handler invoked on an `'after-detach'` message.\n     */\n    onAfterDetach(msg) {\n        this.node.removeEventListener('pointerdown', this);\n        this.node.removeEventListener('dblclick', this);\n        this.node.removeEventListener('keydown', this);\n        this._releaseMouse();\n    }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     */\n    onUpdateRequest(msg) {\n        var _a;\n        let titles = this._titles;\n        let renderer = this.renderer;\n        let currentTitle = this.currentTitle;\n        let content = new Array(titles.length);\n        // Keep the tabindex=\"0\" attribute to the tab which handled it before the update.\n        // If the add button handles it, no need to do anything. If no element of the tab\n        // bar handles it, set it on the current or the first tab to ensure one element\n        // handles it after update.\n        const tabHandlingTabindex = (_a = this._getCurrentTabindex()) !== null && _a !== void 0 ? _a : (this._currentIndex > -1 ? this._currentIndex : 0);\n        for (let i = 0, n = titles.length; i < n; ++i) {\n            let title = titles[i];\n            let current = title === currentTitle;\n            let zIndex = current ? n : n - i - 1;\n            let tabIndex = tabHandlingTabindex === i ? 0 : -1;\n            content[i] = renderer.renderTab({ title, current, zIndex, tabIndex });\n        }\n        VirtualDOM.render(content, this.contentNode);\n    }\n    /**\n     * Get the index of the tab which handles tabindex=\"0\".\n     * If the add button handles tabindex=\"0\", -1 is returned.\n     * If none of the previous handles tabindex=\"0\", null is returned.\n     */\n    _getCurrentTabindex() {\n        let index = null;\n        const elemTabindex = this.contentNode.querySelector('li[tabindex=\"0\"]');\n        if (elemTabindex) {\n            index = [...this.contentNode.children].indexOf(elemTabindex);\n        }\n        else if (this._addButtonEnabled &&\n            this.addButtonNode.getAttribute('tabindex') === '0') {\n            index = -1;\n        }\n        return index;\n    }\n    /**\n     * Handle the `'dblclick'` event for the tab bar.\n     */\n    _evtDblClick(event) {\n        // Do nothing if titles are not editable\n        if (!this.titlesEditable) {\n            return;\n        }\n        let tabs = this.contentNode.children;\n        // Find the index of the targeted tab.\n        let index = ArrayExt.findFirstIndex(tabs, tab => {\n            return ElementExt.hitTest(tab, event.clientX, event.clientY);\n        });\n        // Do nothing if the press is not on a tab.\n        if (index === -1) {\n            return;\n        }\n        let title = this.titles[index];\n        let label = tabs[index].querySelector('.lm-TabBar-tabLabel');\n        if (label && label.contains(event.target)) {\n            let value = title.label || '';\n            // Clear the label element\n            let oldValue = label.innerHTML;\n            label.innerHTML = '';\n            let input = document.createElement('input');\n            input.classList.add('lm-TabBar-tabInput');\n            input.value = value;\n            label.appendChild(input);\n            let onblur = () => {\n                input.removeEventListener('blur', onblur);\n                label.innerHTML = oldValue;\n                this.node.addEventListener('keydown', this);\n            };\n            input.addEventListener('dblclick', (event) => event.stopPropagation());\n            input.addEventListener('blur', onblur);\n            input.addEventListener('keydown', (event) => {\n                if (event.key === 'Enter') {\n                    if (input.value !== '') {\n                        title.label = title.caption = input.value;\n                    }\n                    onblur();\n                }\n                else if (event.key === 'Escape') {\n                    onblur();\n                }\n            });\n            this.node.removeEventListener('keydown', this);\n            input.select();\n            input.focus();\n            if (label.children.length > 0) {\n                label.children[0].focus();\n            }\n        }\n    }\n    /**\n     * Handle the `'keydown'` event for the tab bar at capturing phase.\n     */\n    _evtKeyDownCapturing(event) {\n        if (event.eventPhase !== Event.CAPTURING_PHASE) {\n            return;\n        }\n        // Stop all input events during drag.\n        event.preventDefault();\n        event.stopPropagation();\n        // Release the mouse if `Escape` is pressed.\n        if (event.key === 'Escape') {\n            this._releaseMouse();\n        }\n    }\n    /**\n     * Handle the `'keydown'` event for the tab bar at target phase.\n     */\n    _evtKeyDown(event) {\n        var _a, _b, _c;\n        // Allow for navigation using tab key\n        if (event.key === 'Tab' || event.eventPhase === Event.CAPTURING_PHASE) {\n            return;\n        }\n        // Check if Enter or Spacebar key has been pressed and open that tab\n        if (event.key === 'Enter' ||\n            event.key === 'Spacebar' ||\n            event.key === ' ') {\n            // Get focus element that is in focus by the tab key\n            const focusedElement = document.activeElement;\n            // Test first if the focus is on the add button node\n            if (this.addButtonEnabled &&\n                this.addButtonNode.contains(focusedElement)) {\n                event.preventDefault();\n                event.stopPropagation();\n                this._addRequested.emit();\n            }\n            else {\n                const index = ArrayExt.findFirstIndex(this.contentNode.children, tab => tab.contains(focusedElement));\n                if (index >= 0) {\n                    event.preventDefault();\n                    event.stopPropagation();\n                    this.currentIndex = index;\n                }\n            }\n            // Handle the arrow keys to switch tabs.\n        }\n        else if (ARROW_KEYS.includes(event.key)) {\n            // Create a list of all focusable elements in the tab bar.\n            const focusable = [...this.contentNode.children];\n            if (this.addButtonEnabled) {\n                focusable.push(this.addButtonNode);\n            }\n            // If the tab bar contains only one element, nothing to do.\n            if (focusable.length <= 1) {\n                return;\n            }\n            event.preventDefault();\n            event.stopPropagation();\n            // Get the current focused element.\n            let focusedIndex = focusable.indexOf(document.activeElement);\n            if (focusedIndex === -1) {\n                focusedIndex = this._currentIndex;\n            }\n            // Find the next element to focus on.\n            let nextFocused;\n            if ((event.key === 'ArrowRight' && this._orientation === 'horizontal') ||\n                (event.key === 'ArrowDown' && this._orientation === 'vertical')) {\n                nextFocused = (_a = focusable[focusedIndex + 1]) !== null && _a !== void 0 ? _a : focusable[0];\n            }\n            else if ((event.key === 'ArrowLeft' && this._orientation === 'horizontal') ||\n                (event.key === 'ArrowUp' && this._orientation === 'vertical')) {\n                nextFocused =\n                    (_b = focusable[focusedIndex - 1]) !== null && _b !== void 0 ? _b : focusable[focusable.length - 1];\n            }\n            else if (event.key === 'Home') {\n                nextFocused = focusable[0];\n            }\n            else if (event.key === 'End') {\n                nextFocused = focusable[focusable.length - 1];\n            }\n            // Change the focused element and the tabindex value.\n            if (nextFocused) {\n                (_c = focusable[focusedIndex]) === null || _c === void 0 ? void 0 : _c.setAttribute('tabindex', '-1');\n                nextFocused === null || nextFocused === void 0 ? void 0 : nextFocused.setAttribute('tabindex', '0');\n                nextFocused.focus();\n            }\n        }\n    }\n    /**\n     * Handle the `'pointerdown'` event for the tab bar.\n     */\n    _evtPointerDown(event) {\n        // Do nothing if it's not a left or middle mouse press.\n        if (event.button !== 0 && event.button !== 1) {\n            return;\n        }\n        // Do nothing if a drag is in progress.\n        if (this._dragData) {\n            return;\n        }\n        // Do nothing if a title editable input was clicked.\n        if (event.target.classList.contains('lm-TabBar-tabInput')) {\n            return;\n        }\n        // Check if the add button was clicked.\n        let addButtonClicked = this.addButtonEnabled &&\n            this.addButtonNode.contains(event.target);\n        // Lookup the tab nodes.\n        let tabs = this.contentNode.children;\n        // Find the index of the pressed tab.\n        let index = ArrayExt.findFirstIndex(tabs, tab => {\n            return ElementExt.hitTest(tab, event.clientX, event.clientY);\n        });\n        // Do nothing if the press is not on a tab or the add button.\n        if (index === -1 && !addButtonClicked) {\n            return;\n        }\n        // Pressing on a tab stops the event propagation.\n        event.preventDefault();\n        event.stopPropagation();\n        // Initialize the non-measured parts of the drag data.\n        this._dragData = {\n            tab: tabs[index],\n            index: index,\n            pressX: event.clientX,\n            pressY: event.clientY,\n            tabPos: -1,\n            tabSize: -1,\n            tabPressPos: -1,\n            targetIndex: -1,\n            tabLayout: null,\n            contentRect: null,\n            override: null,\n            dragActive: false,\n            dragAborted: false,\n            detachRequested: false\n        };\n        // Add the document pointer up listener.\n        this.document.addEventListener('pointerup', this, true);\n        // Do nothing else if the middle button or add button is clicked.\n        if (event.button === 1 || addButtonClicked) {\n            return;\n        }\n        // Do nothing else if the close icon is clicked.\n        let icon = tabs[index].querySelector(this.renderer.closeIconSelector);\n        if (icon && icon.contains(event.target)) {\n            return;\n        }\n        // Add the extra listeners if the tabs are movable.\n        if (this.tabsMovable) {\n            this.document.addEventListener('pointermove', this, true);\n            this.document.addEventListener('keydown', this, true);\n            this.document.addEventListener('contextmenu', this, true);\n        }\n        // Update the current index as appropriate.\n        if (this.allowDeselect && this.currentIndex === index) {\n            this.currentIndex = -1;\n        }\n        else {\n            this.currentIndex = index;\n        }\n        // Do nothing else if there is no current tab.\n        if (this.currentIndex === -1) {\n            return;\n        }\n        // Emit the tab activate request signal.\n        this._tabActivateRequested.emit({\n            index: this.currentIndex,\n            title: this.currentTitle\n        });\n    }\n    /**\n     * Handle the `'pointermove'` event for the tab bar.\n     */\n    _evtPointerMove(event) {\n        // Do nothing if no drag is in progress.\n        let data = this._dragData;\n        if (!data) {\n            return;\n        }\n        // Suppress the event during a drag.\n        event.preventDefault();\n        event.stopPropagation();\n        // Lookup the tab nodes.\n        let tabs = this.contentNode.children;\n        // Bail early if the drag threshold has not been met.\n        if (!data.dragActive && !Private$7.dragExceeded(data, event)) {\n            return;\n        }\n        // Activate the drag if necessary.\n        if (!data.dragActive) {\n            // Fill in the rest of the drag data measurements.\n            let tabRect = data.tab.getBoundingClientRect();\n            if (this._orientation === 'horizontal') {\n                data.tabPos = data.tab.offsetLeft;\n                data.tabSize = tabRect.width;\n                data.tabPressPos = data.pressX - tabRect.left;\n            }\n            else {\n                data.tabPos = data.tab.offsetTop;\n                data.tabSize = tabRect.height;\n                data.tabPressPos = data.pressY - tabRect.top;\n            }\n            data.tabPressOffset = {\n                x: data.pressX - tabRect.left,\n                y: data.pressY - tabRect.top\n            };\n            data.tabLayout = Private$7.snapTabLayout(tabs, this._orientation);\n            data.contentRect = this.contentNode.getBoundingClientRect();\n            data.override = Drag.overrideCursor('default');\n            // Add the dragging style classes.\n            data.tab.classList.add('lm-mod-dragging');\n            this.addClass('lm-mod-dragging');\n            // Mark the drag as active.\n            data.dragActive = true;\n        }\n        // Emit the detach requested signal if the threshold is exceeded.\n        if (!data.detachRequested && Private$7.detachExceeded(data, event)) {\n            // Only emit the signal once per drag cycle.\n            data.detachRequested = true;\n            // Setup the arguments for the signal.\n            let index = data.index;\n            let clientX = event.clientX;\n            let clientY = event.clientY;\n            let tab = tabs[index];\n            let title = this._titles[index];\n            // Emit the tab detach requested signal.\n            this._tabDetachRequested.emit({\n                index,\n                title,\n                tab,\n                clientX,\n                clientY,\n                offset: data.tabPressOffset\n            });\n            // Bail if the signal handler aborted the drag.\n            if (data.dragAborted) {\n                return;\n            }\n        }\n        // Update the positions of the tabs.\n        Private$7.layoutTabs(tabs, data, event, this._orientation);\n    }\n    /**\n     * Handle the `'pointerup'` event for the document.\n     */\n    _evtPointerUp(event) {\n        // Do nothing if it's not a left or middle mouse release.\n        if (event.button !== 0 && event.button !== 1) {\n            return;\n        }\n        // Do nothing if no drag is in progress.\n        const data = this._dragData;\n        if (!data) {\n            return;\n        }\n        // Stop the event propagation.\n        event.preventDefault();\n        event.stopPropagation();\n        // Remove the extra mouse event listeners.\n        this.document.removeEventListener('pointermove', this, true);\n        this.document.removeEventListener('pointerup', this, true);\n        this.document.removeEventListener('keydown', this, true);\n        this.document.removeEventListener('contextmenu', this, true);\n        // Handle a release when the drag is not active.\n        if (!data.dragActive) {\n            // Clear the drag data.\n            this._dragData = null;\n            // Handle clicking the add button.\n            let addButtonClicked = this.addButtonEnabled &&\n                this.addButtonNode.contains(event.target);\n            if (addButtonClicked) {\n                this._addRequested.emit(undefined);\n                return;\n            }\n            // Lookup the tab nodes.\n            let tabs = this.contentNode.children;\n            // Find the index of the released tab.\n            let index = ArrayExt.findFirstIndex(tabs, tab => {\n                return ElementExt.hitTest(tab, event.clientX, event.clientY);\n            });\n            // Do nothing if the release is not on the original pressed tab.\n            if (index !== data.index) {\n                return;\n            }\n            // Ignore the release if the title is not closable.\n            let title = this._titles[index];\n            if (!title.closable) {\n                return;\n            }\n            // Emit the close requested signal if the middle button is released.\n            if (event.button === 1) {\n                this._tabCloseRequested.emit({ index, title });\n                return;\n            }\n            // Emit the close requested signal if the close icon was released.\n            let icon = tabs[index].querySelector(this.renderer.closeIconSelector);\n            if (icon && icon.contains(event.target)) {\n                this._tabCloseRequested.emit({ index, title });\n                return;\n            }\n            // Otherwise, there is nothing left to do.\n            return;\n        }\n        // Do nothing if the left button is not released.\n        if (event.button !== 0) {\n            return;\n        }\n        // Position the tab at its final resting position.\n        Private$7.finalizeTabPosition(data, this._orientation);\n        // Remove the dragging class from the tab so it can be transitioned.\n        data.tab.classList.remove('lm-mod-dragging');\n        // Parse the transition duration for releasing the tab.\n        let duration = Private$7.parseTransitionDuration(data.tab);\n        // Complete the release on a timer to allow the tab to transition.\n        setTimeout(() => {\n            // Do nothing if the drag has been aborted.\n            if (data.dragAborted) {\n                return;\n            }\n            // Clear the drag data reference.\n            this._dragData = null;\n            // Reset the positions of the tabs.\n            Private$7.resetTabPositions(this.contentNode.children, this._orientation);\n            // Clear the cursor grab.\n            data.override.dispose();\n            // Remove the remaining dragging style.\n            this.removeClass('lm-mod-dragging');\n            // If the tab was not moved, there is nothing else to do.\n            let i = data.index;\n            let j = data.targetIndex;\n            if (j === -1 || i === j) {\n                return;\n            }\n            // Move the title to the new locations.\n            ArrayExt.move(this._titles, i, j);\n            // Adjust the current index for the move.\n            this._adjustCurrentForMove(i, j);\n            // Emit the tab moved signal.\n            this._tabMoved.emit({\n                fromIndex: i,\n                toIndex: j,\n                title: this._titles[j]\n            });\n            // Update the tabs immediately to prevent flicker.\n            MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n        }, duration);\n    }\n    /**\n     * Release the mouse and restore the non-dragged tab positions.\n     */\n    _releaseMouse() {\n        // Do nothing if no drag is in progress.\n        let data = this._dragData;\n        if (!data) {\n            return;\n        }\n        // Clear the drag data reference.\n        this._dragData = null;\n        // Remove the extra document event listeners.\n        this.document.removeEventListener('pointermove', this, true);\n        this.document.removeEventListener('pointerup', this, true);\n        this.document.removeEventListener('keydown', this, true);\n        this.document.removeEventListener('contextmenu', this, true);\n        // Indicate the drag has been aborted. This allows the mouse\n        // event handlers to return early when the drag is canceled.\n        data.dragAborted = true;\n        // If the drag is not active, there's nothing more to do.\n        if (!data.dragActive) {\n            return;\n        }\n        // Reset the tabs to their non-dragged positions.\n        Private$7.resetTabPositions(this.contentNode.children, this._orientation);\n        // Clear the cursor override.\n        data.override.dispose();\n        // Clear the dragging style classes.\n        data.tab.classList.remove('lm-mod-dragging');\n        this.removeClass('lm-mod-dragging');\n    }\n    /**\n     * Adjust the current index for a tab insert operation.\n     *\n     * This method accounts for the tab bar's insertion behavior when\n     * adjusting the current index and emitting the changed signal.\n     */\n    _adjustCurrentForInsert(i, title) {\n        // Lookup commonly used variables.\n        let ct = this.currentTitle;\n        let ci = this._currentIndex;\n        let bh = this.insertBehavior;\n        // TODO: do we need to do an update to update the aria-selected attribute?\n        // Handle the behavior where the new tab is always selected,\n        // or the behavior where the new tab is selected if needed.\n        if (bh === 'select-tab' || (bh === 'select-tab-if-needed' && ci === -1)) {\n            this._currentIndex = i;\n            this._previousTitle = ct;\n            this._currentChanged.emit({\n                previousIndex: ci,\n                previousTitle: ct,\n                currentIndex: i,\n                currentTitle: title\n            });\n            return;\n        }\n        // Otherwise, silently adjust the current index if needed.\n        if (ci >= i) {\n            this._currentIndex++;\n        }\n    }\n    /**\n     * Adjust the current index for a tab move operation.\n     *\n     * This method will not cause the actual current tab to change.\n     * It silently adjusts the index to account for the given move.\n     */\n    _adjustCurrentForMove(i, j) {\n        if (this._currentIndex === i) {\n            this._currentIndex = j;\n        }\n        else if (this._currentIndex < i && this._currentIndex >= j) {\n            this._currentIndex++;\n        }\n        else if (this._currentIndex > i && this._currentIndex <= j) {\n            this._currentIndex--;\n        }\n    }\n    /**\n     * Adjust the current index for a tab remove operation.\n     *\n     * This method accounts for the tab bar's remove behavior when\n     * adjusting the current index and emitting the changed signal.\n     */\n    _adjustCurrentForRemove(i, title) {\n        // Lookup commonly used variables.\n        let ci = this._currentIndex;\n        let bh = this.removeBehavior;\n        // Silently adjust the index if the current tab is not removed.\n        if (ci !== i) {\n            if (ci > i) {\n                this._currentIndex--;\n            }\n            return;\n        }\n        // TODO: do we need to do an update to adjust the aria-selected value?\n        // No tab gets selected if the tab bar is empty.\n        if (this._titles.length === 0) {\n            this._currentIndex = -1;\n            this._currentChanged.emit({\n                previousIndex: i,\n                previousTitle: title,\n                currentIndex: -1,\n                currentTitle: null\n            });\n            return;\n        }\n        // Handle behavior where the next sibling tab is selected.\n        if (bh === 'select-tab-after') {\n            this._currentIndex = Math.min(i, this._titles.length - 1);\n            this._currentChanged.emit({\n                previousIndex: i,\n                previousTitle: title,\n                currentIndex: this._currentIndex,\n                currentTitle: this.currentTitle\n            });\n            return;\n        }\n        // Handle behavior where the previous sibling tab is selected.\n        if (bh === 'select-tab-before') {\n            this._currentIndex = Math.max(0, i - 1);\n            this._currentChanged.emit({\n                previousIndex: i,\n                previousTitle: title,\n                currentIndex: this._currentIndex,\n                currentTitle: this.currentTitle\n            });\n            return;\n        }\n        // Handle behavior where the previous history tab is selected.\n        if (bh === 'select-previous-tab') {\n            if (this._previousTitle) {\n                this._currentIndex = this._titles.indexOf(this._previousTitle);\n                this._previousTitle = null;\n            }\n            else {\n                this._currentIndex = Math.min(i, this._titles.length - 1);\n            }\n            this._currentChanged.emit({\n                previousIndex: i,\n                previousTitle: title,\n                currentIndex: this._currentIndex,\n                currentTitle: this.currentTitle\n            });\n            return;\n        }\n        // Otherwise, no tab gets selected.\n        this._currentIndex = -1;\n        this._currentChanged.emit({\n            previousIndex: i,\n            previousTitle: title,\n            currentIndex: -1,\n            currentTitle: null\n        });\n    }\n    /**\n     * Handle the `changed` signal of a title object.\n     */\n    _onTitleChanged(sender) {\n        this.update();\n    }\n}\n/**\n * The namespace for the `TabBar` class statics.\n */\n(function (TabBar) {\n    /**\n     * The default implementation of `IRenderer`.\n     *\n     * #### Notes\n     * Subclasses are free to reimplement rendering methods as needed.\n     */\n    class Renderer {\n        constructor() {\n            /**\n             * A selector which matches the close icon node in a tab.\n             */\n            this.closeIconSelector = '.lm-TabBar-tabCloseIcon';\n            this._tabID = 0;\n            this._tabKeys = new WeakMap();\n            this._uuid = ++Renderer._nInstance;\n        }\n        /**\n         * Render the virtual element for a tab.\n         *\n         * @param data - The data to use for rendering the tab.\n         *\n         * @returns A virtual element representing the tab.\n         */\n        renderTab(data) {\n            let title = data.title.caption;\n            let key = this.createTabKey(data);\n            let id = key;\n            let style = this.createTabStyle(data);\n            let className = this.createTabClass(data);\n            let dataset = this.createTabDataset(data);\n            let aria = this.createTabARIA(data);\n            if (data.title.closable) {\n                return h.li({ id, key, className, title, style, dataset, ...aria }, this.renderIcon(data), this.renderLabel(data), this.renderCloseIcon(data));\n            }\n            else {\n                return h.li({ id, key, className, title, style, dataset, ...aria }, this.renderIcon(data), this.renderLabel(data));\n            }\n        }\n        /**\n         * Render the icon element for a tab.\n         *\n         * @param data - The data to use for rendering the tab.\n         *\n         * @returns A virtual element representing the tab icon.\n         */\n        renderIcon(data) {\n            const { title } = data;\n            let className = this.createIconClass(data);\n            // If title.icon is undefined, it will be ignored.\n            return h.div({ className }, title.icon, title.iconLabel);\n        }\n        /**\n         * Render the label element for a tab.\n         *\n         * @param data - The data to use for rendering the tab.\n         *\n         * @returns A virtual element representing the tab label.\n         */\n        renderLabel(data) {\n            return h.div({ className: 'lm-TabBar-tabLabel' }, data.title.label);\n        }\n        /**\n         * Render the close icon element for a tab.\n         *\n         * @param data - The data to use for rendering the tab.\n         *\n         * @returns A virtual element representing the tab close icon.\n         */\n        renderCloseIcon(data) {\n            return h.div({ className: 'lm-TabBar-tabCloseIcon' });\n        }\n        /**\n         * Create a unique render key for the tab.\n         *\n         * @param data - The data to use for the tab.\n         *\n         * @returns The unique render key for the tab.\n         *\n         * #### Notes\n         * This method caches the key against the tab title the first time\n         * the key is generated. This enables efficient rendering of moved\n         * tabs and avoids subtle hover style artifacts.\n         */\n        createTabKey(data) {\n            let key = this._tabKeys.get(data.title);\n            if (key === undefined) {\n                key = `tab-key-${this._uuid}-${this._tabID++}`;\n                this._tabKeys.set(data.title, key);\n            }\n            return key;\n        }\n        /**\n         * Create the inline style object for a tab.\n         *\n         * @param data - The data to use for the tab.\n         *\n         * @returns The inline style data for the tab.\n         */\n        createTabStyle(data) {\n            return { zIndex: `${data.zIndex}` };\n        }\n        /**\n         * Create the class name for the tab.\n         *\n         * @param data - The data to use for the tab.\n         *\n         * @returns The full class name for the tab.\n         */\n        createTabClass(data) {\n            let name = 'lm-TabBar-tab';\n            if (data.title.className) {\n                name += ` ${data.title.className}`;\n            }\n            if (data.title.closable) {\n                name += ' lm-mod-closable';\n            }\n            if (data.current) {\n                name += ' lm-mod-current';\n            }\n            return name;\n        }\n        /**\n         * Create the dataset for a tab.\n         *\n         * @param data - The data to use for the tab.\n         *\n         * @returns The dataset for the tab.\n         */\n        createTabDataset(data) {\n            return data.title.dataset;\n        }\n        /**\n         * Create the ARIA attributes for a tab.\n         *\n         * @param data - The data to use for the tab.\n         *\n         * @returns The ARIA attributes for the tab.\n         */\n        createTabARIA(data) {\n            var _a;\n            return {\n                role: 'tab',\n                'aria-selected': data.current.toString(),\n                tabindex: `${(_a = data.tabIndex) !== null && _a !== void 0 ? _a : '-1'}`\n            };\n        }\n        /**\n         * Create the class name for the tab icon.\n         *\n         * @param data - The data to use for the tab.\n         *\n         * @returns The full class name for the tab icon.\n         */\n        createIconClass(data) {\n            let name = 'lm-TabBar-tabIcon';\n            let extra = data.title.iconClass;\n            return extra ? `${name} ${extra}` : name;\n        }\n    }\n    Renderer._nInstance = 0;\n    TabBar.Renderer = Renderer;\n    /**\n     * The default `Renderer` instance.\n     */\n    TabBar.defaultRenderer = new Renderer();\n    /**\n     * A selector which matches the add button node in the tab bar.\n     */\n    TabBar.addButtonSelector = '.lm-TabBar-addButton';\n})(TabBar || (TabBar = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$7;\n(function (Private) {\n    /**\n     * The start drag distance threshold.\n     */\n    Private.DRAG_THRESHOLD = 5;\n    /**\n     * The detach distance threshold.\n     */\n    Private.DETACH_THRESHOLD = 20;\n    /**\n     * Create the DOM node for a tab bar.\n     */\n    function createNode() {\n        let node = document.createElement('div');\n        let content = document.createElement('ul');\n        content.setAttribute('role', 'tablist');\n        content.className = 'lm-TabBar-content';\n        node.appendChild(content);\n        let add = document.createElement('div');\n        add.className = 'lm-TabBar-addButton lm-mod-hidden';\n        add.setAttribute('tabindex', '-1');\n        add.setAttribute('role', 'button');\n        node.appendChild(add);\n        return node;\n    }\n    Private.createNode = createNode;\n    /**\n     * Coerce a title or options into a real title.\n     */\n    function asTitle(value) {\n        return value instanceof Title ? value : new Title(value);\n    }\n    Private.asTitle = asTitle;\n    /**\n     * Parse the transition duration for a tab node.\n     */\n    function parseTransitionDuration(tab) {\n        let style = window.getComputedStyle(tab);\n        return 1000 * (parseFloat(style.transitionDuration) || 0);\n    }\n    Private.parseTransitionDuration = parseTransitionDuration;\n    /**\n     * Get a snapshot of the current tab layout values.\n     */\n    function snapTabLayout(tabs, orientation) {\n        let layout = new Array(tabs.length);\n        for (let i = 0, n = tabs.length; i < n; ++i) {\n            let node = tabs[i];\n            let style = window.getComputedStyle(node);\n            if (orientation === 'horizontal') {\n                layout[i] = {\n                    pos: node.offsetLeft,\n                    size: node.offsetWidth,\n                    margin: parseFloat(style.marginLeft) || 0\n                };\n            }\n            else {\n                layout[i] = {\n                    pos: node.offsetTop,\n                    size: node.offsetHeight,\n                    margin: parseFloat(style.marginTop) || 0\n                };\n            }\n        }\n        return layout;\n    }\n    Private.snapTabLayout = snapTabLayout;\n    /**\n     * Test if the event exceeds the drag threshold.\n     */\n    function dragExceeded(data, event) {\n        let dx = Math.abs(event.clientX - data.pressX);\n        let dy = Math.abs(event.clientY - data.pressY);\n        return dx >= Private.DRAG_THRESHOLD || dy >= Private.DRAG_THRESHOLD;\n    }\n    Private.dragExceeded = dragExceeded;\n    /**\n     * Test if the event exceeds the drag detach threshold.\n     */\n    function detachExceeded(data, event) {\n        let rect = data.contentRect;\n        return (event.clientX < rect.left - Private.DETACH_THRESHOLD ||\n            event.clientX >= rect.right + Private.DETACH_THRESHOLD ||\n            event.clientY < rect.top - Private.DETACH_THRESHOLD ||\n            event.clientY >= rect.bottom + Private.DETACH_THRESHOLD);\n    }\n    Private.detachExceeded = detachExceeded;\n    /**\n     * Update the relative tab positions and computed target index.\n     */\n    function layoutTabs(tabs, data, event, orientation) {\n        // Compute the orientation-sensitive values.\n        let pressPos;\n        let localPos;\n        let clientPos;\n        let clientSize;\n        if (orientation === 'horizontal') {\n            pressPos = data.pressX;\n            localPos = event.clientX - data.contentRect.left;\n            clientPos = event.clientX;\n            clientSize = data.contentRect.width;\n        }\n        else {\n            pressPos = data.pressY;\n            localPos = event.clientY - data.contentRect.top;\n            clientPos = event.clientY;\n            clientSize = data.contentRect.height;\n        }\n        // Compute the target data.\n        let targetIndex = data.index;\n        let targetPos = localPos - data.tabPressPos;\n        let targetEnd = targetPos + data.tabSize;\n        // Update the relative tab positions.\n        for (let i = 0, n = tabs.length; i < n; ++i) {\n            let pxPos;\n            let layout = data.tabLayout[i];\n            let threshold = layout.pos + (layout.size >> 1);\n            if (i < data.index && targetPos < threshold) {\n                pxPos = `${data.tabSize + data.tabLayout[i + 1].margin}px`;\n                targetIndex = Math.min(targetIndex, i);\n            }\n            else if (i > data.index && targetEnd > threshold) {\n                pxPos = `${-data.tabSize - layout.margin}px`;\n                targetIndex = Math.max(targetIndex, i);\n            }\n            else if (i === data.index) {\n                let ideal = clientPos - pressPos;\n                let limit = clientSize - (data.tabPos + data.tabSize);\n                pxPos = `${Math.max(-data.tabPos, Math.min(ideal, limit))}px`;\n            }\n            else {\n                pxPos = '';\n            }\n            if (orientation === 'horizontal') {\n                tabs[i].style.left = pxPos;\n            }\n            else {\n                tabs[i].style.top = pxPos;\n            }\n        }\n        // Update the computed target index.\n        data.targetIndex = targetIndex;\n    }\n    Private.layoutTabs = layoutTabs;\n    /**\n     * Position the drag tab at its final resting relative position.\n     */\n    function finalizeTabPosition(data, orientation) {\n        // Compute the orientation-sensitive client size.\n        let clientSize;\n        if (orientation === 'horizontal') {\n            clientSize = data.contentRect.width;\n        }\n        else {\n            clientSize = data.contentRect.height;\n        }\n        // Compute the ideal final tab position.\n        let ideal;\n        if (data.targetIndex === data.index) {\n            ideal = 0;\n        }\n        else if (data.targetIndex > data.index) {\n            let tgt = data.tabLayout[data.targetIndex];\n            ideal = tgt.pos + tgt.size - data.tabSize - data.tabPos;\n        }\n        else {\n            let tgt = data.tabLayout[data.targetIndex];\n            ideal = tgt.pos - data.tabPos;\n        }\n        // Compute the tab position limit.\n        let limit = clientSize - (data.tabPos + data.tabSize);\n        let final = Math.max(-data.tabPos, Math.min(ideal, limit));\n        // Set the final orientation-sensitive position.\n        if (orientation === 'horizontal') {\n            data.tab.style.left = `${final}px`;\n        }\n        else {\n            data.tab.style.top = `${final}px`;\n        }\n    }\n    Private.finalizeTabPosition = finalizeTabPosition;\n    /**\n     * Reset the relative positions of the given tabs.\n     */\n    function resetTabPositions(tabs, orientation) {\n        for (const tab of tabs) {\n            if (orientation === 'horizontal') {\n                tab.style.left = '';\n            }\n            else {\n                tab.style.top = '';\n            }\n        }\n    }\n    Private.resetTabPositions = resetTabPositions;\n})(Private$7 || (Private$7 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which provides a flexible docking arrangement.\n *\n * #### Notes\n * The consumer of this layout is responsible for handling all signals\n * from the generated tab bars and managing the visibility of widgets\n * and tab bars as needed.\n */\nclass DockLayout extends Layout {\n    /**\n     * Construct a new dock layout.\n     *\n     * @param options - The options for initializing the layout.\n     */\n    constructor(options) {\n        super();\n        this._spacing = 4;\n        this._dirty = false;\n        this._root = null;\n        this._box = null;\n        this._items = new Map();\n        this.renderer = options.renderer;\n        if (options.spacing !== undefined) {\n            this._spacing = Utils$1.clampDimension(options.spacing);\n        }\n        this._document = options.document || document;\n        this._hiddenMode =\n            options.hiddenMode !== undefined\n                ? options.hiddenMode\n                : Widget.HiddenMode.Display;\n    }\n    /**\n     * Dispose of the resources held by the layout.\n     *\n     * #### Notes\n     * This will clear and dispose all widgets in the layout.\n     */\n    dispose() {\n        // Get an iterator over the widgets in the layout.\n        let widgets = this[Symbol.iterator]();\n        // Dispose of the layout items.\n        this._items.forEach(item => {\n            item.dispose();\n        });\n        // Clear the layout state before disposing the widgets.\n        this._box = null;\n        this._root = null;\n        this._items.clear();\n        // Dispose of the widgets contained in the old layout root.\n        for (const widget of widgets) {\n            widget.dispose();\n        }\n        // Dispose of the base class.\n        super.dispose();\n    }\n    /**\n     * The method for hiding child widgets.\n     *\n     * #### Notes\n     * If there is only one child widget, `Display` hiding mode will be used\n     * regardless of this setting.\n     */\n    get hiddenMode() {\n        return this._hiddenMode;\n    }\n    set hiddenMode(v) {\n        if (this._hiddenMode === v) {\n            return;\n        }\n        this._hiddenMode = v;\n        for (const bar of this.tabBars()) {\n            if (bar.titles.length > 1) {\n                for (const title of bar.titles) {\n                    title.owner.hiddenMode = this._hiddenMode;\n                }\n            }\n        }\n    }\n    /**\n     * Get the inter-element spacing for the dock layout.\n     */\n    get spacing() {\n        return this._spacing;\n    }\n    /**\n     * Set the inter-element spacing for the dock layout.\n     */\n    set spacing(value) {\n        value = Utils$1.clampDimension(value);\n        if (this._spacing === value) {\n            return;\n        }\n        this._spacing = value;\n        if (!this.parent) {\n            return;\n        }\n        this.parent.fit();\n    }\n    /**\n     * Whether the dock layout is empty.\n     */\n    get isEmpty() {\n        return this._root === null;\n    }\n    /**\n     * Create an iterator over all widgets in the layout.\n     *\n     * @returns A new iterator over the widgets in the layout.\n     *\n     * #### Notes\n     * This iterator includes the generated tab bars.\n     */\n    [Symbol.iterator]() {\n        return this._root ? this._root.iterAllWidgets() : empty();\n    }\n    /**\n     * Create an iterator over the user widgets in the layout.\n     *\n     * @returns A new iterator over the user widgets in the layout.\n     *\n     * #### Notes\n     * This iterator does not include the generated tab bars.\n     */\n    widgets() {\n        return this._root ? this._root.iterUserWidgets() : empty();\n    }\n    /**\n     * Create an iterator over the selected widgets in the layout.\n     *\n     * @returns A new iterator over the selected user widgets.\n     *\n     * #### Notes\n     * This iterator yields the widgets corresponding to the current tab\n     * of each tab bar in the layout.\n     */\n    selectedWidgets() {\n        return this._root ? this._root.iterSelectedWidgets() : empty();\n    }\n    /**\n     * Create an iterator over the tab bars in the layout.\n     *\n     * @returns A new iterator over the tab bars in the layout.\n     *\n     * #### Notes\n     * This iterator does not include the user widgets.\n     */\n    tabBars() {\n        return this._root ? this._root.iterTabBars() : empty();\n    }\n    /**\n     * Create an iterator over the handles in the layout.\n     *\n     * @returns A new iterator over the handles in the layout.\n     */\n    handles() {\n        return this._root ? this._root.iterHandles() : empty();\n    }\n    /**\n     * Move a handle to the given offset position.\n     *\n     * @param handle - The handle to move.\n     *\n     * @param offsetX - The desired offset X position of the handle.\n     *\n     * @param offsetY - The desired offset Y position of the handle.\n     *\n     * #### Notes\n     * If the given handle is not contained in the layout, this is no-op.\n     *\n     * The handle will be moved as close as possible to the desired\n     * position without violating any of the layout constraints.\n     *\n     * Only one of the coordinates is used depending on the orientation\n     * of the handle. This method accepts both coordinates to make it\n     * easy to invoke from a mouse move event without needing to know\n     * the handle orientation.\n     */\n    moveHandle(handle, offsetX, offsetY) {\n        // Bail early if there is no root or if the handle is hidden.\n        let hidden = handle.classList.contains('lm-mod-hidden');\n        if (!this._root || hidden) {\n            return;\n        }\n        // Lookup the split node for the handle.\n        let data = this._root.findSplitNode(handle);\n        if (!data) {\n            return;\n        }\n        // Compute the desired delta movement for the handle.\n        let delta;\n        if (data.node.orientation === 'horizontal') {\n            delta = offsetX - handle.offsetLeft;\n        }\n        else {\n            delta = offsetY - handle.offsetTop;\n        }\n        // Bail if there is no handle movement.\n        if (delta === 0) {\n            return;\n        }\n        // Prevent sibling resizing unless needed.\n        data.node.holdSizes();\n        // Adjust the sizers to reflect the handle movement.\n        BoxEngine.adjust(data.node.sizers, data.index, delta);\n        // Update the layout of the widgets.\n        if (this.parent) {\n            this.parent.update();\n        }\n    }\n    /**\n     * Save the current configuration of the dock layout.\n     *\n     * @returns A new config object for the current layout state.\n     *\n     * #### Notes\n     * The return value can be provided to the `restoreLayout` method\n     * in order to restore the layout to its current configuration.\n     */\n    saveLayout() {\n        // Bail early if there is no root.\n        if (!this._root) {\n            return { main: null };\n        }\n        // Hold the current sizes in the layout tree.\n        this._root.holdAllSizes();\n        // Return the layout config.\n        return { main: this._root.createConfig() };\n    }\n    /**\n     * Restore the layout to a previously saved configuration.\n     *\n     * @param config - The layout configuration to restore.\n     *\n     * #### Notes\n     * Widgets which currently belong to the layout but which are not\n     * contained in the config will be unparented.\n     */\n    restoreLayout(config) {\n        // Create the widget set for validating the config.\n        let widgetSet = new Set();\n        // Normalize the main area config and collect the widgets.\n        let mainConfig;\n        if (config.main) {\n            mainConfig = Private$6.normalizeAreaConfig(config.main, widgetSet);\n        }\n        else {\n            mainConfig = null;\n        }\n        // Create iterators over the old content.\n        let oldWidgets = this.widgets();\n        let oldTabBars = this.tabBars();\n        let oldHandles = this.handles();\n        // Clear the root before removing the old content.\n        this._root = null;\n        // Unparent the old widgets which are not in the new config.\n        for (const widget of oldWidgets) {\n            if (!widgetSet.has(widget)) {\n                widget.parent = null;\n            }\n        }\n        // Dispose of the old tab bars.\n        for (const tabBar of oldTabBars) {\n            tabBar.dispose();\n        }\n        // Remove the old handles.\n        for (const handle of oldHandles) {\n            if (handle.parentNode) {\n                handle.parentNode.removeChild(handle);\n            }\n        }\n        // Reparent the new widgets to the current parent.\n        for (const widget of widgetSet) {\n            widget.parent = this.parent;\n        }\n        // Create the root node for the new config.\n        if (mainConfig) {\n            this._root = Private$6.realizeAreaConfig(mainConfig, {\n                // Ignoring optional `document` argument as we must reuse `this._document`\n                createTabBar: (document) => this._createTabBar(),\n                createHandle: () => this._createHandle()\n            }, this._document);\n        }\n        else {\n            this._root = null;\n        }\n        // If there is no parent, there is nothing more to do.\n        if (!this.parent) {\n            return;\n        }\n        // Attach the new widgets to the parent.\n        widgetSet.forEach(widget => {\n            this.attachWidget(widget);\n        });\n        // Post a fit request to the parent.\n        this.parent.fit();\n    }\n    /**\n     * Add a widget to the dock layout.\n     *\n     * @param widget - The widget to add to the dock layout.\n     *\n     * @param options - The additional options for adding the widget.\n     *\n     * #### Notes\n     * The widget will be moved if it is already contained in the layout.\n     *\n     * An error will be thrown if the reference widget is invalid.\n     */\n    addWidget(widget, options = {}) {\n        // Parse the options.\n        let ref = options.ref || null;\n        let mode = options.mode || 'tab-after';\n        // Find the tab node which holds the reference widget.\n        let refNode = null;\n        if (this._root && ref) {\n            refNode = this._root.findTabNode(ref);\n        }\n        // Throw an error if the reference widget is invalid.\n        if (ref && !refNode) {\n            throw new Error('Reference widget is not in the layout.');\n        }\n        // Reparent the widget to the current layout parent.\n        widget.parent = this.parent;\n        // Insert the widget according to the insert mode.\n        switch (mode) {\n            case 'tab-after':\n                this._insertTab(widget, ref, refNode, true);\n                break;\n            case 'tab-before':\n                this._insertTab(widget, ref, refNode, false);\n                break;\n            case 'split-top':\n                this._insertSplit(widget, ref, refNode, 'vertical', false);\n                break;\n            case 'split-left':\n                this._insertSplit(widget, ref, refNode, 'horizontal', false);\n                break;\n            case 'split-right':\n                this._insertSplit(widget, ref, refNode, 'horizontal', true);\n                break;\n            case 'split-bottom':\n                this._insertSplit(widget, ref, refNode, 'vertical', true);\n                break;\n            case 'merge-top':\n                this._insertSplit(widget, ref, refNode, 'vertical', false, true);\n                break;\n            case 'merge-left':\n                this._insertSplit(widget, ref, refNode, 'horizontal', false, true);\n                break;\n            case 'merge-right':\n                this._insertSplit(widget, ref, refNode, 'horizontal', true, true);\n                break;\n            case 'merge-bottom':\n                this._insertSplit(widget, ref, refNode, 'vertical', true, true);\n                break;\n        }\n        // Do nothing else if there is no parent widget.\n        if (!this.parent) {\n            return;\n        }\n        // Ensure the widget is attached to the parent widget.\n        this.attachWidget(widget);\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n    /**\n     * Remove a widget from the layout.\n     *\n     * @param widget - The widget to remove from the layout.\n     *\n     * #### Notes\n     * A widget is automatically removed from the layout when its `parent`\n     * is set to `null`. This method should only be invoked directly when\n     * removing a widget from a layout which has yet to be installed on a\n     * parent widget.\n     *\n     * This method does *not* modify the widget's `parent`.\n     */\n    removeWidget(widget) {\n        // Remove the widget from its current layout location.\n        this._removeWidget(widget);\n        // Do nothing else if there is no parent widget.\n        if (!this.parent) {\n            return;\n        }\n        // Detach the widget from the parent widget.\n        this.detachWidget(widget);\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n    /**\n     * Find the tab area which contains the given client position.\n     *\n     * @param clientX - The client X position of interest.\n     *\n     * @param clientY - The client Y position of interest.\n     *\n     * @returns The geometry of the tab area at the given position, or\n     *   `null` if there is no tab area at the given position.\n     */\n    hitTestTabAreas(clientX, clientY) {\n        // Bail early if hit testing cannot produce valid results.\n        if (!this._root || !this.parent || !this.parent.isVisible) {\n            return null;\n        }\n        // Ensure the parent box sizing data is computed.\n        if (!this._box) {\n            this._box = ElementExt.boxSizing(this.parent.node);\n        }\n        // Convert from client to local coordinates.\n        let rect = this.parent.node.getBoundingClientRect();\n        let x = clientX - rect.left - this._box.borderLeft;\n        let y = clientY - rect.top - this._box.borderTop;\n        // Find the tab layout node at the local position.\n        let tabNode = this._root.hitTestTabNodes(x, y);\n        // Bail if a tab layout node was not found.\n        if (!tabNode) {\n            return null;\n        }\n        // Extract the data from the tab node.\n        let { tabBar, top, left, width, height } = tabNode;\n        // Compute the right and bottom edges of the tab area.\n        let borderWidth = this._box.borderLeft + this._box.borderRight;\n        let borderHeight = this._box.borderTop + this._box.borderBottom;\n        let right = rect.width - borderWidth - (left + width);\n        let bottom = rect.height - borderHeight - (top + height);\n        // Return the hit test results.\n        return { tabBar, x, y, top, left, right, bottom, width, height };\n    }\n    /**\n     * Perform layout initialization which requires the parent widget.\n     */\n    init() {\n        // Perform superclass initialization.\n        super.init();\n        // Attach each widget to the parent.\n        for (const widget of this) {\n            this.attachWidget(widget);\n        }\n        // Attach each handle to the parent.\n        for (const handle of this.handles()) {\n            this.parent.node.appendChild(handle);\n        }\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n    /**\n     * Attach the widget to the layout parent widget.\n     *\n     * @param widget - The widget to attach to the parent.\n     *\n     * #### Notes\n     * This is a no-op if the widget is already attached.\n     */\n    attachWidget(widget) {\n        // Do nothing if the widget is already attached.\n        if (this.parent.node === widget.node.parentNode) {\n            return;\n        }\n        // Create the layout item for the widget.\n        this._items.set(widget, new LayoutItem(widget));\n        // Send a `'before-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n        }\n        // Add the widget's node to the parent.\n        this.parent.node.appendChild(widget.node);\n        // Send an `'after-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n        }\n    }\n    /**\n     * Detach the widget from the layout parent widget.\n     *\n     * @param widget - The widget to detach from the parent.\n     *\n     * #### Notes\n     * This is a no-op if the widget is not attached.\n     */\n    detachWidget(widget) {\n        // Do nothing if the widget is not attached.\n        if (this.parent.node !== widget.node.parentNode) {\n            return;\n        }\n        // Send a `'before-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n        }\n        // Remove the widget's node from the parent.\n        this.parent.node.removeChild(widget.node);\n        // Send an `'after-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n        }\n        // Delete the layout item for the widget.\n        let item = this._items.get(widget);\n        if (item) {\n            this._items.delete(widget);\n            item.dispose();\n        }\n    }\n    /**\n     * A message handler invoked on a `'before-show'` message.\n     */\n    onBeforeShow(msg) {\n        super.onBeforeShow(msg);\n        this.parent.update();\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     */\n    onBeforeAttach(msg) {\n        super.onBeforeAttach(msg);\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'child-shown'` message.\n     */\n    onChildShown(msg) {\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'child-hidden'` message.\n     */\n    onChildHidden(msg) {\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'resize'` message.\n     */\n    onResize(msg) {\n        if (this.parent.isVisible) {\n            this._update(msg.width, msg.height);\n        }\n    }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     */\n    onUpdateRequest(msg) {\n        if (this.parent.isVisible) {\n            this._update(-1, -1);\n        }\n    }\n    /**\n     * A message handler invoked on a `'fit-request'` message.\n     */\n    onFitRequest(msg) {\n        if (this.parent.isAttached) {\n            this._fit();\n        }\n    }\n    /**\n     * Remove the specified widget from the layout structure.\n     *\n     * #### Notes\n     * This is a no-op if the widget is not in the layout tree.\n     *\n     * This does not detach the widget from the parent node.\n     */\n    _removeWidget(widget) {\n        // Bail early if there is no layout root.\n        if (!this._root) {\n            return;\n        }\n        // Find the tab node which contains the given widget.\n        let tabNode = this._root.findTabNode(widget);\n        // Bail early if the tab node is not found.\n        if (!tabNode) {\n            return;\n        }\n        Private$6.removeAria(widget);\n        // If there are multiple tabs, just remove the widget's tab.\n        if (tabNode.tabBar.titles.length > 1) {\n            tabNode.tabBar.removeTab(widget.title);\n            if (this._hiddenMode === Widget.HiddenMode.Scale &&\n                tabNode.tabBar.titles.length == 1) {\n                const existingWidget = tabNode.tabBar.titles[0].owner;\n                existingWidget.hiddenMode = Widget.HiddenMode.Display;\n            }\n            return;\n        }\n        // Otherwise, the tab node needs to be removed...\n        // Dispose the tab bar.\n        tabNode.tabBar.dispose();\n        // Handle the case where the tab node is the root.\n        if (this._root === tabNode) {\n            this._root = null;\n            return;\n        }\n        // Otherwise, remove the tab node from its parent...\n        // Prevent widget resizing unless needed.\n        this._root.holdAllSizes();\n        // Clear the parent reference on the tab node.\n        let splitNode = tabNode.parent;\n        tabNode.parent = null;\n        // Remove the tab node from its parent split node.\n        let i = ArrayExt.removeFirstOf(splitNode.children, tabNode);\n        let handle = ArrayExt.removeAt(splitNode.handles, i);\n        ArrayExt.removeAt(splitNode.sizers, i);\n        // Remove the handle from its parent DOM node.\n        if (handle.parentNode) {\n            handle.parentNode.removeChild(handle);\n        }\n        // If there are multiple children, just update the handles.\n        if (splitNode.children.length > 1) {\n            splitNode.syncHandles();\n            return;\n        }\n        // Otherwise, the split node also needs to be removed...\n        // Clear the parent reference on the split node.\n        let maybeParent = splitNode.parent;\n        splitNode.parent = null;\n        // Lookup the remaining child node and handle.\n        let childNode = splitNode.children[0];\n        let childHandle = splitNode.handles[0];\n        // Clear the split node data.\n        splitNode.children.length = 0;\n        splitNode.handles.length = 0;\n        splitNode.sizers.length = 0;\n        // Remove the child handle from its parent node.\n        if (childHandle.parentNode) {\n            childHandle.parentNode.removeChild(childHandle);\n        }\n        // Handle the case where the split node is the root.\n        if (this._root === splitNode) {\n            childNode.parent = null;\n            this._root = childNode;\n            return;\n        }\n        // Otherwise, move the child node to the parent node...\n        let parentNode = maybeParent;\n        // Lookup the index of the split node.\n        let j = parentNode.children.indexOf(splitNode);\n        // Handle the case where the child node is a tab node.\n        if (childNode instanceof Private$6.TabLayoutNode) {\n            childNode.parent = parentNode;\n            parentNode.children[j] = childNode;\n            return;\n        }\n        // Remove the split data from the parent.\n        let splitHandle = ArrayExt.removeAt(parentNode.handles, j);\n        ArrayExt.removeAt(parentNode.children, j);\n        ArrayExt.removeAt(parentNode.sizers, j);\n        // Remove the handle from its parent node.\n        if (splitHandle.parentNode) {\n            splitHandle.parentNode.removeChild(splitHandle);\n        }\n        // The child node and the split parent node will have the same\n        // orientation. Merge the grand-children with the parent node.\n        for (let i = 0, n = childNode.children.length; i < n; ++i) {\n            let gChild = childNode.children[i];\n            let gHandle = childNode.handles[i];\n            let gSizer = childNode.sizers[i];\n            ArrayExt.insert(parentNode.children, j + i, gChild);\n            ArrayExt.insert(parentNode.handles, j + i, gHandle);\n            ArrayExt.insert(parentNode.sizers, j + i, gSizer);\n            gChild.parent = parentNode;\n        }\n        // Clear the child node.\n        childNode.children.length = 0;\n        childNode.handles.length = 0;\n        childNode.sizers.length = 0;\n        childNode.parent = null;\n        // Sync the handles on the parent node.\n        parentNode.syncHandles();\n    }\n    /**\n     * Create the tab layout node to hold the widget.\n     */\n    _createTabNode(widget) {\n        let tabNode = new Private$6.TabLayoutNode(this._createTabBar());\n        tabNode.tabBar.addTab(widget.title);\n        Private$6.addAria(widget, tabNode.tabBar);\n        return tabNode;\n    }\n    /**\n     * Insert a widget next to an existing tab.\n     *\n     * #### Notes\n     * This does not attach the widget to the parent widget.\n     */\n    _insertTab(widget, ref, refNode, after) {\n        // Do nothing if the tab is inserted next to itself.\n        if (widget === ref) {\n            return;\n        }\n        // Create the root if it does not exist.\n        if (!this._root) {\n            let tabNode = new Private$6.TabLayoutNode(this._createTabBar());\n            tabNode.tabBar.addTab(widget.title);\n            this._root = tabNode;\n            Private$6.addAria(widget, tabNode.tabBar);\n            return;\n        }\n        // Use the first tab node as the ref node if needed.\n        if (!refNode) {\n            refNode = this._root.findFirstTabNode();\n        }\n        // If the widget is not contained in the ref node, ensure it is\n        // removed from the layout and hidden before being added again.\n        if (refNode.tabBar.titles.indexOf(widget.title) === -1) {\n            this._removeWidget(widget);\n            widget.hide();\n        }\n        // Lookup the target index for inserting the tab.\n        let index;\n        if (ref) {\n            index = refNode.tabBar.titles.indexOf(ref.title);\n        }\n        else {\n            index = refNode.tabBar.currentIndex;\n        }\n        // Using transform create an additional layer in the pixel pipeline\n        // to limit the number of layer, it is set only if there is more than one widget.\n        if (this._hiddenMode === Widget.HiddenMode.Scale) {\n            if (refNode.tabBar.titles.length === 0) {\n                // Singular tab should use display mode to limit number of layers.\n                widget.hiddenMode = Widget.HiddenMode.Display;\n            }\n            else if (refNode.tabBar.titles.length == 1) {\n                // If we are adding a second tab, switch the existing tab back to scale.\n                const existingWidget = refNode.tabBar.titles[0].owner;\n                existingWidget.hiddenMode = Widget.HiddenMode.Scale;\n            }\n            else {\n                // For the third and subsequent tabs no special action is needed.\n                widget.hiddenMode = Widget.HiddenMode.Scale;\n            }\n        }\n        else {\n            // For all other modes just propagate the current mode.\n            widget.hiddenMode = this._hiddenMode;\n        }\n        // Insert the widget's tab relative to the target index.\n        refNode.tabBar.insertTab(index + (after ? 1 : 0), widget.title);\n        Private$6.addAria(widget, refNode.tabBar);\n    }\n    /**\n     * Insert a widget as a new split area.\n     *\n     * #### Notes\n     * This does not attach the widget to the parent widget.\n     */\n    _insertSplit(widget, ref, refNode, orientation, after, merge = false) {\n        // Do nothing if there is no effective split.\n        if (widget === ref && refNode && refNode.tabBar.titles.length === 1) {\n            return;\n        }\n        // Ensure the widget is removed from the current layout.\n        this._removeWidget(widget);\n        // Set the root if it does not exist.\n        if (!this._root) {\n            this._root = this._createTabNode(widget);\n            return;\n        }\n        // If the ref node parent is null, split the root.\n        if (!refNode || !refNode.parent) {\n            // Ensure the root is split with the correct orientation.\n            let root = this._splitRoot(orientation);\n            // Determine the insert index for the new tab node.\n            let i = after ? root.children.length : 0;\n            // Normalize the split node.\n            root.normalizeSizes();\n            // Create the sizer for new tab node.\n            let sizer = Private$6.createSizer(refNode ? 1 : Private$6.GOLDEN_RATIO);\n            // Insert the tab node sized to the golden ratio.\n            let tabNode = this._createTabNode(widget);\n            ArrayExt.insert(root.children, i, tabNode);\n            ArrayExt.insert(root.sizers, i, sizer);\n            ArrayExt.insert(root.handles, i, this._createHandle());\n            tabNode.parent = root;\n            // Re-normalize the split node to maintain the ratios.\n            root.normalizeSizes();\n            // Finally, synchronize the visibility of the handles.\n            root.syncHandles();\n            return;\n        }\n        // Lookup the split node for the ref widget.\n        let splitNode = refNode.parent;\n        // If the split node already had the correct orientation,\n        // the widget can be inserted into the split node directly.\n        if (splitNode.orientation === orientation) {\n            // Find the index of the ref node.\n            let i = splitNode.children.indexOf(refNode);\n            // Conditionally reuse a tab layout found in the wanted position.\n            if (merge) {\n                let j = i + (after ? 1 : -1);\n                let sibling = splitNode.children[j];\n                if (sibling instanceof Private$6.TabLayoutNode) {\n                    this._insertTab(widget, null, sibling, true);\n                    ++sibling.tabBar.currentIndex;\n                    return;\n                }\n            }\n            // Normalize the split node.\n            splitNode.normalizeSizes();\n            // Consume half the space for the insert location.\n            let s = (splitNode.sizers[i].sizeHint /= 2);\n            // Insert the tab node sized to the other half.\n            let j = i + (after ? 1 : 0);\n            let tabNode = this._createTabNode(widget);\n            ArrayExt.insert(splitNode.children, j, tabNode);\n            ArrayExt.insert(splitNode.sizers, j, Private$6.createSizer(s));\n            ArrayExt.insert(splitNode.handles, j, this._createHandle());\n            tabNode.parent = splitNode;\n            // Finally, synchronize the visibility of the handles.\n            splitNode.syncHandles();\n            return;\n        }\n        // Remove the ref node from the split node.\n        let i = ArrayExt.removeFirstOf(splitNode.children, refNode);\n        // Create a new normalized split node for the children.\n        let childNode = new Private$6.SplitLayoutNode(orientation);\n        childNode.normalized = true;\n        // Add the ref node sized to half the space.\n        childNode.children.push(refNode);\n        childNode.sizers.push(Private$6.createSizer(0.5));\n        childNode.handles.push(this._createHandle());\n        refNode.parent = childNode;\n        // Add the tab node sized to the other half.\n        let j = after ? 1 : 0;\n        let tabNode = this._createTabNode(widget);\n        ArrayExt.insert(childNode.children, j, tabNode);\n        ArrayExt.insert(childNode.sizers, j, Private$6.createSizer(0.5));\n        ArrayExt.insert(childNode.handles, j, this._createHandle());\n        tabNode.parent = childNode;\n        // Synchronize the visibility of the handles.\n        childNode.syncHandles();\n        // Finally, add the new child node to the original split node.\n        ArrayExt.insert(splitNode.children, i, childNode);\n        childNode.parent = splitNode;\n    }\n    /**\n     * Ensure the root is a split node with the given orientation.\n     */\n    _splitRoot(orientation) {\n        // Bail early if the root already meets the requirements.\n        let oldRoot = this._root;\n        if (oldRoot instanceof Private$6.SplitLayoutNode) {\n            if (oldRoot.orientation === orientation) {\n                return oldRoot;\n            }\n        }\n        // Create a new root node with the specified orientation.\n        let newRoot = (this._root = new Private$6.SplitLayoutNode(orientation));\n        // Add the old root to the new root.\n        if (oldRoot) {\n            newRoot.children.push(oldRoot);\n            newRoot.sizers.push(Private$6.createSizer(0));\n            newRoot.handles.push(this._createHandle());\n            oldRoot.parent = newRoot;\n        }\n        // Return the new root as a convenience.\n        return newRoot;\n    }\n    /**\n     * Fit the layout to the total size required by the widgets.\n     */\n    _fit() {\n        // Set up the computed minimum size.\n        let minW = 0;\n        let minH = 0;\n        // Update the size limits for the layout tree.\n        if (this._root) {\n            let limits = this._root.fit(this._spacing, this._items);\n            minW = limits.minWidth;\n            minH = limits.minHeight;\n        }\n        // Update the box sizing and add it to the computed min size.\n        let box = (this._box = ElementExt.boxSizing(this.parent.node));\n        minW += box.horizontalSum;\n        minH += box.verticalSum;\n        // Update the parent's min size constraints.\n        let style = this.parent.node.style;\n        style.minWidth = `${minW}px`;\n        style.minHeight = `${minH}px`;\n        // Set the dirty flag to ensure only a single update occurs.\n        this._dirty = true;\n        // Notify the ancestor that it should fit immediately. This may\n        // cause a resize of the parent, fulfilling the required update.\n        if (this.parent.parent) {\n            MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n        }\n        // If the dirty flag is still set, the parent was not resized.\n        // Trigger the required update on the parent widget immediately.\n        if (this._dirty) {\n            MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n        }\n    }\n    /**\n     * Update the layout position and size of the widgets.\n     *\n     * The parent offset dimensions should be `-1` if unknown.\n     */\n    _update(offsetWidth, offsetHeight) {\n        // Clear the dirty flag to indicate the update occurred.\n        this._dirty = false;\n        // Bail early if there is no root layout node.\n        if (!this._root) {\n            return;\n        }\n        // Measure the parent if the offset dimensions are unknown.\n        if (offsetWidth < 0) {\n            offsetWidth = this.parent.node.offsetWidth;\n        }\n        if (offsetHeight < 0) {\n            offsetHeight = this.parent.node.offsetHeight;\n        }\n        // Ensure the parent box sizing data is computed.\n        if (!this._box) {\n            this._box = ElementExt.boxSizing(this.parent.node);\n        }\n        // Compute the actual layout bounds adjusted for border and padding.\n        let x = this._box.paddingTop;\n        let y = this._box.paddingLeft;\n        let width = offsetWidth - this._box.horizontalSum;\n        let height = offsetHeight - this._box.verticalSum;\n        // Update the geometry of the layout tree.\n        this._root.update(x, y, width, height, this._spacing, this._items);\n    }\n    /**\n     * Create a new tab bar for use by the dock layout.\n     *\n     * #### Notes\n     * The tab bar will be attached to the parent if it exists.\n     */\n    _createTabBar() {\n        // Create the tab bar using the renderer.\n        let tabBar = this.renderer.createTabBar(this._document);\n        // Enforce necessary tab bar behavior.\n        tabBar.orientation = 'horizontal';\n        // Attach the tab bar to the parent if possible.\n        if (this.parent) {\n            this.attachWidget(tabBar);\n        }\n        // Return the initialized tab bar.\n        return tabBar;\n    }\n    /**\n     * Create a new handle for the dock layout.\n     *\n     * #### Notes\n     * The handle will be attached to the parent if it exists.\n     */\n    _createHandle() {\n        // Create the handle using the renderer.\n        let handle = this.renderer.createHandle();\n        // Initialize the handle layout behavior.\n        let style = handle.style;\n        style.position = 'absolute';\n        style.contain = 'strict';\n        style.top = '0';\n        style.left = '0';\n        style.width = '0';\n        style.height = '0';\n        // Attach the handle to the parent if it exists.\n        if (this.parent) {\n            this.parent.node.appendChild(handle);\n        }\n        // Return the initialized handle.\n        return handle;\n    }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$6;\n(function (Private) {\n    /**\n     * A fraction used for sizing root panels; ~= `1 / golden_ratio`.\n     */\n    Private.GOLDEN_RATIO = 0.618;\n    /**\n     * Create a box sizer with an initial size hint.\n     */\n    function createSizer(hint) {\n        let sizer = new BoxSizer();\n        sizer.sizeHint = hint;\n        sizer.size = hint;\n        return sizer;\n    }\n    Private.createSizer = createSizer;\n    /**\n     * Normalize an area config object and collect the visited widgets.\n     */\n    function normalizeAreaConfig(config, widgetSet) {\n        let result;\n        if (config.type === 'tab-area') {\n            result = normalizeTabAreaConfig(config, widgetSet);\n        }\n        else {\n            result = normalizeSplitAreaConfig(config, widgetSet);\n        }\n        return result;\n    }\n    Private.normalizeAreaConfig = normalizeAreaConfig;\n    /**\n     * Convert a normalized area config into a layout tree.\n     */\n    function realizeAreaConfig(config, renderer, document) {\n        let node;\n        if (config.type === 'tab-area') {\n            node = realizeTabAreaConfig(config, renderer, document);\n        }\n        else {\n            node = realizeSplitAreaConfig(config, renderer, document);\n        }\n        return node;\n    }\n    Private.realizeAreaConfig = realizeAreaConfig;\n    /**\n     * A layout node which holds the data for a tabbed area.\n     */\n    class TabLayoutNode {\n        /**\n         * Construct a new tab layout node.\n         *\n         * @param tabBar - The tab bar to use for the layout node.\n         */\n        constructor(tabBar) {\n            /**\n             * The parent of the layout node.\n             */\n            this.parent = null;\n            this._top = 0;\n            this._left = 0;\n            this._width = 0;\n            this._height = 0;\n            let tabSizer = new BoxSizer();\n            let widgetSizer = new BoxSizer();\n            tabSizer.stretch = 0;\n            widgetSizer.stretch = 1;\n            this.tabBar = tabBar;\n            this.sizers = [tabSizer, widgetSizer];\n        }\n        /**\n         * The most recent value for the `top` edge of the layout box.\n         */\n        get top() {\n            return this._top;\n        }\n        /**\n         * The most recent value for the `left` edge of the layout box.\n         */\n        get left() {\n            return this._left;\n        }\n        /**\n         * The most recent value for the `width` of the layout box.\n         */\n        get width() {\n            return this._width;\n        }\n        /**\n         * The most recent value for the `height` of the layout box.\n         */\n        get height() {\n            return this._height;\n        }\n        /**\n         * Create an iterator for all widgets in the layout tree.\n         */\n        *iterAllWidgets() {\n            yield this.tabBar;\n            yield* this.iterUserWidgets();\n        }\n        /**\n         * Create an iterator for the user widgets in the layout tree.\n         */\n        *iterUserWidgets() {\n            for (const title of this.tabBar.titles) {\n                yield title.owner;\n            }\n        }\n        /**\n         * Create an iterator for the selected widgets in the layout tree.\n         */\n        *iterSelectedWidgets() {\n            let title = this.tabBar.currentTitle;\n            if (title) {\n                yield title.owner;\n            }\n        }\n        /**\n         * Create an iterator for the tab bars in the layout tree.\n         */\n        *iterTabBars() {\n            yield this.tabBar;\n        }\n        /**\n         * Create an iterator for the handles in the layout tree.\n         */\n        // eslint-disable-next-line require-yield\n        *iterHandles() {\n            return;\n        }\n        /**\n         * Find the tab layout node which contains the given widget.\n         */\n        findTabNode(widget) {\n            return this.tabBar.titles.indexOf(widget.title) !== -1 ? this : null;\n        }\n        /**\n         * Find the split layout node which contains the given handle.\n         */\n        findSplitNode(handle) {\n            return null;\n        }\n        /**\n         * Find the first tab layout node in a layout tree.\n         */\n        findFirstTabNode() {\n            return this;\n        }\n        /**\n         * Find the tab layout node which contains the local point.\n         */\n        hitTestTabNodes(x, y) {\n            if (x < this._left || x >= this._left + this._width) {\n                return null;\n            }\n            if (y < this._top || y >= this._top + this._height) {\n                return null;\n            }\n            return this;\n        }\n        /**\n         * Create a configuration object for the layout tree.\n         */\n        createConfig() {\n            let widgets = this.tabBar.titles.map(title => title.owner);\n            let currentIndex = this.tabBar.currentIndex;\n            return { type: 'tab-area', widgets, currentIndex };\n        }\n        /**\n         * Recursively hold all of the sizes in the layout tree.\n         *\n         * This ignores the sizers of tab layout nodes.\n         */\n        holdAllSizes() {\n            return;\n        }\n        /**\n         * Fit the layout tree.\n         */\n        fit(spacing, items) {\n            // Set up the limit variables.\n            let minWidth = 0;\n            let minHeight = 0;\n            let maxWidth = Infinity;\n            let maxHeight = Infinity;\n            // Lookup the tab bar layout item.\n            let tabBarItem = items.get(this.tabBar);\n            // Lookup the widget layout item.\n            let current = this.tabBar.currentTitle;\n            let widgetItem = current ? items.get(current.owner) : undefined;\n            // Lookup the tab bar and widget sizers.\n            let [tabBarSizer, widgetSizer] = this.sizers;\n            // Update the tab bar limits.\n            if (tabBarItem) {\n                tabBarItem.fit();\n            }\n            // Update the widget limits.\n            if (widgetItem) {\n                widgetItem.fit();\n            }\n            // Update the results and sizer for the tab bar.\n            if (tabBarItem && !tabBarItem.isHidden) {\n                minWidth = Math.max(minWidth, tabBarItem.minWidth);\n                minHeight += tabBarItem.minHeight;\n                tabBarSizer.minSize = tabBarItem.minHeight;\n                tabBarSizer.maxSize = tabBarItem.maxHeight;\n            }\n            else {\n                tabBarSizer.minSize = 0;\n                tabBarSizer.maxSize = 0;\n            }\n            // Update the results and sizer for the current widget.\n            if (widgetItem && !widgetItem.isHidden) {\n                minWidth = Math.max(minWidth, widgetItem.minWidth);\n                minHeight += widgetItem.minHeight;\n                widgetSizer.minSize = widgetItem.minHeight;\n                widgetSizer.maxSize = Infinity;\n            }\n            else {\n                widgetSizer.minSize = 0;\n                widgetSizer.maxSize = Infinity;\n            }\n            // Return the computed size limits for the layout node.\n            return { minWidth, minHeight, maxWidth, maxHeight };\n        }\n        /**\n         * Update the layout tree.\n         */\n        update(left, top, width, height, spacing, items) {\n            // Update the layout box values.\n            this._top = top;\n            this._left = left;\n            this._width = width;\n            this._height = height;\n            // Lookup the tab bar layout item.\n            let tabBarItem = items.get(this.tabBar);\n            // Lookup the widget layout item.\n            let current = this.tabBar.currentTitle;\n            let widgetItem = current ? items.get(current.owner) : undefined;\n            // Distribute the layout space to the sizers.\n            BoxEngine.calc(this.sizers, height);\n            // Update the tab bar item using the computed size.\n            if (tabBarItem && !tabBarItem.isHidden) {\n                let size = this.sizers[0].size;\n                tabBarItem.update(left, top, width, size);\n                top += size;\n            }\n            // Layout the widget using the computed size.\n            if (widgetItem && !widgetItem.isHidden) {\n                let size = this.sizers[1].size;\n                widgetItem.update(left, top, width, size);\n            }\n        }\n    }\n    Private.TabLayoutNode = TabLayoutNode;\n    /**\n     * A layout node which holds the data for a split area.\n     */\n    class SplitLayoutNode {\n        /**\n         * Construct a new split layout node.\n         *\n         * @param orientation - The orientation of the node.\n         */\n        constructor(orientation) {\n            /**\n             * The parent of the layout node.\n             */\n            this.parent = null;\n            /**\n             * Whether the sizers have been normalized.\n             */\n            this.normalized = false;\n            /**\n             * The child nodes for the split node.\n             */\n            this.children = [];\n            /**\n             * The box sizers for the layout children.\n             */\n            this.sizers = [];\n            /**\n             * The handles for the layout children.\n             */\n            this.handles = [];\n            this.orientation = orientation;\n        }\n        /**\n         * Create an iterator for all widgets in the layout tree.\n         */\n        *iterAllWidgets() {\n            for (const child of this.children) {\n                yield* child.iterAllWidgets();\n            }\n        }\n        /**\n         * Create an iterator for the user widgets in the layout tree.\n         */\n        *iterUserWidgets() {\n            for (const child of this.children) {\n                yield* child.iterUserWidgets();\n            }\n        }\n        /**\n         * Create an iterator for the selected widgets in the layout tree.\n         */\n        *iterSelectedWidgets() {\n            for (const child of this.children) {\n                yield* child.iterSelectedWidgets();\n            }\n        }\n        /**\n         * Create an iterator for the tab bars in the layout tree.\n         */\n        *iterTabBars() {\n            for (const child of this.children) {\n                yield* child.iterTabBars();\n            }\n        }\n        /**\n         * Create an iterator for the handles in the layout tree.\n         */\n        *iterHandles() {\n            yield* this.handles;\n            for (const child of this.children) {\n                yield* child.iterHandles();\n            }\n        }\n        /**\n         * Find the tab layout node which contains the given widget.\n         */\n        findTabNode(widget) {\n            for (let i = 0, n = this.children.length; i < n; ++i) {\n                let result = this.children[i].findTabNode(widget);\n                if (result) {\n                    return result;\n                }\n            }\n            return null;\n        }\n        /**\n         * Find the split layout node which contains the given handle.\n         */\n        findSplitNode(handle) {\n            let index = this.handles.indexOf(handle);\n            if (index !== -1) {\n                return { index, node: this };\n            }\n            for (let i = 0, n = this.children.length; i < n; ++i) {\n                let result = this.children[i].findSplitNode(handle);\n                if (result) {\n                    return result;\n                }\n            }\n            return null;\n        }\n        /**\n         * Find the first tab layout node in a layout tree.\n         */\n        findFirstTabNode() {\n            if (this.children.length === 0) {\n                return null;\n            }\n            return this.children[0].findFirstTabNode();\n        }\n        /**\n         * Find the tab layout node which contains the local point.\n         */\n        hitTestTabNodes(x, y) {\n            for (let i = 0, n = this.children.length; i < n; ++i) {\n                let result = this.children[i].hitTestTabNodes(x, y);\n                if (result) {\n                    return result;\n                }\n            }\n            return null;\n        }\n        /**\n         * Create a configuration object for the layout tree.\n         */\n        createConfig() {\n            let orientation = this.orientation;\n            let sizes = this.createNormalizedSizes();\n            let children = this.children.map(child => child.createConfig());\n            return { type: 'split-area', orientation, children, sizes };\n        }\n        /**\n         * Sync the visibility and orientation of the handles.\n         */\n        syncHandles() {\n            this.handles.forEach((handle, i) => {\n                handle.setAttribute('data-orientation', this.orientation);\n                if (i === this.handles.length - 1) {\n                    handle.classList.add('lm-mod-hidden');\n                }\n                else {\n                    handle.classList.remove('lm-mod-hidden');\n                }\n            });\n        }\n        /**\n         * Hold the current sizes of the box sizers.\n         *\n         * This sets the size hint of each sizer to its current size.\n         */\n        holdSizes() {\n            for (const sizer of this.sizers) {\n                sizer.sizeHint = sizer.size;\n            }\n        }\n        /**\n         * Recursively hold all of the sizes in the layout tree.\n         *\n         * This ignores the sizers of tab layout nodes.\n         */\n        holdAllSizes() {\n            for (const child of this.children) {\n                child.holdAllSizes();\n            }\n            this.holdSizes();\n        }\n        /**\n         * Normalize the sizes of the split layout node.\n         */\n        normalizeSizes() {\n            // Bail early if the sizers are empty.\n            let n = this.sizers.length;\n            if (n === 0) {\n                return;\n            }\n            // Hold the current sizes of the sizers.\n            this.holdSizes();\n            // Compute the sum of the sizes.\n            let sum = this.sizers.reduce((v, sizer) => v + sizer.sizeHint, 0);\n            // Normalize the sizes based on the sum.\n            if (sum === 0) {\n                for (const sizer of this.sizers) {\n                    sizer.size = sizer.sizeHint = 1 / n;\n                }\n            }\n            else {\n                for (const sizer of this.sizers) {\n                    sizer.size = sizer.sizeHint /= sum;\n                }\n            }\n            // Mark the sizes as normalized.\n            this.normalized = true;\n        }\n        /**\n         * Snap the normalized sizes of the split layout node.\n         */\n        createNormalizedSizes() {\n            // Bail early if the sizers are empty.\n            let n = this.sizers.length;\n            if (n === 0) {\n                return [];\n            }\n            // Grab the current sizes of the sizers.\n            let sizes = this.sizers.map(sizer => sizer.size);\n            // Compute the sum of the sizes.\n            let sum = sizes.reduce((v, size) => v + size, 0);\n            // Normalize the sizes based on the sum.\n            if (sum === 0) {\n                for (let i = sizes.length - 1; i > -1; i--) {\n                    sizes[i] = 1 / n;\n                }\n            }\n            else {\n                for (let i = sizes.length - 1; i > -1; i--) {\n                    sizes[i] /= sum;\n                }\n            }\n            // Return the normalized sizes.\n            return sizes;\n        }\n        /**\n         * Fit the layout tree.\n         */\n        fit(spacing, items) {\n            // Compute the required fixed space.\n            let horizontal = this.orientation === 'horizontal';\n            let fixed = Math.max(0, this.children.length - 1) * spacing;\n            // Set up the limit variables.\n            let minWidth = horizontal ? fixed : 0;\n            let minHeight = horizontal ? 0 : fixed;\n            let maxWidth = Infinity;\n            let maxHeight = Infinity;\n            // Fit the children and update the limits.\n            for (let i = 0, n = this.children.length; i < n; ++i) {\n                let limits = this.children[i].fit(spacing, items);\n                if (horizontal) {\n                    minHeight = Math.max(minHeight, limits.minHeight);\n                    minWidth += limits.minWidth;\n                    this.sizers[i].minSize = limits.minWidth;\n                }\n                else {\n                    minWidth = Math.max(minWidth, limits.minWidth);\n                    minHeight += limits.minHeight;\n                    this.sizers[i].minSize = limits.minHeight;\n                }\n            }\n            // Return the computed limits for the layout node.\n            return { minWidth, minHeight, maxWidth, maxHeight };\n        }\n        /**\n         * Update the layout tree.\n         */\n        update(left, top, width, height, spacing, items) {\n            // Compute the available layout space.\n            let horizontal = this.orientation === 'horizontal';\n            let fixed = Math.max(0, this.children.length - 1) * spacing;\n            let space = Math.max(0, (horizontal ? width : height) - fixed);\n            // De-normalize the sizes if needed.\n            if (this.normalized) {\n                for (const sizer of this.sizers) {\n                    sizer.sizeHint *= space;\n                }\n                this.normalized = false;\n            }\n            // Distribute the layout space to the sizers.\n            BoxEngine.calc(this.sizers, space);\n            // Update the geometry of the child nodes and handles.\n            for (let i = 0, n = this.children.length; i < n; ++i) {\n                let child = this.children[i];\n                let size = this.sizers[i].size;\n                let handleStyle = this.handles[i].style;\n                if (horizontal) {\n                    child.update(left, top, size, height, spacing, items);\n                    left += size;\n                    handleStyle.top = `${top}px`;\n                    handleStyle.left = `${left}px`;\n                    handleStyle.width = `${spacing}px`;\n                    handleStyle.height = `${height}px`;\n                    left += spacing;\n                }\n                else {\n                    child.update(left, top, width, size, spacing, items);\n                    top += size;\n                    handleStyle.top = `${top}px`;\n                    handleStyle.left = `${left}px`;\n                    handleStyle.width = `${width}px`;\n                    handleStyle.height = `${spacing}px`;\n                    top += spacing;\n                }\n            }\n        }\n    }\n    Private.SplitLayoutNode = SplitLayoutNode;\n    function addAria(widget, tabBar) {\n        widget.node.setAttribute('role', 'tabpanel');\n        let renderer = tabBar.renderer;\n        if (renderer instanceof TabBar.Renderer) {\n            let tabId = renderer.createTabKey({\n                title: widget.title,\n                current: false,\n                zIndex: 0\n            });\n            widget.node.setAttribute('aria-labelledby', tabId);\n        }\n    }\n    Private.addAria = addAria;\n    function removeAria(widget) {\n        widget.node.removeAttribute('role');\n        widget.node.removeAttribute('aria-labelledby');\n    }\n    Private.removeAria = removeAria;\n    /**\n     * Normalize a tab area config and collect the visited widgets.\n     */\n    function normalizeTabAreaConfig(config, widgetSet) {\n        // Bail early if there is no content.\n        if (config.widgets.length === 0) {\n            return null;\n        }\n        // Setup the filtered widgets array.\n        let widgets = [];\n        // Filter the config for unique widgets.\n        for (const widget of config.widgets) {\n            if (!widgetSet.has(widget)) {\n                widgetSet.add(widget);\n                widgets.push(widget);\n            }\n        }\n        // Bail if there are no effective widgets.\n        if (widgets.length === 0) {\n            return null;\n        }\n        // Normalize the current index.\n        let index = config.currentIndex;\n        if (index !== -1 && (index < 0 || index >= widgets.length)) {\n            index = 0;\n        }\n        // Return a normalized config object.\n        return { type: 'tab-area', widgets, currentIndex: index };\n    }\n    /**\n     * Normalize a split area config and collect the visited widgets.\n     */\n    function normalizeSplitAreaConfig(config, widgetSet) {\n        // Set up the result variables.\n        let orientation = config.orientation;\n        let children = [];\n        let sizes = [];\n        // Normalize the config children.\n        for (let i = 0, n = config.children.length; i < n; ++i) {\n            // Normalize the child config.\n            let child = normalizeAreaConfig(config.children[i], widgetSet);\n            // Ignore an empty child.\n            if (!child) {\n                continue;\n            }\n            // Add the child or hoist its content as appropriate.\n            if (child.type === 'tab-area' || child.orientation !== orientation) {\n                children.push(child);\n                sizes.push(Math.abs(config.sizes[i] || 0));\n            }\n            else {\n                children.push(...child.children);\n                sizes.push(...child.sizes);\n            }\n        }\n        // Bail if there are no effective children.\n        if (children.length === 0) {\n            return null;\n        }\n        // If there is only one effective child, return that child.\n        if (children.length === 1) {\n            return children[0];\n        }\n        // Return a normalized config object.\n        return { type: 'split-area', orientation, children, sizes };\n    }\n    /**\n     * Convert a normalized tab area config into a layout tree.\n     */\n    function realizeTabAreaConfig(config, renderer, document) {\n        // Create the tab bar for the layout node.\n        let tabBar = renderer.createTabBar(document);\n        // Hide each widget and add it to the tab bar.\n        for (const widget of config.widgets) {\n            widget.hide();\n            tabBar.addTab(widget.title);\n            Private.addAria(widget, tabBar);\n        }\n        // Set the current index of the tab bar.\n        tabBar.currentIndex = config.currentIndex;\n        // Return the new tab layout node.\n        return new TabLayoutNode(tabBar);\n    }\n    /**\n     * Convert a normalized split area config into a layout tree.\n     */\n    function realizeSplitAreaConfig(config, renderer, document) {\n        // Create the split layout node.\n        let node = new SplitLayoutNode(config.orientation);\n        // Add each child to the layout node.\n        config.children.forEach((child, i) => {\n            // Create the child data for the layout node.\n            let childNode = realizeAreaConfig(child, renderer, document);\n            let sizer = createSizer(config.sizes[i]);\n            let handle = renderer.createHandle();\n            // Add the child data to the layout node.\n            node.children.push(childNode);\n            node.handles.push(handle);\n            node.sizers.push(sizer);\n            // Update the parent for the child node.\n            childNode.parent = node;\n        });\n        // Synchronize the handle state for the layout node.\n        node.syncHandles();\n        // Normalize the sizes for the layout node.\n        node.normalizeSizes();\n        // Return the new layout node.\n        return node;\n    }\n})(Private$6 || (Private$6 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which provides a flexible docking area for widgets.\n *\n * #### Notes\n * See also the related [example](../../examples/dockpanel/index.html) and\n * its [source](https://github.com/jupyterlab/lumino/tree/main/examples/example-dockpanel).\n */\nclass DockPanel extends Widget {\n    /**\n     * Construct a new dock panel.\n     *\n     * @param options - The options for initializing the panel.\n     */\n    constructor(options = {}) {\n        super();\n        this._drag = null;\n        this._tabsMovable = true;\n        this._tabsConstrained = false;\n        this._addButtonEnabled = false;\n        this._pressData = null;\n        this._layoutModified = new Signal(this);\n        this._addRequested = new Signal(this);\n        this.addClass('lm-DockPanel');\n        this._document = options.document || document;\n        this._mode = options.mode || 'multiple-document';\n        this._renderer = options.renderer || DockPanel.defaultRenderer;\n        this._edges = options.edges || Private$5.DEFAULT_EDGES;\n        if (options.tabsMovable !== undefined) {\n            this._tabsMovable = options.tabsMovable;\n        }\n        if (options.tabsConstrained !== undefined) {\n            this._tabsConstrained = options.tabsConstrained;\n        }\n        if (options.addButtonEnabled !== undefined) {\n            this._addButtonEnabled = options.addButtonEnabled;\n        }\n        // Toggle the CSS mode attribute.\n        this.dataset['mode'] = this._mode;\n        // Create the delegate renderer for the layout.\n        let renderer = {\n            createTabBar: () => this._createTabBar(),\n            createHandle: () => this._createHandle()\n        };\n        // Set up the dock layout for the panel.\n        this.layout = new DockLayout({\n            document: this._document,\n            renderer,\n            spacing: options.spacing,\n            hiddenMode: options.hiddenMode\n        });\n        // Set up the overlay drop indicator.\n        this.overlay = options.overlay || new DockPanel.Overlay();\n        this.node.appendChild(this.overlay.node);\n    }\n    /**\n     * Dispose of the resources held by the panel.\n     */\n    dispose() {\n        // Ensure the mouse is released.\n        this._releaseMouse();\n        // Hide the overlay.\n        this.overlay.hide(0);\n        // Cancel a drag if one is in progress.\n        if (this._drag) {\n            this._drag.dispose();\n        }\n        // Dispose of the base class.\n        super.dispose();\n    }\n    /**\n     * The method for hiding widgets.\n     */\n    get hiddenMode() {\n        return this.layout.hiddenMode;\n    }\n    /**\n     * Set the method for hiding widgets.\n     */\n    set hiddenMode(v) {\n        this.layout.hiddenMode = v;\n    }\n    /**\n     * A signal emitted when the layout configuration is modified.\n     *\n     * #### Notes\n     * This signal is emitted whenever the current layout configuration\n     * may have changed.\n     *\n     * This signal is emitted asynchronously in a collapsed fashion, so\n     * that multiple synchronous modifications results in only a single\n     * emit of the signal.\n     */\n    get layoutModified() {\n        return this._layoutModified;\n    }\n    /**\n     * A signal emitted when the add button on a tab bar is clicked.\n     *\n     */\n    get addRequested() {\n        return this._addRequested;\n    }\n    /**\n     * The renderer used by the dock panel.\n     */\n    get renderer() {\n        return this.layout.renderer;\n    }\n    /**\n     * Get the spacing between the widgets.\n     */\n    get spacing() {\n        return this.layout.spacing;\n    }\n    /**\n     * Set the spacing between the widgets.\n     */\n    set spacing(value) {\n        this.layout.spacing = value;\n    }\n    /**\n     * Get the mode for the dock panel.\n     */\n    get mode() {\n        return this._mode;\n    }\n    /**\n     * Set the mode for the dock panel.\n     *\n     * #### Notes\n     * Changing the mode is a destructive operation with respect to the\n     * panel's layout configuration. If layout state must be preserved,\n     * save the current layout config before changing the mode.\n     */\n    set mode(value) {\n        // Bail early if the mode does not change.\n        if (this._mode === value) {\n            return;\n        }\n        // Update the internal mode.\n        this._mode = value;\n        // Toggle the CSS mode attribute.\n        this.dataset['mode'] = value;\n        // Get the layout for the panel.\n        let layout = this.layout;\n        // Configure the layout for the specified mode.\n        switch (value) {\n            case 'multiple-document':\n                for (const tabBar of layout.tabBars()) {\n                    tabBar.show();\n                }\n                break;\n            case 'single-document':\n                layout.restoreLayout(Private$5.createSingleDocumentConfig(this));\n                break;\n            default:\n                throw 'unreachable';\n        }\n        // Schedule an emit of the layout modified signal.\n        MessageLoop.postMessage(this, Private$5.LayoutModified);\n    }\n    /**\n     * Whether the tabs can be dragged / moved at runtime.\n     */\n    get tabsMovable() {\n        return this._tabsMovable;\n    }\n    /**\n     * Enable / Disable draggable / movable tabs.\n     */\n    set tabsMovable(value) {\n        this._tabsMovable = value;\n        for (const tabBar of this.tabBars()) {\n            tabBar.tabsMovable = value;\n        }\n    }\n    /**\n     * Whether the tabs are constrained to their source dock panel\n     */\n    get tabsConstrained() {\n        return this._tabsConstrained;\n    }\n    /**\n     * Constrain/Allow tabs to be dragged outside of this dock panel\n     */\n    set tabsConstrained(value) {\n        this._tabsConstrained = value;\n    }\n    /**\n     * Whether the add buttons for each tab bar are enabled.\n     */\n    get addButtonEnabled() {\n        return this._addButtonEnabled;\n    }\n    /**\n     * Set whether the add buttons for each tab bar are enabled.\n     */\n    set addButtonEnabled(value) {\n        this._addButtonEnabled = value;\n        for (const tabBar of this.tabBars()) {\n            tabBar.addButtonEnabled = value;\n        }\n    }\n    /**\n     * Whether the dock panel is empty.\n     */\n    get isEmpty() {\n        return this.layout.isEmpty;\n    }\n    /**\n     * Create an iterator over the user widgets in the panel.\n     *\n     * @returns A new iterator over the user widgets in the panel.\n     *\n     * #### Notes\n     * This iterator does not include the generated tab bars.\n     */\n    *widgets() {\n        yield* this.layout.widgets();\n    }\n    /**\n     * Create an iterator over the selected widgets in the panel.\n     *\n     * @returns A new iterator over the selected user widgets.\n     *\n     * #### Notes\n     * This iterator yields the widgets corresponding to the current tab\n     * of each tab bar in the panel.\n     */\n    *selectedWidgets() {\n        yield* this.layout.selectedWidgets();\n    }\n    /**\n     * Create an iterator over the tab bars in the panel.\n     *\n     * @returns A new iterator over the tab bars in the panel.\n     *\n     * #### Notes\n     * This iterator does not include the user widgets.\n     */\n    *tabBars() {\n        yield* this.layout.tabBars();\n    }\n    /**\n     * Create an iterator over the handles in the panel.\n     *\n     * @returns A new iterator over the handles in the panel.\n     */\n    *handles() {\n        yield* this.layout.handles();\n    }\n    /**\n     * Select a specific widget in the dock panel.\n     *\n     * @param widget - The widget of interest.\n     *\n     * #### Notes\n     * This will make the widget the current widget in its tab area.\n     */\n    selectWidget(widget) {\n        // Find the tab bar which contains the widget.\n        let tabBar = find(this.tabBars(), bar => {\n            return bar.titles.indexOf(widget.title) !== -1;\n        });\n        // Throw an error if no tab bar is found.\n        if (!tabBar) {\n            throw new Error('Widget is not contained in the dock panel.');\n        }\n        // Ensure the widget is the current widget.\n        tabBar.currentTitle = widget.title;\n    }\n    /**\n     * Activate a specified widget in the dock panel.\n     *\n     * @param widget - The widget of interest.\n     *\n     * #### Notes\n     * This will select and activate the given widget.\n     */\n    activateWidget(widget) {\n        this.selectWidget(widget);\n        widget.activate();\n    }\n    /**\n     * Save the current layout configuration of the dock panel.\n     *\n     * @returns A new config object for the current layout state.\n     *\n     * #### Notes\n     * The return value can be provided to the `restoreLayout` method\n     * in order to restore the layout to its current configuration.\n     */\n    saveLayout() {\n        return this.layout.saveLayout();\n    }\n    /**\n     * Restore the layout to a previously saved configuration.\n     *\n     * @param config - The layout configuration to restore.\n     *\n     * #### Notes\n     * Widgets which currently belong to the layout but which are not\n     * contained in the config will be unparented.\n     *\n     * The dock panel automatically reverts to `'multiple-document'`\n     * mode when a layout config is restored.\n     */\n    restoreLayout(config) {\n        // Reset the mode.\n        this._mode = 'multiple-document';\n        // Restore the layout.\n        this.layout.restoreLayout(config);\n        // Flush the message loop on IE and Edge to prevent flicker.\n        if (Platform.IS_EDGE || Platform.IS_IE) {\n            MessageLoop.flush();\n        }\n        // Schedule an emit of the layout modified signal.\n        MessageLoop.postMessage(this, Private$5.LayoutModified);\n    }\n    /**\n     * Add a widget to the dock panel.\n     *\n     * @param widget - The widget to add to the dock panel.\n     *\n     * @param options - The additional options for adding the widget.\n     *\n     * #### Notes\n     * If the panel is in single document mode, the options are ignored\n     * and the widget is always added as tab in the hidden tab bar.\n     */\n    addWidget(widget, options = {}) {\n        // Add the widget to the layout.\n        if (this._mode === 'single-document') {\n            this.layout.addWidget(widget);\n        }\n        else {\n            this.layout.addWidget(widget, options);\n        }\n        // Schedule an emit of the layout modified signal.\n        MessageLoop.postMessage(this, Private$5.LayoutModified);\n    }\n    /**\n     * Process a message sent to the widget.\n     *\n     * @param msg - The message sent to the widget.\n     */\n    processMessage(msg) {\n        if (msg.type === 'layout-modified') {\n            this._layoutModified.emit(undefined);\n        }\n        else {\n            super.processMessage(msg);\n        }\n    }\n    /**\n     * Handle the DOM events for the dock panel.\n     *\n     * @param event - The DOM event sent to the panel.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the panel's DOM node. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'lm-dragenter':\n                this._evtDragEnter(event);\n                break;\n            case 'lm-dragleave':\n                this._evtDragLeave(event);\n                break;\n            case 'lm-dragover':\n                this._evtDragOver(event);\n                break;\n            case 'lm-drop':\n                this._evtDrop(event);\n                break;\n            case 'pointerdown':\n                this._evtPointerDown(event);\n                break;\n            case 'pointermove':\n                this._evtPointerMove(event);\n                break;\n            case 'pointerup':\n                this._evtPointerUp(event);\n                break;\n            case 'keydown':\n                this._evtKeyDown(event);\n                break;\n            case 'contextmenu':\n                event.preventDefault();\n                event.stopPropagation();\n                break;\n        }\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     */\n    onBeforeAttach(msg) {\n        this.node.addEventListener('lm-dragenter', this);\n        this.node.addEventListener('lm-dragleave', this);\n        this.node.addEventListener('lm-dragover', this);\n        this.node.addEventListener('lm-drop', this);\n        this.node.addEventListener('pointerdown', this);\n    }\n    /**\n     * A message handler invoked on an `'after-detach'` message.\n     */\n    onAfterDetach(msg) {\n        this.node.removeEventListener('lm-dragenter', this);\n        this.node.removeEventListener('lm-dragleave', this);\n        this.node.removeEventListener('lm-dragover', this);\n        this.node.removeEventListener('lm-drop', this);\n        this.node.removeEventListener('pointerdown', this);\n        this._releaseMouse();\n    }\n    /**\n     * A message handler invoked on a `'child-added'` message.\n     */\n    onChildAdded(msg) {\n        // Ignore the generated tab bars.\n        if (Private$5.isGeneratedTabBarProperty.get(msg.child)) {\n            return;\n        }\n        // Add the widget class to the child.\n        msg.child.addClass('lm-DockPanel-widget');\n    }\n    /**\n     * A message handler invoked on a `'child-removed'` message.\n     */\n    onChildRemoved(msg) {\n        // Ignore the generated tab bars.\n        if (Private$5.isGeneratedTabBarProperty.get(msg.child)) {\n            return;\n        }\n        // Remove the widget class from the child.\n        msg.child.removeClass('lm-DockPanel-widget');\n        // Schedule an emit of the layout modified signal.\n        MessageLoop.postMessage(this, Private$5.LayoutModified);\n    }\n    /**\n     * Handle the `'lm-dragenter'` event for the dock panel.\n     */\n    _evtDragEnter(event) {\n        // If the factory mime type is present, mark the event as\n        // handled in order to get the rest of the drag events.\n        if (event.mimeData.hasData('application/vnd.lumino.widget-factory')) {\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    }\n    /**\n     * Handle the `'lm-dragleave'` event for the dock panel.\n     */\n    _evtDragLeave(event) {\n        // Mark the event as handled.\n        event.preventDefault();\n        if (this._tabsConstrained && event.source !== this)\n            return;\n        event.stopPropagation();\n        // The new target might be a descendant, so we might still handle the drop.\n        // Hide asynchronously so that if a lm-dragover event bubbles up to us, the\n        // hide is cancelled by the lm-dragover handler's show overlay logic.\n        this.overlay.hide(1);\n    }\n    /**\n     * Handle the `'lm-dragover'` event for the dock panel.\n     */\n    _evtDragOver(event) {\n        // Mark the event as handled.\n        event.preventDefault();\n        // Show the drop indicator overlay and update the drop\n        // action based on the drop target zone under the mouse.\n        if ((this._tabsConstrained && event.source !== this) ||\n            this._showOverlay(event.clientX, event.clientY) === 'invalid') {\n            event.dropAction = 'none';\n        }\n        else {\n            event.stopPropagation();\n            event.dropAction = event.proposedAction;\n        }\n    }\n    /**\n     * Handle the `'lm-drop'` event for the dock panel.\n     */\n    _evtDrop(event) {\n        // Mark the event as handled.\n        event.preventDefault();\n        // Hide the drop indicator overlay.\n        this.overlay.hide(0);\n        // Bail if the proposed action is to do nothing.\n        if (event.proposedAction === 'none') {\n            event.dropAction = 'none';\n            return;\n        }\n        // Find the drop target under the mouse.\n        let { clientX, clientY } = event;\n        let { zone, target } = Private$5.findDropTarget(this, clientX, clientY, this._edges);\n        // Bail if the drop zone is invalid.\n        if ((this._tabsConstrained && event.source !== this) ||\n            zone === 'invalid') {\n            event.dropAction = 'none';\n            return;\n        }\n        // Bail if the factory mime type has invalid data.\n        let mimeData = event.mimeData;\n        let factory = mimeData.getData('application/vnd.lumino.widget-factory');\n        if (typeof factory !== 'function') {\n            event.dropAction = 'none';\n            return;\n        }\n        // Bail if the factory does not produce a widget.\n        let widget = factory();\n        if (!(widget instanceof Widget)) {\n            event.dropAction = 'none';\n            return;\n        }\n        // Bail if the widget is an ancestor of the dock panel.\n        if (widget.contains(this)) {\n            event.dropAction = 'none';\n            return;\n        }\n        // Find the reference widget for the drop target.\n        let ref = target ? Private$5.getDropRef(target.tabBar) : null;\n        // Add the widget according to the indicated drop zone.\n        switch (zone) {\n            case 'root-all':\n                this.addWidget(widget);\n                break;\n            case 'root-top':\n                this.addWidget(widget, { mode: 'split-top' });\n                break;\n            case 'root-left':\n                this.addWidget(widget, { mode: 'split-left' });\n                break;\n            case 'root-right':\n                this.addWidget(widget, { mode: 'split-right' });\n                break;\n            case 'root-bottom':\n                this.addWidget(widget, { mode: 'split-bottom' });\n                break;\n            case 'widget-all':\n                this.addWidget(widget, { mode: 'tab-after', ref });\n                break;\n            case 'widget-top':\n                this.addWidget(widget, { mode: 'split-top', ref });\n                break;\n            case 'widget-left':\n                this.addWidget(widget, { mode: 'split-left', ref });\n                break;\n            case 'widget-right':\n                this.addWidget(widget, { mode: 'split-right', ref });\n                break;\n            case 'widget-bottom':\n                this.addWidget(widget, { mode: 'split-bottom', ref });\n                break;\n            case 'widget-tab':\n                this.addWidget(widget, { mode: 'tab-after', ref });\n                break;\n            default:\n                throw 'unreachable';\n        }\n        // Accept the proposed drop action.\n        event.dropAction = event.proposedAction;\n        // Stop propagation if we have not bailed so far.\n        event.stopPropagation();\n        // Activate the dropped widget.\n        this.activateWidget(widget);\n    }\n    /**\n     * Handle the `'keydown'` event for the dock panel.\n     */\n    _evtKeyDown(event) {\n        // Stop input events during drag.\n        event.preventDefault();\n        event.stopPropagation();\n        // Release the mouse if `Escape` is pressed.\n        if (event.keyCode === 27) {\n            // Finalize the mouse release.\n            this._releaseMouse();\n            // Schedule an emit of the layout modified signal.\n            MessageLoop.postMessage(this, Private$5.LayoutModified);\n        }\n    }\n    /**\n     * Handle the `'pointerdown'` event for the dock panel.\n     */\n    _evtPointerDown(event) {\n        // Do nothing if the left mouse button is not pressed.\n        if (event.button !== 0) {\n            return;\n        }\n        // Find the handle which contains the mouse target, if any.\n        let layout = this.layout;\n        let target = event.target;\n        let handle = find(layout.handles(), handle => handle.contains(target));\n        if (!handle) {\n            return;\n        }\n        // Stop the event when a handle is pressed.\n        event.preventDefault();\n        event.stopPropagation();\n        // Add the extra document listeners.\n        this._document.addEventListener('keydown', this, true);\n        this._document.addEventListener('pointerup', this, true);\n        this._document.addEventListener('pointermove', this, true);\n        this._document.addEventListener('contextmenu', this, true);\n        // Compute the offset deltas for the handle press.\n        let rect = handle.getBoundingClientRect();\n        let deltaX = event.clientX - rect.left;\n        let deltaY = event.clientY - rect.top;\n        // Override the cursor and store the press data.\n        let style = window.getComputedStyle(handle);\n        let override = Drag.overrideCursor(style.cursor, this._document);\n        this._pressData = { handle, deltaX, deltaY, override };\n    }\n    /**\n     * Handle the `'pointermove'` event for the dock panel.\n     */\n    _evtPointerMove(event) {\n        // Bail early if no drag is in progress.\n        if (!this._pressData) {\n            return;\n        }\n        // Stop the event when dragging a handle.\n        event.preventDefault();\n        event.stopPropagation();\n        // Compute the desired offset position for the handle.\n        let rect = this.node.getBoundingClientRect();\n        let xPos = event.clientX - rect.left - this._pressData.deltaX;\n        let yPos = event.clientY - rect.top - this._pressData.deltaY;\n        // Set the handle as close to the desired position as possible.\n        let layout = this.layout;\n        layout.moveHandle(this._pressData.handle, xPos, yPos);\n    }\n    /**\n     * Handle the `'pointerup'` event for the dock panel.\n     */\n    _evtPointerUp(event) {\n        // Do nothing if the left mouse button is not released.\n        if (event.button !== 0) {\n            return;\n        }\n        // Stop the event when releasing a handle.\n        event.preventDefault();\n        event.stopPropagation();\n        // Finalize the mouse release.\n        this._releaseMouse();\n        // Schedule an emit of the layout modified signal.\n        MessageLoop.postMessage(this, Private$5.LayoutModified);\n    }\n    /**\n     * Release the mouse grab for the dock panel.\n     */\n    _releaseMouse() {\n        // Bail early if no drag is in progress.\n        if (!this._pressData) {\n            return;\n        }\n        // Clear the override cursor.\n        this._pressData.override.dispose();\n        this._pressData = null;\n        // Remove the extra document listeners.\n        this._document.removeEventListener('keydown', this, true);\n        this._document.removeEventListener('pointerup', this, true);\n        this._document.removeEventListener('pointermove', this, true);\n        this._document.removeEventListener('contextmenu', this, true);\n    }\n    /**\n     * Show the overlay indicator at the given client position.\n     *\n     * Returns the drop zone at the specified client position.\n     *\n     * #### Notes\n     * If the position is not over a valid zone, the overlay is hidden.\n     */\n    _showOverlay(clientX, clientY) {\n        // Find the dock target for the given client position.\n        let { zone, target } = Private$5.findDropTarget(this, clientX, clientY, this._edges);\n        // If the drop zone is invalid, hide the overlay and bail.\n        if (zone === 'invalid') {\n            this.overlay.hide(100);\n            return zone;\n        }\n        // Setup the variables needed to compute the overlay geometry.\n        let top;\n        let left;\n        let right;\n        let bottom;\n        let box = ElementExt.boxSizing(this.node); // TODO cache this?\n        let rect = this.node.getBoundingClientRect();\n        // Compute the overlay geometry based on the dock zone.\n        switch (zone) {\n            case 'root-all':\n                top = box.paddingTop;\n                left = box.paddingLeft;\n                right = box.paddingRight;\n                bottom = box.paddingBottom;\n                break;\n            case 'root-top':\n                top = box.paddingTop;\n                left = box.paddingLeft;\n                right = box.paddingRight;\n                bottom = rect.height * Private$5.GOLDEN_RATIO;\n                break;\n            case 'root-left':\n                top = box.paddingTop;\n                left = box.paddingLeft;\n                right = rect.width * Private$5.GOLDEN_RATIO;\n                bottom = box.paddingBottom;\n                break;\n            case 'root-right':\n                top = box.paddingTop;\n                left = rect.width * Private$5.GOLDEN_RATIO;\n                right = box.paddingRight;\n                bottom = box.paddingBottom;\n                break;\n            case 'root-bottom':\n                top = rect.height * Private$5.GOLDEN_RATIO;\n                left = box.paddingLeft;\n                right = box.paddingRight;\n                bottom = box.paddingBottom;\n                break;\n            case 'widget-all':\n                top = target.top;\n                left = target.left;\n                right = target.right;\n                bottom = target.bottom;\n                break;\n            case 'widget-top':\n                top = target.top;\n                left = target.left;\n                right = target.right;\n                bottom = target.bottom + target.height / 2;\n                break;\n            case 'widget-left':\n                top = target.top;\n                left = target.left;\n                right = target.right + target.width / 2;\n                bottom = target.bottom;\n                break;\n            case 'widget-right':\n                top = target.top;\n                left = target.left + target.width / 2;\n                right = target.right;\n                bottom = target.bottom;\n                break;\n            case 'widget-bottom':\n                top = target.top + target.height / 2;\n                left = target.left;\n                right = target.right;\n                bottom = target.bottom;\n                break;\n            case 'widget-tab': {\n                const tabHeight = target.tabBar.node.getBoundingClientRect().height;\n                top = target.top;\n                left = target.left;\n                right = target.right;\n                bottom = target.bottom + target.height - tabHeight;\n                break;\n            }\n            default:\n                throw 'unreachable';\n        }\n        // Show the overlay with the computed geometry.\n        this.overlay.show({ top, left, right, bottom });\n        // Finally, return the computed drop zone.\n        return zone;\n    }\n    /**\n     * Create a new tab bar for use by the panel.\n     */\n    _createTabBar() {\n        // Create the tab bar.\n        let tabBar = this._renderer.createTabBar(this._document);\n        // Set the generated tab bar property for the tab bar.\n        Private$5.isGeneratedTabBarProperty.set(tabBar, true);\n        // Hide the tab bar when in single document mode.\n        if (this._mode === 'single-document') {\n            tabBar.hide();\n        }\n        // Enforce necessary tab bar behavior.\n        // TODO do we really want to enforce *all* of these?\n        tabBar.tabsMovable = this._tabsMovable;\n        tabBar.allowDeselect = false;\n        tabBar.addButtonEnabled = this._addButtonEnabled;\n        tabBar.removeBehavior = 'select-previous-tab';\n        tabBar.insertBehavior = 'select-tab-if-needed';\n        // Connect the signal handlers for the tab bar.\n        tabBar.tabMoved.connect(this._onTabMoved, this);\n        tabBar.currentChanged.connect(this._onCurrentChanged, this);\n        tabBar.tabCloseRequested.connect(this._onTabCloseRequested, this);\n        tabBar.tabDetachRequested.connect(this._onTabDetachRequested, this);\n        tabBar.tabActivateRequested.connect(this._onTabActivateRequested, this);\n        tabBar.addRequested.connect(this._onTabAddRequested, this);\n        // Return the initialized tab bar.\n        return tabBar;\n    }\n    /**\n     * Create a new handle for use by the panel.\n     */\n    _createHandle() {\n        return this._renderer.createHandle();\n    }\n    /**\n     * Handle the `tabMoved` signal from a tab bar.\n     */\n    _onTabMoved() {\n        MessageLoop.postMessage(this, Private$5.LayoutModified);\n    }\n    /**\n     * Handle the `currentChanged` signal from a tab bar.\n     */\n    _onCurrentChanged(sender, args) {\n        // Extract the previous and current title from the args.\n        let { previousTitle, currentTitle } = args;\n        // Hide the previous widget.\n        if (previousTitle) {\n            previousTitle.owner.hide();\n        }\n        // Show the current widget.\n        if (currentTitle) {\n            currentTitle.owner.show();\n        }\n        // Flush the message loop on IE and Edge to prevent flicker.\n        if (Platform.IS_EDGE || Platform.IS_IE) {\n            MessageLoop.flush();\n        }\n        // Schedule an emit of the layout modified signal.\n        MessageLoop.postMessage(this, Private$5.LayoutModified);\n    }\n    /**\n     * Handle the `addRequested` signal from a tab bar.\n     */\n    _onTabAddRequested(sender) {\n        this._addRequested.emit(sender);\n    }\n    /**\n     * Handle the `tabActivateRequested` signal from a tab bar.\n     */\n    _onTabActivateRequested(sender, args) {\n        args.title.owner.activate();\n    }\n    /**\n     * Handle the `tabCloseRequested` signal from a tab bar.\n     */\n    _onTabCloseRequested(sender, args) {\n        args.title.owner.close();\n    }\n    /**\n     * Handle the `tabDetachRequested` signal from a tab bar.\n     */\n    _onTabDetachRequested(sender, args) {\n        // Do nothing if a drag is already in progress.\n        if (this._drag) {\n            return;\n        }\n        // Release the tab bar's hold on the mouse.\n        sender.releaseMouse();\n        // Extract the data from the args.\n        let { title, tab, clientX, clientY, offset } = args;\n        // Setup the mime data for the drag operation.\n        let mimeData = new MimeData();\n        let factory = () => title.owner;\n        mimeData.setData('application/vnd.lumino.widget-factory', factory);\n        // Create the drag image for the drag operation.\n        let dragImage = tab.cloneNode(true);\n        if (offset) {\n            dragImage.style.top = `-${offset.y}px`;\n            dragImage.style.left = `-${offset.x}px`;\n        }\n        // Create the drag object to manage the drag-drop operation.\n        this._drag = new Drag({\n            document: this._document,\n            mimeData,\n            dragImage,\n            proposedAction: 'move',\n            supportedActions: 'move',\n            source: this\n        });\n        // Hide the tab node in the original tab.\n        tab.classList.add('lm-mod-hidden');\n        let cleanup = () => {\n            this._drag = null;\n            tab.classList.remove('lm-mod-hidden');\n        };\n        // Start the drag operation and cleanup when done.\n        this._drag.start(clientX, clientY).then(cleanup);\n    }\n}\n/**\n * The namespace for the `DockPanel` class statics.\n */\n(function (DockPanel) {\n    /**\n     * A concrete implementation of `IOverlay`.\n     *\n     * This is the default overlay implementation for a dock panel.\n     */\n    class Overlay {\n        /**\n         * Construct a new overlay.\n         */\n        constructor() {\n            this._timer = -1;\n            this._hidden = true;\n            this.node = document.createElement('div');\n            this.node.classList.add('lm-DockPanel-overlay');\n            this.node.classList.add('lm-mod-hidden');\n            this.node.style.position = 'absolute';\n            this.node.style.contain = 'strict';\n        }\n        /**\n         * Show the overlay using the given overlay geometry.\n         *\n         * @param geo - The desired geometry for the overlay.\n         */\n        show(geo) {\n            // Update the position of the overlay.\n            let style = this.node.style;\n            style.top = `${geo.top}px`;\n            style.left = `${geo.left}px`;\n            style.right = `${geo.right}px`;\n            style.bottom = `${geo.bottom}px`;\n            // Clear any pending hide timer.\n            clearTimeout(this._timer);\n            this._timer = -1;\n            // If the overlay is already visible, we're done.\n            if (!this._hidden) {\n                return;\n            }\n            // Clear the hidden flag.\n            this._hidden = false;\n            // Finally, show the overlay.\n            this.node.classList.remove('lm-mod-hidden');\n        }\n        /**\n         * Hide the overlay node.\n         *\n         * @param delay - The delay (in ms) before hiding the overlay.\n         *   A delay value <= 0 will hide the overlay immediately.\n         */\n        hide(delay) {\n            // Do nothing if the overlay is already hidden.\n            if (this._hidden) {\n                return;\n            }\n            // Hide immediately if the delay is <= 0.\n            if (delay <= 0) {\n                clearTimeout(this._timer);\n                this._timer = -1;\n                this._hidden = true;\n                this.node.classList.add('lm-mod-hidden');\n                return;\n            }\n            // Do nothing if a hide is already pending.\n            if (this._timer !== -1) {\n                return;\n            }\n            // Otherwise setup the hide timer.\n            this._timer = window.setTimeout(() => {\n                this._timer = -1;\n                this._hidden = true;\n                this.node.classList.add('lm-mod-hidden');\n            }, delay);\n        }\n    }\n    DockPanel.Overlay = Overlay;\n    /**\n     * The default implementation of `IRenderer`.\n     */\n    class Renderer {\n        /**\n         * Create a new tab bar for use with a dock panel.\n         *\n         * @returns A new tab bar for a dock panel.\n         */\n        createTabBar(document) {\n            let bar = new TabBar({ document });\n            bar.addClass('lm-DockPanel-tabBar');\n            return bar;\n        }\n        /**\n         * Create a new handle node for use with a dock panel.\n         *\n         * @returns A new handle node for a dock panel.\n         */\n        createHandle() {\n            let handle = document.createElement('div');\n            handle.className = 'lm-DockPanel-handle';\n            return handle;\n        }\n    }\n    DockPanel.Renderer = Renderer;\n    /**\n     * The default `Renderer` instance.\n     */\n    DockPanel.defaultRenderer = new Renderer();\n})(DockPanel || (DockPanel = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$5;\n(function (Private) {\n    /**\n     * A fraction used for sizing root panels; ~= `1 / golden_ratio`.\n     */\n    Private.GOLDEN_RATIO = 0.618;\n    /**\n     * The default sizes for the edge drop zones, in pixels.\n     */\n    Private.DEFAULT_EDGES = {\n        /**\n         * The size of the top edge dock zone for the root panel, in pixels.\n         * This is different from the others to distinguish between the top\n         * tab bar and the top root zone.\n         */\n        top: 12,\n        /**\n         * The size of the edge dock zone for the root panel, in pixels.\n         */\n        right: 40,\n        /**\n         * The size of the edge dock zone for the root panel, in pixels.\n         */\n        bottom: 40,\n        /**\n         * The size of the edge dock zone for the root panel, in pixels.\n         */\n        left: 40\n    };\n    /**\n     * A singleton `'layout-modified'` conflatable message.\n     */\n    Private.LayoutModified = new ConflatableMessage('layout-modified');\n    /**\n     * An attached property used to track generated tab bars.\n     */\n    Private.isGeneratedTabBarProperty = new AttachedProperty({\n        name: 'isGeneratedTabBar',\n        create: () => false\n    });\n    /**\n     * Create a single document config for the widgets in a dock panel.\n     */\n    function createSingleDocumentConfig(panel) {\n        // Return an empty config if the panel is empty.\n        if (panel.isEmpty) {\n            return { main: null };\n        }\n        // Get a flat array of the widgets in the panel.\n        let widgets = Array.from(panel.widgets());\n        // Get the first selected widget in the panel.\n        let selected = panel.selectedWidgets().next().value;\n        // Compute the current index for the new config.\n        let currentIndex = selected ? widgets.indexOf(selected) : -1;\n        // Return the single document config.\n        return { main: { type: 'tab-area', widgets, currentIndex } };\n    }\n    Private.createSingleDocumentConfig = createSingleDocumentConfig;\n    /**\n     * Find the drop target at the given client position.\n     */\n    function findDropTarget(panel, clientX, clientY, edges) {\n        // Bail if the mouse is not over the dock panel.\n        if (!ElementExt.hitTest(panel.node, clientX, clientY)) {\n            return { zone: 'invalid', target: null };\n        }\n        // Look up the layout for the panel.\n        let layout = panel.layout;\n        // If the layout is empty, indicate the entire root drop zone.\n        if (layout.isEmpty) {\n            return { zone: 'root-all', target: null };\n        }\n        // Test the edge zones when in multiple document mode.\n        if (panel.mode === 'multiple-document') {\n            // Get the client rect for the dock panel.\n            let panelRect = panel.node.getBoundingClientRect();\n            // Compute the distance to each edge of the panel.\n            let pl = clientX - panelRect.left + 1;\n            let pt = clientY - panelRect.top + 1;\n            let pr = panelRect.right - clientX;\n            let pb = panelRect.bottom - clientY;\n            // Find the minimum distance to an edge.\n            let pd = Math.min(pt, pr, pb, pl);\n            // Return a root zone if the mouse is within an edge.\n            switch (pd) {\n                case pt:\n                    if (pt < edges.top) {\n                        return { zone: 'root-top', target: null };\n                    }\n                    break;\n                case pr:\n                    if (pr < edges.right) {\n                        return { zone: 'root-right', target: null };\n                    }\n                    break;\n                case pb:\n                    if (pb < edges.bottom) {\n                        return { zone: 'root-bottom', target: null };\n                    }\n                    break;\n                case pl:\n                    if (pl < edges.left) {\n                        return { zone: 'root-left', target: null };\n                    }\n                    break;\n                default:\n                    throw 'unreachable';\n            }\n        }\n        // Hit test the dock layout at the given client position.\n        let target = layout.hitTestTabAreas(clientX, clientY);\n        // Bail if no target area was found.\n        if (!target) {\n            return { zone: 'invalid', target: null };\n        }\n        // Return the whole tab area when in single document mode.\n        if (panel.mode === 'single-document') {\n            return { zone: 'widget-all', target };\n        }\n        // Compute the distance to each edge of the tab area.\n        let al = target.x - target.left + 1;\n        let at = target.y - target.top + 1;\n        let ar = target.left + target.width - target.x;\n        let ab = target.top + target.height - target.y;\n        const tabHeight = target.tabBar.node.getBoundingClientRect().height;\n        if (at < tabHeight) {\n            return { zone: 'widget-tab', target };\n        }\n        // Get the X and Y edge sizes for the area.\n        let rx = Math.round(target.width / 3);\n        let ry = Math.round(target.height / 3);\n        // If the mouse is not within an edge, indicate the entire area.\n        if (al > rx && ar > rx && at > ry && ab > ry) {\n            return { zone: 'widget-all', target };\n        }\n        // Scale the distances by the slenderness ratio.\n        al /= rx;\n        at /= ry;\n        ar /= rx;\n        ab /= ry;\n        // Find the minimum distance to the area edge.\n        let ad = Math.min(al, at, ar, ab);\n        // Find the widget zone for the area edge.\n        let zone;\n        switch (ad) {\n            case al:\n                zone = 'widget-left';\n                break;\n            case at:\n                zone = 'widget-top';\n                break;\n            case ar:\n                zone = 'widget-right';\n                break;\n            case ab:\n                zone = 'widget-bottom';\n                break;\n            default:\n                throw 'unreachable';\n        }\n        // Return the final drop target.\n        return { zone, target };\n    }\n    Private.findDropTarget = findDropTarget;\n    /**\n     * Get the drop reference widget for a tab bar.\n     */\n    function getDropRef(tabBar) {\n        if (tabBar.titles.length === 0) {\n            return null;\n        }\n        if (tabBar.currentTitle) {\n            return tabBar.currentTitle.owner;\n        }\n        return tabBar.titles[tabBar.titles.length - 1].owner;\n    }\n    Private.getDropRef = getDropRef;\n})(Private$5 || (Private$5 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A class which tracks focus among a set of widgets.\n *\n * This class is useful when code needs to keep track of the most\n * recently focused widget(s) among a set of related widgets.\n */\nclass FocusTracker {\n    constructor() {\n        this._counter = 0;\n        this._widgets = [];\n        this._activeWidget = null;\n        this._currentWidget = null;\n        this._numbers = new Map();\n        this._nodes = new Map();\n        this._activeChanged = new Signal(this);\n        this._currentChanged = new Signal(this);\n    }\n    /**\n     * Dispose of the resources held by the tracker.\n     */\n    dispose() {\n        // Do nothing if the tracker is already disposed.\n        if (this._counter < 0) {\n            return;\n        }\n        // Mark the tracker as disposed.\n        this._counter = -1;\n        // Clear the connections for the tracker.\n        Signal.clearData(this);\n        // Remove all event listeners.\n        for (const widget of this._widgets) {\n            widget.node.removeEventListener('focus', this, true);\n            widget.node.removeEventListener('blur', this, true);\n        }\n        // Clear the internal data structures.\n        this._activeWidget = null;\n        this._currentWidget = null;\n        this._nodes.clear();\n        this._numbers.clear();\n        this._widgets.length = 0;\n    }\n    /**\n     * A signal emitted when the current widget has changed.\n     */\n    get currentChanged() {\n        return this._currentChanged;\n    }\n    /**\n     * A signal emitted when the active widget has changed.\n     */\n    get activeChanged() {\n        return this._activeChanged;\n    }\n    /**\n     * A flag indicating whether the tracker is disposed.\n     */\n    get isDisposed() {\n        return this._counter < 0;\n    }\n    /**\n     * The current widget in the tracker.\n     *\n     * #### Notes\n     * The current widget is the widget among the tracked widgets which\n     * has the *descendant node* which has most recently been focused.\n     *\n     * The current widget will not be updated if the node loses focus. It\n     * will only be updated when a different tracked widget gains focus.\n     *\n     * If the current widget is removed from the tracker, the previous\n     * current widget will be restored.\n     *\n     * This behavior is intended to follow a user's conceptual model of\n     * a semantically \"current\" widget, where the \"last thing of type X\"\n     * to be interacted with is the \"current instance of X\", regardless\n     * of whether that instance still has focus.\n     */\n    get currentWidget() {\n        return this._currentWidget;\n    }\n    /**\n     * The active widget in the tracker.\n     *\n     * #### Notes\n     * The active widget is the widget among the tracked widgets which\n     * has the *descendant node* which is currently focused.\n     */\n    get activeWidget() {\n        return this._activeWidget;\n    }\n    /**\n     * A read only array of the widgets being tracked.\n     */\n    get widgets() {\n        return this._widgets;\n    }\n    /**\n     * Get the focus number for a particular widget in the tracker.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @returns The focus number for the given widget, or `-1` if the\n     *   widget has not had focus since being added to the tracker, or\n     *   is not contained by the tracker.\n     *\n     * #### Notes\n     * The focus number indicates the relative order in which the widgets\n     * have gained focus. A widget with a larger number has gained focus\n     * more recently than a widget with a smaller number.\n     *\n     * The `currentWidget` will always have the largest focus number.\n     *\n     * All widgets start with a focus number of `-1`, which indicates that\n     * the widget has not been focused since being added to the tracker.\n     */\n    focusNumber(widget) {\n        let n = this._numbers.get(widget);\n        return n === undefined ? -1 : n;\n    }\n    /**\n     * Test whether the focus tracker contains a given widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @returns `true` if the widget is tracked, `false` otherwise.\n     */\n    has(widget) {\n        return this._numbers.has(widget);\n    }\n    /**\n     * Add a widget to the focus tracker.\n     *\n     * @param widget - The widget of interest.\n     *\n     * #### Notes\n     * A widget will be automatically removed from the tracker if it\n     * is disposed after being added.\n     *\n     * If the widget is already tracked, this is a no-op.\n     */\n    add(widget) {\n        // Do nothing if the widget is already tracked.\n        if (this._numbers.has(widget)) {\n            return;\n        }\n        // Test whether the widget has focus.\n        let focused = widget.node.contains(document.activeElement);\n        // Set up the initial focus number.\n        let n = focused ? this._counter++ : -1;\n        // Add the widget to the internal data structures.\n        this._widgets.push(widget);\n        this._numbers.set(widget, n);\n        this._nodes.set(widget.node, widget);\n        // Set up the event listeners. The capturing phase must be used\n        // since the 'focus' and 'blur' events don't bubble and Firefox\n        // doesn't support the 'focusin' or 'focusout' events.\n        widget.node.addEventListener('focus', this, true);\n        widget.node.addEventListener('blur', this, true);\n        // Connect the disposed signal handler.\n        widget.disposed.connect(this._onWidgetDisposed, this);\n        // Set the current and active widgets if needed.\n        if (focused) {\n            this._setWidgets(widget, widget);\n        }\n    }\n    /**\n     * Remove a widget from the focus tracker.\n     *\n     * #### Notes\n     * If the widget is the `currentWidget`, the previous current widget\n     * will become the new `currentWidget`.\n     *\n     * A widget will be automatically removed from the tracker if it\n     * is disposed after being added.\n     *\n     * If the widget is not tracked, this is a no-op.\n     */\n    remove(widget) {\n        // Bail early if the widget is not tracked.\n        if (!this._numbers.has(widget)) {\n            return;\n        }\n        // Disconnect the disposed signal handler.\n        widget.disposed.disconnect(this._onWidgetDisposed, this);\n        // Remove the event listeners.\n        widget.node.removeEventListener('focus', this, true);\n        widget.node.removeEventListener('blur', this, true);\n        // Remove the widget from the internal data structures.\n        ArrayExt.removeFirstOf(this._widgets, widget);\n        this._nodes.delete(widget.node);\n        this._numbers.delete(widget);\n        // Bail early if the widget is not the current widget.\n        if (this._currentWidget !== widget) {\n            return;\n        }\n        // Filter the widgets for those which have had focus.\n        let valid = this._widgets.filter(w => this._numbers.get(w) !== -1);\n        // Get the valid widget with the max focus number.\n        let previous = max(valid, (first, second) => {\n            let a = this._numbers.get(first);\n            let b = this._numbers.get(second);\n            return a - b;\n        }) || null;\n        // Set the current and active widgets.\n        this._setWidgets(previous, null);\n    }\n    /**\n     * Handle the DOM events for the focus tracker.\n     *\n     * @param event - The DOM event sent to the panel.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the tracked nodes. It should\n     * not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'focus':\n                this._evtFocus(event);\n                break;\n            case 'blur':\n                this._evtBlur(event);\n                break;\n        }\n    }\n    /**\n     * Set the current and active widgets for the tracker.\n     */\n    _setWidgets(current, active) {\n        // Swap the current widget.\n        let oldCurrent = this._currentWidget;\n        this._currentWidget = current;\n        // Swap the active widget.\n        let oldActive = this._activeWidget;\n        this._activeWidget = active;\n        // Emit the `currentChanged` signal if needed.\n        if (oldCurrent !== current) {\n            this._currentChanged.emit({ oldValue: oldCurrent, newValue: current });\n        }\n        // Emit the `activeChanged` signal if needed.\n        if (oldActive !== active) {\n            this._activeChanged.emit({ oldValue: oldActive, newValue: active });\n        }\n    }\n    /**\n     * Handle the `'focus'` event for a tracked widget.\n     */\n    _evtFocus(event) {\n        // Find the widget which gained focus, which is known to exist.\n        let widget = this._nodes.get(event.currentTarget);\n        // Update the focus number if necessary.\n        if (widget !== this._currentWidget) {\n            this._numbers.set(widget, this._counter++);\n        }\n        // Set the current and active widgets.\n        this._setWidgets(widget, widget);\n    }\n    /**\n     * Handle the `'blur'` event for a tracked widget.\n     */\n    _evtBlur(event) {\n        // Find the widget which lost focus, which is known to exist.\n        let widget = this._nodes.get(event.currentTarget);\n        // Get the node which being focused after this blur.\n        let focusTarget = event.relatedTarget;\n        // If no other node is being focused, clear the active widget.\n        if (!focusTarget) {\n            this._setWidgets(this._currentWidget, null);\n            return;\n        }\n        // Bail if the focus widget is not changing.\n        if (widget.node.contains(focusTarget)) {\n            return;\n        }\n        // If no tracked widget is being focused, clear the active widget.\n        if (!find(this._widgets, w => w.node.contains(focusTarget))) {\n            this._setWidgets(this._currentWidget, null);\n            return;\n        }\n    }\n    /**\n     * Handle the `disposed` signal for a tracked widget.\n     */\n    _onWidgetDisposed(sender) {\n        this.remove(sender);\n    }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which arranges its widgets in a grid.\n */\nclass GridLayout extends Layout {\n    /**\n     * Construct a new grid layout.\n     *\n     * @param options - The options for initializing the layout.\n     */\n    constructor(options = {}) {\n        super(options);\n        this._dirty = false;\n        this._rowSpacing = 4;\n        this._columnSpacing = 4;\n        this._items = [];\n        this._rowStarts = [];\n        this._columnStarts = [];\n        this._rowSizers = [new BoxSizer()];\n        this._columnSizers = [new BoxSizer()];\n        this._box = null;\n        if (options.rowCount !== undefined) {\n            Private$4.reallocSizers(this._rowSizers, options.rowCount);\n        }\n        if (options.columnCount !== undefined) {\n            Private$4.reallocSizers(this._columnSizers, options.columnCount);\n        }\n        if (options.rowSpacing !== undefined) {\n            this._rowSpacing = Private$4.clampValue(options.rowSpacing);\n        }\n        if (options.columnSpacing !== undefined) {\n            this._columnSpacing = Private$4.clampValue(options.columnSpacing);\n        }\n    }\n    /**\n     * Dispose of the resources held by the layout.\n     */\n    dispose() {\n        // Dispose of the widgets and layout items.\n        for (const item of this._items) {\n            let widget = item.widget;\n            item.dispose();\n            widget.dispose();\n        }\n        // Clear the layout state.\n        this._box = null;\n        this._items.length = 0;\n        this._rowStarts.length = 0;\n        this._rowSizers.length = 0;\n        this._columnStarts.length = 0;\n        this._columnSizers.length = 0;\n        // Dispose of the rest of the layout.\n        super.dispose();\n    }\n    /**\n     * Get the number of rows in the layout.\n     */\n    get rowCount() {\n        return this._rowSizers.length;\n    }\n    /**\n     * Set the number of rows in the layout.\n     *\n     * #### Notes\n     * The minimum row count is `1`.\n     */\n    set rowCount(value) {\n        // Do nothing if the row count does not change.\n        if (value === this.rowCount) {\n            return;\n        }\n        // Reallocate the row sizers.\n        Private$4.reallocSizers(this._rowSizers, value);\n        // Schedule a fit of the parent.\n        if (this.parent) {\n            this.parent.fit();\n        }\n    }\n    /**\n     * Get the number of columns in the layout.\n     */\n    get columnCount() {\n        return this._columnSizers.length;\n    }\n    /**\n     * Set the number of columns in the layout.\n     *\n     * #### Notes\n     * The minimum column count is `1`.\n     */\n    set columnCount(value) {\n        // Do nothing if the column count does not change.\n        if (value === this.columnCount) {\n            return;\n        }\n        // Reallocate the column sizers.\n        Private$4.reallocSizers(this._columnSizers, value);\n        // Schedule a fit of the parent.\n        if (this.parent) {\n            this.parent.fit();\n        }\n    }\n    /**\n     * Get the row spacing for the layout.\n     */\n    get rowSpacing() {\n        return this._rowSpacing;\n    }\n    /**\n     * Set the row spacing for the layout.\n     */\n    set rowSpacing(value) {\n        // Clamp the spacing to the allowed range.\n        value = Private$4.clampValue(value);\n        // Bail if the spacing does not change\n        if (this._rowSpacing === value) {\n            return;\n        }\n        // Update the internal spacing.\n        this._rowSpacing = value;\n        // Schedule a fit of the parent.\n        if (this.parent) {\n            this.parent.fit();\n        }\n    }\n    /**\n     * Get the column spacing for the layout.\n     */\n    get columnSpacing() {\n        return this._columnSpacing;\n    }\n    /**\n     * Set the col spacing for the layout.\n     */\n    set columnSpacing(value) {\n        // Clamp the spacing to the allowed range.\n        value = Private$4.clampValue(value);\n        // Bail if the spacing does not change\n        if (this._columnSpacing === value) {\n            return;\n        }\n        // Update the internal spacing.\n        this._columnSpacing = value;\n        // Schedule a fit of the parent.\n        if (this.parent) {\n            this.parent.fit();\n        }\n    }\n    /**\n     * Get the stretch factor for a specific row.\n     *\n     * @param index - The row index of interest.\n     *\n     * @returns The stretch factor for the row.\n     *\n     * #### Notes\n     * This returns `-1` if the index is out of range.\n     */\n    rowStretch(index) {\n        let sizer = this._rowSizers[index];\n        return sizer ? sizer.stretch : -1;\n    }\n    /**\n     * Set the stretch factor for a specific row.\n     *\n     * @param index - The row index of interest.\n     *\n     * @param value - The stretch factor for the row.\n     *\n     * #### Notes\n     * This is a no-op if the index is out of range.\n     */\n    setRowStretch(index, value) {\n        // Look up the row sizer.\n        let sizer = this._rowSizers[index];\n        // Bail if the index is out of range.\n        if (!sizer) {\n            return;\n        }\n        // Clamp the value to the allowed range.\n        value = Private$4.clampValue(value);\n        // Bail if the stretch does not change.\n        if (sizer.stretch === value) {\n            return;\n        }\n        // Update the sizer stretch.\n        sizer.stretch = value;\n        // Schedule an update of the parent.\n        if (this.parent) {\n            this.parent.update();\n        }\n    }\n    /**\n     * Get the stretch factor for a specific column.\n     *\n     * @param index - The column index of interest.\n     *\n     * @returns The stretch factor for the column.\n     *\n     * #### Notes\n     * This returns `-1` if the index is out of range.\n     */\n    columnStretch(index) {\n        let sizer = this._columnSizers[index];\n        return sizer ? sizer.stretch : -1;\n    }\n    /**\n     * Set the stretch factor for a specific column.\n     *\n     * @param index - The column index of interest.\n     *\n     * @param value - The stretch factor for the column.\n     *\n     * #### Notes\n     * This is a no-op if the index is out of range.\n     */\n    setColumnStretch(index, value) {\n        // Look up the column sizer.\n        let sizer = this._columnSizers[index];\n        // Bail if the index is out of range.\n        if (!sizer) {\n            return;\n        }\n        // Clamp the value to the allowed range.\n        value = Private$4.clampValue(value);\n        // Bail if the stretch does not change.\n        if (sizer.stretch === value) {\n            return;\n        }\n        // Update the sizer stretch.\n        sizer.stretch = value;\n        // Schedule an update of the parent.\n        if (this.parent) {\n            this.parent.update();\n        }\n    }\n    /**\n     * Create an iterator over the widgets in the layout.\n     *\n     * @returns A new iterator over the widgets in the layout.\n     */\n    *[Symbol.iterator]() {\n        for (const item of this._items) {\n            yield item.widget;\n        }\n    }\n    /**\n     * Add a widget to the grid layout.\n     *\n     * @param widget - The widget to add to the layout.\n     *\n     * #### Notes\n     * If the widget is already contained in the layout, this is no-op.\n     */\n    addWidget(widget) {\n        // Look up the index for the widget.\n        let i = ArrayExt.findFirstIndex(this._items, it => it.widget === widget);\n        // Bail if the widget is already in the layout.\n        if (i !== -1) {\n            return;\n        }\n        // Add the widget to the layout.\n        this._items.push(new LayoutItem(widget));\n        // Attach the widget to the parent.\n        if (this.parent) {\n            this.attachWidget(widget);\n        }\n    }\n    /**\n     * Remove a widget from the grid layout.\n     *\n     * @param widget - The widget to remove from the layout.\n     *\n     * #### Notes\n     * A widget is automatically removed from the layout when its `parent`\n     * is set to `null`. This method should only be invoked directly when\n     * removing a widget from a layout which has yet to be installed on a\n     * parent widget.\n     *\n     * This method does *not* modify the widget's `parent`.\n     */\n    removeWidget(widget) {\n        // Look up the index for the widget.\n        let i = ArrayExt.findFirstIndex(this._items, it => it.widget === widget);\n        // Bail if the widget is not in the layout.\n        if (i === -1) {\n            return;\n        }\n        // Remove the widget from the layout.\n        let item = ArrayExt.removeAt(this._items, i);\n        // Detach the widget from the parent.\n        if (this.parent) {\n            this.detachWidget(widget);\n        }\n        // Dispose the layout item.\n        item.dispose();\n    }\n    /**\n     * Perform layout initialization which requires the parent widget.\n     */\n    init() {\n        super.init();\n        for (const widget of this) {\n            this.attachWidget(widget);\n        }\n    }\n    /**\n     * Attach a widget to the parent's DOM node.\n     *\n     * @param widget - The widget to attach to the parent.\n     */\n    attachWidget(widget) {\n        // Send a `'before-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n        }\n        // Add the widget's node to the parent.\n        this.parent.node.appendChild(widget.node);\n        // Send an `'after-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n        }\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n    /**\n     * Detach a widget from the parent's DOM node.\n     *\n     * @param widget - The widget to detach from the parent.\n     */\n    detachWidget(widget) {\n        // Send a `'before-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n        }\n        // Remove the widget's node from the parent.\n        this.parent.node.removeChild(widget.node);\n        // Send an `'after-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n        }\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'before-show'` message.\n     */\n    onBeforeShow(msg) {\n        super.onBeforeShow(msg);\n        this.parent.update();\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     */\n    onBeforeAttach(msg) {\n        super.onBeforeAttach(msg);\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'child-shown'` message.\n     */\n    onChildShown(msg) {\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'child-hidden'` message.\n     */\n    onChildHidden(msg) {\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'resize'` message.\n     */\n    onResize(msg) {\n        if (this.parent.isVisible) {\n            this._update(msg.width, msg.height);\n        }\n    }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     */\n    onUpdateRequest(msg) {\n        if (this.parent.isVisible) {\n            this._update(-1, -1);\n        }\n    }\n    /**\n     * A message handler invoked on a `'fit-request'` message.\n     */\n    onFitRequest(msg) {\n        if (this.parent.isAttached) {\n            this._fit();\n        }\n    }\n    /**\n     * Fit the layout to the total size required by the widgets.\n     */\n    _fit() {\n        // Reset the min sizes of the sizers.\n        for (let i = 0, n = this.rowCount; i < n; ++i) {\n            this._rowSizers[i].minSize = 0;\n        }\n        for (let i = 0, n = this.columnCount; i < n; ++i) {\n            this._columnSizers[i].minSize = 0;\n        }\n        // Filter for the visible layout items.\n        let items = this._items.filter(it => !it.isHidden);\n        // Fit the layout items.\n        for (let i = 0, n = items.length; i < n; ++i) {\n            items[i].fit();\n        }\n        // Get the max row and column index.\n        let maxRow = this.rowCount - 1;\n        let maxCol = this.columnCount - 1;\n        // Sort the items by row span.\n        items.sort(Private$4.rowSpanCmp);\n        // Update the min sizes of the row sizers.\n        for (let i = 0, n = items.length; i < n; ++i) {\n            // Fetch the item.\n            let item = items[i];\n            // Get the row bounds for the item.\n            let config = GridLayout.getCellConfig(item.widget);\n            let r1 = Math.min(config.row, maxRow);\n            let r2 = Math.min(config.row + config.rowSpan - 1, maxRow);\n            // Distribute the minimum height to the sizers as needed.\n            Private$4.distributeMin(this._rowSizers, r1, r2, item.minHeight);\n        }\n        // Sort the items by column span.\n        items.sort(Private$4.columnSpanCmp);\n        // Update the min sizes of the column sizers.\n        for (let i = 0, n = items.length; i < n; ++i) {\n            // Fetch the item.\n            let item = items[i];\n            // Get the column bounds for the item.\n            let config = GridLayout.getCellConfig(item.widget);\n            let c1 = Math.min(config.column, maxCol);\n            let c2 = Math.min(config.column + config.columnSpan - 1, maxCol);\n            // Distribute the minimum width to the sizers as needed.\n            Private$4.distributeMin(this._columnSizers, c1, c2, item.minWidth);\n        }\n        // If no size constraint is needed, just update the parent.\n        if (this.fitPolicy === 'set-no-constraint') {\n            MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n            return;\n        }\n        // Set up the computed min size.\n        let minH = maxRow * this._rowSpacing;\n        let minW = maxCol * this._columnSpacing;\n        // Add the sizer minimums to the computed min size.\n        for (let i = 0, n = this.rowCount; i < n; ++i) {\n            minH += this._rowSizers[i].minSize;\n        }\n        for (let i = 0, n = this.columnCount; i < n; ++i) {\n            minW += this._columnSizers[i].minSize;\n        }\n        // Update the box sizing and add it to the computed min size.\n        let box = (this._box = ElementExt.boxSizing(this.parent.node));\n        minW += box.horizontalSum;\n        minH += box.verticalSum;\n        // Update the parent's min size constraints.\n        let style = this.parent.node.style;\n        style.minWidth = `${minW}px`;\n        style.minHeight = `${minH}px`;\n        // Set the dirty flag to ensure only a single update occurs.\n        this._dirty = true;\n        // Notify the ancestor that it should fit immediately. This may\n        // cause a resize of the parent, fulfilling the required update.\n        if (this.parent.parent) {\n            MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n        }\n        // If the dirty flag is still set, the parent was not resized.\n        // Trigger the required update on the parent widget immediately.\n        if (this._dirty) {\n            MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n        }\n    }\n    /**\n     * Update the layout position and size of the widgets.\n     *\n     * The parent offset dimensions should be `-1` if unknown.\n     */\n    _update(offsetWidth, offsetHeight) {\n        // Clear the dirty flag to indicate the update occurred.\n        this._dirty = false;\n        // Measure the parent if the offset dimensions are unknown.\n        if (offsetWidth < 0) {\n            offsetWidth = this.parent.node.offsetWidth;\n        }\n        if (offsetHeight < 0) {\n            offsetHeight = this.parent.node.offsetHeight;\n        }\n        // Ensure the parent box sizing data is computed.\n        if (!this._box) {\n            this._box = ElementExt.boxSizing(this.parent.node);\n        }\n        // Compute the layout area adjusted for border and padding.\n        let top = this._box.paddingTop;\n        let left = this._box.paddingLeft;\n        let width = offsetWidth - this._box.horizontalSum;\n        let height = offsetHeight - this._box.verticalSum;\n        // Get the max row and column index.\n        let maxRow = this.rowCount - 1;\n        let maxCol = this.columnCount - 1;\n        // Compute the total fixed row and column space.\n        let fixedRowSpace = maxRow * this._rowSpacing;\n        let fixedColSpace = maxCol * this._columnSpacing;\n        // Distribute the available space to the box sizers.\n        BoxEngine.calc(this._rowSizers, Math.max(0, height - fixedRowSpace));\n        BoxEngine.calc(this._columnSizers, Math.max(0, width - fixedColSpace));\n        // Update the row start positions.\n        for (let i = 0, pos = top, n = this.rowCount; i < n; ++i) {\n            this._rowStarts[i] = pos;\n            pos += this._rowSizers[i].size + this._rowSpacing;\n        }\n        // Update the column start positions.\n        for (let i = 0, pos = left, n = this.columnCount; i < n; ++i) {\n            this._columnStarts[i] = pos;\n            pos += this._columnSizers[i].size + this._columnSpacing;\n        }\n        // Update the geometry of the layout items.\n        for (let i = 0, n = this._items.length; i < n; ++i) {\n            // Fetch the item.\n            let item = this._items[i];\n            // Ignore hidden items.\n            if (item.isHidden) {\n                continue;\n            }\n            // Fetch the cell bounds for the widget.\n            let config = GridLayout.getCellConfig(item.widget);\n            let r1 = Math.min(config.row, maxRow);\n            let c1 = Math.min(config.column, maxCol);\n            let r2 = Math.min(config.row + config.rowSpan - 1, maxRow);\n            let c2 = Math.min(config.column + config.columnSpan - 1, maxCol);\n            // Compute the cell geometry.\n            let x = this._columnStarts[c1];\n            let y = this._rowStarts[r1];\n            let w = this._columnStarts[c2] + this._columnSizers[c2].size - x;\n            let h = this._rowStarts[r2] + this._rowSizers[r2].size - y;\n            // Update the geometry of the layout item.\n            item.update(x, y, w, h);\n        }\n    }\n}\n/**\n * The namespace for the `GridLayout` class statics.\n */\n(function (GridLayout) {\n    /**\n     * Get the cell config for the given widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @returns The cell config for the widget.\n     */\n    function getCellConfig(widget) {\n        return Private$4.cellConfigProperty.get(widget);\n    }\n    GridLayout.getCellConfig = getCellConfig;\n    /**\n     * Set the cell config for the given widget.\n     *\n     * @param widget - The widget of interest.\n     *\n     * @param value - The value for the cell config.\n     */\n    function setCellConfig(widget, value) {\n        Private$4.cellConfigProperty.set(widget, Private$4.normalizeConfig(value));\n    }\n    GridLayout.setCellConfig = setCellConfig;\n})(GridLayout || (GridLayout = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$4;\n(function (Private) {\n    /**\n     * The property descriptor for the widget cell config.\n     */\n    Private.cellConfigProperty = new AttachedProperty({\n        name: 'cellConfig',\n        create: () => ({ row: 0, column: 0, rowSpan: 1, columnSpan: 1 }),\n        changed: onChildCellConfigChanged\n    });\n    /**\n     * Normalize a partial cell config object.\n     */\n    function normalizeConfig(config) {\n        let row = Math.max(0, Math.floor(config.row || 0));\n        let column = Math.max(0, Math.floor(config.column || 0));\n        let rowSpan = Math.max(1, Math.floor(config.rowSpan || 0));\n        let columnSpan = Math.max(1, Math.floor(config.columnSpan || 0));\n        return { row, column, rowSpan, columnSpan };\n    }\n    Private.normalizeConfig = normalizeConfig;\n    /**\n     * Clamp a value to an integer >= 0.\n     */\n    function clampValue(value) {\n        return Math.max(0, Math.floor(value));\n    }\n    Private.clampValue = clampValue;\n    /**\n     * A sort comparison function for row spans.\n     */\n    function rowSpanCmp(a, b) {\n        let c1 = Private.cellConfigProperty.get(a.widget);\n        let c2 = Private.cellConfigProperty.get(b.widget);\n        return c1.rowSpan - c2.rowSpan;\n    }\n    Private.rowSpanCmp = rowSpanCmp;\n    /**\n     * A sort comparison function for column spans.\n     */\n    function columnSpanCmp(a, b) {\n        let c1 = Private.cellConfigProperty.get(a.widget);\n        let c2 = Private.cellConfigProperty.get(b.widget);\n        return c1.columnSpan - c2.columnSpan;\n    }\n    Private.columnSpanCmp = columnSpanCmp;\n    /**\n     * Reallocate the box sizers for the given grid dimensions.\n     */\n    function reallocSizers(sizers, count) {\n        // Coerce the count to the valid range.\n        count = Math.max(1, Math.floor(count));\n        // Add the missing sizers.\n        while (sizers.length < count) {\n            sizers.push(new BoxSizer());\n        }\n        // Remove the extra sizers.\n        if (sizers.length > count) {\n            sizers.length = count;\n        }\n    }\n    Private.reallocSizers = reallocSizers;\n    /**\n     * Distribute a min size constraint across a range of sizers.\n     */\n    function distributeMin(sizers, i1, i2, minSize) {\n        // Sanity check the indices.\n        if (i2 < i1) {\n            return;\n        }\n        // Handle the simple case of no cell span.\n        if (i1 === i2) {\n            let sizer = sizers[i1];\n            sizer.minSize = Math.max(sizer.minSize, minSize);\n            return;\n        }\n        // Compute the total current min size of the span.\n        let totalMin = 0;\n        for (let i = i1; i <= i2; ++i) {\n            totalMin += sizers[i].minSize;\n        }\n        // Do nothing if the total is greater than the required.\n        if (totalMin >= minSize) {\n            return;\n        }\n        // Compute the portion of the space to allocate to each sizer.\n        let portion = (minSize - totalMin) / (i2 - i1 + 1);\n        // Add the portion to each sizer.\n        for (let i = i1; i <= i2; ++i) {\n            sizers[i].minSize += portion;\n        }\n    }\n    Private.distributeMin = distributeMin;\n    /**\n     * The change handler for the child cell config property.\n     */\n    function onChildCellConfigChanged(child) {\n        if (child.parent && child.parent.layout instanceof GridLayout) {\n            child.parent.fit();\n        }\n    }\n})(Private$4 || (Private$4 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which displays menus as a canonical menu bar.\n *\n * #### Notes\n * See also the related [example](../../examples/menubar/index.html) and\n * its [source](https://github.com/jupyterlab/lumino/tree/main/examples/example-menubar).\n */\nclass MenuBar extends Widget {\n    /**\n     * Construct a new menu bar.\n     *\n     * @param options - The options for initializing the menu bar.\n     */\n    constructor(options = {}) {\n        super({ node: Private$3.createNode() });\n        // Track the index of the item that is currently focused or hovered. -1 means nothing focused or hovered.\n        this._activeIndex = -1;\n        // Track which item can be focused using the TAB key. Unlike _activeIndex will\n        // always point to a menuitem. Whenever you update this value, it's important\n        // to follow it with an \"update-request\" message so that the `tabindex`\n        // attribute on each menubar item gets properly updated.\n        this._tabFocusIndex = 0;\n        this._menus = [];\n        this._childMenu = null;\n        this._overflowMenu = null;\n        this._menuItemSizes = [];\n        this._overflowIndex = -1;\n        this.addClass('lm-MenuBar');\n        this.setFlag(Widget.Flag.DisallowLayout);\n        this.renderer = options.renderer || MenuBar.defaultRenderer;\n        this._forceItemsPosition = options.forceItemsPosition || {\n            forceX: true,\n            forceY: true\n        };\n        this._overflowMenuOptions = options.overflowMenuOptions || {\n            isVisible: true\n        };\n    }\n    /**\n     * Dispose of the resources held by the widget.\n     */\n    dispose() {\n        this._closeChildMenu();\n        this._menus.length = 0;\n        super.dispose();\n    }\n    /**\n     * The child menu of the menu bar.\n     *\n     * #### Notes\n     * This will be `null` if the menu bar does not have an open menu.\n     */\n    get childMenu() {\n        return this._childMenu;\n    }\n    /**\n     * The overflow index of the menu bar.\n     */\n    get overflowIndex() {\n        return this._overflowIndex;\n    }\n    /**\n     * The overflow menu of the menu bar.\n     */\n    get overflowMenu() {\n        return this._overflowMenu;\n    }\n    /**\n     * Get the menu bar content node.\n     *\n     * #### Notes\n     * This is the node which holds the menu title nodes.\n     *\n     * Modifying this node directly can lead to undefined behavior.\n     */\n    get contentNode() {\n        return this.node.getElementsByClassName('lm-MenuBar-content')[0];\n    }\n    /**\n     * Get the currently active menu.\n     */\n    get activeMenu() {\n        return this._menus[this._activeIndex] || null;\n    }\n    /**\n     * Set the currently active menu.\n     *\n     * #### Notes\n     * If the menu does not exist, the menu will be set to `null`.\n     */\n    set activeMenu(value) {\n        this.activeIndex = value ? this._menus.indexOf(value) : -1;\n    }\n    /**\n     * Get the index of the currently active menu.\n     *\n     * #### Notes\n     * This will be `-1` if no menu is active.\n     */\n    get activeIndex() {\n        return this._activeIndex;\n    }\n    /**\n     * Set the index of the currently active menu.\n     *\n     * #### Notes\n     * If the menu cannot be activated, the index will be set to `-1`.\n     */\n    set activeIndex(value) {\n        // Adjust the value for an out of range index.\n        if (value < 0 || value >= this._menus.length) {\n            value = -1;\n        }\n        // An empty menu cannot be active\n        if (value > -1 && this._menus[value].items.length === 0) {\n            value = -1;\n        }\n        // Bail early if the index will not change.\n        if (this._activeIndex === value) {\n            return;\n        }\n        // Update the active index.\n        this._activeIndex = value;\n        // Schedule an update of the items.\n        this.update();\n    }\n    /**\n     * A read-only array of the menus in the menu bar.\n     */\n    get menus() {\n        return this._menus;\n    }\n    /**\n     * Open the active menu and activate its first menu item.\n     *\n     * #### Notes\n     * If there is no active menu, this is a no-op.\n     */\n    openActiveMenu() {\n        // Bail early if there is no active item.\n        if (this._activeIndex === -1) {\n            return;\n        }\n        // Open the child menu.\n        this._openChildMenu();\n        // Activate the first item in the child menu.\n        if (this._childMenu) {\n            this._childMenu.activeIndex = -1;\n            this._childMenu.activateNextItem();\n        }\n    }\n    /**\n     * Add a menu to the end of the menu bar.\n     *\n     * @param menu - The menu to add to the menu bar.\n     *\n     * #### Notes\n     * If the menu is already added to the menu bar, it will be moved.\n     */\n    addMenu(menu, update = true) {\n        this.insertMenu(this._menus.length, menu, update);\n    }\n    /**\n     * Insert a menu into the menu bar at the specified index.\n     *\n     * @param index - The index at which to insert the menu.\n     *\n     * @param menu - The menu to insert into the menu bar.\n     *\n     * #### Notes\n     * The index will be clamped to the bounds of the menus.\n     *\n     * If the menu is already added to the menu bar, it will be moved.\n     */\n    insertMenu(index, menu, update = true) {\n        // Close the child menu before making changes.\n        this._closeChildMenu();\n        // Look up the index of the menu.\n        let i = this._menus.indexOf(menu);\n        // Clamp the insert index to the array bounds.\n        let j = Math.max(0, Math.min(index, this._menus.length));\n        // If the menu is not in the array, insert it.\n        if (i === -1) {\n            // Insert the menu into the array.\n            ArrayExt.insert(this._menus, j, menu);\n            // Add the styling class to the menu.\n            menu.addClass('lm-MenuBar-menu');\n            // Connect to the menu signals.\n            menu.aboutToClose.connect(this._onMenuAboutToClose, this);\n            menu.menuRequested.connect(this._onMenuMenuRequested, this);\n            menu.title.changed.connect(this._onTitleChanged, this);\n            // Schedule an update of the items.\n            if (update) {\n                this.update();\n            }\n            // There is nothing more to do.\n            return;\n        }\n        // Otherwise, the menu exists in the array and should be moved.\n        // Adjust the index if the location is at the end of the array.\n        if (j === this._menus.length) {\n            j--;\n        }\n        // Bail if there is no effective move.\n        if (i === j) {\n            return;\n        }\n        // Move the menu to the new locations.\n        ArrayExt.move(this._menus, i, j);\n        // Schedule an update of the items.\n        if (update) {\n            this.update();\n        }\n    }\n    /**\n     * Remove a menu from the menu bar.\n     *\n     * @param menu - The menu to remove from the menu bar.\n     *\n     * #### Notes\n     * This is a no-op if the menu is not in the menu bar.\n     */\n    removeMenu(menu, update = true) {\n        this.removeMenuAt(this._menus.indexOf(menu), update);\n    }\n    /**\n     * Remove the menu at a given index from the menu bar.\n     *\n     * @param index - The index of the menu to remove.\n     *\n     * #### Notes\n     * This is a no-op if the index is out of range.\n     */\n    removeMenuAt(index, update = true) {\n        // Close the child menu before making changes.\n        this._closeChildMenu();\n        // Remove the menu from the array.\n        let menu = ArrayExt.removeAt(this._menus, index);\n        // Bail if the index is out of range.\n        if (!menu) {\n            return;\n        }\n        // Disconnect from the menu signals.\n        menu.aboutToClose.disconnect(this._onMenuAboutToClose, this);\n        menu.menuRequested.disconnect(this._onMenuMenuRequested, this);\n        menu.title.changed.disconnect(this._onTitleChanged, this);\n        // Remove the styling class from the menu.\n        menu.removeClass('lm-MenuBar-menu');\n        // Schedule an update of the items.\n        if (update) {\n            this.update();\n        }\n    }\n    /**\n     * Remove all menus from the menu bar.\n     */\n    clearMenus() {\n        // Bail if there is nothing to remove.\n        if (this._menus.length === 0) {\n            return;\n        }\n        // Close the child menu before making changes.\n        this._closeChildMenu();\n        // Disconnect from the menu signals and remove the styling class.\n        for (let menu of this._menus) {\n            menu.aboutToClose.disconnect(this._onMenuAboutToClose, this);\n            menu.menuRequested.disconnect(this._onMenuMenuRequested, this);\n            menu.title.changed.disconnect(this._onTitleChanged, this);\n            menu.removeClass('lm-MenuBar-menu');\n        }\n        // Clear the menus array.\n        this._menus.length = 0;\n        // Schedule an update of the items.\n        this.update();\n    }\n    /**\n     * Handle the DOM events for the menu bar.\n     *\n     * @param event - The DOM event sent to the menu bar.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the menu bar's DOM nodes. It\n     * should not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'keydown':\n                this._evtKeyDown(event);\n                break;\n            case 'mousedown':\n                this._evtMouseDown(event);\n                break;\n            case 'mousemove':\n                this._evtMouseMove(event);\n                break;\n            case 'focusout':\n                this._evtFocusOut(event);\n                break;\n            case 'contextmenu':\n                event.preventDefault();\n                event.stopPropagation();\n                break;\n        }\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     */\n    onBeforeAttach(msg) {\n        this.node.addEventListener('keydown', this);\n        this.node.addEventListener('mousedown', this);\n        this.node.addEventListener('mousemove', this);\n        this.node.addEventListener('focusout', this);\n        this.node.addEventListener('contextmenu', this);\n    }\n    /**\n     * A message handler invoked on an `'after-detach'` message.\n     */\n    onAfterDetach(msg) {\n        this.node.removeEventListener('keydown', this);\n        this.node.removeEventListener('mousedown', this);\n        this.node.removeEventListener('mousemove', this);\n        this.node.removeEventListener('focusout', this);\n        this.node.removeEventListener('contextmenu', this);\n        this._closeChildMenu();\n    }\n    /**\n     * A message handler invoked on an `'activate-request'` message.\n     */\n    onActivateRequest(msg) {\n        if (this.isAttached) {\n            this._focusItemAt(0);\n        }\n    }\n    /**\n     * A message handler invoked on a `'resize'` message.\n     */\n    onResize(msg) {\n        this.update();\n        super.onResize(msg);\n    }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     */\n    onUpdateRequest(msg) {\n        var _a;\n        let menus = this._menus;\n        let renderer = this.renderer;\n        let activeIndex = this._activeIndex;\n        let tabFocusIndex = this._tabFocusIndex >= 0 && this._tabFocusIndex < menus.length\n            ? this._tabFocusIndex\n            : 0;\n        let length = this._overflowIndex > -1 ? this._overflowIndex : menus.length;\n        let totalMenuSize = 0;\n        let isVisible = false;\n        // Check that the overflow menu doesn't count\n        length = this._overflowMenu !== null ? length - 1 : length;\n        let content = new Array(length);\n        // Render visible menus\n        for (let i = 0; i < length; ++i) {\n            content[i] = renderer.renderItem({\n                title: menus[i].title,\n                active: i === activeIndex,\n                tabbable: i === tabFocusIndex,\n                disabled: menus[i].items.length === 0,\n                onfocus: () => {\n                    this._tabFocusIndex = i;\n                    this.activeIndex = i;\n                }\n            });\n            // Calculate size of current menu\n            totalMenuSize += this._menuItemSizes[i];\n            // Check if overflow menu is already rendered\n            if (menus[i].title.label === this._overflowMenuOptions.title) {\n                isVisible = true;\n                length--;\n            }\n        }\n        // Render overflow menu if needed and active\n        if (this._overflowMenuOptions.isVisible) {\n            if (this._overflowIndex > -1 && !isVisible) {\n                // Create overflow menu\n                if (this._overflowMenu === null) {\n                    const overflowMenuTitle = (_a = this._overflowMenuOptions.title) !== null && _a !== void 0 ? _a : '...';\n                    this._overflowMenu = new Menu({ commands: new CommandRegistry() });\n                    this._overflowMenu.title.label = overflowMenuTitle;\n                    this._overflowMenu.title.mnemonic = 0;\n                    this.addMenu(this._overflowMenu, false);\n                }\n                // Move menus to overflow menu\n                for (let i = menus.length - 2; i >= length; i--) {\n                    const submenu = this.menus[i];\n                    submenu.title.mnemonic = 0;\n                    this._overflowMenu.insertItem(0, {\n                        type: 'submenu',\n                        submenu: submenu\n                    });\n                    this.removeMenu(submenu, false);\n                }\n                content[length] = renderer.renderItem({\n                    title: this._overflowMenu.title,\n                    active: length === activeIndex && menus[length].items.length !== 0,\n                    tabbable: length === tabFocusIndex,\n                    disabled: menus[length].items.length === 0,\n                    onfocus: () => {\n                        this._tabFocusIndex = length;\n                        this.activeIndex = length;\n                    }\n                });\n                length++;\n            }\n            else if (this._overflowMenu !== null) {\n                // Remove submenus from overflow menu\n                let overflowMenuItems = this._overflowMenu.items;\n                let screenSize = this.node.offsetWidth;\n                let n = this._overflowMenu.items.length;\n                for (let i = 0; i < n; ++i) {\n                    let index = menus.length - 1 - i;\n                    if (screenSize - totalMenuSize > this._menuItemSizes[index]) {\n                        let menu = overflowMenuItems[0].submenu;\n                        this._overflowMenu.removeItemAt(0);\n                        this.insertMenu(length, menu, false);\n                        content[length] = renderer.renderItem({\n                            title: menu.title,\n                            active: false,\n                            tabbable: length === tabFocusIndex,\n                            disabled: menus[length].items.length === 0,\n                            onfocus: () => {\n                                this._tabFocusIndex = length;\n                                this.activeIndex = length;\n                            }\n                        });\n                        length++;\n                    }\n                }\n                if (this._overflowMenu.items.length === 0) {\n                    this.removeMenu(this._overflowMenu, false);\n                    content.pop();\n                    this._overflowMenu = null;\n                    this._overflowIndex = -1;\n                }\n            }\n        }\n        VirtualDOM.render(content, this.contentNode);\n        this._updateOverflowIndex();\n    }\n    /**\n     * Calculate and update the current overflow index.\n     */\n    _updateOverflowIndex() {\n        if (!this._overflowMenuOptions.isVisible) {\n            return;\n        }\n        // Get elements visible in the main menu bar\n        const itemMenus = this.contentNode.childNodes;\n        let screenSize = this.node.offsetWidth;\n        let totalMenuSize = 0;\n        let index = -1;\n        let n = itemMenus.length;\n        if (this._menuItemSizes.length == 0) {\n            // Check if it is the first resize and get info about menu items sizes\n            for (let i = 0; i < n; i++) {\n                let item = itemMenus[i];\n                // Add sizes to array\n                totalMenuSize += item.offsetWidth;\n                this._menuItemSizes.push(item.offsetWidth);\n                if (totalMenuSize > screenSize && index === -1) {\n                    index = i;\n                }\n            }\n        }\n        else {\n            // Calculate current menu size\n            for (let i = 0; i < this._menuItemSizes.length; i++) {\n                totalMenuSize += this._menuItemSizes[i];\n                if (totalMenuSize > screenSize) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        this._overflowIndex = index;\n    }\n    /**\n     * Handle the `'keydown'` event for the menu bar.\n     *\n     * #### Notes\n     * All keys are trapped except the tab key that is ignored.\n     */\n    _evtKeyDown(event) {\n        // Fetch the key code for the event.\n        let kc = event.keyCode;\n        // Reset the active index on tab, but do not trap the tab key.\n        if (kc === 9) {\n            this.activeIndex = -1;\n            return;\n        }\n        // A menu bar handles all other keydown events.\n        event.preventDefault();\n        event.stopPropagation();\n        // Enter, Space, Up Arrow, Down Arrow\n        if (kc === 13 || kc === 32 || kc === 38 || kc === 40) {\n            // The active index may have changed (for example, user hovers over an\n            // item with the mouse), so be sure to use the focus index.\n            this.activeIndex = this._tabFocusIndex;\n            if (this.activeIndex !== this._tabFocusIndex) {\n                // Bail if the setter refused to set activeIndex to tabFocusIndex\n                // because it means that the item at tabFocusIndex cannot be opened (for\n                // example, it has an empty menu)\n                return;\n            }\n            this.openActiveMenu();\n            return;\n        }\n        // Escape\n        if (kc === 27) {\n            this._closeChildMenu();\n            this._focusItemAt(this.activeIndex);\n            return;\n        }\n        // Left or Right Arrow\n        if (kc === 37 || kc === 39) {\n            let direction = kc === 37 ? -1 : 1;\n            let start = this._tabFocusIndex + direction;\n            let n = this._menus.length;\n            for (let i = 0; i < n; i++) {\n                let index = (n + start + direction * i) % n;\n                if (this._menus[index].items.length) {\n                    this._focusItemAt(index);\n                    return;\n                }\n            }\n            return;\n        }\n        // Get the pressed key character.\n        let key = getKeyboardLayout().keyForKeydownEvent(event);\n        // Bail if the key is not valid.\n        if (!key) {\n            return;\n        }\n        // Search for the next best matching mnemonic item.\n        let start = this._activeIndex + 1;\n        let result = Private$3.findMnemonic(this._menus, key, start);\n        // Handle the requested mnemonic based on the search results.\n        // If exactly one mnemonic is matched, that menu is opened.\n        // Otherwise, the next mnemonic is activated if available,\n        // followed by the auto mnemonic if available.\n        if (result.index !== -1 && !result.multiple) {\n            this.activeIndex = result.index;\n            this.openActiveMenu();\n        }\n        else if (result.index !== -1) {\n            this.activeIndex = result.index;\n            this._focusItemAt(this.activeIndex);\n        }\n        else if (result.auto !== -1) {\n            this.activeIndex = result.auto;\n            this._focusItemAt(this.activeIndex);\n        }\n    }\n    /**\n     * Handle the `'mousedown'` event for the menu bar.\n     */\n    _evtMouseDown(event) {\n        // Bail if the mouse press was not on the menu bar. This can occur\n        // when the document listener is installed for an active menu bar.\n        if (!ElementExt.hitTest(this.node, event.clientX, event.clientY)) {\n            return;\n        }\n        // Stop the propagation of the event. Immediate propagation is\n        // also stopped so that an open menu does not handle the event.\n        event.stopPropagation();\n        event.stopImmediatePropagation();\n        // Check if the mouse is over one of the menu items.\n        let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n            return ElementExt.hitTest(node, event.clientX, event.clientY);\n        });\n        // If the press was not on an item, close the child menu.\n        if (index === -1) {\n            this._closeChildMenu();\n            return;\n        }\n        // If the press was not the left mouse button, do nothing further.\n        if (event.button !== 0) {\n            return;\n        }\n        // Otherwise, toggle the open state of the child menu.\n        if (this._childMenu) {\n            this._closeChildMenu();\n            this.activeIndex = index;\n        }\n        else {\n            // If we don't call preventDefault() here, then the item in the menu\n            // bar will take focus over the menu that is being opened.\n            event.preventDefault();\n            const position = this._positionForMenu(index);\n            Menu.saveWindowData();\n            // Begin DOM modifications.\n            this.activeIndex = index;\n            this._openChildMenu(position);\n        }\n    }\n    /**\n     * Handle the `'mousemove'` event for the menu bar.\n     */\n    _evtMouseMove(event) {\n        // Check if the mouse is over one of the menu items.\n        let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n            return ElementExt.hitTest(node, event.clientX, event.clientY);\n        });\n        // Bail early if the active index will not change.\n        if (index === this._activeIndex) {\n            return;\n        }\n        // Bail early if a child menu is open and the mouse is not over\n        // an item. This allows the child menu to be kept open when the\n        // mouse is over the empty part of the menu bar.\n        if (index === -1 && this._childMenu) {\n            return;\n        }\n        // Get position for the new menu >before< updating active index.\n        const position = index >= 0 && this._childMenu ? this._positionForMenu(index) : null;\n        // Before any modification, update window data.\n        Menu.saveWindowData();\n        // Begin DOM modifications.\n        // Update the active index to the hovered item.\n        this.activeIndex = index;\n        // Open the new menu if a menu is already open.\n        if (position) {\n            this._openChildMenu(position);\n        }\n    }\n    /**\n     * Find initial position for the menu based on menubar item position.\n     *\n     * NOTE: this should be called before updating active index to avoid\n     * an additional layout and style invalidation as changing active\n     * index modifies DOM.\n     */\n    _positionForMenu(index) {\n        let itemNode = this.contentNode.children[index];\n        let { left, bottom } = itemNode.getBoundingClientRect();\n        return {\n            top: bottom,\n            left\n        };\n    }\n    /**\n     * Handle the `'focusout'` event for the menu bar.\n     */\n    _evtFocusOut(event) {\n        // Reset the active index if there is no open menu and the menubar is losing focus.\n        if (!this._childMenu && !this.node.contains(event.relatedTarget)) {\n            this.activeIndex = -1;\n        }\n    }\n    /**\n     * Focus an item in the menu bar.\n     *\n     * #### Notes\n     * Does not open the associated menu.\n     */\n    _focusItemAt(index) {\n        const itemNode = this.contentNode.childNodes[index];\n        if (itemNode) {\n            itemNode.focus();\n        }\n    }\n    /**\n     * Open the child menu at the active index immediately.\n     *\n     * If a different child menu is already open, it will be closed,\n     * even if there is no active menu.\n     */\n    _openChildMenu(options = {}) {\n        // If there is no active menu, close the current menu.\n        let newMenu = this.activeMenu;\n        if (!newMenu) {\n            this._closeChildMenu();\n            return;\n        }\n        // Bail if there is no effective menu change.\n        let oldMenu = this._childMenu;\n        if (oldMenu === newMenu) {\n            return;\n        }\n        // Swap the internal menu reference.\n        this._childMenu = newMenu;\n        // Close the current menu, or setup for the new menu.\n        if (oldMenu) {\n            oldMenu.close();\n        }\n        else {\n            document.addEventListener('mousedown', this, true);\n        }\n        // Update the tab focus index and ensure the menu bar is updated.\n        this._tabFocusIndex = this.activeIndex;\n        MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n        // Get the positioning data for the new menu.\n        let { left, top } = options;\n        if (typeof left === 'undefined' || typeof top === 'undefined') {\n            ({ left, top } = this._positionForMenu(this._activeIndex));\n        }\n        // Begin DOM modifications\n        if (!oldMenu) {\n            // Continue setup for new menu\n            this.addClass('lm-mod-active');\n        }\n        // Open the new menu at the computed location.\n        if (newMenu.items.length > 0) {\n            newMenu.open(left, top, this._forceItemsPosition);\n        }\n    }\n    /**\n     * Close the child menu immediately.\n     *\n     * This is a no-op if a child menu is not open.\n     */\n    _closeChildMenu() {\n        // Bail if no child menu is open.\n        if (!this._childMenu) {\n            return;\n        }\n        // Remove the active class from the menu bar.\n        this.removeClass('lm-mod-active');\n        // Remove the document listeners.\n        document.removeEventListener('mousedown', this, true);\n        // Clear the internal menu reference.\n        let menu = this._childMenu;\n        this._childMenu = null;\n        // Close the menu.\n        menu.close();\n        // Reset the active index.\n        this.activeIndex = -1;\n    }\n    /**\n     * Handle the `aboutToClose` signal of a menu.\n     */\n    _onMenuAboutToClose(sender) {\n        // Bail if the sender is not the child menu.\n        if (sender !== this._childMenu) {\n            return;\n        }\n        // Remove the active class from the menu bar.\n        this.removeClass('lm-mod-active');\n        // Remove the document listeners.\n        document.removeEventListener('mousedown', this, true);\n        // Clear the internal menu reference.\n        this._childMenu = null;\n        // Reset the active index.\n        this.activeIndex = -1;\n    }\n    /**\n     * Handle the `menuRequested` signal of a child menu.\n     */\n    _onMenuMenuRequested(sender, args) {\n        // Bail if the sender is not the child menu.\n        if (sender !== this._childMenu) {\n            return;\n        }\n        // Look up the active index and menu count.\n        let i = this._activeIndex;\n        let n = this._menus.length;\n        // Active the next requested index.\n        switch (args) {\n            case 'next':\n                this.activeIndex = i === n - 1 ? 0 : i + 1;\n                break;\n            case 'previous':\n                this.activeIndex = i === 0 ? n - 1 : i - 1;\n                break;\n        }\n        // Open the active menu.\n        this.openActiveMenu();\n    }\n    /**\n     * Handle the `changed` signal of a title object.\n     */\n    _onTitleChanged() {\n        this.update();\n    }\n}\n/**\n * The namespace for the `MenuBar` class statics.\n */\n(function (MenuBar) {\n    /**\n     * The default implementation of `IRenderer`.\n     *\n     * #### Notes\n     * Subclasses are free to reimplement rendering methods as needed.\n     */\n    class Renderer {\n        /**\n         * Render the virtual element for a menu bar item.\n         *\n         * @param data - The data to use for rendering the item.\n         *\n         * @returns A virtual element representing the item.\n         */\n        renderItem(data) {\n            let className = this.createItemClass(data);\n            let dataset = this.createItemDataset(data);\n            let aria = this.createItemARIA(data);\n            return h.li({\n                className,\n                dataset,\n                ...(data.disabled ? {} : { tabindex: data.tabbable ? '0' : '-1' }),\n                onfocus: data.onfocus,\n                ...aria\n            }, this.renderIcon(data), this.renderLabel(data));\n        }\n        /**\n         * Render the icon element for a menu bar item.\n         *\n         * @param data - The data to use for rendering the icon.\n         *\n         * @returns A virtual element representing the item icon.\n         */\n        renderIcon(data) {\n            let className = this.createIconClass(data);\n            // If data.title.icon is undefined, it will be ignored.\n            return h.div({ className }, data.title.icon, data.title.iconLabel);\n        }\n        /**\n         * Render the label element for a menu item.\n         *\n         * @param data - The data to use for rendering the label.\n         *\n         * @returns A virtual element representing the item label.\n         */\n        renderLabel(data) {\n            let content = this.formatLabel(data);\n            return h.div({ className: 'lm-MenuBar-itemLabel' }, content);\n        }\n        /**\n         * Create the class name for the menu bar item.\n         *\n         * @param data - The data to use for the class name.\n         *\n         * @returns The full class name for the menu item.\n         */\n        createItemClass(data) {\n            let name = 'lm-MenuBar-item';\n            if (data.title.className) {\n                name += ` ${data.title.className}`;\n            }\n            if (data.active && !data.disabled) {\n                name += ' lm-mod-active';\n            }\n            return name;\n        }\n        /**\n         * Create the dataset for a menu bar item.\n         *\n         * @param data - The data to use for the item.\n         *\n         * @returns The dataset for the menu bar item.\n         */\n        createItemDataset(data) {\n            return data.title.dataset;\n        }\n        /**\n         * Create the aria attributes for menu bar item.\n         *\n         * @param data - The data to use for the aria attributes.\n         *\n         * @returns The aria attributes object for the item.\n         */\n        createItemARIA(data) {\n            return {\n                role: 'menuitem',\n                'aria-haspopup': 'true',\n                'aria-disabled': data.disabled ? 'true' : 'false'\n            };\n        }\n        /**\n         * Create the class name for the menu bar item icon.\n         *\n         * @param data - The data to use for the class name.\n         *\n         * @returns The full class name for the item icon.\n         */\n        createIconClass(data) {\n            let name = 'lm-MenuBar-itemIcon';\n            let extra = data.title.iconClass;\n            return extra ? `${name} ${extra}` : name;\n        }\n        /**\n         * Create the render content for the label node.\n         *\n         * @param data - The data to use for the label content.\n         *\n         * @returns The content to add to the label node.\n         */\n        formatLabel(data) {\n            // Fetch the label text and mnemonic index.\n            let { label, mnemonic } = data.title;\n            // If the index is out of range, do not modify the label.\n            if (mnemonic < 0 || mnemonic >= label.length) {\n                return label;\n            }\n            // Split the label into parts.\n            let prefix = label.slice(0, mnemonic);\n            let suffix = label.slice(mnemonic + 1);\n            let char = label[mnemonic];\n            // Wrap the mnemonic character in a span.\n            let span = h.span({ className: 'lm-MenuBar-itemMnemonic' }, char);\n            // Return the content parts.\n            return [prefix, span, suffix];\n        }\n    }\n    MenuBar.Renderer = Renderer;\n    /**\n     * The default `Renderer` instance.\n     */\n    MenuBar.defaultRenderer = new Renderer();\n})(MenuBar || (MenuBar = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$3;\n(function (Private) {\n    /**\n     * Create the DOM node for a menu bar.\n     */\n    function createNode() {\n        let node = document.createElement('div');\n        let content = document.createElement('ul');\n        content.className = 'lm-MenuBar-content';\n        node.appendChild(content);\n        content.setAttribute('role', 'menubar');\n        return node;\n    }\n    Private.createNode = createNode;\n    /**\n     * Find the best matching mnemonic item.\n     *\n     * The search starts at the given index and wraps around.\n     */\n    function findMnemonic(menus, key, start) {\n        // Setup the result variables.\n        let index = -1;\n        let auto = -1;\n        let multiple = false;\n        // Normalize the key to upper case.\n        let upperKey = key.toUpperCase();\n        // Search the items from the given start index.\n        for (let i = 0, n = menus.length; i < n; ++i) {\n            // Compute the wrapped index.\n            let k = (i + start) % n;\n            // Look up the menu title.\n            let title = menus[k].title;\n            // Ignore titles with an empty label.\n            if (title.label.length === 0) {\n                continue;\n            }\n            // Look up the mnemonic index for the label.\n            let mn = title.mnemonic;\n            // Handle a valid mnemonic index.\n            if (mn >= 0 && mn < title.label.length) {\n                if (title.label[mn].toUpperCase() === upperKey) {\n                    if (index === -1) {\n                        index = k;\n                    }\n                    else {\n                        multiple = true;\n                    }\n                }\n                continue;\n            }\n            // Finally, handle the auto index if possible.\n            if (auto === -1 && title.label[0].toUpperCase() === upperKey) {\n                auto = k;\n            }\n        }\n        // Return the search results.\n        return { index, multiple, auto };\n    }\n    Private.findMnemonic = findMnemonic;\n})(Private$3 || (Private$3 = {}));\n\n/**\n * A widget which implements a canonical scroll bar.\n */\nclass ScrollBar extends Widget {\n    /**\n     * Construct a new scroll bar.\n     *\n     * @param options - The options for initializing the scroll bar.\n     */\n    constructor(options = {}) {\n        super({ node: Private$2.createNode() });\n        /**\n         * A timeout callback for repeating the mouse press.\n         */\n        this._onRepeat = () => {\n            // Clear the repeat timer id.\n            this._repeatTimer = -1;\n            // Bail if the mouse has been released.\n            if (!this._pressData) {\n                return;\n            }\n            // Look up the part that was pressed.\n            let part = this._pressData.part;\n            // Bail if the thumb was pressed.\n            if (part === 'thumb') {\n                return;\n            }\n            // Schedule the timer for another repeat.\n            this._repeatTimer = window.setTimeout(this._onRepeat, 20);\n            // Get the current mouse position.\n            let mouseX = this._pressData.mouseX;\n            let mouseY = this._pressData.mouseY;\n            // Handle a decrement button repeat.\n            if (part === 'decrement') {\n                // Bail if the mouse is not over the button.\n                if (!ElementExt.hitTest(this.decrementNode, mouseX, mouseY)) {\n                    return;\n                }\n                // Emit the step requested signal.\n                this._stepRequested.emit('decrement');\n                // Finished.\n                return;\n            }\n            // Handle an increment button repeat.\n            if (part === 'increment') {\n                // Bail if the mouse is not over the button.\n                if (!ElementExt.hitTest(this.incrementNode, mouseX, mouseY)) {\n                    return;\n                }\n                // Emit the step requested signal.\n                this._stepRequested.emit('increment');\n                // Finished.\n                return;\n            }\n            // Handle a track repeat.\n            if (part === 'track') {\n                // Bail if the mouse is not over the track.\n                if (!ElementExt.hitTest(this.trackNode, mouseX, mouseY)) {\n                    return;\n                }\n                // Fetch the thumb node.\n                let thumbNode = this.thumbNode;\n                // Bail if the mouse is over the thumb.\n                if (ElementExt.hitTest(thumbNode, mouseX, mouseY)) {\n                    return;\n                }\n                // Fetch the client rect for the thumb.\n                let thumbRect = thumbNode.getBoundingClientRect();\n                // Determine the direction for the page request.\n                let dir;\n                if (this._orientation === 'horizontal') {\n                    dir = mouseX < thumbRect.left ? 'decrement' : 'increment';\n                }\n                else {\n                    dir = mouseY < thumbRect.top ? 'decrement' : 'increment';\n                }\n                // Emit the page requested signal.\n                this._pageRequested.emit(dir);\n                // Finished.\n                return;\n            }\n        };\n        this._value = 0;\n        this._page = 10;\n        this._maximum = 100;\n        this._repeatTimer = -1;\n        this._pressData = null;\n        this._thumbMoved = new Signal(this);\n        this._stepRequested = new Signal(this);\n        this._pageRequested = new Signal(this);\n        this.addClass('lm-ScrollBar');\n        this.setFlag(Widget.Flag.DisallowLayout);\n        // Set the orientation.\n        this._orientation = options.orientation || 'vertical';\n        this.dataset['orientation'] = this._orientation;\n        // Parse the rest of the options.\n        if (options.maximum !== undefined) {\n            this._maximum = Math.max(0, options.maximum);\n        }\n        if (options.page !== undefined) {\n            this._page = Math.max(0, options.page);\n        }\n        if (options.value !== undefined) {\n            this._value = Math.max(0, Math.min(options.value, this._maximum));\n        }\n    }\n    /**\n     * A signal emitted when the user moves the scroll thumb.\n     *\n     * #### Notes\n     * The payload is the current value of the scroll bar.\n     */\n    get thumbMoved() {\n        return this._thumbMoved;\n    }\n    /**\n     * A signal emitted when the user clicks a step button.\n     *\n     * #### Notes\n     * The payload is whether a decrease or increase is requested.\n     */\n    get stepRequested() {\n        return this._stepRequested;\n    }\n    /**\n     * A signal emitted when the user clicks the scroll track.\n     *\n     * #### Notes\n     * The payload is whether a decrease or increase is requested.\n     */\n    get pageRequested() {\n        return this._pageRequested;\n    }\n    /**\n     * Get the orientation of the scroll bar.\n     */\n    get orientation() {\n        return this._orientation;\n    }\n    /**\n     * Set the orientation of the scroll bar.\n     */\n    set orientation(value) {\n        // Do nothing if the orientation does not change.\n        if (this._orientation === value) {\n            return;\n        }\n        // Release the mouse before making changes.\n        this._releaseMouse();\n        // Update the internal orientation.\n        this._orientation = value;\n        this.dataset['orientation'] = value;\n        // Schedule an update the scroll bar.\n        this.update();\n    }\n    /**\n     * Get the current value of the scroll bar.\n     */\n    get value() {\n        return this._value;\n    }\n    /**\n     * Set the current value of the scroll bar.\n     *\n     * #### Notes\n     * The value will be clamped to the range `[0, maximum]`.\n     */\n    set value(value) {\n        // Clamp the value to the allowable range.\n        value = Math.max(0, Math.min(value, this._maximum));\n        // Do nothing if the value does not change.\n        if (this._value === value) {\n            return;\n        }\n        // Update the internal value.\n        this._value = value;\n        // Schedule an update the scroll bar.\n        this.update();\n    }\n    /**\n     * Get the page size of the scroll bar.\n     *\n     * #### Notes\n     * The page size is the amount of visible content in the scrolled\n     * region, expressed in data units. It determines the size of the\n     * scroll bar thumb.\n     */\n    get page() {\n        return this._page;\n    }\n    /**\n     * Set the page size of the scroll bar.\n     *\n     * #### Notes\n     * The page size will be clamped to the range `[0, Infinity]`.\n     */\n    set page(value) {\n        // Clamp the page size to the allowable range.\n        value = Math.max(0, value);\n        // Do nothing if the value does not change.\n        if (this._page === value) {\n            return;\n        }\n        // Update the internal page size.\n        this._page = value;\n        // Schedule an update the scroll bar.\n        this.update();\n    }\n    /**\n     * Get the maximum value of the scroll bar.\n     */\n    get maximum() {\n        return this._maximum;\n    }\n    /**\n     * Set the maximum value of the scroll bar.\n     *\n     * #### Notes\n     * The max size will be clamped to the range `[0, Infinity]`.\n     */\n    set maximum(value) {\n        // Clamp the value to the allowable range.\n        value = Math.max(0, value);\n        // Do nothing if the value does not change.\n        if (this._maximum === value) {\n            return;\n        }\n        // Update the internal values.\n        this._maximum = value;\n        // Clamp the current value to the new range.\n        this._value = Math.min(this._value, value);\n        // Schedule an update the scroll bar.\n        this.update();\n    }\n    /**\n     * The scroll bar decrement button node.\n     *\n     * #### Notes\n     * Modifying this node directly can lead to undefined behavior.\n     */\n    get decrementNode() {\n        return this.node.getElementsByClassName('lm-ScrollBar-button')[0];\n    }\n    /**\n     * The scroll bar increment button node.\n     *\n     * #### Notes\n     * Modifying this node directly can lead to undefined behavior.\n     */\n    get incrementNode() {\n        return this.node.getElementsByClassName('lm-ScrollBar-button')[1];\n    }\n    /**\n     * The scroll bar track node.\n     *\n     * #### Notes\n     * Modifying this node directly can lead to undefined behavior.\n     */\n    get trackNode() {\n        return this.node.getElementsByClassName('lm-ScrollBar-track')[0];\n    }\n    /**\n     * The scroll bar thumb node.\n     *\n     * #### Notes\n     * Modifying this node directly can lead to undefined behavior.\n     */\n    get thumbNode() {\n        return this.node.getElementsByClassName('lm-ScrollBar-thumb')[0];\n    }\n    /**\n     * Handle the DOM events for the scroll bar.\n     *\n     * @param event - The DOM event sent to the scroll bar.\n     *\n     * #### Notes\n     * This method implements the DOM `EventListener` interface and is\n     * called in response to events on the scroll bar's DOM node.\n     *\n     * This should not be called directly by user code.\n     */\n    handleEvent(event) {\n        switch (event.type) {\n            case 'mousedown':\n                this._evtMouseDown(event);\n                break;\n            case 'mousemove':\n                this._evtMouseMove(event);\n                break;\n            case 'mouseup':\n                this._evtMouseUp(event);\n                break;\n            case 'keydown':\n                this._evtKeyDown(event);\n                break;\n            case 'contextmenu':\n                event.preventDefault();\n                event.stopPropagation();\n                break;\n        }\n    }\n    /**\n     * A method invoked on a 'before-attach' message.\n     */\n    onBeforeAttach(msg) {\n        this.node.addEventListener('mousedown', this);\n        this.update();\n    }\n    /**\n     * A method invoked on an 'after-detach' message.\n     */\n    onAfterDetach(msg) {\n        this.node.removeEventListener('mousedown', this);\n        this._releaseMouse();\n    }\n    /**\n     * A method invoked on an 'update-request' message.\n     */\n    onUpdateRequest(msg) {\n        // Convert the value and page into percentages.\n        let value = (this._value * 100) / this._maximum;\n        let page = (this._page * 100) / (this._page + this._maximum);\n        // Clamp the value and page to the relevant range.\n        value = Math.max(0, Math.min(value, 100));\n        page = Math.max(0, Math.min(page, 100));\n        // Fetch the thumb style.\n        let thumbStyle = this.thumbNode.style;\n        // Update the thumb style for the current orientation.\n        if (this._orientation === 'horizontal') {\n            thumbStyle.top = '';\n            thumbStyle.height = '';\n            thumbStyle.left = `${value}%`;\n            thumbStyle.width = `${page}%`;\n            thumbStyle.transform = `translate(${-value}%, 0%)`;\n        }\n        else {\n            thumbStyle.left = '';\n            thumbStyle.width = '';\n            thumbStyle.top = `${value}%`;\n            thumbStyle.height = `${page}%`;\n            thumbStyle.transform = `translate(0%, ${-value}%)`;\n        }\n    }\n    /**\n     * Handle the `'keydown'` event for the scroll bar.\n     */\n    _evtKeyDown(event) {\n        // Stop all input events during drag.\n        event.preventDefault();\n        event.stopPropagation();\n        // Ignore anything except the `Escape` key.\n        if (event.keyCode !== 27) {\n            return;\n        }\n        // Fetch the previous scroll value.\n        let value = this._pressData ? this._pressData.value : -1;\n        // Release the mouse.\n        this._releaseMouse();\n        // Restore the old scroll value if possible.\n        if (value !== -1) {\n            this._moveThumb(value);\n        }\n    }\n    /**\n     * Handle the `'mousedown'` event for the scroll bar.\n     */\n    _evtMouseDown(event) {\n        // Do nothing if it's not a left mouse press.\n        if (event.button !== 0) {\n            return;\n        }\n        // Send an activate request to the scroll bar. This can be\n        // used by message hooks to activate something relevant.\n        this.activate();\n        // Do nothing if the mouse is already captured.\n        if (this._pressData) {\n            return;\n        }\n        // Find the pressed scroll bar part.\n        let part = Private$2.findPart(this, event.target);\n        // Do nothing if the part is not of interest.\n        if (!part) {\n            return;\n        }\n        // Stop the event propagation.\n        event.preventDefault();\n        event.stopPropagation();\n        // Override the mouse cursor.\n        let override = Drag.overrideCursor('default');\n        // Set up the press data.\n        this._pressData = {\n            part,\n            override,\n            delta: -1,\n            value: -1,\n            mouseX: event.clientX,\n            mouseY: event.clientY\n        };\n        // Add the extra event listeners.\n        document.addEventListener('mousemove', this, true);\n        document.addEventListener('mouseup', this, true);\n        document.addEventListener('keydown', this, true);\n        document.addEventListener('contextmenu', this, true);\n        // Handle a thumb press.\n        if (part === 'thumb') {\n            // Fetch the thumb node.\n            let thumbNode = this.thumbNode;\n            // Fetch the client rect for the thumb.\n            let thumbRect = thumbNode.getBoundingClientRect();\n            // Update the press data delta for the current orientation.\n            if (this._orientation === 'horizontal') {\n                this._pressData.delta = event.clientX - thumbRect.left;\n            }\n            else {\n                this._pressData.delta = event.clientY - thumbRect.top;\n            }\n            // Add the active class to the thumb node.\n            thumbNode.classList.add('lm-mod-active');\n            // Store the current value in the press data.\n            this._pressData.value = this._value;\n            // Finished.\n            return;\n        }\n        // Handle a track press.\n        if (part === 'track') {\n            // Fetch the client rect for the thumb.\n            let thumbRect = this.thumbNode.getBoundingClientRect();\n            // Determine the direction for the page request.\n            let dir;\n            if (this._orientation === 'horizontal') {\n                dir = event.clientX < thumbRect.left ? 'decrement' : 'increment';\n            }\n            else {\n                dir = event.clientY < thumbRect.top ? 'decrement' : 'increment';\n            }\n            // Start the repeat timer.\n            this._repeatTimer = window.setTimeout(this._onRepeat, 350);\n            // Emit the page requested signal.\n            this._pageRequested.emit(dir);\n            // Finished.\n            return;\n        }\n        // Handle a decrement button press.\n        if (part === 'decrement') {\n            // Add the active class to the decrement node.\n            this.decrementNode.classList.add('lm-mod-active');\n            // Start the repeat timer.\n            this._repeatTimer = window.setTimeout(this._onRepeat, 350);\n            // Emit the step requested signal.\n            this._stepRequested.emit('decrement');\n            // Finished.\n            return;\n        }\n        // Handle an increment button press.\n        if (part === 'increment') {\n            // Add the active class to the increment node.\n            this.incrementNode.classList.add('lm-mod-active');\n            // Start the repeat timer.\n            this._repeatTimer = window.setTimeout(this._onRepeat, 350);\n            // Emit the step requested signal.\n            this._stepRequested.emit('increment');\n            // Finished.\n            return;\n        }\n    }\n    /**\n     * Handle the `'mousemove'` event for the scroll bar.\n     */\n    _evtMouseMove(event) {\n        // Do nothing if no drag is in progress.\n        if (!this._pressData) {\n            return;\n        }\n        // Stop the event propagation.\n        event.preventDefault();\n        event.stopPropagation();\n        // Update the mouse position.\n        this._pressData.mouseX = event.clientX;\n        this._pressData.mouseY = event.clientY;\n        // Bail if the thumb is not being dragged.\n        if (this._pressData.part !== 'thumb') {\n            return;\n        }\n        // Get the client rect for the thumb and track.\n        let thumbRect = this.thumbNode.getBoundingClientRect();\n        let trackRect = this.trackNode.getBoundingClientRect();\n        // Fetch the scroll geometry based on the orientation.\n        let trackPos;\n        let trackSpan;\n        if (this._orientation === 'horizontal') {\n            trackPos = event.clientX - trackRect.left - this._pressData.delta;\n            trackSpan = trackRect.width - thumbRect.width;\n        }\n        else {\n            trackPos = event.clientY - trackRect.top - this._pressData.delta;\n            trackSpan = trackRect.height - thumbRect.height;\n        }\n        // Compute the desired value from the scroll geometry.\n        let value = trackSpan === 0 ? 0 : (trackPos * this._maximum) / trackSpan;\n        // Move the thumb to the computed value.\n        this._moveThumb(value);\n    }\n    /**\n     * Handle the `'mouseup'` event for the scroll bar.\n     */\n    _evtMouseUp(event) {\n        // Do nothing if it's not a left mouse release.\n        if (event.button !== 0) {\n            return;\n        }\n        // Stop the event propagation.\n        event.preventDefault();\n        event.stopPropagation();\n        // Release the mouse.\n        this._releaseMouse();\n    }\n    /**\n     * Release the mouse and restore the node states.\n     */\n    _releaseMouse() {\n        // Bail if there is no press data.\n        if (!this._pressData) {\n            return;\n        }\n        // Clear the repeat timer.\n        clearTimeout(this._repeatTimer);\n        this._repeatTimer = -1;\n        // Clear the press data.\n        this._pressData.override.dispose();\n        this._pressData = null;\n        // Remove the extra event listeners.\n        document.removeEventListener('mousemove', this, true);\n        document.removeEventListener('mouseup', this, true);\n        document.removeEventListener('keydown', this, true);\n        document.removeEventListener('contextmenu', this, true);\n        // Remove the active classes from the nodes.\n        this.thumbNode.classList.remove('lm-mod-active');\n        this.decrementNode.classList.remove('lm-mod-active');\n        this.incrementNode.classList.remove('lm-mod-active');\n    }\n    /**\n     * Move the thumb to the specified position.\n     */\n    _moveThumb(value) {\n        // Clamp the value to the allowed range.\n        value = Math.max(0, Math.min(value, this._maximum));\n        // Bail if the value does not change.\n        if (this._value === value) {\n            return;\n        }\n        // Update the internal value.\n        this._value = value;\n        // Schedule an update of the scroll bar.\n        this.update();\n        // Emit the thumb moved signal.\n        this._thumbMoved.emit(value);\n    }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$2;\n(function (Private) {\n    /**\n     * Create the DOM node for a scroll bar.\n     */\n    function createNode() {\n        let node = document.createElement('div');\n        let decrement = document.createElement('div');\n        let increment = document.createElement('div');\n        let track = document.createElement('div');\n        let thumb = document.createElement('div');\n        decrement.className = 'lm-ScrollBar-button';\n        increment.className = 'lm-ScrollBar-button';\n        decrement.dataset['action'] = 'decrement';\n        increment.dataset['action'] = 'increment';\n        track.className = 'lm-ScrollBar-track';\n        thumb.className = 'lm-ScrollBar-thumb';\n        track.appendChild(thumb);\n        node.appendChild(decrement);\n        node.appendChild(track);\n        node.appendChild(increment);\n        return node;\n    }\n    Private.createNode = createNode;\n    /**\n     * Find the scroll bar part which contains the given target.\n     */\n    function findPart(scrollBar, target) {\n        // Test the thumb.\n        if (scrollBar.thumbNode.contains(target)) {\n            return 'thumb';\n        }\n        // Test the track.\n        if (scrollBar.trackNode.contains(target)) {\n            return 'track';\n        }\n        // Test the decrement button.\n        if (scrollBar.decrementNode.contains(target)) {\n            return 'decrement';\n        }\n        // Test the increment button.\n        if (scrollBar.incrementNode.contains(target)) {\n            return 'increment';\n        }\n        // Indicate no match.\n        return null;\n    }\n    Private.findPart = findPart;\n})(Private$2 || (Private$2 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A concrete layout implementation which holds a single widget.\n *\n * #### Notes\n * This class is useful for creating simple container widgets which\n * hold a single child. The child should be positioned with CSS.\n */\nclass SingletonLayout extends Layout {\n    constructor() {\n        super(...arguments);\n        this._widget = null;\n    }\n    /**\n     * Dispose of the resources held by the layout.\n     */\n    dispose() {\n        if (this._widget) {\n            let widget = this._widget;\n            this._widget = null;\n            widget.dispose();\n        }\n        super.dispose();\n    }\n    /**\n     * Get the child widget for the layout.\n     */\n    get widget() {\n        return this._widget;\n    }\n    /**\n     * Set the child widget for the layout.\n     *\n     * #### Notes\n     * Setting the child widget will cause the old child widget to be\n     * automatically disposed. If that is not desired, set the parent\n     * of the old child to `null` before assigning a new child.\n     */\n    set widget(widget) {\n        // Remove the widget from its current parent. This is a no-op\n        // if the widget's parent is already the layout parent widget.\n        if (widget) {\n            widget.parent = this.parent;\n        }\n        // Bail early if the widget does not change.\n        if (this._widget === widget) {\n            return;\n        }\n        // Dispose of the old child widget.\n        if (this._widget) {\n            this._widget.dispose();\n        }\n        // Update the internal widget.\n        this._widget = widget;\n        // Attach the new child widget if needed.\n        if (this.parent && widget) {\n            this.attachWidget(widget);\n        }\n    }\n    /**\n     * Create an iterator over the widgets in the layout.\n     *\n     * @returns A new iterator over the widgets in the layout.\n     */\n    *[Symbol.iterator]() {\n        if (this._widget) {\n            yield this._widget;\n        }\n    }\n    /**\n     * Remove a widget from the layout.\n     *\n     * @param widget - The widget to remove from the layout.\n     *\n     * #### Notes\n     * A widget is automatically removed from the layout when its `parent`\n     * is set to `null`. This method should only be invoked directly when\n     * removing a widget from a layout which has yet to be installed on a\n     * parent widget.\n     *\n     * This method does *not* modify the widget's `parent`.\n     */\n    removeWidget(widget) {\n        // Bail early if the widget does not exist in the layout.\n        if (this._widget !== widget) {\n            return;\n        }\n        // Clear the internal widget.\n        this._widget = null;\n        // If the layout is parented, detach the widget from the DOM.\n        if (this.parent) {\n            this.detachWidget(widget);\n        }\n    }\n    /**\n     * Perform layout initialization which requires the parent widget.\n     */\n    init() {\n        super.init();\n        for (const widget of this) {\n            this.attachWidget(widget);\n        }\n    }\n    /**\n     * Attach a widget to the parent's DOM node.\n     *\n     * @param widget - The widget to attach to the parent.\n     *\n     * #### Notes\n     * This method is called automatically by the single layout at the\n     * appropriate time. It should not be called directly by user code.\n     *\n     * The default implementation adds the widgets's node to the parent's\n     * node at the proper location, and sends the appropriate attach\n     * messages to the widget if the parent is attached to the DOM.\n     *\n     * Subclasses may reimplement this method to control how the widget's\n     * node is added to the parent's node.\n     */\n    attachWidget(widget) {\n        // Send a `'before-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n        }\n        // Add the widget's node to the parent.\n        this.parent.node.appendChild(widget.node);\n        // Send an `'after-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n        }\n    }\n    /**\n     * Detach a widget from the parent's DOM node.\n     *\n     * @param widget - The widget to detach from the parent.\n     *\n     * #### Notes\n     * This method is called automatically by the single layout at the\n     * appropriate time. It should not be called directly by user code.\n     *\n     * The default implementation removes the widget's node from the\n     * parent's node, and sends the appropriate detach messages to the\n     * widget if the parent is attached to the DOM.\n     *\n     * Subclasses may reimplement this method to control how the widget's\n     * node is removed from the parent's node.\n     */\n    detachWidget(widget) {\n        // Send a `'before-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n        }\n        // Remove the widget's node from the parent.\n        this.parent.node.removeChild(widget.node);\n        // Send an `'after-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n        }\n    }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout where visible widgets are stacked atop one another.\n *\n * #### Notes\n * The Z-order of the visible widgets follows their layout order.\n */\nclass StackedLayout extends PanelLayout {\n    constructor(options = {}) {\n        super(options);\n        this._dirty = false;\n        this._items = [];\n        this._box = null;\n        this._hiddenMode =\n            options.hiddenMode !== undefined\n                ? options.hiddenMode\n                : Widget.HiddenMode.Display;\n    }\n    /**\n     * The method for hiding widgets.\n     *\n     * #### Notes\n     * If there is only one child widget, `Display` hiding mode will be used\n     * regardless of this setting.\n     */\n    get hiddenMode() {\n        return this._hiddenMode;\n    }\n    /**\n     * Set the method for hiding widgets.\n     *\n     * #### Notes\n     * If there is only one child widget, `Display` hiding mode will be used\n     * regardless of this setting.\n     */\n    set hiddenMode(v) {\n        if (this._hiddenMode === v) {\n            return;\n        }\n        this._hiddenMode = v;\n        if (this.widgets.length > 1) {\n            this.widgets.forEach(w => {\n                w.hiddenMode = this._hiddenMode;\n            });\n        }\n    }\n    /**\n     * Dispose of the resources held by the layout.\n     */\n    dispose() {\n        // Dispose of the layout items.\n        for (const item of this._items) {\n            item.dispose();\n        }\n        // Clear the layout state.\n        this._box = null;\n        this._items.length = 0;\n        // Dispose of the rest of the layout.\n        super.dispose();\n    }\n    /**\n     * Attach a widget to the parent's DOM node.\n     *\n     * @param index - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to attach to the parent.\n     *\n     * #### Notes\n     * This is a reimplementation of the superclass method.\n     */\n    attachWidget(index, widget) {\n        // Using transform create an additional layer in the pixel pipeline\n        // to limit the number of layer, it is set only if there is more than one widget.\n        if (this._hiddenMode === Widget.HiddenMode.Scale &&\n            this._items.length > 0) {\n            if (this._items.length === 1) {\n                this.widgets[0].hiddenMode = Widget.HiddenMode.Scale;\n            }\n            widget.hiddenMode = Widget.HiddenMode.Scale;\n        }\n        else {\n            widget.hiddenMode = Widget.HiddenMode.Display;\n        }\n        // Create and add a new layout item for the widget.\n        ArrayExt.insert(this._items, index, new LayoutItem(widget));\n        // Send a `'before-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n        }\n        // Add the widget's node to the parent.\n        this.parent.node.appendChild(widget.node);\n        // Send an `'after-attach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n        }\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n    /**\n     * Move a widget in the parent's DOM node.\n     *\n     * @param fromIndex - The previous index of the widget in the layout.\n     *\n     * @param toIndex - The current index of the widget in the layout.\n     *\n     * @param widget - The widget to move in the parent.\n     *\n     * #### Notes\n     * This is a reimplementation of the superclass method.\n     */\n    moveWidget(fromIndex, toIndex, widget) {\n        // Move the layout item for the widget.\n        ArrayExt.move(this._items, fromIndex, toIndex);\n        // Post an update request for the parent widget.\n        this.parent.update();\n    }\n    /**\n     * Detach a widget from the parent's DOM node.\n     *\n     * @param index - The previous index of the widget in the layout.\n     *\n     * @param widget - The widget to detach from the parent.\n     *\n     * #### Notes\n     * This is a reimplementation of the superclass method.\n     */\n    detachWidget(index, widget) {\n        // Remove the layout item for the widget.\n        let item = ArrayExt.removeAt(this._items, index);\n        // Send a `'before-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n        }\n        // Remove the widget's node from the parent.\n        this.parent.node.removeChild(widget.node);\n        // Send an `'after-detach'` message if the parent is attached.\n        if (this.parent.isAttached) {\n            MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n        }\n        // Reset the z-index for the widget.\n        item.widget.node.style.zIndex = '';\n        // Reset the hidden mode for the widget.\n        if (this._hiddenMode === Widget.HiddenMode.Scale) {\n            widget.hiddenMode = Widget.HiddenMode.Display;\n            // Reset the hidden mode for the first widget if necessary.\n            if (this._items.length === 1) {\n                this._items[0].widget.hiddenMode = Widget.HiddenMode.Display;\n            }\n        }\n        // Dispose of the layout item.\n        item.dispose();\n        // Post a fit request for the parent widget.\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'before-show'` message.\n     */\n    onBeforeShow(msg) {\n        super.onBeforeShow(msg);\n        this.parent.update();\n    }\n    /**\n     * A message handler invoked on a `'before-attach'` message.\n     */\n    onBeforeAttach(msg) {\n        super.onBeforeAttach(msg);\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'child-shown'` message.\n     */\n    onChildShown(msg) {\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'child-hidden'` message.\n     */\n    onChildHidden(msg) {\n        this.parent.fit();\n    }\n    /**\n     * A message handler invoked on a `'resize'` message.\n     */\n    onResize(msg) {\n        if (this.parent.isVisible) {\n            this._update(msg.width, msg.height);\n        }\n    }\n    /**\n     * A message handler invoked on an `'update-request'` message.\n     */\n    onUpdateRequest(msg) {\n        if (this.parent.isVisible) {\n            this._update(-1, -1);\n        }\n    }\n    /**\n     * A message handler invoked on a `'fit-request'` message.\n     */\n    onFitRequest(msg) {\n        if (this.parent.isAttached) {\n            this._fit();\n        }\n    }\n    /**\n     * Fit the layout to the total size required by the widgets.\n     */\n    _fit() {\n        // Set up the computed minimum size.\n        let minW = 0;\n        let minH = 0;\n        // Update the computed minimum size.\n        for (let i = 0, n = this._items.length; i < n; ++i) {\n            // Fetch the item.\n            let item = this._items[i];\n            // Ignore hidden items.\n            if (item.isHidden) {\n                continue;\n            }\n            // Update the size limits for the item.\n            item.fit();\n            // Update the computed minimum size.\n            minW = Math.max(minW, item.minWidth);\n            minH = Math.max(minH, item.minHeight);\n        }\n        // Update the box sizing and add it to the computed min size.\n        let box = (this._box = ElementExt.boxSizing(this.parent.node));\n        minW += box.horizontalSum;\n        minH += box.verticalSum;\n        // Update the parent's min size constraints.\n        let style = this.parent.node.style;\n        style.minWidth = `${minW}px`;\n        style.minHeight = `${minH}px`;\n        // Set the dirty flag to ensure only a single update occurs.\n        this._dirty = true;\n        // Notify the ancestor that it should fit immediately. This may\n        // cause a resize of the parent, fulfilling the required update.\n        if (this.parent.parent) {\n            MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n        }\n        // If the dirty flag is still set, the parent was not resized.\n        // Trigger the required update on the parent widget immediately.\n        if (this._dirty) {\n            MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n        }\n    }\n    /**\n     * Update the layout position and size of the widgets.\n     *\n     * The parent offset dimensions should be `-1` if unknown.\n     */\n    _update(offsetWidth, offsetHeight) {\n        // Clear the dirty flag to indicate the update occurred.\n        this._dirty = false;\n        // Compute the visible item count.\n        let nVisible = 0;\n        for (let i = 0, n = this._items.length; i < n; ++i) {\n            nVisible += +!this._items[i].isHidden;\n        }\n        // Bail early if there are no visible items to layout.\n        if (nVisible === 0) {\n            return;\n        }\n        // Measure the parent if the offset dimensions are unknown.\n        if (offsetWidth < 0) {\n            offsetWidth = this.parent.node.offsetWidth;\n        }\n        if (offsetHeight < 0) {\n            offsetHeight = this.parent.node.offsetHeight;\n        }\n        // Ensure the parent box sizing data is computed.\n        if (!this._box) {\n            this._box = ElementExt.boxSizing(this.parent.node);\n        }\n        // Compute the actual layout bounds adjusted for border and padding.\n        let top = this._box.paddingTop;\n        let left = this._box.paddingLeft;\n        let width = offsetWidth - this._box.horizontalSum;\n        let height = offsetHeight - this._box.verticalSum;\n        // Update the widget stacking order and layout geometry.\n        for (let i = 0, n = this._items.length; i < n; ++i) {\n            // Fetch the item.\n            let item = this._items[i];\n            // Ignore hidden items.\n            if (item.isHidden) {\n                continue;\n            }\n            // Set the z-index for the widget.\n            item.widget.node.style.zIndex = `${i}`;\n            // Update the item geometry.\n            item.update(left, top, width, height);\n        }\n    }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A panel where visible widgets are stacked atop one another.\n *\n * #### Notes\n * This class provides a convenience wrapper around a {@link StackedLayout}.\n */\nclass StackedPanel extends Panel {\n    /**\n     * Construct a new stacked panel.\n     *\n     * @param options - The options for initializing the panel.\n     */\n    constructor(options = {}) {\n        super({ layout: Private$1.createLayout(options) });\n        this._widgetRemoved = new Signal(this);\n        this.addClass('lm-StackedPanel');\n    }\n    /**\n     * The method for hiding widgets.\n     *\n     * #### Notes\n     * If there is only one child widget, `Display` hiding mode will be used\n     * regardless of this setting.\n     */\n    get hiddenMode() {\n        return this.layout.hiddenMode;\n    }\n    /**\n     * Set the method for hiding widgets.\n     *\n     * #### Notes\n     * If there is only one child widget, `Display` hiding mode will be used\n     * regardless of this setting.\n     */\n    set hiddenMode(v) {\n        this.layout.hiddenMode = v;\n    }\n    /**\n     * A signal emitted when a widget is removed from a stacked panel.\n     */\n    get widgetRemoved() {\n        return this._widgetRemoved;\n    }\n    /**\n     * A message handler invoked on a `'child-added'` message.\n     */\n    onChildAdded(msg) {\n        msg.child.addClass('lm-StackedPanel-child');\n    }\n    /**\n     * A message handler invoked on a `'child-removed'` message.\n     */\n    onChildRemoved(msg) {\n        msg.child.removeClass('lm-StackedPanel-child');\n        this._widgetRemoved.emit(msg.child);\n    }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$1;\n(function (Private) {\n    /**\n     * Create a stacked layout for the given panel options.\n     */\n    function createLayout(options) {\n        return options.layout || new StackedLayout();\n    }\n    Private.createLayout = createLayout;\n})(Private$1 || (Private$1 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which combines a `TabBar` and a `StackedPanel`.\n *\n * #### Notes\n * This is a simple panel which handles the common case of a tab bar\n * placed next to a content area. The selected tab controls the widget\n * which is shown in the content area.\n *\n * For use cases which require more control than is provided by this\n * panel, the `TabBar` widget may be used independently.\n */\nclass TabPanel extends Widget {\n    /**\n     * Construct a new tab panel.\n     *\n     * @param options - The options for initializing the tab panel.\n     */\n    constructor(options = {}) {\n        super();\n        this._currentChanged = new Signal(this);\n        this._addRequested = new Signal(this);\n        this.addClass('lm-TabPanel');\n        // Create the tab bar and stacked panel.\n        this.tabBar = new TabBar(options);\n        this.tabBar.addClass('lm-TabPanel-tabBar');\n        this.stackedPanel = new StackedPanel();\n        this.stackedPanel.addClass('lm-TabPanel-stackedPanel');\n        // Connect the tab bar signal handlers.\n        this.tabBar.tabMoved.connect(this._onTabMoved, this);\n        this.tabBar.currentChanged.connect(this._onCurrentChanged, this);\n        this.tabBar.tabCloseRequested.connect(this._onTabCloseRequested, this);\n        this.tabBar.tabActivateRequested.connect(this._onTabActivateRequested, this);\n        this.tabBar.addRequested.connect(this._onTabAddRequested, this);\n        // Connect the stacked panel signal handlers.\n        this.stackedPanel.widgetRemoved.connect(this._onWidgetRemoved, this);\n        // Get the data related to the placement.\n        this._tabPlacement = options.tabPlacement || 'top';\n        let direction = Private.directionFromPlacement(this._tabPlacement);\n        let orientation = Private.orientationFromPlacement(this._tabPlacement);\n        // Configure the tab bar for the placement.\n        this.tabBar.orientation = orientation;\n        this.tabBar.dataset['placement'] = this._tabPlacement;\n        // Create the box layout.\n        let layout = new BoxLayout({ direction, spacing: 0 });\n        // Set the stretch factors for the child widgets.\n        BoxLayout.setStretch(this.tabBar, 0);\n        BoxLayout.setStretch(this.stackedPanel, 1);\n        // Add the child widgets to the layout.\n        layout.addWidget(this.tabBar);\n        layout.addWidget(this.stackedPanel);\n        // Install the layout on the tab panel.\n        this.layout = layout;\n    }\n    /**\n     * A signal emitted when the current tab is changed.\n     *\n     * #### Notes\n     * This signal is emitted when the currently selected tab is changed\n     * either through user or programmatic interaction.\n     *\n     * Notably, this signal is not emitted when the index of the current\n     * tab changes due to tabs being inserted, removed, or moved. It is\n     * only emitted when the actual current tab node is changed.\n     */\n    get currentChanged() {\n        return this._currentChanged;\n    }\n    /**\n     * Get the index of the currently selected tab.\n     *\n     * #### Notes\n     * This will be `-1` if no tab is selected.\n     */\n    get currentIndex() {\n        return this.tabBar.currentIndex;\n    }\n    /**\n     * Set the index of the currently selected tab.\n     *\n     * #### Notes\n     * If the index is out of range, it will be set to `-1`.\n     */\n    set currentIndex(value) {\n        this.tabBar.currentIndex = value;\n    }\n    /**\n     * Get the currently selected widget.\n     *\n     * #### Notes\n     * This will be `null` if there is no selected tab.\n     */\n    get currentWidget() {\n        let title = this.tabBar.currentTitle;\n        return title ? title.owner : null;\n    }\n    /**\n     * Set the currently selected widget.\n     *\n     * #### Notes\n     * If the widget is not in the panel, it will be set to `null`.\n     */\n    set currentWidget(value) {\n        this.tabBar.currentTitle = value ? value.title : null;\n    }\n    /**\n     * Get the whether the tabs are movable by the user.\n     *\n     * #### Notes\n     * Tabs can always be moved programmatically.\n     */\n    get tabsMovable() {\n        return this.tabBar.tabsMovable;\n    }\n    /**\n     * Set the whether the tabs are movable by the user.\n     *\n     * #### Notes\n     * Tabs can always be moved programmatically.\n     */\n    set tabsMovable(value) {\n        this.tabBar.tabsMovable = value;\n    }\n    /**\n     * Get the whether the add button is enabled.\n     *\n     */\n    get addButtonEnabled() {\n        return this.tabBar.addButtonEnabled;\n    }\n    /**\n     * Set the whether the add button is enabled.\n     *\n     */\n    set addButtonEnabled(value) {\n        this.tabBar.addButtonEnabled = value;\n    }\n    /**\n     * Get the tab placement for the tab panel.\n     *\n     * #### Notes\n     * This controls the position of the tab bar relative to the content.\n     */\n    get tabPlacement() {\n        return this._tabPlacement;\n    }\n    /**\n     * Set the tab placement for the tab panel.\n     *\n     * #### Notes\n     * This controls the position of the tab bar relative to the content.\n     */\n    set tabPlacement(value) {\n        // Bail if the placement does not change.\n        if (this._tabPlacement === value) {\n            return;\n        }\n        // Update the internal value.\n        this._tabPlacement = value;\n        // Get the values related to the placement.\n        let direction = Private.directionFromPlacement(value);\n        let orientation = Private.orientationFromPlacement(value);\n        // Configure the tab bar for the placement.\n        this.tabBar.orientation = orientation;\n        this.tabBar.dataset['placement'] = value;\n        // Update the layout direction.\n        this.layout.direction = direction;\n    }\n    /**\n     * A signal emitted when the add button on a tab bar is clicked.\n     *\n     */\n    get addRequested() {\n        return this._addRequested;\n    }\n    /**\n     * A read-only array of the widgets in the panel.\n     */\n    get widgets() {\n        return this.stackedPanel.widgets;\n    }\n    /**\n     * Add a widget to the end of the tab panel.\n     *\n     * @param widget - The widget to add to the tab panel.\n     *\n     * #### Notes\n     * If the widget is already contained in the panel, it will be moved.\n     *\n     * The widget's `title` is used to populate the tab.\n     */\n    addWidget(widget) {\n        this.insertWidget(this.widgets.length, widget);\n    }\n    /**\n     * Insert a widget into the tab panel at a specified index.\n     *\n     * @param index - The index at which to insert the widget.\n     *\n     * @param widget - The widget to insert into to the tab panel.\n     *\n     * #### Notes\n     * If the widget is already contained in the panel, it will be moved.\n     *\n     * The widget's `title` is used to populate the tab.\n     */\n    insertWidget(index, widget) {\n        if (widget !== this.currentWidget) {\n            widget.hide();\n        }\n        this.stackedPanel.insertWidget(index, widget);\n        this.tabBar.insertTab(index, widget.title);\n        widget.node.setAttribute('role', 'tabpanel');\n        let renderer = this.tabBar.renderer;\n        if (renderer instanceof TabBar.Renderer) {\n            let tabId = renderer.createTabKey({\n                title: widget.title,\n                current: false,\n                zIndex: 0\n            });\n            widget.node.setAttribute('aria-labelledby', tabId);\n        }\n    }\n    /**\n     * Handle the `currentChanged` signal from the tab bar.\n     */\n    _onCurrentChanged(sender, args) {\n        // Extract the previous and current title from the args.\n        let { previousIndex, previousTitle, currentIndex, currentTitle } = args;\n        // Extract the widgets from the titles.\n        let previousWidget = previousTitle ? previousTitle.owner : null;\n        let currentWidget = currentTitle ? currentTitle.owner : null;\n        // Hide the previous widget.\n        if (previousWidget) {\n            previousWidget.hide();\n        }\n        // Show the current widget.\n        if (currentWidget) {\n            currentWidget.show();\n        }\n        // Emit the `currentChanged` signal for the tab panel.\n        this._currentChanged.emit({\n            previousIndex,\n            previousWidget,\n            currentIndex,\n            currentWidget\n        });\n        // Flush the message loop on IE and Edge to prevent flicker.\n        if (Platform.IS_EDGE || Platform.IS_IE) {\n            MessageLoop.flush();\n        }\n    }\n    /**\n     * Handle the `tabAddRequested` signal from the tab bar.\n     */\n    _onTabAddRequested(sender, args) {\n        this._addRequested.emit(sender);\n    }\n    /**\n     * Handle the `tabActivateRequested` signal from the tab bar.\n     */\n    _onTabActivateRequested(sender, args) {\n        args.title.owner.activate();\n    }\n    /**\n     * Handle the `tabCloseRequested` signal from the tab bar.\n     */\n    _onTabCloseRequested(sender, args) {\n        args.title.owner.close();\n    }\n    /**\n     * Handle the `tabMoved` signal from the tab bar.\n     */\n    _onTabMoved(sender, args) {\n        this.stackedPanel.insertWidget(args.toIndex, args.title.owner);\n    }\n    /**\n     * Handle the `widgetRemoved` signal from the stacked panel.\n     */\n    _onWidgetRemoved(sender, widget) {\n        widget.node.removeAttribute('role');\n        widget.node.removeAttribute('aria-labelledby');\n        this.tabBar.removeTab(widget.title);\n    }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n    /**\n     * Convert a tab placement to tab bar orientation.\n     */\n    function orientationFromPlacement(plc) {\n        return placementToOrientationMap[plc];\n    }\n    Private.orientationFromPlacement = orientationFromPlacement;\n    /**\n     * Convert a tab placement to a box layout direction.\n     */\n    function directionFromPlacement(plc) {\n        return placementToDirectionMap[plc];\n    }\n    Private.directionFromPlacement = directionFromPlacement;\n    /**\n     * A mapping of tab placement to tab bar orientation.\n     */\n    const placementToOrientationMap = {\n        top: 'horizontal',\n        left: 'vertical',\n        right: 'vertical',\n        bottom: 'horizontal'\n    };\n    /**\n     * A mapping of tab placement to box layout direction.\n     */\n    const placementToDirectionMap = {\n        top: 'top-to-bottom',\n        left: 'left-to-right',\n        right: 'right-to-left',\n        bottom: 'bottom-to-top'\n    };\n})(Private || (Private = {}));\n\nexport { AccordionLayout, AccordionPanel, BoxEngine, BoxLayout, BoxPanel, BoxSizer, CommandPalette, ContextMenu, DockLayout, DockPanel, FocusTracker, GridLayout, Layout, LayoutItem, Menu, MenuBar, Panel, PanelLayout, ScrollBar, SingletonLayout, SplitLayout, SplitPanel, StackedLayout, StackedPanel, TabBar, TabPanel, Title, Widget };\n//# sourceMappingURL=index.es6.js.map\n","\n      import API from \"!../../../@jupyterlab/builder/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../@jupyterlab/builder/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../@jupyterlab/builder/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../@jupyterlab/builder/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../@jupyterlab/builder/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../@jupyterlab/builder/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../@jupyterlab/builder/node_modules/css-loader/dist/cjs.js!./index.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../@jupyterlab/builder/node_modules/css-loader/dist/cjs.js!./index.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\nimport './index.css';\n"],"names":[],"sourceRoot":""}